Bug 596762: Allow specification of differing IPC preferences for each architecture in a universal binary. r=josh a=blocking-b7
authorScott Greenlay <sgreenlay@mozilla.com>
Fri, 24 Sep 2010 10:32:02 -0400
changeset 54619 d52c4d0882738391f79e16d9e09f63a1e717a7ff
parent 54618 8b84f9ba869c9c425ebe64deb8c4707b734b28c2
child 54620 867555c131e48dbd66f9e3e4f02018d446983e9e
child 54628 7326bc0446a562878241d6fff5da9f10e6fbf7a9
push id15958
push userjosh@mozilla.com
push dateFri, 24 Sep 2010 14:32:33 +0000
treeherdermozilla-central@d52c4d088273 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjosh, blocking-b7
bugs596762
milestone2.0b7pre
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 596762: Allow specification of differing IPC preferences for each architecture in a universal binary. r=josh a=blocking-b7
browser/app/profile/firefox.js
layout/tools/reftest/reftest.js
modules/plugin/base/src/nsNPAPIPlugin.cpp
modules/plugin/test/mochitest/Makefile.in
modules/plugin/test/mochitest/test_GCrace.html
modules/plugin/test/mochitest/test_bug479979.xul
modules/plugin/test/mochitest/test_crash_nested_loop.html
modules/plugin/test/mochitest/test_crash_notify.xul
modules/plugin/test/mochitest/test_crash_notify_no_report.xul
modules/plugin/test/mochitest/test_crash_submit.xul
modules/plugin/test/mochitest/test_crashing.html
modules/plugin/test/mochitest/test_crashing2.html
modules/plugin/test/mochitest/test_hanging.html
modules/plugin/test/reftest/reftest.list
testing/mochitest/tests/SimpleTest/SimpleTest.js
testing/testsuite-targets.mk
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -933,24 +933,22 @@ pref("browser.sessionstore.interval", 60
 pref("toolbar.customization.usesheet", true);
 #else
 pref("toolbar.customization.usesheet", false);
 #endif
 
 // The default for this pref reflects whether the build is capable of IPC.
 // (Turning it on in a no-IPC build will have no effect.)
 #ifdef XP_MACOSX
-// OSX still has only partial support for IPC.  Note that the PowerPC
-// and x86 builds must generate identical copies of this file, so we
-// can't make the prefs indicate that IPC is not available at all in
-// PowerPC builds.
-pref("dom.ipc.plugins.enabled", false);
-// These plug-ins will run OOP by default
-pref("dom.ipc.plugins.enabled.flash player.plugin", true);
-pref("dom.ipc.plugins.enabled.javaplugin2_npapi.plugin", true);
+// i386 ipc preferences
+pref("dom.ipc.plugins.enabled.i386", false);
+pref("dom.ipc.plugins.enabled.i386.flash player.plugin", true);
+pref("dom.ipc.plugins.enabled.i386.javaplugin2_npapi.plugin", true);
+// x86_64 ipc preferences
+pref("dom.ipc.plugins.enabled.x86_64", true);
 #elifdef MOZ_IPC
 pref("dom.ipc.plugins.enabled", true);
 #else
 pref("dom.ipc.plugins.enabled", false);
 #endif
 
 #ifdef XP_WIN
 #ifndef WINCE
--- a/layout/tools/reftest/reftest.js
+++ b/layout/tools/reftest/reftest.js
@@ -436,16 +436,40 @@ function BuildConditionSandbox(aURL) {
       __exposedProps__: {
         getBoolPref: 'r',
         getIntPref: 'r',
       },
       _prefs:      prefs,
       getBoolPref: function(p) { return this._prefs.getBoolPref(p); },
       getIntPref:  function(p) { return this._prefs.getIntPref(p); }
     }
+    
+    sandbox.areOOPPenabled = function () {
+        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+        var prefservice = Components.classes["@mozilla.org/preferences-service;1"]
+                            .getService(CI.nsIPrefBranch);
+
+        var pref = false;
+
+        if (navigator.platform.indexOf("Mac") == 0) {
+            var xulRuntime = Components.classes["@mozilla.org/xre/app-info;1"]
+                                       .getService(CI.nsIXULAppInfo)
+                                       .QueryInterface(CI.nsIXULRuntime);
+            if (xulRuntime.XPCOMABI.match(/x86-/)) {
+                pref = prefservice.getBoolPref("dom.ipc.plugins.enabled.i386");
+            }
+            else if (xulRuntime.XPCOMABI.match(/x86_64-/)) {
+                pref = prefservice.getBoolPref("dom.ipc.plugins.enabled.x86_64");
+            }
+        }
+        else {
+            pref = prefservice.getBoolPref("dom.ipc.plugins.enabled");
+        }
+        return pref;
+    };
 
     dump("REFTEST INFO | Dumping JSON representation of sandbox \n");
     dump("REFTEST INFO | " + JSON.stringify(sandbox) + " \n");
 
     return sandbox;
 }
 
 function ReadTopManifest(aFileURL)
