Merge inbound to m-c a=merge
authorWes Kocher <wkocher@mozilla.com>
Mon, 22 Sep 2014 18:54:14 -0700
changeset 206591 790f41c631ccb2f8b87d6193e116007efeaf2a2e
parent 206575 4cdc4b9e583231ab88fb69b81da46af971dfa50f (current diff)
parent 206590 2d6ffa903e38c1ca0088ce41e78c10c38f38ea11 (diff)
child 206618 afd45d7642b8d6df401be5e2d7114c7a5d092b53
child 206641 dabaf6918efd97a603d27ab10459e9f2eb029a7f
child 206686 2127293d9b1325605566073a28fdf7e20da72c3e
push id27532
push userkwierso@gmail.com
push dateTue, 23 Sep 2014 01:57:26 +0000
treeherdermozilla-central@790f41c631cc [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone35.0a1
first release with
nightly linux32
790f41c631cc / 35.0a1 / 20140923030204 / files
nightly linux64
790f41c631cc / 35.0a1 / 20140923030204 / files
nightly mac
790f41c631cc / 35.0a1 / 20140923030204 / files
nightly win32
790f41c631cc / 35.0a1 / 20140923030204 / files
nightly win64
790f41c631cc / 35.0a1 / 20140923030204 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge inbound to m-c a=merge
dom/canvas/test/webgl-conformance/_mochitest.ini
dom/canvas/test/webgl-conformance/moz.build
dom/canvas/test/webgl-mochitest/mochitest.ini
dom/canvas/test/webgl-mochitest/moz.build
xpcom/tests/TestScriptable.idl
--- a/browser/devtools/webconsole/test/browser_webconsole_bug_585956_console_trace.js
+++ b/browser/devtools/webconsole/test/browser_webconsole_bug_585956_console_trace.js
@@ -28,19 +28,19 @@ function test() {
     let node = [...result.matched][0];
     ok(node, "found trace log node");
 
     let obj = node._messageObject;
     ok(obj, "console.trace message object");
 
     // The expected stack trace object.
     let stacktrace = [
-      { filename: TEST_URI, functionName: "window.foobar585956c", language: 2, lineNumber: 9 },
-      { filename: TEST_URI, functionName: "foobar585956b", language: 2, lineNumber: 14 },
-      { filename: TEST_URI, functionName: "foobar585956a", language: 2, lineNumber: 18 },
-      { filename: TEST_URI, functionName: "", language: 2, lineNumber: 21 }
+      { columnNumber: 2, filename: TEST_URI, functionName: "window.foobar585956c", language: 2, lineNumber: 9 },
+      { columnNumber: 9, filename: TEST_URI, functionName: "foobar585956b", language: 2, lineNumber: 14 },
+      { columnNumber: 9, filename: TEST_URI, functionName: "foobar585956a", language: 2, lineNumber: 18 },
+      { columnNumber: 0, filename: TEST_URI, functionName: "", language: 2, lineNumber: 21 }
     ];
 
     ok(obj._stacktrace, "found stacktrace object");
     is(obj._stacktrace.toSource(), stacktrace.toSource(), "stacktrace is correct");
     isnot(node.textContent.indexOf("bug-585956"), -1, "found file name");
   }
 }
--- a/browser/devtools/webconsole/test/browser_webconsole_console_trace_duplicates.js
+++ b/browser/devtools/webconsole/test/browser_webconsole_console_trace_duplicates.js
@@ -8,22 +8,32 @@ function test() {
   Task.spawn(runner).then(finishTest);
 
   function* runner() {
     const {tab} = yield loadTab("data:text/html;charset=utf8,<p>hello");
     const hud = yield openConsole(tab);
 
     content.location = TEST_URI;
 
+    // NB: Now that stack frames include a column number multiple invocations
+    //     on the same line are considered unique. ie:
+    //       |foo(); foo();|
+    //     will generate two distinct trace entries.
     yield waitForMessages({
       webconsole: hud,
       messages: [{
         name: "console.trace output for foo1()",
         text: "foo1()",
-        repeats: 2,
+        consoleTrace: {
+          file: "test-bug_939783_console_trace_duplicates.html",
+          fn: "foo3()",
+        },
+      }, {
+        name: "console.trace output for foo1()",
+        text: "foo1()",
         consoleTrace: {
           file: "test-bug_939783_console_trace_duplicates.html",
           fn: "foo3()",
         },
       }, {
         name: "console.trace output for foo1b()",
         text: "foo1b()",
         consoleTrace: {
--- a/build/automationutils.py
+++ b/build/automationutils.py
@@ -207,17 +207,19 @@ def processSingleLeakFile(leakLogFileNam
                       r"(?P<size>-?\d+)\s+(?P<bytesLeaked>-?\d+)\s+"
                       r"-?\d+\s+(?P<numLeaked>-?\d+)")
 
   processString = " %s process:" % processType
   crashedOnPurpose = False
   totalBytesLeaked = None
   logAsWarning = False
   leakAnalysis = []
+  leakedObjectAnalysis = []
   leakedObjectNames = []
+  recordLeakedObjects = False
   with open(leakLogFileName, "r") as leaks:
     for line in leaks:
       if line.find("purposefully crash") > -1:
         crashedOnPurpose = True
       matches = lineRe.match(line)
       if not matches:
         # eg: the leak table header row
         log.info(line.rstrip())
@@ -227,26 +229,43 @@ def processSingleLeakFile(leakLogFileNam
       bytesLeaked = int(matches.group("bytesLeaked"))
       numLeaked = int(matches.group("numLeaked"))
       # Output the raw line from the leak log table if it is the TOTAL row,
       # or is for an object row that has been leaked.
       if numLeaked != 0 or name == "TOTAL":
         log.info(line.rstrip())
       # Analyse the leak log, but output later or it will interrupt the leak table
       if name == "TOTAL":
-        totalBytesLeaked = bytesLeaked
+        # Multiple default processes can end up writing their bloat views into a single
+        # log, particularly on B2G. Eventually, these should be split into multiple
+        # logs (bug 1068869), but for now, we report the largest leak.
+        if totalBytesLeaked != None:
+          leakAnalysis.append("WARNING | leakcheck |%s multiple BloatView byte totals found"
+                              % processString)
+        else:
+          totalBytesLeaked = 0
+        if bytesLeaked > totalBytesLeaked:
+          totalBytesLeaked = bytesLeaked
+          # Throw out the information we had about the previous bloat view.
+          leakedObjectNames = []
+          leakedObjectAnalysis = []
+          recordLeakedObjects = True
+        else:
+          recordLeakedObjects = False
       if size < 0 or bytesLeaked < 0 or numLeaked < 0:
         leakAnalysis.append("TEST-UNEXPECTED-FAIL | leakcheck |%s negative leaks caught!"
                             % processString)
         logAsWarning = True
         continue
-      if name != "TOTAL" and numLeaked != 0:
+      if name != "TOTAL" and numLeaked != 0 and recordLeakedObjects:
         leakedObjectNames.append(name)
-        leakAnalysis.append("TEST-INFO | leakcheck |%s leaked %d %s (%s bytes)"
-                            % (processString, numLeaked, name, bytesLeaked))
+        leakedObjectAnalysis.append("TEST-INFO | leakcheck |%s leaked %d %s (%s bytes)"
+                                    % (processString, numLeaked, name, bytesLeaked))
+
+  leakAnalysis.extend(leakedObjectAnalysis)
   if logAsWarning:
     log.warning('\n'.join(leakAnalysis))
   else:
     log.info('\n'.join(leakAnalysis))
 
   logAsWarning = False
 
   if totalBytesLeaked is None:
--- a/content/media/AudioSink.cpp
+++ b/content/media/AudioSink.cpp
@@ -20,16 +20,19 @@ extern PRLogModuleInfo* gMediaDecoderLog
       SINK_LOG(msg, ##__VA_ARGS__); \
     }                                             \
   PR_END_MACRO
 #else
 #define SINK_LOG(msg, ...)
 #define SINK_LOG_V(msg, ...)
 #endif
 
+// The amount of audio frames that is used to fuzz rounding errors.
+static const int64_t AUDIO_FUZZ_FRAMES = 1;
+
 AudioSink::AudioSink(MediaDecoderStateMachine* aStateMachine,
                      int64_t aStartTime, AudioInfo aInfo, dom::AudioChannel aChannel)
   : mStateMachine(aStateMachine)
   , mStartTime(aStartTime)
   , mWritten(0)
   , mInfo(aInfo)
   , mChannel(aChannel)
   , mVolume(1.0)
@@ -157,17 +160,17 @@ AudioSink::AudioLoop()
     CheckedInt64 playedFrames = UsecsToFrames(mStartTime, mInfo.mRate) + mWritten;
 
     CheckedInt64 missingFrames = sampleTime - playedFrames;
     if (!missingFrames.isValid() || !sampleTime.isValid()) {
       NS_WARNING("Int overflow adding in AudioLoop");
       break;
     }
 
-    if (missingFrames.value() > 0) {
+    if (missingFrames.value() > AUDIO_FUZZ_FRAMES) {
       // The next audio chunk begins some time after the end of the last chunk
       // we pushed to the audio hardware. We must push silence into the audio
       // hardware so that the next audio chunk begins playback at the correct
       // time.
       missingFrames = std::min<int64_t>(UINT32_MAX, missingFrames.value());
       mWritten += PlaySilence(static_cast<uint32_t>(missingFrames.value()));
     } else {
       mWritten += PlayFromAudioQueue();
--- a/dom/base/Console.cpp
+++ b/dom/base/Console.cpp
@@ -759,16 +759,22 @@ StackFrameToStackEntry(nsIStackFrame* aS
   NS_ENSURE_SUCCESS(rv, rv);
 
   int32_t lineNumber;
   rv = aStackFrame->GetLineNumber(&lineNumber);
   NS_ENSURE_SUCCESS(rv, rv);
 
   aStackEntry.mLineNumber = lineNumber;
 
+  int32_t columnNumber;
+  rv = aStackFrame->GetColumnNumber(&columnNumber);
+  NS_ENSURE_SUCCESS(rv, rv);
+
+  aStackEntry.mColumnNumber = columnNumber;
+
   rv = aStackFrame->GetName(aStackEntry.mFunctionName);
   NS_ENSURE_SUCCESS(rv, rv);
 
   aStackEntry.mLanguage = aLanguage;
   return NS_OK;
 }
 
 static
@@ -1057,16 +1063,17 @@ Console::ProcessCallData(ConsoleCallData
     // If we are in a JSM, the window doesn't exist.
     event.mID.Value().SetAsString() = NS_LITERAL_STRING("jsm");
     event.mInnerID.Value().SetAsString() = frame.mFilename;
   }
 
   event.mLevel = aData->mMethodString;
   event.mFilename = frame.mFilename;
   event.mLineNumber = frame.mLineNumber;
+  event.mColumnNumber = frame.mColumnNumber;
   event.mFunctionName = frame.mFunctionName;
   event.mTimeStamp = aData->mTimeStamp;
   event.mPrivate = aData->mPrivate;
 
   switch (aData->mMethodName) {
     case MethodLog:
     case MethodInfo:
     case MethodWarn:
--- a/dom/bindings/Exceptions.cpp
+++ b/dom/bindings/Exceptions.cpp
@@ -199,16 +199,17 @@ public:
   StackFrame(uint32_t aLanguage,
              const char* aFilename,
              const char* aFunctionName,
              int32_t aLineNumber,
              nsIStackFrame* aCaller);
 
   StackFrame()
     : mLineno(0)
+    , mColNo(0)
     , mLanguage(nsIProgrammingLanguage::UNKNOWN)
   {
   }
 
   static already_AddRefed<nsIStackFrame>
   CreateStackFrameLocation(uint32_t aLanguage,
                            const char* aFilename,
                            const char* aFunctionName,
@@ -223,20 +224,27 @@ protected:
   }
 
   virtual nsresult GetLineno(int32_t* aLineNo)
   {
     *aLineNo = mLineno;
     return NS_OK;
   }
 
+  virtual nsresult GetColNo(int32_t* aColNo)
+  {
+    *aColNo = mColNo;
+    return NS_OK;
+  }
+
   nsCOMPtr<nsIStackFrame> mCaller;
   nsString mFilename;
   nsString mFunname;
   int32_t mLineno;
+  int32_t mColNo;
   uint32_t mLanguage;
 };
 
 StackFrame::StackFrame(uint32_t aLanguage,
                        const char* aFilename,
                        const char* aFunctionName,
                        int32_t aLineNumber,
                        nsIStackFrame* aCaller)
@@ -281,35 +289,38 @@ public:
   NS_IMETHOD GetFormattedStack(nsAString& aStack) MOZ_OVERRIDE;
 
 protected:
   virtual bool IsJSFrame() const MOZ_OVERRIDE {
     return true;
   }
 
   virtual nsresult GetLineno(int32_t* aLineNo) MOZ_OVERRIDE;
+  virtual nsresult GetColNo(int32_t* aColNo) MOZ_OVERRIDE;
 
 private:
   virtual ~JSStackFrame();
 
   JS::Heap<JSObject*> mStack;
   nsString mFormattedStack;
 
   bool mFilenameInitialized;
   bool mFunnameInitialized;
   bool mLinenoInitialized;
+  bool mColNoInitialized;
   bool mCallerInitialized;
   bool mFormattedStackInitialized;
 };
 
 JSStackFrame::JSStackFrame(JS::Handle<JSObject*> aStack)
   : mStack(aStack)
   , mFilenameInitialized(false)
   , mFunnameInitialized(false)
   , mLinenoInitialized(false)
+  , mColNoInitialized(false)
   , mCallerInitialized(false)
   , mFormattedStackInitialized(false)
 {
   MOZ_ASSERT(mStack);
 
   mozilla::HoldJSObjects(this);
   mLineno = 0;
   mLanguage = nsIProgrammingLanguage::JAVASCRIPT;
@@ -460,16 +471,45 @@ JSStackFrame::GetLineno(int32_t* aLineNo
 }
 
 /* readonly attribute int32_t lineNumber; */
 NS_IMETHODIMP StackFrame::GetLineNumber(int32_t* aLineNumber)
 {
   return GetLineno(aLineNumber);
 }
 
+// virtual
+nsresult
+JSStackFrame::GetColNo(int32_t* aColNo)
+{
+  // We can get called after unlink; in that case we can't do much
+  // about producing a useful value.
+  if (!mColNoInitialized && mStack) {
+    ThreadsafeAutoJSContext cx;
+    JS::Rooted<JSObject*> stack(cx, mStack);
+    JS::ExposeObjectToActiveJS(mStack);
+    JSAutoCompartment ac(cx, stack);
+    JS::Rooted<JS::Value> colVal(cx);
+    if (!JS_GetProperty(cx, stack, "column", &colVal) ||
+        !colVal.isNumber()) {
+      return NS_ERROR_UNEXPECTED;
+    }
+    mColNo = colVal.toNumber();
+    mColNoInitialized = true;
+  }
+
+  return StackFrame::GetColNo(aColNo);
+}
+
+/* readonly attribute int32_t columnNumber; */
+NS_IMETHODIMP StackFrame::GetColumnNumber(int32_t* aColumnNumber)
+{
+  return GetColNo(aColumnNumber);
+}
+
 /* readonly attribute AUTF8String sourceLine; */
 NS_IMETHODIMP StackFrame::GetSourceLine(nsACString& aSourceLine)
 {
   aSourceLine.Truncate();
   return NS_OK;
 }
 
 /* readonly attribute nsIStackFrame caller; */
new file mode 100644
--- /dev/null
+++ b/dom/canvas/test/_webgl-conformance.ini
@@ -0,0 +1,839 @@
+# This is a GENERATED FILE. Do not edit it directly.
+# Regenerated it by using `python generate-wrapper-and-manifest.py`.
+# Mark skipped tests in mochitest-errata.ini.
+# Mark failing tests in mochi-single.html.
+
+[DEFAULT]
+skip-if = e10s || os == 'b2g' || ((os == 'linux') && (buildapp == 'b2g'))
+
+support-files = webgl-conformance/mochi-single.html
+                webgl-conformance/mochi-wrapper.css
+                webgl-conformance/always-fail.html
+                webgl-conformance/conformance/00_readme.txt
+                webgl-conformance/conformance/00_test_list.txt
+                webgl-conformance/conformance/LICENSE_CHROMIUM
+                webgl-conformance/conformance/attribs/00_test_list.txt
+                webgl-conformance/conformance/attribs/gl-enable-vertex-attrib.html
+                webgl-conformance/conformance/attribs/gl-vertex-attrib-zero-issues.html
+                webgl-conformance/conformance/attribs/gl-vertex-attrib.html
+                webgl-conformance/conformance/attribs/gl-vertexattribpointer-offsets.html
+                webgl-conformance/conformance/attribs/gl-vertexattribpointer.html
+                webgl-conformance/conformance/buffers/00_test_list.txt
+                webgl-conformance/conformance/buffers/buffer-bind-test.html
+                webgl-conformance/conformance/buffers/buffer-data-array-buffer.html
+                webgl-conformance/conformance/buffers/index-validation-copies-indices.html
+                webgl-conformance/conformance/buffers/index-validation-crash-with-buffer-sub-data.html
+                webgl-conformance/conformance/buffers/index-validation-verifies-too-many-indices.html
+                webgl-conformance/conformance/buffers/index-validation-with-resized-buffer.html
+                webgl-conformance/conformance/buffers/index-validation.html
+                webgl-conformance/conformance/canvas/00_test_list.txt
+                webgl-conformance/conformance/canvas/buffer-offscreen-test.html
+                webgl-conformance/conformance/canvas/buffer-preserve-test.html
+                webgl-conformance/conformance/canvas/canvas-test.html
+                webgl-conformance/conformance/canvas/canvas-zero-size.html
+                webgl-conformance/conformance/canvas/drawingbuffer-static-canvas-test.html
+                webgl-conformance/conformance/canvas/drawingbuffer-test.html
+                webgl-conformance/conformance/canvas/viewport-unchanged-upon-resize.html
+                webgl-conformance/conformance/context/00_test_list.txt
+                webgl-conformance/conformance/context/constants.html
+                webgl-conformance/conformance/context/context-attribute-preserve-drawing-buffer.html
+                webgl-conformance/conformance/context/context-attributes-alpha-depth-stencil-antialias.html
+                webgl-conformance/conformance/context/context-lost-restored.html
+                webgl-conformance/conformance/context/context-lost.html
+                webgl-conformance/conformance/context/context-type-test.html
+                webgl-conformance/conformance/context/incorrect-context-object-behaviour.html
+                webgl-conformance/conformance/context/methods.html
+                webgl-conformance/conformance/context/premultiplyalpha-test.html
+                webgl-conformance/conformance/context/resource-sharing-test.html
+                webgl-conformance/conformance/extensions/00_test_list.txt
+                webgl-conformance/conformance/extensions/ext-sRGB.html
+                webgl-conformance/conformance/extensions/ext-shader-texture-lod.html
+                webgl-conformance/conformance/extensions/ext-texture-filter-anisotropic.html
+                webgl-conformance/conformance/extensions/oes-standard-derivatives.html
+                webgl-conformance/conformance/extensions/oes-texture-float.html
+                webgl-conformance/conformance/extensions/oes-vertex-array-object.html
+                webgl-conformance/conformance/extensions/webgl-compressed-texture-etc1.html
+                webgl-conformance/conformance/extensions/webgl-compressed-texture-s3tc.html
+                webgl-conformance/conformance/extensions/webgl-debug-renderer-info.html
+                webgl-conformance/conformance/extensions/webgl-debug-shaders.html
+                webgl-conformance/conformance/extensions/webgl-depth-texture.html
+                webgl-conformance/conformance/glsl/00_test_list.txt
+                webgl-conformance/conformance/glsl/functions/00_test_list.txt
+                webgl-conformance/conformance/glsl/functions/glsl-function-abs.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-acos.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-asin.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-atan-xy.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-atan.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-ceil.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-clamp-float.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-clamp-gentype.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-cos.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-cross.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-distance.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-dot.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-faceforward.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-floor.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-fract.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-length.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-lessThan.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-max-float.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-max-gentype.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-min-float.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-min-gentype.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-mix-float.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-mix-gentype.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-mod-float.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-mod-gentype.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-normalize.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-reflect.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-refract.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-sign.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-sin.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-smoothstep-float.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-smoothstep-gentype.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-step-float.html
+                webgl-conformance/conformance/glsl/functions/glsl-function-step-gentype.html
+                webgl-conformance/conformance/glsl/functions/glsl-function.html
+                webgl-conformance/conformance/glsl/implicit/00_test_list.txt
+                webgl-conformance/conformance/glsl/implicit/add_int_float.vert.html
+                webgl-conformance/conformance/glsl/implicit/add_int_mat2.vert.html
+                webgl-conformance/conformance/glsl/implicit/add_int_mat3.vert.html
+                webgl-conformance/conformance/glsl/implicit/add_int_mat4.vert.html
+                webgl-conformance/conformance/glsl/implicit/add_int_vec2.vert.html
+                webgl-conformance/conformance/glsl/implicit/add_int_vec3.vert.html
+                webgl-conformance/conformance/glsl/implicit/add_int_vec4.vert.html
+                webgl-conformance/conformance/glsl/implicit/add_ivec2_vec2.vert.html
+                webgl-conformance/conformance/glsl/implicit/add_ivec3_vec3.vert.html
+                webgl-conformance/conformance/glsl/implicit/add_ivec4_vec4.vert.html
+                webgl-conformance/conformance/glsl/implicit/assign_int_to_float.vert.html
+                webgl-conformance/conformance/glsl/implicit/assign_ivec2_to_vec2.vert.html
+                webgl-conformance/conformance/glsl/implicit/assign_ivec3_to_vec3.vert.html
+                webgl-conformance/conformance/glsl/implicit/assign_ivec4_to_vec4.vert.html
+                webgl-conformance/conformance/glsl/implicit/construct_struct.vert.html
+                webgl-conformance/conformance/glsl/implicit/divide_int_float.vert.html
+                webgl-conformance/conformance/glsl/implicit/divide_int_mat2.vert.html
+                webgl-conformance/conformance/glsl/implicit/divide_int_mat3.vert.html
+                webgl-conformance/conformance/glsl/implicit/divide_int_mat4.vert.html
+                webgl-conformance/conformance/glsl/implicit/divide_int_vec2.vert.html
+                webgl-conformance/conformance/glsl/implicit/divide_int_vec3.vert.html
+                webgl-conformance/conformance/glsl/implicit/divide_int_vec4.vert.html
+                webgl-conformance/conformance/glsl/implicit/divide_ivec2_vec2.vert.html
+                webgl-conformance/conformance/glsl/implicit/divide_ivec3_vec3.vert.html
+                webgl-conformance/conformance/glsl/implicit/divide_ivec4_vec4.vert.html
+                webgl-conformance/conformance/glsl/implicit/equal_int_float.vert.html
+                webgl-conformance/conformance/glsl/implicit/equal_ivec2_vec2.vert.html
+                webgl-conformance/conformance/glsl/implicit/equal_ivec3_vec3.vert.html
+                webgl-conformance/conformance/glsl/implicit/equal_ivec4_vec4.vert.html
+                webgl-conformance/conformance/glsl/implicit/function_int_float.vert.html
+                webgl-conformance/conformance/glsl/implicit/function_ivec2_vec2.vert.html
+                webgl-conformance/conformance/glsl/implicit/function_ivec3_vec3.vert.html
+                webgl-conformance/conformance/glsl/implicit/function_ivec4_vec4.vert.html
+                webgl-conformance/conformance/glsl/implicit/greater_than.vert.html
+                webgl-conformance/conformance/glsl/implicit/greater_than_equal.vert.html
+                webgl-conformance/conformance/glsl/implicit/less_than.vert.html
+                webgl-conformance/conformance/glsl/implicit/less_than_equal.vert.html
+                webgl-conformance/conformance/glsl/implicit/multiply_int_float.vert.html
+                webgl-conformance/conformance/glsl/implicit/multiply_int_mat2.vert.html
+                webgl-conformance/conformance/glsl/implicit/multiply_int_mat3.vert.html
+                webgl-conformance/conformance/glsl/implicit/multiply_int_mat4.vert.html
+                webgl-conformance/conformance/glsl/implicit/multiply_int_vec2.vert.html
+                webgl-conformance/conformance/glsl/implicit/multiply_int_vec3.vert.html
+                webgl-conformance/conformance/glsl/implicit/multiply_int_vec4.vert.html
+                webgl-conformance/conformance/glsl/implicit/multiply_ivec2_vec2.vert.html
+                webgl-conformance/conformance/glsl/implicit/multiply_ivec3_vec3.vert.html
+                webgl-conformance/conformance/glsl/implicit/multiply_ivec4_vec4.vert.html
+                webgl-conformance/conformance/glsl/implicit/not_equal_int_float.vert.html
+                webgl-conformance/conformance/glsl/implicit/not_equal_ivec2_vec2.vert.html
+                webgl-conformance/conformance/glsl/implicit/not_equal_ivec3_vec3.vert.html
+                webgl-conformance/conformance/glsl/implicit/not_equal_ivec4_vec4.vert.html
+                webgl-conformance/conformance/glsl/implicit/subtract_int_float.vert.html
+                webgl-conformance/conformance/glsl/implicit/subtract_int_mat2.vert.html
+                webgl-conformance/conformance/glsl/implicit/subtract_int_mat3.vert.html
+                webgl-conformance/conformance/glsl/implicit/subtract_int_mat4.vert.html
+                webgl-conformance/conformance/glsl/implicit/subtract_int_vec2.vert.html
+                webgl-conformance/conformance/glsl/implicit/subtract_int_vec3.vert.html
+                webgl-conformance/conformance/glsl/implicit/subtract_int_vec4.vert.html
+                webgl-conformance/conformance/glsl/implicit/subtract_ivec2_vec2.vert.html
+                webgl-conformance/conformance/glsl/implicit/subtract_ivec3_vec3.vert.html
+                webgl-conformance/conformance/glsl/implicit/subtract_ivec4_vec4.vert.html
+                webgl-conformance/conformance/glsl/implicit/ternary_int_float.vert.html
+                webgl-conformance/conformance/glsl/implicit/ternary_ivec2_vec2.vert.html
+                webgl-conformance/conformance/glsl/implicit/ternary_ivec3_vec3.vert.html
+                webgl-conformance/conformance/glsl/implicit/ternary_ivec4_vec4.vert.html
+                webgl-conformance/conformance/glsl/matrices/00_test_list.txt
+                webgl-conformance/conformance/glsl/matrices/glsl-mat4-to-mat3.html
+                webgl-conformance/conformance/glsl/misc/00_test_list.txt
+                webgl-conformance/conformance/glsl/misc/attrib-location-length-limits.html
+                webgl-conformance/conformance/glsl/misc/embedded-struct-definitions-forbidden.html
+                webgl-conformance/conformance/glsl/misc/glsl-2types-of-textures-on-same-unit.html
+                webgl-conformance/conformance/glsl/misc/glsl-function-nodes.html
+                webgl-conformance/conformance/glsl/misc/glsl-long-variable-names.html
+                webgl-conformance/conformance/glsl/misc/glsl-vertex-branch.html
+                webgl-conformance/conformance/glsl/misc/include.vs
+                webgl-conformance/conformance/glsl/misc/non-ascii-comments.vert.html
+                webgl-conformance/conformance/glsl/misc/non-ascii.vert.html
+                webgl-conformance/conformance/glsl/misc/re-compile-re-link.html
+                webgl-conformance/conformance/glsl/misc/shader-with-256-character-identifier.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-257-character-identifier.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-_webgl-identifier.vert.html
+                webgl-conformance/conformance/glsl/misc/shader-with-arbitrary-indexing.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-arbitrary-indexing.vert.html
+                webgl-conformance/conformance/glsl/misc/shader-with-attrib-array.vert.html
+                webgl-conformance/conformance/glsl/misc/shader-with-attrib-struct.vert.html
+                webgl-conformance/conformance/glsl/misc/shader-with-clipvertex.vert.html
+                webgl-conformance/conformance/glsl/misc/shader-with-comma-assignment.html
+                webgl-conformance/conformance/glsl/misc/shader-with-comma-conditional-assignment.html
+                webgl-conformance/conformance/glsl/misc/shader-with-conditional-scoping.html
+                webgl-conformance/conformance/glsl/misc/shader-with-default-precision.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-default-precision.vert.html
+                webgl-conformance/conformance/glsl/misc/shader-with-define-line-continuation.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-dfdx-no-ext.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-dfdx.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-do-scoping.html
+                webgl-conformance/conformance/glsl/misc/shader-with-error-directive.html
+                webgl-conformance/conformance/glsl/misc/shader-with-explicit-int-cast.vert.html
+                webgl-conformance/conformance/glsl/misc/shader-with-float-return-value.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-for-loop.html
+                webgl-conformance/conformance/glsl/misc/shader-with-for-scoping.html
+                webgl-conformance/conformance/glsl/misc/shader-with-frag-depth.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-function-recursion.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-function-scoped-struct.html
+                webgl-conformance/conformance/glsl/misc/shader-with-functional-scoping.html
+                webgl-conformance/conformance/glsl/misc/shader-with-glcolor.vert.html
+                webgl-conformance/conformance/glsl/misc/shader-with-gles-1.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-gles-symbol.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-glprojectionmatrix.vert.html
+                webgl-conformance/conformance/glsl/misc/shader-with-hex-int-constant-macro.html
+                webgl-conformance/conformance/glsl/misc/shader-with-implicit-vec3-to-vec4-cast.vert.html
+                webgl-conformance/conformance/glsl/misc/shader-with-include.vert.html
+                webgl-conformance/conformance/glsl/misc/shader-with-int-return-value.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-invalid-identifier.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-ivec2-return-value.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-ivec3-return-value.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-ivec4-return-value.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-limited-indexing.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-line-directive.html
+                webgl-conformance/conformance/glsl/misc/shader-with-long-line.html
+                webgl-conformance/conformance/glsl/misc/shader-with-non-ascii-error.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-precision.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-quoted-error.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-undefined-preprocessor-symbol.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-uniform-in-loop-condition.vert.html
+                webgl-conformance/conformance/glsl/misc/shader-with-vec2-return-value.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-vec3-return-value.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-vec4-return-value.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-vec4-vec3-vec4-conditional.html
+                webgl-conformance/conformance/glsl/misc/shader-with-version-100.frag.html
+                webgl-conformance/conformance/glsl/misc/shader-with-version-100.vert.html
+                webgl-conformance/conformance/glsl/misc/shader-with-version-120.vert.html
+                webgl-conformance/conformance/glsl/misc/shader-with-version-130.vert.html
+                webgl-conformance/conformance/glsl/misc/shader-with-webgl-identifier.vert.html
+                webgl-conformance/conformance/glsl/misc/shader-without-precision.frag.html
+                webgl-conformance/conformance/glsl/misc/shared.html
+                webgl-conformance/conformance/glsl/misc/struct-nesting-exceeds-maximum.html
+                webgl-conformance/conformance/glsl/misc/struct-nesting-under-maximum.html
+                webgl-conformance/conformance/glsl/misc/uniform-location-length-limits.html
+                webgl-conformance/conformance/glsl/reserved/00_test_list.txt
+                webgl-conformance/conformance/glsl/reserved/_webgl_field.vert.html
+                webgl-conformance/conformance/glsl/reserved/_webgl_function.vert.html
+                webgl-conformance/conformance/glsl/reserved/_webgl_struct.vert.html
+                webgl-conformance/conformance/glsl/reserved/_webgl_variable.vert.html
+                webgl-conformance/conformance/glsl/reserved/webgl_field.vert.html
+                webgl-conformance/conformance/glsl/reserved/webgl_function.vert.html
+                webgl-conformance/conformance/glsl/reserved/webgl_struct.vert.html
+                webgl-conformance/conformance/glsl/reserved/webgl_variable.vert.html
+                webgl-conformance/conformance/glsl/samplers/00_test_list.txt
+                webgl-conformance/conformance/glsl/samplers/glsl-function-texture2d-bias.html
+                webgl-conformance/conformance/glsl/samplers/glsl-function-texture2dlod.html
+                webgl-conformance/conformance/glsl/samplers/glsl-function-texture2dproj.html
+                webgl-conformance/conformance/glsl/variables/00_test_list.txt
+                webgl-conformance/conformance/glsl/variables/gl-fragcoord.html
+                webgl-conformance/conformance/glsl/variables/gl-frontfacing.html
+                webgl-conformance/conformance/glsl/variables/gl-pointcoord.html
+                webgl-conformance/conformance/limits/00_test_list.txt
+                webgl-conformance/conformance/limits/gl-max-texture-dimensions.html
+                webgl-conformance/conformance/limits/gl-min-attribs.html
+                webgl-conformance/conformance/limits/gl-min-textures.html
+                webgl-conformance/conformance/limits/gl-min-uniforms.html
+                webgl-conformance/conformance/misc/00_test_list.txt
+                webgl-conformance/conformance/misc/bad-arguments-test.html
+                webgl-conformance/conformance/misc/delayed-drawing.html
+                webgl-conformance/conformance/misc/error-reporting.html
+                webgl-conformance/conformance/misc/functions-returning-strings.html
+                webgl-conformance/conformance/misc/instanceof-test.html
+                webgl-conformance/conformance/misc/invalid-passed-params.html
+                webgl-conformance/conformance/misc/is-object.html
+                webgl-conformance/conformance/misc/null-object-behaviour.html
+                webgl-conformance/conformance/misc/object-deletion-behaviour.html
+                webgl-conformance/conformance/misc/shader-precision-format.html
+                webgl-conformance/conformance/misc/type-conversion-test.html
+                webgl-conformance/conformance/misc/uninitialized-test.html
+                webgl-conformance/conformance/misc/webgl-specific.html
+                webgl-conformance/conformance/more/00_test_list.txt
+                webgl-conformance/conformance/more/README.md
+                webgl-conformance/conformance/more/all_tests.html
+                webgl-conformance/conformance/more/all_tests_linkonly.html
+                webgl-conformance/conformance/more/all_tests_sequential.html
+                webgl-conformance/conformance/more/conformance/argGenerators-A.js
+                webgl-conformance/conformance/more/conformance/argGenerators-B1.js
+                webgl-conformance/conformance/more/conformance/argGenerators-B2.js
+                webgl-conformance/conformance/more/conformance/argGenerators-B3.js
+                webgl-conformance/conformance/more/conformance/argGenerators-B4.js
+                webgl-conformance/conformance/more/conformance/argGenerators-C.js
+                webgl-conformance/conformance/more/conformance/argGenerators-D_G.js
+                webgl-conformance/conformance/more/conformance/argGenerators-G_I.js
+                webgl-conformance/conformance/more/conformance/argGenerators-L_S.js
+                webgl-conformance/conformance/more/conformance/argGenerators-S_V.js
+                webgl-conformance/conformance/more/conformance/badArgsArityLessThanArgc.html
+                webgl-conformance/conformance/more/conformance/constants.html
+                webgl-conformance/conformance/more/conformance/fuzzTheAPI.html
+                webgl-conformance/conformance/more/conformance/getContext.html
+                webgl-conformance/conformance/more/conformance/methods.html
+                webgl-conformance/conformance/more/conformance/quickCheckAPI-A.html
+                webgl-conformance/conformance/more/conformance/quickCheckAPI-B1.html
+                webgl-conformance/conformance/more/conformance/quickCheckAPI-B2.html
+                webgl-conformance/conformance/more/conformance/quickCheckAPI-B3.html
+                webgl-conformance/conformance/more/conformance/quickCheckAPI-B4.html
+                webgl-conformance/conformance/more/conformance/quickCheckAPI-C.html
+                webgl-conformance/conformance/more/conformance/quickCheckAPI-D_G.html
+                webgl-conformance/conformance/more/conformance/quickCheckAPI-G_I.html
+                webgl-conformance/conformance/more/conformance/quickCheckAPI-L_S.html
+                webgl-conformance/conformance/more/conformance/quickCheckAPI-S_V.html
+                webgl-conformance/conformance/more/conformance/quickCheckAPI.js
+                webgl-conformance/conformance/more/conformance/quickCheckAPIBadArgs.html
+                webgl-conformance/conformance/more/conformance/webGLArrays.html
+                webgl-conformance/conformance/more/demos/opengl_web.html
+                webgl-conformance/conformance/more/demos/video.html
+                webgl-conformance/conformance/more/functions/bindBuffer.html
+                webgl-conformance/conformance/more/functions/bindBufferBadArgs.html
+                webgl-conformance/conformance/more/functions/bindFramebufferLeaveNonZero.html
+                webgl-conformance/conformance/more/functions/bufferData.html
+                webgl-conformance/conformance/more/functions/bufferDataBadArgs.html
+                webgl-conformance/conformance/more/functions/bufferSubData.html
+                webgl-conformance/conformance/more/functions/bufferSubDataBadArgs.html
+                webgl-conformance/conformance/more/functions/copyTexImage2D.html
+                webgl-conformance/conformance/more/functions/copyTexImage2DBadArgs.html
+                webgl-conformance/conformance/more/functions/copyTexSubImage2D.html
+                webgl-conformance/conformance/more/functions/copyTexSubImage2DBadArgs.html
+                webgl-conformance/conformance/more/functions/deleteBufferBadArgs.html
+                webgl-conformance/conformance/more/functions/drawArrays.html
+                webgl-conformance/conformance/more/functions/drawArraysOutOfBounds.html
+                webgl-conformance/conformance/more/functions/drawElements.html
+                webgl-conformance/conformance/more/functions/drawElementsBadArgs.html
+                webgl-conformance/conformance/more/functions/isTests.html
+                webgl-conformance/conformance/more/functions/readPixels.html
+                webgl-conformance/conformance/more/functions/readPixelsBadArgs.html
+                webgl-conformance/conformance/more/functions/texImage2D.html
+                webgl-conformance/conformance/more/functions/texImage2DBadArgs.html
+                webgl-conformance/conformance/more/functions/texImage2DHTML.html
+                webgl-conformance/conformance/more/functions/texImage2DHTMLBadArgs.html
+                webgl-conformance/conformance/more/functions/texSubImage2D.html
+                webgl-conformance/conformance/more/functions/texSubImage2DBadArgs.html
+                webgl-conformance/conformance/more/functions/texSubImage2DHTML.html
+                webgl-conformance/conformance/more/functions/texSubImage2DHTMLBadArgs.html
+                webgl-conformance/conformance/more/functions/uniformMatrix.html
+                webgl-conformance/conformance/more/functions/uniformMatrixBadArgs.html
+                webgl-conformance/conformance/more/functions/uniformf.html
+                webgl-conformance/conformance/more/functions/uniformfArrayLen1.html
+                webgl-conformance/conformance/more/functions/uniformfBadArgs.html
+                webgl-conformance/conformance/more/functions/uniformi.html
+                webgl-conformance/conformance/more/functions/uniformiBadArgs.html
+                webgl-conformance/conformance/more/functions/vertexAttrib.html
+                webgl-conformance/conformance/more/functions/vertexAttribBadArgs.html
+                webgl-conformance/conformance/more/functions/vertexAttribPointer.html
+                webgl-conformance/conformance/more/functions/vertexAttribPointerBadArgs.html
+                webgl-conformance/conformance/more/glsl/arrayOutOfBounds.html
+                webgl-conformance/conformance/more/glsl/longLoops.html
+                webgl-conformance/conformance/more/glsl/uniformOutOfBounds.html
+                webgl-conformance/conformance/more/glsl/unusedAttribsUniforms.html
+                webgl-conformance/conformance/more/index.html
+                webgl-conformance/conformance/more/performance/CPUvsGPU.html
+                webgl-conformance/conformance/more/performance/bandwidth.html
+                webgl-conformance/conformance/more/performance/jsGCPause.html
+                webgl-conformance/conformance/more/performance/jsMatrixMult.html
+                webgl-conformance/conformance/more/performance/jsToGLOverhead.html
+                webgl-conformance/conformance/more/unit.css
+                webgl-conformance/conformance/more/unit.js
+                webgl-conformance/conformance/more/util.js
+                webgl-conformance/conformance/programs/00_test_list.txt
+                webgl-conformance/conformance/programs/get-active-test.html
+                webgl-conformance/conformance/programs/gl-bind-attrib-location-test.html
+                webgl-conformance/conformance/programs/gl-get-active-attribute.html
+                webgl-conformance/conformance/programs/gl-get-active-uniform.html
+                webgl-conformance/conformance/programs/gl-getshadersource.html
+                webgl-conformance/conformance/programs/gl-shader-test.html
+                webgl-conformance/conformance/programs/invalid-UTF-16.html
+                webgl-conformance/conformance/programs/program-test.html
+                webgl-conformance/conformance/reading/00_test_list.txt
+                webgl-conformance/conformance/reading/read-pixels-pack-alignment.html
+                webgl-conformance/conformance/reading/read-pixels-test.html
+                webgl-conformance/conformance/renderbuffers/00_test_list.txt
+                webgl-conformance/conformance/renderbuffers/framebuffer-object-attachment.html
+                webgl-conformance/conformance/renderbuffers/framebuffer-test.html
+                webgl-conformance/conformance/renderbuffers/renderbuffer-initialization.html
+                webgl-conformance/conformance/rendering/00_test_list.txt
+                webgl-conformance/conformance/rendering/draw-arrays-out-of-bounds.html
+                webgl-conformance/conformance/rendering/draw-elements-out-of-bounds.html
+                webgl-conformance/conformance/rendering/gl-clear.html
+                webgl-conformance/conformance/rendering/gl-drawelements.html
+                webgl-conformance/conformance/rendering/gl-scissor-test.html
+                webgl-conformance/conformance/rendering/line-loop-tri-fan.html
+                webgl-conformance/conformance/rendering/more-than-65536-indices.html
+                webgl-conformance/conformance/rendering/point-size.html
+                webgl-conformance/conformance/rendering/triangle.html
+                webgl-conformance/conformance/resources/3x3.png
+                webgl-conformance/conformance/resources/blue-1x1.jpg
+                webgl-conformance/conformance/resources/boolUniformShader.vert
+                webgl-conformance/conformance/resources/bug-32888-texture.png
+                webgl-conformance/conformance/resources/floatUniformShader.vert
+                webgl-conformance/conformance/resources/fragmentShader.frag
+                webgl-conformance/conformance/resources/glsl-conformance-test.js
+                webgl-conformance/conformance/resources/glsl-feature-tests.css
+                webgl-conformance/conformance/resources/glsl-generator.js
+                webgl-conformance/conformance/resources/gray-ramp-256-with-128-alpha.png
+                webgl-conformance/conformance/resources/gray-ramp-256.png
+                webgl-conformance/conformance/resources/gray-ramp-default-gamma.png
+                webgl-conformance/conformance/resources/gray-ramp-gamma0.1.png
+                webgl-conformance/conformance/resources/gray-ramp-gamma1.0.png
+                webgl-conformance/conformance/resources/gray-ramp-gamma2.0.png
+                webgl-conformance/conformance/resources/gray-ramp-gamma4.0.png
+                webgl-conformance/conformance/resources/gray-ramp-gamma9.0.png
+                webgl-conformance/conformance/resources/gray-ramp.png
+                webgl-conformance/conformance/resources/green-2x2-16bit.png
+                webgl-conformance/conformance/resources/intArrayUniformShader.vert
+                webgl-conformance/conformance/resources/intUniformShader.vert
+                webgl-conformance/conformance/resources/matUniformShader.vert
+                webgl-conformance/conformance/resources/noopUniformShader.frag
+                webgl-conformance/conformance/resources/noopUniformShader.vert
+                webgl-conformance/conformance/resources/npot-video.mp4
+                webgl-conformance/conformance/resources/npot-video.theora.ogv
+                webgl-conformance/conformance/resources/npot-video.webmvp8.webm
+                webgl-conformance/conformance/resources/pnglib.js
+                webgl-conformance/conformance/resources/red-green.mp4
+                webgl-conformance/conformance/resources/red-green.png
+                webgl-conformance/conformance/resources/red-green.theora.ogv
+                webgl-conformance/conformance/resources/red-green.webmvp8.webm
+                webgl-conformance/conformance/resources/red-indexed.png
+                webgl-conformance/conformance/resources/samplerUniformShader.frag
+                webgl-conformance/conformance/resources/small-square-with-cie-rgb-profile.png
+                webgl-conformance/conformance/resources/small-square-with-colormatch-profile.png
+                webgl-conformance/conformance/resources/small-square-with-colorspin-profile.jpg
+                webgl-conformance/conformance/resources/small-square-with-colorspin-profile.png
+                webgl-conformance/conformance/resources/small-square-with-e-srgb-profile.png
+                webgl-conformance/conformance/resources/small-square-with-smpte-c-profile.png
+                webgl-conformance/conformance/resources/small-square-with-srgb-iec61966-2.1-profile.png
+                webgl-conformance/conformance/resources/structUniformShader.vert
+                webgl-conformance/conformance/resources/vertexShader.vert
+                webgl-conformance/conformance/resources/webgl-test-utils.js
+                webgl-conformance/conformance/resources/webgl-test.js
+                webgl-conformance/conformance/resources/zero-alpha.png
+                webgl-conformance/conformance/state/00_test_list.txt
+                webgl-conformance/conformance/state/gl-enable-enum-test.html
+                webgl-conformance/conformance/state/gl-enum-tests.html
+                webgl-conformance/conformance/state/gl-get-calls.html
+                webgl-conformance/conformance/state/gl-geterror.html
+                webgl-conformance/conformance/state/gl-getstring.html
+                webgl-conformance/conformance/state/gl-object-get-calls.html
+                webgl-conformance/conformance/textures/00_test_list.txt
+                webgl-conformance/conformance/textures/compressed-tex-image.html
+                webgl-conformance/conformance/textures/copy-tex-image-and-sub-image-2d.html
+                webgl-conformance/conformance/textures/gl-pixelstorei.html
+                webgl-conformance/conformance/textures/gl-teximage.html
+                webgl-conformance/conformance/textures/origin-clean-conformance.html
+                webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-array-buffer-view.html
+                webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-canvas.html
+                webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-image-data.html
+                webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-image.html
+                webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-video.html
+                webgl-conformance/conformance/textures/tex-image-and-uniform-binding-bugs.html
+                webgl-conformance/conformance/textures/tex-image-with-format-and-type.html
+                webgl-conformance/conformance/textures/tex-image-with-invalid-data.html
+                webgl-conformance/conformance/textures/tex-input-validation.html
+                webgl-conformance/conformance/textures/tex-sub-image-2d-bad-args.html
+                webgl-conformance/conformance/textures/tex-sub-image-2d.html
+                webgl-conformance/conformance/textures/texparameter-test.html
+                webgl-conformance/conformance/textures/texture-active-bind-2.html
+                webgl-conformance/conformance/textures/texture-active-bind.html
+                webgl-conformance/conformance/textures/texture-clear.html
+                webgl-conformance/conformance/textures/texture-complete.html
+                webgl-conformance/conformance/textures/texture-formats-test.html
+                webgl-conformance/conformance/textures/texture-mips.html
+                webgl-conformance/conformance/textures/texture-npot-video.html
+                webgl-conformance/conformance/textures/texture-npot.html
+                webgl-conformance/conformance/textures/texture-size-cube-maps.html
+                webgl-conformance/conformance/textures/texture-size.html
+                webgl-conformance/conformance/textures/texture-transparent-pixels-initialized.html
+                webgl-conformance/conformance/typedarrays/00_test_list.txt
+                webgl-conformance/conformance/typedarrays/array-buffer-crash.html
+                webgl-conformance/conformance/typedarrays/array-buffer-view-crash.html
+                webgl-conformance/conformance/typedarrays/array-unit-tests.html
+                webgl-conformance/conformance/uniforms/00_test_list.txt
+                webgl-conformance/conformance/uniforms/gl-uniform-arrays.html
+                webgl-conformance/conformance/uniforms/gl-uniform-bool.html
+                webgl-conformance/conformance/uniforms/gl-uniformmatrix4fv.html
+                webgl-conformance/conformance/uniforms/gl-unknown-uniform.html
+                webgl-conformance/conformance/uniforms/null-uniform-location.html
+                webgl-conformance/conformance/uniforms/uniform-location.html
+                webgl-conformance/conformance/uniforms/uniform-samplers-test.html
+                webgl-conformance/resources/cors-util.js
+                webgl-conformance/resources/desktop-gl-constants.js
+                webgl-conformance/resources/js-test-pre.js
+                webgl-conformance/resources/js-test-style.css
+                webgl-conformance/resources/opengl_logo.jpg
+                webgl-conformance/resources/thunderbird-logo-64x64.png
+                webgl-conformance/resources/webgl-logo.png
+                webgl-conformance/resources/webgl-test-harness.js
+
+[webgl-conformance/_wrappers/test_always-fail.html]
+[webgl-conformance/_wrappers/test_conformance__attribs__gl-enable-vertex-attrib.html]
+[webgl-conformance/_wrappers/test_conformance__attribs__gl-vertex-attrib-zero-issues.html]
+[webgl-conformance/_wrappers/test_conformance__attribs__gl-vertex-attrib.html]
+[webgl-conformance/_wrappers/test_conformance__attribs__gl-vertexattribpointer-offsets.html]
+[webgl-conformance/_wrappers/test_conformance__attribs__gl-vertexattribpointer.html]
+[webgl-conformance/_wrappers/test_conformance__buffers__buffer-bind-test.html]
+[webgl-conformance/_wrappers/test_conformance__buffers__buffer-data-array-buffer.html]
+[webgl-conformance/_wrappers/test_conformance__buffers__index-validation-copies-indices.html]
+[webgl-conformance/_wrappers/test_conformance__buffers__index-validation-crash-with-buffer-sub-data.html]
+[webgl-conformance/_wrappers/test_conformance__buffers__index-validation-verifies-too-many-indices.html]
+[webgl-conformance/_wrappers/test_conformance__buffers__index-validation-with-resized-buffer.html]
+[webgl-conformance/_wrappers/test_conformance__buffers__index-validation.html]
+[webgl-conformance/_wrappers/test_conformance__canvas__buffer-offscreen-test.html]
+[webgl-conformance/_wrappers/test_conformance__canvas__buffer-preserve-test.html]
+[webgl-conformance/_wrappers/test_conformance__canvas__canvas-test.html]
+[webgl-conformance/_wrappers/test_conformance__canvas__canvas-zero-size.html]
+[webgl-conformance/_wrappers/test_conformance__canvas__drawingbuffer-static-canvas-test.html]
+skip-if = os == 'mac'
+[webgl-conformance/_wrappers/test_conformance__canvas__drawingbuffer-test.html]
+[webgl-conformance/_wrappers/test_conformance__canvas__viewport-unchanged-upon-resize.html]
+[webgl-conformance/_wrappers/test_conformance__context__constants.html]
+[webgl-conformance/_wrappers/test_conformance__context__context-attributes-alpha-depth-stencil-antialias.html]
+skip-if = (os == 'b2g')
+[webgl-conformance/_wrappers/test_conformance__context__context-lost-restored.html]
+[webgl-conformance/_wrappers/test_conformance__context__context-lost.html]
+[webgl-conformance/_wrappers/test_conformance__context__context-type-test.html]
+[webgl-conformance/_wrappers/test_conformance__context__incorrect-context-object-behaviour.html]
+[webgl-conformance/_wrappers/test_conformance__context__methods.html]
+[webgl-conformance/_wrappers/test_conformance__context__premultiplyalpha-test.html]
+[webgl-conformance/_wrappers/test_conformance__context__resource-sharing-test.html]
+[webgl-conformance/_wrappers/test_conformance__extensions__oes-standard-derivatives.html]
+[webgl-conformance/_wrappers/test_conformance__extensions__ext-texture-filter-anisotropic.html]
+[webgl-conformance/_wrappers/test_conformance__extensions__oes-texture-float.html]
+[webgl-conformance/_wrappers/test_conformance__extensions__oes-vertex-array-object.html]
+[webgl-conformance/_wrappers/test_conformance__extensions__webgl-debug-renderer-info.html]
+[webgl-conformance/_wrappers/test_conformance__extensions__webgl-debug-shaders.html]
+[webgl-conformance/_wrappers/test_conformance__extensions__webgl-compressed-texture-etc1.html]
+[webgl-conformance/_wrappers/test_conformance__extensions__webgl-compressed-texture-s3tc.html]
+[webgl-conformance/_wrappers/test_conformance__extensions__ext-sRGB.html]
+[webgl-conformance/_wrappers/test_conformance__extensions__ext-shader-texture-lod.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-abs.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-acos.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-asin.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-atan.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-atan-xy.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-ceil.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-clamp-float.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-clamp-gentype.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-cos.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-cross.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-distance.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-dot.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-faceforward.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-floor.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-fract.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-length.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-max-float.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-max-gentype.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-min-float.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-min-gentype.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-mix-float.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-mix-gentype.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-mod-float.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-mod-gentype.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-normalize.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-reflect.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-sign.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-sin.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-step-float.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-step-gentype.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-smoothstep-float.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-smoothstep-gentype.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_int_float.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_int_mat2.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_int_mat3.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_int_mat4.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_int_vec2.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_int_vec3.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_int_vec4.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_ivec2_vec2.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_ivec3_vec3.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_ivec4_vec4.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__assign_int_to_float.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__assign_ivec2_to_vec2.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__assign_ivec3_to_vec3.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__assign_ivec4_to_vec4.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__construct_struct.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_int_float.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_int_mat2.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_int_mat3.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_int_mat4.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_int_vec2.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_int_vec3.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_int_vec4.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_ivec2_vec2.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_ivec3_vec3.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_ivec4_vec4.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__equal_int_float.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__equal_ivec2_vec2.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__equal_ivec3_vec3.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__equal_ivec4_vec4.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__function_int_float.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__function_ivec2_vec2.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__function_ivec3_vec3.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__function_ivec4_vec4.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__greater_than.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__greater_than_equal.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__less_than.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__less_than_equal.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_int_float.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_int_mat2.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_int_mat3.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_int_mat4.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_int_vec2.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_int_vec3.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_int_vec4.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_ivec2_vec2.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_ivec3_vec3.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_ivec4_vec4.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__not_equal_int_float.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__not_equal_ivec2_vec2.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__not_equal_ivec3_vec3.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__not_equal_ivec4_vec4.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_int_float.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_int_mat2.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_int_mat3.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_int_mat4.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_int_vec2.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_int_vec3.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_int_vec4.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_ivec2_vec2.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_ivec3_vec3.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_ivec4_vec4.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__ternary_int_float.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__ternary_ivec2_vec2.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__ternary_ivec3_vec3.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__implicit__ternary_ivec4_vec4.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__attrib-location-length-limits.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__embedded-struct-definitions-forbidden.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__glsl-function-nodes.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__glsl-long-variable-names.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__non-ascii-comments.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__non-ascii.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-256-character-identifier.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-257-character-identifier.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-_webgl-identifier.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-arbitrary-indexing.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-arbitrary-indexing.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-attrib-array.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-attrib-struct.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-clipvertex.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-default-precision.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-default-precision.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-define-line-continuation.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-dfdx-no-ext.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-dfdx.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-error-directive.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-explicit-int-cast.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-float-return-value.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-frag-depth.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-function-recursion.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-glcolor.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-gles-1.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-gles-symbol.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-glprojectionmatrix.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-implicit-vec3-to-vec4-cast.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-include.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-int-return-value.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-invalid-identifier.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-ivec2-return-value.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-ivec3-return-value.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-ivec4-return-value.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-limited-indexing.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-long-line.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-non-ascii-error.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-precision.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-quoted-error.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-undefined-preprocessor-symbol.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-uniform-in-loop-condition.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-vec2-return-value.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-vec3-return-value.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-vec4-return-value.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-version-100.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-version-100.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-version-120.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-version-130.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-webgl-identifier.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-without-precision.frag.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__shared.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__struct-nesting-exceeds-maximum.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__struct-nesting-under-maximum.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__misc__uniform-location-length-limits.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__reserved___webgl_field.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__reserved___webgl_function.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__reserved___webgl_struct.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__reserved___webgl_variable.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__reserved__webgl_field.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__reserved__webgl_function.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__reserved__webgl_struct.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__reserved__webgl_variable.vert.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__variables__gl-fragcoord.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__variables__gl-frontfacing.html]
+[webgl-conformance/_wrappers/test_conformance__glsl__variables__gl-pointcoord.html]
+[webgl-conformance/_wrappers/test_conformance__limits__gl-min-attribs.html]
+[webgl-conformance/_wrappers/test_conformance__limits__gl-max-texture-dimensions.html]
+[webgl-conformance/_wrappers/test_conformance__limits__gl-min-textures.html]
+[webgl-conformance/_wrappers/test_conformance__limits__gl-min-uniforms.html]
+[webgl-conformance/_wrappers/test_conformance__misc__bad-arguments-test.html]
+[webgl-conformance/_wrappers/test_conformance__misc__error-reporting.html]
+[webgl-conformance/_wrappers/test_conformance__misc__instanceof-test.html]
+[webgl-conformance/_wrappers/test_conformance__misc__invalid-passed-params.html]
+skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux')
+[webgl-conformance/_wrappers/test_conformance__misc__is-object.html]
+[webgl-conformance/_wrappers/test_conformance__misc__null-object-behaviour.html]
+[webgl-conformance/_wrappers/test_conformance__misc__functions-returning-strings.html]
+[webgl-conformance/_wrappers/test_conformance__misc__object-deletion-behaviour.html]
+[webgl-conformance/_wrappers/test_conformance__misc__shader-precision-format.html]
+[webgl-conformance/_wrappers/test_conformance__misc__type-conversion-test.html]
+skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux')
+[webgl-conformance/_wrappers/test_conformance__misc__uninitialized-test.html]
+skip-if = os == 'android'
+[webgl-conformance/_wrappers/test_conformance__misc__webgl-specific.html]
+[webgl-conformance/_wrappers/test_conformance__programs__get-active-test.html]
+[webgl-conformance/_wrappers/test_conformance__programs__gl-bind-attrib-location-test.html]
+[webgl-conformance/_wrappers/test_conformance__programs__gl-get-active-attribute.html]
+[webgl-conformance/_wrappers/test_conformance__programs__gl-get-active-uniform.html]
+[webgl-conformance/_wrappers/test_conformance__programs__gl-getshadersource.html]
+[webgl-conformance/_wrappers/test_conformance__programs__gl-shader-test.html]
+[webgl-conformance/_wrappers/test_conformance__programs__invalid-UTF-16.html]
+[webgl-conformance/_wrappers/test_conformance__programs__program-test.html]
+[webgl-conformance/_wrappers/test_conformance__reading__read-pixels-pack-alignment.html]
+[webgl-conformance/_wrappers/test_conformance__reading__read-pixels-test.html]
+skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux')
+[webgl-conformance/_wrappers/test_conformance__renderbuffers__framebuffer-object-attachment.html]
+skip-if = os == 'android'
+[webgl-conformance/_wrappers/test_conformance__renderbuffers__framebuffer-test.html]
+[webgl-conformance/_wrappers/test_conformance__renderbuffers__renderbuffer-initialization.html]
+[webgl-conformance/_wrappers/test_conformance__rendering__draw-arrays-out-of-bounds.html]
+[webgl-conformance/_wrappers/test_conformance__rendering__draw-elements-out-of-bounds.html]
+[webgl-conformance/_wrappers/test_conformance__rendering__gl-clear.html]
+[webgl-conformance/_wrappers/test_conformance__rendering__gl-drawelements.html]
+[webgl-conformance/_wrappers/test_conformance__rendering__gl-scissor-test.html]
+[webgl-conformance/_wrappers/test_conformance__rendering__more-than-65536-indices.html]
+[webgl-conformance/_wrappers/test_conformance__rendering__point-size.html]
+[webgl-conformance/_wrappers/test_conformance__rendering__triangle.html]
+[webgl-conformance/_wrappers/test_conformance__rendering__line-loop-tri-fan.html]
+[webgl-conformance/_wrappers/test_conformance__state__gl-enable-enum-test.html]
+[webgl-conformance/_wrappers/test_conformance__state__gl-enum-tests.html]
+[webgl-conformance/_wrappers/test_conformance__state__gl-get-calls.html]
+[webgl-conformance/_wrappers/test_conformance__state__gl-geterror.html]
+[webgl-conformance/_wrappers/test_conformance__state__gl-getstring.html]
+[webgl-conformance/_wrappers/test_conformance__state__gl-object-get-calls.html]
+[webgl-conformance/_wrappers/test_conformance__textures__compressed-tex-image.html]
+[webgl-conformance/_wrappers/test_conformance__textures__copy-tex-image-and-sub-image-2d.html]
+[webgl-conformance/_wrappers/test_conformance__textures__gl-pixelstorei.html]
+[webgl-conformance/_wrappers/test_conformance__textures__gl-teximage.html]
+skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux')
+[webgl-conformance/_wrappers/test_conformance__textures__origin-clean-conformance.html]
+[webgl-conformance/_wrappers/test_conformance__textures__tex-image-and-sub-image-2d-with-array-buffer-view.html]
+[webgl-conformance/_wrappers/test_conformance__textures__tex-image-and-sub-image-2d-with-canvas.html]
+[webgl-conformance/_wrappers/test_conformance__textures__tex-image-and-sub-image-2d-with-image-data.html]
+[webgl-conformance/_wrappers/test_conformance__textures__tex-image-and-sub-image-2d-with-image.html]
+[webgl-conformance/_wrappers/test_conformance__textures__tex-image-and-sub-image-2d-with-video.html]
+skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux') || (os == 'win')
+[webgl-conformance/_wrappers/test_conformance__textures__tex-image-and-uniform-binding-bugs.html]
+skip-if = (os == 'b2g')
+[webgl-conformance/_wrappers/test_conformance__textures__tex-image-with-format-and-type.html]
+skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux')
+[webgl-conformance/_wrappers/test_conformance__textures__tex-image-with-invalid-data.html]
+[webgl-conformance/_wrappers/test_conformance__textures__tex-input-validation.html]
+skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux')
+[webgl-conformance/_wrappers/test_conformance__textures__tex-sub-image-2d-bad-args.html]
+[webgl-conformance/_wrappers/test_conformance__textures__tex-sub-image-2d.html]
+[webgl-conformance/_wrappers/test_conformance__textures__texparameter-test.html]
+[webgl-conformance/_wrappers/test_conformance__textures__texture-active-bind-2.html]
+[webgl-conformance/_wrappers/test_conformance__textures__texture-active-bind.html]
+[webgl-conformance/_wrappers/test_conformance__textures__texture-complete.html]
+[webgl-conformance/_wrappers/test_conformance__textures__texture-formats-test.html]
+[webgl-conformance/_wrappers/test_conformance__textures__texture-mips.html]
+[webgl-conformance/_wrappers/test_conformance__textures__texture-npot-video.html]
+skip-if = os == 'win'
+[webgl-conformance/_wrappers/test_conformance__textures__texture-npot.html]
+[webgl-conformance/_wrappers/test_conformance__textures__texture-size.html]
+skip-if = os == 'android'
+[webgl-conformance/_wrappers/test_conformance__textures__texture-size-cube-maps.html]
+skip-if = os == 'android'
+[webgl-conformance/_wrappers/test_conformance__textures__texture-transparent-pixels-initialized.html]
+[webgl-conformance/_wrappers/test_conformance__typedarrays__array-buffer-crash.html]
+[webgl-conformance/_wrappers/test_conformance__typedarrays__array-buffer-view-crash.html]
+[webgl-conformance/_wrappers/test_conformance__typedarrays__array-unit-tests.html]
+[webgl-conformance/_wrappers/test_conformance__uniforms__gl-uniform-arrays.html]
+[webgl-conformance/_wrappers/test_conformance__uniforms__gl-uniform-bool.html]
+[webgl-conformance/_wrappers/test_conformance__uniforms__gl-uniformmatrix4fv.html]
+[webgl-conformance/_wrappers/test_conformance__uniforms__gl-unknown-uniform.html]
+[webgl-conformance/_wrappers/test_conformance__uniforms__null-uniform-location.html]
+[webgl-conformance/_wrappers/test_conformance__uniforms__uniform-location.html]
+[webgl-conformance/_wrappers/test_conformance__uniforms__uniform-samplers-test.html]
+[webgl-conformance/_wrappers/test_conformance__more__conformance__constants.html]
+[webgl-conformance/_wrappers/test_conformance__more__conformance__getContext.html]
+[webgl-conformance/_wrappers/test_conformance__more__conformance__methods.html]
+[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-A.html]
+[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-B1.html]
+[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-B2.html]
+[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-B3.html]
+[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-B4.html]
+[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-C.html]
+[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-D_G.html]
+[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-G_I.html]
+[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-L_S.html]
+[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-S_V.html]
+[webgl-conformance/_wrappers/test_conformance__more__conformance__webGLArrays.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__bindBuffer.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__bindBufferBadArgs.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__bindFramebufferLeaveNonZero.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__bufferData.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__bufferDataBadArgs.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__bufferSubData.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__bufferSubDataBadArgs.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__copyTexImage2D.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__copyTexImage2DBadArgs.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__copyTexSubImage2D.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__copyTexSubImage2DBadArgs.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__deleteBufferBadArgs.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__drawArrays.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__drawArraysOutOfBounds.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__drawElements.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__drawElementsBadArgs.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__isTests.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__readPixels.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__readPixelsBadArgs.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__texImage2D.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__texImage2DBadArgs.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__texImage2DHTML.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__texImage2DHTMLBadArgs.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__texSubImage2D.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__texSubImage2DBadArgs.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__texSubImage2DHTML.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__texSubImage2DHTMLBadArgs.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__uniformf.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__uniformfBadArgs.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__uniformfArrayLen1.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__uniformi.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__uniformiBadArgs.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__uniformMatrix.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__uniformMatrixBadArgs.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__vertexAttrib.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__vertexAttribBadArgs.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__vertexAttribPointer.html]
+[webgl-conformance/_wrappers/test_conformance__more__functions__vertexAttribPointerBadArgs.html]
+[webgl-conformance/_wrappers/test_conformance__more__glsl__arrayOutOfBounds.html]
+[webgl-conformance/_wrappers/test_conformance__more__glsl__uniformOutOfBounds.html]
new file mode 100644
--- /dev/null
+++ b/dom/canvas/test/mochitest-subsuite-webgl.ini
@@ -0,0 +1,3 @@
+[DEFAULT]
+[include:_webgl-conformance.ini]
+[include:webgl-mochitest.ini]
--- a/dom/canvas/test/moz.build
+++ b/dom/canvas/test/moz.build
@@ -1,17 +1,13 @@
 # -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
-DIRS += [
-    'webgl-conformance',
-    'webgl-mochitest',
-]
-
 MOCHITEST_MANIFESTS += [
     'crossorigin/mochitest.ini',
+    'mochitest-subsuite-webgl.ini',
     'mochitest.ini',
 ]
 
 MOCHITEST_CHROME_MANIFESTS += ['chrome/chrome.ini']
deleted file mode 100644
--- a/dom/canvas/test/webgl-conformance/_mochitest.ini
+++ /dev/null
@@ -1,834 +0,0 @@
-[DEFAULT]
-skip-if = e10s || os == 'b2g' || ((os == 'linux') && (buildapp == 'b2g'))
-
-support-files = mochi-single.html
-                mochi-wrapper.css
-                always-fail.html
-                conformance/00_readme.txt
-                conformance/00_test_list.txt
-                conformance/LICENSE_CHROMIUM
-                conformance/attribs/00_test_list.txt
-                conformance/attribs/gl-enable-vertex-attrib.html
-                conformance/attribs/gl-vertex-attrib-zero-issues.html
-                conformance/attribs/gl-vertex-attrib.html
-                conformance/attribs/gl-vertexattribpointer-offsets.html
-                conformance/attribs/gl-vertexattribpointer.html
-                conformance/buffers/00_test_list.txt
-                conformance/buffers/buffer-bind-test.html
-                conformance/buffers/buffer-data-array-buffer.html
-                conformance/buffers/index-validation-copies-indices.html
-                conformance/buffers/index-validation-crash-with-buffer-sub-data.html
-                conformance/buffers/index-validation-verifies-too-many-indices.html
-                conformance/buffers/index-validation-with-resized-buffer.html
-                conformance/buffers/index-validation.html
-                conformance/canvas/00_test_list.txt
-                conformance/canvas/buffer-offscreen-test.html
-                conformance/canvas/buffer-preserve-test.html
-                conformance/canvas/canvas-test.html
-                conformance/canvas/canvas-zero-size.html
-                conformance/canvas/drawingbuffer-static-canvas-test.html
-                conformance/canvas/drawingbuffer-test.html
-                conformance/canvas/viewport-unchanged-upon-resize.html
-                conformance/context/00_test_list.txt
-                conformance/context/constants.html
-                conformance/context/context-attribute-preserve-drawing-buffer.html
-                conformance/context/context-attributes-alpha-depth-stencil-antialias.html
-                conformance/context/context-lost-restored.html
-                conformance/context/context-lost.html
-                conformance/context/context-type-test.html
-                conformance/context/incorrect-context-object-behaviour.html
-                conformance/context/methods.html
-                conformance/context/premultiplyalpha-test.html
-                conformance/context/resource-sharing-test.html
-                conformance/extensions/00_test_list.txt
-                conformance/extensions/ext-sRGB.html
-                conformance/extensions/ext-shader-texture-lod.html
-                conformance/extensions/ext-texture-filter-anisotropic.html
-                conformance/extensions/oes-standard-derivatives.html
-                conformance/extensions/oes-texture-float.html
-                conformance/extensions/oes-vertex-array-object.html
-                conformance/extensions/webgl-compressed-texture-etc1.html
-                conformance/extensions/webgl-compressed-texture-s3tc.html
-                conformance/extensions/webgl-debug-renderer-info.html
-                conformance/extensions/webgl-debug-shaders.html
-                conformance/extensions/webgl-depth-texture.html
-                conformance/glsl/00_test_list.txt
-                conformance/glsl/functions/00_test_list.txt
-                conformance/glsl/functions/glsl-function-abs.html
-                conformance/glsl/functions/glsl-function-acos.html
-                conformance/glsl/functions/glsl-function-asin.html
-                conformance/glsl/functions/glsl-function-atan-xy.html
-                conformance/glsl/functions/glsl-function-atan.html
-                conformance/glsl/functions/glsl-function-ceil.html
-                conformance/glsl/functions/glsl-function-clamp-float.html
-                conformance/glsl/functions/glsl-function-clamp-gentype.html
-                conformance/glsl/functions/glsl-function-cos.html
-                conformance/glsl/functions/glsl-function-cross.html
-                conformance/glsl/functions/glsl-function-distance.html
-                conformance/glsl/functions/glsl-function-dot.html
-                conformance/glsl/functions/glsl-function-faceforward.html
-                conformance/glsl/functions/glsl-function-floor.html
-                conformance/glsl/functions/glsl-function-fract.html
-                conformance/glsl/functions/glsl-function-length.html
-                conformance/glsl/functions/glsl-function-lessThan.html
-                conformance/glsl/functions/glsl-function-max-float.html
-                conformance/glsl/functions/glsl-function-max-gentype.html
-                conformance/glsl/functions/glsl-function-min-float.html
-                conformance/glsl/functions/glsl-function-min-gentype.html
-                conformance/glsl/functions/glsl-function-mix-float.html
-                conformance/glsl/functions/glsl-function-mix-gentype.html
-                conformance/glsl/functions/glsl-function-mod-float.html
-                conformance/glsl/functions/glsl-function-mod-gentype.html
-                conformance/glsl/functions/glsl-function-normalize.html
-                conformance/glsl/functions/glsl-function-reflect.html
-                conformance/glsl/functions/glsl-function-refract.html
-                conformance/glsl/functions/glsl-function-sign.html
-                conformance/glsl/functions/glsl-function-sin.html
-                conformance/glsl/functions/glsl-function-smoothstep-float.html
-                conformance/glsl/functions/glsl-function-smoothstep-gentype.html
-                conformance/glsl/functions/glsl-function-step-float.html
-                conformance/glsl/functions/glsl-function-step-gentype.html
-                conformance/glsl/functions/glsl-function.html
-                conformance/glsl/implicit/00_test_list.txt
-                conformance/glsl/implicit/add_int_float.vert.html
-                conformance/glsl/implicit/add_int_mat2.vert.html
-                conformance/glsl/implicit/add_int_mat3.vert.html
-                conformance/glsl/implicit/add_int_mat4.vert.html
-                conformance/glsl/implicit/add_int_vec2.vert.html
-                conformance/glsl/implicit/add_int_vec3.vert.html
-                conformance/glsl/implicit/add_int_vec4.vert.html
-                conformance/glsl/implicit/add_ivec2_vec2.vert.html
-                conformance/glsl/implicit/add_ivec3_vec3.vert.html
-                conformance/glsl/implicit/add_ivec4_vec4.vert.html
-                conformance/glsl/implicit/assign_int_to_float.vert.html
-                conformance/glsl/implicit/assign_ivec2_to_vec2.vert.html
-                conformance/glsl/implicit/assign_ivec3_to_vec3.vert.html
-                conformance/glsl/implicit/assign_ivec4_to_vec4.vert.html
-                conformance/glsl/implicit/construct_struct.vert.html
-                conformance/glsl/implicit/divide_int_float.vert.html
-                conformance/glsl/implicit/divide_int_mat2.vert.html
-                conformance/glsl/implicit/divide_int_mat3.vert.html
-                conformance/glsl/implicit/divide_int_mat4.vert.html
-                conformance/glsl/implicit/divide_int_vec2.vert.html
-                conformance/glsl/implicit/divide_int_vec3.vert.html
-                conformance/glsl/implicit/divide_int_vec4.vert.html
-                conformance/glsl/implicit/divide_ivec2_vec2.vert.html
-                conformance/glsl/implicit/divide_ivec3_vec3.vert.html
-                conformance/glsl/implicit/divide_ivec4_vec4.vert.html
-                conformance/glsl/implicit/equal_int_float.vert.html
-                conformance/glsl/implicit/equal_ivec2_vec2.vert.html
-                conformance/glsl/implicit/equal_ivec3_vec3.vert.html
-                conformance/glsl/implicit/equal_ivec4_vec4.vert.html
-                conformance/glsl/implicit/function_int_float.vert.html
-                conformance/glsl/implicit/function_ivec2_vec2.vert.html
-                conformance/glsl/implicit/function_ivec3_vec3.vert.html
-                conformance/glsl/implicit/function_ivec4_vec4.vert.html
-                conformance/glsl/implicit/greater_than.vert.html
-                conformance/glsl/implicit/greater_than_equal.vert.html
-                conformance/glsl/implicit/less_than.vert.html
-                conformance/glsl/implicit/less_than_equal.vert.html
-                conformance/glsl/implicit/multiply_int_float.vert.html
-                conformance/glsl/implicit/multiply_int_mat2.vert.html
-                conformance/glsl/implicit/multiply_int_mat3.vert.html
-                conformance/glsl/implicit/multiply_int_mat4.vert.html
-                conformance/glsl/implicit/multiply_int_vec2.vert.html
-                conformance/glsl/implicit/multiply_int_vec3.vert.html
-                conformance/glsl/implicit/multiply_int_vec4.vert.html
-                conformance/glsl/implicit/multiply_ivec2_vec2.vert.html
-                conformance/glsl/implicit/multiply_ivec3_vec3.vert.html
-                conformance/glsl/implicit/multiply_ivec4_vec4.vert.html
-                conformance/glsl/implicit/not_equal_int_float.vert.html
-                conformance/glsl/implicit/not_equal_ivec2_vec2.vert.html
-                conformance/glsl/implicit/not_equal_ivec3_vec3.vert.html
-                conformance/glsl/implicit/not_equal_ivec4_vec4.vert.html
-                conformance/glsl/implicit/subtract_int_float.vert.html
-                conformance/glsl/implicit/subtract_int_mat2.vert.html
-                conformance/glsl/implicit/subtract_int_mat3.vert.html
-                conformance/glsl/implicit/subtract_int_mat4.vert.html
-                conformance/glsl/implicit/subtract_int_vec2.vert.html
-                conformance/glsl/implicit/subtract_int_vec3.vert.html
-                conformance/glsl/implicit/subtract_int_vec4.vert.html
-                conformance/glsl/implicit/subtract_ivec2_vec2.vert.html
-                conformance/glsl/implicit/subtract_ivec3_vec3.vert.html
-                conformance/glsl/implicit/subtract_ivec4_vec4.vert.html
-                conformance/glsl/implicit/ternary_int_float.vert.html
-                conformance/glsl/implicit/ternary_ivec2_vec2.vert.html
-                conformance/glsl/implicit/ternary_ivec3_vec3.vert.html
-                conformance/glsl/implicit/ternary_ivec4_vec4.vert.html
-                conformance/glsl/matrices/00_test_list.txt
-                conformance/glsl/matrices/glsl-mat4-to-mat3.html
-                conformance/glsl/misc/00_test_list.txt
-                conformance/glsl/misc/attrib-location-length-limits.html
-                conformance/glsl/misc/embedded-struct-definitions-forbidden.html
-                conformance/glsl/misc/glsl-2types-of-textures-on-same-unit.html
-                conformance/glsl/misc/glsl-function-nodes.html
-                conformance/glsl/misc/glsl-long-variable-names.html
-                conformance/glsl/misc/glsl-vertex-branch.html
-                conformance/glsl/misc/include.vs
-                conformance/glsl/misc/non-ascii-comments.vert.html
-                conformance/glsl/misc/non-ascii.vert.html
-                conformance/glsl/misc/re-compile-re-link.html
-                conformance/glsl/misc/shader-with-256-character-identifier.frag.html
-                conformance/glsl/misc/shader-with-257-character-identifier.frag.html
-                conformance/glsl/misc/shader-with-_webgl-identifier.vert.html
-                conformance/glsl/misc/shader-with-arbitrary-indexing.frag.html
-                conformance/glsl/misc/shader-with-arbitrary-indexing.vert.html
-                conformance/glsl/misc/shader-with-attrib-array.vert.html
-                conformance/glsl/misc/shader-with-attrib-struct.vert.html
-                conformance/glsl/misc/shader-with-clipvertex.vert.html
-                conformance/glsl/misc/shader-with-comma-assignment.html
-                conformance/glsl/misc/shader-with-comma-conditional-assignment.html
-                conformance/glsl/misc/shader-with-conditional-scoping.html
-                conformance/glsl/misc/shader-with-default-precision.frag.html
-                conformance/glsl/misc/shader-with-default-precision.vert.html
-                conformance/glsl/misc/shader-with-define-line-continuation.frag.html
-                conformance/glsl/misc/shader-with-dfdx-no-ext.frag.html
-                conformance/glsl/misc/shader-with-dfdx.frag.html
-                conformance/glsl/misc/shader-with-do-scoping.html
-                conformance/glsl/misc/shader-with-error-directive.html
-                conformance/glsl/misc/shader-with-explicit-int-cast.vert.html
-                conformance/glsl/misc/shader-with-float-return-value.frag.html
-                conformance/glsl/misc/shader-with-for-loop.html
-                conformance/glsl/misc/shader-with-for-scoping.html
-                conformance/glsl/misc/shader-with-frag-depth.frag.html
-                conformance/glsl/misc/shader-with-function-recursion.frag.html
-                conformance/glsl/misc/shader-with-function-scoped-struct.html
-                conformance/glsl/misc/shader-with-functional-scoping.html
-                conformance/glsl/misc/shader-with-glcolor.vert.html
-                conformance/glsl/misc/shader-with-gles-1.frag.html
-                conformance/glsl/misc/shader-with-gles-symbol.frag.html
-                conformance/glsl/misc/shader-with-glprojectionmatrix.vert.html
-                conformance/glsl/misc/shader-with-hex-int-constant-macro.html
-                conformance/glsl/misc/shader-with-implicit-vec3-to-vec4-cast.vert.html
-                conformance/glsl/misc/shader-with-include.vert.html
-                conformance/glsl/misc/shader-with-int-return-value.frag.html
-                conformance/glsl/misc/shader-with-invalid-identifier.frag.html
-                conformance/glsl/misc/shader-with-ivec2-return-value.frag.html
-                conformance/glsl/misc/shader-with-ivec3-return-value.frag.html
-                conformance/glsl/misc/shader-with-ivec4-return-value.frag.html
-                conformance/glsl/misc/shader-with-limited-indexing.frag.html
-                conformance/glsl/misc/shader-with-line-directive.html
-                conformance/glsl/misc/shader-with-long-line.html
-                conformance/glsl/misc/shader-with-non-ascii-error.frag.html
-                conformance/glsl/misc/shader-with-precision.frag.html
-                conformance/glsl/misc/shader-with-quoted-error.frag.html
-                conformance/glsl/misc/shader-with-undefined-preprocessor-symbol.frag.html
-                conformance/glsl/misc/shader-with-uniform-in-loop-condition.vert.html
-                conformance/glsl/misc/shader-with-vec2-return-value.frag.html
-                conformance/glsl/misc/shader-with-vec3-return-value.frag.html
-                conformance/glsl/misc/shader-with-vec4-return-value.frag.html
-                conformance/glsl/misc/shader-with-vec4-vec3-vec4-conditional.html
-                conformance/glsl/misc/shader-with-version-100.frag.html
-                conformance/glsl/misc/shader-with-version-100.vert.html
-                conformance/glsl/misc/shader-with-version-120.vert.html
-                conformance/glsl/misc/shader-with-version-130.vert.html
-                conformance/glsl/misc/shader-with-webgl-identifier.vert.html
-                conformance/glsl/misc/shader-without-precision.frag.html
-                conformance/glsl/misc/shared.html
-                conformance/glsl/misc/struct-nesting-exceeds-maximum.html
-                conformance/glsl/misc/struct-nesting-under-maximum.html
-                conformance/glsl/misc/uniform-location-length-limits.html
-                conformance/glsl/reserved/00_test_list.txt
-                conformance/glsl/reserved/_webgl_field.vert.html
-                conformance/glsl/reserved/_webgl_function.vert.html
-                conformance/glsl/reserved/_webgl_struct.vert.html
-                conformance/glsl/reserved/_webgl_variable.vert.html
-                conformance/glsl/reserved/webgl_field.vert.html
-                conformance/glsl/reserved/webgl_function.vert.html
-                conformance/glsl/reserved/webgl_struct.vert.html
-                conformance/glsl/reserved/webgl_variable.vert.html
-                conformance/glsl/samplers/00_test_list.txt
-                conformance/glsl/samplers/glsl-function-texture2d-bias.html
-                conformance/glsl/samplers/glsl-function-texture2dlod.html
-                conformance/glsl/samplers/glsl-function-texture2dproj.html
-                conformance/glsl/variables/00_test_list.txt
-                conformance/glsl/variables/gl-fragcoord.html
-                conformance/glsl/variables/gl-frontfacing.html
-                conformance/glsl/variables/gl-pointcoord.html
-                conformance/limits/00_test_list.txt
-                conformance/limits/gl-max-texture-dimensions.html
-                conformance/limits/gl-min-attribs.html
-                conformance/limits/gl-min-textures.html
-                conformance/limits/gl-min-uniforms.html
-                conformance/misc/00_test_list.txt
-                conformance/misc/bad-arguments-test.html
-                conformance/misc/delayed-drawing.html
-                conformance/misc/error-reporting.html
-                conformance/misc/functions-returning-strings.html
-                conformance/misc/instanceof-test.html
-                conformance/misc/invalid-passed-params.html
-                conformance/misc/is-object.html
-                conformance/misc/null-object-behaviour.html
-                conformance/misc/object-deletion-behaviour.html
-                conformance/misc/shader-precision-format.html
-                conformance/misc/type-conversion-test.html
-                conformance/misc/uninitialized-test.html
-                conformance/misc/webgl-specific.html
-                conformance/more/00_test_list.txt
-                conformance/more/README.md
-                conformance/more/all_tests.html
-                conformance/more/all_tests_linkonly.html
-                conformance/more/all_tests_sequential.html
-                conformance/more/conformance/argGenerators-A.js
-                conformance/more/conformance/argGenerators-B1.js
-                conformance/more/conformance/argGenerators-B2.js
-                conformance/more/conformance/argGenerators-B3.js
-                conformance/more/conformance/argGenerators-B4.js
-                conformance/more/conformance/argGenerators-C.js
-                conformance/more/conformance/argGenerators-D_G.js
-                conformance/more/conformance/argGenerators-G_I.js
-                conformance/more/conformance/argGenerators-L_S.js
-                conformance/more/conformance/argGenerators-S_V.js
-                conformance/more/conformance/badArgsArityLessThanArgc.html
-                conformance/more/conformance/constants.html
-                conformance/more/conformance/fuzzTheAPI.html
-                conformance/more/conformance/getContext.html
-                conformance/more/conformance/methods.html
-                conformance/more/conformance/quickCheckAPI-A.html
-                conformance/more/conformance/quickCheckAPI-B1.html
-                conformance/more/conformance/quickCheckAPI-B2.html
-                conformance/more/conformance/quickCheckAPI-B3.html
-                conformance/more/conformance/quickCheckAPI-B4.html
-                conformance/more/conformance/quickCheckAPI-C.html
-                conformance/more/conformance/quickCheckAPI-D_G.html
-                conformance/more/conformance/quickCheckAPI-G_I.html
-                conformance/more/conformance/quickCheckAPI-L_S.html
-                conformance/more/conformance/quickCheckAPI-S_V.html
-                conformance/more/conformance/quickCheckAPI.js
-                conformance/more/conformance/quickCheckAPIBadArgs.html
-                conformance/more/conformance/webGLArrays.html
-                conformance/more/demos/opengl_web.html
-                conformance/more/demos/video.html
-                conformance/more/functions/bindBuffer.html
-                conformance/more/functions/bindBufferBadArgs.html
-                conformance/more/functions/bindFramebufferLeaveNonZero.html
-                conformance/more/functions/bufferData.html
-                conformance/more/functions/bufferDataBadArgs.html
-                conformance/more/functions/bufferSubData.html
-                conformance/more/functions/bufferSubDataBadArgs.html
-                conformance/more/functions/copyTexImage2D.html
-                conformance/more/functions/copyTexImage2DBadArgs.html
-                conformance/more/functions/copyTexSubImage2D.html
-                conformance/more/functions/copyTexSubImage2DBadArgs.html
-                conformance/more/functions/deleteBufferBadArgs.html
-                conformance/more/functions/drawArrays.html
-                conformance/more/functions/drawArraysOutOfBounds.html
-                conformance/more/functions/drawElements.html
-                conformance/more/functions/drawElementsBadArgs.html
-                conformance/more/functions/isTests.html
-                conformance/more/functions/readPixels.html
-                conformance/more/functions/readPixelsBadArgs.html
-                conformance/more/functions/texImage2D.html
-                conformance/more/functions/texImage2DBadArgs.html
-                conformance/more/functions/texImage2DHTML.html
-                conformance/more/functions/texImage2DHTMLBadArgs.html
-                conformance/more/functions/texSubImage2D.html
-                conformance/more/functions/texSubImage2DBadArgs.html
-                conformance/more/functions/texSubImage2DHTML.html
-                conformance/more/functions/texSubImage2DHTMLBadArgs.html
-                conformance/more/functions/uniformMatrix.html
-                conformance/more/functions/uniformMatrixBadArgs.html
-                conformance/more/functions/uniformf.html
-                conformance/more/functions/uniformfArrayLen1.html
-                conformance/more/functions/uniformfBadArgs.html
-                conformance/more/functions/uniformi.html
-                conformance/more/functions/uniformiBadArgs.html
-                conformance/more/functions/vertexAttrib.html
-                conformance/more/functions/vertexAttribBadArgs.html
-                conformance/more/functions/vertexAttribPointer.html
-                conformance/more/functions/vertexAttribPointerBadArgs.html
-                conformance/more/glsl/arrayOutOfBounds.html
-                conformance/more/glsl/longLoops.html
-                conformance/more/glsl/uniformOutOfBounds.html
-                conformance/more/glsl/unusedAttribsUniforms.html
-                conformance/more/index.html
-                conformance/more/performance/CPUvsGPU.html
-                conformance/more/performance/bandwidth.html
-                conformance/more/performance/jsGCPause.html
-                conformance/more/performance/jsMatrixMult.html
-                conformance/more/performance/jsToGLOverhead.html
-                conformance/more/unit.css
-                conformance/more/unit.js
-                conformance/more/util.js
-                conformance/programs/00_test_list.txt
-                conformance/programs/get-active-test.html
-                conformance/programs/gl-bind-attrib-location-test.html
-                conformance/programs/gl-get-active-attribute.html
-                conformance/programs/gl-get-active-uniform.html
-                conformance/programs/gl-getshadersource.html
-                conformance/programs/gl-shader-test.html
-                conformance/programs/invalid-UTF-16.html
-                conformance/programs/program-test.html
-                conformance/reading/00_test_list.txt
-                conformance/reading/read-pixels-pack-alignment.html
-                conformance/reading/read-pixels-test.html
-                conformance/renderbuffers/00_test_list.txt
-                conformance/renderbuffers/framebuffer-object-attachment.html
-                conformance/renderbuffers/framebuffer-test.html
-                conformance/renderbuffers/renderbuffer-initialization.html
-                conformance/rendering/00_test_list.txt
-                conformance/rendering/draw-arrays-out-of-bounds.html
-                conformance/rendering/draw-elements-out-of-bounds.html
-                conformance/rendering/gl-clear.html
-                conformance/rendering/gl-drawelements.html
-                conformance/rendering/gl-scissor-test.html
-                conformance/rendering/line-loop-tri-fan.html
-                conformance/rendering/more-than-65536-indices.html
-                conformance/rendering/point-size.html
-                conformance/rendering/triangle.html
-                conformance/resources/3x3.png
-                conformance/resources/blue-1x1.jpg
-                conformance/resources/boolUniformShader.vert
-                conformance/resources/bug-32888-texture.png
-                conformance/resources/floatUniformShader.vert
-                conformance/resources/fragmentShader.frag
-                conformance/resources/glsl-conformance-test.js
-                conformance/resources/glsl-feature-tests.css
-                conformance/resources/glsl-generator.js
-                conformance/resources/gray-ramp-256-with-128-alpha.png
-                conformance/resources/gray-ramp-256.png
-                conformance/resources/gray-ramp-default-gamma.png
-                conformance/resources/gray-ramp-gamma0.1.png
-                conformance/resources/gray-ramp-gamma1.0.png
-                conformance/resources/gray-ramp-gamma2.0.png
-                conformance/resources/gray-ramp-gamma4.0.png
-                conformance/resources/gray-ramp-gamma9.0.png
-                conformance/resources/gray-ramp.png
-                conformance/resources/green-2x2-16bit.png
-                conformance/resources/intArrayUniformShader.vert
-                conformance/resources/intUniformShader.vert
-                conformance/resources/matUniformShader.vert
-                conformance/resources/noopUniformShader.frag
-                conformance/resources/noopUniformShader.vert
-                conformance/resources/npot-video.mp4
-                conformance/resources/npot-video.theora.ogv
-                conformance/resources/npot-video.webmvp8.webm
-                conformance/resources/pnglib.js
-                conformance/resources/red-green.mp4
-                conformance/resources/red-green.png
-                conformance/resources/red-green.theora.ogv
-                conformance/resources/red-green.webmvp8.webm
-                conformance/resources/red-indexed.png
-                conformance/resources/samplerUniformShader.frag
-                conformance/resources/small-square-with-cie-rgb-profile.png
-                conformance/resources/small-square-with-colormatch-profile.png
-                conformance/resources/small-square-with-colorspin-profile.jpg
-                conformance/resources/small-square-with-colorspin-profile.png
-                conformance/resources/small-square-with-e-srgb-profile.png
-                conformance/resources/small-square-with-smpte-c-profile.png
-                conformance/resources/small-square-with-srgb-iec61966-2.1-profile.png
-                conformance/resources/structUniformShader.vert
-                conformance/resources/vertexShader.vert
-                conformance/resources/webgl-test-utils.js
-                conformance/resources/webgl-test.js
-                conformance/resources/zero-alpha.png
-                conformance/state/00_test_list.txt
-                conformance/state/gl-enable-enum-test.html
-                conformance/state/gl-enum-tests.html
-                conformance/state/gl-get-calls.html
-                conformance/state/gl-geterror.html
-                conformance/state/gl-getstring.html
-                conformance/state/gl-object-get-calls.html
-                conformance/textures/00_test_list.txt
-                conformance/textures/compressed-tex-image.html
-                conformance/textures/copy-tex-image-and-sub-image-2d.html
-                conformance/textures/gl-pixelstorei.html
-                conformance/textures/gl-teximage.html
-                conformance/textures/origin-clean-conformance.html
-                conformance/textures/tex-image-and-sub-image-2d-with-array-buffer-view.html
-                conformance/textures/tex-image-and-sub-image-2d-with-canvas.html
-                conformance/textures/tex-image-and-sub-image-2d-with-image-data.html
-                conformance/textures/tex-image-and-sub-image-2d-with-image.html
-                conformance/textures/tex-image-and-sub-image-2d-with-video.html
-                conformance/textures/tex-image-and-uniform-binding-bugs.html
-                conformance/textures/tex-image-with-format-and-type.html
-                conformance/textures/tex-image-with-invalid-data.html
-                conformance/textures/tex-input-validation.html
-                conformance/textures/tex-sub-image-2d-bad-args.html
-                conformance/textures/tex-sub-image-2d.html
-                conformance/textures/texparameter-test.html
-                conformance/textures/texture-active-bind-2.html
-                conformance/textures/texture-active-bind.html
-                conformance/textures/texture-clear.html
-                conformance/textures/texture-complete.html
-                conformance/textures/texture-formats-test.html
-                conformance/textures/texture-mips.html
-                conformance/textures/texture-npot-video.html
-                conformance/textures/texture-npot.html
-                conformance/textures/texture-size-cube-maps.html
-                conformance/textures/texture-size.html
-                conformance/textures/texture-transparent-pixels-initialized.html
-                conformance/typedarrays/00_test_list.txt
-                conformance/typedarrays/array-buffer-crash.html
-                conformance/typedarrays/array-buffer-view-crash.html
-                conformance/typedarrays/array-unit-tests.html
-                conformance/uniforms/00_test_list.txt
-                conformance/uniforms/gl-uniform-arrays.html
-                conformance/uniforms/gl-uniform-bool.html
-                conformance/uniforms/gl-uniformmatrix4fv.html
-                conformance/uniforms/gl-unknown-uniform.html
-                conformance/uniforms/null-uniform-location.html
-                conformance/uniforms/uniform-location.html
-                conformance/uniforms/uniform-samplers-test.html
-                resources/cors-util.js
-                resources/desktop-gl-constants.js
-                resources/js-test-pre.js
-                resources/js-test-style.css
-                resources/opengl_logo.jpg
-                resources/thunderbird-logo-64x64.png
-                resources/webgl-logo.png
-                resources/webgl-test-harness.js
-
-[_wrappers/test_always-fail.html]
-[_wrappers/test_conformance__attribs__gl-enable-vertex-attrib.html]
-[_wrappers/test_conformance__attribs__gl-vertex-attrib-zero-issues.html]
-[_wrappers/test_conformance__attribs__gl-vertex-attrib.html]
-[_wrappers/test_conformance__attribs__gl-vertexattribpointer-offsets.html]
-[_wrappers/test_conformance__attribs__gl-vertexattribpointer.html]
-[_wrappers/test_conformance__buffers__buffer-bind-test.html]
-[_wrappers/test_conformance__buffers__buffer-data-array-buffer.html]
-[_wrappers/test_conformance__buffers__index-validation-copies-indices.html]
-[_wrappers/test_conformance__buffers__index-validation-crash-with-buffer-sub-data.html]
-[_wrappers/test_conformance__buffers__index-validation-verifies-too-many-indices.html]
-[_wrappers/test_conformance__buffers__index-validation-with-resized-buffer.html]
-[_wrappers/test_conformance__buffers__index-validation.html]
-[_wrappers/test_conformance__canvas__buffer-offscreen-test.html]
-[_wrappers/test_conformance__canvas__buffer-preserve-test.html]
-[_wrappers/test_conformance__canvas__canvas-test.html]
-[_wrappers/test_conformance__canvas__canvas-zero-size.html]
-[_wrappers/test_conformance__canvas__drawingbuffer-static-canvas-test.html]
-skip-if = os == 'mac'
-[_wrappers/test_conformance__canvas__drawingbuffer-test.html]
-[_wrappers/test_conformance__canvas__viewport-unchanged-upon-resize.html]
-[_wrappers/test_conformance__context__constants.html]
-[_wrappers/test_conformance__context__context-attributes-alpha-depth-stencil-antialias.html]
-skip-if = (os == 'b2g')
-[_wrappers/test_conformance__context__context-lost-restored.html]
-[_wrappers/test_conformance__context__context-lost.html]
-[_wrappers/test_conformance__context__context-type-test.html]
-[_wrappers/test_conformance__context__incorrect-context-object-behaviour.html]
-[_wrappers/test_conformance__context__methods.html]
-[_wrappers/test_conformance__context__premultiplyalpha-test.html]
-[_wrappers/test_conformance__context__resource-sharing-test.html]
-[_wrappers/test_conformance__extensions__oes-standard-derivatives.html]
-[_wrappers/test_conformance__extensions__ext-texture-filter-anisotropic.html]
-[_wrappers/test_conformance__extensions__oes-texture-float.html]
-[_wrappers/test_conformance__extensions__oes-vertex-array-object.html]
-[_wrappers/test_conformance__extensions__webgl-debug-renderer-info.html]
-[_wrappers/test_conformance__extensions__webgl-debug-shaders.html]
-[_wrappers/test_conformance__extensions__webgl-compressed-texture-etc1.html]
-[_wrappers/test_conformance__extensions__webgl-compressed-texture-s3tc.html]
-[_wrappers/test_conformance__extensions__ext-sRGB.html]
-[_wrappers/test_conformance__extensions__ext-shader-texture-lod.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-abs.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-acos.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-asin.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-atan.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-atan-xy.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-ceil.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-clamp-float.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-clamp-gentype.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-cos.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-cross.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-distance.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-dot.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-faceforward.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-floor.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-fract.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-length.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-max-float.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-max-gentype.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-min-float.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-min-gentype.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-mix-float.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-mix-gentype.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-mod-float.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-mod-gentype.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-normalize.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-reflect.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-sign.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-sin.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-step-float.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-step-gentype.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-smoothstep-float.html]
-[_wrappers/test_conformance__glsl__functions__glsl-function-smoothstep-gentype.html]
-[_wrappers/test_conformance__glsl__implicit__add_int_float.vert.html]
-[_wrappers/test_conformance__glsl__implicit__add_int_mat2.vert.html]
-[_wrappers/test_conformance__glsl__implicit__add_int_mat3.vert.html]
-[_wrappers/test_conformance__glsl__implicit__add_int_mat4.vert.html]
-[_wrappers/test_conformance__glsl__implicit__add_int_vec2.vert.html]
-[_wrappers/test_conformance__glsl__implicit__add_int_vec3.vert.html]
-[_wrappers/test_conformance__glsl__implicit__add_int_vec4.vert.html]
-[_wrappers/test_conformance__glsl__implicit__add_ivec2_vec2.vert.html]
-[_wrappers/test_conformance__glsl__implicit__add_ivec3_vec3.vert.html]
-[_wrappers/test_conformance__glsl__implicit__add_ivec4_vec4.vert.html]
-[_wrappers/test_conformance__glsl__implicit__assign_int_to_float.vert.html]
-[_wrappers/test_conformance__glsl__implicit__assign_ivec2_to_vec2.vert.html]
-[_wrappers/test_conformance__glsl__implicit__assign_ivec3_to_vec3.vert.html]
-[_wrappers/test_conformance__glsl__implicit__assign_ivec4_to_vec4.vert.html]
-[_wrappers/test_conformance__glsl__implicit__construct_struct.vert.html]
-[_wrappers/test_conformance__glsl__implicit__divide_int_float.vert.html]
-[_wrappers/test_conformance__glsl__implicit__divide_int_mat2.vert.html]
-[_wrappers/test_conformance__glsl__implicit__divide_int_mat3.vert.html]
-[_wrappers/test_conformance__glsl__implicit__divide_int_mat4.vert.html]
-[_wrappers/test_conformance__glsl__implicit__divide_int_vec2.vert.html]
-[_wrappers/test_conformance__glsl__implicit__divide_int_vec3.vert.html]
-[_wrappers/test_conformance__glsl__implicit__divide_int_vec4.vert.html]
-[_wrappers/test_conformance__glsl__implicit__divide_ivec2_vec2.vert.html]
-[_wrappers/test_conformance__glsl__implicit__divide_ivec3_vec3.vert.html]
-[_wrappers/test_conformance__glsl__implicit__divide_ivec4_vec4.vert.html]
-[_wrappers/test_conformance__glsl__implicit__equal_int_float.vert.html]
-[_wrappers/test_conformance__glsl__implicit__equal_ivec2_vec2.vert.html]
-[_wrappers/test_conformance__glsl__implicit__equal_ivec3_vec3.vert.html]
-[_wrappers/test_conformance__glsl__implicit__equal_ivec4_vec4.vert.html]
-[_wrappers/test_conformance__glsl__implicit__function_int_float.vert.html]
-[_wrappers/test_conformance__glsl__implicit__function_ivec2_vec2.vert.html]
-[_wrappers/test_conformance__glsl__implicit__function_ivec3_vec3.vert.html]
-[_wrappers/test_conformance__glsl__implicit__function_ivec4_vec4.vert.html]
-[_wrappers/test_conformance__glsl__implicit__greater_than.vert.html]
-[_wrappers/test_conformance__glsl__implicit__greater_than_equal.vert.html]
-[_wrappers/test_conformance__glsl__implicit__less_than.vert.html]
-[_wrappers/test_conformance__glsl__implicit__less_than_equal.vert.html]
-[_wrappers/test_conformance__glsl__implicit__multiply_int_float.vert.html]
-[_wrappers/test_conformance__glsl__implicit__multiply_int_mat2.vert.html]
-[_wrappers/test_conformance__glsl__implicit__multiply_int_mat3.vert.html]
-[_wrappers/test_conformance__glsl__implicit__multiply_int_mat4.vert.html]
-[_wrappers/test_conformance__glsl__implicit__multiply_int_vec2.vert.html]
-[_wrappers/test_conformance__glsl__implicit__multiply_int_vec3.vert.html]
-[_wrappers/test_conformance__glsl__implicit__multiply_int_vec4.vert.html]
-[_wrappers/test_conformance__glsl__implicit__multiply_ivec2_vec2.vert.html]
-[_wrappers/test_conformance__glsl__implicit__multiply_ivec3_vec3.vert.html]
-[_wrappers/test_conformance__glsl__implicit__multiply_ivec4_vec4.vert.html]
-[_wrappers/test_conformance__glsl__implicit__not_equal_int_float.vert.html]
-[_wrappers/test_conformance__glsl__implicit__not_equal_ivec2_vec2.vert.html]
-[_wrappers/test_conformance__glsl__implicit__not_equal_ivec3_vec3.vert.html]
-[_wrappers/test_conformance__glsl__implicit__not_equal_ivec4_vec4.vert.html]
-[_wrappers/test_conformance__glsl__implicit__subtract_int_float.vert.html]
-[_wrappers/test_conformance__glsl__implicit__subtract_int_mat2.vert.html]
-[_wrappers/test_conformance__glsl__implicit__subtract_int_mat3.vert.html]
-[_wrappers/test_conformance__glsl__implicit__subtract_int_mat4.vert.html]
-[_wrappers/test_conformance__glsl__implicit__subtract_int_vec2.vert.html]
-[_wrappers/test_conformance__glsl__implicit__subtract_int_vec3.vert.html]
-[_wrappers/test_conformance__glsl__implicit__subtract_int_vec4.vert.html]
-[_wrappers/test_conformance__glsl__implicit__subtract_ivec2_vec2.vert.html]
-[_wrappers/test_conformance__glsl__implicit__subtract_ivec3_vec3.vert.html]
-[_wrappers/test_conformance__glsl__implicit__subtract_ivec4_vec4.vert.html]
-[_wrappers/test_conformance__glsl__implicit__ternary_int_float.vert.html]
-[_wrappers/test_conformance__glsl__implicit__ternary_ivec2_vec2.vert.html]
-[_wrappers/test_conformance__glsl__implicit__ternary_ivec3_vec3.vert.html]
-[_wrappers/test_conformance__glsl__implicit__ternary_ivec4_vec4.vert.html]
-[_wrappers/test_conformance__glsl__misc__attrib-location-length-limits.html]
-[_wrappers/test_conformance__glsl__misc__embedded-struct-definitions-forbidden.html]
-[_wrappers/test_conformance__glsl__misc__glsl-function-nodes.html]
-[_wrappers/test_conformance__glsl__misc__glsl-long-variable-names.html]
-[_wrappers/test_conformance__glsl__misc__non-ascii-comments.vert.html]
-[_wrappers/test_conformance__glsl__misc__non-ascii.vert.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-256-character-identifier.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-257-character-identifier.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-_webgl-identifier.vert.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-arbitrary-indexing.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-arbitrary-indexing.vert.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-attrib-array.vert.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-attrib-struct.vert.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-clipvertex.vert.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-default-precision.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-default-precision.vert.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-define-line-continuation.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-dfdx-no-ext.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-dfdx.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-error-directive.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-explicit-int-cast.vert.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-float-return-value.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-frag-depth.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-function-recursion.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-glcolor.vert.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-gles-1.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-gles-symbol.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-glprojectionmatrix.vert.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-implicit-vec3-to-vec4-cast.vert.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-include.vert.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-int-return-value.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-invalid-identifier.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-ivec2-return-value.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-ivec3-return-value.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-ivec4-return-value.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-limited-indexing.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-long-line.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-non-ascii-error.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-precision.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-quoted-error.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-undefined-preprocessor-symbol.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-uniform-in-loop-condition.vert.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-vec2-return-value.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-vec3-return-value.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-vec4-return-value.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-version-100.frag.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-version-100.vert.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-version-120.vert.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-version-130.vert.html]
-[_wrappers/test_conformance__glsl__misc__shader-with-webgl-identifier.vert.html]
-[_wrappers/test_conformance__glsl__misc__shader-without-precision.frag.html]
-[_wrappers/test_conformance__glsl__misc__shared.html]
-[_wrappers/test_conformance__glsl__misc__struct-nesting-exceeds-maximum.html]
-[_wrappers/test_conformance__glsl__misc__struct-nesting-under-maximum.html]
-[_wrappers/test_conformance__glsl__misc__uniform-location-length-limits.html]
-[_wrappers/test_conformance__glsl__reserved___webgl_field.vert.html]
-[_wrappers/test_conformance__glsl__reserved___webgl_function.vert.html]
-[_wrappers/test_conformance__glsl__reserved___webgl_struct.vert.html]
-[_wrappers/test_conformance__glsl__reserved___webgl_variable.vert.html]
-[_wrappers/test_conformance__glsl__reserved__webgl_field.vert.html]
-[_wrappers/test_conformance__glsl__reserved__webgl_function.vert.html]
-[_wrappers/test_conformance__glsl__reserved__webgl_struct.vert.html]
-[_wrappers/test_conformance__glsl__reserved__webgl_variable.vert.html]
-[_wrappers/test_conformance__glsl__variables__gl-fragcoord.html]
-[_wrappers/test_conformance__glsl__variables__gl-frontfacing.html]
-[_wrappers/test_conformance__glsl__variables__gl-pointcoord.html]
-[_wrappers/test_conformance__limits__gl-min-attribs.html]
-[_wrappers/test_conformance__limits__gl-max-texture-dimensions.html]
-[_wrappers/test_conformance__limits__gl-min-textures.html]
-[_wrappers/test_conformance__limits__gl-min-uniforms.html]
-[_wrappers/test_conformance__misc__bad-arguments-test.html]
-[_wrappers/test_conformance__misc__error-reporting.html]
-[_wrappers/test_conformance__misc__instanceof-test.html]
-[_wrappers/test_conformance__misc__invalid-passed-params.html]
-skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux')
-[_wrappers/test_conformance__misc__is-object.html]
-[_wrappers/test_conformance__misc__null-object-behaviour.html]
-[_wrappers/test_conformance__misc__functions-returning-strings.html]
-[_wrappers/test_conformance__misc__object-deletion-behaviour.html]
-[_wrappers/test_conformance__misc__shader-precision-format.html]
-[_wrappers/test_conformance__misc__type-conversion-test.html]
-skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux')
-[_wrappers/test_conformance__misc__uninitialized-test.html]
-skip-if = os == 'android'
-[_wrappers/test_conformance__misc__webgl-specific.html]
-[_wrappers/test_conformance__programs__get-active-test.html]
-[_wrappers/test_conformance__programs__gl-bind-attrib-location-test.html]
-[_wrappers/test_conformance__programs__gl-get-active-attribute.html]
-[_wrappers/test_conformance__programs__gl-get-active-uniform.html]
-[_wrappers/test_conformance__programs__gl-getshadersource.html]
-[_wrappers/test_conformance__programs__gl-shader-test.html]
-[_wrappers/test_conformance__programs__invalid-UTF-16.html]
-[_wrappers/test_conformance__programs__program-test.html]
-[_wrappers/test_conformance__reading__read-pixels-pack-alignment.html]
-[_wrappers/test_conformance__reading__read-pixels-test.html]
-skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux')
-[_wrappers/test_conformance__renderbuffers__framebuffer-object-attachment.html]
-skip-if = os == 'android'
-[_wrappers/test_conformance__renderbuffers__framebuffer-test.html]
-[_wrappers/test_conformance__renderbuffers__renderbuffer-initialization.html]
-[_wrappers/test_conformance__rendering__draw-arrays-out-of-bounds.html]
-[_wrappers/test_conformance__rendering__draw-elements-out-of-bounds.html]
-[_wrappers/test_conformance__rendering__gl-clear.html]
-[_wrappers/test_conformance__rendering__gl-drawelements.html]
-[_wrappers/test_conformance__rendering__gl-scissor-test.html]
-[_wrappers/test_conformance__rendering__more-than-65536-indices.html]
-[_wrappers/test_conformance__rendering__point-size.html]
-[_wrappers/test_conformance__rendering__triangle.html]
-[_wrappers/test_conformance__rendering__line-loop-tri-fan.html]
-[_wrappers/test_conformance__state__gl-enable-enum-test.html]
-[_wrappers/test_conformance__state__gl-enum-tests.html]
-[_wrappers/test_conformance__state__gl-get-calls.html]
-[_wrappers/test_conformance__state__gl-geterror.html]
-[_wrappers/test_conformance__state__gl-getstring.html]
-[_wrappers/test_conformance__state__gl-object-get-calls.html]
-[_wrappers/test_conformance__textures__compressed-tex-image.html]
-[_wrappers/test_conformance__textures__copy-tex-image-and-sub-image-2d.html]
-[_wrappers/test_conformance__textures__gl-pixelstorei.html]
-[_wrappers/test_conformance__textures__gl-teximage.html]
-skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux')
-[_wrappers/test_conformance__textures__origin-clean-conformance.html]
-[_wrappers/test_conformance__textures__tex-image-and-sub-image-2d-with-array-buffer-view.html]
-[_wrappers/test_conformance__textures__tex-image-and-sub-image-2d-with-canvas.html]
-[_wrappers/test_conformance__textures__tex-image-and-sub-image-2d-with-image-data.html]
-[_wrappers/test_conformance__textures__tex-image-and-sub-image-2d-with-image.html]
-[_wrappers/test_conformance__textures__tex-image-and-sub-image-2d-with-video.html]
-skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux') || (os == 'win')
-[_wrappers/test_conformance__textures__tex-image-and-uniform-binding-bugs.html]
-skip-if = (os == 'b2g')
-[_wrappers/test_conformance__textures__tex-image-with-format-and-type.html]
-skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux')
-[_wrappers/test_conformance__textures__tex-image-with-invalid-data.html]
-[_wrappers/test_conformance__textures__tex-input-validation.html]
-skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux')
-[_wrappers/test_conformance__textures__tex-sub-image-2d-bad-args.html]
-[_wrappers/test_conformance__textures__tex-sub-image-2d.html]
-[_wrappers/test_conformance__textures__texparameter-test.html]
-[_wrappers/test_conformance__textures__texture-active-bind-2.html]
-[_wrappers/test_conformance__textures__texture-active-bind.html]
-[_wrappers/test_conformance__textures__texture-complete.html]
-[_wrappers/test_conformance__textures__texture-formats-test.html]
-[_wrappers/test_conformance__textures__texture-mips.html]
-[_wrappers/test_conformance__textures__texture-npot-video.html]
-skip-if = os == 'win'
-[_wrappers/test_conformance__textures__texture-npot.html]
-[_wrappers/test_conformance__textures__texture-size.html]
-skip-if = os == 'android'
-[_wrappers/test_conformance__textures__texture-size-cube-maps.html]
-skip-if = os == 'android'
-[_wrappers/test_conformance__textures__texture-transparent-pixels-initialized.html]
-[_wrappers/test_conformance__typedarrays__array-buffer-crash.html]
-[_wrappers/test_conformance__typedarrays__array-buffer-view-crash.html]
-[_wrappers/test_conformance__typedarrays__array-unit-tests.html]
-[_wrappers/test_conformance__uniforms__gl-uniform-arrays.html]
-[_wrappers/test_conformance__uniforms__gl-uniform-bool.html]
-[_wrappers/test_conformance__uniforms__gl-uniformmatrix4fv.html]
-[_wrappers/test_conformance__uniforms__gl-unknown-uniform.html]
-[_wrappers/test_conformance__uniforms__null-uniform-location.html]
-[_wrappers/test_conformance__uniforms__uniform-location.html]
-[_wrappers/test_conformance__uniforms__uniform-samplers-test.html]
-[_wrappers/test_conformance__more__conformance__constants.html]
-[_wrappers/test_conformance__more__conformance__getContext.html]
-[_wrappers/test_conformance__more__conformance__methods.html]
-[_wrappers/test_conformance__more__conformance__quickCheckAPI-A.html]
-[_wrappers/test_conformance__more__conformance__quickCheckAPI-B1.html]
-[_wrappers/test_conformance__more__conformance__quickCheckAPI-B2.html]
-[_wrappers/test_conformance__more__conformance__quickCheckAPI-B3.html]
-[_wrappers/test_conformance__more__conformance__quickCheckAPI-B4.html]
-[_wrappers/test_conformance__more__conformance__quickCheckAPI-C.html]
-[_wrappers/test_conformance__more__conformance__quickCheckAPI-D_G.html]
-[_wrappers/test_conformance__more__conformance__quickCheckAPI-G_I.html]
-[_wrappers/test_conformance__more__conformance__quickCheckAPI-L_S.html]
-[_wrappers/test_conformance__more__conformance__quickCheckAPI-S_V.html]
-[_wrappers/test_conformance__more__conformance__webGLArrays.html]
-[_wrappers/test_conformance__more__functions__bindBuffer.html]
-[_wrappers/test_conformance__more__functions__bindBufferBadArgs.html]
-[_wrappers/test_conformance__more__functions__bindFramebufferLeaveNonZero.html]
-[_wrappers/test_conformance__more__functions__bufferData.html]
-[_wrappers/test_conformance__more__functions__bufferDataBadArgs.html]
-[_wrappers/test_conformance__more__functions__bufferSubData.html]
-[_wrappers/test_conformance__more__functions__bufferSubDataBadArgs.html]
-[_wrappers/test_conformance__more__functions__copyTexImage2D.html]
-[_wrappers/test_conformance__more__functions__copyTexImage2DBadArgs.html]
-[_wrappers/test_conformance__more__functions__copyTexSubImage2D.html]
-[_wrappers/test_conformance__more__functions__copyTexSubImage2DBadArgs.html]
-[_wrappers/test_conformance__more__functions__deleteBufferBadArgs.html]
-[_wrappers/test_conformance__more__functions__drawArrays.html]
-[_wrappers/test_conformance__more__functions__drawArraysOutOfBounds.html]
-[_wrappers/test_conformance__more__functions__drawElements.html]
-[_wrappers/test_conformance__more__functions__drawElementsBadArgs.html]
-[_wrappers/test_conformance__more__functions__isTests.html]
-[_wrappers/test_conformance__more__functions__readPixels.html]
-[_wrappers/test_conformance__more__functions__readPixelsBadArgs.html]
-[_wrappers/test_conformance__more__functions__texImage2D.html]
-[_wrappers/test_conformance__more__functions__texImage2DBadArgs.html]
-[_wrappers/test_conformance__more__functions__texImage2DHTML.html]
-[_wrappers/test_conformance__more__functions__texImage2DHTMLBadArgs.html]
-[_wrappers/test_conformance__more__functions__texSubImage2D.html]
-[_wrappers/test_conformance__more__functions__texSubImage2DBadArgs.html]
-[_wrappers/test_conformance__more__functions__texSubImage2DHTML.html]
-[_wrappers/test_conformance__more__functions__texSubImage2DHTMLBadArgs.html]
-[_wrappers/test_conformance__more__functions__uniformf.html]
-[_wrappers/test_conformance__more__functions__uniformfBadArgs.html]
-[_wrappers/test_conformance__more__functions__uniformfArrayLen1.html]
-[_wrappers/test_conformance__more__functions__uniformi.html]
-[_wrappers/test_conformance__more__functions__uniformiBadArgs.html]
-[_wrappers/test_conformance__more__functions__uniformMatrix.html]
-[_wrappers/test_conformance__more__functions__uniformMatrixBadArgs.html]
-[_wrappers/test_conformance__more__functions__vertexAttrib.html]
-[_wrappers/test_conformance__more__functions__vertexAttribBadArgs.html]
-[_wrappers/test_conformance__more__functions__vertexAttribPointer.html]
-[_wrappers/test_conformance__more__functions__vertexAttribPointerBadArgs.html]
-[_wrappers/test_conformance__more__glsl__arrayOutOfBounds.html]
-[_wrappers/test_conformance__more__glsl__uniformOutOfBounds.html]
--- a/dom/canvas/test/webgl-conformance/generate-wrappers-and-manifest.py
+++ b/dom/canvas/test/webgl-conformance/generate-wrappers-and-manifest.py
@@ -4,29 +4,55 @@
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 #
 # Write a Mochitest manifest for WebGL conformance test files.
 
 import os
 import re
 
+WRAPPER_TEMPLATE_FILEPATH = 'mochi-wrapper.html.template'
+WRAPPERS_DIR = '_wrappers'
+MANIFEST_TEMPLATE_FILEPATH = 'mochitest.ini.template'
+MANIFEST_OUTPUT_FILEPATH = '../_webgl-conformance.ini'
+ERRATA_FILEPATH = 'mochitest-errata.ini'
+BASE_TEST_LIST_FILENAME = '00_test_list.txt'
+FILE_PATH_PREFIX = os.path.basename(os.getcwd()) # 'webgl-conformance'
+
+SUPPORT_DIRS = [
+    'conformance',
+    'resources',
+]
+
+EXTRA_SUPPORT_FILES = [
+    'always-fail.html',
+]
+
+ACCEPTABLE_ERRATA_KEYS = set([
+  'skip-if',
+])
+
+GENERATED_HEADER = '''
+# This is a GENERATED FILE. Do not edit it directly.
+# Regenerated it by using `python generate-wrapper-and-manifest.py`.
+# Mark skipped tests in mochitest-errata.ini.
+# Mark failing tests in mochi-single.html.
+'''.strip()
+
 ########################################################################
 # GetTestList
 
 def GetTestList():
     testList = []
     AccumTests('', BASE_TEST_LIST_FILENAME, testList)
     return testList
 
 ##############################
 # Internals
 
-BASE_TEST_LIST_FILENAME = '00_test_list.txt'
-
 def AccumTests(path, listFile, out_testList):
     listFilePath = os.path.join(path, listFile)
     assert os.path.exists(listFilePath), 'Bad `listFilePath`: ' + listFilePath
 
     with open(listFilePath, 'rb') as fIn:
         for line in fIn:
             line = line.rstrip()
             if not line:
@@ -214,113 +240,116 @@ def WriteWrappers(testWebPathList):
 
         wrapperManifestPath = wrapperFilePath.replace(os.sep, '/')
         wrapperManifestPathList.append(wrapperManifestPath)
         continue
 
     return wrapperManifestPathList
 
 
+def PathFromManifestDir(path):
+    print('path: ' + path)
+    return os.path.join(FILE_PATH_PREFIX, path)
+
+
 def WriteManifest(wrapperManifestPathList, supportFilePathList):
     errataMap = LoadErrata()
 
     # DEFAULT_ERRATA
     defaultHeader = '[DEFAULT]'
     defaultErrataStr = ''
     if defaultHeader in errataMap:
         defaultErrataStr = '\n'.join(errataMap[defaultHeader])
         del errataMap[defaultHeader]
 
     # SUPPORT_FILES
     supportFilePathList = sorted(supportFilePathList)
+    supportFilePathList = [PathFromManifestDir(x) for x in supportFilePathList]
     supportFilesStr = '\n'.join(supportFilePathList)
 
     # MANIFEST_TESTS
-    headerList = ['[' + x + ']' for x in wrapperManifestPathList]
+    manifestTestLineList = []
+    for wrapperManifestPath in wrapperManifestPathList:
+        header = '[' + wrapperManifestPath + ']'
+        transformedHeader = '[' + PathFromManifestDir(wrapperManifestPath) + ']'
+        # header: '[foo.html]'
+        # transformedHeader: '[webgl-conformance/foo.html]'
 
-    manifestTestLineList = []
-    for header in headerList:
-        manifestTestLineList.append(header)
+        manifestTestLineList.append(transformedHeader)
 
         if not header in errataMap:
             continue
 
         errataLineList = errataMap[header]
         del errataMap[header]
         manifestTestLineList += errataLineList
         continue
 
     assert not errataMap, 'Errata left in map: {}'.format(str(errataMap))
 
     manifestTestsStr = '\n'.join(manifestTestLineList)
 
     # Fill the template.
     templateDict = {
+        'HEADER': GENERATED_HEADER,
         'DEFAULT_ERRATA': defaultErrataStr,
         'SUPPORT_FILES': supportFilesStr,
         'MANIFEST_TESTS': manifestTestsStr,
     }
 
     FillTemplate(MANIFEST_TEMPLATE_FILEPATH, templateDict,
                  MANIFEST_OUTPUT_FILEPATH)
     return
 
 ##############################
 # Internals
 
-WRAPPER_TEMPLATE_FILEPATH = 'mochi-wrapper.html.template'
-WRAPPERS_DIR = '_wrappers'
-MANIFEST_TEMPLATE_FILEPATH = 'mochitest.ini.template'
-MANIFEST_OUTPUT_FILEPATH = '_mochitest.ini'
-ERRATA_FILEPATH = 'mochitest-errata.ini'
 kManifestHeaderRegex = re.compile(r'\[[^\]]*?\]')
 
 
 def LoadErrata():
     nodeMap = {}
 
     nodeHeader = None
     nodeLineList = []
+    lineNum = 0
     with open(ERRATA_FILEPATH, 'rb') as f:
         for line in f:
+            lineNum += 1
             line = line.rstrip()
             cur = line.lstrip()
             if cur.startswith('#'):
                 continue
 
             if not cur:
                 continue
 
             if not cur.startswith('['):
+                split = cur.split('=')
+                key = split[0].strip()
+                if not key in ACCEPTABLE_ERRATA_KEYS:
+                    text = 'Unacceptable errata key on line {}: {}'
+                    text = text.format(str(lineNum), key)
+                    raise Exception(text)
                 nodeLineList.append(line)
                 continue
 
             match = kManifestHeaderRegex.search(cur)
             assert match, line
 
             nodeHeader = match.group()
             assert not nodeHeader in nodeMap, 'Duplicate header: ' + nodeHeader
             nodeLineList = []
             nodeMap[nodeHeader] = nodeLineList
             continue
 
     return nodeMap
 
 ########################################################################
 
-SUPPORT_DIRS = [
-    'conformance',
-    'resources',
-]
-
-EXTRA_SUPPORT_FILES = [
-    'always-fail.html',
-]
-
-
 def GetSupportFileList():
     ret = []
     for supportDir in SUPPORT_DIRS:
         ret += GetFilePathListForDir(supportDir)
 
     ret += EXTRA_SUPPORT_FILES
 
     return ret
--- a/dom/canvas/test/webgl-conformance/mochitest.ini.template
+++ b/dom/canvas/test/webgl-conformance/mochitest.ini.template
@@ -1,8 +1,10 @@
+%%HEADER%%
+
 [DEFAULT]
 %%DEFAULT_ERRATA%%
 
-support-files = mochi-single.html
-                mochi-wrapper.css
+support-files = webgl-conformance/mochi-single.html
+                webgl-conformance/mochi-wrapper.css
                 %%SUPPORT_FILES%%
 
 %%MANIFEST_TESTS%%
deleted file mode 100644
--- a/dom/canvas/test/webgl-conformance/moz.build
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-MOCHITEST_MANIFESTS += [
-    '_mochitest.ini',
-]
rename from dom/canvas/test/webgl-mochitest/mochitest.ini
rename to dom/canvas/test/webgl-mochitest.ini
--- a/dom/canvas/test/webgl-mochitest/mochitest.ini
+++ b/dom/canvas/test/webgl-mochitest.ini
@@ -1,24 +1,24 @@
 [DEFAULT]
 support-files =
-  driver-info.js
-  webgl-util.js
+  webgl-mochitest/driver-info.js
+  webgl-mochitest/webgl-util.js
 
-[test_depth_readpixels.html]
-[test_draw.html]
-[test_fb_param.html]
-[test_fb_param_crash.html]
-[test_highp_fs.html]
-[test_no_arr_points.html]
-[test_noprog_draw.html]
-[test_privileged_exts.html]
-[test_texsubimage_float.html]
-[test_webgl_available.html]
+[webgl-mochitest/test_depth_readpixels.html]
+[webgl-mochitest/test_draw.html]
+[webgl-mochitest/test_fb_param.html]
+[webgl-mochitest/test_fb_param_crash.html]
+[webgl-mochitest/test_highp_fs.html]
+[webgl-mochitest/test_no_arr_points.html]
+[webgl-mochitest/test_noprog_draw.html]
+[webgl-mochitest/test_privileged_exts.html]
+[webgl-mochitest/test_texsubimage_float.html]
+[webgl-mochitest/test_webgl_available.html]
 skip-if = toolkit == 'android' #bug 865443- seperate suite - the non_conf* tests pass except for one on armv6 tests
-[test_webgl_conformance.html]
+[webgl-mochitest/test_webgl_conformance.html]
 skip-if = buildapp == 'mulet' || toolkit == 'android' #bug 865443- seperate suite - the non_conf* tests pass except for one on armv6 tests
-[test_webgl_request_context.html]
+[webgl-mochitest/test_webgl_request_context.html]
 skip-if = toolkit == 'android' #bug 865443- seperate suite - the non_conf* tests pass except for one on armv6 tests
-[test_webgl_request_mismatch.html]
+[webgl-mochitest/test_webgl_request_mismatch.html]
 skip-if = toolkit == 'android' #bug 865443- seperate suite - the non_conf* tests pass except for one on armv6 tests
-[test_webgl2_not_exposed.html]
+[webgl-mochitest/test_webgl2_not_exposed.html]
 skip-if = toolkit == 'android' #bug 865443- seperate suite - the non_conf* tests pass except for one on armv6 tests
deleted file mode 100644
--- a/dom/canvas/test/webgl-mochitest/moz.build
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-MOCHITEST_MANIFESTS += [
-    'mochitest.ini',
-]
--- a/dom/tests/browser/browser_ConsoleAPITests.js
+++ b/dom/tests/browser/browser_ConsoleAPITests.js
@@ -169,20 +169,20 @@ function testConsoleGroup(aMessageObject
   if (aMessageObject.level == "groupEnd") {
     startTimeTest();
   }
 }
 
 function startTraceTest() {
   gLevel = "trace";
   gArgs = [
-    {filename: TEST_URI, functionName: "window.foobar585956c", language: 2, lineNumber: 6},
-    {filename: TEST_URI, functionName: "foobar585956b", language: 2, lineNumber: 11},
-    {filename: TEST_URI, functionName: "foobar585956a", language: 2, lineNumber: 15},
-    {filename: TEST_URI, functionName: "onclick", language: 2, lineNumber: 1}
+    {columnNumber: 8, filename: TEST_URI, functionName: "window.foobar585956c", language: 2, lineNumber: 6},
+    {columnNumber: 15, filename: TEST_URI, functionName: "foobar585956b", language: 2, lineNumber: 11},
+    {columnNumber: 15, filename: TEST_URI, functionName: "foobar585956a", language: 2, lineNumber: 15},
+    {columnNumber: 0, filename: TEST_URI, functionName: "onclick", language: 2, lineNumber: 1}
   ];
 
   let button = gWindow.document.getElementById("test-trace");
   ok(button, "found #test-trace button");
   EventUtils.synthesizeMouseAtCenter(button, {}, gWindow);
 }
 
 function startLocationTest() {
--- a/dom/webidl/Console.webidl
+++ b/dom/webidl/Console.webidl
@@ -33,16 +33,17 @@ interface Console {
 
 // This is used to propagate console events to the observers.
 dictionary ConsoleEvent {
   (unsigned long or DOMString) ID;
   (unsigned long or DOMString) innerID;
   DOMString level = "";
   DOMString filename = "";
   unsigned long lineNumber = 0;
+  unsigned long columnNumber = 0;
   DOMString functionName = "";
   double timeStamp = 0;
   sequence<any> arguments;
 
   // This array will only hold strings or null elements.
   sequence<any> styles;
 
   boolean private = false;
@@ -62,16 +63,17 @@ dictionary ConsoleProfileEvent {
   DOMString action = "";
   sequence<any> arguments;
 };
 
 // This dictionary is used to manage stack trace data.
 dictionary ConsoleStackEntry {
   DOMString filename = "";
   unsigned long lineNumber = 0;
+  unsigned long columnNumber = 0;
   DOMString functionName = "";
   unsigned long language = 0;
 };
 
 dictionary ConsoleTimerStart {
   DOMString name = "";
   double started = 0;
 };
--- a/gfx/2d/DrawTargetD2D.cpp
+++ b/gfx/2d/DrawTargetD2D.cpp
@@ -1956,17 +1956,17 @@ DrawTargetD2D::CreateRTForTexture(ID3D10
   HRESULT hr;
 
   RefPtr<IDXGISurface> surface;
   RefPtr<ID2D1RenderTarget> rt;
 
   hr = aTexture->QueryInterface((IDXGISurface**)byRef(surface));
 
   if (FAILED(hr)) {
-    gfxCriticalError() << "Failed to QI texture to surface.";
+    gfxCriticalError() << "Failed to QI texture to surface. Code: " << hr;
     return nullptr;
   }
 
   D3D10_TEXTURE2D_DESC desc;
   aTexture->GetDesc(&desc);
 
   D2D1_ALPHA_MODE alphaMode = D2D1_ALPHA_MODE_PREMULTIPLIED;
 
@@ -1974,17 +1974,17 @@ DrawTargetD2D::CreateRTForTexture(ID3D10
     alphaMode = D2D1_ALPHA_MODE_IGNORE;
   }
 
   D2D1_RENDER_TARGET_PROPERTIES props =
     D2D1::RenderTargetProperties(D2D1_RENDER_TARGET_TYPE_DEFAULT, D2D1::PixelFormat(desc.Format, alphaMode));
   hr = factory()->CreateDxgiSurfaceRenderTarget(surface, props, byRef(rt));
 
   if (FAILED(hr)) {
-    gfxCriticalError() << "Failed to create D2D render target for texture.";
+    gfxCriticalError() << "Failed to create D2D render target for texture. Code:" << hr << " " << mSize << " Format: " << uint32_t(aFormat);
     return nullptr;
   }
 
   return rt.forget();
 }
 
 void
 DrawTargetD2D::EnsureViews()
--- a/gfx/layers/client/ClientTiledThebesLayer.cpp
+++ b/gfx/layers/client/ClientTiledThebesLayer.cpp
@@ -264,16 +264,17 @@ ClientTiledThebesLayer::RenderLowPrecisi
     // If the frame resolution or format have changed, invalidate the buffer
     if (mContentClient->mLowPrecisionTiledBuffer.GetFrameResolution() != mPaintData.mResolution ||
         mContentClient->mLowPrecisionTiledBuffer.HasFormatChanged()) {
       if (!mLowPrecisionValidRegion.IsEmpty()) {
         updatedBuffer = true;
       }
       oldValidRegion.SetEmpty();
       mLowPrecisionValidRegion.SetEmpty();
+      mContentClient->mLowPrecisionTiledBuffer.ResetPaintedAndValidState();
       mContentClient->mLowPrecisionTiledBuffer.SetFrameResolution(mPaintData.mResolution);
       aInvalidRegion = aVisibleRegion;
     }
 
     // Invalidate previously valid content that is no longer visible
     if (mPaintData.mLowPrecisionPaintCount == 1) {
       mLowPrecisionValidRegion.And(mLowPrecisionValidRegion, aVisibleRegion);
     }
@@ -333,16 +334,17 @@ ClientTiledThebesLayer::RenderLayer()
 
     mContentClient->Connect();
     ClientManager()->AsShadowForwarder()->Attach(mContentClient, this);
     MOZ_ASSERT(mContentClient->GetForwarder());
   }
 
   if (mContentClient->mTiledBuffer.HasFormatChanged()) {
     mValidRegion = nsIntRegion();
+    mContentClient->mTiledBuffer.ResetPaintedAndValidState();
   }
 
   TILING_LOG("TILING %p: Initial visible region %s\n", this, Stringify(mVisibleRegion).c_str());
   TILING_LOG("TILING %p: Initial valid region %s\n", this, Stringify(mValidRegion).c_str());
   TILING_LOG("TILING %p: Initial low-precision valid region %s\n", this, Stringify(mLowPrecisionValidRegion).c_str());
 
   nsIntRegion neededRegion = mVisibleRegion;
 #ifndef MOZ_GFX_OPTIMIZE_MOBILE
--- a/gfx/layers/client/TiledContentClient.cpp
+++ b/gfx/layers/client/TiledContentClient.cpp
@@ -1103,24 +1103,16 @@ ClientTiledLayerBuffer::ValidateTile(Til
   }
 #endif
 
   if (aTile.IsPlaceholderTile()) {
     aTile.SetLayerManager(mManager);
   }
   aTile.SetCompositableClient(mCompositableClient);
 
-  // Discard our front and backbuffers if our contents changed. In this case
-  // the calling code will already have taken care of invalidating the entire
-  // layer.
-  if (HasFormatChanged()) {
-    aTile.DiscardBackBuffer();
-    aTile.DiscardFrontBuffer();
-  }
-
   bool createdTextureClient = false;
   nsIntRegion offsetScaledDirtyRegion = aDirtyRegion.MovedBy(-aTileOrigin);
   offsetScaledDirtyRegion.ScaleRoundOut(mResolution, mResolution);
 
   bool usingSinglePaintBuffer = !!mSinglePaintDrawTarget;
   SurfaceMode mode;
   gfxContentType content = GetContentType(&mode);
   nsIntRegion extraPainted;
--- a/js/xpconnect/src/XPCWrappedJS.cpp
+++ b/js/xpconnect/src/XPCWrappedJS.cpp
@@ -342,50 +342,60 @@ nsXPCWrappedJS::GetNewOrUsed(JS::HandleO
                                                                             allowNonScriptable);
     if (!clasp)
         return NS_ERROR_FAILURE;
 
     JS::RootedObject rootJSObj(cx, clasp->GetRootJSObject(cx, jsObj));
     if (!rootJSObj)
         return NS_ERROR_FAILURE;
 
+    nsresult rv = NS_ERROR_FAILURE;
     nsRefPtr<nsXPCWrappedJS> root = map->Find(rootJSObj);
     if (root) {
         nsRefPtr<nsXPCWrappedJS> wrapper = root->FindOrFindInherited(aIID);
         if (wrapper) {
             wrapper.forget(wrapperResult);
             return NS_OK;
         }
     } else if (rootJSObj != jsObj) {
 
         // Make a new root wrapper, because there is no existing
         // root wrapper, and the wrapper we are trying to make isn't
         // a root.
         nsRefPtr<nsXPCWrappedJSClass> rootClasp = nsXPCWrappedJSClass::GetNewOrUsed(cx, NS_GET_IID(nsISupports));
         if (!rootClasp)
             return NS_ERROR_FAILURE;
 
-        root = new nsXPCWrappedJS(cx, rootJSObj, rootClasp, nullptr);
+        root = new nsXPCWrappedJS(cx, rootJSObj, rootClasp, nullptr, &rv);
+        if (NS_FAILED(rv)) {
+            return rv;
+        }
     }
 
-    nsRefPtr<nsXPCWrappedJS> wrapper = new nsXPCWrappedJS(cx, jsObj, clasp, root);
+    nsRefPtr<nsXPCWrappedJS> wrapper = new nsXPCWrappedJS(cx, jsObj, clasp, root, &rv);
+    if (NS_FAILED(rv)) {
+        return rv;
+    }
     wrapper.forget(wrapperResult);
     return NS_OK;
 }
 
 nsXPCWrappedJS::nsXPCWrappedJS(JSContext* cx,
                                JSObject* aJSObj,
                                nsXPCWrappedJSClass* aClass,
-                               nsXPCWrappedJS* root)
+                               nsXPCWrappedJS* root,
+                               nsresult *rv)
     : mJSObj(aJSObj),
       mClass(aClass),
       mRoot(root ? root : MOZ_THIS_IN_INITIALIZER_LIST()),
       mNext(nullptr)
 {
-    InitStub(GetClass()->GetIID());
+    *rv = InitStub(GetClass()->GetIID());
+    // Continue even in the failure case, so that our refcounting/Destroy
+    // behavior works correctly.
 
     // There is an extra AddRef to support weak references to wrappers
     // that are subject to finalization. See the top of the file for more
     // details.
     NS_ADDREF_THIS();
 
     if (IsRootWrapper()) {
         nsXPConnect::GetRuntimeInstance()->GetWrappedJSMap()->Add(cx, this);
--- a/js/xpconnect/src/xpcprivate.h
+++ b/js/xpconnect/src/xpcprivate.h
@@ -2488,17 +2488,18 @@ public:
     size_t SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const;
 
     virtual ~nsXPCWrappedJS();
 protected:
     nsXPCWrappedJS();   // not implemented
     nsXPCWrappedJS(JSContext* cx,
                    JSObject* aJSObj,
                    nsXPCWrappedJSClass* aClass,
-                   nsXPCWrappedJS* root);
+                   nsXPCWrappedJS* root,
+                   nsresult* rv);
 
     bool CanSkip();
     void Destroy();
     void Unlink();
 
 private:
     JS::Heap<JSObject*> mJSObj;
     nsRefPtr<nsXPCWrappedJSClass> mClass;
--- a/media/webrtc/trunk/webrtc/video_engine/vie_encoder.cc
+++ b/media/webrtc/trunk/webrtc/video_engine/vie_encoder.cc
@@ -700,16 +700,30 @@ void ViEEncoder::DeliverFrame(int id,
                    webrtc::kTraceVideo,
                    ViEId(engine_id_, channel_id_),
                    "%s: Error encoding frame %u", __FUNCTION__,
                    video_frame->timestamp());
     }
     return;
   }
 #endif
+#ifdef MOZ_WEBRTC_OMX
+  // XXX effectively disable resolution changes until Bug 1067437 is resolved with new DSP code
+  if (qm_callback_ && vcm_.SendCodec() == webrtc::kVideoCodecH264) {
+    if (vcm_.RegisterVideoQMCallback(NULL) != 0) {
+      WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideo,
+                   ViEId(engine_id_, channel_id_),
+                   "VCM::RegisterQMCallback(NULL) failure");
+      return;
+    }
+    delete qm_callback_;
+    qm_callback_ = NULL;
+  }
+#endif
+
   if (vcm_.AddVideoFrame(*decimated_frame,
                          vpm_.ContentMetrics()) != VCM_OK) {
     WEBRTC_TRACE(webrtc::kTraceError,
                  webrtc::kTraceVideo,
                  ViEId(engine_id_, channel_id_),
                  "%s: Error encoding frame %u", __FUNCTION__,
                  video_frame->timestamp());
   }
--- a/widget/cocoa/nsChildView.mm
+++ b/widget/cocoa/nsChildView.mm
@@ -220,16 +220,17 @@ static uint32_t gNumberOfWidgetsNeedingE
 @end
 
 @interface NSView(NSThemeFrameCornerRadius)
 - (float)roundedCornerRadius;
 @end
 
 @interface NSView(DraggableRegion)
 - (CGSRegionObj)_regionForOpaqueDescendants:(NSRect)aRect forMove:(BOOL)aForMove;
+- (CGSRegionObj)_regionForOpaqueDescendants:(NSRect)aRect forMove:(BOOL)aForMove forUnderTitlebar:(BOOL)aForUnderTitlebar;
 @end
 
 // Starting with 10.7 the bottom corners of all windows are rounded.
 // Unfortunately, the standard rounding that OS X applies to OpenGL views
 // does not use anti-aliasing and looks very crude. Since we want a smooth,
 // anti-aliased curve, we'll draw it ourselves.
 // Additionally, we need to turn off the OS-supplied rounding because it
 // eats into our corner's curve. We do that by overriding an NSSurface method.
@@ -4953,16 +4954,33 @@ NewCGSRegionFromRegion(const nsIntRegion
   nsIntRegion opaqueRegion;
   opaqueRegion.Sub(boundingRect, mGeckoChild->GetDraggableRegion());
 
   return NewCGSRegionFromRegion(opaqueRegion, ^(const nsIntRect& r) {
     return [self convertToFlippedWindowCoordinates:mGeckoChild->DevPixelsToCocoaPoints(r)];
   });
 }
 
+// Starting with 10.10, in addition to the traditional
+// -[NSView _regionForOpaqueDescendants:forMove:] method, there's a new form with
+// an additional forUnderTitlebar argument, which is sometimes called instead of
+// the old form. We need to override the new variant as well.
+- (CGSRegionObj)_regionForOpaqueDescendants:(NSRect)aRect
+                                    forMove:(BOOL)aForMove
+                           forUnderTitlebar:(BOOL)aForUnderTitlebar
+{
+  if (!aForMove || !mGeckoChild) {
+    return [super _regionForOpaqueDescendants:aRect
+                                      forMove:aForMove
+                             forUnderTitlebar:aForUnderTitlebar];
+  }
+
+  return [self _regionForOpaqueDescendants:aRect forMove:aForMove];
+}
+
 - (void)handleMouseMoved:(NSEvent*)theEvent
 {
   NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
 
   if (!mGeckoChild)
     return;
 
   WidgetMouseEvent geckoEvent(true, NS_MOUSE_MOVE, mGeckoChild,
--- a/xpcom/base/nsIException.idl
+++ b/xpcom/base/nsIException.idl
@@ -5,26 +5,27 @@
 
 /*
  * Interfaces for representing cross-language exceptions and stack traces.
  */
 
 
 #include "nsISupports.idl"
 
-[scriptable, uuid(13b75be1-f950-497b-81e4-a0214a14e5ae)]
+[scriptable, uuid(f80ac10b-68dd-4482-a8c2-3cbe13fa89af)]
 interface nsIStackFrame : nsISupports
 {
     // see nsIProgrammingLanguage for list of language consts
     readonly attribute uint32_t                language;
     readonly attribute AUTF8String             languageName;
     readonly attribute AString                 filename;
     readonly attribute AString                 name;
     // Valid line numbers begin at '1'. '0' indicates unknown.
     readonly attribute int32_t                 lineNumber;
+    readonly attribute int32_t                 columnNumber;
     readonly attribute AUTF8String             sourceLine;
     readonly attribute nsIStackFrame           caller;
 
     // Returns a formatted stack string that looks like the sort of
     // string that would be returned by .stack on JS Error objects.
     // Only works on JS-language stack frames.
     readonly attribute AString                 formattedStack;
 
--- a/xpcom/reflect/xptcall/xptcall.cpp
+++ b/xpcom/reflect/xptcall/xptcall.cpp
@@ -3,16 +3,17 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /* entry point wrappers. */
 
 #include "xptcprivate.h"
 #include "xptiprivate.h"
 #include "mozilla/XPTInterfaceInfoManager.h"
+#include "nsPrintfCString.h"
 
 using namespace mozilla;
 
 NS_IMETHODIMP
 nsXPTCStubBase::QueryInterface(REFNSIID aIID,
                                void **aInstancePtr)
 {
     if (aIID.Equals(mEntry->IID())) {
@@ -47,16 +48,24 @@ NS_GetXPTCallStub(REFNSIID aIID, nsIXPTC
         XPTInterfaceInfoManager::GetSingleton();
     if (NS_WARN_IF(!iim))
         return NS_ERROR_NOT_INITIALIZED;
 
     xptiInterfaceEntry *iie = iim->GetInterfaceEntryForIID(&aIID);
     if (!iie || !iie->EnsureResolved() || iie->GetBuiltinClassFlag())
         return NS_ERROR_FAILURE;
 
+    if (iie->GetHasNotXPCOMFlag()) {
+#ifdef DEBUG
+        nsPrintfCString msg("XPTCall will not implement interface %s because of [notxpcom] members.", iie->GetTheName());
+        NS_WARNING(msg.get());
+#endif
+        return NS_ERROR_FAILURE;
+    }
+
     nsXPTCStubBase* newbase = new nsXPTCStubBase(aOuter, iie);
     if (!newbase)
         return NS_ERROR_OUT_OF_MEMORY;
 
     *aResult = newbase;
     return NS_OK;
 }
 
--- a/xpcom/reflect/xptinfo/xptiInterfaceInfo.cpp
+++ b/xpcom/reflect/xptinfo/xptiInterfaceInfo.cpp
@@ -102,16 +102,29 @@ xptiInterfaceEntry::ResolveLocked()
         
         if(!parent || !parent->EnsureResolvedLocked())
         {
             SetResolvedState(RESOLVE_FAILED);
             return false;
         }
 
         mParent = parent;
+        if (parent->GetHasNotXPCOMFlag()) {
+            SetHasNotXPCOMFlag();
+        } else {
+            for (uint16_t idx = 0; idx < mDescriptor->num_methods; ++idx) {
+                nsXPTMethodInfo* method = reinterpret_cast<nsXPTMethodInfo*>(
+                    mDescriptor->method_descriptors + idx);
+                if (method->IsNotXPCOM()) {
+                    SetHasNotXPCOMFlag();
+                    break;
+                }
+            }
+        }
+
 
         mMethodBaseIndex =
             parent->mMethodBaseIndex + 
             parent->mDescriptor->num_methods;
         
         mConstantBaseIndex =
             parent->mConstantBaseIndex + 
             parent->mDescriptor->num_constants;
--- a/xpcom/reflect/xptinfo/xptiprivate.h
+++ b/xpcom/reflect/xptinfo/xptiprivate.h
@@ -175,32 +175,43 @@ public:
 
     enum {
         PARTIALLY_RESOLVED    = 1,
         FULLY_RESOLVED        = 2,
         RESOLVE_FAILED        = 3
     };
     
     // Additional bit flags...
-    enum {SCRIPTABLE = 4, BUILTINCLASS = 8};
+    enum {SCRIPTABLE = 4, BUILTINCLASS = 8, HASNOTXPCOM = 16};
 
     uint8_t GetResolveState() const {return mFlags.GetState();}
     
     bool IsFullyResolved() const 
         {return GetResolveState() == (uint8_t) FULLY_RESOLVED;}
 
     void   SetScriptableFlag(bool on)
                 {mFlags.SetFlagBit(uint8_t(SCRIPTABLE),on);}
     bool GetScriptableFlag() const
                 {return mFlags.GetFlagBit(uint8_t(SCRIPTABLE));}
     void   SetBuiltinClassFlag(bool on)
                 {mFlags.SetFlagBit(uint8_t(BUILTINCLASS),on);}
     bool GetBuiltinClassFlag() const
                 {return mFlags.GetFlagBit(uint8_t(BUILTINCLASS));}
 
+
+    // AddRef/Release are special and are not considered for the NOTXPCOM flag.
+    void SetHasNotXPCOMFlag()
+    {
+        mFlags.SetFlagBit(HASNOTXPCOM, true);
+    }
+    bool GetHasNotXPCOMFlag() const
+    {
+        return mFlags.GetFlagBit(HASNOTXPCOM);
+    }
+
     const nsID* GetTheIID()  const {return &mIID;}
     const char* GetTheName() const {return mName;}
 
     bool EnsureResolved()
         {return IsFullyResolved() ? true : Resolve();}
 
     already_AddRefed<xptiInterfaceInfo> InterfaceInfo();
     bool     InterfaceInfoEquals(const xptiInterfaceInfo* info) const 
--- a/xpcom/tests/Makefile.in
+++ b/xpcom/tests/Makefile.in
@@ -1,22 +1,28 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 # Make sure we have symbols in case we need to debug these.
 MOZ_DEBUG_SYMBOLS = 1
 
+# Don't add our test-only .xpt files to the normal manifests
+NO_INTERFACES_MANIFEST = 1
+
 include $(topsrcdir)/config/rules.mk
 
 ifneq (,$(SIMPLE_PROGRAMS))
 libs::
 	$(INSTALL) $(SIMPLE_PROGRAMS) $(DEPTH)/_tests/xpcshell/$(relativesrcdir)/unit
 endif
 
+libs::
+	$(INSTALL) $(DIST)/bin/components/xpcomtest.xpt $(DEPTH)/_tests/xpcshell/$(relativesrcdir)/unit
+
 ifeq (,$(filter-out WINNT, $(HOST_OS_ARCH)))
 getnativepath = $(call normalizepath,$(1))
 else
 getnativepath = $(1)
 endif
 
 abs_srcdir = $(abspath $(srcdir))
 
new file mode 100644
--- /dev/null
+++ b/xpcom/tests/NotXPCOMTest.idl
@@ -0,0 +1,23 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsISupports.idl"
+
+[scriptable, uuid(93142a4f-e4cf-424a-b833-e638f87d2607)]
+interface ScriptableOK : nsISupports
+{
+  void method1();
+};
+
+[scriptable, uuid(237d01a3-771e-4c6e-adf9-c97f9aab2950)]
+interface ScriptableWithNotXPCOM : nsISupports
+{
+  [notxpcom] void method2();
+};
+
+[scriptable, uuid(4f06ec60-3bb3-4712-ab18-b2b595285558)]
+interface ScriptableWithNotXPCOMBase : ScriptableWithNotXPCOM
+{
+  void method3();
+};
deleted file mode 100644
--- a/xpcom/tests/TestScriptable.idl
+++ /dev/null
@@ -1,21 +0,0 @@
-
-[scriptable, uuid(76d74662-0eae-404c-9d1f-697c0e321c0a)]
-interface testScriptableInterface {
-  readonly attribute long scriptable_attr1;
-  attribute long scriptable_attr2;
-  [noscript] readonly attribute long notscriptable_attr1;
-  [noscript] attribute long notscriptable_attr2;
-
-  void scriptable_method1();
-  [noscript] void notscriptable_method1();
-  [notxpcom] void notscriptable_method2();
-  [noscript, notxpcom] void notscriptable_method3();
-};
-
-[uuid(76d74662-0eae-404c-9d1f-697c0e321c0a)]
-interface testNotscriptableInterface {
-  readonly attribute long notscriptable_attr1;
-  attribute long notscriptable_attr2;
-
-  void notscriptable_method1();
-};
--- a/xpcom/tests/moz.build
+++ b/xpcom/tests/moz.build
@@ -105,16 +105,21 @@ if CONFIG['MOZ_MEMORY']:
 if CONFIG['MOZ_DEBUG'] and CONFIG['OS_ARCH'] not in ('WINNT'):
     # FIXME bug 523392: TestDeadlockDetector doesn't like Windows
     # FIXME bug 523378: also fails on OS X
     CppUnitTests([
         'TestDeadlockDetector',
         'TestDeadlockDetectorScalability',
     ])
 
+XPIDL_MODULE = 'xpcomtest'
+XPIDL_SOURCES += [
+    'NotXPCOMTest.idl',
+]
+
 LOCAL_INCLUDES += [
     '../ds',
 ]
 
 RESOURCE_FILES += [
     'test.properties',
 ]
 
new file mode 100644
--- /dev/null
+++ b/xpcom/tests/unit/test_notxpcom_scriptable.js
@@ -0,0 +1,86 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+const Cu = Components.utils;
+const Cr = Components.results;
+
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+
+const kCID = Components.ID("{1f9f7181-e6c5-4f4c-8f71-08005cec8468}");
+const kContract = "@testing/notxpcomtest";
+
+function run_test()
+{
+  let manifest = do_get_file("xpcomtest.manifest");
+  let registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
+  registrar.autoRegister(manifest);
+
+  ok(Ci.ScriptableWithNotXPCOM);
+
+  let method1Called = false;
+
+  let testObject = {
+    QueryInterface: XPCOMUtils.generateQI([Ci.ScriptableOK,
+                                           Ci.ScriptableWithNotXPCOM,
+                                           Ci.ScriptableWithNotXPCOMBase]),
+
+    method1: function() {
+      method1Called = true;
+    },
+
+    method2: function() {
+      ok(false, "method2 should not have been called!");
+    },
+
+    method3: function() {
+      ok(false, "mehod3 should not have been called!");
+    },
+
+    jsonly: true,
+  };
+
+  let factory = {
+    QueryInterface: XPCOMUtils.generateQI([Ci.nsIFactory]),
+
+    createInstance: function(outer, iid) {
+      if (outer) {
+        throw Cr.NS_ERROR_NO_AGGREGATION;
+      }
+      return testObject.QueryInterface(iid);
+    },
+  };
+
+  registrar.registerFactory(kCID, null, kContract, factory);
+
+  let xpcomObject = Cc[kContract].createInstance();
+  ok(xpcomObject);
+  strictEqual(xpcomObject.jsonly, undefined);
+
+  xpcomObject.QueryInterface(Ci.ScriptableOK);
+
+  xpcomObject.method1();
+  ok(method1Called);
+
+  try {
+    xpcomObject.QueryInterface(Ci.ScriptableWithNotXPCOM);
+    ok(false, "Should not have implemented ScriptableWithNotXPCOM");
+  }
+  catch(e) {
+    ok(true, "Should not have implemented ScriptableWithNotXPCOM. Correctly threw error: " + e);
+  }
+  strictEqual(xpcomObject.method2, undefined);
+
+  try {
+    xpcomObject.QueryInterface(Ci.ScriptableWithNotXPCOMBase);
+    ok(false, "Should not have implemented ScriptableWithNotXPCOMBase");
+  }
+  catch (e) {
+    ok(true, "Should not have implemented ScriptableWithNotXPCOMBase. Correctly threw error: " + e);
+  }
+  strictEqual(xpcomObject.method3, undefined);
+}
+
new file mode 100644
--- /dev/null
+++ b/xpcom/tests/unit/xpcomtest.manifest
@@ -0,0 +1,1 @@
+interfaces xpcomtest.xpt
--- a/xpcom/tests/unit/xpcshell.ini
+++ b/xpcom/tests/unit/xpcshell.ini
@@ -1,15 +1,19 @@
 [DEFAULT]
 head = head_xpcom.js
 tail =
 support-files =
   bug725015.manifest
   compmgr_warnings.manifest
   data/**
+  xpcomtest.xpt
+  xpcomtest.manifest
+generated-files =
+  xpcomtest.xpt
 
 [test_bug121341.js]
 [test_bug325418.js]
 [test_bug332389.js]
 [test_bug333505.js]
 [test_bug364285-1.js]
 # Bug 902073: test fails consistently on Android x86
 skip-if = os == "android"
@@ -59,8 +63,9 @@ skip-if = os == "android"
 [test_comp_no_aslr.js]
 skip-if = os != "win"
 [test_windows_shortcut.js]
 [test_bug745466.js]
 skip-if = os == "win"
 # Bug 676998: test fails consistently on Android
 fail-if = os == "android"
 [test_file_renameTo.js]
+[test_notxpcom_scriptable.js]