--- a/modules/plugin/base/src/nsNPAPIPlugin.cpp
+++ b/modules/plugin/base/src/nsNPAPIPlugin.cpp
@@ -368,17 +368,27 @@ nsNPAPIPlugin::RunPluginOOP(const nsPlug
 
   nsCAutoString prefFile(aPluginTag->mFullPath.get());
   PRInt32 slashPos = prefFile.RFindCharInSet("/\\");
   if (kNotFound == slashPos)
     return PR_FALSE;
   prefFile.Cut(0, slashPos + 1);
   ToLowerCase(prefFile);
 
+#ifdef XP_MACOSX
+#if defined(__i386__)
+  nsCAutoString prefGroupKey("dom.ipc.plugins.enabled.i386.");
+#elif defined(__x86_64__)
+  nsCAutoString prefGroupKey("dom.ipc.plugins.enabled.x86_64.");
+#elif defined(__ppc__)
+  nsCAutoString prefGroupKey("dom.ipc.plugins.enabled.ppc.");
+#endif
+#else
   nsCAutoString prefGroupKey("dom.ipc.plugins.enabled.");
+#endif
 
   PRUint32 prefCount;
   char** prefNames;
   nsresult rv = prefs->GetChildList(prefGroupKey.get(),
                                     &prefCount, &prefNames);
 
   PRBool oopPluginsEnabled = PR_FALSE;
   PRBool prefSet = PR_FALSE;
@@ -408,17 +418,27 @@ nsNPAPIPlugin::RunPluginOOP(const nsPlug
         break;
       }
     }
     NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(prefCount, prefNames);
   }
 
   if (!prefSet) {
     oopPluginsEnabled = PR_FALSE;
+#ifdef XP_MACOSX
+#if defined(__i386__)
+    prefs->GetBoolPref("dom.ipc.plugins.enabled.i386", &oopPluginsEnabled);
+#elif defined(__x86_64__)
+    prefs->GetBoolPref("dom.ipc.plugins.enabled.x86_64", &oopPluginsEnabled);
+#elif defined(__ppc__)
+    prefs->GetBoolPref("dom.ipc.plugins.enabled.ppc", &oopPluginsEnabled);
+#endif
+#else
     prefs->GetBoolPref("dom.ipc.plugins.enabled", &oopPluginsEnabled);
+#endif
   }
 
   return oopPluginsEnabled;
 }
 
 #endif // MOZ_IPC
 
 inline PluginLibrary*
--- a/modules/plugin/test/mochitest/Makefile.in
+++ b/modules/plugin/test/mochitest/Makefile.in
@@ -98,38 +98,44 @@ include $(topsrcdir)/config/rules.mk
 
 ifeq ($(OS_ARCH),WINNT)
 _MOCHITEST_FILES += \
   test_windowed_invalidate.html \
   $(NULL)
 endif
 
 _MOCHICHROME_FILES = \
-  test_bug479979.xul \
   test_npruntime.xul   \
   test_privatemode.xul \
   test_wmode.xul \
   $(NULL)
 
 # Temporarily disable the tests on Linux, see bug 573290 and bug 583591.
 ifneq ($(OS_ARCH),Linux)
+# Temporarily disable the tests on Mac OS X, see bug 599087.
+ifneq (cocoa,$(MOZ_WIDGET_TOOLKIT))
 ifdef MOZ_CRASHREPORTER
 _MOCHICHROME_FILES += \
   test_crash_notify.xul \
   test_crash_notify_no_report.xul \
   test_crash_submit.xul \
   $(NULL)
 endif
 endif
+endif
 
-# Temporarily disable this test on Mac OS X.
+# Temporarily disable these tests on Mac OS X, see bug 599076 and bug 599267.
 ifneq (cocoa,$(MOZ_WIDGET_TOOLKIT))
 _MOCHITEST_FILES += \
   test_crashing.html \
   $(NULL)
+
+_MOCHICHROME_FILES += \
+  test_bug479979.xul \
+  $(NULL)
 endif
 
 ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
 _MOCHICHROME_FILES += \
   test_convertpoint.xul \
   $(NULL)
 
 _MOCHITEST_FILES += \
--- a/modules/plugin/test/mochitest/test_GCrace.html
+++ b/modules/plugin/test/mochitest/test_GCrace.html
@@ -11,20 +11,17 @@
   <p id="display"></p>
 
   <embed id="p" type="application/x-test" wmode="window"></embed>
 
   <script class="testbody" type="application/javascript">
     SimpleTest.waitForExplicitFinish();
 
     function start() {
-      netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
-      var prefs = Components.classes['@mozilla.org/preferences-service;1']
-        .getService(Components.interfaces.nsIPrefBranch);
-      if (!prefs.getBoolPref('dom.ipc.plugins.enabled')) {
+      if (!SimpleTest.areOOPPenabled()) {
         ok(true, "Skipping this test when IPC plugins are not enabled.");
         SimpleTest.finish();
         return;
       }
       else {
         setTimeout(checkGCRace, 1000);
       }
     }
--- a/modules/plugin/test/mochitest/test_bug479979.xul
+++ b/modules/plugin/test/mochitest/test_bug479979.xul
@@ -1,16 +1,16 @@
 <?xml version="1.0"?>
 <?xml-stylesheet href="chrome://global/skin" type="text/css"?>
 <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
                  type="text/css"?>
-<window title="NPAPI Private Mode Tests"
+<window title="NPAPI Set Undefined Value Test"
   xmlns:html="http://www.w3.org/1999/xhtml"
   xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <title>NPAPI Private Mode Tests</title>
+  <title>NPAPI Set Undefined Value Test</title>
   <script type="application/javascript" 
    src="chrome://mochikit/content/MochiKit/packed.js"></script>
   <script type="application/javascript"
           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
 <body xmlns="http://www.w3.org/1999/xhtml" onload="runTests()">
 <embed id="plugin1" type="application/x-test" width="300" height="300"></embed>
 </body>
 <script class="testbody" type="application/javascript">
--- a/modules/plugin/test/mochitest/test_crash_nested_loop.html
+++ b/modules/plugin/test/mochitest/test_crash_nested_loop.html
@@ -7,20 +7,17 @@
   <iframe id="iframe1" src="crashing_subpage.html" width="600" height="600"></iframe>
 
   <script class="testbody" type="application/javascript">
   SimpleTest.waitForExplicitFinish();
 
   var iframe = document.getElementById('iframe1');
 
   window.frameLoaded = function frameLoaded_toCrash() {
-    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
-    var prefs = Components.classes['@mozilla.org/preferences-service;1']
-      .getService(Components.interfaces.nsIPrefBranch);
-    if (!prefs.getBoolPref('dom.ipc.plugins.enabled')) {
+    if (!SimpleTest.areOOPPenabled()) {
       ok(true, "Skipping this test when IPC plugins are not enabled.");
       SimpleTest.finish();
       return;
     }
 
     var p = iframe.contentDocument.getElementById('plugin1');
 
     // This test is for bug 550026, which is inherently nondeterministic.
--- a/modules/plugin/test/mochitest/test_crash_notify.xul
+++ b/modules/plugin/test/mochitest/test_crash_notify.xul
@@ -87,20 +87,17 @@ function onPluginCrashed(aEvent) {
   var os = Components.classes["@mozilla.org/observer-service;1"].
            getService(Components.interfaces.nsIObserverService);
   os.removeObserver(testObserver, "plugin-crashed");
 
   SimpleTest.finish();
 }
 
 function runTests() {
-  netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
-  var prefs = Components.classes['@mozilla.org/preferences-service;1']
-    .getService(Components.interfaces.nsIPrefBranch);
-  if (!prefs.getBoolPref('dom.ipc.plugins.enabled')) {
+  if (!SimpleTest.areOOPPenabled()) {
     ok(true, "Skipping this test when IPC plugins are not enabled.");
     SimpleTest.finish();
     return;
   }
 
   var os = Components.classes["@mozilla.org/observer-service;1"].
            getService(Components.interfaces.nsIObserverService);
   os.addObserver(testObserver, "plugin-crashed", true);
--- a/modules/plugin/test/mochitest/test_crash_notify_no_report.xul
+++ b/modules/plugin/test/mochitest/test_crash_notify_no_report.xul
@@ -89,20 +89,17 @@ function onPluginCrashed(aEvent) {
   // re-set MOZ_CRASHREPORTER_NO_REPORT
   let env = Components.classes["@mozilla.org/process/environment;1"]
                       .getService(Components.interfaces.nsIEnvironment);
   env.set("MOZ_CRASHREPORTER_NO_REPORT", "1");
   SimpleTest.finish();
 }
 
 function runTests() {
-  netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
-  var prefs = Components.classes['@mozilla.org/preferences-service;1']
-    .getService(Components.interfaces.nsIPrefBranch);
-  if (!prefs.getBoolPref('dom.ipc.plugins.enabled')) {
+  if (!SimpleTest.areOOPPenabled()) {
     ok(true, "Skipping this test when IPC plugins are not enabled.");
     SimpleTest.finish();
     return;
   }
   // the test harness will have set MOZ_CRASHREPORTER_NO_REPORT,
   // ensure that we can change the setting and have our minidumps
   // wind up in Crash Reports/pending
   let env = Components.classes["@mozilla.org/process/environment;1"]
--- a/modules/plugin/test/mochitest/test_crash_submit.xul
+++ b/modules/plugin/test/mochitest/test_crash_submit.xul
@@ -88,19 +88,17 @@ function onPluginCrashed(aEvent) {
 
   let pleaseLink = document.getAnonymousElementByAttribute(
                             aEvent.target, "class", "pleaseSubmitLink");
   // try to submit this report
   sendMouseEvent({type:'click'}, pleaseLink, window);
 }
 
 function runTests() {
-  var prefs = Components.classes['@mozilla.org/preferences-service;1']
-    .getService(Components.interfaces.nsIPrefBranch);
-  if (!prefs.getBoolPref('dom.ipc.plugins.enabled')) {
+  if (!SimpleTest.areOOPPenabled()) {
     ok(true, "Skipping this test when IPC plugins are not enabled.");
     SimpleTest.finish();
     return;
   }
   // the test harness will have set MOZ_CRASHREPORTER_NO_REPORT,
   // ensure that we can change the setting and have our minidumps
   // wind up in Crash Reports/pending
   let env = Components.classes["@mozilla.org/process/environment;1"]
--- a/modules/plugin/test/mochitest/test_crashing.html
+++ b/modules/plugin/test/mochitest/test_crashing.html
@@ -7,20 +7,17 @@
   <iframe id="iframe1" src="crashing_subpage.html" width="600" height="600"></iframe>
 
   <script class="testbody" type="application/javascript">
   SimpleTest.waitForExplicitFinish();
 
   var iframe = document.getElementById('iframe1');
 
   window.frameLoaded = function frameLoaded_toCrash() {
-    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
-    var prefs = Components.classes['@mozilla.org/preferences-service;1']
-      .getService(Components.interfaces.nsIPrefBranch);
-    if (!prefs.getBoolPref('dom.ipc.plugins.enabled')) {
+    if (!SimpleTest.areOOPPenabled()) {
       ok(true, "Skipping this test when IPC plugins are not enabled.");
       SimpleTest.finish();
       return;
     }
 
     var p = iframe.contentDocument.getElementById('plugin1');
 
     p.setColor("FFFF00FF");
--- a/modules/plugin/test/mochitest/test_crashing2.html
+++ b/modules/plugin/test/mochitest/test_crashing2.html
@@ -7,20 +7,17 @@
   <iframe id="iframe1" src="about:blank" width="600" height="600"></iframe>
 
   <script class="testbody" type="application/javascript">
   SimpleTest.waitForExplicitFinish();
 
   var iframe = document.getElementById('iframe1');
 
   function mainLoaded() {
-    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
-    var prefs = Components.classes['@mozilla.org/preferences-service;1']
-      .getService(Components.interfaces.nsIPrefBranch);
-    if (!prefs.getBoolPref('dom.ipc.plugins.enabled')) {
+    if (!SimpleTest.areOOPPenabled()) {
       ok(true, "Skipping this test when IPC plugins are not enabled.");
       SimpleTest.finish();
       return;
     }
 
     var p = iframe.contentDocument.createElement('embed');
     p.setAttribute('id', 'plugin1');
     p.setAttribute('type', 'application/x-test');
--- a/modules/plugin/test/mochitest/test_hanging.html
+++ b/modules/plugin/test/mochitest/test_hanging.html
@@ -7,25 +7,26 @@
   <iframe id="iframe1" src="crashing_subpage.html" width="600" height="600"></iframe>
 
   <script class="testbody" type="application/javascript">
   SimpleTest.waitForExplicitFinish();
 
   var iframe = document.getElementById('iframe1');
 
   window.frameLoaded = function frameLoaded_toCrash() {
-    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
-    var prefs = Components.classes['@mozilla.org/preferences-service;1']
-      .getService(Components.interfaces.nsIPrefBranch);
-    if (!prefs.getBoolPref('dom.ipc.plugins.enabled')) {
+    if (!SimpleTest.areOOPPenabled()) {
       ok(true, "Skipping this test when IPC plugins are not enabled.");
       SimpleTest.finish();
       return;
     }
 
+    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
+    var prefs = Components.classes['@mozilla.org/preferences-service;1']
+        .getService(Components.interfaces.nsIPrefBranch);
+
     // the default timeout is annoying high for mochitest runs
     var timeoutPref = "dom.ipc.plugins.timeoutSecs";
     prefs.setIntPref(timeoutPref, 5);
 
     var p = iframe.contentDocument.getElementById('plugin1');
 
     p.setColor("FFFF00FF");
 
--- a/modules/plugin/test/reftest/reftest.list
+++ b/modules/plugin/test/reftest/reftest.list
@@ -1,12 +1,12 @@
 # basic sanity checking
 random-if(!haveTestPlugin) != plugin-sanity.html about:blank
 fails-if(!haveTestPlugin) == plugin-sanity.html div-sanity.html
 fails-if(!haveTestPlugin) == plugin-alpha-zindex.html div-alpha-zindex.html
 fails-if(!haveTestPlugin) == plugin-alpha-opacity.html div-alpha-opacity.html
 fails-if(!haveTestPlugin) == windowless-clipping-1.html windowless-clipping-1-ref.html
 fails-if(!haveTestPlugin) == border-padding-1.html border-padding-1-ref.html
 fails-if(!haveTestPlugin) == border-padding-2.html border-padding-2-ref.html
-asserts-if(http.oscpu.match(/Linux/),0-1) random-if(d2d) fails-if(!haveTestPlugin) skip-if(!prefs.getBoolPref("dom.ipc.plugins.enabled")) == pluginproblemui-direction-1.html pluginproblemui-direction-1-ref.html # assertion is bug 585394
-asserts-if(http.oscpu.match(/Linux/),0-1) fails-if(!haveTestPlugin) skip-if(!prefs.getBoolPref("dom.ipc.plugins.enabled")) == pluginproblemui-direction-2.html pluginproblemui-direction-2-ref.html # assertion is bug 585394
+asserts-if(http.oscpu.match(/Linux/),0-1) random-if(d2d) random-if(cocoaWidget) fails-if(!haveTestPlugin) skip-if(!areOOPPenabled()) == pluginproblemui-direction-1.html pluginproblemui-direction-1-ref.html # assertion is bug 585394
+asserts-if(http.oscpu.match(/Linux/),0-1) fails-if(!haveTestPlugin) skip-if(!areOOPPenabled()) == pluginproblemui-direction-2.html pluginproblemui-direction-2-ref.html # assertion is bug 585394
 # Disabled for now to investigate Windows/Linux test failures
 # fails-if(!haveTestPlugin) == border-padding-3.html border-padding-3-ref.html
--- a/testing/mochitest/tests/SimpleTest/SimpleTest.js
+++ b/testing/mochitest/tests/SimpleTest/SimpleTest.js
@@ -27,16 +27,43 @@ if (typeof(parent) != "undefined" && par
 }
 
 //Simple test to see if we are running in e10s IPC
 var ipcMode = false;
 if (parentRunner) {
   ipcMode = parentRunner.ipcMode;
 }
 
+/**
+ * Check for OOPP preferences
+**/
+SimpleTest.areOOPPenabled = function () {
+    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+    var prefservice = Components.classes["@mozilla.org/preferences-service;1"]
+                        .getService(Components.interfaces.nsIPrefBranch);
+    
+    var pref = false;
+    
+    if (navigator.platform.indexOf("Mac") == 0) {
+        var xulRuntime = Components.classes["@mozilla.org/xre/app-info;1"]
+                                   .getService(Components.interfaces.nsIXULAppInfo)
+                                   .QueryInterface(Components.interfaces.nsIXULRuntime);
+        if (xulRuntime.XPCOMABI.match(/x86-/)) {
+            pref = prefservice.getBoolPref("dom.ipc.plugins.enabled.i386");
+        }
+        else if (xulRuntime.XPCOMABI.match(/x86_64-/)) {
+            pref = prefservice.getBoolPref("dom.ipc.plugins.enabled.x86_64");
+        }
+    }
+    else {
+        pref = prefservice.getBoolPref("dom.ipc.plugins.enabled");
+    }
+    return pref;
+};
+
 // Check to see if the TestRunner is present and has logging
 if (parentRunner) {
     SimpleTest._logEnabled = parentRunner.logEnabled;
 }
 
 SimpleTest._tests = [];
 SimpleTest._stopOnLoad = true;
 
--- a/testing/testsuite-targets.mk
+++ b/testing/testsuite-targets.mk
@@ -78,17 +78,27 @@ mochitest-chrome:
 	$(RUN_MOCHITEST) --chrome
 	$(CHECK_TEST_ERROR)
 
 mochitest-a11y:
 	$(RUN_MOCHITEST) --a11y
 	$(CHECK_TEST_ERROR)
 
 mochitest-ipcplugins:
+#ifdef XP_MACOSX
+#if defined(__i386__)
+	$(RUN_MOCHITEST) --setpref=dom.ipc.plugins.enabled.i386=true --test-path=modules/plugin/test
+#elif defined(__x86_64__)
+	$(RUN_MOCHITEST) --setpref=dom.ipc.plugins.enabled.x86_64=true --test-path=modules/plugin/test
+#elif defined(__ppc__)
+	$(RUN_MOCHITEST) --setpref=dom.ipc.plugins.enabled.ppc=true --test-path=modules/plugin/test
+#endif
+#else
 	$(RUN_MOCHITEST) --setpref=dom.ipc.plugins.enabled=true --test-path=modules/plugin/test
+#endif
 	$(CHECK_TEST_ERROR)
 
 # Usage: |make [EXTRA_TEST_ARGS=...] *test|.
 RUN_REFTEST = rm -f ./$@.log && $(PYTHON) _tests/reftest/runreftest.py \
   $(SYMBOLS_PATH) $(EXTRA_TEST_ARGS) $(1) | tee ./$@.log
 
 reftest: TEST_PATH=layout/reftests/reftest.list
 reftest: