diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/b2g/confvars.sh firefox-trunk-53.0~a1~hg20170115r329516/b2g/confvars.sh --- firefox-trunk-53.0~a1~hg20170113r329171/b2g/confvars.sh 2017-01-13 00:59:23.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/b2g/confvars.sh 2017-01-16 00:56:55.000000000 +0000 @@ -18,7 +18,6 @@ # MOZ_APP_DISPLAYNAME is set by branding/configure.sh MOZ_NO_SMART_CARDS=1 -MOZ_APP_STATIC_INI=1 if test "$OS_TARGET" = "Android"; then MOZ_CAPTURE=1 diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/b2g/graphene/confvars.sh firefox-trunk-53.0~a1~hg20170115r329516/b2g/graphene/confvars.sh --- firefox-trunk-53.0~a1~hg20170113r329171/b2g/graphene/confvars.sh 2017-01-13 01:00:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/b2g/graphene/confvars.sh 2017-01-16 00:56:56.000000000 +0000 @@ -27,7 +27,6 @@ MOZ_CAPTIVEDETECT=1 MOZ_NO_SMART_CARDS=1 -MOZ_APP_STATIC_INI=1 NSS_NO_LIBPKIX=1 if test "$OS_TARGET" = "Android"; then diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/b2g/installer/package-manifest.in firefox-trunk-53.0~a1~hg20170115r329516/b2g/installer/package-manifest.in --- firefox-trunk-53.0~a1~hg20170113r329171/b2g/installer/package-manifest.in 2017-01-13 01:00:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/b2g/installer/package-manifest.in 2017-01-16 00:56:56.000000000 +0000 @@ -199,7 +199,6 @@ @RESPATH@/components/dom_presentation.xpt @RESPATH@/components/downloads.xpt @RESPATH@/components/editor.xpt -@RESPATH@/components/embed_base.xpt @RESPATH@/components/extensions.xpt @RESPATH@/components/exthandler.xpt @RESPATH@/components/exthelper.xpt @@ -208,7 +207,6 @@ #ifdef MOZ_GTK @RESPATH@/components/filepicker.xpt #endif -@RESPATH@/components/find.xpt @RESPATH@/components/gfx.xpt @RESPATH@/components/gaia_chrome.xpt @RESPATH@/components/hal.xpt @@ -309,6 +307,7 @@ #ifdef ANDROID @RESPATH@/components/widget_android.xpt #endif +@RESPATH@/components/windowcreator.xpt @RESPATH@/components/windowds.xpt @RESPATH@/components/windowwatcher.xpt @RESPATH@/components/xpcom_base.xpt diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/browser/app/blocklist.xml firefox-trunk-53.0~a1~hg20170115r329516/browser/app/blocklist.xml --- firefox-trunk-53.0~a1~hg20170113r329171/browser/app/blocklist.xml 2017-01-13 01:00:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/browser/app/blocklist.xml 2017-01-16 00:57:29.000000000 +0000 @@ -824,10 +824,6 @@ - - - - @@ -996,6 +992,10 @@ + + + + @@ -2015,6 +2015,10 @@ + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf.in firefox-trunk-53.0~a1~hg20170115r329516/browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf.in --- firefox-trunk-53.0~a1~hg20170113r329171/browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf.in 2017-01-13 01:00:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf.in 2017-01-16 00:57:30.000000000 +0000 @@ -13,8 +13,8 @@ {972ce4c6-7e08-4474-a285-3208198ce6fd} @FIREFOX_VERSION@ - + {ec8030f7-c20a-464f-9b0e-13a3a9e97384} @@ -35,6 +35,8 @@ true classic/1.0 - + + chrome://browser/content/default-theme-icon.svg + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/browser/app/profile/firefox.js firefox-trunk-53.0~a1~hg20170115r329516/browser/app/profile/firefox.js --- firefox-trunk-53.0~a1~hg20170113r329171/browser/app/profile/firefox.js 2017-01-13 01:00:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/browser/app/profile/firefox.js 2017-01-16 00:57:30.000000000 +0000 @@ -65,6 +65,9 @@ // See the SCOPE constants in AddonManager.jsm for values to use here. pref("extensions.autoDisableScopes", 15); +// Whether or not webextension themes are supported. +pref("extensions.webextensions.themes.enabled", false); + // Add-on content security policies. pref("extensions.webextensions.base-content-security-policy", "script-src 'self' https://* moz-extension: blob: filesystem: 'unsafe-eval' 'unsafe-inline'; object-src 'self' https://* moz-extension: blob: filesystem:;"); pref("extensions.webextensions.default-content-security-policy", "script-src 'self'; object-src 'self';"); @@ -1130,7 +1133,7 @@ // Developer edition preferences #ifdef MOZ_DEV_EDITION -sticky_pref("lightweightThemes.selectedThemeID", "firefox-devedition@mozilla.org"); +sticky_pref("lightweightThemes.selectedThemeID", "firefox-compact-dark@mozilla.org"); #else sticky_pref("lightweightThemes.selectedThemeID", ""); #endif @@ -1425,10 +1428,16 @@ pref("privacy.userContext.enabled", true); pref("privacy.userContext.ui.enabled", true); pref("privacy.usercontext.about_newtab_segregation.enabled", true); + +// 0 disables long press, 1 when clicked, the menu is shown, 2 the menu is shown after X milliseconds. +pref("privacy.userContext.longPressBehavior", 2); #else pref("privacy.userContext.enabled", false); pref("privacy.userContext.ui.enabled", false); pref("privacy.usercontext.about_newtab_segregation.enabled", false); + +// 0 disables long press, 1 when clicked, the menu is shown, 2 the menu is shown after X milliseconds. +pref("privacy.userContext.longPressBehavior", 0); #endif #ifndef RELEASE_OR_BETA diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/browser/base/content/browser-compacttheme.js firefox-trunk-53.0~a1~hg20170115r329516/browser/base/content/browser-compacttheme.js --- firefox-trunk-53.0~a1~hg20170113r329171/browser/base/content/browser-compacttheme.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/browser/base/content/browser-compacttheme.js 2017-01-16 00:57:32.000000000 +0000 @@ -0,0 +1,105 @@ +/* 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/. */ + +/** + * Listeners for the compact theme. This adds an extra stylesheet + * to browser.xul if a pref is set and no other themes are applied. + */ +var CompactTheme = { + styleSheetLocation: "chrome://browser/skin/compacttheme.css", + styleSheet: null, + initialized: false, + + get isStyleSheetEnabled() { + return this.styleSheet && !this.styleSheet.sheet.disabled; + }, + + get isThemeCurrentlyApplied() { + let theme = LightweightThemeManager.currentTheme; + return theme && ( + theme.id == "firefox-compact-dark@mozilla.org" || + theme.id == "firefox-compact-light@mozilla.org"); + }, + + init() { + this.initialized = true; + Services.obs.addObserver(this, "lightweight-theme-styling-update", false); + + if (this.isThemeCurrentlyApplied) { + this._toggleStyleSheet(true); + } + }, + + createStyleSheet() { + let styleSheetAttr = `href="${this.styleSheetLocation}" type="text/css"`; + this.styleSheet = document.createProcessingInstruction( + "xml-stylesheet", styleSheetAttr); + this.styleSheet.addEventListener("load", this); + document.insertBefore(this.styleSheet, document.documentElement); + this.styleSheet.sheet.disabled = true; + }, + + observe(subject, topic, data) { + if (topic == "lightweight-theme-styling-update") { + let newTheme = JSON.parse(data); + if (newTheme && ( + newTheme.id == "firefox-compact-light@mozilla.org" || + newTheme.id == "firefox-compact-dark@mozilla.org")) { + // We are using the theme ID on this object instead of always referencing + // LightweightThemeManager.currentTheme in case this is a preview + this._toggleStyleSheet(true); + } else { + this._toggleStyleSheet(false); + } + + } + }, + + handleEvent(e) { + if (e.type === "load") { + this.styleSheet.removeEventListener("load", this); + this.refreshBrowserDisplay(); + } + }, + + refreshBrowserDisplay() { + // Don't touch things on the browser if gBrowserInit.onLoad hasn't + // yet fired. + if (this.initialized) { + gBrowser.tabContainer._positionPinnedTabs(); + } + }, + + _toggleStyleSheet(enabled) { + let wasEnabled = this.isStyleSheetEnabled; + if (enabled) { + // The stylesheet may not have been created yet if it wasn't + // needed on initial load. Make it now. + if (!this.styleSheet) { + this.createStyleSheet(); + } + this.styleSheet.sheet.disabled = false; + this.refreshBrowserDisplay(); + } else if (!enabled && wasEnabled) { + this.styleSheet.sheet.disabled = true; + this.refreshBrowserDisplay(); + } + }, + + uninit() { + Services.obs.removeObserver(this, "lightweight-theme-styling-update"); + if (this.styleSheet) { + this.styleSheet.removeEventListener("load", this); + } + this.styleSheet = null; + } +}; + +// If the compact theme is going to be applied in gBrowserInit.onLoad, +// then preload it now. This prevents a flash of unstyled content where the +// normal theme is applied while the compact theme stylesheet is loading. +if (AppConstants.INSTALL_COMPACT_THEMES && + this != Services.appShell.hiddenDOMWindow && CompactTheme.isThemeCurrentlyApplied) { + CompactTheme.createStyleSheet(); +} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/browser/base/content/browser-devedition.js firefox-trunk-53.0~a1~hg20170115r329516/browser/base/content/browser-devedition.js --- firefox-trunk-53.0~a1~hg20170113r329171/browser/base/content/browser-devedition.js 2017-01-13 01:00:11.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/browser/base/content/browser-devedition.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,142 +0,0 @@ -/* 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/. */ - -/** - * Listeners for the DevEdition theme. This adds an extra stylesheet - * to browser.xul if a pref is set and no other themes are applied. - */ -var DevEdition = { - _devtoolsThemePrefName: "devtools.theme", - styleSheetLocation: "chrome://browser/skin/devedition.css", - styleSheet: null, - initialized: false, - - get isStyleSheetEnabled() { - return this.styleSheet && !this.styleSheet.sheet.disabled; - }, - - get isThemeCurrentlyApplied() { - let theme = LightweightThemeManager.currentTheme; - return theme && theme.id == "firefox-devedition@mozilla.org"; - }, - - init() { - this.initialized = true; - Services.prefs.addObserver(this._devtoolsThemePrefName, this, false); - Services.obs.addObserver(this, "lightweight-theme-styling-update", false); - Services.obs.addObserver(this, "lightweight-theme-window-updated", false); - this._updateDevtoolsThemeAttribute(); - - if (this.isThemeCurrentlyApplied) { - this._toggleStyleSheet(true); - } - }, - - createStyleSheet() { - let styleSheetAttr = `href="${this.styleSheetLocation}" type="text/css"`; - this.styleSheet = document.createProcessingInstruction( - "xml-stylesheet", styleSheetAttr); - this.styleSheet.addEventListener("load", this); - document.insertBefore(this.styleSheet, document.documentElement); - this.styleSheet.sheet.disabled = true; - }, - - observe(subject, topic, data) { - if (topic == "lightweight-theme-styling-update") { - let newTheme = JSON.parse(data); - if (newTheme && newTheme.id == "firefox-devedition@mozilla.org") { - this._toggleStyleSheet(true); - } else { - this._toggleStyleSheet(false); - } - } else if (topic == "lightweight-theme-window-updated" && subject == window) { - this._updateLWTBrightness(); - } - - if (topic == "nsPref:changed" && data == this._devtoolsThemePrefName) { - this._updateDevtoolsThemeAttribute(); - } - }, - - _inferBrightness() { - ToolbarIconColor.inferFromText(); - // Get an inverted full screen button if the dark theme is applied. - if (this.isStyleSheetEnabled && - document.documentElement.getAttribute("devtoolstheme") == "dark") { - document.documentElement.setAttribute("brighttitlebarforeground", "true"); - } else { - document.documentElement.removeAttribute("brighttitlebarforeground"); - } - }, - - _updateLWTBrightness() { - if (this.isThemeCurrentlyApplied) { - let devtoolsTheme = Services.prefs.getCharPref(this._devtoolsThemePrefName); - let textColor = devtoolsTheme == "dark" ? "bright" : "dark"; - document.documentElement.setAttribute("lwthemetextcolor", textColor); - } - }, - - _updateDevtoolsThemeAttribute() { - // Set an attribute on root element to make it possible - // to change colors based on the selected devtools theme. - let devtoolsTheme = Services.prefs.getCharPref(this._devtoolsThemePrefName); - if (devtoolsTheme != "dark") { - devtoolsTheme = "light"; - } - document.documentElement.setAttribute("devtoolstheme", devtoolsTheme); - this._updateLWTBrightness(); - this._inferBrightness(); - }, - - handleEvent(e) { - if (e.type === "load") { - this.styleSheet.removeEventListener("load", this); - this.refreshBrowserDisplay(); - } - }, - - refreshBrowserDisplay() { - // Don't touch things on the browser if gBrowserInit.onLoad hasn't - // yet fired. - if (this.initialized) { - gBrowser.tabContainer._positionPinnedTabs(); - this._inferBrightness(); - } - }, - - _toggleStyleSheet(deveditionThemeEnabled) { - let wasEnabled = this.isStyleSheetEnabled; - if (deveditionThemeEnabled && !wasEnabled) { - // The stylesheet may not have been created yet if it wasn't - // needed on initial load. Make it now. - if (!this.styleSheet) { - this.createStyleSheet(); - } - this.styleSheet.sheet.disabled = false; - this.refreshBrowserDisplay(); - } else if (!deveditionThemeEnabled && wasEnabled) { - this.styleSheet.sheet.disabled = true; - this.refreshBrowserDisplay(); - } - }, - - uninit() { - Services.prefs.removeObserver(this._devtoolsThemePrefName, this); - Services.obs.removeObserver(this, "lightweight-theme-styling-update"); - Services.obs.removeObserver(this, "lightweight-theme-window-updated"); - if (this.styleSheet) { - this.styleSheet.removeEventListener("load", this); - } - this.styleSheet = null; - } -}; - -// If the DevEdition theme is going to be applied in gBrowserInit.onLoad, -// then preload it now. This prevents a flash of unstyled content where the -// normal theme is applied while the DevEdition stylesheet is loading. -if (!AppConstants.RELEASE_OR_BETA && - this != Services.appShell.hiddenDOMWindow && DevEdition.isThemeCurrentlyApplied) { - DevEdition.createStyleSheet(); -} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/browser/base/content/browser.js firefox-trunk-53.0~a1~hg20170115r329516/browser/base/content/browser.js --- firefox-trunk-53.0~a1~hg20170113r329171/browser/base/content/browser.js 2017-01-13 01:00:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/browser/base/content/browser.js 2017-01-16 00:57:48.000000000 +0000 @@ -998,7 +998,7 @@ LanguageDetectionListener.init(); BrowserOnClick.init(); FeedHandler.init(); - DevEdition.init(); + CompactTheme.init(); AboutPrivateBrowsingListener.init(); TrackingProtection.init(); RefreshBlocker.init(); @@ -1515,7 +1515,7 @@ FeedHandler.uninit(); - DevEdition.uninit(); + CompactTheme.uninit(); TrackingProtection.uninit(); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/browser/base/content/default-theme-icon.svg firefox-trunk-53.0~a1~hg20170115r329516/browser/base/content/default-theme-icon.svg --- firefox-trunk-53.0~a1~hg20170113r329171/browser/base/content/default-theme-icon.svg 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/browser/base/content/default-theme-icon.svg 2017-01-16 00:57:49.000000000 +0000 @@ -0,0 +1,13 @@ + + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/browser/base/content/defaultthemes/compactdark.icon.svg firefox-trunk-53.0~a1~hg20170115r329516/browser/base/content/defaultthemes/compactdark.icon.svg --- firefox-trunk-53.0~a1~hg20170113r329171/browser/base/content/defaultthemes/compactdark.icon.svg 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/browser/base/content/defaultthemes/compactdark.icon.svg 2017-01-16 00:57:51.000000000 +0000 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + Binary files /tmp/tmpyf9cWy/Fm1wAFW8Cg/firefox-trunk-53.0~a1~hg20170113r329171/browser/base/content/defaultthemes/compact.header.png and /tmp/tmpyf9cWy/hqwVq4DwOk/firefox-trunk-53.0~a1~hg20170115r329516/browser/base/content/defaultthemes/compact.header.png differ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/browser/base/content/defaultthemes/compactlight.icon.svg firefox-trunk-53.0~a1~hg20170115r329516/browser/base/content/defaultthemes/compactlight.icon.svg --- firefox-trunk-53.0~a1~hg20170113r329171/browser/base/content/defaultthemes/compactlight.icon.svg 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/browser/base/content/defaultthemes/compactlight.icon.svg 2017-01-16 00:57:51.000000000 +0000 @@ -0,0 +1,15 @@ + + + + + + + + + + + + + Binary files /tmp/tmpyf9cWy/Fm1wAFW8Cg/firefox-trunk-53.0~a1~hg20170113r329171/browser/base/content/defaultthemes/devedition.header.png and /tmp/tmpyf9cWy/hqwVq4DwOk/firefox-trunk-53.0~a1~hg20170115r329516/browser/base/content/defaultthemes/devedition.header.png differ Binary files /tmp/tmpyf9cWy/Fm1wAFW8Cg/firefox-trunk-53.0~a1~hg20170113r329171/browser/base/content/defaultthemes/devedition.icon.png and /tmp/tmpyf9cWy/hqwVq4DwOk/firefox-trunk-53.0~a1~hg20170115r329516/browser/base/content/defaultthemes/devedition.icon.png differ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/browser/base/content/global-scripts.inc firefox-trunk-53.0~a1~hg20170115r329516/browser/base/content/global-scripts.inc --- firefox-trunk-53.0~a1~hg20170113r329171/browser/base/content/global-scripts.inc 2017-01-13 01:00:29.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/browser/base/content/global-scripts.inc 2017-01-16 00:57:51.000000000 +0000 @@ -13,7 +13,7 @@ + + + +
+
+ + + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/context/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/context/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/context/00_test_list.txt 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/context/00_test_list.txt 2017-01-16 01:35:02.000000000 +0000 @@ -2,6 +2,7 @@ --min-version 1.0.2 context-attribute-preserve-drawing-buffer.html context-attributes-alpha-depth-stencil-antialias.html --min-version 1.0.4 context-size-change.html +--min-version 1.0.4 context-no-alpha-fbo-with-alpha.html --min-version 1.0.2 --slow context-creation-and-destruction.html --min-version 1.0.3 --slow context-creation.html --min-version 1.0.3 --slow context-eviction-with-garbage-collection.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/context/constants-and-properties.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/context/constants-and-properties.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/context/constants-and-properties.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/context/constants-and-properties.html 2017-01-16 01:35:02.000000000 +0000 @@ -46,7 +46,7 @@ DEPTH_BUFFER_BIT : 0x00000100, STENCIL_BUFFER_BIT : 0x00000400, COLOR_BUFFER_BIT : 0x00004000, - + /* BeginMode */ POINTS : 0x0000, LINES : 0x0001, @@ -55,7 +55,7 @@ TRIANGLES : 0x0004, TRIANGLE_STRIP : 0x0005, TRIANGLE_FAN : 0x0006, - + /* AlphaFunction (not supported in ES20) */ /* NEVER */ /* LESS */ @@ -65,7 +65,7 @@ /* NOTEQUAL */ /* GEQUAL */ /* ALWAYS */ - + /* BlendingFactorDest */ ZERO : 0, ONE : 1, @@ -75,7 +75,7 @@ ONE_MINUS_SRC_ALPHA : 0x0303, DST_ALPHA : 0x0304, ONE_MINUS_DST_ALPHA : 0x0305, - + /* BlendingFactorSrc */ /* ZERO */ /* ONE */ @@ -86,17 +86,17 @@ /* ONE_MINUS_SRC_ALPHA */ /* DST_ALPHA */ /* ONE_MINUS_DST_ALPHA */ - + /* BlendEquationSeparate */ FUNC_ADD : 0x8006, BLEND_EQUATION : 0x8009, BLEND_EQUATION_RGB : 0x8009, /* same as BLEND_EQUATION */ BLEND_EQUATION_ALPHA : 0x883D, - + /* BlendSubtract */ FUNC_SUBTRACT : 0x800A, FUNC_REVERSE_SUBTRACT : 0x800B, - + /* Separate Blend Functions */ BLEND_DST_RGB : 0x80C8, BLEND_SRC_RGB : 0x80C9, @@ -107,27 +107,27 @@ CONSTANT_ALPHA : 0x8003, ONE_MINUS_CONSTANT_ALPHA : 0x8004, BLEND_COLOR : 0x8005, - + /* Buffer Objects */ ARRAY_BUFFER : 0x8892, ELEMENT_ARRAY_BUFFER : 0x8893, ARRAY_BUFFER_BINDING : 0x8894, ELEMENT_ARRAY_BUFFER_BINDING : 0x8895, - + STREAM_DRAW : 0x88E0, STATIC_DRAW : 0x88E4, DYNAMIC_DRAW : 0x88E8, - + BUFFER_SIZE : 0x8764, BUFFER_USAGE : 0x8765, - + CURRENT_VERTEX_ATTRIB : 0x8626, - + /* CullFaceMode */ FRONT : 0x0404, BACK : 0x0405, FRONT_AND_BACK : 0x0408, - + /* DepthFunction */ /* NEVER */ /* LESS */ @@ -137,7 +137,7 @@ /* NOTEQUAL */ /* GEQUAL */ /* ALWAYS */ - + /* EnableCap */ /* TEXTURE_2D */ CULL_FACE : 0x0B44, @@ -149,18 +149,18 @@ POLYGON_OFFSET_FILL : 0x8037, SAMPLE_ALPHA_TO_COVERAGE : 0x809E, SAMPLE_COVERAGE : 0x80A0, - + /* ErrorCode */ NO_ERROR : 0, INVALID_ENUM : 0x0500, INVALID_VALUE : 0x0501, INVALID_OPERATION : 0x0502, OUT_OF_MEMORY : 0x0505, - + /* FrontFaceDirection */ CW : 0x0900, CCW : 0x0901, - + /* GetPName */ LINE_WIDTH : 0x0B21, ALIASED_POINT_SIZE_RANGE : 0x846D, @@ -210,23 +210,23 @@ SAMPLES : 0x80A9, SAMPLE_COVERAGE_VALUE : 0x80AA, SAMPLE_COVERAGE_INVERT : 0x80AB, - + /* GetTextureParameter */ /* TEXTURE_MAG_FILTER */ /* TEXTURE_MIN_FILTER */ /* TEXTURE_WRAP_S */ /* TEXTURE_WRAP_T */ - + COMPRESSED_TEXTURE_FORMATS : 0x86A3, - + /* HintMode */ DONT_CARE : 0x1100, FASTEST : 0x1101, NICEST : 0x1102, - + /* HintTarget */ GENERATE_MIPMAP_HINT : 0x8192, - + /* DataType */ BYTE : 0x1400, UNSIGNED_BYTE : 0x1401, @@ -235,7 +235,7 @@ INT : 0x1404, UNSIGNED_INT : 0x1405, FLOAT : 0x1406, - + /* PixelFormat */ DEPTH_COMPONENT : 0x1902, ALPHA : 0x1906, @@ -243,13 +243,13 @@ RGBA : 0x1908, LUMINANCE : 0x1909, LUMINANCE_ALPHA : 0x190A, - + /* PixelType */ /* UNSIGNED_BYTE */ UNSIGNED_SHORT_4_4_4_4 : 0x8033, UNSIGNED_SHORT_5_5_5_1 : 0x8034, UNSIGNED_SHORT_5_6_5 : 0x8363, - + /* Shaders */ FRAGMENT_SHADER : 0x8B30, VERTEX_SHADER : 0x8B31, @@ -269,7 +269,7 @@ ACTIVE_ATTRIBUTES : 0x8B89, SHADING_LANGUAGE_VERSION : 0x8B8C, CURRENT_PROGRAM : 0x8B8D, - + /* StencilFunction */ NEVER : 0x0200, LESS : 0x0201, @@ -279,7 +279,7 @@ NOTEQUAL : 0x0205, GEQUAL : 0x0206, ALWAYS : 0x0207, - + /* StencilOp */ /* ZERO */ KEEP : 0x1E00, @@ -289,16 +289,16 @@ INVERT : 0x150A, INCR_WRAP : 0x8507, DECR_WRAP : 0x8508, - + /* StringName */ VENDOR : 0x1F00, RENDERER : 0x1F01, VERSION : 0x1F02, - + /* TextureMagFilter */ NEAREST : 0x2600, LINEAR : 0x2601, - + /* TextureMinFilter */ /* NEAREST */ /* LINEAR */ @@ -306,17 +306,17 @@ LINEAR_MIPMAP_NEAREST : 0x2701, NEAREST_MIPMAP_LINEAR : 0x2702, LINEAR_MIPMAP_LINEAR : 0x2703, - + /* TextureParameterName */ TEXTURE_MAG_FILTER : 0x2800, TEXTURE_MIN_FILTER : 0x2801, TEXTURE_WRAP_S : 0x2802, TEXTURE_WRAP_T : 0x2803, - + /* TextureTarget */ TEXTURE_2D : 0x0DE1, TEXTURE : 0x1702, - + TEXTURE_CUBE_MAP : 0x8513, TEXTURE_BINDING_CUBE_MAP : 0x8514, TEXTURE_CUBE_MAP_POSITIVE_X : 0x8515, @@ -326,7 +326,7 @@ TEXTURE_CUBE_MAP_POSITIVE_Z : 0x8519, TEXTURE_CUBE_MAP_NEGATIVE_Z : 0x851A, MAX_CUBE_MAP_TEXTURE_SIZE : 0x851C, - + /* TextureUnit */ TEXTURE0 : 0x84C0, TEXTURE1 : 0x84C1, @@ -361,12 +361,12 @@ TEXTURE30 : 0x84DE, TEXTURE31 : 0x84DF, ACTIVE_TEXTURE : 0x84E0, - + /* TextureWrapMode */ REPEAT : 0x2901, CLAMP_TO_EDGE : 0x812F, MIRRORED_REPEAT : 0x8370, - + /* Uniform Types */ FLOAT_VEC2 : 0x8B50, FLOAT_VEC3 : 0x8B51, @@ -383,7 +383,7 @@ FLOAT_MAT4 : 0x8B5C, SAMPLER_2D : 0x8B5E, SAMPLER_CUBE : 0x8B60, - + /* Vertex Arrays */ VERTEX_ATTRIB_ARRAY_ENABLED : 0x8622, VERTEX_ATTRIB_ARRAY_SIZE : 0x8623, @@ -392,14 +392,14 @@ VERTEX_ATTRIB_ARRAY_NORMALIZED : 0x886A, VERTEX_ATTRIB_ARRAY_POINTER : 0x8645, VERTEX_ATTRIB_ARRAY_BUFFER_BINDING : 0x889F, - + /* Read Format */ IMPLEMENTATION_COLOR_READ_TYPE : 0x8B9A, IMPLEMENTATION_COLOR_READ_FORMAT : 0x8B9B, /* Shader Source */ COMPILE_STATUS : 0x8B81, - + /* Shader Precision-Specified Types */ LOW_FLOAT : 0x8DF0, MEDIUM_FLOAT : 0x8DF1, @@ -407,11 +407,11 @@ LOW_INT : 0x8DF3, MEDIUM_INT : 0x8DF4, HIGH_INT : 0x8DF5, - + /* Framebuffer Object. */ FRAMEBUFFER : 0x8D40, RENDERBUFFER : 0x8D41, - + RGBA4 : 0x8056, RGB5_A1 : 0x8057, RGB565 : 0x8D62, @@ -419,7 +419,7 @@ STENCIL_INDEX : 0x1901, STENCIL_INDEX8 : 0x8D48, DEPTH_STENCIL : 0x84F9, - + RENDERBUFFER_WIDTH : 0x8D42, RENDERBUFFER_HEIGHT : 0x8D43, RENDERBUFFER_INTERNAL_FORMAT : 0x8D44, @@ -429,29 +429,29 @@ RENDERBUFFER_ALPHA_SIZE : 0x8D53, RENDERBUFFER_DEPTH_SIZE : 0x8D54, RENDERBUFFER_STENCIL_SIZE : 0x8D55, - + FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE : 0x8CD0, FRAMEBUFFER_ATTACHMENT_OBJECT_NAME : 0x8CD1, FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL : 0x8CD2, FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE : 0x8CD3, - + COLOR_ATTACHMENT0 : 0x8CE0, DEPTH_ATTACHMENT : 0x8D00, STENCIL_ATTACHMENT : 0x8D20, DEPTH_STENCIL_ATTACHMENT : 0x821A, - + NONE : 0, - + FRAMEBUFFER_COMPLETE : 0x8CD5, FRAMEBUFFER_INCOMPLETE_ATTACHMENT : 0x8CD6, FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT : 0x8CD7, FRAMEBUFFER_INCOMPLETE_DIMENSIONS : 0x8CD9, FRAMEBUFFER_UNSUPPORTED : 0x8CDD, - + FRAMEBUFFER_BINDING : 0x8CA6, RENDERBUFFER_BINDING : 0x8CA7, MAX_RENDERBUFFER_SIZE : 0x84E8, - + INVALID_FRAMEBUFFER_OPERATION : 0x0506, /* WebGL-specific enums */ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/context/context-attributes-alpha-depth-stencil-antialias.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/context/context-attributes-alpha-depth-stencil-antialias.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/context/context-attributes-alpha-depth-stencil-antialias.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/context/context-attributes-alpha-depth-stencil-antialias.html 2017-01-16 01:35:02.000000000 +0000 @@ -62,8 +62,7 @@ var wtu = WebGLTestUtils; var gl; var contextAttribs = null; -var pixel_1 = [0, 0, 0, 1]; -var pixel_2 = [0, 0, 0, 1]; +var redChannels = [0, 0, 0]; var correctColor = null; var framebuffer; var fbHasColor; @@ -302,10 +301,13 @@ function testAntialias(antialias) { debug("Testing antialias = " + antialias); + // Both the width and height of canvas are N. + // Note that "N = 2" doesn't work for some post processing AA per the discussion at https://github.com/KhronosGroup/WebGL/pull/1977. + var N = 3; if (antialias) - shouldBeNonNull("gl = getWebGL(2, 2, { depth: false, stencil: false, alpha: false, antialias: true }, [ 0, 0, 0, 1 ], 1, 0)"); + shouldBeNonNull("gl = getWebGL(" + N + ", " + N + ", { depth: false, stencil: false, alpha: false, antialias: true }, [ 0, 0, 0, 1 ], 1, 0)"); else - shouldBeNonNull("gl = getWebGL(2, 2, { depth: false, stencil: false, alpha: false, antialias: false }, [ 0, 0, 0, 1 ], 1, 0)"); + shouldBeNonNull("gl = getWebGL(" + N + ", " + N + ", { depth: false, stencil: false, alpha: false, antialias: false }, [ 0, 0, 0, 1 ], 1, 0)"); shouldBeNonNull("contextAttribs = gl.getContextAttributes()"); var vertices = new Float32Array([ @@ -317,17 +319,13 @@ 255, 0, 0, 255, 255, 0, 0, 255]); drawAndReadPixel(gl, vertices, colors, 0, 0); - var buf_1 = new Uint8Array(1 * 1 * 4); - var buf_2 = new Uint8Array(1 * 1 * 4); - gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, buf_1); - gl.readPixels(0, 1, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, buf_2); - pixel_1[0] = buf_1[0]; - pixel_2[0] = buf_2[0]; - // For some anti-alias algorithms, effects may be not on diagonal line pixels, so that either: - // - The red channel of the pixel at (0, 0) is not 0 and not 255, or, - // - If it is 0, expect that the red channel of the pixel at (0, 1) is not 0 and not 255. - shouldBe("pixel_1[0] != 255 && pixel_1[0] != 0 || pixel_1[0] == 0 && pixel_2[0] != 255 && pixel_2[0] != 0", - "contextAttribs.antialias"); + var buf = new Uint8Array(N * N * 4); + gl.readPixels(0, 0, N, N, gl.RGBA, gl.UNSIGNED_BYTE, buf); + redChannels[0] = buf[4 * (N + 1)]; // (1, 1) + redChannels[1] = buf[4 * N * (N - 1)]; // left top + redChannels[2] = buf[4 * (N - 1)]; // right bottom + shouldBeTrue("redChannels[1] == 255 && redChannels[2] == 0"); + shouldBe("redChannels[0] != 255 && redChannels[0] != 0", "contextAttribs.antialias"); } function runTest() diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/context/context-no-alpha-fbo-with-alpha.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/context/context-no-alpha-fbo-with-alpha.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/context/context-no-alpha-fbo-with-alpha.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/context/context-no-alpha-fbo-with-alpha.html 2017-01-16 01:35:02.000000000 +0000 @@ -0,0 +1,98 @@ + + + + + + + + + + + + + +
+
+ + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/context/methods.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/context/methods.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/context/methods.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/context/methods.html 2017-01-16 01:35:02.000000000 +0000 @@ -183,6 +183,9 @@ // Properties to be ignored because they were added in versions of the // spec that are backward-compatible with this version var ignoredMethods = [ + // There is no official spec for the commit API yet, the proposal link is: + // https://wiki.whatwg.org/wiki/OffscreenCanvas + "commit" ]; function assertFunction(v, f) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/00_test_list.txt 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/00_test_list.txt 2017-01-16 01:35:02.000000000 +0000 @@ -26,11 +26,14 @@ webgl-debug-renderer-info.html webgl-debug-shaders.html --min-version 1.0.3 webgl-compressed-texture-atc.html +--min-version 1.0.4 webgl-compressed-texture-etc.html --min-version 1.0.3 webgl-compressed-texture-pvrtc.html --min-version 1.0.2 webgl-compressed-texture-s3tc.html +--min-version 1.0.4 webgl-compressed-texture-s3tc-srgb.html --min-version 1.0.3 webgl-compressed-texture-size-limit.html --min-version 1.0.2 --max-version 1.9.9 webgl-depth-texture.html --min-version 1.0.3 --max-version 1.9.9 webgl-draw-buffers.html +--min-version 1.0.4 --max-version 1.9.9 webgl-draw-buffers-framebuffer-unsupported.html --min-version 1.0.4 --max-version 1.9.9 webgl-draw-buffers-max-draw-buffers.html --min-version 1.0.3 webgl-shared-resources.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/angle-instanced-arrays.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/angle-instanced-arrays.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/angle-instanced-arrays.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/angle-instanced-arrays.html 2017-01-16 01:35:02.000000000 +0000 @@ -141,7 +141,7 @@ function runDivisorTestDisabled() { debug("Testing VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE with extension disabled"); - + var VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE = 0x88FE; gl.getVertexAttrib(0, VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE); @@ -615,7 +615,7 @@ ext.drawArraysInstancedANGLE(gl.TRIANGLES, 0, 6, instanceCount); - // Make sure each color was drawn correctly + // Make sure each color was drawn correctly var i; var passed = true; for (i = 0; i < instanceCount; ++i) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/ext-disjoint-timer-query.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/ext-disjoint-timer-query.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/ext-disjoint-timer-query.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/ext-disjoint-timer-query.html 2017-01-16 01:35:02.000000000 +0000 @@ -51,7 +51,7 @@ var timestamp_query1 = null; var timestamp_query2 = null; var availability_retry = 500; -var timestamp_counter_bits = 0; +var timestamp_counter_bits = 0; if (!gl) { testFailed("WebGL context does not exist"); @@ -95,18 +95,25 @@ shouldBe("ext.isQueryEXT(null)", "false"); - shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "null"); - shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.QUERY_COUNTER_BITS_EXT) >= 30", "true"); + shouldBeTrue("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT) === null"); + wtu.glErrorShouldBe(gl, gl.NO_ERROR); + shouldBeTrue("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.QUERY_COUNTER_BITS_EXT) >= 30"); + wtu.glErrorShouldBe(gl, gl.NO_ERROR); + + shouldBeTrue("ext.getQueryEXT(ext.TIMESTAMP_EXT, ext.CURRENT_QUERY_EXT) === null"); + wtu.glErrorShouldBe(gl, gl.NO_ERROR); // Certain drivers set timestamp counter bits to 0 as they don't support timestamps - shouldBe("ext.getQueryEXT(ext.TIMESTAMP_EXT, ext.QUERY_COUNTER_BITS_EXT) >= 30 || " + - "ext.getQueryEXT(ext.TIMESTAMP_EXT, ext.QUERY_COUNTER_BITS_EXT) == 0", "true"); + shouldBeTrue("ext.getQueryEXT(ext.TIMESTAMP_EXT, ext.QUERY_COUNTER_BITS_EXT) >= 30 || " + + "ext.getQueryEXT(ext.TIMESTAMP_EXT, ext.QUERY_COUNTER_BITS_EXT) === 0"); + wtu.glErrorShouldBe(gl, gl.NO_ERROR); debug(""); debug("Testing time elapsed query lifecycle"); query = ext.createQueryEXT(); shouldBe("ext.isQueryEXT(query)", "false"); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Query creation must succeed."); + shouldThrow("ext.beginQueryEXT(ext.TIMESTAMP_EXT, null)"); ext.beginQueryEXT(ext.TIMESTAMP_EXT, query); wtu.glErrorShouldBe(gl, gl.INVALID_ENUM, "Beginning a timestamp query should fail."); ext.beginQueryEXT(ext.TIME_ELAPSED_EXT, query); @@ -121,6 +128,7 @@ shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "query"); ext.endQueryEXT(ext.TIME_ELAPSED_EXT); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Ending an active time elapsed query should succeed."); + shouldThrow("ext.getQueryObjectEXT(null, ext.QUERY_RESULT_AVAILABLE_EXT)"); ext.getQueryObjectEXT(query, ext.QUERY_RESULT_AVAILABLE_EXT); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Fetching query result availability after query end should succeed."); ext.endQueryEXT(ext.TIME_ELAPSED_EXT); @@ -138,9 +146,11 @@ debug(""); debug("Testing timestamp counter"); query = ext.createQueryEXT(); + shouldThrow("ext.queryCounterEXT(null, ext.TIMESTAMP_EXT)"); ext.queryCounterEXT(query, ext.TIMESTAMP_EXT); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Timestamp counter queries should work."); ext.deleteQueryEXT(query); + wtu.glErrorShouldBe(gl, gl.NO_ERROR); debug(""); debug("Performing parameter sanity checks"); @@ -156,36 +166,45 @@ shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "null"); ext.beginQueryEXT(ext.TIME_ELAPSED_EXT, query); shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "query"); + wtu.glErrorShouldBe(gl, gl.NO_ERROR); debug(""); debug("Testing failed begin query should not change the current query."); ext.beginQueryEXT(ext.TIME_ELAPSED_EXT, query2); wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "Beginning an elapsed query without ending should fail."); shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "query"); + wtu.glErrorShouldBe(gl, gl.NO_ERROR); debug(""); - debug("Testing beginning a timestamp query should not change the elapsed query."); - ext.beginQueryEXT(ext.TIME_ELAPSED_EXT, query2) - shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "query");; + debug("Testing beginning a timestamp query is invalid and should not change the elapsed query."); + ext.beginQueryEXT(ext.TIMESTAMP_EXT, query2) + wtu.glErrorShouldBe(gl, gl.INVALID_ENUM); + shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "query"); + wtu.glErrorShouldBe(gl, gl.NO_ERROR); debug(""); debug("Testing timestamp queries end immediately so are never current."); ext.queryCounterEXT(query2, ext.TIMESTAMP_EXT); shouldBe("ext.getQueryEXT(ext.TIMESTAMP_EXT, ext.CURRENT_QUERY_EXT)", "null"); + wtu.glErrorShouldBe(gl, gl.NO_ERROR); debug(""); debug("Testing ending the query should clear the current query."); ext.endQueryEXT(ext.TIME_ELAPSED_EXT); shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "null"); + wtu.glErrorShouldBe(gl, gl.NO_ERROR); debug(""); debug("Testing beginning a elapsed query using a timestamp query should fail and not affect current query.") ext.beginQueryEXT(ext.TIME_ELAPSED_EXT, query2); wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "Switching query targets should fail."); shouldBe("ext.getQueryEXT(ext.TIME_ELAPSED_EXT, ext.CURRENT_QUERY_EXT)", "null"); + wtu.glErrorShouldBe(gl, gl.NO_ERROR); ext.deleteQueryEXT(query); ext.deleteQueryEXT(query2); + + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors at end of sanity tests"); } function runElapsedTimeTest() { @@ -224,7 +243,7 @@ var startTime = Date.now(); while (Date.now() - startTime < 2000) { gl.finish(); - if (ext.getQueryObjectEXT(elapsed_query, ext.QUERY_RESULT_AVAILABLE_EXT)) { + if (ext.getQueryObjectEXT(elapsed_query, ext.QUERY_RESULT_AVAILABLE_EXT)) { testFailed("One of the queries' results became available too early"); return; } @@ -241,18 +260,21 @@ } function checkQueryResults() { - if (availability_retry > 0 && (timestamp_counter_bits == 0 || - !ext.getQueryObjectEXT(timestamp_query2, ext.QUERY_RESULT_AVAILABLE_EXT))) { - var error = gl.getError(); - if (error != gl.NO_ERROR) { - testFailed("getQueryObjectEXT should have no errors: " + wtu.glEnumToString(gl, error)); - debug(""); - finishTest(); + if (availability_retry > 0) { + // Make a reasonable attempt to wait for the queries' results to become available. + if (!ext.getQueryObjectEXT(elapsed_query, ext.QUERY_RESULT_AVAILABLE_EXT) || + (timestamp_counter_bits > 0 && !ext.getQueryObjectEXT(timestamp_query2, ext.QUERY_RESULT_AVAILABLE_EXT))) { + var error = gl.getError(); + if (error != gl.NO_ERROR) { + testFailed("getQueryObjectEXT should have no errors: " + wtu.glEnumToString(gl, error)); + debug(""); + finishTest(); + return; + } + availability_retry--; + window.requestAnimationFrame(checkQueryResults); return; } - availability_retry--; - window.requestAnimationFrame(checkQueryResults); - return; } debug(""); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/ext-frag-depth.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/ext-frag-depth.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/ext-frag-depth.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/ext-frag-depth.html 2017-01-16 01:35:02.000000000 +0000 @@ -216,7 +216,7 @@ canvas.width = 50; canvas.height = 50; gl.viewport(0, 0, canvas.width, canvas.height); - + // Enable depth testing with a clearDepth of 0.5 // This makes it so that fragments are only rendered when // gl_fragDepthEXT is < 0.5 diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/ext-texture-filter-anisotropic.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/ext-texture-filter-anisotropic.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/ext-texture-filter-anisotropic.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/ext-texture-filter-anisotropic.html 2017-01-16 01:35:02.000000000 +0000 @@ -91,22 +91,22 @@ function runHintTestDisabled() { debug("Testing MAX_TEXTURE_MAX_ANISOTROPY_EXT with extension disabled"); - + var MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF; gl.getParameter(MAX_TEXTURE_MAX_ANISOTROPY_EXT); wtu.glErrorShouldBe(gl, gl.INVALID_ENUM, "MAX_TEXTURE_MAX_ANISOTROPY_EXT should not be queryable if extension is disabled"); - + debug("Testing TEXTURE_MAX_ANISOTROPY_EXT with extension disabled"); var TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE; var texture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, texture); - + gl.getTexParameter(gl.TEXTURE_2D, TEXTURE_MAX_ANISOTROPY_EXT); wtu.glErrorShouldBe(gl, gl.INVALID_ENUM, "TEXTURE_MAX_ANISOTROPY_EXT should not be queryable if extension is disabled"); gl.texParameterf(gl.TEXTURE_2D, TEXTURE_MAX_ANISOTROPY_EXT, 1); wtu.glErrorShouldBe(gl, gl.INVALID_ENUM, "TEXTURE_MAX_ANISOTROPY_EXT should not be settable if extension is disabled"); - + gl.texParameteri(gl.TEXTURE_2D, TEXTURE_MAX_ANISOTROPY_EXT, 1); wtu.glErrorShouldBe(gl, gl.INVALID_ENUM, "TEXTURE_MAX_ANISOTROPY_EXT should not be settable if extension is disabled"); @@ -127,7 +127,7 @@ else{ testFailed("Minimum value of MAX_TEXTURE_MAX_ANISOTROPY_EXT is 2.0, returned values was: " + max_anisotropy); } - + // TODO make a texture and verify initial value == 1 and setting to less than 1 is invalid value debug("Testing TEXTURE_MAX_ANISOTROPY_EXT with extension disabled"); @@ -135,7 +135,7 @@ var texture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, texture); - + var queried_value = gl.getTexParameter(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "TEXTURE_MAX_ANISOTROPY_EXT query should succeed if extension is enabled"); @@ -148,13 +148,13 @@ gl.texParameterf(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, 0); wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "texParameterf TEXTURE_MAX_ANISOTROPY_EXT set to < 1 should be an invalid value"); - + gl.texParameteri(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, 0); wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "texParameteri TEXTURE_MAX_ANISOTROPY_EXT set to < 1 should be an invalid value"); - + gl.texParameterf(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "texParameterf TEXTURE_MAX_ANISOTROPY_EXT set to >= 2 should succeed"); - + gl.texParameteri(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "texParameteri TEXTURE_MAX_ANISOTROPY_EXT set to >= 2 should succeed"); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/oes-element-index-uint.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/oes-element-index-uint.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/oes-element-index-uint.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/oes-element-index-uint.html 2017-01-16 01:35:02.000000000 +0000 @@ -79,7 +79,7 @@ testFailed("WebGL context does not exist"); } else { testPassed("WebGL context exists"); - + var drawType = (ii == 0) ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW; debug("Testing " + ((ii == 0) ? "STATIC_DRAW" : "DYNAMIC_DRAW")); @@ -129,17 +129,17 @@ function runDrawTests(drawType) { debug("Test that draws with unsigned integer indices produce the expected results"); - + canvas.width = 50; canvas.height = 50; gl.viewport(0, 0, canvas.width, canvas.height); - + var program = wtu.setupSimpleColorProgram(gl); function setupDraw(s) { // Create a vertex buffer that cannot be fully indexed via shorts var quadArrayLen = 65537 * 3; var quadArray = new Float32Array(quadArrayLen); - + // Leave all but the last 4 values zero-ed out var idx = quadArrayLen - 12; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/oes-vertex-array-object-bufferData.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/oes-vertex-array-object-bufferData.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/oes-vertex-array-object-bufferData.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/oes-vertex-array-object-bufferData.html 2017-01-16 01:35:03.000000000 +0000 @@ -99,7 +99,7 @@ * namely the Nexus 5, and Nexus 7 (in 2014/01) when using bufferData before binding the VAO. * The tested OS was Android KitKat 4.4.2, the effects were the same in all tested browsers * (Chrome, Chrome Beta, Firefox, Firefox Beta), so it is likely a driver bug. - * These devices have the similar Adreno 320 and Adreno 330 GPUs respectively. + * These devices have the similar Adreno 320 and Adreno 330 GPUs respectively. * * The issuse resulted from this sequence of actions in a requestAnimationFrame loop: * 1. upload some vertex buffers with gl.bufferData (eg. colors) @@ -107,12 +107,12 @@ * 3. clear the canvas * 4. draw (some triangles) to the canvas * 5. unbind the VAO - * + * * This caused the drawn triangles to be drawn with black (0) for most of the frames, with some * rare frames presenting the correct render results. Interestingly on both devices exactly every - * 64th frame passed (starting with the very first one), the others failed. + * 64th frame passed (starting with the very first one), the others failed. * (Because of this, we test multiple frames.) - * When positions were uploaded, seemingly nothing was drawn, that's likely because the + * When positions were uploaded, seemingly nothing was drawn, that's likely because the * position buffer was also all 0s. * * The issue did not occur: @@ -121,61 +121,61 @@ */ function runBufferDataTest() { debug("Testing draws with bufferData"); - + canvas.width = 50; canvas.height = 50; gl.viewport(0, 0, canvas.width, canvas.height); - + var testColor = [0, 255, 0, 255]; var clearColor = [255, 0, 0, 255]; - + // Where the issue occures, this is the sequence of success/failure every time: // result: success fail fail fail fail ... success fail fail ... // currentTestCount: 0 1 2 3 4 ... 64 65 66 ... // So with just 1 test it passes, but 2 tests are enough. Here we use 3. - var numberOfTests = 3; + var numberOfTests = 3; var currentTestCount = 0; - + var positionLoc = 0; var colorLoc = 1; var gridRes = 1; - + var program = wtu.setupSimpleVertexColorProgram(gl, positionLoc, colorLoc); - + var vao0 = ext.createVertexArrayOES(); ext.bindVertexArrayOES(vao0); - + var buffers = wtu.setupIndexedQuadWithOptions(gl, { gridRes: gridRes, positionLocation: positionLoc }); - + var colorTypedArray = createColorTypedArray(); - + var colorBuffer = gl.createBuffer(gl.ARRAY_BUFFER); gl.bindBuffer(gl.ARRAY_BUFFER, colorBuffer); gl.enableVertexAttribArray(colorLoc); - gl.vertexAttribPointer(colorLoc, 4, gl.FLOAT, false, 0, 0); - + gl.vertexAttribPointer(colorLoc, 4, gl.FLOAT, false, 0, 0); + ext.bindVertexArrayOES(null); - + testDrawing(); - + function testDrawing() { // this order works fine: // ext.bindVertexArrayOES(vao0); // uploadColor(); - + // this order doesn't: uploadColor(); ext.bindVertexArrayOES(vao0); - + wtu.clearAndDrawIndexedQuad(gl, 1, clearColor); - + ext.bindVertexArrayOES(null); //debug(""+currentTestCount+" + + + + + +WebGL WEBGL_compressed_texture_etc Conformance Tests + + + + + +
+
+ + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-compressed-texture-pvrtc.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-compressed-texture-pvrtc.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-compressed-texture-pvrtc.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-compressed-texture-pvrtc.html 2017-01-16 01:35:03.000000000 +0000 @@ -177,6 +177,7 @@ } supportedFormats = gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS); + // There should be exactly 4 formats for both WebGL 1.0 and WebGL 2.0. shouldBe("supportedFormats.length", "4"); // check that all 4 formats exist diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-compressed-texture-s3tc.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-compressed-texture-s3tc.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-compressed-texture-s3tc.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-compressed-texture-s3tc.html 2017-01-16 01:35:03.000000000 +0000 @@ -184,6 +184,7 @@ } supportedFormats = gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS); + // There should be exactly 4 formats for both WebGL 1.0 and WebGL 2.0. shouldBe("supportedFormats.length", "4"); // check that all 4 formats exist @@ -213,6 +214,11 @@ data: img_8x8_rgb_dxt1, format: ext.COMPRESSED_RGB_S3TC_DXT1_EXT, hasAlpha: false, + subX0: 0, + subY0: 0, + subWidth: 4, + subHeight: 4, + subData: img_4x4_rgb_dxt1 } ]; testDXTTextures(tests); @@ -236,7 +242,6 @@ format: ext.COMPRESSED_RGBA_S3TC_DXT1_EXT, // This is a special case -- the texture is still opaque // though it's RGBA. - hasAlpha: false, } ]; testDXTTextures(tests); @@ -257,6 +262,11 @@ data: img_8x8_rgba_dxt3, format: ext.COMPRESSED_RGBA_S3TC_DXT3_EXT, hasAlpha: true, + subX0: 0, + subY0: 0, + subWidth: 4, + subHeight: 4, + subData: img_4x4_rgba_dxt3 } ]; testDXTTextures(tests); @@ -277,6 +287,11 @@ data: img_8x8_rgba_dxt5, format: ext.COMPRESSED_RGBA_S3TC_DXT5_EXT, hasAlpha: true, + subX0: 0, + subY0: 0, + subWidth: 4, + subHeight: 4, + subData: img_4x4_rgba_dxt5 } ]; testDXTTextures(tests); @@ -429,6 +444,25 @@ return dest; } +function uncompressDXTIntoSubRegion(width, height, subX0, subY0, subWidth, subHeight, data, format) +{ + if (width % 4 || height % 4 || subX0 % 4 || subY0 % 4 || subWidth % 4 || subHeight % 4) + throw "bad dimension"; + + var dest = new Uint8Array(width * height * 4); + var blocksAcross = subWidth / 4; + var blocksDown = subHeight / 4; + var blockSize = getBlockSize(format); + for (var yy = 0; yy < blocksDown; ++yy) { + for (var xx = 0; xx < blocksAcross; ++xx) { + uncompressDXTBlock( + dest, subX0 + xx * 4, subY0 + yy * 4, width, data, + (yy * blocksAcross + xx) * blockSize, format); + } + } + return dest; +} + function copyRect(data, srcX, srcY, dstX, dstY, width, height, stride) { var bytesPerLine = width * 4; var srcOffset = srcX * 4 + srcY * stride; @@ -463,6 +497,31 @@ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); if (useTexStorage) { + if (test.subData) { + var uncompressedDataSub = uncompressDXTIntoSubRegion( + width, height, test.subX0, test.subY0, test.subWidth, test.subHeight, test.subData, format); + var tex1 = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, tex1); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + + gl.texStorage2D(gl.TEXTURE_2D, 1, format, width, height); + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "allocating compressed texture via texStorage2D"); + gl.compressedTexSubImage2D( + gl.TEXTURE_2D, 0, test.subX0, test.subY0, test.subWidth, test.subHeight, format, test.subData); + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "uploading compressed texture data via compressedTexSubImage2D"); + + wtu.clearAndDrawUnitQuad(gl); + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "drawing unit quad 1"); + compareRect(width, height, test.channels, uncompressedDataSub, "NEAREST"); + + // Clean up and recover + gl.deleteTexture(tex1); + gl.bindTexture(gl.TEXTURE_2D, tex); + } + gl.texStorage2D(gl.TEXTURE_2D, 1, format, width, height); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "allocating compressed texture via texStorage2D"); wtu.clearAndDrawUnitQuad(gl); @@ -480,13 +539,13 @@ wtu.glErrorShouldBe(gl, gl.NO_ERROR, "after clearing generateMipmap error"); wtu.clearAndDrawUnitQuad(gl); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "drawing unit quad 1"); - compareRect(width, height, test.channels, width, height, uncompressedData, data, format, "NEAREST"); + compareRect(width, height, test.channels, uncompressedData, "NEAREST"); // Test again with linear filtering. gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); wtu.clearAndDrawUnitQuad(gl); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "drawing unit quad 2"); - compareRect(width, height, test.channels, width, height, uncompressedData, data, format, "LINEAR"); + compareRect(width, height, test.channels, uncompressedData, "LINEAR"); if (!useTexStorage) { // It's not allowed to redefine textures defined via texStorage2D. @@ -587,14 +646,14 @@ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); wtu.clearAndDrawUnitQuad(gl); - compareRect(width, height, test.channels, width, height, uncompressedData, data, format, "NEAREST"); + compareRect(width, height, test.channels, uncompressedData, "NEAREST"); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "drawing unit quad"); // Next test LINEAR filtering. gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); wtu.clearAndDrawUnitQuad(gl); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "drawing unit quad"); - compareRect(width, height, test.channels, width, height, uncompressedData, data, format, "LINEAR"); + compareRect(width, height, test.channels, uncompressedData, "LINEAR"); } } } @@ -608,7 +667,7 @@ element.appendChild(div); } -function makeImage(imageWidth, imageHeight, dataWidth, data, alpha) { +function makeImage(imageWidth, imageHeight, data, alpha) { var scale = 8; var c = document.createElement("canvas"); c.width = imageWidth * scale; @@ -616,7 +675,7 @@ var ctx = c.getContext("2d"); for (var yy = 0; yy < imageHeight; ++yy) { for (var xx = 0; xx < imageWidth; ++xx) { - var offset = (yy * dataWidth + xx) * 4; + var offset = (yy * imageWidth + xx) * 4; ctx.fillStyle = "rgba(" + data[offset + 0] + "," + data[offset + 1] + "," + @@ -627,43 +686,35 @@ } return wtu.makeImageFromCanvas(c); } -function compareRect( - actualWidth, actualHeight, actualChannels, - dataWidth, dataHeight, expectedData, - testData, testFormat, filteringMode) { - var actual = new Uint8Array(actualWidth * actualHeight * 4); - gl.readPixels( - 0, 0, actualWidth, actualHeight, gl.RGBA, gl.UNSIGNED_BYTE, actual); + +function compareRect(width, height, channels, expectedData, filteringMode) { + var actual = new Uint8Array(width * height * 4); + gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, actual); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "reading back pixels"); var div = document.createElement("div"); div.className = "testimages"; - insertImg(div, "expected", makeImage( - actualWidth, actualHeight, dataWidth, expectedData, - actualChannels == 4)); - insertImg(div, "actual", makeImage( - actualWidth, actualHeight, actualWidth, actual, - actualChannels == 4)); + insertImg(div, "expected", makeImage(width, height, expectedData, channels == 4)); + insertImg(div, "actual", makeImage(width, height, actual, channels == 4)); div.appendChild(document.createElement('br')); document.getElementById("console").appendChild(div); var failed = false; - for (var yy = 0; yy < actualHeight; ++yy) { - for (var xx = 0; xx < actualWidth; ++xx) { - var actualOffset = (yy * actualWidth + xx) * 4; - var expectedOffset = (yy * dataWidth + xx) * 4; + for (var yy = 0; yy < height; ++yy) { + for (var xx = 0; xx < width; ++xx) { + var offset = (yy * width + xx) * 4; var expected = [ - expectedData[expectedOffset + 0], - expectedData[expectedOffset + 1], - expectedData[expectedOffset + 2], - (actualChannels == 3 ? 255 : expectedData[expectedOffset + 3]) + expectedData[offset + 0], + expectedData[offset + 1], + expectedData[offset + 2], + (channels == 3 ? 255 : expectedData[offset + 3]) ]; for (var jj = 0; jj < 4; ++jj) { - if (actual[actualOffset + jj] != expected[jj]) { + if (actual[offset + jj] != expected[jj]) { failed = true; - var was = actual[actualOffset + 0].toString(); + var was = actual[offset + 0].toString(); for (var j = 1; j < 4; ++j) { - was += "," + actual[actualOffset + j]; + was += "," + actual[offset + j]; } testFailed('at (' + xx + ', ' + yy + ') expected: ' + expected + ' was ' + was); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-compressed-texture-s3tc-srgb.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-compressed-texture-s3tc-srgb.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-compressed-texture-s3tc-srgb.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-compressed-texture-s3tc-srgb.html 2017-01-16 01:35:03.000000000 +0000 @@ -0,0 +1,711 @@ + + + + + + + + + +WebGL WEBGL_compressed_texture_s3tc_srgb Conformance Tests + + + +
+ +
+ + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-debug-shaders.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-debug-shaders.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-debug-shaders.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-debug-shaders.html 2017-01-16 01:35:03.000000000 +0000 @@ -140,6 +140,7 @@ gl.shaderSource(shader, "void main() { gl_FragColor = vec4(gl_FragCoord.x, 0.0, 0.0, 1.0); }"); gl.compileShader(shader); shouldBeTrue("gl.getShaderParameter(shader, gl.COMPILE_STATUS)"); + shouldThrow("ext.getTranslatedShaderSource(null)"); translatedSource = ext.getTranslatedShaderSource(shader); shouldBeTrue('translatedSource && translatedSource.indexOf("gl_FragCoord") >= 0'); // change the source but don't compile. diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-depth-texture.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-depth-texture.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-depth-texture.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-depth-texture.html 2017-01-16 01:35:03.000000000 +0000 @@ -200,133 +200,147 @@ wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.texImage2D(gl.' + targets[ii] + ', 1, gl.' + typeInfo.format + ', 1, 1, 0, gl.' + typeInfo.format + ', ' + typeStr + ', null)'); } - // check 2d textures. - tex = gl.createTexture(); - gl.bindTexture(gl.TEXTURE_2D, tex); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); - - // test level > 0 - wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.texImage2D(gl.TEXTURE_2D, 1, gl.' + typeInfo.format + ', 1, 1, 0, gl.' + typeInfo.format + ', ' + typeStr + ', null)'); - - // test with data - wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', 1, 1, 0, gl.' + typeInfo.format + ', ' + typeStr + ', ' + typeInfo.data + ')'); - - // test with canvas - wtu.shouldGenerateGLError(gl, [gl.INVALID_VALUE, gl.INVALID_ENUM, gl.INVALID_OPERATION], 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', gl.' + typeInfo.format + ', ' + typeStr + ', canvas2)'); - - // test copyTexImage2D - wtu.shouldGenerateGLError(gl, [gl.INVALID_ENUM, gl.INVALID_OPERATION], 'gl.copyTexImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', 0, 0, 1, 1, 0)'); - - // test real thing - wtu.shouldGenerateGLError(gl, gl.NO_ERROR, 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', ' + res + ', ' + res + ', 0, gl.' + typeInfo.format + ', ' + typeStr + ', null)'); - - // test texSubImage2D - wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 1, 1, gl.' + typeInfo.format + ', ' + typeStr + ', ' + typeInfo.data + ')'); - - // test copyTexSubImage2D - wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.copyTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1)'); - - // test generateMipmap - wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.generateMipmap(gl.TEXTURE_2D)'); - - var fbo = gl.createFramebuffer(); - gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); - gl.framebufferTexture2D(gl.FRAMEBUFFER, gl[typeInfo.attachment], gl.TEXTURE_2D, tex, 0); - - // Ensure DEPTH_BITS returns >= 16 bits for UNSIGNED_SHORT and UNSIGNED_INT, >= 24 UNSIGNED_INT_24_8_WEBGL. - // If there is stencil, ensure STENCIL_BITS reports >= 8 for UNSIGNED_INT_24_8_WEBGL. - shouldBeGreaterThanOrEqual('gl.getParameter(gl.DEPTH_BITS)', typeInfo.depthBits); - if (typeInfo.stencilBits === undefined) { - shouldBe('gl.getParameter(gl.STENCIL_BITS)', '0'); - } else { - shouldBeGreaterThanOrEqual('gl.getParameter(gl.STENCIL_BITS)', typeInfo.stencilBits); - } - - // TODO: remove this check if the spec is updated to require these combinations to work. - if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) != gl.FRAMEBUFFER_COMPLETE) - { - // try adding a color buffer. - var colorTex = gl.createTexture(); - gl.bindTexture(gl.TEXTURE_2D, colorTex); + // The WebGL_depth_texture extension supports both NEAREST and + // LINEAR filtering for depth textures, even though LINEAR + // doesn't have much meaning, and isn't supported in WebGL + // 2.0. Still, test both. + var filterModes = [ + 'LINEAR', + 'NEAREST' + ]; + + for (var jj = 0; jj < filterModes.length; ++jj) { + debug('testing ' + filterModes[jj] + ' filtering'); + var filterMode = gl[filterModes[jj]]; + + // check 2d textures. + tex = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, tex); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); - gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, res, res, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); - gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, colorTex, 0); - } + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, filterMode); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, filterMode); + + // test level > 0 + wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.texImage2D(gl.TEXTURE_2D, 1, gl.' + typeInfo.format + ', 1, 1, 0, gl.' + typeInfo.format + ', ' + typeStr + ', null)'); + + // test with data + wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', 1, 1, 0, gl.' + typeInfo.format + ', ' + typeStr + ', ' + typeInfo.data + ')'); + + // test with canvas + wtu.shouldGenerateGLError(gl, [gl.INVALID_VALUE, gl.INVALID_ENUM, gl.INVALID_OPERATION], 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', gl.' + typeInfo.format + ', ' + typeStr + ', canvas2)'); - shouldBe('gl.checkFramebufferStatus(gl.FRAMEBUFFER)', 'gl.FRAMEBUFFER_COMPLETE'); + // test copyTexImage2D + wtu.shouldGenerateGLError(gl, [gl.INVALID_ENUM, gl.INVALID_OPERATION], 'gl.copyTexImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', 0, 0, 1, 1, 0)'); - // use the default texture to render with while we return to the depth texture. - gl.bindTexture(gl.TEXTURE_2D, null); + // test real thing + wtu.shouldGenerateGLError(gl, gl.NO_ERROR, 'gl.texImage2D(gl.TEXTURE_2D, 0, gl.' + typeInfo.format + ', ' + res + ', ' + res + ', 0, gl.' + typeInfo.format + ', ' + typeStr + ', null)'); - // render the z-quad - gl.enable(gl.DEPTH_TEST); - gl.clearColor(1, 0, 0, 1); - gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); - gl.drawArrays(gl.TRIANGLES, 0, 6); - - dumpIt(gl, res, "--first--"); - - // render the depth texture. - gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.bindTexture(gl.TEXTURE_2D, tex); - gl.clearColor(0, 0, 1, 1); - gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); - gl.drawArrays(gl.TRIANGLES, 0, 6); - - var actualPixels = new Uint8Array(res * res * 4); - gl.readPixels(0, 0, res, res, gl.RGBA, gl.UNSIGNED_BYTE, actualPixels); - - dumpIt(gl, res, "--depth--"); - - // Check that each pixel's R value is less than that of the previous pixel - // in either direction. Basically verify we have a gradient. - var success = true; - for (var yy = 0; yy < res; ++yy) { - for (var xx = 0; xx < res; ++xx) { - var actual = (yy * res + xx) * 4; - var left = actual - 4; - var down = actual - res * 4; - - if (xx > 0) { - if (actualPixels[actual] <= actualPixels[left]) { - testFailed("actual(" + actualPixels[actual] + ") < left(" + actualPixels[left] + ")"); - success = false; - } + // test texSubImage2D + wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 1, 1, gl.' + typeInfo.format + ', ' + typeStr + ', ' + typeInfo.data + ')'); + + // test copyTexSubImage2D + wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.copyTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, 1, 1)'); + + // test generateMipmap + wtu.shouldGenerateGLError(gl, gl.INVALID_OPERATION, 'gl.generateMipmap(gl.TEXTURE_2D)'); + + var fbo = gl.createFramebuffer(); + gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl[typeInfo.attachment], gl.TEXTURE_2D, tex, 0); + + // Ensure DEPTH_BITS returns >= 16 bits for UNSIGNED_SHORT and UNSIGNED_INT, >= 24 UNSIGNED_INT_24_8_WEBGL. + // If there is stencil, ensure STENCIL_BITS reports >= 8 for UNSIGNED_INT_24_8_WEBGL. + shouldBeGreaterThanOrEqual('gl.getParameter(gl.DEPTH_BITS)', typeInfo.depthBits); + if (typeInfo.stencilBits === undefined) { + shouldBe('gl.getParameter(gl.STENCIL_BITS)', '0'); + } else { + shouldBeGreaterThanOrEqual('gl.getParameter(gl.STENCIL_BITS)', typeInfo.stencilBits); } - if (yy > 0) { - if (actualPixels[actual] <= actualPixels[down]) { - testFailed("actual(" + actualPixels[actual] + ") < down(" + actualPixels[down] + ")"); - success = false; + + // TODO: remove this check if the spec is updated to require these combinations to work. + if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) != gl.FRAMEBUFFER_COMPLETE) + { + // try adding a color buffer. + var colorTex = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, colorTex); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, res, res, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, colorTex, 0); + } + + shouldBe('gl.checkFramebufferStatus(gl.FRAMEBUFFER)', 'gl.FRAMEBUFFER_COMPLETE'); + + // use the default texture to render with while we return to the depth texture. + gl.bindTexture(gl.TEXTURE_2D, null); + + // render the z-quad + gl.enable(gl.DEPTH_TEST); + gl.clearColor(1, 0, 0, 1); + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); + gl.drawArrays(gl.TRIANGLES, 0, 6); + + dumpIt(gl, res, "--first--"); + + // render the depth texture. + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + gl.bindTexture(gl.TEXTURE_2D, tex); + gl.clearColor(0, 0, 1, 1); + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); + gl.drawArrays(gl.TRIANGLES, 0, 6); + + var actualPixels = new Uint8Array(res * res * 4); + gl.readPixels(0, 0, res, res, gl.RGBA, gl.UNSIGNED_BYTE, actualPixels); + + dumpIt(gl, res, "--depth--"); + + // Check that each pixel's R value is less than that of the previous pixel + // in either direction. Basically verify we have a gradient. + var success = true; + for (var yy = 0; yy < res; ++yy) { + for (var xx = 0; xx < res; ++xx) { + var actual = (yy * res + xx) * 4; + var left = actual - 4; + var down = actual - res * 4; + + if (xx > 0) { + if (actualPixels[actual] <= actualPixels[left]) { + testFailed("actual(" + actualPixels[actual] + ") < left(" + actualPixels[left] + ")"); + success = false; + } + } + if (yy > 0) { + if (actualPixels[actual] <= actualPixels[down]) { + testFailed("actual(" + actualPixels[actual] + ") < down(" + actualPixels[down] + ")"); + success = false; + } + } } } - } - } - // Check that bottom left corner is vastly different thatn top right. - if (actualPixels[(res * res - 1) * 4] - actualPixels[0] < 0xC0) { - testFailed("corners are not different enough"); - success = false; - } + // Check that bottom left corner is vastly different thatn top right. + if (actualPixels[(res * res - 1) * 4] - actualPixels[0] < 0xC0) { + testFailed("corners are not different enough"); + success = false; + } - if (success) { - testPassed("depth texture rendered correctly."); - } + if (success) { + testPassed("depth texture rendered correctly."); + } - // check limitations - gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); - gl.framebufferTexture2D(gl.FRAMEBUFFER, gl[typeInfo.attachment], gl.TEXTURE_2D, null, 0); - var badAttachment = typeInfo.attachment == 'DEPTH_ATTACHMENT' ? 'DEPTH_STENCIL_ATTACHMENT' : 'DEPTH_ATTACHMENT'; - wtu.shouldGenerateGLError(gl, gl.NO_ERROR, 'gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.' + badAttachment + ', gl.TEXTURE_2D, tex, 0)'); - shouldNotBe('gl.checkFramebufferStatus(gl.FRAMEBUFFER)', 'gl.FRAMEBUFFER_COMPLETE'); - wtu.shouldGenerateGLError(gl, gl.INVALID_FRAMEBUFFER_OPERATION, 'gl.clear(gl.DEPTH_BUFFER_BIT)'); - gl.bindFramebuffer(gl.FRAMEBUFFER, null); - shouldBe('gl.getError()', 'gl.NO_ERROR'); + // check limitations + gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl[typeInfo.attachment], gl.TEXTURE_2D, null, 0); + var badAttachment = typeInfo.attachment == 'DEPTH_ATTACHMENT' ? 'DEPTH_STENCIL_ATTACHMENT' : 'DEPTH_ATTACHMENT'; + wtu.shouldGenerateGLError(gl, gl.NO_ERROR, 'gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.' + badAttachment + ', gl.TEXTURE_2D, tex, 0)'); + shouldNotBe('gl.checkFramebufferStatus(gl.FRAMEBUFFER)', 'gl.FRAMEBUFFER_COMPLETE'); + wtu.shouldGenerateGLError(gl, gl.INVALID_FRAMEBUFFER_OPERATION, 'gl.clear(gl.DEPTH_BUFFER_BIT)'); + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + shouldBe('gl.getError()', 'gl.NO_ERROR'); + } } } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-draw-buffers-framebuffer-unsupported.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-draw-buffers-framebuffer-unsupported.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-draw-buffers-framebuffer-unsupported.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-draw-buffers-framebuffer-unsupported.html 2017-01-16 01:35:03.000000000 +0000 @@ -0,0 +1,147 @@ + + + + + + +WebGL WEBGL_draw_buffers FRAMEBUFFER_UNSUPPORTED Test + + + + + +
+
+ + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-draw-buffers.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-draw-buffers.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-draw-buffers.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/extensions/webgl-draw-buffers.html 2017-01-16 01:35:03.000000000 +0000 @@ -54,12 +54,24 @@ } } + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/compound-assignment-type-combination.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/compound-assignment-type-combination.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/compound-assignment-type-combination.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/compound-assignment-type-combination.html 2017-01-16 01:35:03.000000000 +0000 @@ -35,106 +35,13 @@ - - + - +
diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/conditional-discard-in-loop.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/conditional-discard-in-loop.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/conditional-discard-in-loop.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/conditional-discard-in-loop.html 2017-01-16 01:35:03.000000000 +0000 @@ -41,49 +41,49 @@ + + + + +
+
+ + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/invariant-does-not-leak-across-shaders.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/invariant-does-not-leak-across-shaders.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/invariant-does-not-leak-across-shaders.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/invariant-does-not-leak-across-shaders.html 2017-01-16 01:35:03.000000000 +0000 @@ -0,0 +1,95 @@ + + + + + + +Invariant does not leak across shaders + + + + + + +
+
+ + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/loop-if-loop-gradient.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/loop-if-loop-gradient.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/loop-if-loop-gradient.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/loop-if-loop-gradient.html 2017-01-16 01:35:03.000000000 +0000 @@ -35,7 +35,7 @@ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/nested-sequence-operator.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/nested-sequence-operator.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/nested-sequence-operator.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/nested-sequence-operator.html 2017-01-16 01:35:03.000000000 +0000 @@ -0,0 +1,68 @@ + + + + + + +Nested sequence operator + + + + + + +
+
+ + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/qualcomm-crash.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/qualcomm-crash.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/qualcomm-crash.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/qualcomm-crash.html 2017-01-16 01:35:03.000000000 +0000 @@ -35,7 +35,7 @@ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/sampler-struct-function-arg.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/sampler-struct-function-arg.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/sampler-struct-function-arg.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/sampler-struct-function-arg.html 2017-01-16 01:35:03.000000000 +0000 @@ -89,7 +89,7 @@ // Clear complete viewport to red gl.clearColor(1.0, 0.0, 0.0, 1.0); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); - + var attribBuffers = wtu.setupUnitQuad(gl, 0, 1); var program = wtu.setupProgram(gl, ["shader-vs", "shader-fs"], ["a_position"], [0], true); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/sequence-operator-evaluation-order.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/sequence-operator-evaluation-order.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/sequence-operator-evaluation-order.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/bugs/sequence-operator-evaluation-order.html 2017-01-16 01:35:03.000000000 +0000 @@ -29,28 +29,22 @@ -GLSL ternary operator should be evaluated after previous operands in a sequence +GLSL short-circuiting operators should be evaluated after previous operands in a sequence +
- + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/constructors/glsl-construct-bvec2.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/constructors/glsl-construct-bvec2.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/constructors/glsl-construct-bvec2.html 2017-01-13 01:33:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/constructors/glsl-construct-bvec2.html 2017-01-16 01:35:03.000000000 +0000 @@ -42,15 +42,15 @@
diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/misc/shaders-with-uniform-structs.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/misc/shaders-with-uniform-structs.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/glsl/misc/shaders-with-uniform-structs.html 2017-01-13 01:33:24.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/glsl/misc/shaders-with-uniform-structs.html 2017-01-16 01:35:04.000000000 +0000 @@ -40,7 +40,7 @@
@@ -85,33 +85,33 @@ precision mediump float; // Inputs -varying vec2 vTargetPixelCoord; +varying vec2 vTargetPixelCoord; const vec2 pixSize = vec2(2.0/32.0, 2.0/32.0); - + void main() { // Coordinates within a framebuffer pixel [0, 1> vec2 inPixelCoord = fract(vTargetPixelCoord / pixSize); // Create different color dependent on the position inside the framebuffer pixel - float r = (inPixelCoord.x < 0.4) ? 0.2 : (inPixelCoord.x > 0.6) ? 0.8 : 0.5; - float g = (inPixelCoord.y < 0.4) ? 0.2 : (inPixelCoord.y > 0.6) ? 0.8 : 0.5; - + float r = (inPixelCoord.x < 0.4) ? 0.2 : (inPixelCoord.x > 0.6) ? 0.8 : 0.5; + float g = (inPixelCoord.y < 0.4) ? 0.2 : (inPixelCoord.y > 0.6) ? 0.8 : 0.5; + gl_FragColor = vec4(r, g, 0.0, 1.0); } - - diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/misc/expando-loss.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/misc/expando-loss.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/misc/expando-loss.html 2017-01-13 01:34:23.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/misc/expando-loss.html 2017-01-16 01:35:04.000000000 +0000 @@ -175,18 +175,18 @@ setTestExpandos(buffer); gl.bindBuffer(gl.ARRAY_BUFFER, buffer); gl.vertexAttribPointer(position, 2, gl.FLOAT, false, 0, 0); - assertMsg(buffer === gl.getVertexAttrib(position, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING), + assertMsg(buffer === gl.getVertexAttrib(position, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING), "getVertexAttrib(VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) return instance set with vertexAttribPointer"); gl.bindBuffer(gl.ARRAY_BUFFER, null); - + // Garbage collect Javascript references. Remaining references should be internal to WebGL. buffer = null; - program = null; + program = null; webglHarnessCollectGarbage(); var retrievedBuffer = gl.getVertexAttrib(position, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING); verifyTestExpandos(retrievedBuffer, "Vertex Attribute Buffer"); - shouldBeType(retrievedBuffer, 'WebGLBuffer'); + shouldBeType(retrievedBuffer, 'WebGLBuffer'); debug(''); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/more/all_tests.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/more/all_tests.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/more/all_tests.html 2017-01-13 01:34:24.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/more/all_tests.html 2017-01-16 01:35:04.000000000 +0000 @@ -58,342 +58,342 @@

conformance/badArgsArityLessThanArgc.html

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/more/all_tests_linkonly.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/more/all_tests_linkonly.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/more/all_tests_linkonly.html 2017-01-13 01:34:24.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/more/all_tests_linkonly.html 2017-01-16 01:35:04.000000000 +0000 @@ -58,342 +58,342 @@

conformance/badArgsArityLessThanArgc.html

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/more/all_tests_sequential.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/more/all_tests_sequential.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/more/all_tests_sequential.html 2017-01-13 01:34:24.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/more/all_tests_sequential.html 2017-01-16 01:35:04.000000000 +0000 @@ -58,342 +58,342 @@

conformance/badArgsArityLessThanArgc.html

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/more/functions/texImage2D.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/more/functions/texImage2D.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/more/functions/texImage2D.html 2017-01-13 01:34:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/more/functions/texImage2D.html 2017-01-16 01:35:05.000000000 +0000 @@ -73,7 +73,7 @@ } Tests.testTexImage2DNull = function(gl) { - gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1,1,0,gl.RGBA,gl.UNSIGNED_BYTE, null); + assertOk(function(){gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1,1,0,gl.RGBA,gl.UNSIGNED_BYTE, null);}); } Tests.endUnit = function(gl) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/more/index.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/more/index.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/more/index.html 2017-01-13 01:34:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/more/index.html 2017-01-16 01:35:05.000000000 +0000 @@ -31,9 +31,9 @@ WebGL tests - +

Tests for the WebGL canvas context

- +

These tests are intended to serve the following purposes:

  • Assert spec conformance (so that WebGL pages work the same across browsers and hardware)
  • diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/more/README.md firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/more/README.md --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/more/README.md 2017-01-13 01:34:23.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/more/README.md 2017-01-16 01:35:04.000000000 +0000 @@ -22,7 +22,7 @@ 1. Fork this repo 2. Run gen_tests.rb - 3. Look into templates/ to see which functions lack tests (also see methods.txt and nsICanvasRenderingContextWebGL.idl): + 3. Look into templates/ to see which functions lack tests (also see methods.txt and nsICanvasRenderingContextWebGL.idl): 1. copy methodName.html to functions/methodName.html and write tests that test the results of valid inputs. 2. copy methodNameBadArgs.html to functions/methodNameBadArgs.html and write tests to assert that invalid inputs throw exceptions. 3. If your test causes a segfault, add the following to the top of the script tag: Tests.autorun = false; Tests.message = "Caution: this may crash your browser"; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/abs/abs_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/abs/abs_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/abs/abs_001_to_006.html 2017-01-13 01:34:47.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/abs/abs_001_to_006.html 2017-01-16 01:35:05.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "abs_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "abs_float_frag_xvary.frag" - }, - "name": "abs_float_frag_xvary.test.html", + }, + "name": "abs_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "abs_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "abs_vec2_frag_xvary.frag" - }, - "name": "abs_vec2_frag_xvary.test.html", + }, + "name": "abs_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "abs_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "abs_vec3_frag_xvary.frag" - }, - "name": "abs_vec3_frag_xvary.test.html", + }, + "name": "abs_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "abs_float_vert_xvary_ref.vert", + "vertexShader": "abs_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "abs_float_vert_xvary.vert", + "vertexShader": "abs_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "abs_float_vert_xvary.test.html", + }, + "name": "abs_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "abs_vec2_vert_xvary_ref.vert", + "vertexShader": "abs_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "abs_vec2_vert_xvary.vert", + "vertexShader": "abs_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "abs_vec2_vert_xvary.test.html", + }, + "name": "abs_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "abs_vec3_vert_xvary_ref.vert", + "vertexShader": "abs_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "abs_vec3_vert_xvary.vert", + "vertexShader": "abs_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "abs_vec3_vert_xvary.test.html", + }, + "name": "abs_vec3_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/acos/acos_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/acos/acos_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/acos/acos_001_to_006.html 2017-01-13 01:34:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/acos/acos_001_to_006.html 2017-01-16 01:35:05.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "acos_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "acos_float_frag_xvary.frag" - }, - "name": "acos_float_frag_xvary.test.html", + }, + "name": "acos_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "acos_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "acos_vec2_frag_xvary.frag" - }, - "name": "acos_vec2_frag_xvary.test.html", + }, + "name": "acos_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "acos_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "acos_vec3_frag_xvary.frag" - }, - "name": "acos_vec3_frag_xvary.test.html", + }, + "name": "acos_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "acos_float_vert_xvary_ref.vert", + "vertexShader": "acos_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "acos_float_vert_xvary.vert", + "vertexShader": "acos_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "acos_float_vert_xvary.test.html", + }, + "name": "acos_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "acos_vec2_vert_xvary_ref.vert", + "vertexShader": "acos_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "acos_vec2_vert_xvary.vert", + "vertexShader": "acos_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "acos_vec2_vert_xvary.test.html", + }, + "name": "acos_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "acos_vec3_vert_xvary_ref.vert", + "vertexShader": "acos_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "acos_vec3_vert_xvary.vert", + "vertexShader": "acos_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "acos_vec3_vert_xvary.test.html", + }, + "name": "acos_vec3_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/acos/acos_float_frag_xvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/acos/acos_float_frag_xvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/acos/acos_float_frag_xvary_ref.frag 2017-01-13 01:34:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/acos/acos_float_frag_xvary_ref.frag 2017-01-16 01:35:05.000000000 +0000 @@ -62,15 +62,15 @@ asinValues[14] = 0.848062; asinValues[15] = 1.06544; asinValues[16] = 1.5708; - + const float M_PI = 3.14159265358979323846; float c = 2.0 * (color.r - 0.5); - + float arrVal = (c + 1.0) * 8.0; int arr0 = int(floor(arrVal)); float weight = arrVal - floor(arrVal); float asin_c = 0.0; - + if (arr0 == 0) asin_c = lerp(asinValues[0], asinValues[1], weight); else if (arr0 == 1) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/acos/acos_vec2_frag_xvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/acos/acos_vec2_frag_xvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/acos/acos_vec2_frag_xvary_ref.frag 2017-01-13 01:34:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/acos/acos_vec2_frag_xvary_ref.frag 2017-01-16 01:35:05.000000000 +0000 @@ -62,10 +62,10 @@ asinValues[14] = 0.848062; asinValues[15] = 1.06544; asinValues[16] = 1.5708; - + const float M_PI = 3.14159265358979323846; vec2 c = 2.0 * (color.rg - 0.5); - + vec2 arrVal = (c + vec2(1.0, 1.0)) * 8.0; int arr0x = int(floor(arrVal.x)); int arr0y = int(floor(arrVal.y)); @@ -106,7 +106,7 @@ asin_c.x = lerp(asinValues[15], asinValues[16], weight.x); else if (arr0x == 16) asin_c.x = asinValues[16]; - + if (arr0y == 0) asin_c.y = lerp(asinValues[0], asinValues[1], weight.y); else if (arr0y == 1) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/acos/acos_vec3_frag_xvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/acos/acos_vec3_frag_xvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/acos/acos_vec3_frag_xvary_ref.frag 2017-01-13 01:34:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/acos/acos_vec3_frag_xvary_ref.frag 2017-01-16 01:35:05.000000000 +0000 @@ -62,10 +62,10 @@ asinValues[14] = 0.848062; asinValues[15] = 1.06544; asinValues[16] = 1.5708; - + const float M_PI = 3.14159265358979323846; vec3 c = 2.0 * (color.rgb - 0.5); - + vec3 arrVal = (c + vec3(1.0, 1.0, 1.0)) * 8.0; int arr0x = int(floor(arrVal.x)); int arr0y = int(floor(arrVal.y)); @@ -107,7 +107,7 @@ asin_c.x = lerp(asinValues[15], asinValues[16], weight.x); else if (arr0x == 16) asin_c.x = asinValues[16]; - + if (arr0y == 0) asin_c.y = lerp(asinValues[0], asinValues[1], weight.y); else if (arr0y == 1) @@ -142,7 +142,7 @@ asin_c.y = lerp(asinValues[15], asinValues[16], weight.y); else if (arr0y == 16) asin_c.y = asinValues[16]; - + if (arr0z == 0) asin_c.z = lerp(asinValues[0], asinValues[1], weight.z); else if (arr0z == 1) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_001_to_004.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_001_to_004.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_001_to_004.html 2017-01-13 01:34:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_001_to_004.html 2017-01-16 01:35:05.000000000 +0000 @@ -46,54 +46,54 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "all_bvec2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "all_bvec2_frag.frag" - }, - "name": "all_bvec2_frag.test.html", + }, + "name": "all_bvec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "all_bvec2_vert_ref.vert", + "vertexShader": "all_bvec2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "all_bvec2_vert.vert", + "vertexShader": "all_bvec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "all_bvec2_vert.test.html", + }, + "name": "all_bvec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "all_bvec3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "all_bvec3_frag.frag" - }, - "name": "all_bvec3_frag.test.html", + }, + "name": "all_bvec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "all_bvec3_vert_ref.vert", + "vertexShader": "all_bvec3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "all_bvec3_vert.vert", + "vertexShader": "all_bvec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "all_bvec3_vert.test.html", + }, + "name": "all_bvec3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_bvec2_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_bvec2_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_bvec2_frag_ref.frag 2017-01-13 01:34:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_bvec2_frag_ref.frag 2017-01-16 01:35:05.000000000 +0000 @@ -31,10 +31,10 @@ bool _all(in bvec2 a) { bool temp = true; - + if(!a[0]) temp = false; if(!a[1]) temp = false; - + return temp; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_bvec2_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_bvec2_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_bvec2_vert_ref.vert 2017-01-13 01:34:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_bvec2_vert_ref.vert 2017-01-16 01:35:05.000000000 +0000 @@ -31,10 +31,10 @@ bool _all(in bvec2 a) { bool temp = true; - + if(!a[0]) temp = false; if(!a[1]) temp = false; - + return temp; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_bvec3_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_bvec3_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_bvec3_frag_ref.frag 2017-01-13 01:34:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_bvec3_frag_ref.frag 2017-01-16 01:35:05.000000000 +0000 @@ -31,11 +31,11 @@ bool _all(in bvec3 a) { bool temp = true; - + if(!a[0]) temp = false; if(!a[1]) temp = false; if(!a[2]) temp = false; - + return temp; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_bvec3_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_bvec3_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_bvec3_vert_ref.vert 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/all/all_bvec3_vert_ref.vert 2017-01-16 01:35:05.000000000 +0000 @@ -31,7 +31,7 @@ bool _all(in bvec3 a) { bool temp = true; - + if(!a[0]) temp = false; if(!a[1]) temp = false; if(!a[2]) temp = false; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_001_to_004.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_001_to_004.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_001_to_004.html 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_001_to_004.html 2017-01-16 01:35:05.000000000 +0000 @@ -46,54 +46,54 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "any_bvec2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "any_bvec2_frag.frag" - }, - "name": "any_bvec2_frag.test.html", + }, + "name": "any_bvec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "any_bvec2_vert_ref.vert", + "vertexShader": "any_bvec2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "any_bvec2_vert.vert", + "vertexShader": "any_bvec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "any_bvec2_vert.test.html", + }, + "name": "any_bvec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "any_bvec3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "any_bvec3_frag.frag" - }, - "name": "any_bvec3_frag.test.html", + }, + "name": "any_bvec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "any_bvec3_vert_ref.vert", + "vertexShader": "any_bvec3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "any_bvec3_vert.vert", + "vertexShader": "any_bvec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "any_bvec3_vert.test.html", + }, + "name": "any_bvec3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_bvec2_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_bvec2_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_bvec2_frag_ref.frag 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_bvec2_frag_ref.frag 2017-01-16 01:35:05.000000000 +0000 @@ -31,7 +31,7 @@ bool _any(in bvec2 a) { bool temp = false; - + if(a[0]) temp = true; if(a[1]) temp = true; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_bvec2_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_bvec2_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_bvec2_vert_ref.vert 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_bvec2_vert_ref.vert 2017-01-16 01:35:05.000000000 +0000 @@ -31,7 +31,7 @@ bool _any(in bvec2 a) { bool temp = false; - + if(a[0]) temp = true; if(a[1]) temp = true; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_bvec3_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_bvec3_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_bvec3_frag_ref.frag 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_bvec3_frag_ref.frag 2017-01-16 01:35:05.000000000 +0000 @@ -31,7 +31,7 @@ bool _any(in bvec3 a) { bool temp = false; - + if(a[0]) temp = true; if(a[1]) temp = true; if(a[2]) temp = true; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_bvec3_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_bvec3_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_bvec3_vert_ref.vert 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/any/any_bvec3_vert_ref.vert 2017-01-16 01:35:05.000000000 +0000 @@ -31,7 +31,7 @@ bool _any(in bvec3 a) { bool temp = false; - + if(a[0]) temp = true; if(a[1]) temp = true; if(a[2]) temp = true; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/array_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/array_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/array_001_to_006.html 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/array_001_to_006.html 2017-01-16 01:35:05.000000000 +0000 @@ -46,172 +46,172 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "new_mad2": { - "count": 2, - "type": "uniform1fv", + "count": 2, + "type": "uniform1fv", "value": [ - 45.0, + 45.0, 14.0 ] } - }, + }, "fragmentShader": "empty_uniform_array_float_frag.frag" - }, - "name": "empty_uniform_array_float_frag.test.html", + }, + "name": "empty_uniform_array_float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "empty_uniform_array_float_vert.vert", + "vertexShader": "empty_uniform_array_float_vert.vert", "uniforms": { "new_mad2": { - "count": 2, - "type": "uniform1fv", + "count": 2, + "type": "uniform1fv", "value": [ - 45.0, + 45.0, 14.0 ] } - }, + }, "fragmentShader": "../default/default.frag" - }, - "name": "empty_uniform_array_float_vert.test.html", + }, + "name": "empty_uniform_array_float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "empty_empty_array_float_frag.frag" - }, - "name": "empty_empty_array_float_frag.test.html", + }, + "name": "empty_empty_array_float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "empty_empty_array_float_vert.vert", + "vertexShader": "empty_empty_array_float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "empty_empty_array_float_vert.test.html", + }, + "name": "empty_empty_array_float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "initfunc_empty_array_float_frag.frag" - }, - "name": "initfunc_empty_array_float_frag.test.html", + }, + "name": "initfunc_empty_array_float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "initfunc_empty_array_float_vert.vert", + "vertexShader": "initfunc_empty_array_float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "initfunc_empty_array_float_vert.test.html", + }, + "name": "initfunc_empty_array_float_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/empty_empty_array_float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/empty_empty_array_float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/empty_empty_array_float_frag.frag 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/empty_empty_array_float_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -29,14 +29,14 @@ varying vec4 color; void main (void) -{ +{ int i=0; float new_mad[2]; float gray = 0.0; - + new_mad[0]=float(1); new_mad[1]=float(2); - + if( (new_mad[0] == 1.0) && (new_mad[1] == 2.0) ) gray=1.0; else gray=0.0; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/empty_empty_array_float_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/empty_empty_array_float_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/empty_empty_array_float_vert.vert 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/empty_empty_array_float_vert.vert 2017-01-16 01:35:05.000000000 +0000 @@ -35,7 +35,7 @@ new_mad[0]=float(1); new_mad[1]=float(2); - + if( (new_mad[0] == 1.0) && (new_mad[1] == 2.0) ) gray=1.0; else gray=0.0; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/empty_uniform_array_float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/empty_uniform_array_float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/empty_uniform_array_float_frag.frag 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/empty_uniform_array_float_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -34,12 +34,12 @@ int i=0; float new_mad[2]; float gray = 0.0; - + new_mad[0]=new_mad2[0]; new_mad[1]=new_mad2[1]; - + if( (new_mad[0] == 45.0) && (new_mad[1] == 14.0) ) gray=1.0; else gray=0.0; - gl_FragColor = vec4(gray, gray, gray, 1.0); + gl_FragColor = vec4(gray, gray, gray, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/initfunc_empty_array_float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/initfunc_empty_array_float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/initfunc_empty_array_float_frag.frag 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/array/initfunc_empty_array_float_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -39,12 +39,12 @@ if( (new_mad[0] == 25.0) && (new_mad[1] == 25.0) ) gray=1.0; else gray=0.0; - gl_FragColor = vec4(gray, gray, gray, 1.0); + gl_FragColor = vec4(gray, gray, gray, 1.0); } void initialise_array(out float array[2], float init_val) { int i=0; - array[0] = init_val; - array[1] = init_val; + array[0] = init_val; + array[1] = init_val; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/asin/asin_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/asin/asin_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/asin/asin_001_to_006.html 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/asin/asin_001_to_006.html 2017-01-16 01:35:05.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "asin_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "asin_float_frag_xvary.frag" - }, - "name": "asin_float_frag_xvary.test.html", + }, + "name": "asin_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "asin_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "asin_vec2_frag_xvary.frag" - }, - "name": "asin_vec2_frag_xvary.test.html", + }, + "name": "asin_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "asin_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "asin_vec3_frag_xvary.frag" - }, - "name": "asin_vec3_frag_xvary.test.html", + }, + "name": "asin_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "asin_float_vert_xvary_ref.vert", + "vertexShader": "asin_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "asin_float_vert_xvary.vert", + "vertexShader": "asin_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "asin_float_vert_xvary.test.html", + }, + "name": "asin_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "asin_vec2_vert_xvary_ref.vert", + "vertexShader": "asin_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "asin_vec2_vert_xvary.vert", + "vertexShader": "asin_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "asin_vec2_vert_xvary.test.html", + }, + "name": "asin_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "asin_vec3_vert_xvary_ref.vert", + "vertexShader": "asin_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "asin_vec3_vert_xvary.vert", + "vertexShader": "asin_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "asin_vec3_vert_xvary.test.html", + }, + "name": "asin_vec3_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/asin/asin_float_frag_xvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/asin/asin_float_frag_xvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/asin/asin_float_frag_xvary_ref.frag 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/asin/asin_float_frag_xvary_ref.frag 2017-01-16 01:35:05.000000000 +0000 @@ -62,15 +62,15 @@ asinValues[14] = 0.848062; asinValues[15] = 1.06544; asinValues[16] = 1.5708; - + const float M_PI = 3.14159265358979323846; float c = 2.0 * (color.r - 0.5); - + float arrVal = (c + 1.0) * 8.0; int arr0 = int(floor(arrVal)); float weight = arrVal - floor(arrVal); float asin_c = 0.0; - + if (arr0 == 0) asin_c = lerp(asinValues[0], asinValues[1], weight); else if (arr0 == 1) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/asin/asin_vec2_frag_xvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/asin/asin_vec2_frag_xvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/asin/asin_vec2_frag_xvary_ref.frag 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/asin/asin_vec2_frag_xvary_ref.frag 2017-01-16 01:35:05.000000000 +0000 @@ -62,10 +62,10 @@ asinValues[14] = 0.848062; asinValues[15] = 1.06544; asinValues[16] = 1.5708; - + const float M_PI = 3.14159265358979323846; vec2 c = 2.0 * (color.rg - 0.5); - + vec2 arrVal = (c + vec2(1.0, 1.0)) * 8.0; int arr0x = int(floor(arrVal.x)); int arr0y = int(floor(arrVal.y)); @@ -106,7 +106,7 @@ asin_c.x = lerp(asinValues[15], asinValues[16], weight.x); else if (arr0x == 16) asin_c.x = asinValues[16]; - + if (arr0y == 0) asin_c.y = lerp(asinValues[0], asinValues[1], weight.y); else if (arr0y == 1) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/asin/asin_vec3_frag_xvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/asin/asin_vec3_frag_xvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/asin/asin_vec3_frag_xvary_ref.frag 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/asin/asin_vec3_frag_xvary_ref.frag 2017-01-16 01:35:05.000000000 +0000 @@ -62,10 +62,10 @@ asinValues[14] = 0.848062; asinValues[15] = 1.06544; asinValues[16] = 1.5708; - + const float M_PI = 3.14159265358979323846; vec3 c = 2.0 * (color.rgb - 0.5); - + vec3 arrVal = (c + vec3(1.0, 1.0, 1.0)) * 8.0; int arr0x = int(floor(arrVal.x)); int arr0y = int(floor(arrVal.y)); @@ -107,7 +107,7 @@ asin_c.x = lerp(asinValues[15], asinValues[16], weight.x); else if (arr0x == 16) asin_c.x = asinValues[16]; - + if (arr0y == 0) asin_c.y = lerp(asinValues[0], asinValues[1], weight.y); else if (arr0y == 1) @@ -142,7 +142,7 @@ asin_c.y = lerp(asinValues[15], asinValues[16], weight.y); else if (arr0y == 16) asin_c.y = asinValues[16]; - + if (arr0z == 0) asin_c.z = lerp(asinValues[0], asinValues[1], weight.z); else if (arr0z == 1) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_001_to_008.html 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_001_to_008.html 2017-01-16 01:35:05.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "atan_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "atan_float_frag_xvary.frag" - }, - "name": "atan_float_frag_xvary.test.html", + }, + "name": "atan_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "atan_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "atan_vec2_frag_xvary.frag" - }, - "name": "atan_vec2_frag_xvary.test.html", + }, + "name": "atan_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "atan_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "atan_vec3_frag_xvary.frag" - }, - "name": "atan_vec3_frag_xvary.test.html", + }, + "name": "atan_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "atan_float_frag_xvaryyvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "atan_float_frag_xvaryyvary.frag" - }, - "name": "atan_float_frag_xvaryyvary.test.html", + }, + "name": "atan_float_frag_xvaryyvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "atan_vec2_frag_xvaryyvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "atan_vec2_frag_xvaryyvary.frag" - }, - "name": "atan_vec2_frag_xvaryyvary.test.html", + }, + "name": "atan_vec2_frag_xvaryyvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "atan_vec3_frag_xvaryyvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "atan_vec3_frag_xvaryyvary.frag" - }, - "name": "atan_vec3_frag_xvaryyvary.test.html", + }, + "name": "atan_vec3_frag_xvaryyvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "atan_float_vert_xvary_ref.vert", + "vertexShader": "atan_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "atan_float_vert_xvary.vert", + "vertexShader": "atan_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "atan_float_vert_xvary.test.html", + }, + "name": "atan_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "atan_vec2_vert_xvary_ref.vert", + "vertexShader": "atan_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "atan_vec2_vert_xvary.vert", + "vertexShader": "atan_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "atan_vec2_vert_xvary.test.html", + }, + "name": "atan_vec2_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_009_to_012.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_009_to_012.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_009_to_012.html 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_009_to_012.html 2017-01-16 01:35:05.000000000 +0000 @@ -46,54 +46,54 @@ "tests": [ { "referenceProgram": { - "vertexShader": "atan_vec3_vert_xvary_ref.vert", + "vertexShader": "atan_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "atan_vec3_vert_xvary.vert", + "vertexShader": "atan_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "atan_vec3_vert_xvary.test.html", + }, + "name": "atan_vec3_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "atan_float_vert_xvaryyvary_ref.vert", + "vertexShader": "atan_float_vert_xvaryyvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "atan_float_vert_xvaryyvary.vert", + "vertexShader": "atan_float_vert_xvaryyvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "atan_float_vert_xvaryyvary.test.html", + }, + "name": "atan_float_vert_xvaryyvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "atan_vec2_vert_xvaryyvary_ref.vert", + "vertexShader": "atan_vec2_vert_xvaryyvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "atan_vec2_vert_xvaryyvary.vert", + "vertexShader": "atan_vec2_vert_xvaryyvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "atan_vec2_vert_xvaryyvary.test.html", + }, + "name": "atan_vec2_vert_xvaryyvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "atan_vec3_vert_xvaryyvary_ref.vert", + "vertexShader": "atan_vec3_vert_xvaryyvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "atan_vec3_vert_xvaryyvary.vert", + "vertexShader": "atan_vec3_vert_xvaryyvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "atan_vec3_vert_xvaryyvary.test.html", + }, + "name": "atan_vec3_vert_xvaryyvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_float_frag_xvaryyvary.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_float_frag_xvaryyvary.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_float_frag_xvaryyvary.frag 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_float_frag_xvaryyvary.frag 2017-01-16 01:35:05.000000000 +0000 @@ -39,7 +39,7 @@ float y = 2.0 * (color.b - 0.5); const float epsilon = 1.0e-4; gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); - + // Avoid evaluating atan(0, x) for x < epsilon because it's implementation-dependent if(x > epsilon || abs(y) > epsilon) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_float_frag_xvaryyvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_float_frag_xvaryyvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_float_frag_xvaryyvary_ref.frag 2017-01-13 01:34:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_float_frag_xvaryyvary_ref.frag 2017-01-16 01:35:05.000000000 +0000 @@ -42,7 +42,7 @@ float sign = 1.0; vec4 result = vec4(0.0, 0.0, 0.0, 1.0); const float epsilon = 1.0e-4; - + // Avoid evaluating atan(0, x) for x < epsilon because it's implementation-dependent if(x > epsilon || abs(y) > epsilon) { @@ -82,7 +82,7 @@ if(y < 0.0) result.r -= 0.5; else if(y > 0.0) result.r += 0.5; } - + gl_FragColor = result; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_float_vert_xvaryyvary_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_float_vert_xvaryyvary_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_float_vert_xvaryyvary_ref.vert 2017-01-13 01:34:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_float_vert_xvaryyvary_ref.vert 2017-01-16 01:35:05.000000000 +0000 @@ -78,7 +78,7 @@ if(y < 0.0) result.r -= 0.5; else if(y > 0.0) result.r += 0.5; } - + color = result; gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_float_vert_xvaryyvary.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_float_vert_xvaryyvary.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_float_vert_xvaryyvary.vert 2017-01-13 01:34:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_float_vert_xvaryyvary.vert 2017-01-16 01:35:05.000000000 +0000 @@ -35,12 +35,12 @@ float y = 2.0 * (gtf_Color.b - 0.5); const float epsilon = 1.0e-4; color = vec4(0.0, 0.0, 0.0, 1.0); - + // Avoid evaluating atan(0, x) for x < epsilon because it's implementation-dependent if(x > epsilon || abs(y) > epsilon) { color = vec4(atan(y, x) / (2.0 * M_PI) + 0.5, 0.0, 0.0, 1.0); } - + gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_frag_xvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_frag_xvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_frag_xvary_ref.frag 2017-01-13 01:34:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_frag_xvary_ref.frag 2017-01-16 01:35:05.000000000 +0000 @@ -36,7 +36,7 @@ vec2 scale = vec2(1.0); vec2 sign = vec2(1.0); vec4 result = vec4(0.0, 0.0, 0.0, 1.0); - + if(c[0] < 0.0) { sign[0] = -1.0; @@ -81,8 +81,8 @@ result[0] = sign[0] * (M_PI / 2.0 - atan_c[0]) / M_PI + 0.5; } - - + + if(c[1] < 0.0) { sign[1] = -1.0; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_frag_xvaryyvary.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_frag_xvaryyvary.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_frag_xvaryyvary.frag 2017-01-13 01:34:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_frag_xvaryyvary.frag 2017-01-16 01:35:05.000000000 +0000 @@ -35,7 +35,7 @@ vec2 y = 2.0 * (color.bb - 0.5); const float epsilon = 1.0e-4; gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); - + // Avoid evaluating atan(0, x) for x < epsilon because it's implementation-dependent if(x[0] > epsilon || abs(y[0]) > epsilon) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_frag_xvaryyvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_frag_xvaryyvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_frag_xvaryyvary_ref.frag 2017-01-13 01:34:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_frag_xvaryyvary_ref.frag 2017-01-16 01:35:05.000000000 +0000 @@ -92,10 +92,10 @@ if(y[0] < 0.0) result[0] -= 0.5; else if(y[0] > 0.0) result[0] += 0.5; } - + if(x[1] > epsilon || abs(y[1]) > epsilon) { - + if(x[1] < 0.0 ^^ y[1] < 0.0) { sign[1] = -1.0; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_vert_xvary_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_vert_xvary_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_vert_xvary_ref.vert 2017-01-13 01:34:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_vert_xvary_ref.vert 2017-01-16 01:35:05.000000000 +0000 @@ -81,7 +81,7 @@ result[0] = sign[0] * (M_PI / 2.0 - atan_c[0]) / M_PI + 0.5; } - + if(c[1] < 0.0) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_vert_xvaryyvary_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_vert_xvaryyvary_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_vert_xvaryyvary_ref.vert 2017-01-13 01:34:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_vert_xvaryyvary_ref.vert 2017-01-16 01:35:05.000000000 +0000 @@ -92,7 +92,7 @@ if(y[0] < 0.0) result[0] -= 0.5; else if(y[0] > 0.0) result[0] += 0.5; } - + if(x[1] > epsilon || abs(y[1]) > epsilon) { if(x[1] < 0.0 ^^ y[1] < 0.0) @@ -144,7 +144,7 @@ if(y[1] < 0.0) result[1] -= 0.5; else if(y[1] > 0.0) result[1] += 0.5; } - + color = result; gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_vert_xvaryyvary.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_vert_xvaryyvary.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_vert_xvaryyvary.vert 2017-01-13 01:34:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec2_vert_xvaryyvary.vert 2017-01-16 01:35:05.000000000 +0000 @@ -35,7 +35,7 @@ vec2 y = 2.0 * (gtf_Color.bb - 0.5); const float epsilon = 1.0e-4; color = vec4(0.0, 0.0, 0.0, 1.0); - + // Avoid evaluating atan(0, x) for x < epsilon because it's implementation-dependent if(x[0] > epsilon || abs(y[0]) > epsilon) { @@ -46,6 +46,6 @@ { color[1] = atan(y[1], x[1]) / (2.0 * M_PI) + 0.5; } - + gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_frag_xvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_frag_xvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_frag_xvary_ref.frag 2017-01-13 01:34:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_frag_xvary_ref.frag 2017-01-16 01:35:05.000000000 +0000 @@ -37,7 +37,7 @@ vec3 sign = vec3(1.0); vec4 result = vec4(0.0, 0.0, 0.0, 1.0); - + if(c[0] < 0.0) { sign[0] = -1.0; @@ -82,7 +82,7 @@ result[0] = sign[0] * (M_PI / 2.0 - atan_c[0]) / M_PI + 0.5; } - + if(c[1] < 0.0) { sign[1] = -1.0; @@ -127,8 +127,8 @@ result[1] = sign[1] * (M_PI / 2.0 - atan_c[1]) / M_PI + 0.5; } - - + + if(c[2] < 0.0) { sign[2] = -1.0; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_frag_xvaryyvary.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_frag_xvaryyvary.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_frag_xvaryyvary.frag 2017-01-13 01:34:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_frag_xvaryyvary.frag 2017-01-16 01:35:05.000000000 +0000 @@ -35,7 +35,7 @@ vec3 y = 2.0 * (color.bbb - 0.5); const float epsilon = 1.0e-4; gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); - + // Avoid evaluating atan(0, x) for x < epsilon because it's implementation-dependent if(x[0] > epsilon || abs(y[0]) > epsilon) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_frag_xvaryyvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_frag_xvaryyvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_frag_xvaryyvary_ref.frag 2017-01-13 01:34:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_frag_xvaryyvary_ref.frag 2017-01-16 01:35:05.000000000 +0000 @@ -39,7 +39,7 @@ vec3 sign = vec3(1.0); vec4 result = vec4(0.0, 0.0, 0.0, 1.0); const float epsilon = 1.0e-4; - + // Avoid evaluating atan(0, x) for x < epsilon because it's implementation-dependent if(x[0] > epsilon || abs(y[0]) > epsilon) { @@ -92,10 +92,10 @@ if(y[0] < 0.0) result[0] -= 0.5; else if(y[0] > 0.0) result[0] += 0.5; } - + if(x[1] > epsilon || abs(y[1]) > epsilon) { - + if(x[1] < 0.0 ^^ y[1] < 0.0) { sign[1] = -1.0; @@ -123,7 +123,7 @@ else { c[1] = abs(x[1] / y[1]); - + // Taylors series expansion for atan atan_c[1] += scale[1] * pow(c[1], float(1)) / float(1); scale[1] *= -1.0; @@ -145,10 +145,10 @@ if(y[1] < 0.0) result[1] -= 0.5; else if(y[1] > 0.0) result[1] += 0.5; } - + if(x[2] > epsilon || abs(y[2]) > epsilon) { - + if(x[2] < 0.0 ^^ y[2] < 0.0) { sign[2] = -1.0; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_vert_xvary_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_vert_xvary_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_vert_xvary_ref.vert 2017-01-13 01:34:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_vert_xvary_ref.vert 2017-01-16 01:35:05.000000000 +0000 @@ -81,7 +81,7 @@ result[0] = sign[0] * (M_PI / 2.0 - atan_c[0]) / M_PI + 0.5; } - + if(c[1] < 0.0) { @@ -127,7 +127,7 @@ result[1] = sign[1] * (M_PI / 2.0 - atan_c[1]) / M_PI + 0.5; } - + if(c[2] < 0.0) { sign[2] = -1.0; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_vert_xvaryyvary_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_vert_xvaryyvary_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_vert_xvaryyvary_ref.vert 2017-01-13 01:34:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_vert_xvaryyvary_ref.vert 2017-01-16 01:35:05.000000000 +0000 @@ -92,7 +92,7 @@ if(y[0] < 0.0) result[0] -= 0.5; else if(y[0] > 0.0) result[0] += 0.5; } - + if(x[1] > epsilon || abs(y[1]) > epsilon) { if(x[1] < 0.0 ^^ y[1] < 0.0) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_vert_xvaryyvary.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_vert_xvaryyvary.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_vert_xvaryyvary.vert 2017-01-13 01:34:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/atan/atan_vec3_vert_xvaryyvary.vert 2017-01-16 01:35:05.000000000 +0000 @@ -35,7 +35,7 @@ vec3 y = 2.0 * (gtf_Color.bbb - 0.5); const float epsilon = 1.0e-4; color = vec4(0.0, 0.0, 0.0, 1.0); - + // Avoid evaluating atan(0, x) for x < epsilon because it's implementation-dependent if(x[0] > epsilon || abs(y[0]) > epsilon) { @@ -51,6 +51,6 @@ { color[2] = atan(y[2], x[2]) / (2.0 * M_PI) + 0.5; } - + gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/biConstants/biConstants_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/biConstants/biConstants_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/biConstants/biConstants_001_to_008.html 2017-01-13 01:34:53.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/biConstants/biConstants_001_to_008.html 2017-01-16 01:35:05.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "gl_MaxCombinedTextureImageUnits_frag.frag" - }, - "name": "gl_MaxCombinedTextureImageUnits_frag.test.html", + }, + "name": "gl_MaxCombinedTextureImageUnits_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "gl_MaxCombinedTextureImageUnits_vert.vert", + "vertexShader": "gl_MaxCombinedTextureImageUnits_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "gl_MaxCombinedTextureImageUnits_vert.test.html", + }, + "name": "gl_MaxCombinedTextureImageUnits_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "gl_MaxDrawBuffers_frag.frag" - }, - "name": "gl_MaxDrawBuffers_frag.test.html", + }, + "name": "gl_MaxDrawBuffers_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "gl_MaxDrawBuffers_vert.vert", + "vertexShader": "gl_MaxDrawBuffers_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "gl_MaxDrawBuffers_vert.test.html", + }, + "name": "gl_MaxDrawBuffers_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "gl_MaxFragmentUniformVectors_frag.frag" - }, - "name": "gl_MaxFragmentUniformVectors_frag.test.html", + }, + "name": "gl_MaxFragmentUniformVectors_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "gl_MaxFragmentUniformVectors_vert.vert", + "vertexShader": "gl_MaxFragmentUniformVectors_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "gl_MaxFragmentUniformVectors_vert.test.html", + }, + "name": "gl_MaxFragmentUniformVectors_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "gl_MaxTextureImageUnits_frag.frag" - }, - "name": "gl_MaxTextureImageUnits_frag.test.html", + }, + "name": "gl_MaxTextureImageUnits_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "gl_MaxTextureImageUnits_vert.vert", + "vertexShader": "gl_MaxTextureImageUnits_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "gl_MaxTextureImageUnits_vert.test.html", + }, + "name": "gl_MaxTextureImageUnits_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/biConstants/biConstants_009_to_016.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/biConstants/biConstants_009_to_016.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/biConstants/biConstants_009_to_016.html 2017-01-13 01:34:53.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/biConstants/biConstants_009_to_016.html 2017-01-16 01:35:05.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "gl_MaxVaryingVectors_frag.frag" - }, - "name": "gl_MaxVaryingVectors_frag.test.html", + }, + "name": "gl_MaxVaryingVectors_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "gl_MaxVaryingVectors_vert.vert", + "vertexShader": "gl_MaxVaryingVectors_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "gl_MaxVaryingVectors_vert.test.html", + }, + "name": "gl_MaxVaryingVectors_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "gl_MaxVertexAttribs_frag.frag" - }, - "name": "gl_MaxVertexAttribs_frag.test.html", + }, + "name": "gl_MaxVertexAttribs_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "gl_MaxVertexAttribs_vert.vert", + "vertexShader": "gl_MaxVertexAttribs_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "gl_MaxVertexAttribs_vert.test.html", + }, + "name": "gl_MaxVertexAttribs_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "gl_MaxVertexTextureImageUnits_frag.frag" - }, - "name": "gl_MaxVertexTextureImageUnits_frag.test.html", + }, + "name": "gl_MaxVertexTextureImageUnits_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "gl_MaxVertexTextureImageUnits_vert.vert", + "vertexShader": "gl_MaxVertexTextureImageUnits_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "gl_MaxVertexTextureImageUnits_vert.test.html", + }, + "name": "gl_MaxVertexTextureImageUnits_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "gl_MaxVertexUniformVectors_frag.frag" - }, - "name": "gl_MaxVertexUniformVectors_frag.test.html", + }, + "name": "gl_MaxVertexUniformVectors_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "gl_MaxVertexUniformVectors_vert.vert", + "vertexShader": "gl_MaxVertexUniformVectors_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "gl_MaxVertexUniformVectors_vert.test.html", + }, + "name": "gl_MaxVertexUniformVectors_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/array3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/array3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/array3_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/array3_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -29,5 +29,5 @@ void main() { int array1[2], array2[2]; - bool b = array1 == array2; // equality operator does not work on arrays but works on array elements + bool b = array1 == array2; // equality operator does not work on arrays but works on array elements } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_001_to_008.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_001_to_008.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectBuiltInOveride_frag.frag" - }, - "name": "CorrectBuiltInOveride_frag.test.html", - "linkstat": true, + }, + "name": "CorrectBuiltInOveride_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectComma_frag.frag" - }, - "name": "CorrectComma_frag.test.html", - "linkstat": true, + }, + "name": "CorrectComma_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "CorrectConstFolding1_vert.vert", + "vertexShader": "CorrectConstFolding1_vert.vert", "fragmentShader": "default.frag" - }, - "name": "CorrectConstFolding1_vert.test.html", - "linkstat": true, + }, + "name": "CorrectConstFolding1_vert.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "CorrectConstFolding2_vert.vert", + "vertexShader": "CorrectConstFolding2_vert.vert", "fragmentShader": "default.frag" - }, - "name": "CorrectConstFolding2_vert.test.html", - "linkstat": true, + }, + "name": "CorrectConstFolding2_vert.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "CorrectConstruct_vert.vert", + "vertexShader": "CorrectConstruct_vert.vert", "fragmentShader": "default.frag" - }, - "name": "CorrectConstruct_vert.test.html", - "linkstat": true, + }, + "name": "CorrectConstruct_vert.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectExtension10_V100_frag.frag" - }, - "name": "CorrectExtension10_V100_frag.test.html", - "linkstat": true, + }, + "name": "CorrectExtension10_V100_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectExtension1_V100_frag.frag" - }, - "name": "CorrectExtension1_V100_frag.test.html", - "linkstat": true, + }, + "name": "CorrectExtension1_V100_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectExtension4_V100_frag.frag" - }, - "name": "CorrectExtension4_V100_frag.test.html", - "linkstat": true, + }, + "name": "CorrectExtension4_V100_frag.test.html", + "linkstat": true, "compstat": true } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_009_to_016.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_009_to_016.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_009_to_016.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_009_to_016.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "CorrectFull_vert.vert", + "vertexShader": "CorrectFull_vert.vert", "fragmentShader": "default.frag" - }, - "name": "CorrectFull_vert.test.html", - "linkstat": true, + }, + "name": "CorrectFull_vert.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectFuncOverload_frag.frag" - }, - "name": "CorrectFuncOverload_frag.test.html", - "linkstat": true, + }, + "name": "CorrectFuncOverload_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "CorrectFuncOverload_vert.vert", + "vertexShader": "CorrectFuncOverload_vert.vert", "fragmentShader": "default.frag" - }, - "name": "CorrectFuncOverload_vert.test.html", - "linkstat": true, + }, + "name": "CorrectFuncOverload_vert.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "CorrectFunction1_vert.vert", + "vertexShader": "CorrectFunction1_vert.vert", "fragmentShader": "default.frag" - }, - "name": "CorrectFunction1_vert.test.html", - "linkstat": true, + }, + "name": "CorrectFunction1_vert.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectModule_frag.frag" - }, - "name": "CorrectModule_frag.test.html", - "linkstat": true, + }, + "name": "CorrectModule_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectParse1_frag.frag" - }, - "name": "CorrectParse1_frag.test.html", - "linkstat": true, + }, + "name": "CorrectParse1_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectParse2_frag.frag" - }, - "name": "CorrectParse2_frag.test.html", - "linkstat": true, + }, + "name": "CorrectParse2_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "CorrectParse2_vert.vert", + "vertexShader": "CorrectParse2_vert.vert", "fragmentShader": "default.frag" - }, - "name": "CorrectParse2_vert.test.html", - "linkstat": true, + }, + "name": "CorrectParse2_vert.test.html", + "linkstat": true, "compstat": true } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_017_to_024.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_017_to_024.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_017_to_024.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_017_to_024.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectParseTest1_frag.frag" - }, - "name": "CorrectParseTest1_frag.test.html", - "linkstat": true, + }, + "name": "CorrectParseTest1_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectParseTest_frag.frag" - }, - "name": "CorrectParseTest_frag.test.html", - "linkstat": true, + }, + "name": "CorrectParseTest_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectPreprocess5_frag.frag" - }, - "name": "CorrectPreprocess5_frag.test.html", - "linkstat": true, + }, + "name": "CorrectPreprocess5_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectPreprocess8_frag.frag" - }, - "name": "CorrectPreprocess8_frag.test.html", - "linkstat": true, + }, + "name": "CorrectPreprocess8_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectPreprocess9_frag.frag" - }, - "name": "CorrectPreprocess9_frag.test.html", - "linkstat": true, + }, + "name": "CorrectPreprocess9_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectSwizzle1_frag.frag" - }, - "name": "CorrectSwizzle1_frag.test.html", - "linkstat": true, + }, + "name": "CorrectSwizzle1_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "CorrectSwizzle1_vert.vert", + "vertexShader": "CorrectSwizzle1_vert.vert", "fragmentShader": "default.frag" - }, - "name": "CorrectSwizzle1_vert.test.html", - "linkstat": true, + }, + "name": "CorrectSwizzle1_vert.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectSwizzle2_frag.frag" - }, - "name": "CorrectSwizzle2_frag.test.html", - "linkstat": true, + }, + "name": "CorrectSwizzle2_frag.test.html", + "linkstat": true, "compstat": true } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_025_to_032.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_025_to_032.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_025_to_032.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_025_to_032.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "CorrectSwizzle2_vert.vert", + "vertexShader": "CorrectSwizzle2_vert.vert", "fragmentShader": "default.frag" - }, - "name": "CorrectSwizzle2_vert.test.html", - "linkstat": true, + }, + "name": "CorrectSwizzle2_vert.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectSwizzle3_frag.frag" - }, - "name": "CorrectSwizzle3_frag.test.html", - "linkstat": true, + }, + "name": "CorrectSwizzle3_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "DuplicateVersion1_V100_frag.frag" - }, - "name": "DuplicateVersion1_V100_frag.test.html", - "linkstat": false, + }, + "name": "DuplicateVersion1_V100_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "CorrectVersion_V100_frag.frag" - }, - "name": "CorrectVersion_V100_frag.test.html", - "linkstat": true, + }, + "name": "CorrectVersion_V100_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "FunctionParam_vert.vert", + "vertexShader": "FunctionParam_vert.vert", "fragmentShader": "default.frag" - }, - "name": "FunctionParam_vert.test.html", - "linkstat": false, + }, + "name": "FunctionParam_vert.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ParseTest3_frag.frag" - }, - "name": "ParseTest3_frag.test.html", - "linkstat": false, + }, + "name": "ParseTest3_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ParseTest4_frag.frag" - }, - "name": "ParseTest4_frag.test.html", - "linkstat": false, + }, + "name": "ParseTest4_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "array10_frag.frag" - }, - "name": "array10_frag.test.html", - "linkstat": false, + }, + "name": "array10_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_033_to_040.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_033_to_040.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_033_to_040.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_033_to_040.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "array11_frag.frag" - }, - "name": "array11_frag.test.html", - "linkstat": false, + }, + "name": "array11_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "array1_frag.frag" - }, - "name": "array1_frag.test.html", - "linkstat": false, + }, + "name": "array1_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "array2_frag.frag" - }, - "name": "array2_frag.test.html", - "linkstat": false, + }, + "name": "array2_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "array3_frag.frag" - }, - "name": "array3_frag.test.html", - "linkstat": false, + }, + "name": "array3_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "array4_frag.frag" - }, - "name": "array4_frag.test.html", - "linkstat": false, + }, + "name": "array4_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "array5_frag.frag" - }, - "name": "array5_frag.test.html", - "linkstat": false, + }, + "name": "array5_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "array6_frag.frag" - }, - "name": "array6_frag.test.html", - "linkstat": false, + }, + "name": "array6_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "array7_frag.frag" - }, - "name": "array7_frag.test.html", - "linkstat": false, + }, + "name": "array7_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_041_to_048.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_041_to_048.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_041_to_048.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_041_to_048.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "array8_frag.frag" - }, - "name": "array8_frag.test.html", - "linkstat": false, + }, + "name": "array8_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "array9_frag.frag" - }, - "name": "array9_frag.test.html", - "linkstat": false, + }, + "name": "array9_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "attribute1_vert.vert", + "vertexShader": "attribute1_vert.vert", "fragmentShader": "default.frag" - }, - "name": "attribute1_vert.test.html", - "linkstat": false, + }, + "name": "attribute1_vert.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "attribute2_vert.vert", + "vertexShader": "attribute2_vert.vert", "fragmentShader": "default.frag" - }, - "name": "attribute2_vert.test.html", - "linkstat": false, + }, + "name": "attribute2_vert.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "attribute_frag.frag" - }, - "name": "attribute_frag.test.html", - "linkstat": false, + }, + "name": "attribute_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "attribute_vert.vert", + "vertexShader": "attribute_vert.vert", "fragmentShader": "default.frag" - }, - "name": "attribute_vert.test.html", - "linkstat": false, + }, + "name": "attribute_vert.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "break_frag.frag" - }, - "name": "break_frag.test.html", - "linkstat": false, + }, + "name": "break_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "comma1_vert.vert", + "vertexShader": "comma1_vert.vert", "fragmentShader": "default.frag" - }, - "name": "comma1_vert.test.html", - "linkstat": false, + }, + "name": "comma1_vert.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_049_to_056.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_049_to_056.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_049_to_056.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_049_to_056.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "comma2_frag.frag" - }, - "name": "comma2_frag.test.html", - "linkstat": false, + }, + "name": "comma2_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "comma2_vert.vert", + "vertexShader": "comma2_vert.vert", "fragmentShader": "default.frag" - }, - "name": "comma2_vert.test.html", - "linkstat": false, + }, + "name": "comma2_vert.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "comma3_vert.vert", + "vertexShader": "comma3_vert.vert", "fragmentShader": "default.frag" - }, - "name": "comma3_vert.test.html", - "linkstat": false, + }, + "name": "comma3_vert.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "comment_frag.frag" - }, - "name": "comment_frag.test.html", - "linkstat": false, + }, + "name": "comment_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "conditional1_frag.frag" - }, - "name": "conditional1_frag.test.html", - "linkstat": false, + }, + "name": "conditional1_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "conditional2_frag.frag" - }, - "name": "conditional2_frag.test.html", - "linkstat": false, + }, + "name": "conditional2_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "conditional3_frag.frag" - }, - "name": "conditional3_frag.test.html", - "linkstat": false, + }, + "name": "conditional3_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "constFunc_frag.frag" - }, - "name": "constFunc_frag.test.html", - "linkstat": false, + }, + "name": "constFunc_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_057_to_064.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_057_to_064.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_057_to_064.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_057_to_064.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "constructor1_frag.frag" - }, - "name": "constructor1_frag.test.html", - "linkstat": false, + }, + "name": "constructor1_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "constructor2_frag.frag" - }, - "name": "constructor2_frag.test.html", - "linkstat": false, + }, + "name": "constructor2_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "constructor3_V100_frag.frag" - }, - "name": "constructor3_V100_frag.test.html", - "linkstat": false, + }, + "name": "constructor3_V100_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "continue_frag.frag" - }, - "name": "continue_frag.test.html", - "linkstat": false, + }, + "name": "continue_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dataType10_frag.frag" - }, - "name": "dataType10_frag.test.html", - "linkstat": false, + }, + "name": "dataType10_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dataType11_frag.frag" - }, - "name": "dataType11_frag.test.html", - "linkstat": false, + }, + "name": "dataType11_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dataType12_frag.frag" - }, - "name": "dataType12_frag.test.html", - "linkstat": false, + }, + "name": "dataType12_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dataType13_frag.frag" - }, - "name": "dataType13_frag.test.html", - "linkstat": false, + }, + "name": "dataType13_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_065_to_072.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_065_to_072.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_065_to_072.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_065_to_072.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dataType19_frag.frag" - }, - "name": "dataType19_frag.test.html", - "linkstat": false, + }, + "name": "dataType19_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dataType1_frag.frag" - }, - "name": "dataType1_frag.test.html", - "linkstat": false, + }, + "name": "dataType1_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dataType2_frag.frag" - }, - "name": "dataType2_frag.test.html", - "linkstat": false, + }, + "name": "dataType2_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dataType3_frag.frag" - }, - "name": "dataType3_frag.test.html", - "linkstat": false, + }, + "name": "dataType3_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dataType4_frag.frag" - }, - "name": "dataType4_frag.test.html", - "linkstat": false, + }, + "name": "dataType4_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dataType5_frag.frag" - }, - "name": "dataType5_frag.test.html", - "linkstat": false, + }, + "name": "dataType5_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dataType6_frag.frag" - }, - "name": "dataType6_frag.test.html", - "linkstat": false, + }, + "name": "dataType6_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dataType7_frag.frag" - }, - "name": "dataType7_frag.test.html", - "linkstat": false, + }, + "name": "dataType7_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_073_to_080.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_073_to_080.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_073_to_080.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_073_to_080.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dataType8_frag.frag" - }, - "name": "dataType8_frag.test.html", - "linkstat": false, + }, + "name": "dataType8_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dataType9_frag.frag" - }, - "name": "dataType9_frag.test.html", - "linkstat": false, + }, + "name": "dataType9_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dowhile_frag.frag" - }, - "name": "dowhile_frag.test.html", - "linkstat": false, + }, + "name": "dowhile_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dvec2_frag.frag" - }, - "name": "dvec2_frag.test.html", - "linkstat": false, + }, + "name": "dvec2_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dvec3_frag.frag" - }, - "name": "dvec3_frag.test.html", - "linkstat": false, + }, + "name": "dvec3_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dvec4_frag.frag" - }, - "name": "dvec4_frag.test.html", - "linkstat": false, + }, + "name": "dvec4_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "extension2_V100_frag.frag" - }, - "name": "extension2_V100_frag.test.html", - "linkstat": false, + }, + "name": "extension2_V100_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "extension3_V100_frag.frag" - }, - "name": "extension3_V100_frag.test.html", - "linkstat": false, + }, + "name": "extension3_V100_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_081_to_088.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_081_to_088.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_081_to_088.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_081_to_088.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "extension5_V100_frag.frag" - }, - "name": "extension5_V100_frag.test.html", - "linkstat": false, + }, + "name": "extension5_V100_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "extension6_V100_frag.frag" - }, - "name": "extension6_V100_frag.test.html", - "linkstat": false, + }, + "name": "extension6_V100_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "extension7_V100_frag.frag" - }, - "name": "extension7_V100_frag.test.html", - "linkstat": false, + }, + "name": "extension7_V100_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "extension8_V100_frag.frag" - }, - "name": "extension8_V100_frag.test.html", - "linkstat": false, + }, + "name": "extension8_V100_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "extension9_V100_frag.frag" - }, - "name": "extension9_V100_frag.test.html", - "linkstat": false, + }, + "name": "extension9_V100_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "float2_frag.frag" - }, - "name": "float2_frag.test.html", - "linkstat": false, + }, + "name": "float2_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "float3_frag.frag" - }, - "name": "float3_frag.test.html", - "linkstat": false, + }, + "name": "float3_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "float4_frag.frag" - }, - "name": "float4_frag.test.html", - "linkstat": false, + }, + "name": "float4_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_089_to_096.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_089_to_096.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_089_to_096.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_089_to_096.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "fragmentOnly1_vert.vert", + "vertexShader": "fragmentOnly1_vert.vert", "fragmentShader": "default.frag" - }, - "name": "fragmentOnly1_vert.test.html", - "linkstat": false, + }, + "name": "fragmentOnly1_vert.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "fragmentOnly2_vert.vert", + "vertexShader": "fragmentOnly2_vert.vert", "fragmentShader": "default.frag" - }, - "name": "fragmentOnly2_vert.test.html", - "linkstat": false, + }, + "name": "fragmentOnly2_vert.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "fragmentOnly3_vert.vert", + "vertexShader": "fragmentOnly3_vert.vert", "fragmentShader": "default.frag" - }, - "name": "fragmentOnly3_vert.test.html", - "linkstat": false, + }, + "name": "fragmentOnly3_vert.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "fragmentOnly4_vert.vert", + "vertexShader": "fragmentOnly4_vert.vert", "fragmentShader": "default.frag" - }, - "name": "fragmentOnly4_vert.test.html", - "linkstat": false, + }, + "name": "fragmentOnly4_vert.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "fragmentOnly_vert.vert", + "vertexShader": "fragmentOnly_vert.vert", "fragmentShader": "default.frag" - }, - "name": "fragmentOnly_vert.test.html", - "linkstat": false, + }, + "name": "fragmentOnly_vert.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "function10_frag.frag" - }, - "name": "function10_frag.test.html", - "linkstat": false, + }, + "name": "function10_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "function1_frag.frag" - }, - "name": "function1_frag.test.html", - "linkstat": false, + }, + "name": "function1_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "function2_V100_frag.frag" - }, - "name": "function2_V100_frag.test.html", - "linkstat": false, + }, + "name": "function2_V100_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_097_to_104.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_097_to_104.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_097_to_104.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_097_to_104.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "function3_frag.frag" - }, - "name": "function3_frag.test.html", - "linkstat": false, + }, + "name": "function3_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "function4_frag.frag" - }, - "name": "function4_frag.test.html", - "linkstat": false, + }, + "name": "function4_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "function6_frag.frag" - }, - "name": "function6_frag.test.html", - "linkstat": false, + }, + "name": "function6_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "function7_frag.frag" - }, - "name": "function7_frag.test.html", - "linkstat": false, + }, + "name": "function7_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "function8_frag.frag" - }, - "name": "function8_frag.test.html", - "linkstat": false, + }, + "name": "function8_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "function9_frag.frag" - }, - "name": "function9_frag.test.html", - "linkstat": false, + }, + "name": "function9_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "hvec2_frag.frag" - }, - "name": "hvec2_frag.test.html", - "linkstat": false, + }, + "name": "hvec2_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "hvec3_frag.frag" - }, - "name": "hvec3_frag.test.html", - "linkstat": false, + }, + "name": "hvec3_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_105_to_112.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_105_to_112.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_105_to_112.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_105_to_112.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "hvec4_frag.frag" - }, - "name": "hvec4_frag.test.html", - "linkstat": false, + }, + "name": "hvec4_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "identifier1_frag.frag" - }, - "name": "identifier1_frag.test.html", - "linkstat": false, + }, + "name": "identifier1_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "identifier2_frag.frag" - }, - "name": "identifier2_frag.test.html", - "linkstat": false, + }, + "name": "identifier2_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "identifier3_frag.frag" - }, - "name": "identifier3_frag.test.html", - "linkstat": false, + }, + "name": "identifier3_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "if1_frag.frag" - }, - "name": "if1_frag.test.html", - "linkstat": false, + }, + "name": "if1_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "if2_frag.frag" - }, - "name": "if2_frag.test.html", - "linkstat": false, + }, + "name": "if2_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "increment1_frag.frag" - }, - "name": "increment1_frag.test.html", - "linkstat": false, + }, + "name": "increment1_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "increment2_frag.frag" - }, - "name": "increment2_frag.test.html", - "linkstat": false, + }, + "name": "increment2_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_113_to_120.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_113_to_120.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_113_to_120.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_113_to_120.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "increment3_frag.frag" - }, - "name": "increment3_frag.test.html", - "linkstat": false, + }, + "name": "increment3_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "increment4_frag.frag" - }, - "name": "increment4_frag.test.html", - "linkstat": false, + }, + "name": "increment4_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "increment6_frag.frag" - }, - "name": "increment6_frag.test.html", - "linkstat": false, + }, + "name": "increment6_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "main1_vert.vert", + "vertexShader": "main1_vert.vert", "fragmentShader": "default.frag" - }, - "name": "main1_vert.test.html", - "linkstat": false, + }, + "name": "main1_vert.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "main2_vert.vert", + "vertexShader": "main2_vert.vert", "fragmentShader": "default.frag" - }, - "name": "main2_vert.test.html", - "linkstat": false, + }, + "name": "main2_vert.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "main3_vert.vert", + "vertexShader": "main3_vert.vert", "fragmentShader": "default.frag" - }, - "name": "main3_vert.test.html", - "linkstat": false, + }, + "name": "main3_vert.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "matrix_V100_frag.frag" - }, - "name": "matrix_V100_frag.test.html", - "linkstat": true, + }, + "name": "matrix_V100_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "normal_vert.vert", + "vertexShader": "normal_vert.vert", "fragmentShader": "default.frag" - }, - "name": "normal_vert.test.html", - "linkstat": false, + }, + "name": "normal_vert.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_121_to_128.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_121_to_128.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_121_to_128.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_121_to_128.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "parser10_frag.frag" - }, - "name": "parser10_frag.test.html", - "linkstat": false, + }, + "name": "parser10_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "parser1_vert.vert", + "vertexShader": "parser1_vert.vert", "fragmentShader": "default.frag" - }, - "name": "parser1_vert.test.html", - "linkstat": false, + }, + "name": "parser1_vert.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "parser3_frag.frag" - }, - "name": "parser3_frag.test.html", - "linkstat": false, + }, + "name": "parser3_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "parser4_frag.frag" - }, - "name": "parser4_frag.test.html", - "linkstat": false, + }, + "name": "parser4_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "parser5_frag.frag" - }, - "name": "parser5_frag.test.html", - "linkstat": false, + }, + "name": "parser5_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "parser6_frag.frag" - }, - "name": "parser6_frag.test.html", - "linkstat": false, + }, + "name": "parser6_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "parser7_frag.frag" - }, - "name": "parser7_frag.test.html", - "linkstat": false, + }, + "name": "parser7_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "parser8_frag.frag" - }, - "name": "parser8_frag.test.html", - "linkstat": false, + }, + "name": "parser8_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_129_to_136.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_129_to_136.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_129_to_136.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_129_to_136.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "parser9_frag.frag" - }, - "name": "parser9_frag.test.html", - "linkstat": false, + }, + "name": "parser9_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "preprocess0_frag.frag" - }, - "name": "preprocess0_frag.test.html", - "linkstat": false, + }, + "name": "preprocess0_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "preprocess10_frag.frag" - }, - "name": "preprocess10_frag.test.html", - "linkstat": false, + }, + "name": "preprocess10_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "preprocess1_frag.frag" - }, - "name": "preprocess1_frag.test.html", - "linkstat": false, + }, + "name": "preprocess1_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "preprocess2_frag.frag" - }, - "name": "preprocess2_frag.test.html", - "linkstat": false, + }, + "name": "preprocess2_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "preprocess3_frag.frag" - }, - "name": "preprocess3_frag.test.html", - "linkstat": false, + }, + "name": "preprocess3_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "preprocess4_frag.frag" - }, - "name": "preprocess4_frag.test.html", - "linkstat": false, + }, + "name": "preprocess4_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "preprocess6_frag.frag" - }, - "name": "preprocess6_frag.test.html", - "linkstat": false, + }, + "name": "preprocess6_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_137_to_144.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_137_to_144.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_137_to_144.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_137_to_144.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "preprocess7_frag.frag" - }, - "name": "preprocess7_frag.test.html", - "linkstat": false, + }, + "name": "preprocess7_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "scoping1_frag.frag" - }, - "name": "scoping1_frag.test.html", - "linkstat": false, + }, + "name": "scoping1_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "scoping2_frag.frag" - }, - "name": "scoping2_frag.test.html", - "linkstat": false, + }, + "name": "scoping2_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct10_frag.frag" - }, - "name": "struct10_frag.test.html", - "linkstat": false, + }, + "name": "struct10_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct11_frag.frag" - }, - "name": "struct11_frag.test.html", - "linkstat": false, + }, + "name": "struct11_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct1_frag.frag" - }, - "name": "struct1_frag.test.html", - "linkstat": false, + }, + "name": "struct1_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct2_frag.frag" - }, - "name": "struct2_frag.test.html", - "linkstat": false, + }, + "name": "struct2_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct3_frag.frag" - }, - "name": "struct3_frag.test.html", - "linkstat": false, + }, + "name": "struct3_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_145_to_152.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_145_to_152.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_145_to_152.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_145_to_152.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct4_frag.frag" - }, - "name": "struct4_frag.test.html", - "linkstat": false, + }, + "name": "struct4_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct5_frag.frag" - }, - "name": "struct5_frag.test.html", - "linkstat": false, + }, + "name": "struct5_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct6_frag.frag" - }, - "name": "struct6_frag.test.html", - "linkstat": false, + }, + "name": "struct6_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct7_frag.frag" - }, - "name": "struct7_frag.test.html", - "linkstat": false, + }, + "name": "struct7_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct8_frag.frag" - }, - "name": "struct8_frag.test.html", - "linkstat": false, + }, + "name": "struct8_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct9_frag.frag" - }, - "name": "struct9_frag.test.html", - "linkstat": false, + }, + "name": "struct9_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "swizzle1_frag.frag" - }, - "name": "swizzle1_frag.test.html", - "linkstat": false, + }, + "name": "swizzle1_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "swizzle2_frag.frag" - }, - "name": "swizzle2_frag.test.html", - "linkstat": false, + }, + "name": "swizzle2_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_153_to_160.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_153_to_160.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_153_to_160.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_153_to_160.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "swizzle3_frag.frag" - }, - "name": "swizzle3_frag.test.html", - "linkstat": false, + }, + "name": "swizzle3_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "typecast_frag.frag" - }, - "name": "typecast_frag.test.html", - "linkstat": false, + }, + "name": "typecast_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "uniform1_frag.frag" - }, - "name": "uniform1_frag.test.html", - "linkstat": false, + }, + "name": "uniform1_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "uniform_frag.frag" - }, - "name": "uniform_frag.test.html", - "linkstat": false, + }, + "name": "uniform_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "varying1_frag.frag" - }, - "name": "varying1_frag.test.html", - "linkstat": false, + }, + "name": "varying1_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "varying2_frag.frag" - }, - "name": "varying2_frag.test.html", - "linkstat": false, + }, + "name": "varying2_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "varying3_frag.frag" - }, - "name": "varying3_frag.test.html", - "linkstat": false, + }, + "name": "varying3_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "varying_frag.frag" - }, - "name": "varying_frag.test.html", - "linkstat": false, + }, + "name": "varying_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_161_to_168.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_161_to_168.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_161_to_168.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_161_to_168.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vector_frag.frag" - }, - "name": "vector_frag.test.html", - "linkstat": false, + }, + "name": "vector_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "version2_V100_frag.frag" - }, - "name": "version2_V100_frag.test.html", - "linkstat": false, + }, + "name": "version2_V100_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "version3_V100_frag.frag" - }, - "name": "version3_V100_frag.test.html", - "linkstat": false, + }, + "name": "version3_V100_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vertexOnly2_frag.frag" - }, - "name": "vertexOnly2_frag.test.html", - "linkstat": false, + }, + "name": "vertexOnly2_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vertexOnly_frag.frag" - }, - "name": "vertexOnly_frag.test.html", - "linkstat": false, + }, + "name": "vertexOnly_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "vertex_vert.vert", + "vertexShader": "vertex_vert.vert", "fragmentShader": "default.frag" - }, - "name": "vertex_vert.test.html", - "linkstat": false, + }, + "name": "vertex_vert.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "while1_frag.frag" - }, - "name": "while1_frag.test.html", - "linkstat": false, + }, + "name": "while1_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "while2_frag.frag" - }, - "name": "while2_frag.test.html", - "linkstat": false, + }, + "name": "while2_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_169_to_176.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_169_to_176.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_169_to_176.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_169_to_176.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,83 +45,83 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "while_frag.frag" - }, - "name": "while_frag.test.html", - "linkstat": false, + }, + "name": "while_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "TernaryOp_frag.frag" - }, - "name": "TernaryOp_frag.test.html", - "linkstat": false, + }, + "name": "TernaryOp_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "default.vert", + "vertexShader": "default.vert", "fragmentShader": "CG_Data_Types_frag.frag" - }, - "name": "CG_Data_Types_frag.test.html", - "linkstat": false, + }, + "name": "CG_Data_Types_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "default.vert", + "vertexShader": "default.vert", "fragmentShader": "CG_Standard_Library_frag.frag" - }, - "name": "CG_Standard_Library_frag.test.html", - "linkstat": false, + }, + "name": "CG_Standard_Library_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "default.vert", + "vertexShader": "default.vert", "fragmentShader": "Include_Preprocessor_Directive_frag.frag" - }, - "name": "Include_Preprocessor_Directive_frag.test.html", - "linkstat": false, + }, + "name": "Include_Preprocessor_Directive_frag.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "default.vert", + "vertexShader": "default.vert", "fragmentShader": "Low_Level_Assembly_Reserved_Words_frag.frag" - }, - "name": "Low_Level_Assembly_Reserved_Words_frag.test.html", - "linkstat": true, + }, + "name": "Low_Level_Assembly_Reserved_Words_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "Main_Parameters_vert.vert", + "vertexShader": "Main_Parameters_vert.vert", "fragmentShader": "default.frag" - }, - "name": "Main_Parameters_vert.test.html", - "linkstat": false, + }, + "name": "Main_Parameters_vert.test.html", + "linkstat": false, "compstat": false - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "default.vert", + "vertexShader": "default.vert", "fragmentShader": "Permissive_Constant_Conversions_frag.frag" - }, - "name": "Permissive_Constant_Conversions_frag.test.html", - "linkstat": false, + }, + "name": "Permissive_Constant_Conversions_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_177_to_178.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_177_to_178.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_177_to_178.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/build_177_to_178.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,23 +45,23 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "default.vert", + "vertexShader": "default.vert", "fragmentShader": "Permissive_Scalar_Vector_Expressions_frag.frag" - }, - "name": "Permissive_Scalar_Vector_Expressions_frag.test.html", - "linkstat": true, + }, + "name": "Permissive_Scalar_Vector_Expressions_frag.test.html", + "linkstat": true, "compstat": true - }, + }, { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "default.vert", + "vertexShader": "default.vert", "fragmentShader": "Texture_Rectangle_Samplers_frag.frag" - }, - "name": "Texture_Rectangle_Samplers_frag.test.html", - "linkstat": false, + }, + "name": "Texture_Rectangle_Samplers_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/comma1_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/comma1_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/comma1_vert.vert 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/comma1_vert.vert 2017-01-16 01:35:05.000000000 +0000 @@ -23,7 +23,7 @@ */ -void main() +void main() { int i, j, k; float f; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/comma2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/comma2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/comma2_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/comma2_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -29,7 +29,7 @@ void main() { const vec4 v = (vec4(1,2,3,4), vec4(5,6,7,8), 1.2); // right most value of comma operator shoul be a vec4 - const vec4 v1 = (vec3(0.2, 2.0), vec4(1,2,3,4), vec4(5,6,7,8)); - const vec4 v2 = (vec4(1,2,3,4), vec2(2.1, 2), vec4(5,6,7,8)); + const vec4 v1 = (vec3(0.2, 2.0), vec4(1,2,3,4), vec4(5,6,7,8)); + const vec4 v2 = (vec4(1,2,3,4), vec2(2.1, 2), vec4(5,6,7,8)); gl_FragColor = v + v1 + v2; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/comma2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/comma2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/comma2_vert.vert 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/comma2_vert.vert 2017-01-16 01:35:05.000000000 +0000 @@ -23,7 +23,7 @@ */ -void main() +void main() { int i, j, k; float f; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/comma3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/comma3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/comma3_vert.vert 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/comma3_vert.vert 2017-01-16 01:35:05.000000000 +0000 @@ -23,7 +23,7 @@ */ -void main() +void main() { int i, j, k; float f; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectBuiltInOveride_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectBuiltInOveride_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectBuiltInOveride_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectBuiltInOveride_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -29,7 +29,7 @@ int radians(int f) { - return f; + return f; } void main() diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectConstFolding1_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectConstFolding1_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectConstFolding1_vert.vert 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectConstFolding1_vert.vert 2017-01-16 01:35:05.000000000 +0000 @@ -26,9 +26,9 @@ void main() { - const struct s2 { + const struct s2 { int i; - vec3 v3; + vec3 v3; bvec4 bv4; } s22 = s2(8, vec3(9, 10, 11), bvec4(true, false, true, false)); @@ -48,6 +48,6 @@ const int field3 = s11.i * s11.ss.i; // constant folding (int * int) const vec4 field4 = s11.s44.v4 * s11.s44.v4; // constant folding (vec4 * vec4) // 49, 64, 81, 100 - const vec4 v4 = vec4(s11.ss.v3.y, s11.m[3][3], field3, field4[2]); // 10.0, 5.0, 16.0, 81.0 + const vec4 v4 = vec4(s11.ss.v3.y, s11.m[3][3], field3, field4[2]); // 10.0, 5.0, 16.0, 81.0 gl_Position = v4; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectConstFolding2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectConstFolding2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectConstFolding2_vert.vert 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectConstFolding2_vert.vert 2017-01-16 01:35:05.000000000 +0000 @@ -35,16 +35,16 @@ } ss = s(4,1.0, s5(1.0)); - const struct s2 { + const struct s2 { int i; - vec3 v3; + vec3 v3; bvec4 bv4; } s22 = s2(8, vec3(9, 10, 11), bvec4(true, false, true, false)); struct s4 { int ii; vec4 v4; - }; + }; const struct s1 { s2 ss; @@ -60,7 +60,7 @@ mat3 m3; } s77 = s7(12, mat3(15)); - vec2 v21 = vec2(1); // Not a constant + vec2 v21 = vec2(1); // Not a constant const vec2 v22 = vec2(11); // 11.0, 11.0 const vec4 v41 = vec4(2); // 2.0, 2.0, 2.0, 2.0 const vec4 v43 = vec4(4,4,4,4); // 4.0, 4.0, 4.0, 4.0 @@ -69,18 +69,18 @@ const vec4 v46 = vec4(vec2(20, 21), vec2(22, 23)); // 20.0, 21.0, 22.0, 23.0 const vec3 v31 = vec3(s22.v3); // 9.0, 10.0, 11.0 - const vec3 v32 = vec3(s77.m3); // 15.0, 0, 0 + const vec3 v32 = vec3(s77.m3); // 15.0, 0, 0 const vec3 v33 = vec3(s77.m3[2]); // 0, 0, 15.0 const vec3 v34 = vec3(s77.m3[2][0]); // 0,0,0 - + const mat4 m41 = mat4(1); // 1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1 const mat4 m42 = mat4(v44, v44, v44, v44); // all 5s const mat4 m43 = mat4( v43.x); // 4,0,0,0,0,4,0,0,0,0,0,4,0,0,0,0,0,4 const vec4 v47 = vec4(m41[0][0]); // 1.0,1.0,1.0,1.0 - const mat4 m45 = mat4(s22.v3, v44, v45, v32, 50, 52); //9,10,11,5,5,5,5,11,11,11,11,15.0, 0,0, 50.0, 52.0 + const mat4 m45 = mat4(s22.v3, v44, v45, v32, 50, 52); //9,10,11,5,5,5,5,11,11,11,11,15.0, 0,0, 50.0, 52.0 //const mat3 m31 = mat3(1, mat2(1), 2.0, vec3(1)); // 1.0, 1,0,0,1,2,1,1,1 const vec4 v48 = vec4(v31[0], v22[1], v41[0], v43[3]); //9, 11, 2, 4 const vec4 v49 = vec4(s22.v3.xy, s22.v3.zx); // 9,10,11,9 @@ -90,18 +90,18 @@ const vec4 v412 = vec4(m43[2]); // 0,0,4,0 const vec2 v23 = vec2(m41); // 1,0 - + const vec2 v24 = vec2(33, s11.i); // 33, 2 - const vec4 v413 = vec4(vec2(1.0,2.0),ivec2(3.0,4.0)); // 1,2,3,4 + const vec4 v413 = vec4(vec2(1.0,2.0),ivec2(3.0,4.0)); // 1,2,3,4 const ivec4 i41 = ivec4(1.0, 2.0, 3.0, 4.0); // 1,2,3,4 - + const ivec4 i42 = ivec4(6); // 6,6,6,6 const ivec4 i43 = ivec4(v45); //11,11,11,11 const ivec4 i44 = ivec4(v44[0]); // 5,5,5,5 const ivec4 i45 = ivec4(vec2(20, 21), vec2(22, 23)); // 20, 21, 22, 23 - const vec4 v414 = vec4(ivec2(29, 30), ivec2(31, 32)); // 29.0, 30.0, 31.0, 32.0 + const vec4 v414 = vec4(ivec2(29, 30), ivec2(31, 32)); // 29.0, 30.0, 31.0, 32.0 const ivec4 i46 = ivec4(ivec2(2.0,3.0), ivec3(4.0,5.0,6.0)); const ivec4 i47 = ivec4(i46); // 2,3,4,5 const ivec4 i48 = ivec4(v414.x); // 29,29,29,29 @@ -113,10 +113,10 @@ const ivec4 i412 = ivec4(s77.i); // 12, 12, 12, 12 const ivec4 i416 = ivec4(s22.v3.zyx, 12); // 11, 10, 9, 12 - const vec4 v415 = vec4(ivec2(35), ivec2(36)); // 35.0, 35.0 ,36.0 , 36.0 + const vec4 v415 = vec4(ivec2(35), ivec2(36)); // 35.0, 35.0 ,36.0 , 36.0 const bvec4 b41 = bvec4(1.0, 2.0, 3.0, 4.0); // true,true,true,true - + const bvec4 b42 = bvec4(6); // true,true,true,true const bvec4 b43 = bvec4(v45); //true,true,true,true @@ -141,7 +141,7 @@ struct s9 { float f; s10 s101; - }; + }; const struct s8 { int i; s9 s99; @@ -159,7 +159,7 @@ struct st2 { float f; st3 st33; - }; + }; const struct st1 { int i; st2 st22; @@ -184,29 +184,29 @@ } struct11 = struct1(struct2(2)); const vec4 v420 = v417; // 7.0, 8.0, 9.0 , 5.0 - + vec4 v421 = vec4(s11.m); // 5, 0, 0, 0 vec4 v422 = v420; // 7.0, 8.0, 9.0 , 5.0 vec4 v423 = s11.s44.v4; // 7, 8, 9, 10 - + int int1 = ss.i * ss.i; // 16 int int2 = ss.i * 2; // 8 const vec4 v425 = v420 * v420; // 49, 64, 81, 25 const vec4 v426 = s11.m * s11.s44.v4; // 35, 40, 45, 50 const vec4 v427 = s11.s44.v4 * s11.m; // 35, 40, 45, 50 - - float ff = 2.0; + + float ff = 2.0; const float ffConst = 2.0; - + vec4 v428 = ff + v425; // ordinary assignment with binary node vec3 v39 = vec3(5); vec3 v310 = s22.v3 + v39; //14, 15, 16 const vec4 v429 = v420 + v420; // 14, 16, 18, 10 - const vec4 v430 = v420 + ffConst; // 9, 10, 11,7 + const vec4 v430 = v420 + ffConst; // 9, 10, 11,7 const vec4 v432 = v429 + s11.f; // 18, 20, 22, 14 const vec4 v433 = vec4(s11.f + s11.f); // all 8s @@ -216,16 +216,16 @@ const mat4 m410 = m48 + s11.f; // diagonal 11, others - 6s const mat4 m413 = m48 + m48 ; // diagonal 14, others 4 - const mat4 m414 = m413 + ffConst ; // diagonal 16, others 6 + const mat4 m414 = m413 + ffConst ; // diagonal 16, others 6 - const vec4 v435 = ffConst + v420; // 9, 10, 11,7 + const vec4 v435 = ffConst + v420; // 9, 10, 11,7 const vec4 v436 = s11.f + v429; // 18, 20, 22, 14 const mat4 m415 = ffConst + s11.m; // diagonal 7s and others 2s const mat4 m416 = s11.f + m48 ; // diagonal 11, others - 6s - const mat4 m417 = ffConst + m413 ; // diagonal 16, others 6 + const mat4 m417 = ffConst + m413 ; // diagonal 16, others 6 const vec4 v437 = v420 - v420; // 0, 0, 0, 0 - const vec4 v438 = v420 - ffConst; // 5, 6, 7,3 + const vec4 v438 = v420 - ffConst; // 5, 6, 7,3 const vec4 v440 = v429 - s11.f; // 10, 12, 14, 6 const vec4 v441 = vec4(s11.f - s11.f); // all 0s @@ -235,16 +235,16 @@ const mat4 m420 = m48 - s11.f; // diagonal 3, others -> -2 const mat4 m423 = m48 - m48 ; // All 0s - const mat4 m424 = m413 - ffConst ; // diagonal 12, others 2 + const mat4 m424 = m413 - ffConst ; // diagonal 12, others 2 - const vec4 v443 = ffConst - v420; // -5, -6, -7,-3 + const vec4 v443 = ffConst - v420; // -5, -6, -7,-3 const vec4 v444 = s11.f - v429; // -10, -12, -14, -6 const mat4 m425 = ffConst - s11.m; // diagonal -3s and others 2s const mat4 m426 = s11.f - m48 ; // diagonal -3, others 2s - const mat4 m427 = ffConst - m413 ; // diagonal -12, others -2 + const mat4 m427 = ffConst - m413 ; // diagonal -12, others -2 const vec4 v445 = v420 * v420; // 49, 64, 81, 25 - const vec4 v446 = v420 * ffConst; // 14, 16, 18,10 + const vec4 v446 = v420 * ffConst; // 14, 16, 18,10 const vec4 v448 = v429 * s11.f; // 56, 46, 72, 40 const vec4 v449 = vec4(s11.f * s11.f); // all 16 @@ -254,25 +254,25 @@ const mat4 m430 = m48 * s11.f; // diagonal 28, others 8 const mat4 m433 = m48 * m48 ; // diagonal 61, others 36 - const mat4 m434 = m413 * ffConst ; // diagonal 28, others 8 + const mat4 m434 = m413 * ffConst ; // diagonal 28, others 8 - const vec4 v451 = ffConst * v420; // 14, 16, 18,10 + const vec4 v451 = ffConst * v420; // 14, 16, 18,10 const vec4 v452 = s11.f * v429; // 56, 64, 72, 40 const mat4 m435 = ffConst * s11.m; // diagonal 10 and others 0s const mat4 m436 = s11.f * m48 ; // diagonal 28, others - 8s const mat4 m437 = ffConst * m413 ; // diagonal 28, others 8 const vec4 v453 = v420 / v420; // 1, 1, 1, 1 - const vec4 v454 = v420 / ffConst; // 3.5, 4, 4.5,2.5 + const vec4 v454 = v420 / ffConst; // 3.5, 4, 4.5,2.5 const vec4 v457 = vec4(s11.f / s11.f); // all 1s const vec4 v458 = v432 / vec4(3); // 6, 6.6666, 7.333, 4.6666 const mat4 m438 = s11.m / ffConst; // diagonal 2.5 and others 0s const mat4 m439 = mat4(ffConst / s11.f); // diagonal 0.5s - const mat4 m440 = m48 / s11.f; // diagonal 1.75, others 0.5s + const mat4 m440 = m48 / s11.f; // diagonal 1.75, others 0.5s const mat4 m443 = m48 / m48 ; // All 1s - const mat4 m444 = m413 / ffConst ; // diagonal 7, others 2 + const mat4 m444 = m413 / ffConst ; // diagonal 7, others 2 const vec4 v459 = ffConst / v420; // .2857 , .25, .22, .4 const vec4 v460 = s11.f / v429; // .2857, .25, .22, .4 @@ -285,46 +285,46 @@ const vec4 v463 = m428 * v451; // 140, 160, 180, 100 const vec4 v464 = m437 * v451; // 744, 784, 824, 664 - int ii = 2; + int ii = 2; const int iiConst = 2; const ivec4 i420 = ivec4( 7,8,9,5); // 7, 8, 9, 5 const ivec4 i429 = i420 + i420; // 14, 16, 18, 10 - const ivec4 i430 = i420 + iiConst; // 9, 10, 11,7 + const ivec4 i430 = i420 + iiConst; // 9, 10, 11,7 const ivec4 i432 = i429 + ss.i; // 18, 20, 22, 14 const ivec4 i433 = ivec4(ss.i + ss.i); // all 8s - const ivec4 i435 = iiConst + i420; // 9, 10, 11,7 + const ivec4 i435 = iiConst + i420; // 9, 10, 11,7 const ivec4 i436 = ss.i + i429; // 18, 20, 22, 14 const ivec4 i437 = i420 - i420; // 0, 0, 0, 0 - const ivec4 i438 = i420 - iiConst; // 5, 6, 7,3 + const ivec4 i438 = i420 - iiConst; // 5, 6, 7,3 const ivec4 i440 = i429 - ss.i; // 10, 12, 14, 6 const ivec4 i441 = ivec4(ss.i - ss.i); // all 0s - const ivec4 i443 = iiConst - i420; // -5, -6, -7,-3 + const ivec4 i443 = iiConst - i420; // -5, -6, -7,-3 const ivec4 i444 = ss.i - i429; // -10, -12, -14, -6 const ivec4 i445 = i420 * i420; // 49, 64, 81, 25 - const ivec4 i446 = i420 * iiConst; // 14, 16, 18,10 + const ivec4 i446 = i420 * iiConst; // 14, 16, 18,10 const ivec4 i448 = i429 * ss.i; // 56, 64, 72, 40 const ivec4 i449 = ivec4(ss.i * ss.i); // all 16 - const ivec4 i451 = iiConst * i420; // 14, 16, 18,10 + const ivec4 i451 = iiConst * i420; // 14, 16, 18,10 const ivec4 i452 = ss.i * i429; // 56, 64, 72, 40 const ivec4 i453 = i420 / i420; // 1, 1, 1, 1 - const ivec4 i454 = i420 / iiConst; // 3, 4, 4,2 + const ivec4 i454 = i420 / iiConst; // 3, 4, 4,2 const ivec4 i456 = i429 / ss.i; // 3, 4, 4, 2 const ivec4 i457 = ivec4(ss.i / ss.i); // all 1s - const ivec4 i459 = iiConst / i420; // 0 , 0, 0,0 - const ivec4 i460 = ss.i / i429; // 0, 0, 0,0 + const ivec4 i459 = iiConst / i420; // 0 , 0, 0,0 + const ivec4 i460 = ss.i / i429; // 0, 0, 0,0 const bvec4 b424 = bvec4(s22.bv4); @@ -336,7 +336,7 @@ const vec4 v465 = -v420; // -7, -8, -9, -5 const mat4 m448 = -m447 ; // diagonal -.1428, others -0.5 - const ivec4 i465 = -i456 ; // -3, -4, -4,-2 + const ivec4 i465 = -i456 ; // -3, -4, -4,-2 const bool b7 = s22 == s22; @@ -387,7 +387,7 @@ const int int13 = -ss.i; - + const vec4 v474 = -vec4(0.5); int int14 = ii++; @@ -398,8 +398,8 @@ const vec4 v479 = iiConst > 1 ? v466 : v478; // 21, 24, 27, 20 - const struct st7 { - int i; + const struct st7 { + int i; bool b; } st77 = st7(ss.i, true); @@ -416,7 +416,7 @@ const vec3 v312 = st99.ss.v3; // 9, 10, 11 const vec4 v482 = mat4(1)[0]; // 1, 0, 0 , 0 - + const mat4 m450 = mat4(ss.i); // mat4(4) const mat4 m451 = mat4(b20); // mat4(1) const mat4 m452 = mat4(st77.b); // mat4(1) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectConstruct_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectConstruct_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectConstruct_vert.vert 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectConstruct_vert.vert 2017-01-16 01:35:05.000000000 +0000 @@ -48,7 +48,7 @@ mat3 m1 = mat3(v,v,v); mat2 m2 = mat2(v, v6.x); - + gl_Position = vec4(1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectExtension10_V100_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectExtension10_V100_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectExtension10_V100_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectExtension10_V100_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -24,16 +24,16 @@ #version 100 -#extension extensionfoo : enable // warning extension not supported -#extension extensionfoo : disable // warning extension not supported -#extension extensionfoo : warn // warning extension not supported +#extension extensionfoo : enable // warning extension not supported +#extension extensionfoo : disable // warning extension not supported +#extension extensionfoo : warn // warning extension not supported #extension all : disable // no error in the program #extension all : warn // no error in the program -#extension extensionfoo : enable // warning extension not supported -#extension extensionfoo : disable // warning extension not supported -#extension extensionfoo : warn // warning extension not supported +#extension extensionfoo : enable // warning extension not supported +#extension extensionfoo : disable // warning extension not supported +#extension extensionfoo : warn // warning extension not supported #ifdef GL_ES precision mediump float; #endif diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectExtension4_V100_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectExtension4_V100_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectExtension4_V100_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectExtension4_V100_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -23,9 +23,9 @@ */ -#extension extensionfoo : enable // warning extension not supported -#extension extensionfoo : disable // warning extension not supported -#extension extensionfoo : warn // warning extension not supported +#extension extensionfoo : enable // warning extension not supported +#extension extensionfoo : disable // warning extension not supported +#extension extensionfoo : warn // warning extension not supported #ifdef GL_ES precision mediump float; #endif diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectFull_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectFull_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectFull_vert.vert 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectFull_vert.vert 2017-01-16 01:35:05.000000000 +0000 @@ -120,15 +120,15 @@ void test_function(const in int in_int, inout int out_int); int test_function1(in int in_int1, inout int in_out_int); -uniform float array_float[2]; +uniform float array_float[2]; struct nested { int a; - float f; + float f; }; -struct light1 +struct light1 { float intensity; vec3 position; @@ -161,10 +161,10 @@ uniform light3 uniformLight3; -struct light6 { +struct light6 { float i; }; -uniform light6 uniformLight6; +uniform light6 uniformLight6; struct slight10{ float f; @@ -180,37 +180,37 @@ } ; -light3 struct_var = light3(5.0); +light3 struct_var = light3(5.0); // Attribtue variables can only be Global attribute float flt_attrib; attribute vec2 vec2_attrib; attribute vec3 vec3_attrib; -attribute vec4 vec4_attrib; -attribute mat2 mat2_attrib; -attribute mat3 mat3_attrib; -attribute mat4 mat4_attrib; - -uniform float flt_uniform; -uniform vec3 uniform_vec3; -uniform mat3 uniform_mat3; +attribute vec4 vec4_attrib; +attribute mat2 mat2_attrib; +attribute mat3 mat3_attrib; +attribute mat4 mat4_attrib; + +uniform float flt_uniform; +uniform vec3 uniform_vec3; +uniform mat3 uniform_mat3; -uniform sampler2D samp[3]; -uniform sampler2D samp1; +uniform sampler2D samp[3]; +uniform sampler2D samp1; -const struct light12 { +const struct light12 { int a; } uniform_struct = light12(2); -varying vec3 varying_vec3; -varying vec2 varying_vec2; -varying vec4 varying_vec4; -varying mat4 varying_mat4; -varying mat2 varying_mat2; -varying mat3 varying_mat3; -varying float varying_flt; +varying vec3 varying_vec3; +varying vec2 varying_vec2; +varying vec4 varying_vec4; +varying mat4 varying_mat4; +varying mat2 varying_mat2; +varying mat3 varying_mat3; +varying float varying_flt; -float frequencies[2]; +float frequencies[2]; void test_function2(int func_int) { @@ -222,43 +222,43 @@ light6 test_function6(int a); const float FloatConst1 = 3.0 * 8.0, floatConst2 = 4.0; -const bool BoolConst1 = true && true || false; -const bool BoolConst2 = false || !false && false; +const bool BoolConst1 = true && true || false; +const bool BoolConst2 = false || !false && false; void main(void) { - int test_int1 = 2; - const int const_test_int1 = 2; + int test_int1 = 2; + const int const_test_int1 = 2; struct structMain { float i; } testStruct; - struct { + struct { structMain a; } aStruct; - testStruct.i = 5.0 ; - struct_var.i = 5.0; + testStruct.i = 5.0 ; + struct_var.i = 5.0; structMain newStruct, newStruct1; - testStruct = newStruct; - newStruct = newStruct1; + testStruct = newStruct; + newStruct = newStruct1; - lightVar.light2.f = 1.1; + lightVar.light2.f = 1.1; - light1 ll1; - ll1.light2.a = 1; + light1 ll1; + ll1.light2.a = 1; const struct const_struct { float i; - } const_struct_inst = const_struct(1.0); + } const_struct_inst = const_struct(1.0); - //ll1 = ll2; - Assign (ll1, ll2); - ll1.light2 = ll2.light2; - ll1.light2 = ll1.light2; + //ll1 = ll2; + Assign (ll1, ll2); + ll1.light2 = ll2.light2; + ll1.light2 = ll1.light2; ll1.light2.f = ll2.light2.f; ll1.light2.f = ll1.light2.f; @@ -271,236 +271,236 @@ light7 ll7[4]; structMain newStruct2[2]; - newStruct2[0].i = 1.1; - + newStruct2[0].i = 1.1; + ll7[0].light8.light9.light10.f = 1.1; - bool test_bool4 = false ; + bool test_bool4 = false ; - bool test_bool5 = 1.2 > 3.0 ; + bool test_bool5 = 1.2 > 3.0 ; - int test_int2 = 047; + int test_int2 = 047; int test_int4 = 0xa8; // testing for hexadecimal numbers - float test_float1 = 1.5; - float test_float2 = .01; - float test_float3 = 10.; - float test_float4 = 10.01; - float test_float5 = 23e+2; - float test_float6 = 23E-3; - float test_float8 = 23E2; - bool test_bool6 = BoolConst1 && ! (test_int1 != 0) && ! BoolConst1 && ! (FloatConst1 != 0.0) && (FloatConst1 != 0.0) && (test_float1 != 0.0); - - vec4 color = vec4(0.0, 1.0, 0.0, 1.0); - vec4 color2 = vec4(0.0); - - vec3 color4 = vec3(test_float8); - - ivec4 test_int_vect1 = ivec4(1.0,1.0,1.0,1.0); - ivec3 test_int_vec3 = ivec3(1, 1, 1) ; - - bvec4 test_bool_vect1 = bvec4(1., 1., 1. , 1. ); - - vec2 test_vec2 = vec2(1., 1.); - vec2 test_vec3 = vec2(1., 1); - vec4 test_vec4 = vec4(test_int_vect1); + float test_float1 = 1.5; + float test_float2 = .01; + float test_float3 = 10.; + float test_float4 = 10.01; + float test_float5 = 23e+2; + float test_float6 = 23E-3; + float test_float8 = 23E2; + bool test_bool6 = BoolConst1 && ! (test_int1 != 0) && ! BoolConst1 && ! (FloatConst1 != 0.0) && (FloatConst1 != 0.0) && (test_float1 != 0.0); + + vec4 color = vec4(0.0, 1.0, 0.0, 1.0); + vec4 color2 = vec4(0.0); + + vec3 color4 = vec3(test_float8); + + ivec4 test_int_vect1 = ivec4(1.0,1.0,1.0,1.0); + ivec3 test_int_vec3 = ivec3(1, 1, 1) ; + + bvec4 test_bool_vect1 = bvec4(1., 1., 1. , 1. ); + + vec2 test_vec2 = vec2(1., 1.); + vec2 test_vec3 = vec2(1., 1); + vec4 test_vec4 = vec4(test_int_vect1); vec2 test_vec5 = vec2(color4); - vec3 test_vec7 = vec3(color); + vec3 test_vec7 = vec3(color); vec3 test_vec8 = vec3(test_vec2, test_float4); vec3 test_vec9 = vec3(test_float4, test_vec2); - vec4 test_vec10 = vec4(test_vec9, 0.01); - vec4 test_vec11 = vec4(0.01, test_vec9); + vec4 test_vec10 = vec4(test_vec9, 0.01); + vec4 test_vec11 = vec4(0.01, test_vec9); + + vec4 test_vec12 = vec4(test_vec2, test_vec2); - vec4 test_vec12 = vec4(test_vec2, test_vec2); + mat2 test_mat2 = mat2(test_float3); + mat3 test_mat3 = mat3(test_float3); + mat4 test_mat4 = mat4(test_float3); - mat2 test_mat2 = mat2(test_float3); - mat3 test_mat3 = mat3(test_float3); - mat4 test_mat4 = mat4(test_float3); + mat2 test_mat7 = mat2(test_vec2, test_vec2); + mat2 test_mat8 = mat2(01.01, 2.01, 3.01, 4.01); - mat2 test_mat7 = mat2(test_vec2, test_vec2); - mat2 test_mat8 = mat2(01.01, 2.01, 3.01, 4.01); + mat3 test_mat9 = mat3(test_vec7, test_vec7, test_vec7); + mat4 test_mat10 = mat4(test_vec10, test_vec10, test_vec10, test_vec10); + test_mat10[1] = test_vec10; - mat3 test_mat9 = mat3(test_vec7, test_vec7, test_vec7); - mat4 test_mat10 = mat4(test_vec10, test_vec10, test_vec10, test_vec10); - test_mat10[1] = test_vec10; - - mat2 test_mat12 = mat2(test_vec2, 0.01, 0.01); - mat2 test_mat13 = mat2(0.01, 5., test_vec2); - mat2 test_mat15 = mat2(0.1, 5., test_vec2 ); + mat2 test_mat12 = mat2(test_vec2, 0.01, 0.01); + mat2 test_mat13 = mat2(0.01, 5., test_vec2); + mat2 test_mat15 = mat2(0.1, 5., test_vec2 ); - //mat2 test_mat16 = mat2(test_mat9); - //mat2 test_mat17 = mat2(test_mat10); + //mat2 test_mat16 = mat2(test_mat9); + //mat2 test_mat17 = mat2(test_mat10); - float freq1[2]; - float freq2[25]; + float freq1[2]; + float freq2[25]; for (int i=0; i<100; i++) { if (test_float1 < 1.0) { - + } else { break; } } - - freq2[1] = 1.9 ; + + freq2[1] = 1.9 ; const int array_index = 2; freq2[const_test_int1] = 1.9 ; freq2[array_index] = 1.8; - - const int const_int = 5; - - test_float1 = varying_flt; + + const int const_int = 5; + + test_float1 = varying_flt; int out_int; int intArray[6]; - test_function(test_int1, test_int1); - test_function(test_int1, intArray[2]); + test_function(test_int1, test_int1); + test_function(test_int1, intArray[2]); - vec3 vv = vec3(test_function1(test_int1, out_int)); + vec3 vv = vec3(test_function1(test_int1, out_int)); bool bool_var = true; - int test_int6 = int(bool_var); - test_float1 = float(bool_var); - test_float1 = float(test_int6); - test_int6 = int(test_float1); - bool_var = bool(test_int6); - bool_var = bool(test_float1); - test_float1 = float(test_vec9); - - test_vec2.x = 1.2; - test_vec2.y = 1.4; - test_vec2.xy; - - - color.zy = test_vec2; - - test_vec2[1] = 1.1; - - test_mat2[0][0] = 1.1; + int test_int6 = int(bool_var); + test_float1 = float(bool_var); + test_float1 = float(test_int6); + test_int6 = int(test_float1); + bool_var = bool(test_int6); + bool_var = bool(test_float1); + test_float1 = float(test_vec9); - test_float1 += 1.0; + test_vec2.x = 1.2; + test_vec2.y = 1.4; + test_vec2.xy; + + + color.zy = test_vec2; + + test_vec2[1] = 1.1; + + test_mat2[0][0] = 1.1; + + test_float1 += 1.0; test_float1 -= 1.0; test_float1 *= 1.0; test_float1 /= 1.0; - test_mat12 *= test_mat13 ; + test_mat12 *= test_mat13 ; test_mat12 *= test_float1; - test_vec2 *= test_float1; - test_vec2 *= test_mat12; - test_float1++; - test_float1--; - --test_float1; - ++test_float1; - test_float1; - test_int1++; - test_int1--; - - test_vec2 = test_vec2 + test_float1; - test_vec2 = test_float1 + test_vec2; - - test_mat12 = test_mat12 * test_mat13; - test_vec2 = test_vec2 * test_vec5; - - test_vec2++; + test_vec2 *= test_float1; + test_vec2 *= test_mat12; + test_float1++; + test_float1--; + --test_float1; + ++test_float1; + test_float1; + test_int1++; + test_int1--; + + test_vec2 = test_vec2 + test_float1; + test_vec2 = test_float1 + test_vec2; + + test_mat12 = test_mat12 * test_mat13; + test_vec2 = test_vec2 * test_vec5; + + test_vec2++; test_mat2++; - bool test_bool2 = test_float2 > test_float3; + bool test_bool2 = test_float2 > test_float3; - bool test_bool3 = test_int1 > test_int6 ; + bool test_bool3 = test_int1 > test_int6 ; - test_bool3 = test_vec2 == test_vec5; + test_bool3 = test_vec2 == test_vec5; - test_bool2 = test_bool3 && test_bool4; - test_bool2 = test_bool3 || test_bool4; - test_bool2 = test_bool3 ^^ test_bool4; + test_bool2 = test_bool3 && test_bool4; + test_bool2 = test_bool3 || test_bool4; + test_bool2 = test_bool3 ^^ test_bool4; - test_bool2 = !test_bool3; + test_bool2 = !test_bool3; - test_bool3 = !(test_int1 > test_int6) ; + test_bool3 = !(test_int1 > test_int6) ; - test_float1 = test_int1 > test_int6 ? test_float2 : test_float3; - test_vec2 = test_int1 > test_int6 ? test_vec2 : test_vec5; - if(test_bool2) + test_float1 = test_int1 > test_int6 ? test_float2 : test_float3; + test_vec2 = test_int1 > test_int6 ? test_vec2 : test_vec5; + if(test_bool2) test_float1++; else test_float1--; - if(test_float1 > test_float2) + if(test_float1 > test_float2) test_float1++; - if( test_bool2 ) + if( test_bool2 ) { - int if_int; + int if_int; test_float1++; } - if(test_bool2) + if(test_bool2) if(test_bool3) if(test_bool3) test_float1++; - for(int for_int=0; for_int < 5; for_int++) + for(int for_int=0; for_int < 5; for_int++) { // do nothing as such } - for(int x1=0; x1 < 10; x1++) + for(int x1=0; x1 < 10; x1++) { if (!test_bool2) break; - + int for_int; } - for(int x2=-10; x2 < 100; x2++) + for(int x2=-10; x2 < 100; x2++) { test_bool2 = (test_float1 > test_float2); if (!test_bool2) break; } - for(int for_int1 = 0; for_int1 < 100; for_int1++) + for(int for_int1 = 0; for_int1 < 100; for_int1++) { if (!test_bool2) break; - + int for_int; } - for(int for_int1 = 0; for_int1 < 100; for_int1++) + for(int for_int1 = 0; for_int1 < 100; for_int1++) { if (!test_bool2) continue; - + int for_int; } - for(int i=0; i<100; i++) + for(int i=0; i<100; i++) { if (!(test_float1 > test_float2)) { break; } - + break; - continue; + continue; } - for(int i=0; i<100; i++) + for(int i=0; i<100; i++) { if (!test_bool2) break; - - break; + + break; } for (int i=0; i<100; i++) @@ -519,10 +519,10 @@ // VERTEX SHADER BUILT-IN ATTRIBUTES vec4 builtInV4 = gtf_Color + gtf_SecondaryColor + gtf_Vertex + gtf_MultiTexCoord0 + gtf_MultiTexCoord1 + gtf_MultiTexCoord2 + gtf_MultiTexCoord3; - + int builtInI = gtf_MaxLights + gtf_MaxClipPlanes + gtf_MaxTextureUnits + gtf_MaxTextureCoords + gtf_MaxVertexAttribs + gtf_MaxVertexUniformComponents + gtf_MaxVaryingFloats + gtf_MaxVertexTextureImageUnits + gtf_MaxCombinedTextureImageUnits + gtf_MaxTextureImageUnits + gtf_MaxFragmentUniformComponents + gtf_MaxDrawBuffers ; - + mat4 builtInM4 = gtf_ModelViewMatrix + gtf_ModelViewProjectionMatrix + gtf_ProjectionMatrix; @@ -533,62 +533,62 @@ gtf_DepthRange.near ; - test_float1 = gtf_DepthRange.near; - test_float1 = gtf_DepthRange.far; + test_float1 = gtf_DepthRange.near; + test_float1 = gtf_DepthRange.far; test_float1 = gtf_DepthRange.diff; - gtf_Point.size; + gtf_Point.size; gtf_Point.sizeMin; - gtf_Point.sizeMax; + gtf_Point.sizeMax; gtf_Point.fadeThresholdSize ; gtf_Point.distanceConstantAttenuation; gtf_Point.distanceLinearAttenuation ; gtf_Point.distanceQuadraticAttenuation; - gtf_MaterialParameters test; + gtf_MaterialParameters test; gtf_FrontMaterial.emission; - color = gtf_FrontMaterial.emission; - color = gtf_FrontMaterial.ambient; + color = gtf_FrontMaterial.emission; + color = gtf_FrontMaterial.ambient; color = gtf_FrontMaterial.diffuse; color = gtf_FrontMaterial.specular; - test_float1 = gtf_FrontMaterial.shininess; + test_float1 = gtf_FrontMaterial.shininess; gtf_LightSourceParameters lightSource; float builtInFloat1 = gtf_LightSource[0].spotExponent; - color = gtf_LightSource[0].ambient; - color = lightSource.ambient; - color = lightSource.diffuse; - color = lightSource.specular; - color = lightSource.position; - color = lightSource.halfVector; - color4 = lightSource.spotDirection; - test_float1 = lightSource.spotExponent; - test_float1 = lightSource.spotCutoff; - test_float1 = lightSource.spotCosCutoff; - test_float1 = lightSource.constantAttenuation; - test_float1 = lightSource.linearAttenuation; - test_float1 = lightSource.quadraticAttenuation; + color = gtf_LightSource[0].ambient; + color = lightSource.ambient; + color = lightSource.diffuse; + color = lightSource.specular; + color = lightSource.position; + color = lightSource.halfVector; + color4 = lightSource.spotDirection; + test_float1 = lightSource.spotExponent; + test_float1 = lightSource.spotCutoff; + test_float1 = lightSource.spotCosCutoff; + test_float1 = lightSource.constantAttenuation; + test_float1 = lightSource.linearAttenuation; + test_float1 = lightSource.quadraticAttenuation; color = gtf_LightModel.ambient; - gtf_LightModelParameters lightModel; - color = gtf_LightModel.ambient; - color = lightModel.ambient; + gtf_LightModelParameters lightModel; + color = gtf_LightModel.ambient; + color = lightModel.ambient; color = gtf_FrontLightModelProduct.sceneColor ; - gtf_LightModelProducts lightModelProd; + gtf_LightModelProducts lightModelProd; - color = lightModelProd.sceneColor; - color = gtf_FrontLightModelProduct.sceneColor; + color = lightModelProd.sceneColor; + color = gtf_FrontLightModelProduct.sceneColor; - color = gtf_FrontLightProduct[0].ambient; - color = gtf_FrontLightProduct[0].ambient; + color = gtf_FrontLightProduct[0].ambient; + color = gtf_FrontLightProduct[0].ambient; gtf_LightProducts lightProd; - color = lightProd.ambient; + color = lightProd.ambient; color = lightProd.diffuse; color = lightProd.specular; @@ -599,21 +599,21 @@ test_float1 = gtf_Fog.scale ; color = gtf_Fog.color ; - gtf_FrontColor = vec4(1.0, 1.0, 1.0, 1.0); - gtf_BackColor = vec4(1.0, 1.0, 1.0, 1.0); - gtf_FrontSecondaryColor = vec4(1.0, 1.0, 1.0, 1.0); - gtf_BackSecondaryColor = vec4(1.0, 1.0, 1.0, 1.0); + gtf_FrontColor = vec4(1.0, 1.0, 1.0, 1.0); + gtf_BackColor = vec4(1.0, 1.0, 1.0, 1.0); + gtf_FrontSecondaryColor = vec4(1.0, 1.0, 1.0, 1.0); + gtf_BackSecondaryColor = vec4(1.0, 1.0, 1.0, 1.0); // VARYING VARIABLES AVAILABLE IN FRAGMENT AND VERTEX SHADERS BOTH - gtf_TexCoord[0] = vec4(1.0, 1.0, 1.0, 1.0); - gtf_FogFragCoord = vec4(1.0, 1.0, 1.0, 1.0); + gtf_TexCoord[0] = vec4(1.0, 1.0, 1.0, 1.0); + gtf_FogFragCoord = vec4(1.0, 1.0, 1.0, 1.0); } void test_function(const in int in_int, inout int out_int) { - out_int = 5; + out_int = 5; int i = 5; return ; } @@ -621,48 +621,48 @@ int test_function1(in int in_int1, inout int in_out_int) { float ff; - in_int1 = 5; + in_int1 = 5; return in_int1; } void test_function3(light3 ll) { - ll.i = 5.0; + ll.i = 5.0; varying_flt = 1.2; } void test_function4(light5 ll20) { - ll20.i = 10.0; + ll20.i = 10.0; } void test_function5(light1 struct_light1) { - struct_light1.light2.a = 1; + struct_light1.light2.a = 1; light5 ll5; struct_light1.light2.f = ll5.i; struct_light1.light2.f++; struct_light1.light2.a++; } -light6 test_function6(int a) +light6 test_function6(int a) { int x; light6 funcStruct; light7 funcStruct1; -x; - x = x - x ; + x = x - x ; mat2 m; m++; - -m; - (m)++; - return funcStruct; + -m; + (m)++; + return funcStruct; } -float test_function7(light1 ll1, int light1 ) +float test_function7(light1 ll1, int light1 ) { float f; - + struct ss1 { int a; }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectFunction1_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectFunction1_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectFunction1_vert.vert 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectFunction1_vert.vert 2017-01-16 01:35:05.000000000 +0000 @@ -32,22 +32,22 @@ void main() { bool b1, b2, b3, b4, b5, b6; - + b1 = any(lessThan(v, v)); b2 = all(lessThanEqual(v, v)); - + b3 = any(not(greaterThan(v, v))); - + b4 = any(greaterThanEqual(v, v)); - + b5 = any(notEqual(v, v)); - + b6 = any(equal(v, v)); - - vec2 u; + + vec2 u; if (b1 && b2 && b3 && b4 && b5 && b6) u = v; - + gl_Position = vec4(u, u); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectModule_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectModule_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectModule_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectModule_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -55,7 +55,7 @@ vec4 v2 = test_function1(f2); vec4 v3 = test_function2(f2); vec4 v4 = test_function3(f2); - + if (f1 > f2) { gl_FragColor = v1 + v2 + v3 + v4; } else @@ -65,7 +65,7 @@ float f4 = 5.5; vec4 test_function3(float ff) { - if (ff > f4) + if (ff > f4) return vec4(ff); else return vec4(f4); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParse1_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParse1_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParse1_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParse1_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -41,7 +41,7 @@ void main (void) { const int x = 3; - mat4 a[4]; + mat4 a[4]; vec4 v; for (float f = 0.0; f != 3.0; ++f) @@ -54,7 +54,7 @@ vec3 v3_1 = v3[x]; - float f1 = a[x][2].z * float(x); + float f1 = a[x][2].z * float(x); f1 = a[x][2][2] * float(x); f1 = v[2] * v[1]; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParse2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParse2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParse2_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParse2_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -50,11 +50,11 @@ float1 = float(bool4); float1 = float(int_1); int_1 = int(float1); - int_1 = int(bool4); + int_1 = int(bool4); { int a, b, c; - + a = b; b = c; { @@ -64,7 +64,7 @@ c = d; { int a, d, e; - + a = d; d = e; } @@ -122,7 +122,7 @@ --int_1; bool4 = BoolConst1 && ! (int_1 != 0) && ! BoolConst1 && ! (FloatConst1 != 0.0) && (FloatConst1 != 0.0) && (float1 != 0.0); - + float1 = 5 != 0 ? float1 : float(int_1); float1 = 0 != 0 ? float1 : float(int_1); @@ -145,7 +145,7 @@ int ii,jj,kk; float ff; ii = jj, kk, ff; - + vec4_1 = vec4_1 + 2.0; ivec4 iv; iv = iv + 2; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParse2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParse2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParse2_vert.vert 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParse2_vert.vert 2017-01-16 01:35:05.000000000 +0000 @@ -48,11 +48,11 @@ float1 = float(bool4); float1 = float(int_1); int_1 = int(float1); - int_1 = int(bool4); + int_1 = int(bool4); { int a, b, c; - + a = b; b = c; { @@ -62,7 +62,7 @@ c = d; { int a, d, e; - + a = d; d = e; } @@ -120,7 +120,7 @@ --int_1; bool4 = BoolConst1 && ! (int_1 != 0) && ! BoolConst1 && ! (FloatConst1 != 0.0) && (FloatConst1 != 0.0) && (float1 != 0.0); - + float1 = 5 != 0 ? float1 : float(int_1); float1 = BoolConst1 ? float1 : float(int_1); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParseTest1_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParseTest1_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParseTest1_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParseTest1_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -35,6 +35,6 @@ s s1 = s(vec4(ivec4(4.0, vec2(5,6), 7.0))); vec4 v = vec4(2,ivec2(3.0, 4.0), 5.0); vec4 v4 = vec4(ivec4(8.0)); - + gl_FragColor = v4 + v + s1.v; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParseTest_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParseTest_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParseTest_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectParseTest_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -34,7 +34,7 @@ { vec4 v = vec4(float(vec2(1,2)), 5,6,7); // 1, 5, 6, 7 vec4 v1 = vec4(3, vec2(ivec2(1,2)), 4); // 3, 1, 2, 4 - vec4 v2 = vec4(8, 9, vec4(ivec4(1,2,3,4))); // 8,9, 1,2 + vec4 v2 = vec4(8, 9, vec4(ivec4(1,2,3,4))); // 8,9, 1,2 vec2 v3 = vec2(v2); // 8,9 vec4 v4 = vec4(v3, v2.z, v2.w); // 8,9,1,2 diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectPreprocess5_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectPreprocess5_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectPreprocess5_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectPreprocess5_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -43,6 +43,6 @@ test2; test3 = test; sum = test3; -} - - +} + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectPreprocess8_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectPreprocess8_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectPreprocess8_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectPreprocess8_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -30,7 +30,7 @@ #define t1 1 - + #if(t1==1) #define t2 2 #endif @@ -45,7 +45,7 @@ #define t4 4 #elif (t3==3) #define t4 44 -#else +#else #define t4 0 #endif @@ -63,11 +63,11 @@ #define t7 7 #endif -#ifndef t8 +#ifndef t8 #define t8 8 #endif -#if defined t8 +#if defined t8 #define t9 #ifdef t9 #define t10 10 @@ -103,7 +103,7 @@ #define t15 15 #define t24 24 #endif - #endif + #endif #endif #else #ifdef t21 @@ -124,9 +124,9 @@ void main(void) { int sum =0; - sum = t1+t2+t3+t4+t5; + sum = t1+t2+t3+t4+t5; sum = t6+t7+t8+t9+t10; sum = t11+t12+t13+t14+t15; sum = t16+t20+t22+t23+t25+t24; -} +} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectPreprocess9_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectPreprocess9_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectPreprocess9_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectPreprocess9_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -44,6 +44,6 @@ test = t3-t4; tes = t5 * t6; test2 = t7; - + gl_FragColor = vec4(test, tes, test1, test2); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectSwizzle1_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectSwizzle1_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectSwizzle1_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectSwizzle1_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -29,13 +29,13 @@ void main() { vec2 v = vec2(1,5); - // at the end of next statement, values in + // at the end of next statement, values in // v.x = 12, v.y = 12 - v.xy += v.yx += v.xy; + v.xy += v.yx += v.xy; // v1 and v2, both are initialized with 12 vec2 v1 = v, v2 = v; - - v1.xy += v2.yx += ++(v.xy); // v1 = 37, v2 = 25 each - v1.xy += v2.yx += (v.xy)++; // v1 = 75, v2 = 38 each + + v1.xy += v2.yx += ++(v.xy); // v1 = 37, v2 = 25 each + v1.xy += v2.yx += (v.xy)++; // v1 = 75, v2 = 38 each gl_FragColor = vec4(v1,v2); // 75, 75, 38, 38 } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectSwizzle2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectSwizzle2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectSwizzle2_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectSwizzle2_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -31,7 +31,7 @@ float f, f1, f2; f = f1 = f2; f += f1 += f2; - + vec4 v, v1, v2; v = v1 = v2; v += v1 += v2; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectVersion_V100_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectVersion_V100_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectVersion_V100_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/CorrectVersion_V100_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -27,10 +27,10 @@ #ifdef GL_ES precision mediump float; #endif -/* #version can only be followed by number 100. The only statements before +/* #version can only be followed by number 100. The only statements before #version can be comment or white spaces */ void main() { - gl_FragColor = vec4(1); + gl_FragColor = vec4(1); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/dataType13_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/dataType13_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/dataType13_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/dataType13_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -30,5 +30,5 @@ { int i = 1; float f = 1.2; - float result = f * i; // auto promotion now allowed + float result = f * i; // auto promotion now allowed } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/DuplicateVersion1_V100_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/DuplicateVersion1_V100_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/DuplicateVersion1_V100_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/DuplicateVersion1_V100_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -32,5 +32,5 @@ void main() { - gl_FragColor = vec4(1); + gl_FragColor = vec4(1); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/extension3_V100_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/extension3_V100_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/extension3_V100_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/extension3_V100_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -26,7 +26,7 @@ #ifdef GL_ES precision mediump float; #endif -#extension foo : require // error extension not supported +#extension foo : require // error extension not supported void main() { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function10_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function10_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function10_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function10_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -26,16 +26,16 @@ #ifdef GL_ES precision mediump float; #endif -void function(in int i); +void function(in int i); void main() { float f; // overloaded function not present - function(f); + function(f); } -void function(in int i) -{ +void function(in int i) +{ i = 3; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function1_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function1_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function1_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function1_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -26,7 +26,7 @@ #ifdef GL_ES precision mediump float; #endif -void function(int i) +void function(int i) { return i; // void function cannot return a value } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function3_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function3_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -26,7 +26,7 @@ #ifdef GL_ES precision mediump float; #endif -void function(const int i) +void function(const int i) { i = 3; // const value cant be modified } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function4_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function4_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -28,9 +28,9 @@ #endif uniform int uniformInt; -void function(out int i) +void function(out int i) { - i = 1; + i = 1; } void main() diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function6_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function6_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function6_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function6_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -26,7 +26,7 @@ #ifdef GL_ES precision mediump float; #endif -void function(const out int i) +void function(const out int i) { // out parameters cannot be const i = 3; } @@ -34,7 +34,7 @@ void main() { int i; - function(i); + function(i); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function7_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function7_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function7_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function7_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -26,14 +26,14 @@ #ifdef GL_ES precision mediump float; #endif -void function(uniform int i) +void function(uniform int i) { // uniform qualifier cannot be used with function parameters } void main() { int i; - function(i); + function(i); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function8_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function8_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function8_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function8_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -26,7 +26,7 @@ #ifdef GL_ES precision mediump float; #endif -void function(const inout int i) +void function(const inout int i) { // inout parameters cannot be const i = 3; } @@ -34,7 +34,7 @@ void main() { int i; - function(i); + function(i); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function9_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function9_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function9_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/function9_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -26,16 +26,16 @@ #ifdef GL_ES precision mediump float; #endif -void function(inout int i); +void function(inout int i); void main() { int i; - function(i); + function(i); } // function definition has different parameter qualifiers than function declaration -void function(in int i) -{ +void function(in int i) +{ i = 3; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/parser1_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/parser1_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/parser1_vert.vert 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/parser1_vert.vert 2017-01-16 01:35:05.000000000 +0000 @@ -26,5 +26,5 @@ void main() { int a // semicolon missing at the end of the statement - gl_Position = vec4(a); + gl_Position = vec4(a); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess0_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess0_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess0_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess0_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -36,12 +36,12 @@ #if (x==8) #undef x #endif - + #if 1 #undef x #endif - #if 1 + #if 1 #define t4 4 #endif @@ -56,13 +56,13 @@ #if 1 #undef test #endif - #if 0 + #if 0 #undef test #else #if 0 #undef test #else - #if 1 + #if 1 #undef test #else #undef test @@ -75,6 +75,6 @@ #endif #endif #endif - #endif - + #endif + } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess1_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess1_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess1_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess1_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -27,11 +27,11 @@ precision mediump float; #endif // tests for macro redifinition (t2) and the #if and #else nestings. -// takes care of elif also. +// takes care of elif also. -#define t1 (1+2) +#define t1 (1+2) #define t2 2 -#define t2 3 +#define t2 3 // testing the if depth #if (t1==3) @@ -65,11 +65,11 @@ #endif -#define t8 8 -#define t9 9 +#define t8 8 +#define t9 9 #define t10 10 -void main(void) +void main(void) { int sum=1 ; sum = t1+t2; @@ -77,5 +77,5 @@ sum = t5+t6; sum = t7+t8; sum = t9+t10; -} - +} + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess2_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess2_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -38,14 +38,14 @@ # # #line 8 -#line "" +#line "" #line 3 3 #linekfj -#line c c +#line c c #line t1 t2 #line 77 89 -#line 65.4 +#line 65.4 #line message to the user #line #line345 @@ -73,5 +73,5 @@ } - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess3_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess3_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -54,7 +54,7 @@ sum = 8+58+sum; sum = sum +test; sum = (t1+t2); - sum = test4(test3(),test2(test3())); + sum = test4(test3(),test2(test3())); sum = test4(3,8,5); sum = test4(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess4_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess4_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -42,7 +42,7 @@ #error c #error "message to the user " #error message to the user - #error + #error #error #define t1 1 sum = t1*t1; @@ -71,7 +71,7 @@ #prgma bind(off) #pragma bind #pragma (on) -#pragma on (on) +#pragma on (on) #pragma optmize(on - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess7_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess7_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess7_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/preprocess7_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -40,7 +40,7 @@ #elif(t2==c) #define t5 5 #endif - + #ifndef t1 #define t7 7 #elif (t2==d) @@ -60,9 +60,9 @@ void main(void) { int sum =0,a=9; - + sum = half + sum; sum = asm + a; - + } - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/TernaryOp_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/TernaryOp_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/TernaryOp_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/TernaryOp_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -31,5 +31,5 @@ mat4 m; vec4 v; bool b; - gl_FragColor = b ? v : m; + gl_FragColor = b ? v : m; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/typecast_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/typecast_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/typecast_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/typecast_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -29,5 +29,5 @@ void main() { vec4 v; - vec4 v1 = (vec4) v; // incorrect typecasting, vec4(v) is correct + vec4 v1 = (vec4) v; // incorrect typecasting, vec4(v) is correct } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/varying2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/varying2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/varying2_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/varying2_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -30,5 +30,5 @@ void main() { - + } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/varying3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/varying3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/varying3_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/varying3_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -30,5 +30,5 @@ void main() { - + } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/version2_V100_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/version2_V100_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/version2_V100_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/version2_V100_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -32,5 +32,5 @@ void main() { - gl_FragColor = vec4(1); + gl_FragColor = vec4(1); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/version3_V100_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/version3_V100_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/version3_V100_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/build/version3_V100_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -32,5 +32,5 @@ void main() { - gl_FragColor = vec4(1); + gl_FragColor = vec4(1); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/built_in_varying_array_out_of_bounds/built_in_varying_array_out_of_bounds_001_to_001.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/built_in_varying_array_out_of_bounds/built_in_varying_array_out_of_bounds_001_to_001.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/built_in_varying_array_out_of_bounds/built_in_varying_array_out_of_bounds_001_to_001.html 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/built_in_varying_array_out_of_bounds/built_in_varying_array_out_of_bounds_001_to_001.html 2017-01-16 01:35:05.000000000 +0000 @@ -45,13 +45,13 @@ OpenGLESTestRunner.run({ "tests": [ { - "pattern": "build", + "pattern": "build", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "gl_Color_array_index_out_of_bounds_frag.frag" - }, - "name": "gl_Color_array_index_out_of_bounds_frag.test.html", - "linkstat": false, + }, + "name": "gl_Color_array_index_out_of_bounds_frag.test.html", + "linkstat": false, "compstat": false } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/built_in_varying_array_out_of_bounds/gl_Color_array_index_out_of_bounds_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/built_in_varying_array_out_of_bounds/gl_Color_array_index_out_of_bounds_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/built_in_varying_array_out_of_bounds/gl_Color_array_index_out_of_bounds_frag.frag 2017-01-13 01:35:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/built_in_varying_array_out_of_bounds/gl_Color_array_index_out_of_bounds_frag.frag 2017-01-16 01:35:05.000000000 +0000 @@ -29,5 +29,5 @@ varying vec4 color; void main(void) { - gl_FragColor = vec4(color[1], color[2], color[3], color[4]); + gl_FragColor = vec4(color[1], color[2], color[3], color[4]); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/ceil/ceil_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/ceil/ceil_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/ceil/ceil_001_to_006.html 2017-01-13 01:35:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/ceil/ceil_001_to_006.html 2017-01-16 01:35:05.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ceil_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ceil_float_frag_xvary.frag" - }, - "name": "ceil_float_frag_xvary.test.html", + }, + "name": "ceil_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ceil_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ceil_vec2_frag_xvary.frag" - }, - "name": "ceil_vec2_frag_xvary.test.html", + }, + "name": "ceil_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ceil_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ceil_vec3_frag_xvary.frag" - }, - "name": "ceil_vec3_frag_xvary.test.html", + }, + "name": "ceil_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "ceil_float_vert_xvary_ref.vert", + "vertexShader": "ceil_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "ceil_float_vert_xvary.vert", + "vertexShader": "ceil_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "ceil_float_vert_xvary.test.html", + }, + "name": "ceil_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "ceil_vec2_vert_xvary_ref.vert", + "vertexShader": "ceil_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "ceil_vec2_vert_xvary.vert", + "vertexShader": "ceil_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "ceil_vec2_vert_xvary.test.html", + }, + "name": "ceil_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "ceil_vec3_vert_xvary_ref.vert", + "vertexShader": "ceil_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "ceil_vec3_vert_xvary.vert", + "vertexShader": "ceil_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "ceil_vec3_vert_xvary.test.html", + }, + "name": "ceil_vec3_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/clamp/clamp_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/clamp/clamp_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/clamp/clamp_001_to_006.html 2017-01-13 01:35:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/clamp/clamp_001_to_006.html 2017-01-16 01:35:05.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "clamp_float_frag_xvary_yconstquarter_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "clamp_float_frag_xvary_yconstquarter.frag" - }, - "name": "clamp_float_frag_xvary_yconstquarter.test.html", + }, + "name": "clamp_float_frag_xvary_yconstquarter.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "clamp_vec2_frag_xvary_yconstquarter_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "clamp_vec2_frag_xvary_yconstquarter.frag" - }, - "name": "clamp_vec2_frag_xvary_yconstquarter.test.html", + }, + "name": "clamp_vec2_frag_xvary_yconstquarter.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "clamp_vec3_frag_xvary_yconstquarter_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "clamp_vec3_frag_xvary_yconstquarter.frag" - }, - "name": "clamp_vec3_frag_xvary_yconstquarter.test.html", + }, + "name": "clamp_vec3_frag_xvary_yconstquarter.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "clamp_float_vert_xvary_yconstquarter_ref.vert", + "vertexShader": "clamp_float_vert_xvary_yconstquarter_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "clamp_float_vert_xvary_yconstquarter.vert", + "vertexShader": "clamp_float_vert_xvary_yconstquarter.vert", "fragmentShader": "../default/default.frag" - }, - "name": "clamp_float_vert_xvary_yconstquarter.test.html", + }, + "name": "clamp_float_vert_xvary_yconstquarter.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "clamp_vec2_vert_xvary_yconstquarter_ref.vert", + "vertexShader": "clamp_vec2_vert_xvary_yconstquarter_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "clamp_vec2_vert_xvary_yconstquarter.vert", + "vertexShader": "clamp_vec2_vert_xvary_yconstquarter.vert", "fragmentShader": "../default/default.frag" - }, - "name": "clamp_vec2_vert_xvary_yconstquarter.test.html", + }, + "name": "clamp_vec2_vert_xvary_yconstquarter.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "clamp_vec3_vert_xvary_yconstquarter_ref.vert", + "vertexShader": "clamp_vec3_vert_xvary_yconstquarter_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "clamp_vec3_vert_xvary_yconstquarter.vert", + "vertexShader": "clamp_vec3_vert_xvary_yconstquarter.vert", "fragmentShader": "../default/default.frag" - }, - "name": "clamp_vec3_vert_xvary_yconstquarter.test.html", + }, + "name": "clamp_vec3_vert_xvary_yconstquarter.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/control_flow_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/control_flow_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/control_flow_001_to_008.html 2017-01-13 01:35:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/control_flow_001_to_008.html 2017-01-16 01:35:06.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "for_break_frag.frag" - }, - "name": "for_break_frag.test.html", + }, + "name": "for_break_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "for_break_vert.vert", + "vertexShader": "for_break_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "for_break_vert.test.html", + }, + "name": "for_break_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "for_continue_frag.frag" - }, - "name": "for_continue_frag.test.html", + }, + "name": "for_continue_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "for_continue_vert.vert", + "vertexShader": "for_continue_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "for_continue_vert.test.html", + }, + "name": "for_continue_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "for_nested_break_frag.frag" - }, - "name": "for_nested_break_frag.test.html", + }, + "name": "for_nested_break_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "for_nested_break_vert.vert", + "vertexShader": "for_nested_break_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "for_nested_break_vert.test.html", + }, + "name": "for_nested_break_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "for_nested_continue_frag.frag" - }, - "name": "for_nested_continue_frag.test.html", + }, + "name": "for_nested_continue_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "for_nested_continue_vert.vert", + "vertexShader": "for_nested_continue_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "for_nested_continue_vert.test.html", + }, + "name": "for_nested_continue_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/control_flow_009_to_010.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/control_flow_009_to_010.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/control_flow_009_to_010.html 2017-01-13 01:35:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/control_flow_009_to_010.html 2017-01-16 01:35:06.000000000 +0000 @@ -46,52 +46,52 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "nested_if_else_frag.frag" - }, - "name": "nested_if_else_frag.test.html", + }, + "name": "nested_if_else_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "nested_if_else_vert.vert", + "vertexShader": "nested_if_else_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "nested_if_else_vert.test.html", + }, + "name": "nested_if_else_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/for_continue_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/for_continue_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/for_continue_vert.vert 2017-01-13 01:35:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/for_continue_vert.vert 2017-01-16 01:35:06.000000000 +0000 @@ -36,10 +36,10 @@ count++; if(count == 5) continue; - else + else val += count; } - + float gray; if( val == 50) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/for_nested_continue_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/for_nested_continue_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/for_nested_continue_frag.frag 2017-01-13 01:35:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/for_nested_continue_frag.frag 2017-01-16 01:35:06.000000000 +0000 @@ -43,15 +43,15 @@ continue; else val2 += count2; - + } - + if(count1 == 2) continue; - else + else val1 += count1; - + } float gray; if( (val1 == 8) && (val2 == 32) ) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/for_nested_continue_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/for_nested_continue_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/for_nested_continue_vert.vert 2017-01-13 01:35:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/for_nested_continue_vert.vert 2017-01-16 01:35:06.000000000 +0000 @@ -42,15 +42,15 @@ continue; else val2 += count2; - + } - + if(count1 == 5) continue; - else + else val1 += count1; - + } float gray; if( (val1 == 50) && (val2 == 500) ) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/nested_if_else_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/nested_if_else_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/nested_if_else_frag.frag 2017-01-13 01:35:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/nested_if_else_frag.frag 2017-01-16 01:35:06.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { int setval = 30; - + if(--setval!=29) if( (setval+=11) == 40) if(setval/4 == 11) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/nested_if_else_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/nested_if_else_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/nested_if_else_vert.vert 2017-01-13 01:35:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/control_flow/nested_if_else_vert.vert 2017-01-16 01:35:06.000000000 +0000 @@ -30,7 +30,7 @@ void main (void) { int setval = 30; - + if(--setval!=29) if( (setval+=11) == 40) if(setval/4 == 11) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_001_to_006.html 2017-01-13 01:35:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_001_to_006.html 2017-01-16 01:35:06.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "cos_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "cos_float_frag_xvary.frag" - }, - "name": "cos_float_frag_xvary.test.html", + }, + "name": "cos_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "cos_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "cos_vec2_frag_xvary.frag" - }, - "name": "cos_vec2_frag_xvary.test.html", + }, + "name": "cos_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "cos_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "cos_vec3_frag_xvary.frag" - }, - "name": "cos_vec3_frag_xvary.test.html", + }, + "name": "cos_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "cos_float_vert_xvary_ref.vert", + "vertexShader": "cos_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "cos_float_vert_xvary.vert", + "vertexShader": "cos_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "cos_float_vert_xvary.test.html", + }, + "name": "cos_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "cos_vec2_vert_xvary_ref.vert", + "vertexShader": "cos_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "cos_vec2_vert_xvary.vert", + "vertexShader": "cos_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "cos_vec2_vert_xvary.test.html", + }, + "name": "cos_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "cos_vec3_vert_xvary_ref.vert", + "vertexShader": "cos_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "cos_vec3_vert_xvary.vert", + "vertexShader": "cos_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "cos_vec3_vert_xvary.test.html", + }, + "name": "cos_vec3_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_float_frag_xvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_float_frag_xvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_float_frag_xvary_ref.frag 2017-01-13 01:35:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_float_frag_xvary_ref.frag 2017-01-16 01:35:06.000000000 +0000 @@ -37,34 +37,34 @@ float fact_even = 1.0; float fact_odd = 1.0; float sum; - + // At this point c is in the range [-PI, PI) - + // Taylor-Maclaurin series expansion for cosine - // + // // Apply the property that pow(a, b + c) = pow(a, b) * pow(a, c) // and the property that 1.0/(a*b) = 1.0/a * 1.0/b // to make sure no register ever overflows the range (-16384, +16384) // mandated for mediump variables. - + for(int i = 2; i <= 10; i += 2) { // fact_even will hold at most the value 3840. fact_even *= float(i); - + // fact_odd will always be smaller than fact_even fact_odd *= float(i-1); - + // pow(c, float(i/2)) takes at most the value pow(PI, 5), which is approx. 306 // abs(sum) is at most PI/2.0 sum = sign * pow(abs(c), float(i/2))/fact_even; - + // abs(sum/fact_odd) is at most PI/2.0 // cos_c is always bound in the range [-1.0, 1.0) cos_c += pow(abs(c), float(i/2))*(sum/fact_odd); - + sign = -sign; } - + gl_FragColor = vec4(0.5 * cos_c + 0.5, 0.0, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_float_vert_xvary_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_float_vert_xvary_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_float_vert_xvary_ref.vert 2017-01-13 01:35:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_float_vert_xvary_ref.vert 2017-01-16 01:35:06.000000000 +0000 @@ -45,6 +45,6 @@ } color = vec4(0.5 * cos_c + 0.5, 0.0, 0.0, 1.0); - + gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_vec2_frag_xvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_vec2_frag_xvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_vec2_frag_xvary_ref.frag 2017-01-13 01:35:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_vec2_frag_xvary_ref.frag 2017-01-16 01:35:06.000000000 +0000 @@ -38,37 +38,37 @@ float fact_odd = 1.0; vec2 sum; vec2 exp; - + // At this point c is in the range [-PI, PI) - + // Taylor-Maclaurin series expansion for cosine - // + // // Apply the property that pow(a, b + c) = pow(a, b) * pow(a, c) // and the property that 1.0/(a*b) = 1.0/a * 1.0/b // to make sure no register ever overflows the range (-16384, +16384) // mandated for mediump variables. - + for(int i = 2; i <= 10; i += 2) { // fact_even will hold at most the value 3840. fact_even *= float(i); - + // fact_odd will always be smaller than fact_even fact_odd *= float(i-1); - + // exp is at most (5,5) exp = vec2(float(i/2), float(i/2)); - + // pow(c, exp) takes at most the value pow(PI, 5), which is approx. 306 // abs(sum) is at most PI/2.0 sum = sign * pow(abs(c), exp)/fact_even; - + // abs(sum/fact_odd) is at most PI/2.0 // cos_c is always bound in the range [-1.0, 1.0) cos_c += pow(abs(c), exp)*(sum/fact_odd); - + sign = -sign; } - + gl_FragColor = vec4(0.5 * cos_c + 0.5, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_vec2_vert_xvary_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_vec2_vert_xvary_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_vec2_vert_xvary_ref.vert 2017-01-13 01:35:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_vec2_vert_xvary_ref.vert 2017-01-16 01:35:06.000000000 +0000 @@ -45,6 +45,6 @@ } color = vec4(0.5 * cos_c + 0.5, 0.0, 1.0); - + gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_vec3_frag_xvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_vec3_frag_xvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_vec3_frag_xvary_ref.frag 2017-01-13 01:35:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cos/cos_vec3_frag_xvary_ref.frag 2017-01-16 01:35:06.000000000 +0000 @@ -38,37 +38,37 @@ float fact_odd = 1.0; vec3 sum; vec3 exp; - + // At this point c is in the range [-PI, PI) - + // Taylor-Maclaurin series expansion for cosine - // + // // Apply the property that pow(a, b + c) = pow(a, b) * pow(a, c) // and the property that 1.0/(a*b) = 1.0/a * 1.0/b // to make sure no register ever overflows the range (-16384, +16384) // mandated for mediump variables. - + for(int i = 2; i <= 10; i += 2) { // fact_even will hold at most the value 3840. fact_even *= float(i); - + // fact_odd will always be smaller than fact_even fact_odd *= float(i-1); - + // exp is at most (5,5,5) exp = vec3(float(i/2), float(i/2), float(i/2)); - + // pow(c, exp) takes at most the value pow(PI, 5), which is approx. 306 // abs(sum) is at most PI/2.0 sum = sign * pow(abs(c), exp)/fact_even; - + // abs(sum/fact_odd) is at most PI/2.0 // cos_c is always bound in the range [-1.0, 1.0) cos_c += pow(abs(c), exp)*(sum/fact_odd); - + sign = -sign; } - + gl_FragColor = vec4(0.5 * cos_c + 0.5, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cross/cross_001_to_002.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cross/cross_001_to_002.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cross/cross_001_to_002.html 2017-01-13 01:35:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/cross/cross_001_to_002.html 2017-01-16 01:35:06.000000000 +0000 @@ -46,28 +46,28 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "cross_vec3_frag_xvaryyconst_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "cross_vec3_frag_xvaryyconst.frag" - }, - "name": "cross_vec3_frag_xvaryyconst.test.html", + }, + "name": "cross_vec3_frag_xvaryyconst.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "cross_vec3_vert_xvaryyconst_ref.vert", + "vertexShader": "cross_vec3_vert_xvaryyconst_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "cross_vec3_vert_xvaryyconst.vert", + "vertexShader": "cross_vec3_vert_xvaryyconst.vert", "fragmentShader": "../default/default.frag" - }, - "name": "cross_vec3_vert_xvaryyconst.test.html", + }, + "name": "cross_vec3_vert_xvaryyconst.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/default/default_001_to_001.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/default/default_001_to_001.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/default/default_001_to_001.html 2017-01-13 01:35:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/default/default_001_to_001.html 2017-01-16 01:35:06.000000000 +0000 @@ -46,15 +46,15 @@ "tests": [ { "referenceProgram": { - "vertexShader": "default.vert", + "vertexShader": "default.vert", "fragmentShader": "default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "default.vert", + "vertexShader": "default.vert", "fragmentShader": "default.frag" - }, - "name": "default.test.html", + }, + "name": "default.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/degrees/degrees_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/degrees/degrees_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/degrees/degrees_001_to_006.html 2017-01-13 01:35:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/degrees/degrees_001_to_006.html 2017-01-16 01:35:06.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "degrees_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "degrees_float_frag_xvary.frag" - }, - "name": "degrees_float_frag_xvary.test.html", + }, + "name": "degrees_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "degrees_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "degrees_vec2_frag_xvary.frag" - }, - "name": "degrees_vec2_frag_xvary.test.html", + }, + "name": "degrees_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "degrees_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "degrees_vec3_frag_xvary.frag" - }, - "name": "degrees_vec3_frag_xvary.test.html", + }, + "name": "degrees_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "degrees_float_vert_xvary_ref.vert", + "vertexShader": "degrees_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "degrees_float_vert_xvary.vert", + "vertexShader": "degrees_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "degrees_float_vert_xvary.test.html", + }, + "name": "degrees_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "degrees_vec2_vert_xvary_ref.vert", + "vertexShader": "degrees_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "degrees_vec2_vert_xvary.vert", + "vertexShader": "degrees_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "degrees_vec2_vert_xvary.test.html", + }, + "name": "degrees_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "degrees_vec3_vert_xvary_ref.vert", + "vertexShader": "degrees_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "degrees_vec3_vert_xvary.vert", + "vertexShader": "degrees_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "degrees_vec3_vert_xvary.test.html", + }, + "name": "degrees_vec3_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/discard/discard_001_to_002.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/discard/discard_001_to_002.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/discard/discard_001_to_002.html 2017-01-13 01:35:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/discard/discard_001_to_002.html 2017-01-16 01:35:06.000000000 +0000 @@ -46,40 +46,40 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 0.0, - 0.0, - 0.0, + 0.0, + 0.0, + 0.0, 0.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "discard_frag.frag" - }, - "name": "discard_frag.test.html", + }, + "name": "discard_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "discard_cond_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "discard_cond_frag.frag" - }, - "name": "discard_cond_frag.test.html", + }, + "name": "discard_cond_frag.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/discard/discard_cond_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/discard/discard_cond_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/discard/discard_cond_frag.frag 2017-01-13 01:35:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/discard/discard_cond_frag.frag 2017-01-16 01:35:06.000000000 +0000 @@ -34,8 +34,8 @@ if(color.r > 0.75) toDiscard = true; else if(color.g > 0.75) toDiscard = true; else if(color.b > 0.75) toDiscard = true; - + if (toDiscard) discard; - + gl_FragColor = color; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/distance/distance_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/distance/distance_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/distance/distance_001_to_006.html 2017-01-13 01:35:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/distance/distance_001_to_006.html 2017-01-16 01:35:06.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "distance_float_frag_xvaryyhalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "distance_float_frag_xvaryyhalf.frag" - }, - "name": "distance_float_frag_xvaryyhalf.test.html", + }, + "name": "distance_float_frag_xvaryyhalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "distance_vec2_frag_xvaryyhalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "distance_vec2_frag_xvaryyhalf.frag" - }, - "name": "distance_vec2_frag_xvaryyhalf.test.html", + }, + "name": "distance_vec2_frag_xvaryyhalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "distance_vec3_frag_xvaryyhalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "distance_vec3_frag_xvaryyhalf.frag" - }, - "name": "distance_vec3_frag_xvaryyhalf.test.html", + }, + "name": "distance_vec3_frag_xvaryyhalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "distance_float_vert_xvaryyhalf_ref.vert", + "vertexShader": "distance_float_vert_xvaryyhalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "distance_float_vert_xvaryyhalf.vert", + "vertexShader": "distance_float_vert_xvaryyhalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "distance_float_vert_xvaryyhalf.test.html", + }, + "name": "distance_float_vert_xvaryyhalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "distance_vec2_vert_xvaryyhalf_ref.vert", + "vertexShader": "distance_vec2_vert_xvaryyhalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "distance_vec2_vert_xvaryyhalf.vert", + "vertexShader": "distance_vec2_vert_xvaryyhalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "distance_vec2_vert_xvaryyhalf.test.html", + }, + "name": "distance_vec2_vert_xvaryyhalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "distance_vec3_vert_xvaryyhalf_ref.vert", + "vertexShader": "distance_vec3_vert_xvaryyhalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "distance_vec3_vert_xvaryyhalf.vert", + "vertexShader": "distance_vec3_vert_xvaryyhalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "distance_vec3_vert_xvaryyhalf.test.html", + }, + "name": "distance_vec3_vert_xvaryyhalf.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/dot/dot_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/dot/dot_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/dot/dot_001_to_006.html 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/dot/dot_001_to_006.html 2017-01-16 01:35:06.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dot_float_frag_xvaryyone_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dot_float_frag_xvaryyone.frag" - }, - "name": "dot_float_frag_xvaryyone.test.html", + }, + "name": "dot_float_frag_xvaryyone.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dot_vec2_frag_xvaryyhalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dot_vec2_frag_xvaryyhalf.frag" - }, - "name": "dot_vec2_frag_xvaryyhalf.test.html", + }, + "name": "dot_vec2_frag_xvaryyhalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dot_vec3_frag_xvaryythird_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "dot_vec3_frag_xvaryythird.frag" - }, - "name": "dot_vec3_frag_xvaryythird.test.html", + }, + "name": "dot_vec3_frag_xvaryythird.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "dot_float_vert_xvaryyone_ref.vert", + "vertexShader": "dot_float_vert_xvaryyone_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "dot_float_vert_xvaryyone.vert", + "vertexShader": "dot_float_vert_xvaryyone.vert", "fragmentShader": "../default/default.frag" - }, - "name": "dot_float_vert_xvaryyone.test.html", + }, + "name": "dot_float_vert_xvaryyone.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "dot_vec2_vert_xvaryyhalf_ref.vert", + "vertexShader": "dot_vec2_vert_xvaryyhalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "dot_vec2_vert_xvaryyhalf.vert", + "vertexShader": "dot_vec2_vert_xvaryyhalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "dot_vec2_vert_xvaryyhalf.test.html", + }, + "name": "dot_vec2_vert_xvaryyhalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "dot_vec3_vert_xvaryythird_ref.vert", + "vertexShader": "dot_vec3_vert_xvaryythird_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "dot_vec3_vert_xvaryythird.vert", + "vertexShader": "dot_vec3_vert_xvaryythird.vert", "fragmentShader": "../default/default.frag" - }, - "name": "dot_vec3_vert_xvaryythird.test.html", + }, + "name": "dot_vec3_vert_xvaryythird.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_001_to_008.html 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_001_to_008.html 2017-01-16 01:35:06.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "equal_vec2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "equal_vec2_frag.frag" - }, - "name": "equal_vec2_frag.test.html", + }, + "name": "equal_vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "equal_vec2_vert_ref.vert", + "vertexShader": "equal_vec2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "equal_vec2_vert.vert", + "vertexShader": "equal_vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "equal_vec2_vert.test.html", + }, + "name": "equal_vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "equal_vec3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "equal_vec3_frag.frag" - }, - "name": "equal_vec3_frag.test.html", + }, + "name": "equal_vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "equal_vec3_vert_ref.vert", + "vertexShader": "equal_vec3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "equal_vec3_vert.vert", + "vertexShader": "equal_vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "equal_vec3_vert.test.html", + }, + "name": "equal_vec3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "equal_ivec2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "equal_ivec2_frag.frag" - }, - "name": "equal_ivec2_frag.test.html", + }, + "name": "equal_ivec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "equal_ivec2_vert_ref.vert", + "vertexShader": "equal_ivec2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "equal_ivec2_vert.vert", + "vertexShader": "equal_ivec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "equal_ivec2_vert.test.html", + }, + "name": "equal_ivec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "equal_ivec3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "equal_ivec3_frag.frag" - }, - "name": "equal_ivec3_frag.test.html", + }, + "name": "equal_ivec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "equal_ivec3_vert_ref.vert", + "vertexShader": "equal_ivec3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "equal_ivec3_vert.vert", + "vertexShader": "equal_ivec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "equal_ivec3_vert.test.html", + }, + "name": "equal_ivec3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_009_to_012.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_009_to_012.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_009_to_012.html 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_009_to_012.html 2017-01-16 01:35:06.000000000 +0000 @@ -46,54 +46,54 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "equal_bvec2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "equal_bvec2_frag.frag" - }, - "name": "equal_bvec2_frag.test.html", + }, + "name": "equal_bvec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "equal_bvec2_vert_ref.vert", + "vertexShader": "equal_bvec2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "equal_bvec2_vert.vert", + "vertexShader": "equal_bvec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "equal_bvec2_vert.test.html", + }, + "name": "equal_bvec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "equal_bvec3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "equal_bvec3_frag.frag" - }, - "name": "equal_bvec3_frag.test.html", + }, + "name": "equal_bvec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "equal_bvec3_vert_ref.vert", + "vertexShader": "equal_bvec3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "equal_bvec3_vert.vert", + "vertexShader": "equal_bvec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "equal_bvec3_vert.test.html", + }, + "name": "equal_bvec3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec2_frag.frag 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec2_frag.frag 2017-01-16 01:35:06.000000000 +0000 @@ -35,6 +35,6 @@ void main (void) { vec2 c = floor(1.5 * color.rg); // 1/3 true, 2/3 false - vec2 result = vec2(equal(bvec2(c), bvec2(true))); + vec2 result = vec2(equal(bvec2(c), bvec2(true))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec2_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec2_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec2_frag_ref.frag 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec2_frag_ref.frag 2017-01-16 01:35:06.000000000 +0000 @@ -45,6 +45,6 @@ void main (void) { vec2 c = floor(1.5 * color.rg); // 1/3 true, 2/3 false - vec2 result = vec2(eq(bvec2(c), bvec2(true))); + vec2 result = vec2(eq(bvec2(c), bvec2(true))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec2_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec2_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec2_vert_ref.vert 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec2_vert_ref.vert 2017-01-16 01:35:06.000000000 +0000 @@ -41,7 +41,7 @@ void main (void) { vec2 c = floor(1.5 * gtf_Color.rg); // 1/3 true, 2/3 false - vec2 result = vec2(eq(bvec2(c), bvec2(true))); + vec2 result = vec2(eq(bvec2(c), bvec2(true))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec2_vert.vert 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec2_vert.vert 2017-01-16 01:35:06.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec2 c = floor(1.5 * gtf_Color.rg); // 1/3 true, 2/3 false - vec2 result = vec2(equal(bvec2(c), bvec2(true))); + vec2 result = vec2(equal(bvec2(c), bvec2(true))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec3_frag.frag 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec3_frag.frag 2017-01-16 01:35:06.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec3 c = floor(1.5 * color.rgb); // 1/3 true, 2/3 false - vec3 result = vec3(equal(bvec3(c), bvec3(true))); + vec3 result = vec3(equal(bvec3(c), bvec3(true))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec3_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec3_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec3_frag_ref.frag 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec3_frag_ref.frag 2017-01-16 01:35:06.000000000 +0000 @@ -43,6 +43,6 @@ void main (void) { vec3 c = floor(1.5 * color.rgb); // 1/3 true, 2/3 false - vec3 result = vec3(eq(bvec3(c), bvec3(true))); + vec3 result = vec3(eq(bvec3(c), bvec3(true))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec3_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec3_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec3_vert_ref.vert 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec3_vert_ref.vert 2017-01-16 01:35:06.000000000 +0000 @@ -43,7 +43,7 @@ void main (void) { vec3 c = floor(1.5 * gtf_Color.rgb); // 1/3 true, 2/3 false - vec3 result = vec3(eq(bvec3(c), bvec3(true))); + vec3 result = vec3(eq(bvec3(c), bvec3(true))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec3_vert.vert 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_bvec3_vert.vert 2017-01-16 01:35:06.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec3 c = floor(1.5 * gtf_Color.rgb); // 1/3 true, 2/3 false - vec3 result = vec3(equal(bvec3(c), bvec3(true))); + vec3 result = vec3(equal(bvec3(c), bvec3(true))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec2_frag.frag 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec2_frag.frag 2017-01-16 01:35:06.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(equal(ivec2(c), ivec2(0))); + vec2 result = vec2(equal(ivec2(c), ivec2(0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec2_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec2_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec2_frag_ref.frag 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec2_frag_ref.frag 2017-01-16 01:35:06.000000000 +0000 @@ -41,6 +41,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(eq(ivec2(c), ivec2(0))); + vec2 result = vec2(eq(ivec2(c), ivec2(0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec2_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec2_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec2_vert_ref.vert 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec2_vert_ref.vert 2017-01-16 01:35:06.000000000 +0000 @@ -41,7 +41,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(eq(ivec2(c), ivec2(0))); + vec2 result = vec2(eq(ivec2(c), ivec2(0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec2_vert.vert 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec2_vert.vert 2017-01-16 01:35:06.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(equal(ivec2(c), ivec2(0))); + vec2 result = vec2(equal(ivec2(c), ivec2(0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec3_frag.frag 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec3_frag.frag 2017-01-16 01:35:06.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(equal(ivec3(c), ivec3(0))); + vec3 result = vec3(equal(ivec3(c), ivec3(0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec3_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec3_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec3_frag_ref.frag 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec3_frag_ref.frag 2017-01-16 01:35:06.000000000 +0000 @@ -43,6 +43,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(eq(ivec3(c), ivec3(0))); + vec3 result = vec3(eq(ivec3(c), ivec3(0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec3_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec3_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec3_vert_ref.vert 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec3_vert_ref.vert 2017-01-16 01:35:06.000000000 +0000 @@ -43,7 +43,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(eq(ivec3(c), ivec3(0))); + vec3 result = vec3(eq(ivec3(c), ivec3(0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec3_vert.vert 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_ivec3_vert.vert 2017-01-16 01:35:06.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(equal(ivec3(c), ivec3(0))); + vec3 result = vec3(equal(ivec3(c), ivec3(0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec2_frag.frag 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec2_frag.frag 2017-01-16 01:35:06.000000000 +0000 @@ -35,6 +35,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(equal(c, vec2(0.0))); + vec2 result = vec2(equal(c, vec2(0.0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec2_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec2_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec2_frag_ref.frag 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec2_frag_ref.frag 2017-01-16 01:35:06.000000000 +0000 @@ -45,6 +45,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(eq(c, vec2(0.0))); + vec2 result = vec2(eq(c, vec2(0.0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec2_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec2_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec2_vert_ref.vert 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec2_vert_ref.vert 2017-01-16 01:35:06.000000000 +0000 @@ -41,7 +41,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(eq(c, vec2(0.0))); + vec2 result = vec2(eq(c, vec2(0.0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec2_vert.vert 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec2_vert.vert 2017-01-16 01:35:06.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(equal(c, vec2(0.0))); + vec2 result = vec2(equal(c, vec2(0.0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec3_frag.frag 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec3_frag.frag 2017-01-16 01:35:06.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(equal(c, vec3(0.0))); + vec3 result = vec3(equal(c, vec3(0.0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec3_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec3_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec3_frag_ref.frag 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec3_frag_ref.frag 2017-01-16 01:35:06.000000000 +0000 @@ -43,6 +43,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(eq(c, vec3(0.0))); + vec3 result = vec3(eq(c, vec3(0.0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec3_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec3_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec3_vert_ref.vert 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec3_vert_ref.vert 2017-01-16 01:35:06.000000000 +0000 @@ -43,7 +43,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(eq(c, vec3(0.0))); + vec3 result = vec3(eq(c, vec3(0.0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec3_vert.vert 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/equal/equal_vec3_vert.vert 2017-01-16 01:35:06.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(equal(c, vec3(0.0))); + vec3 result = vec3(equal(c, vec3(0.0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/exp/exp_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/exp/exp_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/exp/exp_001_to_008.html 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/exp/exp_001_to_008.html 2017-01-16 01:35:06.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp_float_frag_xvary.frag" - }, - "name": "exp_float_frag_xvary.test.html", + }, + "name": "exp_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp_vec2_frag_xvary.frag" - }, - "name": "exp_vec2_frag_xvary.test.html", + }, + "name": "exp_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp_vec3_frag_xvary.frag" - }, - "name": "exp_vec3_frag_xvary.test.html", + }, + "name": "exp_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp_float_frag_xvaryneg_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp_float_frag_xvaryneg.frag" - }, - "name": "exp_float_frag_xvaryneg.test.html", + }, + "name": "exp_float_frag_xvaryneg.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp_vec2_frag_xvaryneg_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp_vec2_frag_xvaryneg.frag" - }, - "name": "exp_vec2_frag_xvaryneg.test.html", + }, + "name": "exp_vec2_frag_xvaryneg.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp_vec3_frag_xvaryneg_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp_vec3_frag_xvaryneg.frag" - }, - "name": "exp_vec3_frag_xvaryneg.test.html", + }, + "name": "exp_vec3_frag_xvaryneg.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "exp_float_vert_xvary_ref.vert", + "vertexShader": "exp_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "exp_float_vert_xvary.vert", + "vertexShader": "exp_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "exp_float_vert_xvary.test.html", + }, + "name": "exp_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "exp_vec2_vert_xvary_ref.vert", + "vertexShader": "exp_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "exp_vec2_vert_xvary.vert", + "vertexShader": "exp_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "exp_vec2_vert_xvary.test.html", + }, + "name": "exp_vec2_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/exp/exp_009_to_012.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/exp/exp_009_to_012.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/exp/exp_009_to_012.html 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/exp/exp_009_to_012.html 2017-01-16 01:35:06.000000000 +0000 @@ -46,54 +46,54 @@ "tests": [ { "referenceProgram": { - "vertexShader": "exp_vec3_vert_xvary_ref.vert", + "vertexShader": "exp_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "exp_vec3_vert_xvary.vert", + "vertexShader": "exp_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "exp_vec3_vert_xvary.test.html", + }, + "name": "exp_vec3_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "exp_float_vert_xvaryneg_ref.vert", + "vertexShader": "exp_float_vert_xvaryneg_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "exp_float_vert_xvaryneg.vert", + "vertexShader": "exp_float_vert_xvaryneg.vert", "fragmentShader": "../default/default.frag" - }, - "name": "exp_float_vert_xvaryneg.test.html", + }, + "name": "exp_float_vert_xvaryneg.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "exp_vec2_vert_xvaryneg_ref.vert", + "vertexShader": "exp_vec2_vert_xvaryneg_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "exp_vec2_vert_xvaryneg.vert", + "vertexShader": "exp_vec2_vert_xvaryneg.vert", "fragmentShader": "../default/default.frag" - }, - "name": "exp_vec2_vert_xvaryneg.test.html", + }, + "name": "exp_vec2_vert_xvaryneg.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "exp_vec3_vert_xvaryneg_ref.vert", + "vertexShader": "exp_vec3_vert_xvaryneg_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "exp_vec3_vert_xvaryneg.vert", + "vertexShader": "exp_vec3_vert_xvaryneg.vert", "fragmentShader": "../default/default.frag" - }, - "name": "exp_vec3_vert_xvaryneg.test.html", + }, + "name": "exp_vec3_vert_xvaryneg.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/exp2/exp2_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/exp2/exp2_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/exp2/exp2_001_to_008.html 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/exp2/exp2_001_to_008.html 2017-01-16 01:35:06.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp2_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp2_float_frag_xvary.frag" - }, - "name": "exp2_float_frag_xvary.test.html", + }, + "name": "exp2_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp2_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp2_vec2_frag_xvary.frag" - }, - "name": "exp2_vec2_frag_xvary.test.html", + }, + "name": "exp2_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp2_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp2_vec3_frag_xvary.frag" - }, - "name": "exp2_vec3_frag_xvary.test.html", + }, + "name": "exp2_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp2_float_frag_xvaryneg_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp2_float_frag_xvaryneg.frag" - }, - "name": "exp2_float_frag_xvaryneg.test.html", + }, + "name": "exp2_float_frag_xvaryneg.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp2_vec2_frag_xvaryneg_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp2_vec2_frag_xvaryneg.frag" - }, - "name": "exp2_vec2_frag_xvaryneg.test.html", + }, + "name": "exp2_vec2_frag_xvaryneg.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp2_vec3_frag_xvaryneg_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "exp2_vec3_frag_xvaryneg.frag" - }, - "name": "exp2_vec3_frag_xvaryneg.test.html", + }, + "name": "exp2_vec3_frag_xvaryneg.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "exp2_float_vert_xvary_ref.vert", + "vertexShader": "exp2_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "exp2_float_vert_xvary.vert", + "vertexShader": "exp2_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "exp2_float_vert_xvary.test.html", + }, + "name": "exp2_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "exp2_vec2_vert_xvary_ref.vert", + "vertexShader": "exp2_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "exp2_vec2_vert_xvary.vert", + "vertexShader": "exp2_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "exp2_vec2_vert_xvary.test.html", + }, + "name": "exp2_vec2_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/exp2/exp2_009_to_012.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/exp2/exp2_009_to_012.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/exp2/exp2_009_to_012.html 2017-01-13 01:35:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/exp2/exp2_009_to_012.html 2017-01-16 01:35:06.000000000 +0000 @@ -46,54 +46,54 @@ "tests": [ { "referenceProgram": { - "vertexShader": "exp2_vec3_vert_xvary_ref.vert", + "vertexShader": "exp2_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "exp2_vec3_vert_xvary.vert", + "vertexShader": "exp2_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "exp2_vec3_vert_xvary.test.html", + }, + "name": "exp2_vec3_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "exp2_float_vert_xvaryneg_ref.vert", + "vertexShader": "exp2_float_vert_xvaryneg_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "exp2_float_vert_xvaryneg.vert", + "vertexShader": "exp2_float_vert_xvaryneg.vert", "fragmentShader": "../default/default.frag" - }, - "name": "exp2_float_vert_xvaryneg.test.html", + }, + "name": "exp2_float_vert_xvaryneg.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "exp2_vec2_vert_xvaryneg_ref.vert", + "vertexShader": "exp2_vec2_vert_xvaryneg_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "exp2_vec2_vert_xvaryneg.vert", + "vertexShader": "exp2_vec2_vert_xvaryneg.vert", "fragmentShader": "../default/default.frag" - }, - "name": "exp2_vec2_vert_xvaryneg.test.html", + }, + "name": "exp2_vec2_vert_xvaryneg.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "exp2_vec3_vert_xvaryneg_ref.vert", + "vertexShader": "exp2_vec3_vert_xvaryneg_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "exp2_vec3_vert_xvaryneg.vert", + "vertexShader": "exp2_vec3_vert_xvaryneg.vert", "fragmentShader": "../default/default.frag" - }, - "name": "exp2_vec3_vert_xvaryneg.test.html", + }, + "name": "exp2_vec3_vert_xvaryneg.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/faceforward/faceforward_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/faceforward/faceforward_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/faceforward/faceforward_001_to_006.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/faceforward/faceforward_001_to_006.html 2017-01-16 01:35:06.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "faceforward_float_frag_nvaryiconst_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "faceforward_float_frag_nvaryiconst.frag" - }, - "name": "faceforward_float_frag_nvaryiconst.test.html", + }, + "name": "faceforward_float_frag_nvaryiconst.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "faceforward_float_vert_nvaryiconst_ref.vert", + "vertexShader": "faceforward_float_vert_nvaryiconst_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "faceforward_float_vert_nvaryiconst.vert", + "vertexShader": "faceforward_float_vert_nvaryiconst.vert", "fragmentShader": "../default/default.frag" - }, - "name": "faceforward_float_vert_nvaryiconst.test.html", + }, + "name": "faceforward_float_vert_nvaryiconst.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "faceforward_vec2_frag_nvaryiconst_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "faceforward_vec2_frag_nvaryiconst.frag" - }, - "name": "faceforward_vec2_frag_nvaryiconst.test.html", + }, + "name": "faceforward_vec2_frag_nvaryiconst.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "faceforward_vec2_vert_nvaryiconst_ref.vert", + "vertexShader": "faceforward_vec2_vert_nvaryiconst_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "faceforward_vec2_vert_nvaryiconst.vert", + "vertexShader": "faceforward_vec2_vert_nvaryiconst.vert", "fragmentShader": "../default/default.frag" - }, - "name": "faceforward_vec2_vert_nvaryiconst.test.html", + }, + "name": "faceforward_vec2_vert_nvaryiconst.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "faceforward_vec3_frag_nvaryiconst_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "faceforward_vec3_frag_nvaryiconst.frag" - }, - "name": "faceforward_vec3_frag_nvaryiconst.test.html", + }, + "name": "faceforward_vec3_frag_nvaryiconst.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "faceforward_vec3_vert_nvaryiconst_ref.vert", + "vertexShader": "faceforward_vec3_vert_nvaryiconst_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "faceforward_vec3_vert_nvaryiconst.vert", + "vertexShader": "faceforward_vec3_vert_nvaryiconst.vert", "fragmentShader": "../default/default.frag" - }, - "name": "faceforward_vec3_vert_nvaryiconst.test.html", + }, + "name": "faceforward_vec3_vert_nvaryiconst.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/floor/floor_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/floor/floor_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/floor/floor_001_to_006.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/floor/floor_001_to_006.html 2017-01-16 01:35:27.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "floor_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "floor_float_frag_xvary.frag" - }, - "name": "floor_float_frag_xvary.test.html", + }, + "name": "floor_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "floor_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "floor_vec2_frag_xvary.frag" - }, - "name": "floor_vec2_frag_xvary.test.html", + }, + "name": "floor_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "floor_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "floor_vec3_frag_xvary.frag" - }, - "name": "floor_vec3_frag_xvary.test.html", + }, + "name": "floor_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "floor_float_vert_xvary_ref.vert", + "vertexShader": "floor_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "floor_float_vert_xvary.vert", + "vertexShader": "floor_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "floor_float_vert_xvary.test.html", + }, + "name": "floor_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "floor_vec2_vert_xvary_ref.vert", + "vertexShader": "floor_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "floor_vec2_vert_xvary.vert", + "vertexShader": "floor_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "floor_vec2_vert_xvary.test.html", + }, + "name": "floor_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "floor_vec3_vert_xvary_ref.vert", + "vertexShader": "floor_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "floor_vec3_vert_xvary.vert", + "vertexShader": "floor_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "floor_vec3_vert_xvary.test.html", + }, + "name": "floor_vec3_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/fract/fract_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/fract/fract_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/fract/fract_001_to_006.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/fract/fract_001_to_006.html 2017-01-16 01:36:23.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "fract_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "fract_float_frag_xvary.frag" - }, - "name": "fract_float_frag_xvary.test.html", + }, + "name": "fract_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "fract_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "fract_vec2_frag_xvary.frag" - }, - "name": "fract_vec2_frag_xvary.test.html", + }, + "name": "fract_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "fract_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "fract_vec3_frag_xvary.frag" - }, - "name": "fract_vec3_frag_xvary.test.html", + }, + "name": "fract_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "fract_float_vert_xvary_ref.vert", + "vertexShader": "fract_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "fract_float_vert_xvary.vert", + "vertexShader": "fract_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "fract_float_vert_xvary.test.html", + }, + "name": "fract_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "fract_vec2_vert_xvary_ref.vert", + "vertexShader": "fract_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "fract_vec2_vert_xvary.vert", + "vertexShader": "fract_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "fract_vec2_vert_xvary.test.html", + }, + "name": "fract_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "fract_vec3_vert_xvary_ref.vert", + "vertexShader": "fract_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "fract_vec3_vert_xvary.vert", + "vertexShader": "fract_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "fract_vec3_vert_xvary.test.html", + }, + "name": "fract_vec3_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/array_float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/array_float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/array_float_frag.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/array_float_frag.frag 2017-01-16 01:36:24.000000000 +0000 @@ -36,17 +36,17 @@ c[0] += d[0]; a[0] += 1.0; e[0] += 1.0; - + b[1] = a[1]; c[1] += d[1]; a[1] += 1.0; e[1] += 1.0; - + b[2] = a[2]; c[2] += d[2]; a[2] += 1.0; e[2] += 1.0; - + b[3] = a[3]; c[3] += d[3]; a[3] += 1.0; @@ -70,19 +70,19 @@ c[0] = 3.0; d[0] = 4.0; e[0] = 1.0; - + a[1] = 1.0; b[1] = 2.0; c[1] = 3.0; d[1] = 4.0; e[1] = 1.0; - + a[2] = 1.0; b[2] = 2.0; c[2] = 3.0; d[2] = 4.0; e[2] = 1.0; - + a[3] = 1.0; b[3] = 2.0; c[3] = 3.0; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/array_float_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/array_float_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/array_float_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/array_float_vert.vert 2017-01-16 01:36:24.000000000 +0000 @@ -35,17 +35,17 @@ c[0] += d[0]; a[0] += 1.0; e[0] += 1.0; - + b[1] = a[1]; c[1] += d[1]; a[1] += 1.0; e[1] += 1.0; - + b[2] = a[2]; c[2] += d[2]; a[2] += 1.0; e[2] += 1.0; - + b[3] = a[3]; c[3] += d[3]; a[3] += 1.0; @@ -70,19 +70,19 @@ c[0] = 3.0; d[0] = 4.0; e[0] = 1.0; - + a[1] = 1.0; b[1] = 2.0; c[1] = 3.0; d[1] = 4.0; e[1] = 1.0; - + a[2] = 1.0; b[2] = 2.0; c[2] = 3.0; d[2] = 4.0; e[2] = 1.0; - + a[3] = 1.0; b[3] = 2.0; c[3] = 3.0; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/bvec4_empty_empty_bvec4_array_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/bvec4_empty_empty_bvec4_array_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/bvec4_empty_empty_bvec4_array_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/bvec4_empty_empty_bvec4_array_vert.vert 2017-01-16 01:36:24.000000000 +0000 @@ -89,7 +89,7 @@ bool is_all(const in bvec4 array[3], const in bvec4 value) { bool ret = true; - + if(array[0] != value) ret = false; if(array[1] != value) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_001_to_008.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_001_to_008.html 2017-01-16 01:36:25.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "qualifiers_float_vert.vert", + "vertexShader": "qualifiers_float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "qualifiers_float_vert.test.html", + }, + "name": "qualifiers_float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "qualifiers_float_frag.frag" - }, - "name": "qualifiers_float_frag.test.html", + }, + "name": "qualifiers_float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "qualifiers_struct_vert.vert", + "vertexShader": "qualifiers_struct_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "qualifiers_struct_vert.test.html", + }, + "name": "qualifiers_struct_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "qualifiers_struct_frag.frag" - }, - "name": "qualifiers_struct_frag.test.html", + }, + "name": "qualifiers_struct_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "array_float_vert.vert", + "vertexShader": "array_float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "array_float_vert.test.html", + }, + "name": "array_float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "array_float_frag.frag" - }, - "name": "array_float_frag.test.html", + }, + "name": "array_float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "void_empty_empty_void_empty_frag.frag" - }, - "name": "void_empty_empty_void_empty_frag.test.html", + }, + "name": "void_empty_empty_void_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "void_empty_empty_void_empty_vert.vert", + "vertexShader": "void_empty_empty_void_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "void_empty_empty_void_empty_vert.test.html", + }, + "name": "void_empty_empty_void_empty_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_009_to_016.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_009_to_016.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_009_to_016.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_009_to_016.html 2017-01-16 01:36:25.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bool_empty_empty_bool_empty_frag.frag" - }, - "name": "bool_empty_empty_bool_empty_frag.test.html", + }, + "name": "bool_empty_empty_bool_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bool_empty_empty_bool_empty_vert.vert", + "vertexShader": "bool_empty_empty_bool_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bool_empty_empty_bool_empty_vert.test.html", + }, + "name": "bool_empty_empty_bool_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bool_empty_empty_bool_array_frag.frag" - }, - "name": "bool_empty_empty_bool_array_frag.test.html", + }, + "name": "bool_empty_empty_bool_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bool_empty_empty_bool_array_vert.vert", + "vertexShader": "bool_empty_empty_bool_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bool_empty_empty_bool_array_vert.test.html", + }, + "name": "bool_empty_empty_bool_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bool_empty_in_bool_empty_frag.frag" - }, - "name": "bool_empty_in_bool_empty_frag.test.html", + }, + "name": "bool_empty_in_bool_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bool_empty_in_bool_empty_vert.vert", + "vertexShader": "bool_empty_in_bool_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bool_empty_in_bool_empty_vert.test.html", + }, + "name": "bool_empty_in_bool_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bool_empty_in_bool_array_frag.frag" - }, - "name": "bool_empty_in_bool_array_frag.test.html", + }, + "name": "bool_empty_in_bool_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bool_empty_in_bool_array_vert.vert", + "vertexShader": "bool_empty_in_bool_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bool_empty_in_bool_array_vert.test.html", + }, + "name": "bool_empty_in_bool_array_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_017_to_024.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_017_to_024.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_017_to_024.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_017_to_024.html 2017-01-16 01:36:25.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bool_empty_inout_bool_empty_frag.frag" - }, - "name": "bool_empty_inout_bool_empty_frag.test.html", + }, + "name": "bool_empty_inout_bool_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bool_empty_inout_bool_empty_vert.vert", + "vertexShader": "bool_empty_inout_bool_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bool_empty_inout_bool_empty_vert.test.html", + }, + "name": "bool_empty_inout_bool_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bool_empty_inout_bool_array_frag.frag" - }, - "name": "bool_empty_inout_bool_array_frag.test.html", + }, + "name": "bool_empty_inout_bool_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bool_empty_inout_bool_array_vert.vert", + "vertexShader": "bool_empty_inout_bool_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bool_empty_inout_bool_array_vert.test.html", + }, + "name": "bool_empty_inout_bool_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bool_empty_out_bool_empty_frag.frag" - }, - "name": "bool_empty_out_bool_empty_frag.test.html", + }, + "name": "bool_empty_out_bool_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bool_empty_out_bool_empty_vert.vert", + "vertexShader": "bool_empty_out_bool_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bool_empty_out_bool_empty_vert.test.html", + }, + "name": "bool_empty_out_bool_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bool_empty_out_bool_array_frag.frag" - }, - "name": "bool_empty_out_bool_array_frag.test.html", + }, + "name": "bool_empty_out_bool_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bool_empty_out_bool_array_vert.vert", + "vertexShader": "bool_empty_out_bool_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bool_empty_out_bool_array_vert.test.html", + }, + "name": "bool_empty_out_bool_array_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_025_to_032.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_025_to_032.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_025_to_032.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_025_to_032.html 2017-01-16 01:36:25.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "int_empty_empty_int_empty_frag.frag" - }, - "name": "int_empty_empty_int_empty_frag.test.html", + }, + "name": "int_empty_empty_int_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "int_empty_empty_int_empty_vert.vert", + "vertexShader": "int_empty_empty_int_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "int_empty_empty_int_empty_vert.test.html", + }, + "name": "int_empty_empty_int_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "int_empty_empty_int_array_frag.frag" - }, - "name": "int_empty_empty_int_array_frag.test.html", + }, + "name": "int_empty_empty_int_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "int_empty_empty_int_array_vert.vert", + "vertexShader": "int_empty_empty_int_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "int_empty_empty_int_array_vert.test.html", + }, + "name": "int_empty_empty_int_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "int_empty_in_int_empty_frag.frag" - }, - "name": "int_empty_in_int_empty_frag.test.html", + }, + "name": "int_empty_in_int_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "int_empty_in_int_empty_vert.vert", + "vertexShader": "int_empty_in_int_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "int_empty_in_int_empty_vert.test.html", + }, + "name": "int_empty_in_int_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "int_empty_in_int_array_frag.frag" - }, - "name": "int_empty_in_int_array_frag.test.html", + }, + "name": "int_empty_in_int_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "int_empty_in_int_array_vert.vert", + "vertexShader": "int_empty_in_int_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "int_empty_in_int_array_vert.test.html", + }, + "name": "int_empty_in_int_array_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_033_to_040.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_033_to_040.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_033_to_040.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_033_to_040.html 2017-01-16 01:36:25.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "int_empty_inout_int_empty_frag.frag" - }, - "name": "int_empty_inout_int_empty_frag.test.html", + }, + "name": "int_empty_inout_int_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "int_empty_inout_int_empty_vert.vert", + "vertexShader": "int_empty_inout_int_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "int_empty_inout_int_empty_vert.test.html", + }, + "name": "int_empty_inout_int_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "int_empty_inout_int_array_frag.frag" - }, - "name": "int_empty_inout_int_array_frag.test.html", + }, + "name": "int_empty_inout_int_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "int_empty_inout_int_array_vert.vert", + "vertexShader": "int_empty_inout_int_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "int_empty_inout_int_array_vert.test.html", + }, + "name": "int_empty_inout_int_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "int_empty_out_int_empty_frag.frag" - }, - "name": "int_empty_out_int_empty_frag.test.html", + }, + "name": "int_empty_out_int_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "int_empty_out_int_empty_vert.vert", + "vertexShader": "int_empty_out_int_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "int_empty_out_int_empty_vert.test.html", + }, + "name": "int_empty_out_int_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "int_empty_out_int_array_frag.frag" - }, - "name": "int_empty_out_int_array_frag.test.html", + }, + "name": "int_empty_out_int_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "int_empty_out_int_array_vert.vert", + "vertexShader": "int_empty_out_int_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "int_empty_out_int_array_vert.test.html", + }, + "name": "int_empty_out_int_array_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_041_to_048.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_041_to_048.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_041_to_048.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_041_to_048.html 2017-01-16 01:36:25.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "float_empty_empty_float_empty_frag.frag" - }, - "name": "float_empty_empty_float_empty_frag.test.html", + }, + "name": "float_empty_empty_float_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "float_empty_empty_float_empty_vert.vert", + "vertexShader": "float_empty_empty_float_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "float_empty_empty_float_empty_vert.test.html", + }, + "name": "float_empty_empty_float_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "float_empty_empty_float_array_frag.frag" - }, - "name": "float_empty_empty_float_array_frag.test.html", + }, + "name": "float_empty_empty_float_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "float_empty_empty_float_array_vert.vert", + "vertexShader": "float_empty_empty_float_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "float_empty_empty_float_array_vert.test.html", + }, + "name": "float_empty_empty_float_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "float_empty_in_float_empty_frag.frag" - }, - "name": "float_empty_in_float_empty_frag.test.html", + }, + "name": "float_empty_in_float_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "float_empty_in_float_empty_vert.vert", + "vertexShader": "float_empty_in_float_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "float_empty_in_float_empty_vert.test.html", + }, + "name": "float_empty_in_float_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "float_empty_in_float_array_frag.frag" - }, - "name": "float_empty_in_float_array_frag.test.html", + }, + "name": "float_empty_in_float_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "float_empty_in_float_array_vert.vert", + "vertexShader": "float_empty_in_float_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "float_empty_in_float_array_vert.test.html", + }, + "name": "float_empty_in_float_array_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_049_to_056.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_049_to_056.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_049_to_056.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_049_to_056.html 2017-01-16 01:36:25.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "float_empty_inout_float_empty_frag.frag" - }, - "name": "float_empty_inout_float_empty_frag.test.html", + }, + "name": "float_empty_inout_float_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "float_empty_inout_float_empty_vert.vert", + "vertexShader": "float_empty_inout_float_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "float_empty_inout_float_empty_vert.test.html", + }, + "name": "float_empty_inout_float_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "float_empty_inout_float_array_frag.frag" - }, - "name": "float_empty_inout_float_array_frag.test.html", + }, + "name": "float_empty_inout_float_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "float_empty_inout_float_array_vert.vert", + "vertexShader": "float_empty_inout_float_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "float_empty_inout_float_array_vert.test.html", + }, + "name": "float_empty_inout_float_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "float_empty_out_float_empty_frag.frag" - }, - "name": "float_empty_out_float_empty_frag.test.html", + }, + "name": "float_empty_out_float_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "float_empty_out_float_empty_vert.vert", + "vertexShader": "float_empty_out_float_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "float_empty_out_float_empty_vert.test.html", + }, + "name": "float_empty_out_float_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "float_empty_out_float_array_frag.frag" - }, - "name": "float_empty_out_float_array_frag.test.html", + }, + "name": "float_empty_out_float_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "float_empty_out_float_array_vert.vert", + "vertexShader": "float_empty_out_float_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "float_empty_out_float_array_vert.test.html", + }, + "name": "float_empty_out_float_array_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_057_to_064.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_057_to_064.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_057_to_064.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_057_to_064.html 2017-01-16 01:36:25.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bvec4_empty_empty_bvec4_empty_frag.frag" - }, - "name": "bvec4_empty_empty_bvec4_empty_frag.test.html", + }, + "name": "bvec4_empty_empty_bvec4_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bvec4_empty_empty_bvec4_empty_vert.vert", + "vertexShader": "bvec4_empty_empty_bvec4_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bvec4_empty_empty_bvec4_empty_vert.test.html", + }, + "name": "bvec4_empty_empty_bvec4_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bvec4_empty_empty_bvec4_array_frag.frag" - }, - "name": "bvec4_empty_empty_bvec4_array_frag.test.html", + }, + "name": "bvec4_empty_empty_bvec4_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bvec4_empty_empty_bvec4_array_vert.vert", + "vertexShader": "bvec4_empty_empty_bvec4_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bvec4_empty_empty_bvec4_array_vert.test.html", + }, + "name": "bvec4_empty_empty_bvec4_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bvec4_empty_in_bvec4_empty_frag.frag" - }, - "name": "bvec4_empty_in_bvec4_empty_frag.test.html", + }, + "name": "bvec4_empty_in_bvec4_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bvec4_empty_in_bvec4_empty_vert.vert", + "vertexShader": "bvec4_empty_in_bvec4_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bvec4_empty_in_bvec4_empty_vert.test.html", + }, + "name": "bvec4_empty_in_bvec4_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bvec4_empty_in_bvec4_array_frag.frag" - }, - "name": "bvec4_empty_in_bvec4_array_frag.test.html", + }, + "name": "bvec4_empty_in_bvec4_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bvec4_empty_in_bvec4_array_vert.vert", + "vertexShader": "bvec4_empty_in_bvec4_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bvec4_empty_in_bvec4_array_vert.test.html", + }, + "name": "bvec4_empty_in_bvec4_array_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_065_to_072.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_065_to_072.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_065_to_072.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_065_to_072.html 2017-01-16 01:36:25.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bvec4_empty_inout_bvec4_empty_frag.frag" - }, - "name": "bvec4_empty_inout_bvec4_empty_frag.test.html", + }, + "name": "bvec4_empty_inout_bvec4_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bvec4_empty_inout_bvec4_empty_vert.vert", + "vertexShader": "bvec4_empty_inout_bvec4_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bvec4_empty_inout_bvec4_empty_vert.test.html", + }, + "name": "bvec4_empty_inout_bvec4_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bvec4_empty_inout_bvec4_array_frag.frag" - }, - "name": "bvec4_empty_inout_bvec4_array_frag.test.html", + }, + "name": "bvec4_empty_inout_bvec4_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bvec4_empty_inout_bvec4_bigarray_frag.frag" - }, - "name": "bvec4_empty_inout_bvec4_bigarray_frag.test.html", + }, + "name": "bvec4_empty_inout_bvec4_bigarray_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bvec4_empty_inout_bvec4_array_vert.vert", + "vertexShader": "bvec4_empty_inout_bvec4_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bvec4_empty_inout_bvec4_array_vert.test.html", + }, + "name": "bvec4_empty_inout_bvec4_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bvec4_empty_inout_bvec4_bigarray_vert.vert", + "vertexShader": "bvec4_empty_inout_bvec4_bigarray_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bvec4_empty_inout_bvec4_bigarray_vert.test.html", + }, + "name": "bvec4_empty_inout_bvec4_bigarray_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bvec4_empty_out_bvec4_empty_frag.frag" - }, - "name": "bvec4_empty_out_bvec4_empty_frag.test.html", + }, + "name": "bvec4_empty_out_bvec4_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bvec4_empty_out_bvec4_empty_vert.vert", + "vertexShader": "bvec4_empty_out_bvec4_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bvec4_empty_out_bvec4_empty_vert.test.html", + }, + "name": "bvec4_empty_out_bvec4_empty_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_073_to_080.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_073_to_080.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_073_to_080.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_073_to_080.html 2017-01-16 01:36:25.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bvec4_empty_out_bvec4_array_frag.frag" - }, - "name": "bvec4_empty_out_bvec4_array_frag.test.html", + }, + "name": "bvec4_empty_out_bvec4_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bvec4_empty_out_bvec4_array_vert.vert", + "vertexShader": "bvec4_empty_out_bvec4_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bvec4_empty_out_bvec4_array_vert.test.html", + }, + "name": "bvec4_empty_out_bvec4_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ivec4_empty_empty_ivec4_empty_frag.frag" - }, - "name": "ivec4_empty_empty_ivec4_empty_frag.test.html", + }, + "name": "ivec4_empty_empty_ivec4_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "ivec4_empty_empty_ivec4_empty_vert.vert", + "vertexShader": "ivec4_empty_empty_ivec4_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "ivec4_empty_empty_ivec4_empty_vert.test.html", + }, + "name": "ivec4_empty_empty_ivec4_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ivec4_empty_empty_ivec4_array_frag.frag" - }, - "name": "ivec4_empty_empty_ivec4_array_frag.test.html", + }, + "name": "ivec4_empty_empty_ivec4_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "ivec4_empty_empty_ivec4_array_vert.vert", + "vertexShader": "ivec4_empty_empty_ivec4_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "ivec4_empty_empty_ivec4_array_vert.test.html", + }, + "name": "ivec4_empty_empty_ivec4_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ivec4_empty_in_ivec4_empty_frag.frag" - }, - "name": "ivec4_empty_in_ivec4_empty_frag.test.html", + }, + "name": "ivec4_empty_in_ivec4_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "ivec4_empty_in_ivec4_empty_vert.vert", + "vertexShader": "ivec4_empty_in_ivec4_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "ivec4_empty_in_ivec4_empty_vert.test.html", + }, + "name": "ivec4_empty_in_ivec4_empty_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_081_to_088.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_081_to_088.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_081_to_088.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_081_to_088.html 2017-01-16 01:36:25.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ivec4_empty_in_ivec4_array_frag.frag" - }, - "name": "ivec4_empty_in_ivec4_array_frag.test.html", + }, + "name": "ivec4_empty_in_ivec4_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "ivec4_empty_in_ivec4_array_vert.vert", + "vertexShader": "ivec4_empty_in_ivec4_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "ivec4_empty_in_ivec4_array_vert.test.html", + }, + "name": "ivec4_empty_in_ivec4_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ivec4_empty_inout_ivec4_empty_frag.frag" - }, - "name": "ivec4_empty_inout_ivec4_empty_frag.test.html", + }, + "name": "ivec4_empty_inout_ivec4_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "ivec4_empty_inout_ivec4_empty_vert.vert", + "vertexShader": "ivec4_empty_inout_ivec4_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "ivec4_empty_inout_ivec4_empty_vert.test.html", + }, + "name": "ivec4_empty_inout_ivec4_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ivec4_empty_inout_ivec4_array_frag.frag" - }, - "name": "ivec4_empty_inout_ivec4_array_frag.test.html", + }, + "name": "ivec4_empty_inout_ivec4_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ivec4_empty_inout_ivec4_bigarray_frag.frag" - }, - "name": "ivec4_empty_inout_ivec4_bigarray_frag.test.html", + }, + "name": "ivec4_empty_inout_ivec4_bigarray_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "ivec4_empty_inout_ivec4_array_vert.vert", + "vertexShader": "ivec4_empty_inout_ivec4_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "ivec4_empty_inout_ivec4_array_vert.test.html", + }, + "name": "ivec4_empty_inout_ivec4_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "ivec4_empty_inout_ivec4_bigarray_vert.vert", + "vertexShader": "ivec4_empty_inout_ivec4_bigarray_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "ivec4_empty_inout_ivec4_bigarray_vert.test.html", + }, + "name": "ivec4_empty_inout_ivec4_bigarray_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_089_to_096.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_089_to_096.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_089_to_096.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_089_to_096.html 2017-01-16 01:36:25.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ivec4_empty_out_ivec4_empty_frag.frag" - }, - "name": "ivec4_empty_out_ivec4_empty_frag.test.html", + }, + "name": "ivec4_empty_out_ivec4_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "ivec4_empty_out_ivec4_empty_vert.vert", + "vertexShader": "ivec4_empty_out_ivec4_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "ivec4_empty_out_ivec4_empty_vert.test.html", + }, + "name": "ivec4_empty_out_ivec4_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ivec4_empty_out_ivec4_array_frag.frag" - }, - "name": "ivec4_empty_out_ivec4_array_frag.test.html", + }, + "name": "ivec4_empty_out_ivec4_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "ivec4_empty_out_ivec4_array_vert.vert", + "vertexShader": "ivec4_empty_out_ivec4_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "ivec4_empty_out_ivec4_array_vert.test.html", + }, + "name": "ivec4_empty_out_ivec4_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_empty_empty_vec4_empty_frag.frag" - }, - "name": "vec4_empty_empty_vec4_empty_frag.test.html", + }, + "name": "vec4_empty_empty_vec4_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec4_empty_empty_vec4_empty_vert.vert", + "vertexShader": "vec4_empty_empty_vec4_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_empty_empty_vec4_empty_vert.test.html", + }, + "name": "vec4_empty_empty_vec4_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_empty_empty_vec4_array_frag.frag" - }, - "name": "vec4_empty_empty_vec4_array_frag.test.html", + }, + "name": "vec4_empty_empty_vec4_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec4_empty_empty_vec4_array_vert.vert", + "vertexShader": "vec4_empty_empty_vec4_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_empty_empty_vec4_array_vert.test.html", + }, + "name": "vec4_empty_empty_vec4_array_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_097_to_104.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_097_to_104.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_097_to_104.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_097_to_104.html 2017-01-16 01:36:25.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_empty_in_vec4_empty_frag.frag" - }, - "name": "vec4_empty_in_vec4_empty_frag.test.html", + }, + "name": "vec4_empty_in_vec4_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec4_empty_in_vec4_empty_vert.vert", + "vertexShader": "vec4_empty_in_vec4_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_empty_in_vec4_empty_vert.test.html", + }, + "name": "vec4_empty_in_vec4_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_empty_in_vec4_array_frag.frag" - }, - "name": "vec4_empty_in_vec4_array_frag.test.html", + }, + "name": "vec4_empty_in_vec4_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec4_empty_in_vec4_array_vert.vert", + "vertexShader": "vec4_empty_in_vec4_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_empty_in_vec4_array_vert.test.html", + }, + "name": "vec4_empty_in_vec4_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_empty_inout_vec4_empty_frag.frag" - }, - "name": "vec4_empty_inout_vec4_empty_frag.test.html", + }, + "name": "vec4_empty_inout_vec4_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec4_empty_inout_vec4_empty_vert.vert", + "vertexShader": "vec4_empty_inout_vec4_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_empty_inout_vec4_empty_vert.test.html", + }, + "name": "vec4_empty_inout_vec4_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_empty_inout_vec4_array_frag.frag" - }, - "name": "vec4_empty_inout_vec4_array_frag.test.html", + }, + "name": "vec4_empty_inout_vec4_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_empty_inout_vec4_bigarray_frag.frag" - }, - "name": "vec4_empty_inout_vec4_bigarray_frag.test.html", + }, + "name": "vec4_empty_inout_vec4_bigarray_frag.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_105_to_112.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_105_to_112.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_105_to_112.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_105_to_112.html 2017-01-16 01:36:25.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec4_empty_inout_vec4_array_vert.vert", + "vertexShader": "vec4_empty_inout_vec4_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_empty_inout_vec4_array_vert.test.html", + }, + "name": "vec4_empty_inout_vec4_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec4_empty_inout_vec4_bigarray_vert.vert", + "vertexShader": "vec4_empty_inout_vec4_bigarray_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_empty_inout_vec4_bigarray_vert.test.html", + }, + "name": "vec4_empty_inout_vec4_bigarray_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_empty_out_vec4_empty_frag.frag" - }, - "name": "vec4_empty_out_vec4_empty_frag.test.html", + }, + "name": "vec4_empty_out_vec4_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec4_empty_out_vec4_empty_vert.vert", + "vertexShader": "vec4_empty_out_vec4_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_empty_out_vec4_empty_vert.test.html", + }, + "name": "vec4_empty_out_vec4_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_empty_out_vec4_array_frag.frag" - }, - "name": "vec4_empty_out_vec4_array_frag.test.html", + }, + "name": "vec4_empty_out_vec4_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec4_empty_out_vec4_array_vert.vert", + "vertexShader": "vec4_empty_out_vec4_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_empty_out_vec4_array_vert.test.html", + }, + "name": "vec4_empty_out_vec4_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat4_empty_empty_mat4_empty_frag.frag" - }, - "name": "mat4_empty_empty_mat4_empty_frag.test.html", + }, + "name": "mat4_empty_empty_mat4_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat4_empty_empty_mat4_empty_vert.vert", + "vertexShader": "mat4_empty_empty_mat4_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat4_empty_empty_mat4_empty_vert.test.html", + }, + "name": "mat4_empty_empty_mat4_empty_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_113_to_120.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_113_to_120.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_113_to_120.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_113_to_120.html 2017-01-16 01:36:25.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat4_empty_empty_mat4_array_frag.frag" - }, - "name": "mat4_empty_empty_mat4_array_frag.test.html", + }, + "name": "mat4_empty_empty_mat4_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat4_empty_empty_mat4_array_vert.vert", + "vertexShader": "mat4_empty_empty_mat4_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat4_empty_empty_mat4_array_vert.test.html", + }, + "name": "mat4_empty_empty_mat4_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat4_empty_in_mat4_empty_frag.frag" - }, - "name": "mat4_empty_in_mat4_empty_frag.test.html", + }, + "name": "mat4_empty_in_mat4_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat4_empty_in_mat4_empty_vert.vert", + "vertexShader": "mat4_empty_in_mat4_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat4_empty_in_mat4_empty_vert.test.html", + }, + "name": "mat4_empty_in_mat4_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat4_empty_in_mat4_array_frag.frag" - }, - "name": "mat4_empty_in_mat4_array_frag.test.html", + }, + "name": "mat4_empty_in_mat4_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat4_empty_in_mat4_array_vert.vert", + "vertexShader": "mat4_empty_in_mat4_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat4_empty_in_mat4_array_vert.test.html", + }, + "name": "mat4_empty_in_mat4_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat4_empty_inout_mat4_empty_frag.frag" - }, - "name": "mat4_empty_inout_mat4_empty_frag.test.html", + }, + "name": "mat4_empty_inout_mat4_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat4_empty_inout_mat4_empty_vert.vert", + "vertexShader": "mat4_empty_inout_mat4_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat4_empty_inout_mat4_empty_vert.test.html", + }, + "name": "mat4_empty_inout_mat4_empty_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_121_to_126.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_121_to_126.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_121_to_126.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/functions_121_to_126.html 2017-01-16 01:36:25.000000000 +0000 @@ -46,152 +46,152 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat4_empty_inout_mat4_array_frag.frag" - }, - "name": "mat4_empty_inout_mat4_array_frag.test.html", + }, + "name": "mat4_empty_inout_mat4_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat4_empty_inout_mat4_array_vert.vert", + "vertexShader": "mat4_empty_inout_mat4_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat4_empty_inout_mat4_array_vert.test.html", + }, + "name": "mat4_empty_inout_mat4_array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat4_empty_out_mat4_empty_frag.frag" - }, - "name": "mat4_empty_out_mat4_empty_frag.test.html", + }, + "name": "mat4_empty_out_mat4_empty_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat4_empty_out_mat4_empty_vert.vert", + "vertexShader": "mat4_empty_out_mat4_empty_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat4_empty_out_mat4_empty_vert.test.html", + }, + "name": "mat4_empty_out_mat4_empty_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat4_empty_out_mat4_array_frag.frag" - }, - "name": "mat4_empty_out_mat4_array_frag.test.html", + }, + "name": "mat4_empty_out_mat4_array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat4_empty_out_mat4_array_vert.vert", + "vertexShader": "mat4_empty_out_mat4_array_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat4_empty_out_mat4_array_vert.test.html", + }, + "name": "mat4_empty_out_mat4_array_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_empty_mat4_array_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_empty_mat4_array_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_empty_mat4_array_frag.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_empty_mat4_array_frag.frag 2017-01-16 01:36:25.000000000 +0000 @@ -91,7 +91,7 @@ ret = false; if(par[0][3] != value) ret = false; - + if(par[1][0] != value) ret = false; if(par[1][1] != value) @@ -100,7 +100,7 @@ ret = false; if(par[1][3] != value) ret = false; - + if(par[2][0] != value) ret = false; if(par[2][1] != value) @@ -109,7 +109,7 @@ ret = false; if(par[2][3] != value) ret = false; - + if(par[3][0] != value) ret = false; if(par[3][1] != value) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_empty_mat4_array_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_empty_mat4_array_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_empty_mat4_array_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_empty_mat4_array_vert.vert 2017-01-16 01:36:25.000000000 +0000 @@ -91,7 +91,7 @@ ret = false; if(par[0][3] != value) ret = false; - + if(par[1][0] != value) ret = false; if(par[1][1] != value) @@ -100,7 +100,7 @@ ret = false; if(par[1][3] != value) ret = false; - + if(par[2][0] != value) ret = false; if(par[2][1] != value) @@ -109,7 +109,7 @@ ret = false; if(par[2][3] != value) ret = false; - + if(par[3][0] != value) ret = false; if(par[3][1] != value) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_empty_mat4_empty_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_empty_mat4_empty_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_empty_mat4_empty_frag.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_empty_mat4_empty_frag.frag 2017-01-16 01:36:25.000000000 +0000 @@ -90,7 +90,7 @@ ret = false; if(par[0][3] != value) ret = false; - + if(par[1][0] != value) ret = false; if(par[1][1] != value) @@ -99,7 +99,7 @@ ret = false; if(par[1][3] != value) ret = false; - + if(par[2][0] != value) ret = false; if(par[2][1] != value) @@ -108,7 +108,7 @@ ret = false; if(par[2][3] != value) ret = false; - + if(par[3][0] != value) ret = false; if(par[3][1] != value) @@ -127,17 +127,17 @@ par[0][1] = value; par[0][2] = value; par[0][3] = value; - + par[1][0] = value; par[1][1] = value; par[1][2] = value; par[1][3] = value; - + par[2][0] = value; par[2][1] = value; par[2][2] = value; par[2][3] = value; - + par[3][0] = value; par[3][1] = value; par[3][2] = value; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_empty_mat4_empty_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_empty_mat4_empty_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_empty_mat4_empty_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_empty_mat4_empty_vert.vert 2017-01-16 01:36:25.000000000 +0000 @@ -90,7 +90,7 @@ ret = false; if(par[0][3] != value) ret = false; - + if(par[1][0] != value) ret = false; if(par[1][1] != value) @@ -99,7 +99,7 @@ ret = false; if(par[1][3] != value) ret = false; - + if(par[2][0] != value) ret = false; if(par[2][1] != value) @@ -108,7 +108,7 @@ ret = false; if(par[2][3] != value) ret = false; - + if(par[3][0] != value) ret = false; if(par[3][1] != value) @@ -127,17 +127,17 @@ par[0][1] = value; par[0][2] = value; par[0][3] = value; - + par[1][0] = value; par[1][1] = value; par[1][2] = value; par[1][3] = value; - + par[2][0] = value; par[2][1] = value; par[2][2] = value; par[2][3] = value; - + par[3][0] = value; par[3][1] = value; par[3][2] = value; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_in_mat4_array_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_in_mat4_array_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_in_mat4_array_frag.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_in_mat4_array_frag.frag 2017-01-16 01:36:25.000000000 +0000 @@ -91,7 +91,7 @@ ret = false; if(par[0][3] != value) ret = false; - + if(par[1][0] != value) ret = false; if(par[1][1] != value) @@ -100,7 +100,7 @@ ret = false; if(par[1][3] != value) ret = false; - + if(par[2][0] != value) ret = false; if(par[2][1] != value) @@ -109,7 +109,7 @@ ret = false; if(par[2][3] != value) ret = false; - + if(par[3][0] != value) ret = false; if(par[3][1] != value) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_in_mat4_array_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_in_mat4_array_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_in_mat4_array_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_in_mat4_array_vert.vert 2017-01-16 01:36:25.000000000 +0000 @@ -91,7 +91,7 @@ ret = false; if(par[0][3] != value) ret = false; - + if(par[1][0] != value) ret = false; if(par[1][1] != value) @@ -100,7 +100,7 @@ ret = false; if(par[1][3] != value) ret = false; - + if(par[2][0] != value) ret = false; if(par[2][1] != value) @@ -109,7 +109,7 @@ ret = false; if(par[2][3] != value) ret = false; - + if(par[3][0] != value) ret = false; if(par[3][1] != value) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_in_mat4_empty_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_in_mat4_empty_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_in_mat4_empty_frag.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_in_mat4_empty_frag.frag 2017-01-16 01:36:25.000000000 +0000 @@ -90,7 +90,7 @@ ret = false; if(par[0][3] != value) ret = false; - + if(par[1][0] != value) ret = false; if(par[1][1] != value) @@ -99,7 +99,7 @@ ret = false; if(par[1][3] != value) ret = false; - + if(par[2][0] != value) ret = false; if(par[2][1] != value) @@ -108,7 +108,7 @@ ret = false; if(par[2][3] != value) ret = false; - + if(par[3][0] != value) ret = false; if(par[3][1] != value) @@ -127,17 +127,17 @@ par[0][1] = value; par[0][2] = value; par[0][3] = value; - + par[1][0] = value; par[1][1] = value; par[1][2] = value; par[1][3] = value; - + par[2][0] = value; par[2][1] = value; par[2][2] = value; par[2][3] = value; - + par[3][0] = value; par[3][1] = value; par[3][2] = value; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_in_mat4_empty_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_in_mat4_empty_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_in_mat4_empty_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_in_mat4_empty_vert.vert 2017-01-16 01:36:25.000000000 +0000 @@ -90,7 +90,7 @@ ret = false; if(par[0][3] != value) ret = false; - + if(par[1][0] != value) ret = false; if(par[1][1] != value) @@ -99,7 +99,7 @@ ret = false; if(par[1][3] != value) ret = false; - + if(par[2][0] != value) ret = false; if(par[2][1] != value) @@ -108,7 +108,7 @@ ret = false; if(par[2][3] != value) ret = false; - + if(par[3][0] != value) ret = false; if(par[3][1] != value) @@ -127,17 +127,17 @@ par[0][1] = value; par[0][2] = value; par[0][3] = value; - + par[1][0] = value; par[1][1] = value; par[1][2] = value; par[1][3] = value; - + par[2][0] = value; par[2][1] = value; par[2][2] = value; par[2][3] = value; - + par[3][0] = value; par[3][1] = value; par[3][2] = value; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_inout_mat4_array_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_inout_mat4_array_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_inout_mat4_array_frag.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_inout_mat4_array_frag.frag 2017-01-16 01:36:25.000000000 +0000 @@ -91,7 +91,7 @@ ret = false; if(par[0][3] != value) ret = false; - + if(par[1][0] != value) ret = false; if(par[1][1] != value) @@ -100,7 +100,7 @@ ret = false; if(par[1][3] != value) ret = false; - + if(par[2][0] != value) ret = false; if(par[2][1] != value) @@ -109,7 +109,7 @@ ret = false; if(par[2][3] != value) ret = false; - + if(par[3][0] != value) ret = false; if(par[3][1] != value) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_inout_mat4_array_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_inout_mat4_array_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_inout_mat4_array_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_inout_mat4_array_vert.vert 2017-01-16 01:36:25.000000000 +0000 @@ -91,7 +91,7 @@ ret = false; if(par[0][3] != value) ret = false; - + if(par[1][0] != value) ret = false; if(par[1][1] != value) @@ -100,7 +100,7 @@ ret = false; if(par[1][3] != value) ret = false; - + if(par[2][0] != value) ret = false; if(par[2][1] != value) @@ -109,7 +109,7 @@ ret = false; if(par[2][3] != value) ret = false; - + if(par[3][0] != value) ret = false; if(par[3][1] != value) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_inout_mat4_empty_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_inout_mat4_empty_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_inout_mat4_empty_frag.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_inout_mat4_empty_frag.frag 2017-01-16 01:36:25.000000000 +0000 @@ -90,7 +90,7 @@ ret = false; if(par[0][3] != value) ret = false; - + if(par[1][0] != value) ret = false; if(par[1][1] != value) @@ -99,7 +99,7 @@ ret = false; if(par[1][3] != value) ret = false; - + if(par[2][0] != value) ret = false; if(par[2][1] != value) @@ -108,7 +108,7 @@ ret = false; if(par[2][3] != value) ret = false; - + if(par[3][0] != value) ret = false; if(par[3][1] != value) @@ -127,17 +127,17 @@ par[0][1] = value; par[0][2] = value; par[0][3] = value; - + par[1][0] = value; par[1][1] = value; par[1][2] = value; par[1][3] = value; - + par[2][0] = value; par[2][1] = value; par[2][2] = value; par[2][3] = value; - + par[3][0] = value; par[3][1] = value; par[3][2] = value; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_inout_mat4_empty_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_inout_mat4_empty_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_inout_mat4_empty_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_inout_mat4_empty_vert.vert 2017-01-16 01:36:25.000000000 +0000 @@ -90,7 +90,7 @@ ret = false; if(par[0][3] != value) ret = false; - + if(par[1][0] != value) ret = false; if(par[1][1] != value) @@ -99,7 +99,7 @@ ret = false; if(par[1][3] != value) ret = false; - + if(par[2][0] != value) ret = false; if(par[2][1] != value) @@ -108,7 +108,7 @@ ret = false; if(par[2][3] != value) ret = false; - + if(par[3][0] != value) ret = false; if(par[3][1] != value) @@ -127,17 +127,17 @@ par[0][1] = value; par[0][2] = value; par[0][3] = value; - + par[1][0] = value; par[1][1] = value; par[1][2] = value; par[1][3] = value; - + par[2][0] = value; par[2][1] = value; par[2][2] = value; par[2][3] = value; - + par[3][0] = value; par[3][1] = value; par[3][2] = value; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_out_mat4_array_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_out_mat4_array_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_out_mat4_array_frag.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_out_mat4_array_frag.frag 2017-01-16 01:36:25.000000000 +0000 @@ -85,7 +85,7 @@ ret = false; if(par[0][3] != value) ret = false; - + if(par[1][0] != value) ret = false; if(par[1][1] != value) @@ -94,7 +94,7 @@ ret = false; if(par[1][3] != value) ret = false; - + if(par[2][0] != value) ret = false; if(par[2][1] != value) @@ -103,7 +103,7 @@ ret = false; if(par[2][3] != value) ret = false; - + if(par[3][0] != value) ret = false; if(par[3][1] != value) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_out_mat4_array_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_out_mat4_array_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_out_mat4_array_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_out_mat4_array_vert.vert 2017-01-16 01:36:25.000000000 +0000 @@ -85,7 +85,7 @@ ret = false; if(par[0][3] != value) ret = false; - + if(par[1][0] != value) ret = false; if(par[1][1] != value) @@ -94,7 +94,7 @@ ret = false; if(par[1][3] != value) ret = false; - + if(par[2][0] != value) ret = false; if(par[2][1] != value) @@ -103,7 +103,7 @@ ret = false; if(par[2][3] != value) ret = false; - + if(par[3][0] != value) ret = false; if(par[3][1] != value) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_out_mat4_empty_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_out_mat4_empty_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_out_mat4_empty_frag.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_out_mat4_empty_frag.frag 2017-01-16 01:36:25.000000000 +0000 @@ -81,7 +81,7 @@ ret = false; if(par[0][3] != value) ret = false; - + if(par[1][0] != value) ret = false; if(par[1][1] != value) @@ -90,7 +90,7 @@ ret = false; if(par[1][3] != value) ret = false; - + if(par[2][0] != value) ret = false; if(par[2][1] != value) @@ -99,7 +99,7 @@ ret = false; if(par[2][3] != value) ret = false; - + if(par[3][0] != value) ret = false; if(par[3][1] != value) @@ -118,17 +118,17 @@ par[0][1] = value; par[0][2] = value; par[0][3] = value; - + par[1][0] = value; par[1][1] = value; par[1][2] = value; par[1][3] = value; - + par[2][0] = value; par[2][1] = value; par[2][2] = value; par[2][3] = value; - + par[3][0] = value; par[3][1] = value; par[3][2] = value; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_out_mat4_empty_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_out_mat4_empty_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_out_mat4_empty_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/mat4_empty_out_mat4_empty_vert.vert 2017-01-16 01:36:25.000000000 +0000 @@ -81,7 +81,7 @@ ret = false; if(par[0][3] != value) ret = false; - + if(par[1][0] != value) ret = false; if(par[1][1] != value) @@ -90,7 +90,7 @@ ret = false; if(par[1][3] != value) ret = false; - + if(par[2][0] != value) ret = false; if(par[2][1] != value) @@ -99,7 +99,7 @@ ret = false; if(par[2][3] != value) ret = false; - + if(par[3][0] != value) ret = false; if(par[3][1] != value) @@ -118,17 +118,17 @@ par[0][1] = value; par[0][2] = value; par[0][3] = value; - + par[1][0] = value; par[1][1] = value; par[1][2] = value; par[1][3] = value; - + par[2][0] = value; par[2][1] = value; par[2][2] = value; par[2][3] = value; - + par[3][0] = value; par[3][1] = value; par[3][2] = value; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/qualifiers_struct_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/qualifiers_struct_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/qualifiers_struct_frag.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/qualifiers_struct_frag.frag 2017-01-16 01:36:25.000000000 +0000 @@ -40,7 +40,7 @@ sabcd e) { sabcd one = sabcd(1.0, 1.0, 1.0, 1.0); - + b = a; c.a += d.a; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/qualifiers_struct_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/qualifiers_struct_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/qualifiers_struct_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/functions/qualifiers_struct_vert.vert 2017-01-16 01:36:25.000000000 +0000 @@ -43,7 +43,7 @@ sabcd e) { sabcd one = sabcd(1.0, 1.0, 1.0, 1.0); - + b = a; c.a += d.a; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,20 +46,20 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "gl_FragCoord_xy_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "gl_FragCoord_xy_frag.frag" - }, - "name": "gl_FragCoord_xy_frag.test.html", + }, + "name": "gl_FragCoord_xy_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "gl_FragCoord_z_frag_ref.vert", + "vertexShader": "gl_FragCoord_z_frag_ref.vert", "fragmentShader": "gl_FragCoord_z_frag_ref.frag", "builtin_uniforms": { "min_required": 2, @@ -69,38 +69,38 @@ "gl_DepthRange.diff" ], } - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "gl_FragCoord_z_frag.frag" - }, - "name": "gl_FragCoord_z_frag.test.html", + }, + "name": "gl_FragCoord_z_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 0.5, - 0.5, - 0.5, + 0.5, + 0.5, + 0.5, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "gl_FragCoord_w_frag.frag" - }, - "name": "gl_FragCoord_w_frag.test.html", + }, + "name": "gl_FragCoord_w_frag.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/gl_FrontFacing/gl_FrontFacing_001_to_001.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/gl_FrontFacing/gl_FrontFacing_001_to_001.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/gl_FrontFacing/gl_FrontFacing_001_to_001.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/gl_FrontFacing/gl_FrontFacing_001_to_001.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,15 +46,15 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "frontbacksquare", + }, + "model": "frontbacksquare", "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "gl_FrontFacing_frag.frag" - }, - "name": "gl_FrontFacing_frag.test.html", + }, + "name": "gl_FrontFacing_frag.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_001_to_008.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_001_to_008.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "greaterThan_vec2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "greaterThan_vec2_frag.frag" - }, - "name": "greaterThan_vec2_frag.test.html", + }, + "name": "greaterThan_vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "greaterThan_vec2_vert_ref.vert", + "vertexShader": "greaterThan_vec2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "greaterThan_vec2_vert.vert", + "vertexShader": "greaterThan_vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "greaterThan_vec2_vert.test.html", + }, + "name": "greaterThan_vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "greaterThan_vec3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "greaterThan_vec3_frag.frag" - }, - "name": "greaterThan_vec3_frag.test.html", + }, + "name": "greaterThan_vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "greaterThan_vec3_vert_ref.vert", + "vertexShader": "greaterThan_vec3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "greaterThan_vec3_vert.vert", + "vertexShader": "greaterThan_vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "greaterThan_vec3_vert.test.html", + }, + "name": "greaterThan_vec3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "greaterThan_ivec2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "greaterThan_ivec2_frag.frag" - }, - "name": "greaterThan_ivec2_frag.test.html", + }, + "name": "greaterThan_ivec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "greaterThan_ivec2_vert_ref.vert", + "vertexShader": "greaterThan_ivec2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "greaterThan_ivec2_vert.vert", + "vertexShader": "greaterThan_ivec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "greaterThan_ivec2_vert.test.html", + }, + "name": "greaterThan_ivec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "greaterThan_ivec3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "greaterThan_ivec3_frag.frag" - }, - "name": "greaterThan_ivec3_frag.test.html", + }, + "name": "greaterThan_ivec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "greaterThan_ivec3_vert_ref.vert", + "vertexShader": "greaterThan_ivec3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "greaterThan_ivec3_vert.vert", + "vertexShader": "greaterThan_ivec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "greaterThan_ivec3_vert.test.html", + }, + "name": "greaterThan_ivec3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec2_frag.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec2_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(greaterThan(ivec2(c), ivec2(0))); + vec2 result = vec2(greaterThan(ivec2(c), ivec2(0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec2_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec2_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec2_frag_ref.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec2_frag_ref.frag 2017-01-16 01:36:26.000000000 +0000 @@ -41,6 +41,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(gt(ivec2(c), ivec2(0))); + vec2 result = vec2(gt(ivec2(c), ivec2(0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec2_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec2_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec2_vert_ref.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec2_vert_ref.vert 2017-01-16 01:36:26.000000000 +0000 @@ -41,7 +41,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(gt(ivec2(c), ivec2(0))); + vec2 result = vec2(gt(ivec2(c), ivec2(0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec2_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec2_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(greaterThan(ivec2(c), ivec2(0))); + vec2 result = vec2(greaterThan(ivec2(c), ivec2(0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec3_frag.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec3_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(greaterThan(ivec3(c), ivec3(0))); + vec3 result = vec3(greaterThan(ivec3(c), ivec3(0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec3_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec3_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec3_frag_ref.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec3_frag_ref.frag 2017-01-16 01:36:26.000000000 +0000 @@ -43,6 +43,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(gt(ivec3(c), ivec3(0))); + vec3 result = vec3(gt(ivec3(c), ivec3(0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec3_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec3_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec3_vert_ref.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec3_vert_ref.vert 2017-01-16 01:36:26.000000000 +0000 @@ -43,7 +43,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(gt(ivec3(c), ivec3(0))); + vec3 result = vec3(gt(ivec3(c), ivec3(0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec3_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_ivec3_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(greaterThan(ivec3(c), ivec3(0))); + vec3 result = vec3(greaterThan(ivec3(c), ivec3(0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec2_frag.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec2_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -35,6 +35,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(greaterThan(c, vec2(0.0))); + vec2 result = vec2(greaterThan(c, vec2(0.0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec2_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec2_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec2_frag_ref.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec2_frag_ref.frag 2017-01-16 01:36:26.000000000 +0000 @@ -45,6 +45,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(gt(c, vec2(0.0))); + vec2 result = vec2(gt(c, vec2(0.0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec2_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec2_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec2_vert_ref.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec2_vert_ref.vert 2017-01-16 01:36:26.000000000 +0000 @@ -41,7 +41,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(gt(c, vec2(0.0))); + vec2 result = vec2(gt(c, vec2(0.0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec2_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec2_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(greaterThan(c, vec2(0.0))); + vec2 result = vec2(greaterThan(c, vec2(0.0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec3_frag.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec3_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(greaterThan(c, vec3(0.0))); + vec3 result = vec3(greaterThan(c, vec3(0.0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec3_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec3_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec3_frag_ref.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec3_frag_ref.frag 2017-01-16 01:36:26.000000000 +0000 @@ -43,6 +43,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(gt(c, vec3(0.0))); + vec3 result = vec3(gt(c, vec3(0.0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec3_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec3_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec3_vert_ref.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec3_vert_ref.vert 2017-01-16 01:36:26.000000000 +0000 @@ -43,7 +43,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(gt(c, vec3(0.0))); + vec3 result = vec3(gt(c, vec3(0.0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec3_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThan/greaterThan_vec3_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(greaterThan(c, vec3(0.0))); + vec3 result = vec3(greaterThan(c, vec3(0.0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_001_to_008.html 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_001_to_008.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "greaterThanEqual_vec2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "greaterThanEqual_vec2_frag.frag" - }, - "name": "greaterThanEqual_vec2_frag.test.html", + }, + "name": "greaterThanEqual_vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "greaterThanEqual_vec2_vert_ref.vert", + "vertexShader": "greaterThanEqual_vec2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "greaterThanEqual_vec2_vert.vert", + "vertexShader": "greaterThanEqual_vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "greaterThanEqual_vec2_vert.test.html", + }, + "name": "greaterThanEqual_vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "greaterThanEqual_vec3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "greaterThanEqual_vec3_frag.frag" - }, - "name": "greaterThanEqual_vec3_frag.test.html", + }, + "name": "greaterThanEqual_vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "greaterThanEqual_vec3_vert_ref.vert", + "vertexShader": "greaterThanEqual_vec3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "greaterThanEqual_vec3_vert.vert", + "vertexShader": "greaterThanEqual_vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "greaterThanEqual_vec3_vert.test.html", + }, + "name": "greaterThanEqual_vec3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "greaterThanEqual_ivec2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "greaterThanEqual_ivec2_frag.frag" - }, - "name": "greaterThanEqual_ivec2_frag.test.html", + }, + "name": "greaterThanEqual_ivec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "greaterThanEqual_ivec2_vert_ref.vert", + "vertexShader": "greaterThanEqual_ivec2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "greaterThanEqual_ivec2_vert.vert", + "vertexShader": "greaterThanEqual_ivec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "greaterThanEqual_ivec2_vert.test.html", + }, + "name": "greaterThanEqual_ivec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "greaterThanEqual_ivec3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "greaterThanEqual_ivec3_frag.frag" - }, - "name": "greaterThanEqual_ivec3_frag.test.html", + }, + "name": "greaterThanEqual_ivec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "greaterThanEqual_ivec3_vert_ref.vert", + "vertexShader": "greaterThanEqual_ivec3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "greaterThanEqual_ivec3_vert.vert", + "vertexShader": "greaterThanEqual_ivec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "greaterThanEqual_ivec3_vert.test.html", + }, + "name": "greaterThanEqual_ivec3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec2_frag.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec2_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(greaterThanEqual(ivec2(c), ivec2(0))); + vec2 result = vec2(greaterThanEqual(ivec2(c), ivec2(0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec2_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec2_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec2_frag_ref.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec2_frag_ref.frag 2017-01-16 01:36:26.000000000 +0000 @@ -41,6 +41,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(gte(ivec2(c), ivec2(0))); + vec2 result = vec2(gte(ivec2(c), ivec2(0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec2_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec2_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec2_vert_ref.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec2_vert_ref.vert 2017-01-16 01:36:26.000000000 +0000 @@ -41,7 +41,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(gte(ivec2(c), ivec2(0))); + vec2 result = vec2(gte(ivec2(c), ivec2(0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec2_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec2_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(greaterThanEqual(ivec2(c), ivec2(0))); + vec2 result = vec2(greaterThanEqual(ivec2(c), ivec2(0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec3_frag.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec3_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(greaterThanEqual(ivec3(c), ivec3(0))); + vec3 result = vec3(greaterThanEqual(ivec3(c), ivec3(0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec3_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec3_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec3_frag_ref.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec3_frag_ref.frag 2017-01-16 01:36:26.000000000 +0000 @@ -43,6 +43,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(gte(ivec3(c), ivec3(0))); + vec3 result = vec3(gte(ivec3(c), ivec3(0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec3_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec3_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec3_vert_ref.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec3_vert_ref.vert 2017-01-16 01:36:26.000000000 +0000 @@ -43,7 +43,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(gte(ivec3(c), ivec3(0))); + vec3 result = vec3(gte(ivec3(c), ivec3(0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec3_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_ivec3_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(greaterThanEqual(ivec3(c), ivec3(0))); + vec3 result = vec3(greaterThanEqual(ivec3(c), ivec3(0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec2_frag.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec2_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -35,6 +35,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(greaterThanEqual(c, vec2(0.0))); + vec2 result = vec2(greaterThanEqual(c, vec2(0.0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec2_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec2_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec2_frag_ref.frag 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec2_frag_ref.frag 2017-01-16 01:36:26.000000000 +0000 @@ -45,6 +45,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(gte(c, vec2(0.0))); + vec2 result = vec2(gte(c, vec2(0.0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec2_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec2_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec2_vert_ref.vert 2017-01-13 01:35:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec2_vert_ref.vert 2017-01-16 01:36:26.000000000 +0000 @@ -41,7 +41,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(gte(c, vec2(0.0))); + vec2 result = vec2(gte(c, vec2(0.0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec2_vert.vert 2017-01-13 01:35:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec2_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(greaterThanEqual(c, vec2(0.0))); + vec2 result = vec2(greaterThanEqual(c, vec2(0.0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec3_frag.frag 2017-01-13 01:35:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec3_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(greaterThanEqual(c, vec3(0.0))); + vec3 result = vec3(greaterThanEqual(c, vec3(0.0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec3_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec3_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec3_frag_ref.frag 2017-01-13 01:35:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec3_frag_ref.frag 2017-01-16 01:36:26.000000000 +0000 @@ -43,6 +43,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(gte(c, vec3(0.0))); + vec3 result = vec3(gte(c, vec3(0.0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec3_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec3_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec3_vert_ref.vert 2017-01-13 01:35:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec3_vert_ref.vert 2017-01-16 01:36:26.000000000 +0000 @@ -43,7 +43,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(gte(c, vec3(0.0))); + vec3 result = vec3(gte(c, vec3(0.0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec3_vert.vert 2017-01-13 01:35:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_vec3_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(greaterThanEqual(c, vec3(0.0))); + vec3 result = vec3(greaterThanEqual(c, vec3(0.0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/inversesqrt/inversesqrt_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/inversesqrt/inversesqrt_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/inversesqrt/inversesqrt_001_to_006.html 2017-01-13 01:35:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/inversesqrt/inversesqrt_001_to_006.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "inversesqrt_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "inversesqrt_float_frag_xvary.frag" - }, - "name": "inversesqrt_float_frag_xvary.test.html", + }, + "name": "inversesqrt_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "inversesqrt_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "inversesqrt_vec2_frag_xvary.frag" - }, - "name": "inversesqrt_vec2_frag_xvary.test.html", + }, + "name": "inversesqrt_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "inversesqrt_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "inversesqrt_vec3_frag_xvary.frag" - }, - "name": "inversesqrt_vec3_frag_xvary.test.html", + }, + "name": "inversesqrt_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "inversesqrt_float_vert_xvary_ref.vert", + "vertexShader": "inversesqrt_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "inversesqrt_float_vert_xvary.vert", + "vertexShader": "inversesqrt_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "inversesqrt_float_vert_xvary.test.html", + }, + "name": "inversesqrt_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "inversesqrt_vec2_vert_xvary_ref.vert", + "vertexShader": "inversesqrt_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "inversesqrt_vec2_vert_xvary.vert", + "vertexShader": "inversesqrt_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "inversesqrt_vec2_vert_xvary.test.html", + }, + "name": "inversesqrt_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "inversesqrt_vec3_vert_xvary_ref.vert", + "vertexShader": "inversesqrt_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "inversesqrt_vec3_vert_xvary.vert", + "vertexShader": "inversesqrt_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "inversesqrt_vec3_vert_xvary.test.html", + }, + "name": "inversesqrt_vec3_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/length/length_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/length/length_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/length/length_001_to_006.html 2017-01-13 01:35:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/length/length_001_to_006.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "length_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "length_float_frag_xvary.frag" - }, - "name": "length_float_frag_xvary.test.html", + }, + "name": "length_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "length_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "length_vec2_frag_xvary.frag" - }, - "name": "length_vec2_frag_xvary.test.html", + }, + "name": "length_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "length_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "length_vec3_frag_xvary.frag" - }, - "name": "length_vec3_frag_xvary.test.html", + }, + "name": "length_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "length_float_vert_xvary_ref.vert", + "vertexShader": "length_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "length_float_vert_xvary.vert", + "vertexShader": "length_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "length_float_vert_xvary.test.html", + }, + "name": "length_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "length_vec2_vert_xvary_ref.vert", + "vertexShader": "length_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "length_vec2_vert_xvary.vert", + "vertexShader": "length_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "length_vec2_vert_xvary.test.html", + }, + "name": "length_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "length_vec3_vert_xvary_ref.vert", + "vertexShader": "length_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "length_vec3_vert_xvary.vert", + "vertexShader": "length_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "length_vec3_vert_xvary.test.html", + }, + "name": "length_vec3_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_001_to_008.html 2017-01-13 01:35:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_001_to_008.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "lessThan_vec2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "lessThan_vec2_frag.frag" - }, - "name": "lessThan_vec2_frag.test.html", + }, + "name": "lessThan_vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "lessThan_vec2_vert_ref.vert", + "vertexShader": "lessThan_vec2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "lessThan_vec2_vert.vert", + "vertexShader": "lessThan_vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "lessThan_vec2_vert.test.html", + }, + "name": "lessThan_vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "lessThan_vec3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "lessThan_vec3_frag.frag" - }, - "name": "lessThan_vec3_frag.test.html", + }, + "name": "lessThan_vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "lessThan_vec3_vert_ref.vert", + "vertexShader": "lessThan_vec3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "lessThan_vec3_vert.vert", + "vertexShader": "lessThan_vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "lessThan_vec3_vert.test.html", + }, + "name": "lessThan_vec3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "lessThan_ivec2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "lessThan_ivec2_frag.frag" - }, - "name": "lessThan_ivec2_frag.test.html", + }, + "name": "lessThan_ivec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "lessThan_ivec2_vert_ref.vert", + "vertexShader": "lessThan_ivec2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "lessThan_ivec2_vert.vert", + "vertexShader": "lessThan_ivec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "lessThan_ivec2_vert.test.html", + }, + "name": "lessThan_ivec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "lessThan_ivec3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "lessThan_ivec3_frag.frag" - }, - "name": "lessThan_ivec3_frag.test.html", + }, + "name": "lessThan_ivec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "lessThan_ivec3_vert_ref.vert", + "vertexShader": "lessThan_ivec3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "lessThan_ivec3_vert.vert", + "vertexShader": "lessThan_ivec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "lessThan_ivec3_vert.test.html", + }, + "name": "lessThan_ivec3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec2_frag.frag 2017-01-13 01:35:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec2_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(lessThan(ivec2(c), ivec2(0))); + vec2 result = vec2(lessThan(ivec2(c), ivec2(0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec2_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec2_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec2_frag_ref.frag 2017-01-13 01:35:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec2_frag_ref.frag 2017-01-16 01:36:26.000000000 +0000 @@ -41,6 +41,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(lt(ivec2(c), ivec2(0))); + vec2 result = vec2(lt(ivec2(c), ivec2(0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec2_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec2_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec2_vert_ref.vert 2017-01-13 01:35:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec2_vert_ref.vert 2017-01-16 01:36:26.000000000 +0000 @@ -41,7 +41,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(lt(ivec2(c), ivec2(0))); + vec2 result = vec2(lt(ivec2(c), ivec2(0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec2_vert.vert 2017-01-13 01:35:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec2_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(lessThan(ivec2(c), ivec2(0))); + vec2 result = vec2(lessThan(ivec2(c), ivec2(0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec3_frag.frag 2017-01-13 01:35:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec3_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(lessThan(ivec3(c), ivec3(0))); + vec3 result = vec3(lessThan(ivec3(c), ivec3(0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec3_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec3_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec3_frag_ref.frag 2017-01-13 01:35:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec3_frag_ref.frag 2017-01-16 01:36:26.000000000 +0000 @@ -43,6 +43,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(lt(ivec3(c), ivec3(0))); + vec3 result = vec3(lt(ivec3(c), ivec3(0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec3_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec3_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec3_vert_ref.vert 2017-01-13 01:35:12.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec3_vert_ref.vert 2017-01-16 01:36:26.000000000 +0000 @@ -43,7 +43,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(lt(ivec3(c), ivec3(0))); + vec3 result = vec3(lt(ivec3(c), ivec3(0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec3_vert.vert 2017-01-13 01:35:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_ivec3_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(lessThan(ivec3(c), ivec3(0))); + vec3 result = vec3(lessThan(ivec3(c), ivec3(0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec2_frag.frag 2017-01-13 01:35:12.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec2_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -35,6 +35,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(lessThan(c, vec2(0.0))); + vec2 result = vec2(lessThan(c, vec2(0.0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec2_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec2_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec2_frag_ref.frag 2017-01-13 01:35:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec2_frag_ref.frag 2017-01-16 01:36:26.000000000 +0000 @@ -45,6 +45,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(lt(c, vec2(0.0))); + vec2 result = vec2(lt(c, vec2(0.0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec2_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec2_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec2_vert_ref.vert 2017-01-13 01:35:19.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec2_vert_ref.vert 2017-01-16 01:36:26.000000000 +0000 @@ -41,7 +41,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(lt(c, vec2(0.0))); + vec2 result = vec2(lt(c, vec2(0.0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec2_vert.vert 2017-01-13 01:35:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec2_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(lessThan(c, vec2(0.0))); + vec2 result = vec2(lessThan(c, vec2(0.0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec3_frag.frag 2017-01-13 01:35:20.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec3_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(lessThan(c, vec3(0.0))); + vec3 result = vec3(lessThan(c, vec3(0.0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec3_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec3_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec3_frag_ref.frag 2017-01-13 01:35:23.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec3_frag_ref.frag 2017-01-16 01:36:26.000000000 +0000 @@ -43,6 +43,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(lt(c, vec3(0.0))); + vec3 result = vec3(lt(c, vec3(0.0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec3_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec3_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec3_vert_ref.vert 2017-01-13 01:35:24.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec3_vert_ref.vert 2017-01-16 01:36:26.000000000 +0000 @@ -43,7 +43,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(lt(c, vec3(0.0))); + vec3 result = vec3(lt(c, vec3(0.0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec3_vert.vert 2017-01-13 01:35:24.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThan/lessThan_vec3_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(lessThan(c, vec3(0.0))); + vec3 result = vec3(lessThan(c, vec3(0.0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_001_to_008.html 2017-01-13 01:35:28.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_001_to_008.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "lessThanEqual_vec2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "lessThanEqual_vec2_frag.frag" - }, - "name": "lessThanEqual_vec2_frag.test.html", + }, + "name": "lessThanEqual_vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "lessThanEqual_vec2_vert_ref.vert", + "vertexShader": "lessThanEqual_vec2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "lessThanEqual_vec2_vert.vert", + "vertexShader": "lessThanEqual_vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "lessThanEqual_vec2_vert.test.html", + }, + "name": "lessThanEqual_vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "lessThanEqual_vec3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "lessThanEqual_vec3_frag.frag" - }, - "name": "lessThanEqual_vec3_frag.test.html", + }, + "name": "lessThanEqual_vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "lessThanEqual_vec3_vert_ref.vert", + "vertexShader": "lessThanEqual_vec3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "lessThanEqual_vec3_vert.vert", + "vertexShader": "lessThanEqual_vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "lessThanEqual_vec3_vert.test.html", + }, + "name": "lessThanEqual_vec3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "lessThanEqual_ivec2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "lessThanEqual_ivec2_frag.frag" - }, - "name": "lessThanEqual_ivec2_frag.test.html", + }, + "name": "lessThanEqual_ivec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "lessThanEqual_ivec2_vert_ref.vert", + "vertexShader": "lessThanEqual_ivec2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "lessThanEqual_ivec2_vert.vert", + "vertexShader": "lessThanEqual_ivec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "lessThanEqual_ivec2_vert.test.html", + }, + "name": "lessThanEqual_ivec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "lessThanEqual_ivec3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "lessThanEqual_ivec3_frag.frag" - }, - "name": "lessThanEqual_ivec3_frag.test.html", + }, + "name": "lessThanEqual_ivec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "lessThanEqual_ivec3_vert_ref.vert", + "vertexShader": "lessThanEqual_ivec3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "lessThanEqual_ivec3_vert.vert", + "vertexShader": "lessThanEqual_ivec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "lessThanEqual_ivec3_vert.test.html", + }, + "name": "lessThanEqual_ivec3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec2_frag.frag 2017-01-13 01:35:29.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec2_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(lessThanEqual(ivec2(c), ivec2(0))); + vec2 result = vec2(lessThanEqual(ivec2(c), ivec2(0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec2_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec2_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec2_frag_ref.frag 2017-01-13 01:35:30.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec2_frag_ref.frag 2017-01-16 01:36:26.000000000 +0000 @@ -41,6 +41,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(lte(ivec2(c), ivec2(0))); + vec2 result = vec2(lte(ivec2(c), ivec2(0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec2_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec2_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec2_vert_ref.vert 2017-01-13 01:35:34.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec2_vert_ref.vert 2017-01-16 01:36:26.000000000 +0000 @@ -41,7 +41,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(lte(ivec2(c), ivec2(0))); + vec2 result = vec2(lte(ivec2(c), ivec2(0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec2_vert.vert 2017-01-13 01:35:33.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec2_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(lessThanEqual(ivec2(c), ivec2(0))); + vec2 result = vec2(lessThanEqual(ivec2(c), ivec2(0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec3_frag.frag 2017-01-13 01:35:34.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec3_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(lessThanEqual(ivec3(c), ivec3(0))); + vec3 result = vec3(lessThanEqual(ivec3(c), ivec3(0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec3_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec3_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec3_frag_ref.frag 2017-01-13 01:35:34.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec3_frag_ref.frag 2017-01-16 01:36:26.000000000 +0000 @@ -43,6 +43,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(lte(ivec3(c), ivec3(0))); + vec3 result = vec3(lte(ivec3(c), ivec3(0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec3_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec3_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec3_vert_ref.vert 2017-01-13 01:35:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec3_vert_ref.vert 2017-01-16 01:36:26.000000000 +0000 @@ -43,7 +43,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(lte(ivec3(c), ivec3(0))); + vec3 result = vec3(lte(ivec3(c), ivec3(0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec3_vert.vert 2017-01-13 01:35:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_ivec3_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(lessThanEqual(ivec3(c), ivec3(0))); + vec3 result = vec3(lessThanEqual(ivec3(c), ivec3(0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec2_frag.frag 2017-01-13 01:35:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec2_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -35,6 +35,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(lessThanEqual(c, vec2(0.0))); + vec2 result = vec2(lessThanEqual(c, vec2(0.0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec2_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec2_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec2_frag_ref.frag 2017-01-13 01:35:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec2_frag_ref.frag 2017-01-16 01:36:26.000000000 +0000 @@ -45,6 +45,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(lte(c, vec2(0.0))); + vec2 result = vec2(lte(c, vec2(0.0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec2_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec2_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec2_vert_ref.vert 2017-01-13 01:35:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec2_vert_ref.vert 2017-01-16 01:36:26.000000000 +0000 @@ -41,7 +41,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(lte(c, vec2(0.0))); + vec2 result = vec2(lte(c, vec2(0.0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec2_vert.vert 2017-01-13 01:35:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec2_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(lessThanEqual(c, vec2(0.0))); + vec2 result = vec2(lessThanEqual(c, vec2(0.0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec3_frag.frag 2017-01-13 01:35:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec3_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(lessThanEqual(c, vec3(0.0))); + vec3 result = vec3(lessThanEqual(c, vec3(0.0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec3_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec3_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec3_frag_ref.frag 2017-01-13 01:35:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec3_frag_ref.frag 2017-01-16 01:36:26.000000000 +0000 @@ -43,6 +43,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(lte(c, vec3(0.0))); + vec3 result = vec3(lte(c, vec3(0.0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec3_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec3_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec3_vert_ref.vert 2017-01-13 01:35:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec3_vert_ref.vert 2017-01-16 01:36:26.000000000 +0000 @@ -43,7 +43,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(lte(c, vec3(0.0))); + vec3 result = vec3(lte(c, vec3(0.0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec3_vert.vert 2017-01-13 01:35:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/lessThanEqual/lessThanEqual_vec3_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(lessThanEqual(c, vec3(0.0))); + vec3 result = vec3(lessThanEqual(c, vec3(0.0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/log/log_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/log/log_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/log/log_001_to_008.html 2017-01-13 01:35:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/log/log_001_to_008.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log_float_frag_xvary.frag" - }, - "name": "log_float_frag_xvary.test.html", + }, + "name": "log_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log_float_frag_xvary01_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log_float_frag_xvary01.frag" - }, - "name": "log_float_frag_xvary01.test.html", + }, + "name": "log_float_frag_xvary01.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log_vec2_frag_xvary.frag" - }, - "name": "log_vec2_frag_xvary.test.html", + }, + "name": "log_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log_vec2_frag_xvary01_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log_vec2_frag_xvary01.frag" - }, - "name": "log_vec2_frag_xvary01.test.html", + }, + "name": "log_vec2_frag_xvary01.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log_vec3_frag_xvary.frag" - }, - "name": "log_vec3_frag_xvary.test.html", + }, + "name": "log_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log_vec3_frag_xvary01_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log_vec3_frag_xvary01.frag" - }, - "name": "log_vec3_frag_xvary01.test.html", + }, + "name": "log_vec3_frag_xvary01.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "log_float_vert_xvary_ref.vert", + "vertexShader": "log_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "log_float_vert_xvary.vert", + "vertexShader": "log_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "log_float_vert_xvary.test.html", + }, + "name": "log_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "log_float_vert_xvary01_ref.vert", + "vertexShader": "log_float_vert_xvary01_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "log_float_vert_xvary01.vert", + "vertexShader": "log_float_vert_xvary01.vert", "fragmentShader": "../default/default.frag" - }, - "name": "log_float_vert_xvary01.test.html", + }, + "name": "log_float_vert_xvary01.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/log/log_009_to_012.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/log/log_009_to_012.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/log/log_009_to_012.html 2017-01-13 01:35:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/log/log_009_to_012.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,54 +46,54 @@ "tests": [ { "referenceProgram": { - "vertexShader": "log_vec2_vert_xvary_ref.vert", + "vertexShader": "log_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "log_vec2_vert_xvary.vert", + "vertexShader": "log_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "log_vec2_vert_xvary.test.html", + }, + "name": "log_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "log_vec2_vert_xvary01_ref.vert", + "vertexShader": "log_vec2_vert_xvary01_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "log_vec2_vert_xvary01.vert", + "vertexShader": "log_vec2_vert_xvary01.vert", "fragmentShader": "../default/default.frag" - }, - "name": "log_vec2_vert_xvary01.test.html", + }, + "name": "log_vec2_vert_xvary01.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "log_vec3_vert_xvary_ref.vert", + "vertexShader": "log_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "log_vec3_vert_xvary.vert", + "vertexShader": "log_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "log_vec3_vert_xvary.test.html", + }, + "name": "log_vec3_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "log_vec3_vert_xvary01_ref.vert", + "vertexShader": "log_vec3_vert_xvary01_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "log_vec3_vert_xvary01.vert", + "vertexShader": "log_vec3_vert_xvary01.vert", "fragmentShader": "../default/default.frag" - }, - "name": "log_vec3_vert_xvary01.test.html", + }, + "name": "log_vec3_vert_xvary01.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/log2/log2_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/log2/log2_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/log2/log2_001_to_008.html 2017-01-13 01:35:38.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/log2/log2_001_to_008.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log2_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log2_float_frag_xvary.frag" - }, - "name": "log2_float_frag_xvary.test.html", + }, + "name": "log2_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log2_float_frag_xvary01_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log2_float_frag_xvary01.frag" - }, - "name": "log2_float_frag_xvary01.test.html", + }, + "name": "log2_float_frag_xvary01.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log2_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log2_vec2_frag_xvary.frag" - }, - "name": "log2_vec2_frag_xvary.test.html", + }, + "name": "log2_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log2_vec2_frag_xvary01_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log2_vec2_frag_xvary01.frag" - }, - "name": "log2_vec2_frag_xvary01.test.html", + }, + "name": "log2_vec2_frag_xvary01.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log2_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log2_vec3_frag_xvary.frag" - }, - "name": "log2_vec3_frag_xvary.test.html", + }, + "name": "log2_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log2_vec3_frag_xvary01_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "log2_vec3_frag_xvary01.frag" - }, - "name": "log2_vec3_frag_xvary01.test.html", + }, + "name": "log2_vec3_frag_xvary01.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "log2_float_vert_xvary_ref.vert", + "vertexShader": "log2_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "log2_float_vert_xvary.vert", + "vertexShader": "log2_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "log2_float_vert_xvary.test.html", + }, + "name": "log2_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "log2_float_vert_xvary01_ref.vert", + "vertexShader": "log2_float_vert_xvary01_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "log2_float_vert_xvary01.vert", + "vertexShader": "log2_float_vert_xvary01.vert", "fragmentShader": "../default/default.frag" - }, - "name": "log2_float_vert_xvary01.test.html", + }, + "name": "log2_float_vert_xvary01.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/log2/log2_009_to_012.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/log2/log2_009_to_012.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/log2/log2_009_to_012.html 2017-01-13 01:35:38.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/log2/log2_009_to_012.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,54 +46,54 @@ "tests": [ { "referenceProgram": { - "vertexShader": "log2_vec2_vert_xvary_ref.vert", + "vertexShader": "log2_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "log2_vec2_vert_xvary.vert", + "vertexShader": "log2_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "log2_vec2_vert_xvary.test.html", + }, + "name": "log2_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "log2_vec2_vert_xvary01_ref.vert", + "vertexShader": "log2_vec2_vert_xvary01_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "log2_vec2_vert_xvary01.vert", + "vertexShader": "log2_vec2_vert_xvary01.vert", "fragmentShader": "../default/default.frag" - }, - "name": "log2_vec2_vert_xvary01.test.html", + }, + "name": "log2_vec2_vert_xvary01.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "log2_vec3_vert_xvary_ref.vert", + "vertexShader": "log2_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "log2_vec3_vert_xvary.vert", + "vertexShader": "log2_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "log2_vec3_vert_xvary.test.html", + }, + "name": "log2_vec3_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "log2_vec3_vert_xvary01_ref.vert", + "vertexShader": "log2_vec3_vert_xvary01_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "log2_vec3_vert_xvary01.vert", + "vertexShader": "log2_vec3_vert_xvary01.vert", "fragmentShader": "../default/default.frag" - }, - "name": "log2_vec3_vert_xvary01.test.html", + }, + "name": "log2_vec3_vert_xvary01.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat3_copy_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat3_copy_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat3_copy_frag.frag 2017-01-13 01:35:38.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat3_copy_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -37,9 +37,9 @@ { float x; // Declare a constant 3 by 3 matrix with unique elements. - const mat3 a = mat3( 1.0, 2.0, 3.0, - 4.0, 5.0, 6.0, - 7.0, 8.0, 9.0); + const mat3 a = mat3( 1.0, 2.0, 3.0, + 4.0, 5.0, 6.0, + 7.0, 8.0, 9.0); // Copy the constant matrix to another non-const matrix. mat3 b = a; @@ -60,7 +60,7 @@ bool rows = true; x = b[0][0] + b[1][0] + b[2][0]; if( x < 12.0-ERROR_EPSILON || x > 12.0+ERROR_EPSILON ) rows = false; - x = b[0][1] + b[1][1] + b[2][1]; + x = b[0][1] + b[1][1] + b[2][1]; if(x < 15.0-ERROR_EPSILON || x > 15.0+ERROR_EPSILON ) rows = false; x = b[0][2] + b[1][2] + b[2][2]; if(x < 18.0-ERROR_EPSILON || x > 18.0+ERROR_EPSILON ) rows = false; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat3_copy_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat3_copy_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat3_copy_vert.vert 2017-01-13 01:35:38.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat3_copy_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -57,7 +57,7 @@ x = b[0][0] + b[1][0] + b[2][0]; x = b[0][0] + b[1][0] + b[2][0]; if( x < 73.0-ERROR_EPSILON || x > 73.0+ERROR_EPSILON ) rows = false; - x = b[0][1] + b[1][1] + b[2][1]; + x = b[0][1] + b[1][1] + b[2][1]; if(x < 146.0-ERROR_EPSILON || x > 146.0+ERROR_EPSILON ) rows = false; x = b[0][2] + b[1][2] + b[2][2]; if(x < 292.0-ERROR_EPSILON || x > 292.0+ERROR_EPSILON ) rows = false; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat3_frag.frag 2017-01-13 01:35:38.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat3_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -37,9 +37,9 @@ { float x; // Declare a constant 3 by 3 matrix with unique elements. - const mat3 a = mat3( 1.0, 2.0, 3.0, - 4.0, 5.0, 6.0, - 7.0, 8.0, 9.0); + const mat3 a = mat3( 1.0, 2.0, 3.0, + 4.0, 5.0, 6.0, + 7.0, 8.0, 9.0); // Check each element. bool elms = true; @@ -57,7 +57,7 @@ bool rows = true; x = a[0][0] + a[1][0] + a[2][0]; if( x < 12.0-ERROR_EPSILON || x > 12.0+ERROR_EPSILON ) rows = false; - x = a[0][1] + a[1][1] + a[2][1]; + x = a[0][1] + a[1][1] + a[2][1]; if(x < 15.0-ERROR_EPSILON || x > 15.0+ERROR_EPSILON ) rows = false; x = a[0][2] + a[1][2] + a[2][2]; if(x < 18.0-ERROR_EPSILON || x > 18.0+ERROR_EPSILON ) rows = false; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat3_vert.vert 2017-01-13 01:35:38.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat3_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -53,7 +53,7 @@ bool rows = true; x = a[0][0] + a[1][0] + a[2][0]; if( x < 73.0-ERROR_EPSILON || x > 73.0+ERROR_EPSILON ) rows = false; - x = a[0][1] + a[1][1] + a[2][1]; + x = a[0][1] + a[1][1] + a[2][1]; if(x < 146.0-ERROR_EPSILON || x > 146.0+ERROR_EPSILON ) rows = false; x = a[0][2] + a[1][2] + a[2][2]; if(x < 292.0-ERROR_EPSILON || x > 292.0+ERROR_EPSILON ) rows = false; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat4_copy_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat4_copy_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat4_copy_frag.frag 2017-01-13 01:35:38.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat4_copy_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -37,10 +37,10 @@ { float x; // Declare a constant 4 by 4 matrix with unique elements. - const mat4 a = mat4( 1.0, 2.0, 3.0, 4.0, - 5.0, 6.0, 7.0, 8.0, - 9.0, 10.0, 11.0, 12.0, - 13.0, 14.0, 15.0, 16.0); + const mat4 a = mat4( 1.0, 2.0, 3.0, 4.0, + 5.0, 6.0, 7.0, 8.0, + 9.0, 10.0, 11.0, 12.0, + 13.0, 14.0, 15.0, 16.0); // Copy the constant matrix to another non-const matrix. mat4 b = a; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat4_frag.frag 2017-01-13 01:35:38.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/const_mat4_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -37,10 +37,10 @@ { float x; // Declare a constant 4 by 4 matrix with unique elements. - const mat4 a = mat4( 1.0, 2.0, 3.0, 4.0, - 5.0, 6.0, 7.0, 8.0, - 9.0, 10.0, 11.0, 12.0, - 13.0, 14.0, 15.0, 16.0); + const mat4 a = mat4( 1.0, 2.0, 3.0, 4.0, + 5.0, 6.0, 7.0, 8.0, + 9.0, 10.0, 11.0, 12.0, + 13.0, 14.0, 15.0, 16.0); // Check each element. bool elms = true; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_001_to_008.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_001_to_008.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "const_mat2_frag.frag" - }, - "name": "const_mat2_frag.test.html", + }, + "name": "const_mat2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "const_mat2_vert.vert", + "vertexShader": "const_mat2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "const_mat2_vert.test.html", + }, + "name": "const_mat2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "const_mat3_frag.frag" - }, - "name": "const_mat3_frag.test.html", + }, + "name": "const_mat3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "const_mat3_vert.vert", + "vertexShader": "const_mat3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "const_mat3_vert.test.html", + }, + "name": "const_mat3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "const_mat4_frag.frag" - }, - "name": "const_mat4_frag.test.html", + }, + "name": "const_mat4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "const_mat4_vert.vert", + "vertexShader": "const_mat4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "const_mat4_vert.test.html", + }, + "name": "const_mat4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "const_mat2_copy_frag.frag" - }, - "name": "const_mat2_copy_frag.test.html", + }, + "name": "const_mat2_copy_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "const_mat2_copy_vert.vert", + "vertexShader": "const_mat2_copy_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "const_mat2_copy_vert.test.html", + }, + "name": "const_mat2_copy_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_009_to_016.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_009_to_016.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_009_to_016.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_009_to_016.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "const_mat3_copy_frag.frag" - }, - "name": "const_mat3_copy_frag.test.html", + }, + "name": "const_mat3_copy_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "const_mat3_copy_vert.vert", + "vertexShader": "const_mat3_copy_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "const_mat3_copy_vert.test.html", + }, + "name": "const_mat3_copy_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "const_mat4_copy_frag.frag" - }, - "name": "const_mat4_copy_frag.test.html", + }, + "name": "const_mat4_copy_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "const_mat4_copy_vert.vert", + "vertexShader": "const_mat4_copy_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "const_mat4_copy_vert.test.html", + }, + "name": "const_mat4_copy_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat2_frag.frag" - }, - "name": "mat2_frag.test.html", + }, + "name": "mat2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat2_vert.vert", + "vertexShader": "mat2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat2_vert.test.html", + }, + "name": "mat2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat3_frag.frag" - }, - "name": "mat3_frag.test.html", + }, + "name": "mat3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat3_vert.vert", + "vertexShader": "mat3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat3_vert.test.html", + }, + "name": "mat3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_017_to_024.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_017_to_024.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_017_to_024.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_017_to_024.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat4_frag.frag" - }, - "name": "mat4_frag.test.html", + }, + "name": "mat4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat4_vert.vert", + "vertexShader": "mat4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat4_vert.test.html", + }, + "name": "mat4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat2_copy_frag.frag" - }, - "name": "mat2_copy_frag.test.html", + }, + "name": "mat2_copy_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat2_copy_vert.vert", + "vertexShader": "mat2_copy_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat2_copy_vert.test.html", + }, + "name": "mat2_copy_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat3_copy_frag.frag" - }, - "name": "mat3_copy_frag.test.html", + }, + "name": "mat3_copy_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat3_copy_vert.vert", + "vertexShader": "mat3_copy_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat3_copy_vert.test.html", + }, + "name": "mat3_copy_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat4_copy_frag.frag" - }, - "name": "mat4_copy_frag.test.html", + }, + "name": "mat4_copy_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat4_copy_vert.vert", + "vertexShader": "mat4_copy_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat4_copy_vert.test.html", + }, + "name": "mat4_copy_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_025_to_032.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_025_to_032.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_025_to_032.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_025_to_032.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat2_float_frag.frag" - }, - "name": "mat2_float_frag.test.html", + }, + "name": "mat2_float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "mat2_float_vert.vert", + "vertexShader": "mat2_float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat2_float_vert.test.html", + }, + "name": "mat2_float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat2_4float_frag.frag" - }, - "name": "mat2_4float_frag.test.html", + }, + "name": "mat2_4float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "mat2_4float_vert.vert", + "vertexShader": "mat2_4float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat2_4float_vert.test.html", + }, + "name": "mat2_4float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat2_2vec2_frag.frag" - }, - "name": "mat2_2vec2_frag.test.html", + }, + "name": "mat2_2vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "mat2_2vec2_vert.vert", + "vertexShader": "mat2_2vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat2_2vec2_vert.test.html", + }, + "name": "mat2_2vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat3_float_frag.frag" - }, - "name": "mat3_float_frag.test.html", + }, + "name": "mat3_float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "mat3_float_vert.vert", + "vertexShader": "mat3_float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat3_float_vert.test.html", + }, + "name": "mat3_float_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_033_to_040.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_033_to_040.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_033_to_040.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_033_to_040.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat3_9float_frag.frag" - }, - "name": "mat3_9float_frag.test.html", + }, + "name": "mat3_9float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "mat3_9float_vert.vert", + "vertexShader": "mat3_9float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat3_9float_vert.test.html", + }, + "name": "mat3_9float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat3_3vec3_frag.frag" - }, - "name": "mat3_3vec3_frag.test.html", + }, + "name": "mat3_3vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "mat3_3vec3_vert.vert", + "vertexShader": "mat3_3vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat3_3vec3_vert.test.html", + }, + "name": "mat3_3vec3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat4_4vec4_frag.frag" - }, - "name": "mat4_4vec4_frag.test.html", + }, + "name": "mat4_4vec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat4_4vec4_vert.vert", + "vertexShader": "mat4_4vec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat4_4vec4_vert.test.html", + }, + "name": "mat4_4vec4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mat4_16float_frag.frag" - }, - "name": "mat4_16float_frag.test.html", + }, + "name": "mat4_16float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat4_16float_vert.vert", + "vertexShader": "mat4_16float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mat4_16float_vert.test.html", + }, + "name": "mat4_16float_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_041_to_046.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_041_to_046.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_041_to_046.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat_041_to_046.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,152 +46,152 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "array_const_mat2_frag.frag" - }, - "name": "array_const_mat2_frag.test.html", + }, + "name": "array_const_mat2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "array_const_mat2_vert.vert", + "vertexShader": "array_const_mat2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "array_const_mat2_vert.test.html", + }, + "name": "array_const_mat2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "array_const_mat3_frag.frag" - }, - "name": "array_const_mat3_frag.test.html", + }, + "name": "array_const_mat3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "array_const_mat3_vert.vert", + "vertexShader": "array_const_mat3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "array_const_mat3_vert.test.html", + }, + "name": "array_const_mat3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "array_const_mat4_frag.frag" - }, - "name": "array_const_mat4_frag.test.html", + }, + "name": "array_const_mat4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "array_const_mat4_vert.vert", + "vertexShader": "array_const_mat4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "array_const_mat4_vert.test.html", + }, + "name": "array_const_mat4_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat2_float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat2_float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat2_float_frag.frag 2017-01-13 01:35:38.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat2_float_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -38,7 +38,7 @@ result = black; if((m[0][1] != 0.0)) result = black; - + if((m[1][0] != 0.0)) result = black; if((m[1][1] != 0.5)) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_copy_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_copy_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_copy_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_copy_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -37,9 +37,9 @@ { float x; // Declare a 3 by 3 matrix with unique elements. - mat3 a = mat3( 1.0, 2.0, 3.0, - 4.0, 5.0, 6.0, - 7.0, 8.0, 9.0); + mat3 a = mat3( 1.0, 2.0, 3.0, + 4.0, 5.0, 6.0, + 7.0, 8.0, 9.0); // Copy the matrix to another non-const matrix. mat3 b = a; @@ -60,7 +60,7 @@ bool rows = true; x = b[0][0] + b[1][0] + b[2][0]; if( x < 12.0-ERROR_EPSILON || x > 12.0+ERROR_EPSILON ) rows = false; - x = b[0][1] + b[1][1] + b[2][1]; + x = b[0][1] + b[1][1] + b[2][1]; if(x < 15.0-ERROR_EPSILON || x > 15.0+ERROR_EPSILON ) rows = false; x = b[0][2] + b[1][2] + b[2][2]; if(x < 18.0-ERROR_EPSILON || x > 18.0+ERROR_EPSILON ) rows = false; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_copy_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_copy_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_copy_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_copy_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -56,7 +56,7 @@ bool rows = true; x = b[0][0] + b[1][0] + b[2][0]; if( x < 73.0-ERROR_EPSILON || x > 73.0+ERROR_EPSILON ) rows = false; - x = b[0][1] + b[1][1] + b[2][1]; + x = b[0][1] + b[1][1] + b[2][1]; if(x < 146.0-ERROR_EPSILON || x > 146.0+ERROR_EPSILON ) rows = false; x = b[0][2] + b[1][2] + b[2][2]; if(x < 292.0-ERROR_EPSILON || x > 292.0+ERROR_EPSILON ) rows = false; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_float_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_float_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -40,20 +40,20 @@ result = black; if((m[0][2] != 0.0)) result = black; - + if((m[1][0] != 0.0)) result = black; if((m[1][1] != 0.5)) result = black; if((m[1][2] != 0.0)) result = black; - + if((m[2][0] != 0.0)) result = black; if((m[2][1] != 0.0)) result = black; if((m[2][2] != 0.5)) result = black; - + gl_FragColor = result; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_float_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_float_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_float_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_float_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -39,14 +39,14 @@ result = black; if((m[0][2] != 0.0)) result = black; - + if((m[1][0] != 0.0)) result = black; if((m[1][1] != 0.5)) result = black; if((m[1][2] != 0.0)) result = black; - + if((m[2][0] != 0.0)) result = black; if((m[2][1] != 0.0)) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -37,9 +37,9 @@ { float x; // Declare a 3 by 3 matrix with unique elements. - mat3 a = mat3( 1.0, 2.0, 3.0, - 4.0, 5.0, 6.0, - 7.0, 8.0, 9.0); + mat3 a = mat3( 1.0, 2.0, 3.0, + 4.0, 5.0, 6.0, + 7.0, 8.0, 9.0); // Check each element. bool elms = true; @@ -57,7 +57,7 @@ bool rows = true; x = a[0][0] + a[1][0] + a[2][0]; if( x < 12.0-ERROR_EPSILON || x > 12.0+ERROR_EPSILON ) rows = false; - x = a[0][1] + a[1][1] + a[2][1]; + x = a[0][1] + a[1][1] + a[2][1]; if(x < 15.0-ERROR_EPSILON || x > 15.0+ERROR_EPSILON ) rows = false; x = a[0][2] + a[1][2] + a[2][2]; if(x < 18.0-ERROR_EPSILON || x > 18.0+ERROR_EPSILON ) rows = false; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat3_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -53,7 +53,7 @@ bool rows = true; x = a[0][0] + a[1][0] + a[2][0]; if( x < 73.0-ERROR_EPSILON || x > 73.0+ERROR_EPSILON ) rows = false; - x = a[0][1] + a[1][1] + a[2][1]; + x = a[0][1] + a[1][1] + a[2][1]; if(x < 146.0-ERROR_EPSILON || x > 146.0+ERROR_EPSILON ) rows = false; x = a[0][2] + a[1][2] + a[2][2]; if(x < 292.0-ERROR_EPSILON || x > 292.0+ERROR_EPSILON ) rows = false; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_16float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_16float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_16float_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_16float_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -36,9 +36,9 @@ void main (void) { - mat4 a = mat4( 1.0, 2.0, 3.0, 4.0, - 5.0, 6.0, 7.0, 8.0, - 9.0, 10.0, 11.0, 12.0, + mat4 a = mat4( 1.0, 2.0, 3.0, 4.0, + 5.0, 6.0, 7.0, 8.0, + 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0); float gray,sum1=0.0,sum2=0.0,sum3=0.0,sum4=0.0; int i; @@ -48,25 +48,25 @@ sum2 += a[1][0]; sum3 += a[2][0]; sum4 += a[3][0]; - + sum1 += a[0][1]; sum2 += a[1][1]; sum3 += a[2][1]; sum4 += a[3][1]; - + sum1 += a[0][2]; sum2 += a[1][2]; sum3 += a[2][2]; sum4 += a[3][2]; - + sum1 += a[0][3]; sum2 += a[1][3]; sum3 += a[2][3]; sum4 += a[3][3]; - if( ( sum1 > 10.0-ERROR_EPSILON && sum1 < 10.0+ERROR_EPSILON ) && - ( sum2 > 26.0-ERROR_EPSILON && sum2 < 26.0+ERROR_EPSILON) && - ( sum3 > 42.0-ERROR_EPSILON && sum3 < 42.0+ERROR_EPSILON) && + if( ( sum1 > 10.0-ERROR_EPSILON && sum1 < 10.0+ERROR_EPSILON ) && + ( sum2 > 26.0-ERROR_EPSILON && sum2 < 26.0+ERROR_EPSILON) && + ( sum3 > 42.0-ERROR_EPSILON && sum3 < 42.0+ERROR_EPSILON) && ( sum4 > 58.0-ERROR_EPSILON && sum4 < 58.0+ERROR_EPSILON) ) gray=1.0; else gray=0.0; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_16float_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_16float_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_16float_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_16float_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -31,9 +31,9 @@ void main (void) { - mat4 a = mat4(1.0, 2.0, 3.0, 4.0, - 5.0, 6.0, 7.0, 8.0, - 9.0, 10.0, 11.0, 12.0, + mat4 a = mat4(1.0, 2.0, 3.0, 4.0, + 5.0, 6.0, 7.0, 8.0, + 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0); float gray,sum1=0.0,sum2=0.0,sum3=0.0,sum4=0.0; @@ -43,25 +43,25 @@ sum2 = sum2 + a[1][0]; sum3 = sum3 + a[2][0]; sum4 = sum4 + a[3][0]; - + sum1 = sum1 + a[0][1]; sum2 = sum2 + a[1][1]; sum3 = sum3 + a[2][1]; sum4 = sum4 + a[3][1]; - + sum1 = sum1 + a[0][2]; sum2 = sum2 + a[1][2]; sum3 = sum3 + a[2][2]; sum4 = sum4 + a[3][2]; - + sum1 = sum1 + a[0][3]; sum2 = sum2 + a[1][3]; sum3 = sum3 + a[2][3]; sum4 = sum4 + a[3][3]; - if( ( sum1 > 10.0-ERROR_EPSILON && sum1 < 10.0+ERROR_EPSILON ) && - ( sum2 > 26.0-ERROR_EPSILON && sum2 < 26.0+ERROR_EPSILON) && - ( sum3 > 42.0-ERROR_EPSILON && sum3 < 42.0+ERROR_EPSILON) && + if( ( sum1 > 10.0-ERROR_EPSILON && sum1 < 10.0+ERROR_EPSILON ) && + ( sum2 > 26.0-ERROR_EPSILON && sum2 < 26.0+ERROR_EPSILON) && + ( sum3 > 42.0-ERROR_EPSILON && sum3 < 42.0+ERROR_EPSILON) && ( sum4 > 58.0-ERROR_EPSILON && sum4 < 58.0+ERROR_EPSILON) ) gray=1.0; else gray=0.0; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_4vec4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_4vec4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_4vec4_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_4vec4_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -50,25 +50,25 @@ sum2 = sum2 + a[1][0]; sum3 = sum3 + a[2][0]; sum4 = sum4 + a[3][0]; - + sum1 = sum1 + a[0][1]; sum2 = sum2 + a[1][1]; sum3 = sum3 + a[2][1]; sum4 = sum4 + a[3][1]; - + sum1 = sum1 + a[0][2]; sum2 = sum2 + a[1][2]; sum3 = sum3 + a[2][2]; sum4 = sum4 + a[3][2]; - + sum1 = sum1 + a[0][3]; sum2 = sum2 + a[1][3]; sum3 = sum3 + a[2][3]; sum4 = sum4 + a[3][3]; - if( ( sum1 > 10.0-ERROR_EPSILON && sum1 < 10.0+ERROR_EPSILON ) && - ( sum2 > 26.0-ERROR_EPSILON && sum2 < 26.0+ERROR_EPSILON) && - ( sum3 > 42.0-ERROR_EPSILON && sum3 < 42.0+ERROR_EPSILON) && + if( ( sum1 > 10.0-ERROR_EPSILON && sum1 < 10.0+ERROR_EPSILON ) && + ( sum2 > 26.0-ERROR_EPSILON && sum2 < 26.0+ERROR_EPSILON) && + ( sum3 > 42.0-ERROR_EPSILON && sum3 < 42.0+ERROR_EPSILON) && ( sum4 > 58.0-ERROR_EPSILON && sum4 < 58.0+ERROR_EPSILON) ) gray=1.0; else gray=0.0; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_4vec4_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_4vec4_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_4vec4_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_4vec4_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -45,25 +45,25 @@ sum2 = sum2 + a[1][0]; sum3 = sum3 + a[2][0]; sum4 = sum4 + a[3][0]; - + sum1 = sum1 + a[0][1]; sum2 = sum2 + a[1][1]; sum3 = sum3 + a[2][1]; sum4 = sum4 + a[3][1]; - + sum1 = sum1 + a[0][2]; sum2 = sum2 + a[1][2]; sum3 = sum3 + a[2][2]; sum4 = sum4 + a[3][2]; - + sum1 = sum1 + a[0][3]; sum2 = sum2 + a[1][3]; sum3 = sum3 + a[2][3]; sum4 = sum4 + a[3][3]; - if( ( sum1 > 10.0-ERROR_EPSILON && sum1 < 10.0+ERROR_EPSILON ) && - ( sum2 > 26.0-ERROR_EPSILON && sum2 < 26.0+ERROR_EPSILON) && - ( sum3 > 42.0-ERROR_EPSILON && sum3 < 42.0+ERROR_EPSILON) && + if( ( sum1 > 10.0-ERROR_EPSILON && sum1 < 10.0+ERROR_EPSILON ) && + ( sum2 > 26.0-ERROR_EPSILON && sum2 < 26.0+ERROR_EPSILON) && + ( sum3 > 42.0-ERROR_EPSILON && sum3 < 42.0+ERROR_EPSILON) && ( sum4 > 58.0-ERROR_EPSILON && sum4 < 58.0+ERROR_EPSILON) ) gray=1.0; else gray=0.0; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_copy_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_copy_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_copy_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_copy_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -37,10 +37,10 @@ { float x; // Declare a constant 4 by 4 matrix with unique elements. - mat4 a = mat4( 1.0, 2.0, 3.0, 4.0, - 5.0, 6.0, 7.0, 8.0, - 9.0, 10.0, 11.0, 12.0, - 13.0, 14.0, 15.0, 16.0); + mat4 a = mat4( 1.0, 2.0, 3.0, 4.0, + 5.0, 6.0, 7.0, 8.0, + 9.0, 10.0, 11.0, 12.0, + 13.0, 14.0, 15.0, 16.0); // Copy the matrix to another non-const matrix. mat4 b = a; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat/mat4_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -37,10 +37,10 @@ { float x; // Declare a 4 by 4 matrix with unique elements. - mat4 a = mat4( 1.0, 2.0, 3.0, 4.0, - 5.0, 6.0, 7.0, 8.0, - 9.0, 10.0, 11.0, 12.0, - 13.0, 14.0, 15.0, 16.0); + mat4 a = mat4( 1.0, 2.0, 3.0, 4.0, + 5.0, 6.0, 7.0, 8.0, + 9.0, 10.0, 11.0, 12.0, + 13.0, 14.0, 15.0, 16.0); // Check each element. bool elms = true; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3_001_to_006.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3_001_to_006.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,314 +46,314 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 0.5, - 0.25, - 0.125, + 0.5, + 0.25, + 0.125, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat3arraysimple_vert.vert", + "vertexShader": "mat3arraysimple_vert.vert", "uniforms": { "testmat3": { - "count": 2, - "type": "uniformMatrix3fv", - "transpose": false, - "value": [ - 1.0, - 0.0, - 0.0, - 0.0, - 1.0, - 0.0, - 0.0, - 0.0, - 1.0, - 1.0, - 0.25, - 0.0, - 0.0, - 0.25, - 0.0, - 0.0, - 0.0, + "count": 2, + "type": "uniformMatrix3fv", + "transpose": false, + "value": [ + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.25, + 0.0, + 0.0, + 0.25, + 0.0, + 0.0, + 0.0, 0.25 ] } - }, + }, "fragmentShader": "../default/default.frag" - }, - "name": "mat3arraysimple_vert.test.html", + }, + "name": "mat3arraysimple_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 0.75, - 0.625, + 1.0, + 0.75, + 0.625, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat3arrayindirect0_vert.vert", + "vertexShader": "mat3arrayindirect0_vert.vert", "uniforms": { "testmat3": { - "count": 2, - "type": "uniformMatrix3fv", - "transpose": false, - "value": [ - 1.0, - 0.0, - 0.0, - 0.0, - 1.0, - 0.0, - 0.0, - 0.0, - 1.0, - 1.0, - 0.25, - 0.0, - 0.0, - 0.25, - 0.0, - 0.0, - 0.0, + "count": 2, + "type": "uniformMatrix3fv", + "transpose": false, + "value": [ + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.25, + 0.0, + 0.0, + 0.25, + 0.0, + 0.0, + 0.0, 0.25 ] } - }, + }, "fragmentShader": "../default/default.frag" - }, - "name": "mat3arrayindirect0_vert.test.html", + }, + "name": "mat3arrayindirect0_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 0.5, - 0.25, - 0.125, + 0.5, + 0.25, + 0.125, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mat3arrayindirect1_vert.vert", + "vertexShader": "mat3arrayindirect1_vert.vert", "uniforms": { "testmat3": { - "count": 2, - "type": "uniformMatrix3fv", - "transpose": false, - "value": [ - 1.0, - 0.0, - 0.0, - 0.0, - 1.0, - 0.0, - 0.0, - 0.0, - 1.0, - 1.0, - 0.25, - 0.0, - 0.0, - 0.25, - 0.0, - 0.0, - 0.0, + "count": 2, + "type": "uniformMatrix3fv", + "transpose": false, + "value": [ + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.25, + 0.0, + 0.0, + 0.25, + 0.0, + 0.0, + 0.0, 0.25 ] } - }, + }, "fragmentShader": "../default/default.frag" - }, - "name": "mat3arrayindirect1_vert.test.html", + }, + "name": "mat3arrayindirect1_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 0.5, - 0.25, - 0.125, + 0.5, + 0.25, + 0.125, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "testmat3": { - "count": 2, - "type": "uniformMatrix3fv", - "transpose": false, - "value": [ - 1.0, - 0.0, - 0.0, - 0.0, - 1.0, - 0.0, - 0.0, - 0.0, - 1.0, - 1.0, - 0.25, - 0.0, - 0.0, - 0.25, - 0.0, - 0.0, - 0.0, + "count": 2, + "type": "uniformMatrix3fv", + "transpose": false, + "value": [ + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.25, + 0.0, + 0.0, + 0.25, + 0.0, + 0.0, + 0.0, 0.25 ] } - }, + }, "fragmentShader": "mat3arraysimple_frag.frag" - }, - "name": "mat3arraysimple_frag.test.html", + }, + "name": "mat3arraysimple_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 0.75, - 0.625, + 1.0, + 0.75, + 0.625, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "testmat3": { - "count": 2, - "type": "uniformMatrix3fv", - "transpose": false, - "value": [ - 1.0, - 0.0, - 0.0, - 0.0, - 1.0, - 0.0, - 0.0, - 0.0, - 1.0, - 1.0, - 0.25, - 0.0, - 0.0, - 0.25, - 0.0, - 0.0, - 0.0, + "count": 2, + "type": "uniformMatrix3fv", + "transpose": false, + "value": [ + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.25, + 0.0, + 0.0, + 0.25, + 0.0, + 0.0, + 0.0, 0.25 ] } - }, + }, "fragmentShader": "mat3arrayindirect0_frag.frag" - }, - "name": "mat3arrayindirect0_frag.test.html", + }, + "name": "mat3arrayindirect0_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 0.5, - 0.25, - 0.125, + 0.5, + 0.25, + 0.125, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "testmat3": { - "count": 2, - "type": "uniformMatrix3fv", - "transpose": false, - "value": [ - 1.0, - 0.0, - 0.0, - 0.0, - 1.0, - 0.0, - 0.0, - 0.0, - 1.0, - 1.0, - 0.25, - 0.0, - 0.0, - 0.25, - 0.0, - 0.0, - 0.0, + "count": 2, + "type": "uniformMatrix3fv", + "transpose": false, + "value": [ + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.25, + 0.0, + 0.0, + 0.25, + 0.0, + 0.0, + 0.0, 0.25 ] } - }, + }, "fragmentShader": "mat3arrayindirect1_frag.frag" - }, - "name": "mat3arrayindirect1_frag.test.html", + }, + "name": "mat3arrayindirect1_frag.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arrayindirect0_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arrayindirect0_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arrayindirect0_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arrayindirect0_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -27,7 +27,7 @@ precision mediump float; #endif // -// mat3arrayindirect0_frag.frag: Fragment shader solid color +// mat3arrayindirect0_frag.frag: Fragment shader solid color // The vec3 values are determined at runtime. // // @@ -38,7 +38,7 @@ void main(void) { vec3 result = vec3(0.0, 0.0, 0.0); - + /* // No indirect indexing in fragment shaders for(int j = 0; j < 3; j++) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arrayindirect0_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arrayindirect0_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arrayindirect0_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arrayindirect0_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -26,7 +26,7 @@ attribute vec4 gtf_Vertex; uniform mat4 gtf_ModelViewProjectionMatrix; // -// mat3arrayindirect0_vert.vert: Vertex shader solid color +// mat3arrayindirect0_vert.vert: Vertex shader solid color // The vec3 values are determined at runtime. // // @@ -38,15 +38,15 @@ void main(void) { vec3 result = vec3(0.0, 0.0, 0.0); - + for(int j = 0; j < 3; j++) { result += testmat3[0][j] + testmat3[1][j]; } - + color = vec4(result/2.0, 0.5); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; - - + + } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arrayindirect1_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arrayindirect1_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arrayindirect1_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arrayindirect1_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -38,7 +38,7 @@ void main(void) { vec3 result = vec3(0.0, 0.0, 0.0); - + /* // No indirect indexing in fragment shaders for(int j = 0; j < 3; j++) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arrayindirect1_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arrayindirect1_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arrayindirect1_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arrayindirect1_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -38,16 +38,16 @@ void main(void) { vec3 result = vec3(0.0, 0.0, 0.0); - + for(int j = 0; j < 3; j++) { result += testmat3[1][j]; } - - + + color = vec4(result/2.0, 0.5); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; - - + + } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arraysimple_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arraysimple_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arraysimple_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mat3/mat3arraysimple_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -40,10 +40,10 @@ vec3 result = vec3(0.0, 0.0, 0.0); result = testmat3[1][0] + testmat3[1][1] + testmat3[1][2]; - + color = vec4(result/2.0, 0.5); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; - - + + } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/matrixCompMult/matrixCompMult_001_to_004.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/matrixCompMult/matrixCompMult_001_to_004.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/matrixCompMult/matrixCompMult_001_to_004.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/matrixCompMult/matrixCompMult_001_to_004.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,54 +46,54 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "matrixMultComp_mat2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "matrixMultComp_mat2_frag.frag" - }, - "name": "matrixMultComp_mat2_frag.test.html", + }, + "name": "matrixMultComp_mat2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "matrixMultComp_mat2_vert_ref.vert", + "vertexShader": "matrixMultComp_mat2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "matrixMultComp_mat2_vert.vert", + "vertexShader": "matrixMultComp_mat2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "matrixMultComp_mat2_vert.test.html", + }, + "name": "matrixMultComp_mat2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "matrixMultComp_mat3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "matrixMultComp_mat3_frag.frag" - }, - "name": "matrixMultComp_mat3_frag.test.html", + }, + "name": "matrixMultComp_mat3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "matrixMultComp_mat3_vert_ref.vert", + "vertexShader": "matrixMultComp_mat3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "matrixMultComp_mat3_vert.vert", + "vertexShader": "matrixMultComp_mat3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "matrixMultComp_mat3_vert.test.html", + }, + "name": "matrixMultComp_mat3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/matrixCompMult/matrixMultComp_mat3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/matrixCompMult/matrixMultComp_mat3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/matrixCompMult/matrixMultComp_mat3_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/matrixCompMult/matrixMultComp_mat3_frag.frag 2017-01-16 01:36:26.000000000 +0000 @@ -36,15 +36,15 @@ vec3 result = vec3(0.0, 0.0, 0.0); m3 = matrixCompMult(m1, m2); - + result[0] += m3[0][0]; result[0] += m3[0][1]; result[0] += m3[0][2]; - + result[1] += m3[1][0]; result[1] += m3[1][1]; result[1] += m3[1][2]; - + result[2] += m3[2][0]; result[2] += m3[2][1]; result[2] += m3[2][2]; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/matrixCompMult/matrixMultComp_mat3_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/matrixCompMult/matrixMultComp_mat3_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/matrixCompMult/matrixMultComp_mat3_vert_ref.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/matrixCompMult/matrixMultComp_mat3_vert_ref.vert 2017-01-16 01:36:26.000000000 +0000 @@ -38,11 +38,11 @@ m3[0][0] = m1[0][0] * m2[0][0]; m3[0][1] = m1[0][1] * m2[0][1]; m3[0][2] = m1[0][2] * m2[0][2]; - + m3[1][0] = m1[1][0] * m2[1][0]; m3[1][1] = m1[1][1] * m2[1][1]; m3[1][2] = m1[1][2] * m2[1][2]; - + m3[2][0] = m1[2][0] * m2[2][0]; m3[2][1] = m1[2][1] * m2[2][1]; m3[2][2] = m1[2][2] * m2[2][2]; @@ -50,11 +50,11 @@ result[0] += m3[0][0]; result[0] += m3[0][1]; result[0] += m3[0][2]; - + result[1] += m3[1][0]; result[1] += m3[1][1]; result[1] += m3[1][2]; - + result[2] += m3[2][0]; result[2] += m3[2][1]; result[2] += m3[2][2]; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/matrixCompMult/matrixMultComp_mat3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/matrixCompMult/matrixMultComp_mat3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/matrixCompMult/matrixMultComp_mat3_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/matrixCompMult/matrixMultComp_mat3_vert.vert 2017-01-16 01:36:26.000000000 +0000 @@ -40,11 +40,11 @@ result[0] += m3[0][0]; result[0] += m3[0][1]; result[0] += m3[0][2]; - + result[1] += m3[1][0]; result[1] += m3[1][1]; result[1] += m3[1][2]; - + result[2] += m3[2][0]; result[2] += m3[2][1]; result[2] += m3[2][2]; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/max/max_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/max/max_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/max/max_001_to_006.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/max/max_001_to_006.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "max_float_frag_xvary_yconsthalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "max_float_frag_xvary_yconsthalf.frag" - }, - "name": "max_float_frag_xvary_yconsthalf.test.html", + }, + "name": "max_float_frag_xvary_yconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "max_vec2_frag_xvary_yconsthalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "max_vec2_frag_xvary_yconsthalf.frag" - }, - "name": "max_vec2_frag_xvary_yconsthalf.test.html", + }, + "name": "max_vec2_frag_xvary_yconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "max_vec3_frag_xvary_yconsthalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "max_vec3_frag_xvary_yconsthalf.frag" - }, - "name": "max_vec3_frag_xvary_yconsthalf.test.html", + }, + "name": "max_vec3_frag_xvary_yconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "max_float_vert_xvary_yconsthalf_ref.vert", + "vertexShader": "max_float_vert_xvary_yconsthalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "max_float_vert_xvary_yconsthalf.vert", + "vertexShader": "max_float_vert_xvary_yconsthalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "max_float_vert_xvary_yconsthalf.test.html", + }, + "name": "max_float_vert_xvary_yconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "max_vec2_vert_xvary_yconsthalf_ref.vert", + "vertexShader": "max_vec2_vert_xvary_yconsthalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "max_vec2_vert_xvary_yconsthalf.vert", + "vertexShader": "max_vec2_vert_xvary_yconsthalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "max_vec2_vert_xvary_yconsthalf.test.html", + }, + "name": "max_vec2_vert_xvary_yconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "max_vec3_vert_xvary_yconsthalf_ref.vert", + "vertexShader": "max_vec3_vert_xvary_yconsthalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "max_vec3_vert_xvary_yconsthalf.vert", + "vertexShader": "max_vec3_vert_xvary_yconsthalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "max_vec3_vert_xvary_yconsthalf.test.html", + }, + "name": "max_vec3_vert_xvary_yconsthalf.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/min/min_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/min/min_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/min/min_001_to_006.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/min/min_001_to_006.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "min_float_frag_xvary_yconsthalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "min_float_frag_xvary_yconsthalf.frag" - }, - "name": "min_float_frag_xvary_yconsthalf.test.html", + }, + "name": "min_float_frag_xvary_yconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "min_vec2_frag_xvary_yconsthalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "min_vec2_frag_xvary_yconsthalf.frag" - }, - "name": "min_vec2_frag_xvary_yconsthalf.test.html", + }, + "name": "min_vec2_frag_xvary_yconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "min_vec3_frag_xvary_yconsthalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "min_vec3_frag_xvary_yconsthalf.frag" - }, - "name": "min_vec3_frag_xvary_yconsthalf.test.html", + }, + "name": "min_vec3_frag_xvary_yconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "min_float_vert_xvary_yconsthalf_ref.vert", + "vertexShader": "min_float_vert_xvary_yconsthalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "min_float_vert_xvary_yconsthalf.vert", + "vertexShader": "min_float_vert_xvary_yconsthalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "min_float_vert_xvary_yconsthalf.test.html", + }, + "name": "min_float_vert_xvary_yconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "min_vec2_vert_xvary_yconsthalf_ref.vert", + "vertexShader": "min_vec2_vert_xvary_yconsthalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "min_vec2_vert_xvary_yconsthalf.vert", + "vertexShader": "min_vec2_vert_xvary_yconsthalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "min_vec2_vert_xvary_yconsthalf.test.html", + }, + "name": "min_vec2_vert_xvary_yconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "min_vec3_vert_xvary_yconsthalf_ref.vert", + "vertexShader": "min_vec3_vert_xvary_yconsthalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "min_vec3_vert_xvary_yconsthalf.vert", + "vertexShader": "min_vec3_vert_xvary_yconsthalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "min_vec3_vert_xvary_yconsthalf.test.html", + }, + "name": "min_vec3_vert_xvary_yconsthalf.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mix/mix_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mix/mix_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mix/mix_001_to_006.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mix/mix_001_to_006.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mix_float_frag_xvary_yconsthalf_aconsthalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mix_float_frag_xvary_yconsthalf_aconsthalf.frag" - }, - "name": "mix_float_frag_xvary_yconsthalf_aconsthalf.test.html", + }, + "name": "mix_float_frag_xvary_yconsthalf_aconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mix_vec2_frag_xvary_yconsthalf_aconsthalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mix_vec2_frag_xvary_yconsthalf_aconsthalf.frag" - }, - "name": "mix_vec2_frag_xvary_yconsthalf_aconsthalf.test.html", + }, + "name": "mix_vec2_frag_xvary_yconsthalf_aconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mix_vec3_frag_xvary_yconsthalf_aconsthalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mix_vec3_frag_xvary_yconsthalf_aconsthalf.frag" - }, - "name": "mix_vec3_frag_xvary_yconsthalf_aconsthalf.test.html", + }, + "name": "mix_vec3_frag_xvary_yconsthalf_aconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "mix_float_vert_xvary_yconsthalf_aconsthalf_ref.vert", + "vertexShader": "mix_float_vert_xvary_yconsthalf_aconsthalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "mix_float_vert_xvary_yconsthalf_aconsthalf.vert", + "vertexShader": "mix_float_vert_xvary_yconsthalf_aconsthalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mix_float_vert_xvary_yconsthalf_aconsthalf.test.html", + }, + "name": "mix_float_vert_xvary_yconsthalf_aconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "mix_vec2_vert_xvary_yconsthalf_aconsthalf_ref.vert", + "vertexShader": "mix_vec2_vert_xvary_yconsthalf_aconsthalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "mix_vec2_vert_xvary_yconsthalf_aconsthalf.vert", + "vertexShader": "mix_vec2_vert_xvary_yconsthalf_aconsthalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mix_vec2_vert_xvary_yconsthalf_aconsthalf.test.html", + }, + "name": "mix_vec2_vert_xvary_yconsthalf_aconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "mix_vec3_vert_xvary_yconsthalf_aconsthalf_ref.vert", + "vertexShader": "mix_vec3_vert_xvary_yconsthalf_aconsthalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "mix_vec3_vert_xvary_yconsthalf_aconsthalf.vert", + "vertexShader": "mix_vec3_vert_xvary_yconsthalf_aconsthalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mix_vec3_vert_xvary_yconsthalf_aconsthalf.test.html", + }, + "name": "mix_vec3_vert_xvary_yconsthalf_aconsthalf.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mod/mod_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mod/mod_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mod/mod_001_to_008.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mod/mod_001_to_008.html 2017-01-16 01:36:26.000000000 +0000 @@ -46,130 +46,130 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mod_float_frag_xvary_yconst1_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mod_float_frag_xvary_yconst1.frag" - }, - "name": "mod_float_frag_xvary_yconst1.test.html", + }, + "name": "mod_float_frag_xvary_yconst1.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mod_vec2_frag_xvary_yconst1_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mod_vec2_frag_xvary_yconst1.frag" - }, - "name": "mod_vec2_frag_xvary_yconst1.test.html", + }, + "name": "mod_vec2_frag_xvary_yconst1.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mod_vec3_frag_xvary_yconst1_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mod_vec3_frag_xvary_yconst1.frag" - }, - "name": "mod_vec3_frag_xvary_yconst1.test.html", + }, + "name": "mod_vec3_frag_xvary_yconst1.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "mod_float_vert_xvary_yconst1_ref.vert", + "vertexShader": "mod_float_vert_xvary_yconst1_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "mod_float_vert_xvary_yconst1.vert", + "vertexShader": "mod_float_vert_xvary_yconst1.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mod_float_vert_xvary_yconst1.test.html", + }, + "name": "mod_float_vert_xvary_yconst1.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "mod_vec2_vert_xvary_yconst1_ref.vert", + "vertexShader": "mod_vec2_vert_xvary_yconst1_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "mod_vec2_vert_xvary_yconst1.vert", + "vertexShader": "mod_vec2_vert_xvary_yconst1.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mod_vec2_vert_xvary_yconst1.test.html", + }, + "name": "mod_vec2_vert_xvary_yconst1.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "mod_vec3_vert_xvary_yconst1_ref.vert", + "vertexShader": "mod_vec3_vert_xvary_yconst1_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "mod_vec3_vert_xvary_yconst1.vert", + "vertexShader": "mod_vec3_vert_xvary_yconst1.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mod_vec3_vert_xvary_yconst1.test.html", + }, + "name": "mod_vec3_vert_xvary_yconst1.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4f", + "count": 1, + "type": "uniform4f", "value": [ - 0.0, - 0.0, - 0.0, + 0.0, + 0.0, + 0.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "mod_x_large_y_large_vert.vert", + "vertexShader": "mod_x_large_y_large_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "mod_x_large_y_large_vert.test.html", + }, + "name": "mod_x_large_y_large_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4f", + "count": 1, + "type": "uniform4f", "value": [ - 0.0, - 0.0, - 0.0, + 0.0, + 0.0, + 0.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "mod_x_large_y_large_frag.frag" - }, - "name": "mod_x_large_y_large_frag.test.html", + }, + "name": "mod_x_large_y_large_frag.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mod/mod_x_large_y_large_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mod/mod_x_large_y_large_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mod/mod_x_large_y_large_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/mod/mod_x_large_y_large_vert.vert 2017-01-16 01:36:27.000000000 +0000 @@ -29,6 +29,6 @@ void main (void) { - color = vec4(mod(300.0, 100.0), 0.0, 0.0, 1.0); + color = vec4(mod(300.0, 100.0), 0.0, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/normalize/normalize_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/normalize/normalize_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/normalize/normalize_001_to_006.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/normalize/normalize_001_to_006.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "normalize_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "normalize_float_frag_xvary.frag" - }, - "name": "normalize_float_frag_xvary.test.html", + }, + "name": "normalize_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "normalize_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "normalize_vec2_frag_xvary.frag" - }, - "name": "normalize_vec2_frag_xvary.test.html", + }, + "name": "normalize_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "normalize_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "normalize_vec3_frag_xvary.frag" - }, - "name": "normalize_vec3_frag_xvary.test.html", + }, + "name": "normalize_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "normalize_float_vert_xvary_ref.vert", + "vertexShader": "normalize_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "normalize_float_vert_xvary.vert", + "vertexShader": "normalize_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "normalize_float_vert_xvary.test.html", + }, + "name": "normalize_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "normalize_vec2_vert_xvary_ref.vert", + "vertexShader": "normalize_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "normalize_vec2_vert_xvary.vert", + "vertexShader": "normalize_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "normalize_vec2_vert_xvary.test.html", + }, + "name": "normalize_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "normalize_vec3_vert_xvary_ref.vert", + "vertexShader": "normalize_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "normalize_vec3_vert_xvary.vert", + "vertexShader": "normalize_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "normalize_vec3_vert_xvary.test.html", + }, + "name": "normalize_vec3_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/not/not_001_to_004.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/not/not_001_to_004.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/not/not_001_to_004.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/not/not_001_to_004.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,54 +46,54 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "not_bvec2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "not_bvec2_frag.frag" - }, - "name": "not_bvec2_frag.test.html", + }, + "name": "not_bvec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "not_bvec2_vert_ref.vert", + "vertexShader": "not_bvec2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "not_bvec2_vert.vert", + "vertexShader": "not_bvec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "not_bvec2_vert.test.html", + }, + "name": "not_bvec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "not_bvec3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "not_bvec3_frag.frag" - }, - "name": "not_bvec3_frag.test.html", + }, + "name": "not_bvec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "not_bvec3_vert_ref.vert", + "vertexShader": "not_bvec3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "not_bvec3_vert.vert", + "vertexShader": "not_bvec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "not_bvec3_vert.test.html", + }, + "name": "not_bvec3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_001_to_008.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_001_to_008.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "notEqual_vec2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "notEqual_vec2_frag.frag" - }, - "name": "notEqual_vec2_frag.test.html", + }, + "name": "notEqual_vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "notEqual_vec2_vert_ref.vert", + "vertexShader": "notEqual_vec2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "notEqual_vec2_vert.vert", + "vertexShader": "notEqual_vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "notEqual_vec2_vert.test.html", + }, + "name": "notEqual_vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "notEqual_vec3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "notEqual_vec3_frag.frag" - }, - "name": "notEqual_vec3_frag.test.html", + }, + "name": "notEqual_vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "notEqual_vec3_vert_ref.vert", + "vertexShader": "notEqual_vec3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "notEqual_vec3_vert.vert", + "vertexShader": "notEqual_vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "notEqual_vec3_vert.test.html", + }, + "name": "notEqual_vec3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "notEqual_ivec2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "notEqual_ivec2_frag.frag" - }, - "name": "notEqual_ivec2_frag.test.html", + }, + "name": "notEqual_ivec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "notEqual_ivec2_vert_ref.vert", + "vertexShader": "notEqual_ivec2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "notEqual_ivec2_vert.vert", + "vertexShader": "notEqual_ivec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "notEqual_ivec2_vert.test.html", + }, + "name": "notEqual_ivec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "notEqual_ivec3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "notEqual_ivec3_frag.frag" - }, - "name": "notEqual_ivec3_frag.test.html", + }, + "name": "notEqual_ivec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "notEqual_ivec3_vert_ref.vert", + "vertexShader": "notEqual_ivec3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "notEqual_ivec3_vert.vert", + "vertexShader": "notEqual_ivec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "notEqual_ivec3_vert.test.html", + }, + "name": "notEqual_ivec3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_009_to_012.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_009_to_012.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_009_to_012.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_009_to_012.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,54 +46,54 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "notEqual_bvec2_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "notEqual_bvec2_frag.frag" - }, - "name": "notEqual_bvec2_frag.test.html", + }, + "name": "notEqual_bvec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "notEqual_bvec2_vert_ref.vert", + "vertexShader": "notEqual_bvec2_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "notEqual_bvec2_vert.vert", + "vertexShader": "notEqual_bvec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "notEqual_bvec2_vert.test.html", + }, + "name": "notEqual_bvec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "notEqual_bvec3_frag_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "notEqual_bvec3_frag.frag" - }, - "name": "notEqual_bvec3_frag.test.html", + }, + "name": "notEqual_bvec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "notEqual_bvec3_vert_ref.vert", + "vertexShader": "notEqual_bvec3_vert_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "notEqual_bvec3_vert.vert", + "vertexShader": "notEqual_bvec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "notEqual_bvec3_vert.test.html", + }, + "name": "notEqual_bvec3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec2_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec2_frag.frag 2017-01-16 01:36:27.000000000 +0000 @@ -35,6 +35,6 @@ void main (void) { vec2 c = floor(1.5 * color.rg); // 1/3 true, 2/3 false - vec2 result = vec2(notEqual(bvec2(c), bvec2(true))); + vec2 result = vec2(notEqual(bvec2(c), bvec2(true))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec2_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec2_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec2_frag_ref.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec2_frag_ref.frag 2017-01-16 01:36:27.000000000 +0000 @@ -45,6 +45,6 @@ void main (void) { vec2 c = floor(1.5 * color.rg); // 1/3 true, 2/3 false - vec2 result = vec2(ne(bvec2(c), bvec2(true))); + vec2 result = vec2(ne(bvec2(c), bvec2(true))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec2_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec2_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec2_vert_ref.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec2_vert_ref.vert 2017-01-16 01:36:27.000000000 +0000 @@ -41,7 +41,7 @@ void main (void) { vec2 c = floor(1.5 * gtf_Color.rg); // 1/3 true, 2/3 false - vec2 result = vec2(ne(bvec2(c), bvec2(true))); + vec2 result = vec2(ne(bvec2(c), bvec2(true))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec2_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec2_vert.vert 2017-01-16 01:36:27.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec2 c = floor(1.5 * gtf_Color.rg); // 1/3 true, 2/3 false - vec2 result = vec2(notEqual(bvec2(c), bvec2(true))); + vec2 result = vec2(notEqual(bvec2(c), bvec2(true))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec3_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec3_frag.frag 2017-01-16 01:36:27.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec3 c = floor(1.5 * color.rgb); // 1/3 true, 2/3 false - vec3 result = vec3(notEqual(bvec3(c), bvec3(true))); + vec3 result = vec3(notEqual(bvec3(c), bvec3(true))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec3_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec3_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec3_frag_ref.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec3_frag_ref.frag 2017-01-16 01:36:27.000000000 +0000 @@ -43,6 +43,6 @@ void main (void) { vec3 c = floor(1.5 * color.rgb); // 1/3 true, 2/3 false - vec3 result = vec3(ne(bvec3(c), bvec3(true))); + vec3 result = vec3(ne(bvec3(c), bvec3(true))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec3_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec3_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec3_vert_ref.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec3_vert_ref.vert 2017-01-16 01:36:27.000000000 +0000 @@ -43,7 +43,7 @@ void main (void) { vec3 c = floor(1.5 * gtf_Color.rgb); // 1/3 true, 2/3 false - vec3 result = vec3(ne(bvec3(c), bvec3(true))); + vec3 result = vec3(ne(bvec3(c), bvec3(true))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec3_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_bvec3_vert.vert 2017-01-16 01:36:27.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec3 c = floor(1.5 * gtf_Color.rgb); // 1/3 true, 2/3 false - vec3 result = vec3(notEqual(bvec3(c), bvec3(true))); + vec3 result = vec3(notEqual(bvec3(c), bvec3(true))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec2_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec2_frag.frag 2017-01-16 01:36:27.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(notEqual(ivec2(c), ivec2(0))); + vec2 result = vec2(notEqual(ivec2(c), ivec2(0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec2_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec2_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec2_frag_ref.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec2_frag_ref.frag 2017-01-16 01:36:27.000000000 +0000 @@ -41,6 +41,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(ne(ivec2(c), ivec2(0))); + vec2 result = vec2(ne(ivec2(c), ivec2(0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec2_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec2_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec2_vert_ref.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec2_vert_ref.vert 2017-01-16 01:36:27.000000000 +0000 @@ -41,7 +41,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(ne(ivec2(c), ivec2(0))); + vec2 result = vec2(ne(ivec2(c), ivec2(0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec2_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec2_vert.vert 2017-01-16 01:36:27.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(notEqual(ivec2(c), ivec2(0))); + vec2 result = vec2(notEqual(ivec2(c), ivec2(0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec3_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec3_frag.frag 2017-01-16 01:36:27.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(notEqual(ivec3(c), ivec3(0))); + vec3 result = vec3(notEqual(ivec3(c), ivec3(0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec3_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec3_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec3_frag_ref.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec3_frag_ref.frag 2017-01-16 01:36:27.000000000 +0000 @@ -43,6 +43,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(ne(ivec3(c), ivec3(0))); + vec3 result = vec3(ne(ivec3(c), ivec3(0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec3_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec3_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec3_vert_ref.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec3_vert_ref.vert 2017-01-16 01:36:27.000000000 +0000 @@ -43,7 +43,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(ne(ivec3(c), ivec3(0))); + vec3 result = vec3(ne(ivec3(c), ivec3(0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec3_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_ivec3_vert.vert 2017-01-16 01:36:27.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(notEqual(ivec3(c), ivec3(0))); + vec3 result = vec3(notEqual(ivec3(c), ivec3(0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec2_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec2_frag.frag 2017-01-16 01:36:27.000000000 +0000 @@ -35,6 +35,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(notEqual(c, vec2(0.0))); + vec2 result = vec2(notEqual(c, vec2(0.0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec2_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec2_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec2_frag_ref.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec2_frag_ref.frag 2017-01-16 01:36:27.000000000 +0000 @@ -45,6 +45,6 @@ void main (void) { vec2 c = floor(10.0 * color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(ne(c, vec2(0.0))); + vec2 result = vec2(ne(c, vec2(0.0))); gl_FragColor = vec4(result, 0.0, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec2_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec2_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec2_vert_ref.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec2_vert_ref.vert 2017-01-16 01:36:27.000000000 +0000 @@ -41,7 +41,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(ne(c, vec2(0.0))); + vec2 result = vec2(ne(c, vec2(0.0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec2_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec2_vert.vert 2017-01-16 01:36:27.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec2 c = floor(10.0 * gtf_Color.rg - 4.5); // round to the nearest integer - vec2 result = vec2(notEqual(c, vec2(0.0))); + vec2 result = vec2(notEqual(c, vec2(0.0))); color = vec4(result, 0.0, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec3_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec3_frag.frag 2017-01-16 01:36:27.000000000 +0000 @@ -31,6 +31,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(notEqual(c, vec3(0.0))); + vec3 result = vec3(notEqual(c, vec3(0.0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec3_frag_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec3_frag_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec3_frag_ref.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec3_frag_ref.frag 2017-01-16 01:36:27.000000000 +0000 @@ -43,6 +43,6 @@ void main (void) { vec3 c = floor(10.0 * color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(ne(c, vec3(0.0))); + vec3 result = vec3(ne(c, vec3(0.0))); gl_FragColor = vec4(result, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec3_vert_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec3_vert_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec3_vert_ref.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec3_vert_ref.vert 2017-01-16 01:36:27.000000000 +0000 @@ -43,7 +43,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(ne(c, vec3(0.0))); + vec3 result = vec3(ne(c, vec3(0.0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec3_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/notEqual/notEqual_vec3_vert.vert 2017-01-16 01:36:27.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec3 c = floor(10.0 * gtf_Color.rgb - 4.5); // round to the nearest integer - vec3 result = vec3(notEqual(c, vec3(0.0))); + vec3 result = vec3(notEqual(c, vec3(0.0))); color = vec4(result, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/assignments_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/assignments_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/assignments_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/assignments_frag.frag 2017-01-16 01:36:27.000000000 +0000 @@ -33,25 +33,25 @@ int m = 12; int n = 102; bool result = true; - int r = m; + int r = m; - if( r==12 ) + if( r==12 ) result = result && true; - else + else result = result && false; - + r += m; if( r == 24 ) result = result && true; - else + else result = result && false; r-= m; if( r == 12 ) result = result && true; - else + else result = result && false; r*= m; @@ -62,12 +62,12 @@ result = result && false; r/= m; - + // Integer divide can be implemented via float reciprocal, // so the result need not be exact if( r >= 11 && r <= 13 ) result = result && true; - else + else result = result && false; float gray; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/assignments_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/assignments_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/assignments_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/assignments_vert.vert 2017-01-16 01:36:27.000000000 +0000 @@ -32,25 +32,25 @@ int m = 12; int n = 102; bool result = true; - int r = m; + int r = m; - if( r==12 ) + if( r==12 ) result = result && true; - else + else result = result && false; - + r += m; if( r == 24 ) result = result && true; - else + else result = result && false; r-= m; if( r == 12 ) result = result && true; - else + else result = result && false; r*= m; @@ -61,12 +61,12 @@ result = result && false; r/= m; - + // Integer divide can be implemented via float reciprocal, // so the result need not be exact if( r >= 11 && r <= 13 ) result = result && true; - else + else result = result && false; float gray; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/logical_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/logical_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/logical_frag.frag 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/logical_frag.frag 2017-01-16 01:36:27.000000000 +0000 @@ -33,15 +33,15 @@ bool result = true; bool a = true; bool b = true; - + if( (a&&b) ) result = result && true; - else + else result = result && false; - + if( (a||b) ) result = result && true; - else + else result = result && false; if( !(a^^b) ) @@ -51,15 +51,15 @@ a = true; b = false; - + if( !(a&&b) ) result = result && true; - else + else result = result && false; - + if( (a||b) ) result = result && true; - else + else result = result && false; if( (a^^b) ) @@ -72,12 +72,12 @@ if( !(a&&b) ) result = result && true; - else + else result = result && false; - + if( (a||b) ) result = result && true; - else + else result = result && false; if( (a^^b) ) @@ -90,12 +90,12 @@ if( !(a&&b) ) result = result && true; - else + else result = result && false; - + if( !(a||b) ) result = result && true; - else + else result = result && false; if( !(a^^b) ) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/logical_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/logical_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/logical_vert.vert 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/logical_vert.vert 2017-01-16 01:36:27.000000000 +0000 @@ -28,19 +28,19 @@ varying vec4 color; void main (void) -{ +{ bool result = true; bool a = true; bool b = true; - + if( (a&&b) ) result = result && true; - else + else result = result && false; - + if( (a||b) ) result = result && true; - else + else result = result && false; if( !(a^^b) ) @@ -50,15 +50,15 @@ a = true; b = false; - + if( !(a&&b) ) result = result && true; - else + else result = result && false; - + if( (a||b) ) result = result && true; - else + else result = result && false; if( (a^^b) ) @@ -71,12 +71,12 @@ if( !(a&&b) ) result = result && true; - else + else result = result && false; - + if( (a||b) ) result = result && true; - else + else result = result && false; if( (a^^b) ) @@ -89,12 +89,12 @@ if( !(a&&b) ) result = result && true; - else + else result = result && false; - + if( !(a||b) ) result = result && true; - else + else result = result && false; if( !(a^^b) ) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/operators_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/operators_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/operators_001_to_008.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/operators_001_to_008.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "postfixincrement_frag.frag" - }, - "name": "postfixincrement_frag.test.html", + }, + "name": "postfixincrement_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "postfixincrement_vert.vert", + "vertexShader": "postfixincrement_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "postfixincrement_vert.test.html", + }, + "name": "postfixincrement_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "postfixdecrement_frag.frag" - }, - "name": "postfixdecrement_frag.test.html", + }, + "name": "postfixdecrement_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "postfixdecrement_vert.vert", + "vertexShader": "postfixdecrement_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "postfixdecrement_vert.test.html", + }, + "name": "postfixdecrement_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "prefixincrement_frag.frag" - }, - "name": "prefixincrement_frag.test.html", + }, + "name": "prefixincrement_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "prefixincrement_vert.vert", + "vertexShader": "prefixincrement_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "prefixincrement_vert.test.html", + }, + "name": "prefixincrement_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "prefixdecrement_frag.frag" - }, - "name": "prefixdecrement_frag.test.html", + }, + "name": "prefixdecrement_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "prefixdecrement_vert.vert", + "vertexShader": "prefixdecrement_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "prefixdecrement_vert.test.html", + }, + "name": "prefixdecrement_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/operators_009_to_016.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/operators_009_to_016.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/operators_009_to_016.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/operators_009_to_016.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "unary_frag.frag" - }, - "name": "unary_frag.test.html", + }, + "name": "unary_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "unary_vert.vert", + "vertexShader": "unary_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "unary_vert.test.html", + }, + "name": "unary_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "multiplicative_frag.frag" - }, - "name": "multiplicative_frag.test.html", + }, + "name": "multiplicative_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "multiplicative_vert.vert", + "vertexShader": "multiplicative_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "multiplicative_vert.test.html", + }, + "name": "multiplicative_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "division_frag.frag" - }, - "name": "division_frag.test.html", + }, + "name": "division_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "division_vert.vert", + "vertexShader": "division_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "division_vert.test.html", + }, + "name": "division_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "addsubtract_frag.frag" - }, - "name": "addsubtract_frag.test.html", + }, + "name": "addsubtract_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "addsubtract_vert.vert", + "vertexShader": "addsubtract_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "addsubtract_vert.test.html", + }, + "name": "addsubtract_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/operators_017_to_024.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/operators_017_to_024.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/operators_017_to_024.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/operators_017_to_024.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "relational_frag.frag" - }, - "name": "relational_frag.test.html", + }, + "name": "relational_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "relational_vert.vert", + "vertexShader": "relational_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "relational_vert.test.html", + }, + "name": "relational_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "equality_frag.frag" - }, - "name": "equality_frag.test.html", + }, + "name": "equality_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "equality_vert.vert", + "vertexShader": "equality_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "equality_vert.test.html", + }, + "name": "equality_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "logical_frag.frag" - }, - "name": "logical_frag.test.html", + }, + "name": "logical_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "logical_vert.vert", + "vertexShader": "logical_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "logical_vert.test.html", + }, + "name": "logical_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "selection_frag.frag" - }, - "name": "selection_frag.test.html", + }, + "name": "selection_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "selection_vert.vert", + "vertexShader": "selection_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "selection_vert.test.html", + }, + "name": "selection_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/operators_025_to_026.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/operators_025_to_026.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/operators_025_to_026.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/operators/operators_025_to_026.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,52 +46,52 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "assignments_frag.frag" - }, - "name": "assignments_frag.test.html", + }, + "name": "assignments_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "assignments_vert.vert", + "vertexShader": "assignments_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "assignments_vert.test.html", + }, + "name": "assignments_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/pow/pow_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/pow/pow_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/pow/pow_001_to_008.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/pow/pow_001_to_008.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_float_frag_xvary_yconst2_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_float_frag_xvary_yconst2.frag" - }, - "name": "pow_float_frag_xvary_yconst2.test.html", + }, + "name": "pow_float_frag_xvary_yconst2.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_vec2_frag_xvary_yconst2_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_vec2_frag_xvary_yconst2.frag" - }, - "name": "pow_vec2_frag_xvary_yconst2.test.html", + }, + "name": "pow_vec2_frag_xvary_yconst2.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_vec3_frag_xvary_yconst2_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_vec3_frag_xvary_yconst2.frag" - }, - "name": "pow_vec3_frag_xvary_yconst2.test.html", + }, + "name": "pow_vec3_frag_xvary_yconst2.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_float_frag_xconst2_yvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_float_frag_xconst2_yvary.frag" - }, - "name": "pow_float_frag_xconst2_yvary.test.html", + }, + "name": "pow_float_frag_xconst2_yvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_vec2_frag_xconst2_yvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_vec2_frag_xconst2_yvary.frag" - }, - "name": "pow_vec2_frag_xconst2_yvary.test.html", + }, + "name": "pow_vec2_frag_xconst2_yvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_vec3_frag_xconst2_yvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_vec3_frag_xconst2_yvary.frag" - }, - "name": "pow_vec3_frag_xconst2_yvary.test.html", + }, + "name": "pow_vec3_frag_xconst2_yvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_float_frag_xvary_yconsthalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_float_frag_xvary_yconsthalf.frag" - }, - "name": "pow_float_frag_xvary_yconsthalf.test.html", + }, + "name": "pow_float_frag_xvary_yconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_vec2_frag_xvary_yconsthalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_vec2_frag_xvary_yconsthalf.frag" - }, - "name": "pow_vec2_frag_xvary_yconsthalf.test.html", + }, + "name": "pow_vec2_frag_xvary_yconsthalf.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/pow/pow_009_to_016.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/pow/pow_009_to_016.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/pow/pow_009_to_016.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/pow/pow_009_to_016.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_vec3_frag_xvary_yconsthalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_vec3_frag_xvary_yconsthalf.frag" - }, - "name": "pow_vec3_frag_xvary_yconsthalf.test.html", + }, + "name": "pow_vec3_frag_xvary_yconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_float_frag_xconsthalf_yvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_float_frag_xconsthalf_yvary.frag" - }, - "name": "pow_float_frag_xconsthalf_yvary.test.html", + }, + "name": "pow_float_frag_xconsthalf_yvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_vec2_frag_xconsthalf_yvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_vec2_frag_xconsthalf_yvary.frag" - }, - "name": "pow_vec2_frag_xconsthalf_yvary.test.html", + }, + "name": "pow_vec2_frag_xconsthalf_yvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_vec3_frag_xconsthalf_yvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "pow_vec3_frag_xconsthalf_yvary.frag" - }, - "name": "pow_vec3_frag_xconsthalf_yvary.test.html", + }, + "name": "pow_vec3_frag_xconsthalf_yvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "pow_float_vert_xvary_yconst2_ref.vert", + "vertexShader": "pow_float_vert_xvary_yconst2_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "pow_float_vert_xvary_yconst2.vert", + "vertexShader": "pow_float_vert_xvary_yconst2.vert", "fragmentShader": "../default/default.frag" - }, - "name": "pow_float_vert_xvary_yconst2.test.html", + }, + "name": "pow_float_vert_xvary_yconst2.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "pow_vec2_vert_xvary_yconst2_ref.vert", + "vertexShader": "pow_vec2_vert_xvary_yconst2_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "pow_vec2_vert_xvary_yconst2.vert", + "vertexShader": "pow_vec2_vert_xvary_yconst2.vert", "fragmentShader": "../default/default.frag" - }, - "name": "pow_vec2_vert_xvary_yconst2.test.html", + }, + "name": "pow_vec2_vert_xvary_yconst2.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "pow_vec3_vert_xvary_yconst2_ref.vert", + "vertexShader": "pow_vec3_vert_xvary_yconst2_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "pow_vec3_vert_xvary_yconst2.vert", + "vertexShader": "pow_vec3_vert_xvary_yconst2.vert", "fragmentShader": "../default/default.frag" - }, - "name": "pow_vec3_vert_xvary_yconst2.test.html", + }, + "name": "pow_vec3_vert_xvary_yconst2.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "pow_float_vert_xconst2_yvary_ref.vert", + "vertexShader": "pow_float_vert_xconst2_yvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "pow_float_vert_xconst2_yvary.vert", + "vertexShader": "pow_float_vert_xconst2_yvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "pow_float_vert_xconst2_yvary.test.html", + }, + "name": "pow_float_vert_xconst2_yvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/pow/pow_017_to_024.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/pow/pow_017_to_024.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/pow/pow_017_to_024.html 2017-01-13 01:35:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/pow/pow_017_to_024.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "pow_vec2_vert_xconst2_yvary_ref.vert", + "vertexShader": "pow_vec2_vert_xconst2_yvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "pow_vec2_vert_xconst2_yvary.vert", + "vertexShader": "pow_vec2_vert_xconst2_yvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "pow_vec2_vert_xconst2_yvary.test.html", + }, + "name": "pow_vec2_vert_xconst2_yvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "pow_vec3_vert_xconst2_yvary_ref.vert", + "vertexShader": "pow_vec3_vert_xconst2_yvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "pow_vec3_vert_xconst2_yvary.vert", + "vertexShader": "pow_vec3_vert_xconst2_yvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "pow_vec3_vert_xconst2_yvary.test.html", + }, + "name": "pow_vec3_vert_xconst2_yvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "pow_float_vert_xvary_yconsthalf_ref.vert", + "vertexShader": "pow_float_vert_xvary_yconsthalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "pow_float_vert_xvary_yconsthalf.vert", + "vertexShader": "pow_float_vert_xvary_yconsthalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "pow_float_vert_xvary_yconsthalf.test.html", + }, + "name": "pow_float_vert_xvary_yconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "pow_vec2_vert_xvary_yconsthalf_ref.vert", + "vertexShader": "pow_vec2_vert_xvary_yconsthalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "pow_vec2_vert_xvary_yconsthalf.vert", + "vertexShader": "pow_vec2_vert_xvary_yconsthalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "pow_vec2_vert_xvary_yconsthalf.test.html", + }, + "name": "pow_vec2_vert_xvary_yconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "pow_vec3_vert_xvary_yconsthalf_ref.vert", + "vertexShader": "pow_vec3_vert_xvary_yconsthalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "pow_vec3_vert_xvary_yconsthalf.vert", + "vertexShader": "pow_vec3_vert_xvary_yconsthalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "pow_vec3_vert_xvary_yconsthalf.test.html", + }, + "name": "pow_vec3_vert_xvary_yconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "pow_float_vert_xconsthalf_yvary_ref.vert", + "vertexShader": "pow_float_vert_xconsthalf_yvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "pow_float_vert_xconsthalf_yvary.vert", + "vertexShader": "pow_float_vert_xconsthalf_yvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "pow_float_vert_xconsthalf_yvary.test.html", + }, + "name": "pow_float_vert_xconsthalf_yvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "pow_vec2_vert_xconsthalf_yvary_ref.vert", + "vertexShader": "pow_vec2_vert_xconsthalf_yvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "pow_vec2_vert_xconsthalf_yvary.vert", + "vertexShader": "pow_vec2_vert_xconsthalf_yvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "pow_vec2_vert_xconsthalf_yvary.test.html", + }, + "name": "pow_vec2_vert_xconsthalf_yvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "pow_vec3_vert_xconsthalf_yvary_ref.vert", + "vertexShader": "pow_vec3_vert_xconsthalf_yvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "pow_vec3_vert_xconsthalf_yvary.vert", + "vertexShader": "pow_vec3_vert_xconsthalf_yvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "pow_vec3_vert_xconsthalf_yvary.test.html", + }, + "name": "pow_vec3_vert_xconsthalf_yvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/radians/radians_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/radians/radians_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/radians/radians_001_to_006.html 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/radians/radians_001_to_006.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "radians_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "radians_float_frag_xvary.frag" - }, - "name": "radians_float_frag_xvary.test.html", + }, + "name": "radians_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "radians_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "radians_vec2_frag_xvary.frag" - }, - "name": "radians_vec2_frag_xvary.test.html", + }, + "name": "radians_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "radians_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "radians_vec3_frag_xvary.frag" - }, - "name": "radians_vec3_frag_xvary.test.html", + }, + "name": "radians_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "radians_float_vert_xvary_ref.vert", + "vertexShader": "radians_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "radians_float_vert_xvary.vert", + "vertexShader": "radians_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "radians_float_vert_xvary.test.html", + }, + "name": "radians_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "radians_vec2_vert_xvary_ref.vert", + "vertexShader": "radians_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "radians_vec2_vert_xvary.vert", + "vertexShader": "radians_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "radians_vec2_vert_xvary.test.html", + }, + "name": "radians_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "radians_vec3_vert_xvary_ref.vert", + "vertexShader": "radians_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "radians_vec3_vert_xvary.vert", + "vertexShader": "radians_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "radians_vec3_vert_xvary.test.html", + }, + "name": "radians_vec3_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/reflect/reflect_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/reflect/reflect_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/reflect/reflect_001_to_006.html 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/reflect/reflect_001_to_006.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "reflect_float_frag_ivarynconst_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "reflect_float_frag_ivarynconst.frag" - }, - "name": "reflect_float_frag_ivarynconst.test.html", + }, + "name": "reflect_float_frag_ivarynconst.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "reflect_float_vert_ivarynconst_ref.vert", + "vertexShader": "reflect_float_vert_ivarynconst_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "reflect_float_vert_ivarynconst.vert", + "vertexShader": "reflect_float_vert_ivarynconst.vert", "fragmentShader": "../default/default.frag" - }, - "name": "reflect_float_vert_ivarynconst.test.html", + }, + "name": "reflect_float_vert_ivarynconst.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "reflect_vec2_frag_ivarynconst_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "reflect_vec2_frag_ivarynconst.frag" - }, - "name": "reflect_vec2_frag_ivarynconst.test.html", + }, + "name": "reflect_vec2_frag_ivarynconst.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "reflect_vec2_vert_ivarynconst_ref.vert", + "vertexShader": "reflect_vec2_vert_ivarynconst_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "reflect_vec2_vert_ivarynconst.vert", + "vertexShader": "reflect_vec2_vert_ivarynconst.vert", "fragmentShader": "../default/default.frag" - }, - "name": "reflect_vec2_vert_ivarynconst.test.html", + }, + "name": "reflect_vec2_vert_ivarynconst.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "reflect_vec3_frag_ivarynconst_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "reflect_vec3_frag_ivarynconst.frag" - }, - "name": "reflect_vec3_frag_ivarynconst.test.html", + }, + "name": "reflect_vec3_frag_ivarynconst.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "reflect_vec3_vert_ivarynconst_ref.vert", + "vertexShader": "reflect_vec3_vert_ivarynconst_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "reflect_vec3_vert_ivarynconst.vert", + "vertexShader": "reflect_vec3_vert_ivarynconst.vert", "fragmentShader": "../default/default.frag" - }, - "name": "reflect_vec3_vert_ivarynconst.test.html", + }, + "name": "reflect_vec3_vert_ivarynconst.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/refract/refract_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/refract/refract_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/refract/refract_001_to_006.html 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/refract/refract_001_to_006.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "refract_float_frag_ivarynconst_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "refract_float_frag_ivarynconst.frag" - }, - "name": "refract_float_frag_ivarynconst.test.html", + }, + "name": "refract_float_frag_ivarynconst.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "refract_float_vert_ivarynconst_ref.vert", + "vertexShader": "refract_float_vert_ivarynconst_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "refract_float_vert_ivarynconst.vert", + "vertexShader": "refract_float_vert_ivarynconst.vert", "fragmentShader": "../default/default.frag" - }, - "name": "refract_float_vert_ivarynconst.test.html", + }, + "name": "refract_float_vert_ivarynconst.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "refract_vec2_frag_ivarynconst_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "refract_vec2_frag_ivarynconst.frag" - }, - "name": "refract_vec2_frag_ivarynconst.test.html", + }, + "name": "refract_vec2_frag_ivarynconst.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "refract_vec2_vert_ivarynconst_ref.vert", + "vertexShader": "refract_vec2_vert_ivarynconst_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "refract_vec2_vert_ivarynconst.vert", + "vertexShader": "refract_vec2_vert_ivarynconst.vert", "fragmentShader": "../default/default.frag" - }, - "name": "refract_vec2_vert_ivarynconst.test.html", + }, + "name": "refract_vec2_vert_ivarynconst.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "refract_vec3_frag_ivarynconst_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "refract_vec3_frag_ivarynconst.frag" - }, - "name": "refract_vec3_frag_ivarynconst.test.html", + }, + "name": "refract_vec3_frag_ivarynconst.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "refract_vec3_vert_ivarynconst_ref.vert", + "vertexShader": "refract_vec3_vert_ivarynconst_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "refract_vec3_vert_ivarynconst.vert", + "vertexShader": "refract_vec3_vert_ivarynconst.vert", "fragmentShader": "../default/default.frag" - }, - "name": "refract_vec3_vert_ivarynconst.test.html", + }, + "name": "refract_vec3_vert_ivarynconst.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sign/sign_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sign/sign_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sign/sign_001_to_006.html 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sign/sign_001_to_006.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sign_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sign_float_frag_xvary.frag" - }, - "name": "sign_float_frag_xvary.test.html", + }, + "name": "sign_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sign_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sign_vec2_frag_xvary.frag" - }, - "name": "sign_vec2_frag_xvary.test.html", + }, + "name": "sign_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sign_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sign_vec3_frag_xvary.frag" - }, - "name": "sign_vec3_frag_xvary.test.html", + }, + "name": "sign_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "sign_float_vert_xvary_ref.vert", + "vertexShader": "sign_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "sign_float_vert_xvary.vert", + "vertexShader": "sign_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "sign_float_vert_xvary.test.html", + }, + "name": "sign_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "sign_vec2_vert_xvary_ref.vert", + "vertexShader": "sign_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "sign_vec2_vert_xvary.vert", + "vertexShader": "sign_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "sign_vec2_vert_xvary.test.html", + }, + "name": "sign_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "sign_vec3_vert_xvary_ref.vert", + "vertexShader": "sign_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "sign_vec3_vert_xvary.vert", + "vertexShader": "sign_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "sign_vec3_vert_xvary.test.html", + }, + "name": "sign_vec3_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sign/sign_vec3_frag_xvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sign/sign_vec3_frag_xvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sign/sign_vec3_frag_xvary_ref.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sign/sign_vec3_frag_xvary_ref.frag 2017-01-16 01:36:27.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec3 c = 2.0 * (color.rgb - 0.5); - + if(c[0] > 0.0) c[0] = 1.0 * c[0]; if(c[0] < 0.0) c[0] = -1.0 * c[0]; if(c[1] > 0.0) c[1] = 1.0 * c[1]; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sign/sign_vec3_vert_xvary_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sign/sign_vec3_vert_xvary_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sign/sign_vec3_vert_xvary_ref.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sign/sign_vec3_vert_xvary_ref.vert 2017-01-16 01:36:27.000000000 +0000 @@ -31,7 +31,7 @@ void main (void) { vec3 c = 2.0 * (gtf_Color.rgb - 0.5); - + if(c[0] > 0.0) c[0] = 1.0 * c[0]; if(c[0] < 0.0) c[0] = -1.0 * c[0]; if(c[1] > 0.0) c[1] = 1.0 * c[1]; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_001_to_006.html 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_001_to_006.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sin_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sin_float_frag_xvary.frag" - }, - "name": "sin_float_frag_xvary.test.html", + }, + "name": "sin_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sin_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sin_vec2_frag_xvary.frag" - }, - "name": "sin_vec2_frag_xvary.test.html", + }, + "name": "sin_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sin_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sin_vec3_frag_xvary.frag" - }, - "name": "sin_vec3_frag_xvary.test.html", + }, + "name": "sin_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "sin_float_vert_xvary_ref.vert", + "vertexShader": "sin_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "sin_float_vert_xvary.vert", + "vertexShader": "sin_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "sin_float_vert_xvary.test.html", + }, + "name": "sin_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "sin_vec2_vert_xvary_ref.vert", + "vertexShader": "sin_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "sin_vec2_vert_xvary.vert", + "vertexShader": "sin_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "sin_vec2_vert_xvary.test.html", + }, + "name": "sin_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "sin_vec3_vert_xvary_ref.vert", + "vertexShader": "sin_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "sin_vec3_vert_xvary.vert", + "vertexShader": "sin_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "sin_vec3_vert_xvary.test.html", + }, + "name": "sin_vec3_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_float_frag_xvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_float_frag_xvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_float_frag_xvary_ref.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_float_frag_xvary_ref.frag 2017-01-16 01:36:27.000000000 +0000 @@ -53,7 +53,7 @@ sinValues[14] = -0.707107; sinValues[15] = -0.382683; sinValues[16] = 0.0; - + const float M_PI = 3.14159265358979323846; float c = 2.0 * M_PI * color.r; @@ -61,7 +61,7 @@ int arr0 = int(floor(arrVal)); float weight = arrVal - floor(arrVal); float sin_c = 0.0; - + if (arr0 == 0) sin_c = lerp(sinValues[0], sinValues[1], weight); else if (arr0 == 1) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_float_vert_xvary_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_float_vert_xvary_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_float_vert_xvary_ref.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_float_vert_xvary_ref.vert 2017-01-16 01:36:27.000000000 +0000 @@ -45,7 +45,7 @@ for(int j = 2; j <= 23; j++) if (j <= 2 * i + 1) fact *= float(j); - + sin_c += sign * pow(c, 2.0 * float(i) + 1.0) / fact; sign *= -1.0; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_vec2_frag_xvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_vec2_frag_xvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_vec2_frag_xvary_ref.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_vec2_frag_xvary_ref.frag 2017-01-16 01:36:27.000000000 +0000 @@ -56,7 +56,7 @@ const float M_PI = 3.14159265358979323846; vec2 c = 2.0 * M_PI * color.rg; - + vec2 arrVal = c * 2.546478971; int arr0x = int(floor(arrVal.x)); int arr0y = int(floor(arrVal.y)); @@ -97,7 +97,7 @@ sin_c.x = lerp(sinValues[15], sinValues[16], weight.x); else if (arr0x == 16) sin_c.x = sinValues[16]; - + if (arr0y == 0) sin_c.y = lerp(sinValues[0], sinValues[1], weight.y); else if (arr0y == 1) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_vec2_vert_xvary_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_vec2_vert_xvary_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_vec2_vert_xvary_ref.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_vec2_vert_xvary_ref.vert 2017-01-16 01:36:27.000000000 +0000 @@ -69,7 +69,7 @@ for(int j = 2; j <= 23; j++) if (j <= 2 * i + 1) fact *= float(j); - + sin_c += sign * pow(c, vec2(2.0 * float(i) + 1.0)) / fact; sign *= -1.0; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_vec3_frag_xvary_ref.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_vec3_frag_xvary_ref.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_vec3_frag_xvary_ref.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_vec3_frag_xvary_ref.frag 2017-01-16 01:36:27.000000000 +0000 @@ -56,7 +56,7 @@ const float M_PI = 3.14159265358979323846; vec3 c = 2.0 * M_PI * color.rgb; - + vec3 arrVal = c * 2.546478971; int arr0x = int(floor(arrVal.x)); int arr0y = int(floor(arrVal.y)); @@ -98,7 +98,7 @@ sin_c.x = lerp(sinValues[15], sinValues[16], weight.x); else if (arr0x == 16) sin_c.x = sinValues[16]; - + if (arr0y == 0) sin_c.y = lerp(sinValues[0], sinValues[1], weight.y); else if (arr0y == 1) @@ -133,7 +133,7 @@ sin_c.y = lerp(sinValues[15], sinValues[16], weight.y); else if (arr0y == 16) sin_c.y = sinValues[16]; - + if (arr0z == 0) sin_c.z = lerp(sinValues[0], sinValues[1], weight.z); else if (arr0z == 1) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_vec3_vert_xvary_ref.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_vec3_vert_xvary_ref.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_vec3_vert_xvary_ref.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sin/sin_vec3_vert_xvary_ref.vert 2017-01-16 01:36:27.000000000 +0000 @@ -69,7 +69,7 @@ for(int j = 2; j <= 23; j++) if (j <= 2 * i + 1) fact *= float(j); - + sin_c += sign * pow(c, vec3(2.0 * float(i) + 1.0)) / fact; sign *= -1.0; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/smoothstep/smoothstep_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/smoothstep/smoothstep_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/smoothstep/smoothstep_001_to_006.html 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/smoothstep/smoothstep_001_to_006.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "smoothstep_float_frag_xvary_edgeconstquarter_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "smoothstep_float_frag_xvary_edgeconstquarter.frag" - }, - "name": "smoothstep_float_frag_xvary_edgeconstquarter.test.html", + }, + "name": "smoothstep_float_frag_xvary_edgeconstquarter.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "smoothstep_vec2_frag_xvary_edgeconstquarter_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "smoothstep_vec2_frag_xvary_edgeconstquarter.frag" - }, - "name": "smoothstep_vec2_frag_xvary_edgeconstquarter.test.html", + }, + "name": "smoothstep_vec2_frag_xvary_edgeconstquarter.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "smoothstep_vec3_frag_xvary_edgeconstquarter_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "smoothstep_vec3_frag_xvary_edgeconstquarter.frag" - }, - "name": "smoothstep_vec3_frag_xvary_edgeconstquarter.test.html", + }, + "name": "smoothstep_vec3_frag_xvary_edgeconstquarter.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "smoothstep_float_vert_xvary_edgeconstquarter_ref.vert", + "vertexShader": "smoothstep_float_vert_xvary_edgeconstquarter_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "smoothstep_float_vert_xvary_edgeconstquarter.vert", + "vertexShader": "smoothstep_float_vert_xvary_edgeconstquarter.vert", "fragmentShader": "../default/default.frag" - }, - "name": "smoothstep_float_vert_xvary_edgeconstquarter.test.html", + }, + "name": "smoothstep_float_vert_xvary_edgeconstquarter.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "smoothstep_vec2_vert_xvary_edgeconstquarter_ref.vert", + "vertexShader": "smoothstep_vec2_vert_xvary_edgeconstquarter_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "smoothstep_vec2_vert_xvary_edgeconstquarter.vert", + "vertexShader": "smoothstep_vec2_vert_xvary_edgeconstquarter.vert", "fragmentShader": "../default/default.frag" - }, - "name": "smoothstep_vec2_vert_xvary_edgeconstquarter.test.html", + }, + "name": "smoothstep_vec2_vert_xvary_edgeconstquarter.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "smoothstep_vec3_vert_xvary_edgeconstquarter_ref.vert", + "vertexShader": "smoothstep_vec3_vert_xvary_edgeconstquarter_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "smoothstep_vec3_vert_xvary_edgeconstquarter.vert", + "vertexShader": "smoothstep_vec3_vert_xvary_edgeconstquarter.vert", "fragmentShader": "../default/default.frag" - }, - "name": "smoothstep_vec3_vert_xvary_edgeconstquarter.test.html", + }, + "name": "smoothstep_vec3_vert_xvary_edgeconstquarter.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sqrt/sqrt_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sqrt/sqrt_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sqrt/sqrt_001_to_006.html 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/sqrt/sqrt_001_to_006.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sqrt_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sqrt_float_frag_xvary.frag" - }, - "name": "sqrt_float_frag_xvary.test.html", + }, + "name": "sqrt_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sqrt_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sqrt_vec2_frag_xvary.frag" - }, - "name": "sqrt_vec2_frag_xvary.test.html", + }, + "name": "sqrt_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sqrt_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "sqrt_vec3_frag_xvary.frag" - }, - "name": "sqrt_vec3_frag_xvary.test.html", + }, + "name": "sqrt_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "sqrt_float_vert_xvary_ref.vert", + "vertexShader": "sqrt_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "sqrt_float_vert_xvary.vert", + "vertexShader": "sqrt_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "sqrt_float_vert_xvary.test.html", + }, + "name": "sqrt_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "sqrt_vec2_vert_xvary_ref.vert", + "vertexShader": "sqrt_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "sqrt_vec2_vert_xvary.vert", + "vertexShader": "sqrt_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "sqrt_vec2_vert_xvary.test.html", + }, + "name": "sqrt_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "sqrt_vec3_vert_xvary_ref.vert", + "vertexShader": "sqrt_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "sqrt_vec3_vert_xvary.vert", + "vertexShader": "sqrt_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "sqrt_vec3_vert_xvary.test.html", + }, + "name": "sqrt_vec3_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/step/step_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/step/step_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/step/step_001_to_006.html 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/step/step_001_to_006.html 2017-01-16 01:36:27.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "step_float_frag_xvary_edgeconsthalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "step_float_frag_xvary_edgeconsthalf.frag" - }, - "name": "step_float_frag_xvary_edgeconsthalf.test.html", + }, + "name": "step_float_frag_xvary_edgeconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "step_vec2_frag_xvary_edgeconsthalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "step_vec2_frag_xvary_edgeconsthalf.frag" - }, - "name": "step_vec2_frag_xvary_edgeconsthalf.test.html", + }, + "name": "step_vec2_frag_xvary_edgeconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "step_vec3_frag_xvary_edgeconsthalf_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "step_vec3_frag_xvary_edgeconsthalf.frag" - }, - "name": "step_vec3_frag_xvary_edgeconsthalf.test.html", + }, + "name": "step_vec3_frag_xvary_edgeconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "step_float_vert_xvary_edgeconsthalf_ref.vert", + "vertexShader": "step_float_vert_xvary_edgeconsthalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "step_float_vert_xvary_edgeconsthalf.vert", + "vertexShader": "step_float_vert_xvary_edgeconsthalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "step_float_vert_xvary_edgeconsthalf.test.html", + }, + "name": "step_float_vert_xvary_edgeconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "step_vec2_vert_xvary_edgeconsthalf_ref.vert", + "vertexShader": "step_vec2_vert_xvary_edgeconsthalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "step_vec2_vert_xvary_edgeconsthalf.vert", + "vertexShader": "step_vec2_vert_xvary_edgeconsthalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "step_vec2_vert_xvary_edgeconsthalf.test.html", + }, + "name": "step_vec2_vert_xvary_edgeconsthalf.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "step_vec3_vert_xvary_edgeconsthalf_ref.vert", + "vertexShader": "step_vec3_vert_xvary_edgeconsthalf_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "step_vec3_vert_xvary_edgeconsthalf.vert", + "vertexShader": "step_vec3_vert_xvary_edgeconsthalf.vert", "fragmentShader": "../default/default.frag" - }, - "name": "step_vec3_vert_xvary_edgeconsthalf.test.html", + }, + "name": "step_vec3_vert_xvary_edgeconsthalf.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/nestedstructcomb_various_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/nestedstructcomb_various_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/nestedstructcomb_various_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/nestedstructcomb_various_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -47,14 +47,14 @@ struct test_t { - float t_fl; + float t_fl; vec2 t_vc2; vec3 t_vc3; mat4 t_mt4; nest t_nested; float t_2fl; }; - + vec4 mt1 = vec4(31.0, 32.0, 33.0, 34.0); vec4 mt2 = vec4(35.0, 36.0, 37.0, 38.0); vec4 mt3 = vec4(39.0, 40.0, 41.0, 42.0); @@ -62,53 +62,53 @@ int i=0; float sum1=0.0, sum2=0.0, sum3=0.0, sum4=0.0; - test_t a = test_t(23.0, vec2(12.0, 13.0), - - vec3(163.0, 173.0, 183.0), + test_t a = test_t(23.0, vec2(12.0, 13.0), + + vec3(163.0, 173.0, 183.0), mat4(mt1, mt2, mt3, mt4), - nest( ivec3(73, 74, 75), + nest( ivec3(73, 74, 75), - bvec4(12, 0, 17.0, 193.0 ), + bvec4(12, 0, 17.0, 193.0 ), - second_nest(144.0, mat2(22.0, 23.0, 24.0, 25.0), vec4(57.0, 58.0, 59.0, 60.0 ) - ) - ), + second_nest(144.0, mat2(22.0, 23.0, 24.0, 25.0), vec4(57.0, 58.0, 59.0, 60.0 ) + ) + ), - 203.0 + 203.0 ); sum1 = a.t_mt4[0][0] + a.t_mt4[0][1] + a.t_mt4[0][2] + a.t_mt4[0][3]; sum2 = a.t_mt4[1][0] + a.t_mt4[1][1] + a.t_mt4[1][2] + a.t_mt4[1][3]; sum3 = a.t_mt4[2][0] + a.t_mt4[2][1] + a.t_mt4[2][2] + a.t_mt4[2][3]; sum4 = a.t_mt4[3][0] + a.t_mt4[3][1] + a.t_mt4[3][2] + a.t_mt4[3][3]; - + float gray; - if( ( a.t_fl == 23.0 ) && + if( ( a.t_fl == 23.0 ) && - (a.t_vc2[0] == 12.0) && (a.t_vc2[1] == 13.0) && - - (a.t_vc3[0] == 163.0) && (a.t_vc3[1] == 173.0) && (a.t_vc3[2] == 183.0) && - - (sum1 > 130.0-ERROR_EPSILON && sum1 < 130.0+ERROR_EPSILON ) && (sum2 > 146.0-ERROR_EPSILON && sum2 < 146.0+ERROR_EPSILON ) && (sum3 >162.0-ERROR_EPSILON && sum3 < 162.0+ERROR_EPSILON ) && (sum4 > 178.0-ERROR_EPSILON && sum4 < 178.0+ERROR_EPSILON ) && + (a.t_vc2[0] == 12.0) && (a.t_vc2[1] == 13.0) && + + (a.t_vc3[0] == 163.0) && (a.t_vc3[1] == 173.0) && (a.t_vc3[2] == 183.0) && + + (sum1 > 130.0-ERROR_EPSILON && sum1 < 130.0+ERROR_EPSILON ) && (sum2 > 146.0-ERROR_EPSILON && sum2 < 146.0+ERROR_EPSILON ) && (sum3 >162.0-ERROR_EPSILON && sum3 < 162.0+ERROR_EPSILON ) && (sum4 > 178.0-ERROR_EPSILON && sum4 < 178.0+ERROR_EPSILON ) && (a.t_nested.nt_ivc3[0] == 73 ) && (a.t_nested.nt_ivc3[1] == 74 ) && (a.t_nested.nt_ivc3[2] == 75 ) && - - (a.t_nested.nt_bvc4[0] == true) && (a.t_nested.nt_bvc4[1] == false) && - + + (a.t_nested.nt_bvc4[0] == true) && (a.t_nested.nt_bvc4[1] == false) && + (a.t_nested.nt_bvc4[2] == true ) && (a.t_nested.nt_bvc4[0] == true) && - - (a.t_nested.nt_scne.sc_nt == 144.0) && - - (a.t_nested.nt_scne.sc_mt2[0][0] == 22.0 ) && (a.t_nested.nt_scne.sc_mt2[0][1] == 23.0 ) && + + (a.t_nested.nt_scne.sc_nt == 144.0) && + + (a.t_nested.nt_scne.sc_mt2[0][0] == 22.0 ) && (a.t_nested.nt_scne.sc_mt2[0][1] == 23.0 ) && (a.t_nested.nt_scne.sc_mt2[1][0] == 24.0 ) && (a.t_nested.nt_scne.sc_mt2[1][1] == 25.0 ) && - - (a.t_nested.nt_scne.sc_vc4[0] == 57.0 ) && (a.t_nested.nt_scne.sc_vc4[1] == 58.0 ) && - (a.t_nested.nt_scne.sc_vc4[2] == 59.0 ) && (a.t_nested.nt_scne.sc_vc4[3] == 60.0) && - - (a.t_2fl == 203.0) + (a.t_nested.nt_scne.sc_vc4[0] == 57.0 ) && (a.t_nested.nt_scne.sc_vc4[1] == 58.0 ) && + + (a.t_nested.nt_scne.sc_vc4[2] == 59.0 ) && (a.t_nested.nt_scne.sc_vc4[3] == 60.0) && + + (a.t_2fl == 203.0) ) gray=1.0; else gray=0.0; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/nestedstructcomb_various_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/nestedstructcomb_various_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/nestedstructcomb_various_vert.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/nestedstructcomb_various_vert.vert 2017-01-16 01:36:28.000000000 +0000 @@ -47,14 +47,14 @@ struct test_t { - float t_fl; + float t_fl; vec2 t_vc2; vec3 t_vc3; mat4 t_mt4; nest t_nested; float t_2fl; }; - + vec4 mt1 = vec4(31.0, 32.0, 33.0, 34.0); vec4 mt2 = vec4(35.0, 36.0, 37.0, 38.0); vec4 mt3 = vec4(39.0, 40.0, 41.0, 42.0); @@ -62,58 +62,58 @@ int i=0; float sum1=0.0, sum2=0.0, sum3=0.0, sum4=0.0; - test_t a = test_t(23.0, vec2(12.0, 13.0), - - vec3(163.0, 173.0, 183.0), + test_t a = test_t(23.0, vec2(12.0, 13.0), + + vec3(163.0, 173.0, 183.0), mat4(mt1, mt2, mt3, mt4), - nest( ivec3(73, 74, 75), + nest( ivec3(73, 74, 75), - bvec4(12, 0, 17.0, 193.0 ), + bvec4(12, 0, 17.0, 193.0 ), - second_nest(144.0, mat2(22.0, 23.0, 24.0, 25.0), vec4(57.0, 58.0, 59.0, 60.0 ) - ) - ), + second_nest(144.0, mat2(22.0, 23.0, 24.0, 25.0), vec4(57.0, 58.0, 59.0, 60.0 ) + ) + ), - 203.0 + 203.0 ); sum1 = a.t_mt4[0][0] + a.t_mt4[0][1] + a.t_mt4[0][2] + a.t_mt4[0][3]; sum2 = a.t_mt4[1][0] + a.t_mt4[1][1] + a.t_mt4[1][2] + a.t_mt4[1][3]; sum3 = a.t_mt4[2][0] + a.t_mt4[2][1] + a.t_mt4[2][2] + a.t_mt4[2][3]; sum4 = a.t_mt4[3][0] + a.t_mt4[3][1] + a.t_mt4[3][2] + a.t_mt4[3][3]; - + float gray; - if( ( a.t_fl == 23.0 ) && + if( ( a.t_fl == 23.0 ) && - (a.t_vc2[0] == 12.0) && (a.t_vc2[1] == 13.0) && - - (a.t_vc3[0] == 163.0) && (a.t_vc3[1] == 173.0) && (a.t_vc3[2] == 183.0) && - - (sum1 > 130.0-ERROR_EPSILON && sum1 < 130.0+ERROR_EPSILON ) && (sum2 > 146.0-ERROR_EPSILON && sum2 < 146.0+ERROR_EPSILON ) && (sum3 >162.0-ERROR_EPSILON && sum3 < 162.0+ERROR_EPSILON ) && (sum4 > 178.0-ERROR_EPSILON && sum4 < 178.0+ERROR_EPSILON ) && + (a.t_vc2[0] == 12.0) && (a.t_vc2[1] == 13.0) && + + (a.t_vc3[0] == 163.0) && (a.t_vc3[1] == 173.0) && (a.t_vc3[2] == 183.0) && + + (sum1 > 130.0-ERROR_EPSILON && sum1 < 130.0+ERROR_EPSILON ) && (sum2 > 146.0-ERROR_EPSILON && sum2 < 146.0+ERROR_EPSILON ) && (sum3 >162.0-ERROR_EPSILON && sum3 < 162.0+ERROR_EPSILON ) && (sum4 > 178.0-ERROR_EPSILON && sum4 < 178.0+ERROR_EPSILON ) && (a.t_nested.nt_ivc3[0] == 73 ) && (a.t_nested.nt_ivc3[1] == 74 ) && (a.t_nested.nt_ivc3[2] == 75 ) && - - (a.t_nested.nt_bvc4[0] == true) && (a.t_nested.nt_bvc4[1] == false) && - + + (a.t_nested.nt_bvc4[0] == true) && (a.t_nested.nt_bvc4[1] == false) && + (a.t_nested.nt_bvc4[2] == true ) && (a.t_nested.nt_bvc4[0] == true) && - - (a.t_nested.nt_scne.sc_nt == 144.0) && - - (a.t_nested.nt_scne.sc_mt2[0][0] == 22.0 ) && (a.t_nested.nt_scne.sc_mt2[0][1] == 23.0 ) && + + (a.t_nested.nt_scne.sc_nt == 144.0) && + + (a.t_nested.nt_scne.sc_mt2[0][0] == 22.0 ) && (a.t_nested.nt_scne.sc_mt2[0][1] == 23.0 ) && (a.t_nested.nt_scne.sc_mt2[1][0] == 24.0 ) && (a.t_nested.nt_scne.sc_mt2[1][1] == 25.0 ) && - - (a.t_nested.nt_scne.sc_vc4[0] == 57.0 ) && (a.t_nested.nt_scne.sc_vc4[1] == 58.0 ) && - (a.t_nested.nt_scne.sc_vc4[2] == 59.0 ) && (a.t_nested.nt_scne.sc_vc4[3] == 60.0) && - - (a.t_2fl == 203.0) + (a.t_nested.nt_scne.sc_vc4[0] == 57.0 ) && (a.t_nested.nt_scne.sc_vc4[1] == 58.0 ) && + + (a.t_nested.nt_scne.sc_vc4[2] == 59.0 ) && (a.t_nested.nt_scne.sc_vc4[3] == 60.0) && + + (a.t_2fl == 203.0) ) gray=1.0; else gray=0.0; color = vec4(gray, gray, gray, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; - + } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_001_to_008.html 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_001_to_008.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct_float_frag.frag" - }, - "name": "struct_float_frag.test.html", + }, + "name": "struct_float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "struct_float_vert.vert", + "vertexShader": "struct_float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "struct_float_vert.test.html", + }, + "name": "struct_float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structcopy_float_frag.frag" - }, - "name": "structcopy_float_frag.test.html", + }, + "name": "structcopy_float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structcopy_float_vert.vert", + "vertexShader": "structcopy_float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structcopy_float_vert.test.html", + }, + "name": "structcopy_float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structnest_float_frag.frag" - }, - "name": "structnest_float_frag.test.html", + }, + "name": "structnest_float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structnest_float_vert.vert", + "vertexShader": "structnest_float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structnest_float_vert.test.html", + }, + "name": "structnest_float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct_bool_frag.frag" - }, - "name": "struct_bool_frag.test.html", + }, + "name": "struct_bool_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "struct_bool_vert.vert", + "vertexShader": "struct_bool_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "struct_bool_vert.test.html", + }, + "name": "struct_bool_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_009_to_016.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_009_to_016.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_009_to_016.html 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_009_to_016.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structcopy_bool_frag.frag" - }, - "name": "structcopy_bool_frag.test.html", + }, + "name": "structcopy_bool_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structcopy_bool_vert.vert", + "vertexShader": "structcopy_bool_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structcopy_bool_vert.test.html", + }, + "name": "structcopy_bool_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structnest_bool_frag.frag" - }, - "name": "structnest_bool_frag.test.html", + }, + "name": "structnest_bool_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structnest_bool_vert.vert", + "vertexShader": "structnest_bool_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structnest_bool_vert.test.html", + }, + "name": "structnest_bool_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct_vec2_frag.frag" - }, - "name": "struct_vec2_frag.test.html", + }, + "name": "struct_vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "struct_vec2_vert.vert", + "vertexShader": "struct_vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "struct_vec2_vert.test.html", + }, + "name": "struct_vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structcopy_vec2_frag.frag" - }, - "name": "structcopy_vec2_frag.test.html", + }, + "name": "structcopy_vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structcopy_vec2_vert.vert", + "vertexShader": "structcopy_vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structcopy_vec2_vert.test.html", + }, + "name": "structcopy_vec2_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_017_to_024.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_017_to_024.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_017_to_024.html 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_017_to_024.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structnest_vec2_frag.frag" - }, - "name": "structnest_vec2_frag.test.html", + }, + "name": "structnest_vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structnest_vec2_vert.vert", + "vertexShader": "structnest_vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structnest_vec2_vert.test.html", + }, + "name": "structnest_vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct_vec3_frag.frag" - }, - "name": "struct_vec3_frag.test.html", + }, + "name": "struct_vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "struct_vec3_vert.vert", + "vertexShader": "struct_vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "struct_vec3_vert.test.html", + }, + "name": "struct_vec3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structcopy_vec3_frag.frag" - }, - "name": "structcopy_vec3_frag.test.html", + }, + "name": "structcopy_vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structcopy_vec3_vert.vert", + "vertexShader": "structcopy_vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structcopy_vec3_vert.test.html", + }, + "name": "structcopy_vec3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structnest_vec3_frag.frag" - }, - "name": "structnest_vec3_frag.test.html", + }, + "name": "structnest_vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structnest_vec3_vert.vert", + "vertexShader": "structnest_vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structnest_vec3_vert.test.html", + }, + "name": "structnest_vec3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_025_to_032.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_025_to_032.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_025_to_032.html 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_025_to_032.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct_vec4_frag.frag" - }, - "name": "struct_vec4_frag.test.html", + }, + "name": "struct_vec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "struct_vec4_vert.vert", + "vertexShader": "struct_vec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "struct_vec4_vert.test.html", + }, + "name": "struct_vec4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structcopy_vec4_frag.frag" - }, - "name": "structcopy_vec4_frag.test.html", + }, + "name": "structcopy_vec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structcopy_vec4_vert.vert", + "vertexShader": "structcopy_vec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structcopy_vec4_vert.test.html", + }, + "name": "structcopy_vec4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structnest_vec4_frag.frag" - }, - "name": "structnest_vec4_frag.test.html", + }, + "name": "structnest_vec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structnest_vec4_vert.vert", + "vertexShader": "structnest_vec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structnest_vec4_vert.test.html", + }, + "name": "structnest_vec4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct_bvec2bvec3bvec4_frag.frag" - }, - "name": "struct_bvec2bvec3bvec4_frag.test.html", + }, + "name": "struct_bvec2bvec3bvec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "struct_bvec2bvec3bvec4_vert.vert", + "vertexShader": "struct_bvec2bvec3bvec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "struct_bvec2bvec3bvec4_vert.test.html", + }, + "name": "struct_bvec2bvec3bvec4_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_033_to_040.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_033_to_040.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_033_to_040.html 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_033_to_040.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structcopy_bvec2bvec3bvec4_frag.frag" - }, - "name": "structcopy_bvec2bvec3bvec4_frag.test.html", + }, + "name": "structcopy_bvec2bvec3bvec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structcopy_bvec2bvec3bvec4_vert.vert", + "vertexShader": "structcopy_bvec2bvec3bvec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structcopy_bvec2bvec3bvec4_vert.test.html", + }, + "name": "structcopy_bvec2bvec3bvec4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structnest_bvec2bvec3bvec4_frag.frag" - }, - "name": "structnest_bvec2bvec3bvec4_frag.test.html", + }, + "name": "structnest_bvec2bvec3bvec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structnest_bvec2bvec3bvec4_vert.vert", + "vertexShader": "structnest_bvec2bvec3bvec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structnest_bvec2bvec3bvec4_vert.test.html", + }, + "name": "structnest_bvec2bvec3bvec4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct_mat2_frag.frag" - }, - "name": "struct_mat2_frag.test.html", + }, + "name": "struct_mat2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "struct_mat2_vert.vert", + "vertexShader": "struct_mat2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "struct_mat2_vert.test.html", + }, + "name": "struct_mat2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structcopy_mat2_frag.frag" - }, - "name": "structcopy_mat2_frag.test.html", + }, + "name": "structcopy_mat2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structcopy_mat2_vert.vert", + "vertexShader": "structcopy_mat2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structcopy_mat2_vert.test.html", + }, + "name": "structcopy_mat2_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_041_to_048.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_041_to_048.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_041_to_048.html 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_041_to_048.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structnest_mat2_frag.frag" - }, - "name": "structnest_mat2_frag.test.html", + }, + "name": "structnest_mat2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structnest_mat2_vert.vert", + "vertexShader": "structnest_mat2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structnest_mat2_vert.test.html", + }, + "name": "structnest_mat2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct_mat3_frag.frag" - }, - "name": "struct_mat3_frag.test.html", + }, + "name": "struct_mat3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "struct_mat3_vert.vert", + "vertexShader": "struct_mat3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "struct_mat3_vert.test.html", + }, + "name": "struct_mat3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structcopy_mat3_frag.frag" - }, - "name": "structcopy_mat3_frag.test.html", + }, + "name": "structcopy_mat3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structcopy_mat3_vert.vert", + "vertexShader": "structcopy_mat3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structcopy_mat3_vert.test.html", + }, + "name": "structcopy_mat3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structnest_mat3_frag.frag" - }, - "name": "structnest_mat3_frag.test.html", + }, + "name": "structnest_mat3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structnest_mat3_vert.vert", + "vertexShader": "structnest_mat3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structnest_mat3_vert.test.html", + }, + "name": "structnest_mat3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_049_to_056.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_049_to_056.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_049_to_056.html 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_049_to_056.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "struct_mat4_frag.frag" - }, - "name": "struct_mat4_frag.test.html", + }, + "name": "struct_mat4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "struct_mat4_vert.vert", + "vertexShader": "struct_mat4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "struct_mat4_vert.test.html", + }, + "name": "struct_mat4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structcopy_mat4_frag.frag" - }, - "name": "structcopy_mat4_frag.test.html", + }, + "name": "structcopy_mat4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structcopy_mat4_vert.vert", + "vertexShader": "structcopy_mat4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structcopy_mat4_vert.test.html", + }, + "name": "structcopy_mat4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "structnest_mat4_frag.frag" - }, - "name": "structnest_mat4_frag.test.html", + }, + "name": "structnest_mat4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "structnest_mat4_vert.vert", + "vertexShader": "structnest_mat4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "structnest_mat4_vert.test.html", + }, + "name": "structnest_mat4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "nestedstructcomb_various_frag.frag" - }, - "name": "nestedstructcomb_various_frag.test.html", + }, + "name": "nestedstructcomb_various_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "nestedstructcomb_various_vert.vert", + "vertexShader": "nestedstructcomb_various_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "nestedstructcomb_various_vert.test.html", + }, + "name": "nestedstructcomb_various_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_bool_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_bool_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_bool_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_bool_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -42,8 +42,8 @@ float gray = 0.0; if( (s.a==true) && (s.b==false) && (s.c == true) && (s.d==false)) gray=1.0; - else + else gray =0.0; - + gl_FragColor = vec4(gray, gray, gray, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_bool_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_bool_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_bool_vert.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_bool_vert.vert 2017-01-16 01:36:28.000000000 +0000 @@ -45,7 +45,7 @@ float gray = 0.0; if( (s.a==true) && (s.b==false) && (s.c == true) && (s.d==false)) gray=1.0; - else + else gray =0.0; color = vec4(gray, gray, gray, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_bvec2bvec3bvec4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_bvec2bvec3bvec4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_bvec2bvec3bvec4_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_bvec2bvec3bvec4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -39,8 +39,8 @@ float gray = 0.0; if( (s.a[0]) && (s.a[1]) && (s.b[0]) && (!s.b[1]) && (s.b[2]) && (s.c[0]) && (s.c[1]) && (s.c[2]) ) gray=1.0; - else + else gray =0.0; - + gl_FragColor = vec4(gray, gray, gray, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_bvec2bvec3bvec4_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_bvec2bvec3bvec4_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_bvec2bvec3bvec4_vert.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_bvec2bvec3bvec4_vert.vert 2017-01-16 01:36:28.000000000 +0000 @@ -40,7 +40,7 @@ float gray = 0.0; if( (s.a[0]) && (s.a[1]) && (s.b[0]) && (!s.b[1]) && (s.b[2]) && (s.c[0]) && (s.c[1]) && (s.c[2]) ) gray=1.0; - else + else gray =0.0; color = vec4(gray, gray, gray, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_bool_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_bool_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_bool_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_bool_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -44,7 +44,7 @@ float gray = 0.0; if( (s2.a==true) && (s2.b==false) && (s2.c == true) && (s2.d==false)) gray=1.0; - else + else gray =0.0; gl_FragColor = vec4(gray,gray,gray,1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_bool_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_bool_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_bool_vert.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_bool_vert.vert 2017-01-16 01:36:28.000000000 +0000 @@ -47,9 +47,9 @@ float gray = 0.0; if( (s2.a==true) && (s2.b==false) && (s2.c == true) && (s2.d==false)) gray=1.0; - else + else gray =0.0; color = vec4(gray, gray, gray, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; - + } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_bvec2bvec3bvec4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_bvec2bvec3bvec4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_bvec2bvec3bvec4_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_bvec2bvec3bvec4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -41,8 +41,8 @@ float gray = 0.0; if( (s2.a[0]) && (s2.a[1]) && (s2.b[0]) && (!s2.b[1]) && (s2.b[2]) && (s2.c[0]) && (s2.c[1]) && (s2.c[2]) ) gray=1.0; - else + else gray =0.0; - + gl_FragColor = vec4(gray, gray, gray, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_bvec2bvec3bvec4_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_bvec2bvec3bvec4_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_bvec2bvec3bvec4_vert.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_bvec2bvec3bvec4_vert.vert 2017-01-16 01:36:28.000000000 +0000 @@ -42,7 +42,7 @@ float gray = 0.0; if( (s2.a[0]) && (s2.a[1]) && (s2.b[0]) && (!s2.b[1]) && (s2.b[2]) && (s2.c[0]) && (s2.c[1]) && (s2.c[2]) && (s2.c[3]) ) gray=1.0; - else + else gray =0.0; color = vec4(gray, gray, gray, 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat2_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat2_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -29,7 +29,7 @@ varying vec4 color; struct sabcd -{ +{ mat2 a; }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat2_vert.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat2_vert.vert 2017-01-16 01:36:28.000000000 +0000 @@ -28,7 +28,7 @@ varying vec4 color; struct sabcd -{ +{ mat2 a; }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat3_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat3_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -29,7 +29,7 @@ varying vec4 color; struct sabcd -{ +{ mat3 a; }; @@ -40,7 +40,7 @@ s2 = s; float sum=0.0; int i,j; - + sum = sum + s2.a[0][0]; sum = sum + s2.a[0][1]; sum = sum + s2.a[0][2]; @@ -50,6 +50,6 @@ sum = sum + s2.a[2][0]; sum = sum + s2.a[2][1]; sum = sum + s2.a[2][2]; - + gl_FragColor = vec4( vec3( sum / 550.0 ), 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat3_vert.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat3_vert.vert 2017-01-16 01:36:28.000000000 +0000 @@ -28,7 +28,7 @@ varying vec4 color; struct sabcd -{ +{ mat3 a; }; @@ -38,19 +38,19 @@ sabcd s2 = sabcd(mat3(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) ); s2 = s; float sum=0.0; - + sum = sum + s2.a[0][0]; sum = sum + s2.a[0][1]; sum = sum + s2.a[0][2]; - + sum = sum + s2.a[1][0]; sum = sum + s2.a[1][1]; sum = sum + s2.a[1][2]; - + sum = sum + s2.a[2][0]; sum = sum + s2.a[2][1]; sum = sum + s2.a[2][2]; - + color = vec4( vec3( sum / 550.0 ), 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat4_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -29,19 +29,19 @@ varying vec4 color; struct sabcd -{ +{ mat4 a; }; void main (void) { - sabcd s = sabcd(mat4(12.0, 29.0, 13.0, 26.0, - 71.0, 63.0, 90.0, 118.0, - 128.0, 44.0, 57.0, 143.0, + sabcd s = sabcd(mat4(12.0, 29.0, 13.0, 26.0, + 71.0, 63.0, 90.0, 118.0, + 128.0, 44.0, 57.0, 143.0, 151.0, 14.0, 15.0, 21.0 ) ); - sabcd s2 = sabcd(mat4(0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, + sabcd s2 = sabcd(mat4(0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) ); s2 = s; float sum=0.0; @@ -63,6 +63,6 @@ sum = sum + s2.a[3][1]; sum = sum + s2.a[3][2]; sum = sum + s2.a[3][3]; - + gl_FragColor = vec4( vec3( sum / 995.0 ), 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat4_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat4_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat4_vert.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structcopy_mat4_vert.vert 2017-01-16 01:36:28.000000000 +0000 @@ -28,43 +28,43 @@ varying vec4 color; struct sabcd -{ +{ mat4 a; }; void main (void) { - sabcd s = sabcd(mat4(12.0, 29.0, 13.0, 26.0, - 71.0, 63.0, 90.0, 118.0, - 128.0, 44.0, 57.0, 143.0, + sabcd s = sabcd(mat4(12.0, 29.0, 13.0, 26.0, + 71.0, 63.0, 90.0, 118.0, + 128.0, 44.0, 57.0, 143.0, 151.0, 14.0, 15.0, 21.0 ) ); - sabcd s2 = sabcd(mat4(0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, + sabcd s2 = sabcd(mat4(0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ) ); s2 = s; float sum=0.0; - + sum = sum + s2.a[0][0]; sum = sum + s2.a[0][1]; sum = sum + s2.a[0][2]; sum = sum + s2.a[0][3]; - + sum = sum + s2.a[1][0]; sum = sum + s2.a[1][1]; sum = sum + s2.a[1][2]; sum = sum + s2.a[1][3]; - + sum = sum + s2.a[2][0]; sum = sum + s2.a[2][1]; sum = sum + s2.a[2][2]; sum = sum + s2.a[2][3]; - + sum = sum + s2.a[3][0]; sum = sum + s2.a[3][1]; sum = sum + s2.a[3][2]; sum = sum + s2.a[3][3]; - + color = vec4( vec3( sum / 995.0 ), 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat2_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat2_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -29,7 +29,7 @@ varying vec4 color; struct sabcd -{ +{ mat2 a; }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat2_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat2_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat2_vert.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat2_vert.vert 2017-01-16 01:36:28.000000000 +0000 @@ -28,7 +28,7 @@ varying vec4 color; struct sabcd -{ +{ mat2 a; }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat3_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat3_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -29,7 +29,7 @@ varying vec4 color; struct sabcd -{ +{ mat3 a; }; @@ -48,6 +48,6 @@ sum = sum + s.a[2][0]; sum = sum + s.a[2][1]; sum = sum + s.a[2][2]; - + gl_FragColor = vec4( vec3( sum / 550.0 ), 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat3_vert.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat3_vert.vert 2017-01-16 01:36:28.000000000 +0000 @@ -28,7 +28,7 @@ varying vec4 color; struct sabcd -{ +{ mat3 a; }; @@ -36,19 +36,19 @@ { sabcd s = sabcd(mat3(12.0, 29.0, 13.0, 26.0, 71.0, 63.0, 90.0, 118.0, 128.0) ); float sum=0.0; - + sum = sum + s.a[0][0]; sum = sum + s.a[0][1]; sum = sum + s.a[0][2]; - + sum = sum + s.a[1][0]; sum = sum + s.a[1][1]; sum = sum + s.a[1][2]; - + sum = sum + s.a[2][0]; sum = sum + s.a[2][1]; sum = sum + s.a[2][2]; - + color = vec4( vec3( sum / 550.0 ), 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat4_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -29,19 +29,19 @@ varying vec4 color; struct sabcd -{ +{ mat4 a; }; void main (void) { - sabcd s = sabcd(mat4(12.0, 29.0, 13.0, 26.0, - 71.0, 63.0, 90.0, 118.0, - 128.0, 44.0, 57.0, 143.0, + sabcd s = sabcd(mat4(12.0, 29.0, 13.0, 26.0, + 71.0, 63.0, 90.0, 118.0, + 128.0, 44.0, 57.0, 143.0, 151.0, 14.0, 15.0, 21.0 ) ); float sum=0.0; int i,j; - + sum = sum + s.a[0][0]; sum = sum + s.a[0][1]; sum = sum + s.a[0][2]; @@ -58,6 +58,6 @@ sum = sum + s.a[3][1]; sum = sum + s.a[3][2]; sum = sum + s.a[3][3]; - + gl_FragColor = vec4( vec3( sum / 995.0 ), 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat4_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat4_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat4_vert.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_mat4_vert.vert 2017-01-16 01:36:28.000000000 +0000 @@ -28,38 +28,38 @@ varying vec4 color; struct sabcd -{ +{ mat4 a; }; void main (void) { - sabcd s = sabcd(mat4(12.0, 29.0, 13.0, 26.0, - 71.0, 63.0, 90.0, 118.0, - 128.0, 44.0, 57.0, 143.0, + sabcd s = sabcd(mat4(12.0, 29.0, 13.0, 26.0, + 71.0, 63.0, 90.0, 118.0, + 128.0, 44.0, 57.0, 143.0, 151.0, 14.0, 15.0, 21.0 ) ); float sum=0.0; - + sum = sum + s.a[0][0]; sum = sum + s.a[0][1]; sum = sum + s.a[0][2]; sum = sum + s.a[0][3]; - + sum = sum + s.a[1][0]; sum = sum + s.a[1][1]; sum = sum + s.a[1][2]; sum = sum + s.a[1][3]; - + sum = sum + s.a[2][0]; sum = sum + s.a[2][1]; sum = sum + s.a[2][2]; sum = sum + s.a[2][3]; - + sum = sum + s.a[3][0]; sum = sum + s.a[3][1]; sum = sum + s.a[3][2]; sum = sum + s.a[3][3]; - + color = vec4( vec3( sum / 995.0 ), 1.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_bool_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_bool_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_bool_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_bool_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -49,7 +49,7 @@ if( (s.nest_a.a == true) && (s.nest_a.nest_b.b == false)) gray=1.0; - else + else gray =0.0; gl_FragColor = vec4(gray, gray, gray, 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_bool_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_bool_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_bool_vert.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_bool_vert.vert 2017-01-16 01:36:28.000000000 +0000 @@ -50,9 +50,9 @@ if( (s.nest_a.a == true) && (s.nest_a.nest_b.b == false)) gray=1.0; - else + else gray =0.0; color = vec4(gray, gray, gray, 1.0); - + gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_bvec2bvec3bvec4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_bvec2bvec3bvec4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_bvec2bvec3bvec4_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_bvec2bvec3bvec4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -50,21 +50,21 @@ void main (void) { - nest s = nest( nesta( bvec2(12, 13), bvec3(14.0, 0.0, 139.0), bvec4(25.5, 17.0, 145, 163 ), - nestb( bvec2(28, 0), bvec3(0.0, 0.0, 1.0), bvec4(0.0, 17.0, 145, 0 ) - ) - ) + nest s = nest( nesta( bvec2(12, 13), bvec3(14.0, 0.0, 139.0), bvec4(25.5, 17.0, 145, 163 ), + nestb( bvec2(28, 0), bvec3(0.0, 0.0, 1.0), bvec4(0.0, 17.0, 145, 0 ) + ) + ) ); float gray = 0.0; if( ( s.nest_a.a1[0] ) && ( s.nest_a.a1[1] ) && - ( s.nest_a.b1[0] ) && (! (s.nest_a.b1[1]) ) && ( s.nest_a.b1[2] ) && - ( s.nest_a.c1[0] ) && ( s.nest_a.c1[1] ) && ( s.nest_a.c1[2] ) && ( s.nest_a.c1[3] ) && - ( s.nest_a.nest_b.a2[0] ) && ( !( s.nest_a.nest_b.a2[1] ) ) && - (! ( s.nest_a.nest_b.b2[0] ) ) && (! ( s.nest_a.nest_b.b2[1] ) ) && (s.nest_a.nest_b.b2[2]) && - (! ( s.nest_a.nest_b.c2[0] ) ) && (s.nest_a.nest_b.c2[1]) && (s.nest_a.nest_b.c2[2]) && (! ( s.nest_a.nest_b.c2[3] ) ) + ( s.nest_a.b1[0] ) && (! (s.nest_a.b1[1]) ) && ( s.nest_a.b1[2] ) && + ( s.nest_a.c1[0] ) && ( s.nest_a.c1[1] ) && ( s.nest_a.c1[2] ) && ( s.nest_a.c1[3] ) && + ( s.nest_a.nest_b.a2[0] ) && ( !( s.nest_a.nest_b.a2[1] ) ) && + (! ( s.nest_a.nest_b.b2[0] ) ) && (! ( s.nest_a.nest_b.b2[1] ) ) && (s.nest_a.nest_b.b2[2]) && + (! ( s.nest_a.nest_b.c2[0] ) ) && (s.nest_a.nest_b.c2[1]) && (s.nest_a.nest_b.c2[2]) && (! ( s.nest_a.nest_b.c2[3] ) ) ) gray=1.0; - else + else gray =0.0; gl_FragColor = vec4(gray, gray, gray, 1.0); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_bvec2bvec3bvec4_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_bvec2bvec3bvec4_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_bvec2bvec3bvec4_vert.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_bvec2bvec3bvec4_vert.vert 2017-01-16 01:36:28.000000000 +0000 @@ -50,25 +50,25 @@ void main (void) { - nest s = nest( nesta( bvec2(12, 13), bvec3(14.0, 0.0, 139.0), bvec4(25.5, 17.0, 145, 163 ), - nestb( bvec2(28, 0), bvec3(0.0, 0.0, 1.0), bvec4(0.0, 17.0, 145, 0 ) - ) - ) + nest s = nest( nesta( bvec2(12, 13), bvec3(14.0, 0.0, 139.0), bvec4(25.5, 17.0, 145, 163 ), + nestb( bvec2(28, 0), bvec3(0.0, 0.0, 1.0), bvec4(0.0, 17.0, 145, 0 ) + ) + ) ); float gray = 0.0; if( ( s.nest_a.a1[0] ) && ( s.nest_a.a1[1] ) && - ( s.nest_a.b1[0] ) && (! (s.nest_a.b1[1]) ) && ( s.nest_a.b1[2] ) && - ( s.nest_a.c1[0] ) && ( s.nest_a.c1[1] ) && ( s.nest_a.c1[2] ) && ( s.nest_a.c1[3] ) && - ( s.nest_a.nest_b.a2[0] ) && ( !( s.nest_a.nest_b.a2[1] ) ) && - (! ( s.nest_a.nest_b.b2[0] ) ) && (! ( s.nest_a.nest_b.b2[1] ) ) && (s.nest_a.nest_b.b2[2]) && - (! ( s.nest_a.nest_b.c2[0] ) ) && (s.nest_a.nest_b.c2[1]) && (s.nest_a.nest_b.c2[2]) && (! ( s.nest_a.nest_b.c2[3] ) ) + ( s.nest_a.b1[0] ) && (! (s.nest_a.b1[1]) ) && ( s.nest_a.b1[2] ) && + ( s.nest_a.c1[0] ) && ( s.nest_a.c1[1] ) && ( s.nest_a.c1[2] ) && ( s.nest_a.c1[3] ) && + ( s.nest_a.nest_b.a2[0] ) && ( !( s.nest_a.nest_b.a2[1] ) ) && + (! ( s.nest_a.nest_b.b2[0] ) ) && (! ( s.nest_a.nest_b.b2[1] ) ) && (s.nest_a.nest_b.b2[2]) && + (! ( s.nest_a.nest_b.c2[0] ) ) && (s.nest_a.nest_b.c2[1]) && (s.nest_a.nest_b.c2[2]) && (! ( s.nest_a.nest_b.c2[3] ) ) ) gray=1.0; - else + else gray =0.0; color = vec4(gray, gray, gray, 1.0); - + gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat2_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat2_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -45,7 +45,7 @@ void main (void) { nest s = nest(nesta( mat2(11, 13, 29, 33), nestb( mat2(12, 19, 79, 81) ) ) ); - + gl_FragColor = vec4( vec3( (s.nest_a.a[0][0] + s.nest_a.a[0][1] + s.nest_a.a[1][0] + s.nest_a.a[1][1] + s.nest_a.nest_b.b[0][0] + s.nest_a.nest_b.b[0][1] + s.nest_a.nest_b.b[1][0] + s.nest_a.nest_b.b[1][1] ) / 277.0 ), 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat3_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat3_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -50,28 +50,28 @@ sum1 = sum1 + s.nest_a.a[0][0]; sum2 = sum2 + s.nest_a.nest_b.b[0][0]; - + sum1 = sum1 + s.nest_a.a[0][1]; sum2 = sum2 + s.nest_a.nest_b.b[0][1]; - + sum1 = sum1 + s.nest_a.a[0][2]; sum2 = sum2 + s.nest_a.nest_b.b[0][2]; - + sum1 = sum1 + s.nest_a.a[1][0]; sum2 = sum2 + s.nest_a.nest_b.b[1][0]; - + sum1 = sum1 + s.nest_a.a[1][1]; sum2 = sum2 + s.nest_a.nest_b.b[1][1]; - + sum1 = sum1 + s.nest_a.a[1][2]; sum2 = sum2 + s.nest_a.nest_b.b[1][2]; - + sum1 = sum1 + s.nest_a.a[2][0]; sum2 = sum2 + s.nest_a.nest_b.b[2][0]; - + sum1 = sum1 + s.nest_a.a[2][1]; sum2 = sum2 + s.nest_a.nest_b.b[2][1]; - + sum1 = sum1 + s.nest_a.a[2][2]; sum2 = sum2 + s.nest_a.nest_b.b[2][2]; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat3_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat3_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat3_vert.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat3_vert.vert 2017-01-16 01:36:28.000000000 +0000 @@ -54,14 +54,14 @@ sum2 = sum2 + s.nest_a.nest_b.b[0][1]; sum1 = sum1 + s.nest_a.a[0][2]; sum2 = sum2 + s.nest_a.nest_b.b[0][2]; - + sum1 = sum1 + s.nest_a.a[1][0]; sum2 = sum2 + s.nest_a.nest_b.b[1][0]; sum1 = sum1 + s.nest_a.a[1][1]; sum2 = sum2 + s.nest_a.nest_b.b[1][1]; sum1 = sum1 + s.nest_a.a[1][2]; sum2 = sum2 + s.nest_a.nest_b.b[1][2]; - + sum1 = sum1 + s.nest_a.a[2][0]; sum2 = sum2 + s.nest_a.nest_b.b[2][0]; sum1 = sum1 + s.nest_a.a[2][1]; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat4_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -47,52 +47,52 @@ nest s = nest(nesta( mat4(11, 13, 29, 33, 63, 13, 49, 57, 71, 47, 91, 101, 167, 21, 39, 41), nestb( mat4(12, 19, 79, 81, 35, 51, 73, 66, 23, 134, 121, 156, 76, 23, 24, 78) ) ) ); float sum1=0.0,sum2=0.0; int i,j; - + sum1 = sum1 + s.nest_a.a[0][0]; sum2 = sum2 + s.nest_a.nest_b.b[0][0]; - + sum1 = sum1 + s.nest_a.a[0][1]; sum2 = sum2 + s.nest_a.nest_b.b[0][1]; - + sum1 = sum1 + s.nest_a.a[0][2]; sum2 = sum2 + s.nest_a.nest_b.b[0][2]; - + sum1 = sum1 + s.nest_a.a[0][3]; sum2 = sum2 + s.nest_a.nest_b.b[0][3]; - + sum1 = sum1 + s.nest_a.a[1][0]; sum2 = sum2 + s.nest_a.nest_b.b[1][0]; - + sum1 = sum1 + s.nest_a.a[1][1]; sum2 = sum2 + s.nest_a.nest_b.b[1][1]; - + sum1 = sum1 + s.nest_a.a[1][2]; sum2 = sum2 + s.nest_a.nest_b.b[1][2]; - + sum1 = sum1 + s.nest_a.a[1][3]; sum2 = sum2 + s.nest_a.nest_b.b[1][3]; - + sum1 = sum1 + s.nest_a.a[2][0]; sum2 = sum2 + s.nest_a.nest_b.b[2][0]; - + sum1 = sum1 + s.nest_a.a[2][1]; sum2 = sum2 + s.nest_a.nest_b.b[2][1]; - + sum1 = sum1 + s.nest_a.a[2][2]; sum2 = sum2 + s.nest_a.nest_b.b[2][2]; - + sum1 = sum1 + s.nest_a.a[2][3]; sum2 = sum2 + s.nest_a.nest_b.b[2][3]; - + sum1 = sum1 + s.nest_a.a[3][0]; sum2 = sum2 + s.nest_a.nest_b.b[3][0]; - + sum1 = sum1 + s.nest_a.a[3][1]; sum2 = sum2 + s.nest_a.nest_b.b[3][1]; - + sum1 = sum1 + s.nest_a.a[3][2]; sum2 = sum2 + s.nest_a.nest_b.b[3][2]; - + sum1 = sum1 + s.nest_a.a[3][3]; sum2 = sum2 + s.nest_a.nest_b.b[3][3]; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat4_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat4_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat4_vert.vert 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_mat4_vert.vert 2017-01-16 01:36:28.000000000 +0000 @@ -56,7 +56,7 @@ sum2 = sum2 + s.nest_a.nest_b.b[0][2]; sum1 = sum1 + s.nest_a.a[0][3]; sum2 = sum2 + s.nest_a.nest_b.b[0][3]; - + sum1 = sum1 + s.nest_a.a[1][0]; sum2 = sum2 + s.nest_a.nest_b.b[1][0]; sum1 = sum1 + s.nest_a.a[1][1]; @@ -65,7 +65,7 @@ sum2 = sum2 + s.nest_a.nest_b.b[1][2]; sum1 = sum1 + s.nest_a.a[1][3]; sum2 = sum2 + s.nest_a.nest_b.b[1][3]; - + sum1 = sum1 + s.nest_a.a[2][0]; sum2 = sum2 + s.nest_a.nest_b.b[2][0]; sum1 = sum1 + s.nest_a.a[2][1]; @@ -74,7 +74,7 @@ sum2 = sum2 + s.nest_a.nest_b.b[2][2]; sum1 = sum1 + s.nest_a.a[2][3]; sum2 = sum2 + s.nest_a.nest_b.b[2][3]; - + sum1 = sum1 + s.nest_a.a[3][0]; sum2 = sum2 + s.nest_a.nest_b.b[3][0]; sum1 = sum1 + s.nest_a.a[3][1]; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_vec2_frag.frag 2017-01-13 01:35:41.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/structnest_vec2_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -45,6 +45,6 @@ void main (void) { nest s = nest(nesta(vec2(11, 13), nestb(vec2(12, 19) ) ) ); - + gl_FragColor = vec4( vec3( (s.nest_a.a[0] + s.nest_a.a[1] + s.nest_a.nest_b.b[0] + s.nest_a.nest_b.b[1] ) / 55.0 ), 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_vec2_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_vec2_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -36,6 +36,6 @@ void main (void) { sabcd s = sabcd(vec2(12.0, 29.0), vec2(13.0, 26.0) ); - + gl_FragColor = vec4( vec3( (s.a[0] + s.a[1] + s.b[0] + s.b[1]) / 80.0 ), 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_vec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_vec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_vec3_frag.frag 2017-01-13 01:35:40.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/struct/struct_vec3_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -36,6 +36,6 @@ void main (void) { sabcd s = sabcd(vec3(12.0, 29.0, 32.0), vec3(13.0, 26.0, 38.0 ) ); - + gl_FragColor = vec4( vec3( (s.a[0] + s.a[1] + s.a[2] + s.b[0] + s.b[1] + s.b[2]) / 150.0 ), 1.0); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_001_to_008.html 2017-01-13 01:35:41.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_001_to_008.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_xyzw_1vec4_frag.frag" - }, - "name": "vec4_xyzw_1vec4_frag.test.html", + }, + "name": "vec4_xyzw_1vec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_xyzw_1vec4_vert.vert", + "vertexShader": "vec4_xyzw_1vec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_xyzw_1vec4_vert.test.html", + }, + "name": "vec4_xyzw_1vec4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_zwxy_1vec4_frag.frag" - }, - "name": "vec4_zwxy_1vec4_frag.test.html", + }, + "name": "vec4_zwxy_1vec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_zwxy_1vec4_vert.vert", + "vertexShader": "vec4_zwxy_1vec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_zwxy_1vec4_vert.test.html", + }, + "name": "vec4_zwxy_1vec4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_yxwz_1vec4_frag.frag" - }, - "name": "vec4_yxwz_1vec4_frag.test.html", + }, + "name": "vec4_yxwz_1vec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_yxwz_1vec4_vert.vert", + "vertexShader": "vec4_yxwz_1vec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_yxwz_1vec4_vert.test.html", + }, + "name": "vec4_yxwz_1vec4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_wxzy_1vec4_frag.frag" - }, - "name": "vec4_wxzy_1vec4_frag.test.html", + }, + "name": "vec4_wxzy_1vec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_wxzy_1vec4_vert.vert", + "vertexShader": "vec4_wxzy_1vec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_wxzy_1vec4_vert.test.html", + }, + "name": "vec4_wxzy_1vec4_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_009_to_016.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_009_to_016.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_009_to_016.html 2017-01-13 01:35:42.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_009_to_016.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_xyz_w_1vec3_1float_frag.frag" - }, - "name": "vec4_xyz_w_1vec3_1float_frag.test.html", + }, + "name": "vec4_xyz_w_1vec3_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_xyz_w_1vec3_1float_vert.vert", + "vertexShader": "vec4_xyz_w_1vec3_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_xyz_w_1vec3_1float_vert.test.html", + }, + "name": "vec4_xyz_w_1vec3_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_zwx_y_1vec3_1float_frag.frag" - }, - "name": "vec4_zwx_y_1vec3_1float_frag.test.html", + }, + "name": "vec4_zwx_y_1vec3_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_zwx_y_1vec3_1float_vert.vert", + "vertexShader": "vec4_zwx_y_1vec3_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_zwx_y_1vec3_1float_vert.test.html", + }, + "name": "vec4_zwx_y_1vec3_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_yxw_z_1vec3_1float_frag.frag" - }, - "name": "vec4_yxw_z_1vec3_1float_frag.test.html", + }, + "name": "vec4_yxw_z_1vec3_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_yxw_z_1vec3_1float_vert.vert", + "vertexShader": "vec4_yxw_z_1vec3_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_yxw_z_1vec3_1float_vert.test.html", + }, + "name": "vec4_yxw_z_1vec3_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_wxz_y_1vec3_1float_frag.frag" - }, - "name": "vec4_wxz_y_1vec3_1float_frag.test.html", + }, + "name": "vec4_wxz_y_1vec3_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_wxz_y_1vec3_1float_vert.vert", + "vertexShader": "vec4_wxz_y_1vec3_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_wxz_y_1vec3_1float_vert.test.html", + }, + "name": "vec4_wxz_y_1vec3_1float_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_017_to_024.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_017_to_024.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_017_to_024.html 2017-01-13 01:35:42.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_017_to_024.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_xy_zw_2vec2_frag.frag" - }, - "name": "vec4_xy_zw_2vec2_frag.test.html", + }, + "name": "vec4_xy_zw_2vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_xy_zw_2vec2_vert.vert", + "vertexShader": "vec4_xy_zw_2vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_xy_zw_2vec2_vert.test.html", + }, + "name": "vec4_xy_zw_2vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_zx_wy_2vec2_frag.frag" - }, - "name": "vec4_zx_wy_2vec2_frag.test.html", + }, + "name": "vec4_zx_wy_2vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_zx_wy_2vec2_vert.vert", + "vertexShader": "vec4_zx_wy_2vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_zx_wy_2vec2_vert.test.html", + }, + "name": "vec4_zx_wy_2vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_yx_wz_2vec2_frag.frag" - }, - "name": "vec4_yx_wz_2vec2_frag.test.html", + }, + "name": "vec4_yx_wz_2vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_yx_wz_2vec2_vert.vert", + "vertexShader": "vec4_yx_wz_2vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_yx_wz_2vec2_vert.test.html", + }, + "name": "vec4_yx_wz_2vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_wx_zy_2vec2_frag.frag" - }, - "name": "vec4_wx_zy_2vec2_frag.test.html", + }, + "name": "vec4_wx_zy_2vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_wx_zy_2vec2_vert.vert", + "vertexShader": "vec4_wx_zy_2vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_wx_zy_2vec2_vert.test.html", + }, + "name": "vec4_wx_zy_2vec2_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_025_to_032.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_025_to_032.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_025_to_032.html 2017-01-13 01:35:42.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_025_to_032.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_x_y_z_w_4float_frag.frag" - }, - "name": "vec4_x_y_z_w_4float_frag.test.html", + }, + "name": "vec4_x_y_z_w_4float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_x_y_z_w_4float_vert.vert", + "vertexShader": "vec4_x_y_z_w_4float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_x_y_z_w_4float_vert.test.html", + }, + "name": "vec4_x_y_z_w_4float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_xyz_1vec3_frag.frag" - }, - "name": "vec3_xyz_1vec3_frag.test.html", + }, + "name": "vec3_xyz_1vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_xyz_1vec3_vert.vert", + "vertexShader": "vec3_xyz_1vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_xyz_1vec3_vert.test.html", + }, + "name": "vec3_xyz_1vec3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_yxz_1vec3_frag.frag" - }, - "name": "vec3_yxz_1vec3_frag.test.html", + }, + "name": "vec3_yxz_1vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_yxz_1vec3_vert.vert", + "vertexShader": "vec3_yxz_1vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_yxz_1vec3_vert.test.html", + }, + "name": "vec3_yxz_1vec3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_zyx_1vec3_frag.frag" - }, - "name": "vec3_zyx_1vec3_frag.test.html", + }, + "name": "vec3_zyx_1vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_zyx_1vec3_vert.vert", + "vertexShader": "vec3_zyx_1vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_zyx_1vec3_vert.test.html", + }, + "name": "vec3_zyx_1vec3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_033_to_040.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_033_to_040.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_033_to_040.html 2017-01-13 01:35:42.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_033_to_040.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_xy_z_1vec2_1float_frag.frag" - }, - "name": "vec3_xy_z_1vec2_1float_frag.test.html", + }, + "name": "vec3_xy_z_1vec2_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_xy_z_1vec2_1float_vert.vert", + "vertexShader": "vec3_xy_z_1vec2_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_xy_z_1vec2_1float_vert.test.html", + }, + "name": "vec3_xy_z_1vec2_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_xz_y_1vec2_1float_frag.frag" - }, - "name": "vec3_xz_y_1vec2_1float_frag.test.html", + }, + "name": "vec3_xz_y_1vec2_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_xz_y_1vec2_1float_vert.vert", + "vertexShader": "vec3_xz_y_1vec2_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_xz_y_1vec2_1float_vert.test.html", + }, + "name": "vec3_xz_y_1vec2_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_yz_x_1vec2_1float_frag.frag" - }, - "name": "vec3_yz_x_1vec2_1float_frag.test.html", + }, + "name": "vec3_yz_x_1vec2_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_yz_x_1vec2_1float_vert.vert", + "vertexShader": "vec3_yz_x_1vec2_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_yz_x_1vec2_1float_vert.test.html", + }, + "name": "vec3_yz_x_1vec2_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_zx_y_1vec2_1float_frag.frag" - }, - "name": "vec3_zx_y_1vec2_1float_frag.test.html", + }, + "name": "vec3_zx_y_1vec2_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_zx_y_1vec2_1float_vert.vert", + "vertexShader": "vec3_zx_y_1vec2_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_zx_y_1vec2_1float_vert.test.html", + }, + "name": "vec3_zx_y_1vec2_1float_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_041_to_048.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_041_to_048.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_041_to_048.html 2017-01-13 01:35:42.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_041_to_048.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_rgba_1vec4_frag.frag" - }, - "name": "vec4_rgba_1vec4_frag.test.html", + }, + "name": "vec4_rgba_1vec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_rgba_1vec4_vert.vert", + "vertexShader": "vec4_rgba_1vec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_rgba_1vec4_vert.test.html", + }, + "name": "vec4_rgba_1vec4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_barg_1vec4_frag.frag" - }, - "name": "vec4_barg_1vec4_frag.test.html", + }, + "name": "vec4_barg_1vec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_barg_1vec4_vert.vert", + "vertexShader": "vec4_barg_1vec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_barg_1vec4_vert.test.html", + }, + "name": "vec4_barg_1vec4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_grab_1vec4_frag.frag" - }, - "name": "vec4_grab_1vec4_frag.test.html", + }, + "name": "vec4_grab_1vec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_grab_1vec4_vert.vert", + "vertexShader": "vec4_grab_1vec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_grab_1vec4_vert.test.html", + }, + "name": "vec4_grab_1vec4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_arbg_1vec4_frag.frag" - }, - "name": "vec4_arbg_1vec4_frag.test.html", + }, + "name": "vec4_arbg_1vec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_arbg_1vec4_vert.vert", + "vertexShader": "vec4_arbg_1vec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_arbg_1vec4_vert.test.html", + }, + "name": "vec4_arbg_1vec4_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_049_to_056.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_049_to_056.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_049_to_056.html 2017-01-13 01:35:42.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_049_to_056.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_rgb_a_1vec3_1float_frag.frag" - }, - "name": "vec4_rgb_a_1vec3_1float_frag.test.html", + }, + "name": "vec4_rgb_a_1vec3_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_rgb_a_1vec3_1float_vert.vert", + "vertexShader": "vec4_rgb_a_1vec3_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_rgb_a_1vec3_1float_vert.test.html", + }, + "name": "vec4_rgb_a_1vec3_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_bar_g_1vec3_1float_frag.frag" - }, - "name": "vec4_bar_g_1vec3_1float_frag.test.html", + }, + "name": "vec4_bar_g_1vec3_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_bar_g_1vec3_1float_vert.vert", + "vertexShader": "vec4_bar_g_1vec3_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_bar_g_1vec3_1float_vert.test.html", + }, + "name": "vec4_bar_g_1vec3_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_gra_b_1vec3_1float_frag.frag" - }, - "name": "vec4_gra_b_1vec3_1float_frag.test.html", + }, + "name": "vec4_gra_b_1vec3_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_gra_b_1vec3_1float_vert.vert", + "vertexShader": "vec4_gra_b_1vec3_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_gra_b_1vec3_1float_vert.test.html", + }, + "name": "vec4_gra_b_1vec3_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_arb_g_1vec3_1float_frag.frag" - }, - "name": "vec4_arb_g_1vec3_1float_frag.test.html", + }, + "name": "vec4_arb_g_1vec3_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_arb_g_1vec3_1float_vert.vert", + "vertexShader": "vec4_arb_g_1vec3_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_arb_g_1vec3_1float_vert.test.html", + }, + "name": "vec4_arb_g_1vec3_1float_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_057_to_064.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_057_to_064.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_057_to_064.html 2017-01-13 01:35:42.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_057_to_064.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_rg_ba_2vec2_frag.frag" - }, - "name": "vec4_rg_ba_2vec2_frag.test.html", + }, + "name": "vec4_rg_ba_2vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_rg_ba_2vec2_vert.vert", + "vertexShader": "vec4_rg_ba_2vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_rg_ba_2vec2_vert.test.html", + }, + "name": "vec4_rg_ba_2vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_br_ag_2vec2_frag.frag" - }, - "name": "vec4_br_ag_2vec2_frag.test.html", + }, + "name": "vec4_br_ag_2vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_br_ag_2vec2_vert.vert", + "vertexShader": "vec4_br_ag_2vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_br_ag_2vec2_vert.test.html", + }, + "name": "vec4_br_ag_2vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_gr_ab_2vec2_frag.frag" - }, - "name": "vec4_gr_ab_2vec2_frag.test.html", + }, + "name": "vec4_gr_ab_2vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_gr_ab_2vec2_vert.vert", + "vertexShader": "vec4_gr_ab_2vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_gr_ab_2vec2_vert.test.html", + }, + "name": "vec4_gr_ab_2vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_ar_bg_2vec2_frag.frag" - }, - "name": "vec4_ar_bg_2vec2_frag.test.html", + }, + "name": "vec4_ar_bg_2vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_ar_bg_2vec2_vert.vert", + "vertexShader": "vec4_ar_bg_2vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_ar_bg_2vec2_vert.test.html", + }, + "name": "vec4_ar_bg_2vec2_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_065_to_072.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_065_to_072.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_065_to_072.html 2017-01-13 01:35:42.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_065_to_072.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_r_g_b_a_4float_frag.frag" - }, - "name": "vec4_r_g_b_a_4float_frag.test.html", + }, + "name": "vec4_r_g_b_a_4float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_r_g_b_a_4float_vert.vert", + "vertexShader": "vec4_r_g_b_a_4float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_r_g_b_a_4float_vert.test.html", + }, + "name": "vec4_r_g_b_a_4float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_rgb_1vec3_frag.frag" - }, - "name": "vec3_rgb_1vec3_frag.test.html", + }, + "name": "vec3_rgb_1vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_rgb_1vec3_vert.vert", + "vertexShader": "vec3_rgb_1vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_rgb_1vec3_vert.test.html", + }, + "name": "vec3_rgb_1vec3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_grb_1vec3_frag.frag" - }, - "name": "vec3_grb_1vec3_frag.test.html", + }, + "name": "vec3_grb_1vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_grb_1vec3_vert.vert", + "vertexShader": "vec3_grb_1vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_grb_1vec3_vert.test.html", + }, + "name": "vec3_grb_1vec3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_bgr_1vec3_frag.frag" - }, - "name": "vec3_bgr_1vec3_frag.test.html", + }, + "name": "vec3_bgr_1vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_bgr_1vec3_vert.vert", + "vertexShader": "vec3_bgr_1vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_bgr_1vec3_vert.test.html", + }, + "name": "vec3_bgr_1vec3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_073_to_080.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_073_to_080.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_073_to_080.html 2017-01-13 01:35:43.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_073_to_080.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_rg_b_1vec2_1float_frag.frag" - }, - "name": "vec3_rg_b_1vec2_1float_frag.test.html", + }, + "name": "vec3_rg_b_1vec2_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_rg_b_1vec2_1float_vert.vert", + "vertexShader": "vec3_rg_b_1vec2_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_rg_b_1vec2_1float_vert.test.html", + }, + "name": "vec3_rg_b_1vec2_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_rb_g_1vec2_1float_frag.frag" - }, - "name": "vec3_rb_g_1vec2_1float_frag.test.html", + }, + "name": "vec3_rb_g_1vec2_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_rb_g_1vec2_1float_vert.vert", + "vertexShader": "vec3_rb_g_1vec2_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_rb_g_1vec2_1float_vert.test.html", + }, + "name": "vec3_rb_g_1vec2_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_gb_r_1vec2_1float_frag.frag" - }, - "name": "vec3_gb_r_1vec2_1float_frag.test.html", + }, + "name": "vec3_gb_r_1vec2_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_gb_r_1vec2_1float_vert.vert", + "vertexShader": "vec3_gb_r_1vec2_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_gb_r_1vec2_1float_vert.test.html", + }, + "name": "vec3_gb_r_1vec2_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_br_g_1vec2_1float_frag.frag" - }, - "name": "vec3_br_g_1vec2_1float_frag.test.html", + }, + "name": "vec3_br_g_1vec2_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_br_g_1vec2_1float_vert.vert", + "vertexShader": "vec3_br_g_1vec2_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_br_g_1vec2_1float_vert.test.html", + }, + "name": "vec3_br_g_1vec2_1float_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_081_to_088.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_081_to_088.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_081_to_088.html 2017-01-13 01:35:44.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_081_to_088.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_stpq_1vec4_frag.frag" - }, - "name": "vec4_stpq_1vec4_frag.test.html", + }, + "name": "vec4_stpq_1vec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_stpq_1vec4_vert.vert", + "vertexShader": "vec4_stpq_1vec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_stpq_1vec4_vert.test.html", + }, + "name": "vec4_stpq_1vec4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_pqst_1vec4_frag.frag" - }, - "name": "vec4_pqst_1vec4_frag.test.html", + }, + "name": "vec4_pqst_1vec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_pqst_1vec4_vert.vert", + "vertexShader": "vec4_pqst_1vec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_pqst_1vec4_vert.test.html", + }, + "name": "vec4_pqst_1vec4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_tsqp_1vec4_frag.frag" - }, - "name": "vec4_tsqp_1vec4_frag.test.html", + }, + "name": "vec4_tsqp_1vec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_tsqp_1vec4_vert.vert", + "vertexShader": "vec4_tsqp_1vec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_tsqp_1vec4_vert.test.html", + }, + "name": "vec4_tsqp_1vec4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_qspt_1vec4_frag.frag" - }, - "name": "vec4_qspt_1vec4_frag.test.html", + }, + "name": "vec4_qspt_1vec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_qspt_1vec4_vert.vert", + "vertexShader": "vec4_qspt_1vec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_qspt_1vec4_vert.test.html", + }, + "name": "vec4_qspt_1vec4_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_089_to_096.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_089_to_096.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_089_to_096.html 2017-01-13 01:35:44.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_089_to_096.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_stp_q_1vec3_1float_frag.frag" - }, - "name": "vec4_stp_q_1vec3_1float_frag.test.html", + }, + "name": "vec4_stp_q_1vec3_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_stp_q_1vec3_1float_vert.vert", + "vertexShader": "vec4_stp_q_1vec3_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_stp_q_1vec3_1float_vert.test.html", + }, + "name": "vec4_stp_q_1vec3_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_pqs_t_1vec3_1float_frag.frag" - }, - "name": "vec4_pqs_t_1vec3_1float_frag.test.html", + }, + "name": "vec4_pqs_t_1vec3_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_pqs_t_1vec3_1float_vert.vert", + "vertexShader": "vec4_pqs_t_1vec3_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_pqs_t_1vec3_1float_vert.test.html", + }, + "name": "vec4_pqs_t_1vec3_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_tsq_p_1vec3_1float_frag.frag" - }, - "name": "vec4_tsq_p_1vec3_1float_frag.test.html", + }, + "name": "vec4_tsq_p_1vec3_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_tsq_p_1vec3_1float_vert.vert", + "vertexShader": "vec4_tsq_p_1vec3_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_tsq_p_1vec3_1float_vert.test.html", + }, + "name": "vec4_tsq_p_1vec3_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_qsp_t_1vec3_1float_frag.frag" - }, - "name": "vec4_qsp_t_1vec3_1float_frag.test.html", + }, + "name": "vec4_qsp_t_1vec3_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_qsp_t_1vec3_1float_vert.vert", + "vertexShader": "vec4_qsp_t_1vec3_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_qsp_t_1vec3_1float_vert.test.html", + }, + "name": "vec4_qsp_t_1vec3_1float_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_097_to_104.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_097_to_104.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_097_to_104.html 2017-01-13 01:35:45.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_097_to_104.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_st_pq_2vec2_frag.frag" - }, - "name": "vec4_st_pq_2vec2_frag.test.html", + }, + "name": "vec4_st_pq_2vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_st_pq_2vec2_vert.vert", + "vertexShader": "vec4_st_pq_2vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_st_pq_2vec2_vert.test.html", + }, + "name": "vec4_st_pq_2vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_ps_qt_2vec2_frag.frag" - }, - "name": "vec4_ps_qt_2vec2_frag.test.html", + }, + "name": "vec4_ps_qt_2vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_ps_qt_2vec2_vert.vert", + "vertexShader": "vec4_ps_qt_2vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_ps_qt_2vec2_vert.test.html", + }, + "name": "vec4_ps_qt_2vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_ts_qp_2vec2_frag.frag" - }, - "name": "vec4_ts_qp_2vec2_frag.test.html", + }, + "name": "vec4_ts_qp_2vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_ts_qp_2vec2_vert.vert", + "vertexShader": "vec4_ts_qp_2vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_ts_qp_2vec2_vert.test.html", + }, + "name": "vec4_ts_qp_2vec2_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_qs_pt_2vec2_frag.frag" - }, - "name": "vec4_qs_pt_2vec2_frag.test.html", + }, + "name": "vec4_qs_pt_2vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_qs_pt_2vec2_vert.vert", + "vertexShader": "vec4_qs_pt_2vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_qs_pt_2vec2_vert.test.html", + }, + "name": "vec4_qs_pt_2vec2_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_105_to_112.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_105_to_112.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_105_to_112.html 2017-01-13 01:35:46.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_105_to_112.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_s_t_p_q_4float_frag.frag" - }, - "name": "vec4_s_t_p_q_4float_frag.test.html", + }, + "name": "vec4_s_t_p_q_4float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec4_s_t_p_q_4float_vert.vert", + "vertexShader": "vec4_s_t_p_q_4float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_s_t_p_q_4float_vert.test.html", + }, + "name": "vec4_s_t_p_q_4float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_stp_1vec3_frag.frag" - }, - "name": "vec3_stp_1vec3_frag.test.html", + }, + "name": "vec3_stp_1vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_stp_1vec3_vert.vert", + "vertexShader": "vec3_stp_1vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_stp_1vec3_vert.test.html", + }, + "name": "vec3_stp_1vec3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_tsp_1vec3_frag.frag" - }, - "name": "vec3_tsp_1vec3_frag.test.html", + }, + "name": "vec3_tsp_1vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_tsp_1vec3_vert.vert", + "vertexShader": "vec3_tsp_1vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_tsp_1vec3_vert.test.html", + }, + "name": "vec3_tsp_1vec3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_pts_1vec3_frag.frag" - }, - "name": "vec3_pts_1vec3_frag.test.html", + }, + "name": "vec3_pts_1vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_pts_1vec3_vert.vert", + "vertexShader": "vec3_pts_1vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_pts_1vec3_vert.test.html", + }, + "name": "vec3_pts_1vec3_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_113_to_120.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_113_to_120.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_113_to_120.html 2017-01-13 01:35:46.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/swizzlers_113_to_120.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,106 +46,106 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_st_p_1vec2_1float_frag.frag" - }, - "name": "vec3_st_p_1vec2_1float_frag.test.html", + }, + "name": "vec3_st_p_1vec2_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_st_p_1vec2_1float_vert.vert", + "vertexShader": "vec3_st_p_1vec2_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_st_p_1vec2_1float_vert.test.html", + }, + "name": "vec3_st_p_1vec2_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_sp_t_1vec2_1float_frag.frag" - }, - "name": "vec3_sp_t_1vec2_1float_frag.test.html", + }, + "name": "vec3_sp_t_1vec2_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_sp_t_1vec2_1float_vert.vert", + "vertexShader": "vec3_sp_t_1vec2_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_sp_t_1vec2_1float_vert.test.html", + }, + "name": "vec3_sp_t_1vec2_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_tp_s_1vec2_1float_frag.frag" - }, - "name": "vec3_tp_s_1vec2_1float_frag.test.html", + }, + "name": "vec3_tp_s_1vec2_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_tp_s_1vec2_1float_vert.vert", + "vertexShader": "vec3_tp_s_1vec2_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_tp_s_1vec2_1float_vert.test.html", + }, + "name": "vec3_tp_s_1vec2_1float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_ps_t_1vec2_1float_frag.frag" - }, - "name": "vec3_ps_t_1vec2_1float_frag.test.html", + }, + "name": "vec3_ps_t_1vec2_1float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "vec3_ps_t_1vec2_1float_vert.vert", + "vertexShader": "vec3_ps_t_1vec2_1float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_ps_t_1vec2_1float_vert.test.html", + }, + "name": "vec3_ps_t_1vec2_1float_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_bgr_1vec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_bgr_1vec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_bgr_1vec3_frag.frag 2017-01-13 01:35:46.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_bgr_1vec3_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.rgb; vec3 t = m.bgr; vec4 a = vec4(t.b, t.g, t.r ,al.a); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_br_g_1vec2_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_br_g_1vec2_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_br_g_1vec2_1float_frag.frag 2017-01-13 01:35:47.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_br_g_1vec2_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -34,5 +34,5 @@ float k = m.g; vec2 n = m.br; vec4 a = vec4(n.g, k, n.r, al.a); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_gb_r_1vec2_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_gb_r_1vec2_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_gb_r_1vec2_1float_frag.frag 2017-01-13 01:35:48.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_gb_r_1vec2_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -34,5 +34,5 @@ float k = m.r; vec2 n = m.gb; vec4 a = vec4(k, n.r, n.g, al.a); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_grb_1vec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_grb_1vec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_grb_1vec3_frag.frag 2017-01-13 01:36:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_grb_1vec3_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.rgb; vec3 t = m.grb; vec4 a = vec4(t.g, t.r, t.b ,al.a); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_ps_t_1vec2_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_ps_t_1vec2_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_ps_t_1vec2_1float_frag.frag 2017-01-13 01:36:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_ps_t_1vec2_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -34,5 +34,5 @@ float k = m.t; vec2 n = m.ps; vec4 a = vec4(n.t, k, n.s, al.q); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_pts_1vec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_pts_1vec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_pts_1vec3_frag.frag 2017-01-13 01:36:01.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_pts_1vec3_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.stp; vec3 t = m.pts; vec4 a = vec4(t.p, t.t, t.s ,al.q); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_rb_g_1vec2_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_rb_g_1vec2_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_rb_g_1vec2_1float_frag.frag 2017-01-13 01:36:01.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_rb_g_1vec2_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -34,5 +34,5 @@ float k = m.g; vec2 n = m.rb; vec4 a = vec4(n.r, k, n.g, al.a); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_rg_b_1vec2_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_rg_b_1vec2_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_rg_b_1vec2_1float_frag.frag 2017-01-13 01:36:01.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_rg_b_1vec2_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -34,5 +34,5 @@ float k = m.b; vec2 n = m.rg; vec4 a = vec4(n, k, al.a); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_rgb_1vec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_rgb_1vec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_rgb_1vec3_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_rgb_1vec3_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -32,5 +32,5 @@ vec4 al = color; vec3 m = al.rgb; vec4 a = vec4(m.rgb,al.a); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_sp_t_1vec2_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_sp_t_1vec2_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_sp_t_1vec2_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_sp_t_1vec2_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -34,5 +34,5 @@ float k = m.t; vec2 n = m.sp; vec4 a = vec4(n.s, k, n.t, al.q); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_st_p_1vec2_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_st_p_1vec2_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_st_p_1vec2_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_st_p_1vec2_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -34,5 +34,5 @@ float k = m.p; vec2 n = m.st; vec4 a = vec4(n, k, al.q); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_stp_1vec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_stp_1vec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_stp_1vec3_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_stp_1vec3_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -32,5 +32,5 @@ vec4 al = color; vec3 m = al.stp; vec4 a = vec4(m.stp,al.q); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_tp_s_1vec2_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_tp_s_1vec2_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_tp_s_1vec2_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_tp_s_1vec2_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -34,5 +34,5 @@ float k = m.s; vec2 n = m.tp; vec4 a = vec4(k, n.s, n.t, al.q); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_tsp_1vec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_tsp_1vec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_tsp_1vec3_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_tsp_1vec3_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.stp; vec3 t = m.tsp; vec4 a = vec4(t.t, t.s, t.p ,al.q); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_xy_z_1vec2_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_xy_z_1vec2_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_xy_z_1vec2_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_xy_z_1vec2_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -34,5 +34,5 @@ float k = m.z; vec2 n = m.xy; vec4 a = vec4(n, k, al.w); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_xyz_1vec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_xyz_1vec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_xyz_1vec3_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_xyz_1vec3_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -32,5 +32,5 @@ vec4 al = color; vec3 m = al.xyz; vec4 a = vec4(m.xyz,al.w); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_xz_y_1vec2_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_xz_y_1vec2_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_xz_y_1vec2_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_xz_y_1vec2_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -34,5 +34,5 @@ float k = m.y; vec2 n = m.xz; vec4 a = vec4(n.x, k, n.y, al.w); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_yxz_1vec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_yxz_1vec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_yxz_1vec3_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_yxz_1vec3_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.xyz; vec3 t = m.yxz; vec4 a = vec4(t.y, t.x, t.z ,al.w); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_yz_x_1vec2_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_yz_x_1vec2_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_yz_x_1vec2_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_yz_x_1vec2_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -34,5 +34,5 @@ float k = m.x; vec2 n = m.yz; vec4 a = vec4(k, n.x, n.y, al.w); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_zx_y_1vec2_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_zx_y_1vec2_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_zx_y_1vec2_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_zx_y_1vec2_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -34,5 +34,5 @@ float k = m.y; vec2 n = m.zx; vec4 a = vec4(n.y, k, n.x, al.w); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_zyx_1vec3_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_zyx_1vec3_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_zyx_1vec3_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec3_zyx_1vec3_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.xyz; vec3 t = m.zyx; vec4 a = vec4(t.z, t.y, t.x ,al.w); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_arb_g_1vec3_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_arb_g_1vec3_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_arb_g_1vec3_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_arb_g_1vec3_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.arb; float g = al.g; vec4 a = vec4(m.g, g, m.b, m.r); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_arbg_1vec4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_arbg_1vec4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_arbg_1vec4_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_arbg_1vec4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -32,5 +32,5 @@ vec4 al = color; vec4 m = al.arbg; vec4 a = vec4(m.g, m.a, m.b, m.r); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_ar_bg_2vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_ar_bg_2vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_ar_bg_2vec2_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_ar_bg_2vec2_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec2 m = al.ar; vec2 n = al.bg; vec4 a = vec4(m.g, n.g, n.r, m.r); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_bar_g_1vec3_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_bar_g_1vec3_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_bar_g_1vec3_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_bar_g_1vec3_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.bar; float g = al.g; vec4 a = vec4(m.b, g, m.r, m.g); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_barg_1vec4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_barg_1vec4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_barg_1vec4_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_barg_1vec4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -32,5 +32,5 @@ vec4 al = color; vec4 m = al.barg; vec4 a = vec4(m.b, m.a, m.r, m.g); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_br_ag_2vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_br_ag_2vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_br_ag_2vec2_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_br_ag_2vec2_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec2 m = al.br; vec2 n = al.ag; vec4 a = vec4(m.g, n.g, m.r, n.r); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_gra_b_1vec3_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_gra_b_1vec3_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_gra_b_1vec3_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_gra_b_1vec3_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.gra; float b = al.b; vec4 a = vec4(m.g, m.r, b, m.b); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_grab_1vec4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_grab_1vec4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_grab_1vec4_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_grab_1vec4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -32,5 +32,5 @@ vec4 al = color; vec4 m = al.grab; vec4 a = vec4(m.g, m.r, m.a, m.b); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_gr_ab_2vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_gr_ab_2vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_gr_ab_2vec2_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_gr_ab_2vec2_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec2 m = al.gr; vec2 n = al.ab; vec4 a = vec4(m.g, m.r, n.g, n.r); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_pqs_t_1vec3_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_pqs_t_1vec3_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_pqs_t_1vec3_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_pqs_t_1vec3_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.pqs; float t = al.t; vec4 a = vec4(m.p, t, m.s, m.t); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_pqst_1vec4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_pqst_1vec4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_pqst_1vec4_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_pqst_1vec4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -32,5 +32,5 @@ vec4 al = color; vec4 m = al.pqst; vec4 a = vec4(m.p, m.q, m.s, m.t); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_ps_qt_2vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_ps_qt_2vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_ps_qt_2vec2_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_ps_qt_2vec2_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec2 m = al.ps; vec2 n = al.qt; vec4 a = vec4(m.t, n.t, m.s, n.s); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_qsp_t_1vec3_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_qsp_t_1vec3_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_qsp_t_1vec3_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_qsp_t_1vec3_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.qsp; float t = al.t; vec4 a = vec4(m.t, t, m.p, m.s); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_qspt_1vec4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_qspt_1vec4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_qspt_1vec4_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_qspt_1vec4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -32,5 +32,5 @@ vec4 al = color; vec4 m = al.qspt; vec4 a = vec4(m.t, m.q, m.p, m.s); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_qs_pt_2vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_qs_pt_2vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_qs_pt_2vec2_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_qs_pt_2vec2_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec2 m = al.qs; vec2 n = al.pt; vec4 a = vec4(m.t, n.t, n.s, m.s); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_rgb_a_1vec3_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_rgb_a_1vec3_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_rgb_a_1vec3_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_rgb_a_1vec3_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.rgb; float a = al.a; vec4 b = vec4(m, a); - gl_FragColor = b; + gl_FragColor = b; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_rgba_1vec4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_rgba_1vec4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_rgba_1vec4_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_rgba_1vec4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -31,5 +31,5 @@ { vec4 al = color; vec4 m = al.rgba; - gl_FragColor = m; + gl_FragColor = m; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_rg_ba_2vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_rg_ba_2vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_rg_ba_2vec2_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_rg_ba_2vec2_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec2 m = al.rg; vec2 n = al.ba; vec4 a = vec4(m,n); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_r_g_b_a_4float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_r_g_b_a_4float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_r_g_b_a_4float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_r_g_b_a_4float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -35,5 +35,5 @@ float b = al.b; float a = al.a; vec4 m = vec4(r,g,b,a); - gl_FragColor = m; + gl_FragColor = m; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_stp_q_1vec3_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_stp_q_1vec3_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_stp_q_1vec3_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_stp_q_1vec3_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.stp; float q = al.q; vec4 a = vec4(m, q); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_stpq_1vec4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_stpq_1vec4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_stpq_1vec4_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_stpq_1vec4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -31,5 +31,5 @@ { vec4 al = color; vec4 m = al.stpq; - gl_FragColor = m; + gl_FragColor = m; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_st_pq_2vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_st_pq_2vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_st_pq_2vec2_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_st_pq_2vec2_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec2 m = al.st; vec2 n = al.pq; vec4 a = vec4(m,n); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_s_t_p_q_4float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_s_t_p_q_4float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_s_t_p_q_4float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_s_t_p_q_4float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -35,5 +35,5 @@ float p = al.p; float q = al.q; vec4 m = vec4(s,t,p,q); - gl_FragColor = m; + gl_FragColor = m; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_tsq_p_1vec3_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_tsq_p_1vec3_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_tsq_p_1vec3_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_tsq_p_1vec3_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.tsq; float p = al.p; vec4 a = vec4(m.t, m.s, p, m.p); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_tsqp_1vec4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_tsqp_1vec4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_tsqp_1vec4_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_tsqp_1vec4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -32,5 +32,5 @@ vec4 al = color; vec4 m = al.tsqp; vec4 a = vec4(m.t, m.s, m.q, m.p); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_ts_qp_2vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_ts_qp_2vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_ts_qp_2vec2_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_ts_qp_2vec2_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec2 m = al.ts; vec2 n = al.qp; vec4 a = vec4(m.t, m.s, n.t, n.s); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_wxz_y_1vec3_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_wxz_y_1vec3_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_wxz_y_1vec3_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_wxz_y_1vec3_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.wxz; float y = al.y; vec4 a = vec4(m.y, y, m.z, m.x); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_wxzy_1vec4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_wxzy_1vec4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_wxzy_1vec4_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_wxzy_1vec4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -32,5 +32,5 @@ vec4 al = color; vec4 m = al.wxzy; vec4 a = vec4(m.y, m.w, m.z, m.x); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_wx_zy_2vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_wx_zy_2vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_wx_zy_2vec2_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_wx_zy_2vec2_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec2 m = al.wx; vec2 n = al.zy; vec4 a = vec4(m.y, n.y, n.x, m.x); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_xyz_w_1vec3_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_xyz_w_1vec3_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_xyz_w_1vec3_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_xyz_w_1vec3_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.xyz; float w = al.w; vec4 a = vec4(m, w); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_xyzw_1vec4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_xyzw_1vec4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_xyzw_1vec4_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_xyzw_1vec4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -31,5 +31,5 @@ { vec4 al = color; vec4 m = al.xyzw; - gl_FragColor = m; + gl_FragColor = m; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_xy_zw_2vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_xy_zw_2vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_xy_zw_2vec2_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_xy_zw_2vec2_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec2 m = al.xy; vec2 n = al.zw; vec4 a = vec4(m,n); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_x_y_z_w_4float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_x_y_z_w_4float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_x_y_z_w_4float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_x_y_z_w_4float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -35,5 +35,5 @@ float z = al.z; float w = al.w; vec4 m = vec4(x,y,z,w); - gl_FragColor = m; + gl_FragColor = m; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_yxw_z_1vec3_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_yxw_z_1vec3_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_yxw_z_1vec3_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_yxw_z_1vec3_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.yxw; float z = al.z; vec4 a = vec4(m.y, m.x, z, m.z); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_yxwz_1vec4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_yxwz_1vec4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_yxwz_1vec4_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_yxwz_1vec4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -32,5 +32,5 @@ vec4 al = color; vec4 m = al.yxwz; vec4 a = vec4(m.y, m.x, m.w, m.z); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_yx_wz_2vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_yx_wz_2vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_yx_wz_2vec2_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_yx_wz_2vec2_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec2 m = al.yx; vec2 n = al.wz; vec4 a = vec4(m.y, m.x, n.y, n.x); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_zwx_y_1vec3_1float_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_zwx_y_1vec3_1float_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_zwx_y_1vec3_1float_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_zwx_y_1vec3_1float_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec3 m = al.zwx; float y = al.y; vec4 a = vec4(m.z, y, m.x, m.y); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_zwxy_1vec4_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_zwxy_1vec4_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_zwxy_1vec4_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_zwxy_1vec4_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -32,5 +32,5 @@ vec4 al = color; vec4 m = al.zwxy; vec4 a = vec4(m.z, m.w, m.x, m.y); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_zx_wy_2vec2_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_zx_wy_2vec2_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_zx_wy_2vec2_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/swizzlers/vec4_zx_wy_2vec2_frag.frag 2017-01-16 01:36:28.000000000 +0000 @@ -33,5 +33,5 @@ vec2 m = al.zx; vec2 n = al.wy; vec4 a = vec4(m.y, n.y, m.x, n.x); - gl_FragColor = a; + gl_FragColor = a; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/tan/tan_001_to_006.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/tan/tan_001_to_006.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/tan/tan_001_to_006.html 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/tan/tan_001_to_006.html 2017-01-16 01:36:28.000000000 +0000 @@ -46,80 +46,80 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "tan_float_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "tan_float_frag_xvary.frag" - }, - "name": "tan_float_frag_xvary.test.html", + }, + "name": "tan_float_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "tan_vec2_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "tan_vec2_frag_xvary.frag" - }, - "name": "tan_vec2_frag_xvary.test.html", + }, + "name": "tan_vec2_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "tan_vec3_frag_xvary_ref.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "tan_vec3_frag_xvary.frag" - }, - "name": "tan_vec3_frag_xvary.test.html", + }, + "name": "tan_vec3_frag_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "tan_float_vert_xvary_ref.vert", + "vertexShader": "tan_float_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "tan_float_vert_xvary.vert", + "vertexShader": "tan_float_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "tan_float_vert_xvary.test.html", + }, + "name": "tan_float_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "tan_vec2_vert_xvary_ref.vert", + "vertexShader": "tan_vec2_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "tan_vec2_vert_xvary.vert", + "vertexShader": "tan_vec2_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "tan_vec2_vert_xvary.test.html", + }, + "name": "tan_vec2_vert_xvary.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "tan_vec3_vert_xvary_ref.vert", + "vertexShader": "tan_vec3_vert_xvary_ref.vert", "fragmentShader": "../default/default.frag" - }, - "model": "grid", + }, + "model": "grid", "testProgram": { - "vertexShader": "tan_vec3_vert_xvary.vert", + "vertexShader": "tan_vec3_vert_xvary.vert", "fragmentShader": "../default/default.frag" - }, - "name": "tan_vec3_vert_xvary.test.html", + }, + "name": "tan_vec3_vert_xvary.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec/vec_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec/vec_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec/vec_001_to_008.html 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec/vec_001_to_008.html 2017-01-16 01:36:29.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec2_2float_frag.frag" - }, - "name": "vec2_2float_frag.test.html", + }, + "name": "vec2_2float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec2_2float_vert.vert", + "vertexShader": "vec2_2float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec2_2float_vert.test.html", + }, + "name": "vec2_2float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_ivec4_frag.frag" - }, - "name": "vec4_ivec4_frag.test.html", + }, + "name": "vec4_ivec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec4_ivec4_vert.vert", + "vertexShader": "vec4_ivec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_ivec4_vert.test.html", + }, + "name": "vec4_ivec4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "ivec3_3int_frag.frag" - }, - "name": "ivec3_3int_frag.test.html", + }, + "name": "ivec3_3int_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "ivec3_3int_vert.vert", + "vertexShader": "ivec3_3int_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "ivec3_3int_vert.test.html", + }, + "name": "ivec3_3int_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "bvec4_2int_2float_frag.frag" - }, - "name": "bvec4_2int_2float_frag.test.html", + }, + "name": "bvec4_2int_2float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "bvec4_2int_2float_vert.vert", + "vertexShader": "bvec4_2int_2float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "bvec4_2int_2float_vert.test.html", + }, + "name": "bvec4_2int_2float_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec/vec_009_to_016.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec/vec_009_to_016.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec/vec_009_to_016.html 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec/vec_009_to_016.html 2017-01-16 01:36:29.000000000 +0000 @@ -46,202 +46,202 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec2_vec3_frag.frag" - }, - "name": "vec2_vec3_frag.test.html", + }, + "name": "vec2_vec3_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec2_vec3_vert.vert", + "vertexShader": "vec2_vec3_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec2_vec3_vert.test.html", + }, + "name": "vec2_vec3_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_vec4_frag.frag" - }, - "name": "vec3_vec4_frag.test.html", + }, + "name": "vec3_vec4_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec3_vec4_vert.vert", + "vertexShader": "vec3_vec4_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_vec4_vert.test.html", + }, + "name": "vec3_vec4_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_vec2_float_frag.frag" - }, - "name": "vec3_vec2_float_frag.test.html", + }, + "name": "vec3_vec2_float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec3_vec2_float_vert.vert", + "vertexShader": "vec3_vec2_float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_vec2_float_vert.test.html", + }, + "name": "vec3_vec2_float_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec3_float_vec2_frag.frag" - }, - "name": "vec3_float_vec2_frag.test.html", + }, + "name": "vec3_float_vec2_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec3_float_vec2_vert.vert", + "vertexShader": "vec3_float_vec2_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec3_float_vec2_vert.test.html", + }, + "name": "vec3_float_vec2_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec/vec_017_to_018.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec/vec_017_to_018.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec/vec_017_to_018.html 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec/vec_017_to_018.html 2017-01-16 01:36:29.000000000 +0000 @@ -46,52 +46,52 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "vec4_vec3_float_frag.frag" - }, - "name": "vec4_vec3_float_frag.test.html", + }, + "name": "vec4_vec3_float_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 1.0, - 1.0, - 1.0, + 1.0, + 1.0, + 1.0, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec4_vec3_float_vert.vert", + "vertexShader": "vec4_vec3_float_vert.vert", "fragmentShader": "../default/default.frag" - }, - "name": "vec4_vec3_float_vert.test.html", + }, + "name": "vec4_vec3_float_vert.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3_001_to_008.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3_001_to_008.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3_001_to_008.html 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3_001_to_008.html 2017-01-16 01:36:29.000000000 +0000 @@ -46,284 +46,284 @@ "tests": [ { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "lightPosition": { - "count": 2, - "type": "uniform3fv", + "count": 2, + "type": "uniform3fv", "value": [ - 0.25, - 0.75, - 0.0, - 0.75, - 0.25, + 0.25, + 0.75, + 0.0, + 0.75, + 0.25, 1.0 ] } - }, + }, "fragmentShader": "vec3array_frag.frag" - }, - "name": "vec3array_frag.test.html", + }, + "name": "vec3array_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 0.25, - 0.75, - 0.5, + 0.25, + 0.75, + 0.5, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec3single_vert.vert", + "vertexShader": "vec3single_vert.vert", "uniforms": { "lightPosition": { - "count": 1, - "type": "uniform3fv", + "count": 1, + "type": "uniform3fv", "value": [ - 0.25, - 0.75, + 0.25, + 0.75, 0.5 ] } - }, + }, "fragmentShader": "../default/default.frag" - }, - "name": "vec3single_vert.test.html", + }, + "name": "vec3single_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 0.5, - 0.5, - 0.5, + 0.5, + 0.5, + 0.5, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec3arrayindirect_vert.vert", + "vertexShader": "vec3arrayindirect_vert.vert", "uniforms": { "lightPosition": { - "count": 2, - "type": "uniform3fv", + "count": 2, + "type": "uniform3fv", "value": [ - 0.25, - 0.75, - 0.0, - 0.75, - 0.25, + 0.25, + 0.75, + 0.0, + 0.75, + 0.25, 1.0 ] } - }, + }, "fragmentShader": "../default/default.frag" - }, - "name": "vec3arrayindirect_vert.test.html", + }, + "name": "vec3arrayindirect_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 0.5, - 0.5, - 0.5, + 0.5, + 0.5, + 0.5, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec3arraydirect_vert.vert", + "vertexShader": "vec3arraydirect_vert.vert", "uniforms": { "lightPosition": { - "count": 2, - "type": "uniform3fv", + "count": 2, + "type": "uniform3fv", "value": [ - 0.25, - 0.75, - 0.0, - 0.75, - 0.25, + 0.25, + 0.75, + 0.0, + 0.75, + 0.25, 1.0 ] } - }, + }, "fragmentShader": "../default/default.frag" - }, - "name": "vec3arraydirect_vert.test.html", + }, + "name": "vec3arraydirect_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "fragmentShader": "../default/default.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "vec3array_vert.vert", + "vertexShader": "vec3array_vert.vert", "uniforms": { "lightPosition": { - "count": 2, - "type": "uniform3fv", + "count": 2, + "type": "uniform3fv", "value": [ - 0.25, - 0.75, - 0.0, - 0.75, - 0.25, + 0.25, + 0.75, + 0.0, + 0.75, + 0.25, 1.0 ] } - }, + }, "fragmentShader": "../default/default.frag" - }, - "name": "vec3array_vert.test.html", + }, + "name": "vec3array_vert.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 0.25, - 0.75, - 0.5, + 0.25, + 0.75, + 0.5, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "lightPosition": { - "count": 1, - "type": "uniform3fv", + "count": 1, + "type": "uniform3fv", "value": [ - 0.25, - 0.75, + 0.25, + 0.75, 0.5 ] } - }, + }, "fragmentShader": "vec3single_frag.frag" - }, - "name": "vec3single_frag.test.html", + }, + "name": "vec3single_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 0.5, - 0.5, - 0.5, + 0.5, + 0.5, + 0.5, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "lightPosition": { - "count": 2, - "type": "uniform3fv", + "count": 2, + "type": "uniform3fv", "value": [ - 0.25, - 0.75, - 0.0, - 0.75, - 0.25, + 0.25, + 0.75, + 0.0, + 0.75, + 0.25, 1.0 ] } - }, + }, "fragmentShader": "vec3arrayindirect_frag.frag" - }, - "name": "vec3arrayindirect_frag.test.html", + }, + "name": "vec3arrayindirect_frag.test.html", "pattern": "compare" - }, + }, { "referenceProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "result": { - "count": 1, - "type": "uniform4fv", + "count": 1, + "type": "uniform4fv", "value": [ - 0.5, - 0.5, - 0.5, + 0.5, + 0.5, + 0.5, 1.0 ] } - }, + }, "fragmentShader": "../default/expected.frag" - }, - "model": null, + }, + "model": null, "testProgram": { - "vertexShader": "../default/default.vert", + "vertexShader": "../default/default.vert", "uniforms": { "lightPosition": { - "count": 2, - "type": "uniform3fv", + "count": 2, + "type": "uniform3fv", "value": [ - 0.25, - 0.75, - 0.0, - 0.75, - 0.25, + 0.25, + 0.75, + 0.0, + 0.75, + 0.25, 1.0 ] } - }, + }, "fragmentShader": "vec3arraydirect_frag.frag" - }, - "name": "vec3arraydirect_frag.test.html", + }, + "name": "vec3arraydirect_frag.test.html", "pattern": "compare" } ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3arraydirect_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3arraydirect_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3arraydirect_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3arraydirect_frag.frag 2017-01-16 01:36:29.000000000 +0000 @@ -27,8 +27,8 @@ precision mediump float; #endif // -// vec3arraydirect_frag.frag: Fragment shader solid color -// +// vec3arraydirect_frag.frag: Fragment shader solid color +// // // diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3arraydirect_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3arraydirect_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3arraydirect_vert.vert 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3arraydirect_vert.vert 2017-01-16 01:36:29.000000000 +0000 @@ -26,8 +26,8 @@ attribute vec4 gtf_Vertex; uniform mat4 gtf_ModelViewProjectionMatrix; // -// vec3arraydirect_vert.vert: Vertex shader solid color -// +// vec3arraydirect_vert.vert: Vertex shader solid color +// // // @@ -36,10 +36,10 @@ void main(void) { - + color = vec4(lightPosition[0] + lightPosition[1], 0.0) * 0.5; - + gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; - - + + } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3array_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3array_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3array_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3array_frag.frag 2017-01-16 01:36:29.000000000 +0000 @@ -38,12 +38,12 @@ void main(void) { vec3 v[2]; - + v[1] = vec3(color.r, color.g, color.b); - + v[0] = lightPosition[1]; - + gl_FragColor = vec4(v[1] + v[1], 0.0)/2.0; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3arrayindirect_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3arrayindirect_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3arrayindirect_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3arrayindirect_frag.frag 2017-01-16 01:36:29.000000000 +0000 @@ -27,7 +27,7 @@ precision mediump float; #endif // -// vec3arrayindirect_frag.frag: Fragment shader solid color +// vec3arrayindirect_frag.frag: Fragment shader solid color // The vec3 values are determined at runtime. // // diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3arrayindirect_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3arrayindirect_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3arrayindirect_vert.vert 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3arrayindirect_vert.vert 2017-01-16 01:36:29.000000000 +0000 @@ -26,7 +26,7 @@ attribute vec4 gtf_Vertex; uniform mat4 gtf_ModelViewProjectionMatrix; // -// vec3arrayindirect_vert.vert: Vertex shader solid color +// vec3arrayindirect_vert.vert: Vertex shader solid color // The vec3 values are determined at runtime. // // @@ -44,8 +44,8 @@ } color /= 2.0; - + gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; - - + + } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3array_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3array_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3array_vert.vert 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3array_vert.vert 2017-01-16 01:36:29.000000000 +0000 @@ -37,11 +37,11 @@ void main(void) { vec3 v[2]; - + v[1] = vec3(gtf_Color.r, gtf_Color.g, gtf_Color.b); v[0] = lightPosition[1]; - + color = vec4(v[1] + v[1], 0.0)/2.0; gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3single_frag.frag firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3single_frag.frag --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3single_frag.frag 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3single_frag.frag 2017-01-16 01:36:29.000000000 +0000 @@ -27,7 +27,7 @@ precision mediump float; #endif // -// vec3Matrix_frag.frag: Fragment shader solid color +// vec3Matrix_frag.frag: Fragment shader solid color // // // diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3single_vert.vert firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3single_vert.vert --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3single_vert.vert 2017-01-13 01:36:02.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/GL/vec3/vec3single_vert.vert 2017-01-16 01:36:29.000000000 +0000 @@ -26,7 +26,7 @@ attribute vec4 gtf_Vertex; uniform mat4 gtf_ModelViewProjectionMatrix; // -// vec3Matrix_vert.vert: Vertex shader solid color +// vec3Matrix_vert.vert: Vertex shader solid color // // // @@ -40,6 +40,6 @@ color = vec4(lightPosition, 0.0); gl_Position = gtf_ModelViewProjectionMatrix * gtf_Vertex; - - + + } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/ogles-utils.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/ogles-utils.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/ogles/ogles-utils.js 2017-01-13 01:36:03.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/ogles/ogles-utils.js 2017-01-16 01:37:09.000000000 +0000 @@ -512,7 +512,7 @@ var min_required = programInfo.builtin_uniforms.min_required; if (num_builtins_found < min_required) { testFailed("only found " + num_builtins_found + " of " + min_required + - " required built-in uniforms: " + valid_values); + " required built-in uniforms: " + valid_values); } } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/programs/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/programs/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/programs/00_test_list.txt 2017-01-13 01:36:03.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/programs/00_test_list.txt 2017-01-16 01:37:09.000000000 +0000 @@ -6,5 +6,6 @@ gl-getshadersource.html gl-shader-test.html invalid-UTF-16.html +--min-version 1.0.4 program-infolog.html program-test.html --min-version 1.0.2 use-program-crash-with-discard-in-fragment-shader.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/programs/program-infolog.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/programs/program-infolog.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/programs/program-infolog.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/programs/program-infolog.html 2017-01-16 01:37:09.000000000 +0000 @@ -0,0 +1,83 @@ + + + + + + +WebGL Program Conformance Tests + + + + + +
    +
    + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/renderbuffers/feedback-loop.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/renderbuffers/feedback-loop.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/renderbuffers/feedback-loop.html 2017-01-13 01:36:03.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/renderbuffers/feedback-loop.html 2017-01-16 01:37:09.000000000 +0000 @@ -53,7 +53,7 @@ varying vec2 v_texCoord; uniform sampler2D u_texture; void main() { - // Shader swizzles color channels so we can tell if the draw succeeded. + // Shader swizzles color channels so we can tell if the draw succeeded. gl_FragColor = texture2D(u_texture, v_texCoord).gbra; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/renderbuffers/framebuffer-object-attachment.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/renderbuffers/framebuffer-object-attachment.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/renderbuffers/framebuffer-object-attachment.html 2017-01-13 01:36:03.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/renderbuffers/framebuffer-object-attachment.html 2017-01-16 01:37:09.000000000 +0000 @@ -266,7 +266,7 @@ var fbo = gl.createFramebuffer(); gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); - + var width = 64; var height = 64; @@ -290,7 +290,7 @@ checkFramebufferForAllowedStatuses(ALLOW_COMPLETE); checkBufferBits(gl.DEPTH_ATTACHMENT); gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, null); - + // 3. COLOR_ATTACHMENT0 = RGBA/UNSIGNED_BYTE texture + DEPTH_STENCIL_ATTACHMENT = DEPTH_STENCIL renderbuffer gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height); gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, gl.RENDERBUFFER, renderbuffer); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/rendering/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/rendering/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/rendering/00_test_list.txt 2017-01-13 01:36:03.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/rendering/00_test_list.txt 2017-01-16 01:37:09.000000000 +0000 @@ -1,3 +1,4 @@ +--min-version 1.0.4 --max-version 1.9.9 clipping-wide-points.html --min-version 1.0.2 culling.html --min-version 1.0.4 default-texture-draw-bug.html draw-arrays-out-of-bounds.html @@ -16,6 +17,7 @@ more-than-65536-indices.html multisample-corruption.html --min-version 1.0.3 negative-one-index.html +out-of-bounds-index-buffers.html --min-version 1.0.3 point-no-attributes.html point-size.html --min-version 1.0.4 point-specific-shader-variables.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/rendering/clipping-wide-points.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/rendering/clipping-wide-points.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/rendering/clipping-wide-points.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/rendering/clipping-wide-points.html 2017-01-16 01:37:09.000000000 +0000 @@ -0,0 +1,47 @@ + + + + + +Clipping wide points test + + + + + + + +
    +
    + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/rendering/default-texture-draw-bug.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/rendering/default-texture-draw-bug.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/rendering/default-texture-draw-bug.html 2017-01-13 01:36:03.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/rendering/default-texture-draw-bug.html 2017-01-16 01:37:09.000000000 +0000 @@ -62,7 +62,7 @@ debug("Test that drawing with a texture when no textures have been bound gives the expected black output"); canvas.width = 50; canvas.height = 50; gl.viewport(0, 0, canvas.width, canvas.height); - + // Set up a program that will draw with a texture var program = wtu.setupNoTexCoordTextureProgram(gl); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/rendering/gl-viewport-test-2.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/rendering/gl-viewport-test-2.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/rendering/gl-viewport-test-2.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/rendering/gl-viewport-test-2.html 2017-01-16 01:37:10.000000000 +0000 @@ -0,0 +1,76 @@ + + + + + + +WebGL Viewport Test + + + + + + +
    +
    + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/rendering/line-loop-tri-fan.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/rendering/line-loop-tri-fan.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/rendering/line-loop-tri-fan.html 2017-01-13 01:36:03.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/rendering/line-loop-tri-fan.html 2017-01-16 01:37:10.000000000 +0000 @@ -108,7 +108,7 @@ testPassed("Triangle fan was drawn correctly."); } else { testFailed("Triangle fan was drawn incorrectly."); - } + } } function runTest() { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/rendering/out-of-bounds-index-buffers.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/rendering/out-of-bounds-index-buffers.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/rendering/out-of-bounds-index-buffers.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/rendering/out-of-bounds-index-buffers.html 2017-01-16 01:37:10.000000000 +0000 @@ -0,0 +1,156 @@ + + + + + + + + +WebGL Out-of-Bounds Index Buffer Conformance Test + + + +
    +
    + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/rendering/point-size.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/rendering/point-size.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/rendering/point-size.html 2017-01-13 01:36:03.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/rendering/point-size.html 2017-01-16 01:37:10.000000000 +0000 @@ -105,7 +105,7 @@ gl.uniform1f(locPointSize, 1.0); gl.drawArrays(gl.POINTS, 0, vertices.length / 3); - + shouldBe('gl.getError()', 'gl.NO_ERROR'); for (var y = 0; y < 2; ++y) { @@ -133,7 +133,7 @@ shouldBe('gl.getError()', 'gl.NO_ERROR'); test(program1); -// Under some versions of ANGLE point sprite shader programs were +// Under some versions of ANGLE point sprite shader programs were // incorrectly reloaded from cache. Rebuilding the shader program and // repeating the test simulates the conditions that caused it to fail debug(''); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/rendering/polygon-offset.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/rendering/polygon-offset.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/rendering/polygon-offset.html 2017-01-13 01:36:03.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/rendering/polygon-offset.html 2017-01-16 01:37:10.000000000 +0000 @@ -111,7 +111,7 @@ draw(gl, slantedSquare, colLoc, blue); draw(gl, slantedSquare, colLoc, green); check(gl); - + debug('Polygon offset units should have no effect when fill is off'); clear(gl, red, 1.0); draw(gl, slantedSquare, colLoc, blue); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/state/diffs.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/state/diffs.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/state/diffs.txt 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/state/diffs.txt 2017-01-16 01:37:10.000000000 +0000 @@ -0,0 +1,69 @@ +4c4 +< ** Copyright (c) 2012 The Khronos Group Inc. +--- +> ** Copyright (c) 2015 The Khronos Group Inc. +34c34 +< +--- +> +45,62c45 +< function sizeInBytes(type) { +< switch (type) { +< case gl.BYTE: +< case gl.UNSIGNED_BYTE: +< return 1; +< case gl.SHORT: +< case gl.UNSIGNED_SHORT: +< return 2; +< case gl.INT: +< case gl.UNSIGNED_INT: +< case gl.FLOAT: +< return 4; +< default: +< throw "unknown type"; +< } +< } +< +< var gl = wtu.create3DContext(); +--- +> var gl = wtu.create3DContext(null, null, 2); +191a175,178 +> var validArray = new Array(gl.COLOR_ATTACHMENT0, gl.DEPTH_ATTACHMENT, gl.STENCIL_ATTACHMENT, gl.DEPTH_STENCIL_ATTACHMENT); +> for (var ii = 1; ii < gl.getParameter(gl.MAX_COLOR_ATTACHMENTS); ++ii) { +> validArray[validArray.length] = gl.COLOR_ATTACHMENT0 + ii; +> } +195,199c182 +< [ gl.COLOR_ATTACHMENT0, +< gl.DEPTH_ATTACHMENT, +< gl.STENCIL_ATTACHMENT, +< gl.DEPTH_STENCIL_ATTACHMENT +< ], +--- +> validArray, +257a241 +> gl.RENDERBUFFER_SAMPLES, +325c309 +< var boolProgram = wtu.loadProgramFromFile(gl, "../resources/boolUniformShader.vert", "../resources/noopUniformShader.frag"); +--- +> var boolProgram = wtu.loadProgramFromFile(gl, "../../conformance/resources/boolUniformShader.vert", "../../conformance/resources/noopUniformShader.frag"); +342c326 +< var intProgram = wtu.loadProgramFromFile(gl, "../resources/intUniformShader.vert", "../resources/noopUniformShader.frag"); +--- +> var intProgram = wtu.loadProgramFromFile(gl, "../../conformance/resources/intUniformShader.vert", "../../conformance/resources/noopUniformShader.frag"); +359c343 +< var floatProgram = wtu.loadProgramFromFile(gl, "../resources/floatUniformShader.vert", "../resources/noopUniformShader.frag"); +--- +> var floatProgram = wtu.loadProgramFromFile(gl, "../../conformance/resources/floatUniformShader.vert", "../../conformance/resources/noopUniformShader.frag"); +376c360 +< var samplerProgram = wtu.loadProgramFromFile(gl, "../resources/noopUniformShader.vert", "../resources/samplerUniformShader.frag"); +--- +> var samplerProgram = wtu.loadProgramFromFile(gl, "../../conformance/resources/noopUniformShader.vert", "../../conformance/resources/samplerUniformShader.frag"); +387c371 +< var matProgram = wtu.loadProgramFromFile(gl, "../resources/matUniformShader.vert", "../resources/noopUniformShader.frag"); +--- +> var matProgram = wtu.loadProgramFromFile(gl, "../../conformance/resources/matUniformShader.vert", "../../conformance/resources/noopUniformShader.frag"); +438c422,423 +< gl.CURRENT_VERTEX_ATTRIB +--- +> gl.CURRENT_VERTEX_ATTRIB, +> gl.VERTEX_ATTRIB_ARRAY_DIVISOR diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/state/gl-enable-enum-test.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/state/gl-enable-enum-test.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/state/gl-enable-enum-test.html 2017-01-13 01:36:03.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/state/gl-enable-enum-test.html 2017-01-16 01:37:10.000000000 +0000 @@ -143,9 +143,9 @@ gl.enable(gl[name]); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "gl.enable must succeed when passed gl." + name ); - shouldBe('gl.isEnabled(gl.' + name + ')', 'true'); - gl.disable(gl[name]); - shouldBe('gl.isEnabled(gl.' + name + ')', 'false'); + shouldBe('gl.isEnabled(gl.' + name + ')', 'true'); + gl.disable(gl[name]); + shouldBe('gl.isEnabled(gl.' + name + ')', 'false'); } wtu.glErrorShouldBe(gl, gl.NO_ERROR, "there should be no errors"); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/state/gl-get-calls.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/state/gl-get-calls.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/state/gl-get-calls.html 2017-01-13 01:36:03.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/state/gl-get-calls.html 2017-01-16 01:37:10.000000000 +0000 @@ -117,13 +117,13 @@ // WebGL 1.0.2 - 5.14.3 types / ES 2.0.25 - 6.2 State tables - 6.18 page 152 shouldBeType('context.getParameter(context.SUBPIXEL_BITS)', 'Number'); shouldBeGreaterThanOrEqual('context.getParameter(context.SUBPIXEL_BITS)', '4'); - + shouldBeType('context.getParameter(context.SAMPLE_BUFFERS)', 'Number'); shouldBeGreaterThanOrEqual('context.getParameter(context.SAMPLE_BUFFERS)', '0'); - + shouldBeType('context.getParameter(context.SAMPLES)', 'Number'); shouldBeGreaterThanOrEqual('context.getParameter(context.SAMPLES)', '0'); - + shouldBeType('context.getParameter(context.DEPTH_BITS)', 'Number'); shouldBeGreaterThanOrEqual('context.getParameter(context.DEPTH_BITS)', '0'); shouldBeType('context.getParameter(context.RED_BITS)', 'Number'); @@ -135,7 +135,7 @@ shouldBeType('context.getParameter(context.ALPHA_BITS)', 'Number'); shouldBeGreaterThanOrEqual('context.getParameter(context.ALPHA_BITS)', '0'); shouldBeType('context.getParameter(context.STENCIL_BITS)', 'Number'); - + var stencilBits = context.getParameter(context.STENCIL_BITS); minimumRequiredStencilMask = (1 << stencilBits) - 1; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/00_test_list.txt 2017-01-13 01:36:03.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/00_test_list.txt 2017-01-16 01:37:10.000000000 +0000 @@ -1,13 +1,14 @@ misc/00_test_list.txt -//canvas/00_test_list.txt -//image/00_test_list.txt -//image_data/00_test_list.txt -//--min-version 1.0.4 svg_image/00_test_list.txt +canvas/00_test_list.txt +--min-version 1.0.4 canvas_sub_rectangle/00_test_list.txt +image/00_test_list.txt +image_data/00_test_list.txt +--min-version 1.0.4 svg_image/00_test_list.txt video/00_test_list.txt -//webgl_canvas/00_test_list.txt -//image_bitmap_from_image_data/00_test_list.txt -//image_bitmap_from_image/00_test_list.txt -//image_bitmap_from_video/00_test_list.txt -//image_bitmap_from_canvas/00_test_list.txt -//image_bitmap_from_blob/00_test_list.txt -//image_bitmap_from_image_bitmap/00_test_list.txt +webgl_canvas/00_test_list.txt +// image_bitmap_from_image_data/00_test_list.txt +// image_bitmap_from_image/00_test_list.txt +// image_bitmap_from_video/00_test_list.txt +// image_bitmap_from_canvas/00_test_list.txt +// image_bitmap_from_blob/00_test_list.txt +// image_bitmap_from_image_bitmap/00_test_list.txt diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/00_test_list.txt 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/00_test_list.txt 2017-01-16 01:37:10.000000000 +0000 @@ -0,0 +1,5 @@ +tex-2d-rgb-rgb-unsigned_byte.html +tex-2d-rgb-rgb-unsigned_short_5_6_5.html +tex-2d-rgba-rgba-unsigned_byte.html +tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html +tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_byte.html 2017-01-16 01:37:10.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:37:10.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:37:10.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgb-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgb-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgb-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgb-rgb-unsigned_byte.html 2017-01-16 01:37:10.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgb-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgb-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgb-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgb-rgb-unsigned_short_5_6_5.html 2017-01-16 01:37:10.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/misc/mipmap-fbo.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/misc/mipmap-fbo.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/misc/mipmap-fbo.html 2017-01-13 01:36:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/misc/mipmap-fbo.html 2017-01-16 01:37:10.000000000 +0000 @@ -54,20 +54,20 @@ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 32, 32, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); gl.bindTexture(gl.TEXTURE_2D, null); - + // setup framebuffer // var fbo = gl.createFramebuffer(); gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0); gl.bindFramebuffer(gl.FRAMEBUFFER, null); - + // fill the framebuffer // gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); gl.viewport(0, 0, 32, 32); gl.clearColor(1, 0, 1, 1); gl.clear(gl.COLOR_BUFFER_BIT); gl.bindFramebuffer(gl.FRAMEBUFFER, null); - + // generate mipmap // gl.bindTexture(gl.TEXTURE_2D, texture); gl.generateMipmap(gl.TEXTURE_2D); @@ -75,7 +75,7 @@ var program = wtu.setupTexturedQuad(gl); gl.viewport(0, 0, gl.canvas.width, gl.canvas.height); gl.drawArrays(gl.TRIANGLES, 0, 6); - + // readback // wtu.checkCanvas(gl, [255, 0, 255, 255]); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/misc/tex-sub-image-2d-bad-args.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/misc/tex-sub-image-2d-bad-args.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/misc/tex-sub-image-2d-bad-args.html 2017-01-13 01:36:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/misc/tex-sub-image-2d-bad-args.html 2017-01-16 01:37:11.000000000 +0000 @@ -66,15 +66,10 @@ wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "negative y"); gl.texSubImage2D(gl.TEXTURE_2D, -1, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, c); wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "negative level"); - -var text = "Should throw with no image data."; -try { - gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); - testFailed(text); -} catch(e) { - testPassed(text); -} -wtu.glErrorShouldBe(gl, gl.NO_ERROR, "no image data"); +shouldThrow("gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, null)"); +wtu.glErrorShouldBe(gl, gl.NO_ERROR); +gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); +wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "null pixels"); // GL_INVALID_VALUE may be generated if level is greater than log 2 max, where max is the returned value of GL_MAX_TEXTURE_SIZE. // GL_INVALID_OPERATION is generated if the texture array has not been defined by a previous glTexImage2D or glCopyTexImage2D operation whose internalformat matches the format of glTexSubImage2D. @@ -105,15 +100,15 @@ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGB, gl.UNSIGNED_SHORT_5_6_5, c); wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "type not same as original RGB"); } -gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_SHORT_4_4_4_4, c); -wtu.glErrorShouldBe(gl, gl.NO_ERROR, "make texture RGBA 4_4_4_4"); -gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_SHORT_4_4_4_4, c); -wtu.glErrorShouldBe(gl, gl.NO_ERROR, "format same as original RGBA 4_4_4_4"); +gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, c); +wtu.glErrorShouldBe(gl, gl.NO_ERROR, "make texture RGBA UNSIGNED_BYTE"); +gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, c); +wtu.glErrorShouldBe(gl, gl.NO_ERROR, "format same as original"); gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGB, gl.UNSIGNED_BYTE, c); -wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "format not same as original RGBA 4_4_4_4"); +wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "format not same as original"); if (contextVersion < 2) { - gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, c); - wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "type not same as original RGBA 4_4_4_4"); + gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_SHORT_4_4_4_4, c); + wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "type not same as original"); } // Large canvas will trigger GPU-to-GPU fast path in chrome, @@ -122,23 +117,23 @@ largeCanvas.width = 257; largeCanvas.height = 257; var largeCanvasContext = largeCanvas.getContext("2d"); -gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_SHORT_4_4_4_4, largeCanvas); -wtu.glErrorShouldBe(gl, gl.NO_ERROR, "make texture RGBA 4_4_4_4"); -gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_SHORT_4_4_4_4, c); -wtu.glErrorShouldBe(gl, gl.NO_ERROR, "format same as original RGBA 4_4_4_4"); +gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, largeCanvas); +wtu.glErrorShouldBe(gl, gl.NO_ERROR, "make texture RGBA UNSIGNED_BYTE"); +gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, c); +wtu.glErrorShouldBe(gl, gl.NO_ERROR, "format same as original"); gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGB, gl.UNSIGNED_BYTE, c); -wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "format not same as original RGBA 4_4_4_4"); +wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "format not same as original"); if (contextVersion < 2) { - gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, c); - wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "type not same as original RGBA 4_4_4_4"); + gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_SHORT_4_4_4_4, c); + wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "type not same as original"); } -gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_SHORT_4_4_4_4, largeCanvas); -wtu.glErrorShouldBe(gl, gl.NO_ERROR, "format same as original RGBA 4_4_4_4"); +gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, largeCanvas); +wtu.glErrorShouldBe(gl, gl.NO_ERROR, "format same as original"); gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGB, gl.UNSIGNED_BYTE, largeCanvas); -wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "format not same as original RGBA 4_4_4_4"); +wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "format not same as original"); if (contextVersion < 2) { - gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, largeCanvas); - wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "type not same as original RGBA 4_4_4_4"); + gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_SHORT_4_4_4_4, largeCanvas); + wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "type not same as original"); } var maxCubeMapTextureSize = gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/misc/texture-size.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/misc/texture-size.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/misc/texture-size.html 2017-01-13 01:36:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/misc/texture-size.html 2017-01-16 01:37:11.000000000 +0000 @@ -203,7 +203,7 @@ pixels.set(pixelRow, off); } } - + var targets = opt_cubemap ? [ gl.TEXTURE_CUBE_MAP_POSITIVE_X, gl.TEXTURE_CUBE_MAP_NEGATIVE_X, diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/misc/texture-upload-size.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/misc/texture-upload-size.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/textures/misc/texture-upload-size.html 2017-01-13 01:36:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/textures/misc/texture-upload-size.html 2017-01-16 01:37:11.000000000 +0000 @@ -118,6 +118,7 @@ {type: "img", isSVG: false, src: "../../../resources/red-green.png"}, {type: "img", isSVG: true, src: "../../../resources/red-green.svg"}, {type: "video", src: "../../../resources/red-green.mp4", videoType: 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"'}, + {type: "video", src: "../../../resources/red-green.webmvp9.webm", videoType: 'video/webm; codecs="vp9"'}, {type: "video", src: "../../../resources/red-green.webmvp8.webm", videoType: 'video/webm; codecs="vp8, vorbis"'}, {type: "video", src: "../../../resources/red-green.theora.ogv", videoType: 'video/ogg; codecs="theora, vorbis"'}, ]; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/typedarrays/array-large-array-tests.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/typedarrays/array-large-array-tests.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/typedarrays/array-large-array-tests.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/typedarrays/array-large-array-tests.html 2017-01-16 01:37:11.000000000 +0000 @@ -88,7 +88,7 @@ var type = window[testCase.name]; var name = testCase.name; testConstructionOfHugeArray(type, name, testCase.elementSizeInBytes); - } + } } runTests(); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/typedarrays/array-unit-tests.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/typedarrays/array-unit-tests.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/typedarrays/array-unit-tests.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/typedarrays/array-unit-tests.html 2017-01-16 01:37:11.000000000 +0000 @@ -641,21 +641,27 @@ var array; try { array = new type(null); - testFailed("Construction of " + name + " with null buffer should throw exception"); + assertEq("Length of " + name + " constructed with null", 0, array.length); + testPassed("Construction of " + name + " with null produced a " + name + " of length 0"); } catch (e) { - testPassed("Construction of " + name + " with null buffer threw exception"); + // This used to be correct, but TC39 has changed the behavior of these constructors. + testPassed("Construction of " + name + " with null threw exception"); } try { - array = new type(null, 0, 0); - testFailed("Construction of " + name + " with (null buffer, 0) should throw exception"); + array = new type(null, 0); + assertEq("Length of " + name + " constructed with null", 0, array.length); + testPassed("Construction of " + name + " with null produced a " + name + " of length 0"); } catch (e) { - testPassed("Construction of " + name + " with (null buffer, 0) threw exception"); + // This used to be correct, but TC39 has changed the behavior of these constructors. + testPassed("Construction of " + name + " with (null, 0) threw exception"); } try { array = new type(null, 0, 0); - testFailed("Construction of " + name + " with (null buffer, 0, 0) should throw exception"); + assertEq("Length of " + name + " constructed with null", 0, array.length); + testPassed("Construction of " + name + " with null produced a " + name + " of length 0"); } catch (e) { - testPassed("Construction of " + name + " with (null buffer, 0, 0) threw exception"); + // This used to be correct, but TC39 has changed the behavior of these constructors. + testPassed("Construction of " + name + " with (null, 0, 0) threw exception"); } } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/typedarrays/data-view-test.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/typedarrays/data-view-test.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/typedarrays/data-view-test.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/typedarrays/data-view-test.html 2017-01-16 01:37:11.000000000 +0000 @@ -99,6 +99,88 @@ shouldThrow(expr); } +function checkGetWithoutArgument(func, expected) +{ + var threw = false; + var value; + try { + value = view["get" + func](); + } catch (e) { + threw = true; + } + + if (threw) { + // This used to be correct, but TC39 has changed the behavior of these methods. + testPassed("view.get" + func + " with no arguments throws."); + } else { + if (value === expected) { + testPassed("view.get" + func + " treats missing argument as 0."); + } else { + testFailed("view.get" + func + " accepts a missing argument but does not cast it to 0."); + } + } +} + +function checkSetWithoutSecondArgument(func, index, isFloat) +{ + var expected = isFloat ? NaN : 0; + var threw = false; + var value; + try { + value = view["set" + func](index); + } catch (e) { + threw = true; + } + + if (threw) { + // This used to be correct, but TC39 has changed the behavior of these methods. + testPassed("view.set" + func + " with missing second argument throws."); + } else { + var stored = view["get" + func](index); + if (value === undefined && isFloat ? isNaN(stored) : stored === expected) { + testPassed("view.set" + func + " treats missing second argument as " + expected + "."); + } else { + testFailed("view.set" + func + " accepts a missing second argument but does not cast it to " + expected + "."); + } + } +} + +function checkSetWithoutArguments(func, isFloat) +{ + var expected = isFloat ? NaN : 0; + var threw = false; + var value; + try { + value = view["set" + func](); + } catch (e) { + threw = true; + } + + if (threw) { + // This used to be correct, but TC39 has changed the behavior of these methods. + testPassed("view.set" + func + " with no arguments throws."); + } else { + var stored = view["get" + func](0); + if (value === undefined && isFloat ? isNaN(stored) : stored === expected) { + testPassed("view.set" + func + " treats missing first argument as 0."); + } else { + testFailed("view.set" + func + " accepts a missing first argument but does not cast it to 0."); + } + } +} + +function testMissingArguments(func, constructor, isFloat) +{ + view = new DataView((new constructor(3)).buffer); + view["set" + func](0, 1); + view["set" + func](getElementSize(func), 2); + checkGetWithoutArgument(func, 1); + checkSetWithoutSecondArgument(func, getElementSize(func), isFloat); + view = new DataView((new constructor(3)).buffer); + view["set" + func](0, 1); + checkSetWithoutArguments(func, isFloat); +} + function test(isTestingGet, func, index, value, littleEndian) { if (isTestingGet) @@ -196,7 +278,7 @@ test(isTestingGet, func, 7, expected, true); createDataView(array, 10, true, start); test(isTestingGet, func, 10, expected, true); - + // Big endian. createDataView(array, 0, false); test(isTestingGet, func, 0, expected, false); @@ -304,18 +386,6 @@ debug(""); debug("Test for get methods that read from negative index"); runNegativeIndexTests(true); - - debug(""); - debug("Test for wrong arguments passed to get methods"); - view = new DataView((new Uint8Array([1, 2])).buffer); - shouldThrow("view.getInt8()"); - shouldThrow("view.getUint8()"); - shouldThrow("view.getInt16()"); - shouldThrow("view.getUint16()"); - shouldThrow("view.getInt32()"); - shouldThrow("view.getUint32()"); - shouldThrow("view.getFloat32()"); - shouldThrow("view.getFloat64()"); } function runSetTests() @@ -333,26 +403,20 @@ debug(""); debug("Test for set methods that write to negative index"); runNegativeIndexTests(false); +} +function runMissingArgumentTests() +{ debug(""); - debug("Test for wrong arguments passed to set methods"); - view = new DataView((new Uint8Array([1, 2])).buffer); - shouldThrow("view.setInt8()"); - shouldThrow("view.setUint8()"); - shouldThrow("view.setInt16()"); - shouldThrow("view.setUint16()"); - shouldThrow("view.setInt32()"); - shouldThrow("view.setUint32()"); - shouldThrow("view.setFloat32()"); - shouldThrow("view.setFloat64()"); - shouldThrow("view.setInt8(1)"); - shouldThrow("view.setUint8(1)"); - shouldThrow("view.setInt16(1)"); - shouldThrow("view.setUint16(1)"); - shouldThrow("view.setInt32(1)"); - shouldThrow("view.setUint32(1)"); - shouldThrow("view.setFloat32(1)"); - shouldThrow("view.setFloat64(1)"); + debug("Test for get and set methods missing arguments"); + testMissingArguments("Int8", Int8Array); + testMissingArguments("Uint8", Uint8Array); + testMissingArguments("Int16", Int16Array); + testMissingArguments("Uint16", Uint16Array); + testMissingArguments("Int32", Int32Array); + testMissingArguments("Uint32", Uint32Array); + testMissingArguments("Float32", Float32Array, true); + testMissingArguments("Float64", Float64Array, true); } function runIndexingTests() @@ -368,6 +432,7 @@ runConstructorTests(); runGetTests(); runSetTests(); +runMissingArgumentTests(); runIndexingTests(); var successfullyParsed = true; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/uniforms/gl-uniform-arrays.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/uniforms/gl-uniform-arrays.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/uniforms/gl-uniform-arrays.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/uniforms/gl-uniform-arrays.html 2017-01-16 01:37:11.000000000 +0000 @@ -430,14 +430,14 @@ // Ensure that requesting an array uniform past MaxInt32PlusOne returns no uniform var nameMaxInt32PlusOne = test.arrayName + "[" + (test.usedUniformVector + MaxInt32PlusOne) + "]"; - assertMsg(gl.getUniformLocation(program, nameMaxInt32PlusOne) === null, + assertMsg(gl.getUniformLocation(program, nameMaxInt32PlusOne) === null, "Requesting " + nameMaxInt32PlusOne + " uniform should return a null uniform location"); // Set just the used uniform var name = test.arrayName + "[" + test.usedUniformVector + "]"; var uniformLocation = gl.getUniformLocation(program, name); gl.uniform4fv(uniformLocation, test.color); - wtu.setupIndexedQuad(gl, 1, positionLoc); + wtu.setupIndexedQuad(gl, 1); wtu.clearAndDrawIndexedQuad(gl, 1); wtu.checkCanvas(gl, [0, 255, 0, 255], "should be green"); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/uniforms/out-of-bounds-uniform-array-access.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/uniforms/out-of-bounds-uniform-array-access.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance/uniforms/out-of-bounds-uniform-array-access.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance/uniforms/out-of-bounds-uniform-array-access.html 2017-01-16 01:37:11.000000000 +0000 @@ -120,8 +120,8 @@ return true; for (var ii = 0; ii < knownColors.length; ii += 4) { if (withinEpsilon(r / 255.0, knownColors[ii + 0]) && - withinEpsilon(g / 255.0, knownColors[ii + 1]) && - withinEpsilon(b / 255.0, knownColors[ii + 2])) + withinEpsilon(g / 255.0, knownColors[ii + 1]) && + withinEpsilon(b / 255.0, knownColors[ii + 2])) return true; } return false; @@ -139,22 +139,22 @@ gl.uniform1f(lineWidthLoc, lineWidth); gl.uniform1i(elemMultLoc, elemMult); gl.drawArrays(gl.POINTS, 0, gridRes * gridRes); - + // Read back gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels); // Verify for (var y = 0; y < height; ++y) { for (var x = 0; x < width; ++x) { - if (!isKnownColor(pixels[4 * (width * y + x) + 0], - pixels[4 * (width * y + x) + 1], - pixels[4 * (width * y + x) + 2])) { + if (!isKnownColor(pixels[4 * (width * y + x) + 0], + pixels[4 * (width * y + x) + 1], + pixels[4 * (width * y + x) + 2])) { ok = false; if (firstFailingPixel == null) { - firstFailingPixel = [x, y]; - firstFailingValue = [pixels[4 * (width * y + x) + 0], - pixels[4 * (width * y + x) + 1], - pixels[4 * (width * y + x) + 2]]; + firstFailingPixel = [x, y]; + firstFailingValue = [pixels[4 * (width * y + x) + 0], + pixels[4 * (width * y + x) + 1], + pixels[4 * (width * y + x) + 2]]; } } } @@ -164,14 +164,14 @@ lineWidth -= 2540; if (ok) { testPassed("Good rendering results for lineWidths " + - startingLineWidth + "..." + endingLineWidth + - " at elemMult=" + elemMult); + startingLineWidth + "..." + endingLineWidth + + " at elemMult=" + elemMult); } else { testFailed("for lineWidth=" + lineWidth + ", elemMult=" + elemMult + ": first failing pixel (" + firstFailingPixel[0] + ", " + firstFailingPixel[1] + ") was (" + - firstFailingValue[0] + ", " + - firstFailingValue[1] + ", " + - firstFailingValue[2] + "), should be (0, 0, 0) or one of known colors"); + firstFailingValue[0] + ", " + + firstFailingValue[1] + ", " + + firstFailingValue[2] + "), should be (0, 0, 0) or one of known colors"); } elemMult += 73; setTimeout(runOneIteration, 0); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/00_test_list.txt 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/00_test_list.txt 2017-01-16 01:37:11.000000000 +0000 @@ -1,7 +1,9 @@ bound-buffer-size-change-test.html buffer-copying-contents.html buffer-copying-restrictions.html +buffer-data-and-buffer-sub-data-sub-source.html buffer-type-restrictions.html buffer-overflow-test.html -getBufferSubData.html +get-buffer-sub-data.html +one-large-uniform-buffer.html uniform-buffers.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/buffer-data-and-buffer-sub-data-sub-source.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/buffer-data-and-buffer-sub-data-sub-source.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/buffer-data-and-buffer-sub-data-sub-source.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/buffer-data-and-buffer-sub-data-sub-source.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,204 @@ + + + + + + + + + + + +
    +
    + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/buffer-type-restrictions.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/buffer-type-restrictions.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/buffer-type-restrictions.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/buffer-type-restrictions.html 2017-01-16 01:37:11.000000000 +0000 @@ -88,7 +88,7 @@ wtu.glErrorShouldBe(gl, gl.NO_ERROR, messagePrefix + "WORK"); else wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, messagePrefix + "FAIL"); - /* + if ((firstTarget == gl.TRANSFORM_FEEDBACK_BUFFER && secondTarget != gl.TRANSFORM_FEEDBACK_BUFFER) || (firstTarget != gl.TRANSFORM_FEEDBACK_BUFFER && secondTarget == gl.TRANSFORM_FEEDBACK_BUFFER)) { bind(firstBindFn, firstTarget, buffer); @@ -98,7 +98,6 @@ + " and simultaneously binding buffer with " + secondBindFn + " to gl." + secondTargetStr + " should FAIL"; wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, message); } - */ } var testBinding = function(firstTarget, secondTarget) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/get-buffer-sub-data.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/get-buffer-sub-data.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/get-buffer-sub-data.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/get-buffer-sub-data.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,176 @@ + + + + + + +WebGL getBufferSubData test. + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/one-large-uniform-buffer.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/one-large-uniform-buffer.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/one-large-uniform-buffer.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/buffers/one-large-uniform-buffer.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,152 @@ + + + + + + +WebGL Uniform Buffers Conformance Tests + + + + + +
    + +
    + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/context/methods-2.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/context/methods-2.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/context/methods-2.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/context/methods-2.html 2017-01-16 01:37:11.000000000 +0000 @@ -273,6 +273,9 @@ // Properties to be ignored because they were added in versions of the // spec that are backward-compatible with this version var ignoredMethods = [ + // There is no official spec for the commit API yet, the proposal link is: + // https://wiki.whatwg.org/wiki/OffscreenCanvas + "commit" ]; function assertFunction(v, f) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/extensions/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/extensions/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/extensions/00_test_list.txt 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/extensions/00_test_list.txt 2017-01-16 01:37:11.000000000 +0000 @@ -1,3 +1,4 @@ ext-color-buffer-float.html +ext-disjoint-timer-query-webgl2.html promoted-extensions.html promoted-extensions-in-shaders.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/extensions/ext-color-buffer-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/extensions/ext-color-buffer-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/extensions/ext-color-buffer-float.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/extensions/ext-color-buffer-float.html 2017-01-16 01:37:11.000000000 +0000 @@ -193,37 +193,66 @@ function runFloatRenderbufferRenderTargetTest(enabled, internalFormat, testProgram, numberOfChannels, subtractor) { var formatString = wtu.glEnumToString(gl, internalFormat); - debug(""); - debug("testing floating-point " + formatString + " renderbuffer render target"); - - var colorbuffer = gl.createRenderbuffer(); - var width = 2; - var height = 2; - gl.bindRenderbuffer(gl.RENDERBUFFER, colorbuffer); - gl.renderbufferStorage(gl.RENDERBUFFER, internalFormat, width, height); - if (!enabled) { - wtu.glErrorShouldBe(gl, gl.INVALID_ENUM, "floating-point renderbuffer allocation should fail if EXT_color_buffer_float is not enabled"); - return; - } else { - wtu.glErrorShouldBe(gl, gl.NO_ERROR, "floating-point renderbuffer allocation should succeed if EXT_color_buffer_float is enabled"); + var samples = [0]; + if (enabled) { + samples = Array.prototype.slice.call(gl.getInternalformatParameter(gl.RENDERBUFFER, internalFormat, gl.SAMPLES)); + samples.push(0); } - - // Try to use this texture as a render target. - var fbo = gl.createFramebuffer(); - gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); - gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorbuffer, 0); - gl.bindRenderbuffer(gl.RENDERBUFFER, null); - - var completeStatus = gl.checkFramebufferStatus(gl.FRAMEBUFFER); - if (completeStatus != gl.FRAMEBUFFER_COMPLETE) { - testFailed("floating-point " + formatString + " render target not supported"); - return; + for (var ndx = 0; ndx < samples.length; ++ndx) { + debug(""); + debug("testing floating-point " + formatString + " renderbuffer render target with number of samples " + samples[ndx]); + + var colorbuffer = gl.createRenderbuffer(); + var width = 2; + var height = 2; + gl.bindRenderbuffer(gl.RENDERBUFFER, colorbuffer); + if (samples[ndx] == 0) + gl.renderbufferStorage(gl.RENDERBUFFER, internalFormat, width, height); + else + gl.renderbufferStorageMultisample(gl.RENDERBUFFER, samples[ndx], internalFormat, width, height); + if (!enabled) { + wtu.glErrorShouldBe(gl, gl.INVALID_ENUM, "floating-point renderbuffer allocation should fail if EXT_color_buffer_float is not enabled"); + return; + } else { + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "floating-point renderbuffer allocation should succeed if EXT_color_buffer_float is enabled"); + } + + // Try to use this renderbuffer as a render target. + var fbo = gl.createFramebuffer(); + gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); + gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorbuffer); + + var completeStatus = gl.checkFramebufferStatus(gl.FRAMEBUFFER); + if (completeStatus != gl.FRAMEBUFFER_COMPLETE) { + testFailed("floating-point " + formatString + " render target not supported"); + return; + } + var resolveColorRbo = null; + var resolveFbo = null; + if (samples[ndx] > 0) { + resolveColorRbo = gl.createRenderbuffer(); + gl.bindRenderbuffer(gl.RENDERBUFFER, resolveColorRbo); + gl.renderbufferStorage(gl.RENDERBUFFER, internalFormat, width, height); + resolveFbo = gl.createFramebuffer(); + gl.bindFramebuffer(gl.FRAMEBUFFER, resolveFbo); + gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, resolveColorRbo); + completeStatus = gl.checkFramebufferStatus(gl.FRAMEBUFFER); + if (completeStatus != gl.FRAMEBUFFER_COMPLETE) { + testFailed("Failed to create resolve framebuffer"); + return; + } + } + gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); + gl.clearColor(1000.0, 1000.0, 1000.0, 1000.0); + gl.clear(gl.COLOR_BUFFER_BIT); + + if (samples[ndx] > 0) { + gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, resolveFbo); + gl.blitFramebuffer(0, 0, width, height, 0, 0, width, height, gl.COLOR_BUFFER_BIT, gl.NEAREST); + gl.bindFramebuffer(gl.READ_FRAMEBUFFER, resolveFbo); + } + runReadbackTest(testProgram, subtractor); } - - gl.clearColor(1000.0, 1000.0, 1000.0, 1000.0); - gl.clear(gl.COLOR_BUFFER_BIT); - - runReadbackTest(testProgram, subtractor); } function runRGB16FNegativeTest() @@ -270,6 +299,41 @@ shouldBe('gl.getExtension("EXT_color_buffer_float").myProperty', '2'); } +function runInternalFormatQueryTest() +{ + debug(""); + debug("testing the internal format query"); + + var maxSamples = gl.getParameter(gl.MAX_SAMPLES); + var formats = new Array(gl.RGBA16F, gl.R32F, gl.RG32F, gl.RGBA32F, gl.R16F, gl.RG16F, gl.R11F_G11F_B10F); + var firstMultiOnlyFormat = 4; + for (var fmt = 0; fmt < formats.length; ++fmt) { + var samples = gl.getInternalformatParameter(gl.RENDERBUFFER, formats[fmt], gl.SAMPLES); + if (fmt >= firstMultiOnlyFormat && (samples.length == 0 || samples[0] < maxSamples)) { + testFailed("the maximum value in SAMPLES should be at least " + maxSamples); + return; + } + + var prevSampleCount = 0; + var sampleCount; + for (var ndx = 0; ndx < samples.length; ++ndx, prevSampleCount = sampleCount) { + sampleCount = samples[ndx]; + // sample count must be > 0 + if (sampleCount <= 0) { + testFailed("Expected sample count to be at least one; got " + sampleCount); + return; + } + + // samples must be ordered descending + if (ndx > 0 && sampleCount >= prevSampleCount) { + testFailed("Expected sample count to be ordered in descending order; got " + prevSampleCount + " at index " + (ndx - 1) + ", and " + sampleCount + " at index " + ndx); + return; + } + } + } + testPassed("Internal format query succeeded"); +} + description("This test verifies the functionality of the EXT_color_buffer_float extension, if it is available."); debug(""); @@ -318,6 +382,9 @@ testPassed("No EXT_color_buffer_float support -- this is legal"); } else { testPassed("Successfully enabled EXT_color_buffer_float extension"); + + runInternalFormatQueryTest(); + runFloatTextureRenderTargetTest(true, gl.R16F, gl.RED, testProgram, 1, [1000, 1, 1, 1], 0); runFloatTextureRenderTargetTest(true, gl.RG16F, gl.RG, testProgram, 2, [1000, 1000, 1, 1], 0); runFloatTextureRenderTargetTest(true, gl.RGBA16F, gl.RGBA, testProgram, 4, [1000, 1000, 1000, 1000], 0); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/extensions/ext-disjoint-timer-query-webgl2.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/extensions/ext-disjoint-timer-query-webgl2.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/extensions/ext-disjoint-timer-query-webgl2.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/extensions/ext-disjoint-timer-query-webgl2.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,335 @@ + + + + + + +WebGL 2 EXT_disjoint_timer_query_webgl2 Conformance Tests + + + + + +
    + +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/00_test_list.txt 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/00_test_list.txt 2017-01-16 01:37:11.000000000 +0000 @@ -2,17 +2,22 @@ array-assign.html array-assign-constructor.html array-complex-indexing.html +array-element-increment.html array-equality.html array-in-complex-expression.html array-length-side-effects.html attrib-location-length-limits.html +bool-type-cast-bug-uint-ivec-uvec.html compare-structs-containing-arrays.html +compound-assignment-type-combination.html const-array-init.html forbidden-operators.html frag-depth.html invalid-default-precision.html +invalid-invariant.html loops-with-side-effects.html misplaced-version-directive.html +--min-version 2.0.1 no-attribute-vertex-shader.html sampler-no-precision.html sequence-operator-returns-non-constant.html shader-linking.html @@ -20,7 +25,16 @@ shader-with-1024-character-identifier.frag.html shader-with-1025-character-define.html shader-with-1025-character-identifier.frag.html +shader-with-invalid-characters.html +shader-with-mis-matching-uniform-block.html short-circuiting-in-loop-condition.html texture-offset-out-of-range.html +--min-version 2.0.1 texture-offset-uniform-texture-coordinate.html +--min-version 2.0.1 tricky-loop-conditions.html +--min-version 2.0.1 unary-minus-operator-in-dynamic-loop.html +uniform-block-layouts.html +uniform-block-layout-match.html uniform-location-length-limits.html +valid-invariant.html vector-dynamic-indexing.html +--min-version 2.0.1 vector-dynamic-indexing-nv-driver-bug.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/array-element-increment.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/array-element-increment.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/array-element-increment.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/array-element-increment.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,152 @@ + + + + + + +GLSL initialized array element increment/decrement test + + + + + + +
    +
    + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/bool-type-cast-bug-uint-ivec-uvec.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/bool-type-cast-bug-uint-ivec-uvec.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/bool-type-cast-bug-uint-ivec-uvec.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/bool-type-cast-bug-uint-ivec-uvec.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,389 @@ + + + + + + +Verify uint(bool), ivec(bvec), and uvec(bvec) work correctly (Mac AMD driver bug) + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/compound-assignment-type-combination.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/compound-assignment-type-combination.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/compound-assignment-type-combination.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/compound-assignment-type-combination.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,47 @@ + + + + + + +Result type should match the l-value type in compound assignment + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/frag-depth.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/frag-depth.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/frag-depth.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/frag-depth.html 2017-01-16 01:37:11.000000000 +0000 @@ -145,7 +145,7 @@ canvas.width = 50; canvas.height = 50; gl.viewport(0, 0, canvas.width, canvas.height); - + // Enable depth testing with a clearDepth of 0.5 // This makes it so that fragments are only rendered when // gl_FragDepth is < 0.5 diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/invalid-invariant.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/invalid-invariant.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/invalid-invariant.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/invalid-invariant.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,109 @@ + + + + + + +Negative tests for the use of the invariant qualifier and pragma + + + + + + + +
    +
    + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/no-attribute-vertex-shader.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/no-attribute-vertex-shader.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/no-attribute-vertex-shader.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/no-attribute-vertex-shader.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,84 @@ + + + + + + +Test no attribute vertex shaders + + + + + +
    +
    + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/shader-with-invalid-characters.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/shader-with-invalid-characters.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/shader-with-invalid-characters.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/shader-with-invalid-characters.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,58 @@ + + + + + + +WebGL GLSL Conformance Tests + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/shader-with-mis-matching-uniform-block.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/shader-with-mis-matching-uniform-block.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/shader-with-mis-matching-uniform-block.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/shader-with-mis-matching-uniform-block.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,80 @@ + + + + + + +GLSL mis-matching uniform block + + + + + + + +
    +
    + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/texture-offset-out-of-range.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/texture-offset-out-of-range.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/texture-offset-out-of-range.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/texture-offset-out-of-range.html 2017-01-16 01:37:11.000000000 +0000 @@ -38,16 +38,27 @@
    + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/texture-offset-uniform-texture-coordinate.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/texture-offset-uniform-texture-coordinate.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/texture-offset-uniform-texture-coordinate.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/texture-offset-uniform-texture-coordinate.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,191 @@ + + + + + + +GLSL texture offset with uniform texture coordinates test + + + + + + +
    +
    + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/tricky-loop-conditions.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/tricky-loop-conditions.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/tricky-loop-conditions.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/tricky-loop-conditions.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,348 @@ + + + + + + +GLSL tricky loop conditions and loop expressions + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/unary-minus-operator-in-dynamic-loop.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/unary-minus-operator-in-dynamic-loop.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/unary-minus-operator-in-dynamic-loop.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/unary-minus-operator-in-dynamic-loop.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,269 @@ + + + + + + + +Unary minus operator on int or uint variables in a dynamic loop in vertex shader should work + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/uniform-block-layout-match.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/uniform-block-layout-match.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/uniform-block-layout-match.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/uniform-block-layout-match.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,78 @@ + + + + + + +WebGL2 Uniform Block Layout Behavior Testing + + + + + + + +
    +
    + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/uniform-block-layouts.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/uniform-block-layouts.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/uniform-block-layouts.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/uniform-block-layouts.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,84 @@ + + + + + + +Disallowed uniform block layouts + + + + + + +
    +
    + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/valid-invariant.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/valid-invariant.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/valid-invariant.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/valid-invariant.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,116 @@ + + + + + + +Positive tests for the use of the invariant qualifier and pragma + + + + + + + +
    +
    + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/vector-dynamic-indexing.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/vector-dynamic-indexing.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/vector-dynamic-indexing.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/vector-dynamic-indexing.html 2017-01-16 01:37:11.000000000 +0000 @@ -230,36 +230,6 @@ my_FragColor = vec4(1.0 - f, f, 0.0, 1.0); } - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/vector-dynamic-indexing-nv-driver-bug.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/vector-dynamic-indexing-nv-driver-bug.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/vector-dynamic-indexing-nv-driver-bug.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/glsl3/vector-dynamic-indexing-nv-driver-bug.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,88 @@ + + + + + + +GLSL dynamic vector and matrix indexing test + + + + + + +
    +
    + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/misc/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/misc/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/misc/00_test_list.txt 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/misc/00_test_list.txt 2017-01-16 01:37:11.000000000 +0000 @@ -1,3 +1,6 @@ expando-loss-2.html +getextension-while-pbo-bound-stability.html instanceof-test.html +object-deletion-behaviour-2.html uninitialized-test-2.html +views-with-offsets.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/misc/expando-loss-2.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/misc/expando-loss-2.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/misc/expando-loss-2.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/misc/expando-loss-2.html 2017-01-16 01:37:11.000000000 +0000 @@ -46,13 +46,15 @@ // Helpers that set expandos and verify they are set to the correct value. var expandoValue = "WebGL is awesome!" -function setTestExpandos(instance) { +function setTestExpandos(instance, extra) { instance.expando1 = expandoValue; instance.expando2 = { subvalue : expandoValue }; + instance.expando_extra = extra; } -function verifyTestExpandos(instance, msg) { +function verifyTestExpandos(instance, msg, extra) { assertMsg(instance.expando1 === expandoValue, msg + ": Expect basic expando to survive despite GC."); assertMsg(instance.expando2 && instance.expando2.subvalue === expandoValue, msg + ": Expect subobject expando to survive despite GC."); + assertMsg(instance.expando_extra === extra, msg + ": Expect extra expando to survive despite GC."); } // Tests that we don't get expando loss for bound resources where the @@ -87,6 +89,86 @@ retrieveConstant: glProt.VERTEX_ARRAY_BINDING, name: "VERTEX_ARRAY_BINDING", }, + { + typeName: 'WebGLTexture', + creationFn: glProt.createTexture, + bindFn: glProt.bindTexture, + bindConstant: glProt.TEXTURE_3D, + retrieveConstant: glProt.TEXTURE_BINDING_3D, + name: "TEXTURE_BINDING_3D", + }, + { + typeName: 'WebGLTexture', + creationFn: glProt.createTexture, + bindFn: glProt.bindTexture, + bindConstant: glProt.TEXTURE_2D_ARRAY, + retrieveConstant: glProt.TEXTURE_BINDING_2D_ARRAY, + name: "TEXTURE_BINDING_2D_ARRAY", + }, + { + typeName: 'WebGLFramebuffer', + creationFn: glProt.createFramebuffer, + bindFn: glProt.bindFramebuffer, + bindConstant: glProt.READ_FRAMEBUFFER, + retrieveConstant: glProt.READ_FRAMEBUFFER_BINDING, + name: "READ_FRAMEBUFFER_BINDING", + }, + { + typeName: 'WebGLFramebuffer', + creationFn: glProt.createFramebuffer, + bindFn: glProt.bindFramebuffer, + bindConstant: glProt.DRAW_FRAMEBUFFER, + retrieveConstant: glProt.DRAW_FRAMEBUFFER_BINDING, + name: "DRAW_FRAMEBUFFER_BINDING", + }, + { + typeName: 'WebGLBuffer', + creationFn: glProt.createBuffer, + bindFn: glProt.bindBuffer, + bindConstant: glProt.COPY_READ_BUFFER, + retrieveConstant: glProt.COPY_READ_BUFFER_BINDING, + name: "COPY_READ_BUFFER_BINDING", + }, + { + typeName: 'WebGLBuffer', + creationFn: glProt.createBuffer, + bindFn: glProt.bindBuffer, + bindConstant: glProt.COPY_WRITE_BUFFER, + retrieveConstant: glProt.COPY_WRITE_BUFFER_BINDING, + name: "COPY_WRITE_BUFFER_BINDING", + }, + { + typeName: 'WebGLBuffer', + creationFn: glProt.createBuffer, + bindFn: glProt.bindBuffer, + bindConstant: glProt.PIXEL_PACK_BUFFER, + retrieveConstant: glProt.PIXEL_PACK_BUFFER_BINDING, + name: "PIXEL_PACK_BUFFER_BINDING", + }, + { + typeName: 'WebGLBuffer', + creationFn: glProt.createBuffer, + bindFn: glProt.bindBuffer, + bindConstant: glProt.PIXEL_UNPACK_BUFFER, + retrieveConstant: glProt.PIXEL_UNPACK_BUFFER_BINDING, + name: "PIXEL_UNPACK_BUFFER_BINDING", + }, + { + typeName: 'WebGLBuffer', + creationFn: glProt.createBuffer, + bindFn: glProt.bindBuffer, + bindConstant: glProt.TRANSFORM_FEEDBACK_BUFFER, + retrieveConstant: glProt.TRANSFORM_FEEDBACK_BUFFER_BINDING, + name: "TRANSFORM_FEEDBACK_BUFFER_BINDING", + }, + { + typeName: 'WebGLBuffer', + creationFn: glProt.createBuffer, + bindFn: glProt.bindBuffer, + bindConstant: glProt.UNIFORM_BUFFER, + retrieveConstant: glProt.UNIFORM_BUFFER_BINDING, + name: "UNIFORM_BUFFER_BINDING", + }, ]; simpleData.forEach(function(test) { @@ -112,6 +194,64 @@ }); } +function testIndexedBindings() { + debug('Indexed Bindings'); + + // Test data that describes how to create, bind, and retrieve an indexed object off of the context + var glProt = Object.getPrototypeOf(gl); + var simpleData = [ + { + typeName: 'WebGLBuffer', + creationFn: glProt.createBuffer, + bindFn: glProt.bindBufferBase, + indexMax: gl.getParameter(glProt.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS) - 1, + bindConstant: glProt.TRANSFORM_FEEDBACK_BUFFER, + retrieveConstant: glProt.TRANSFORM_FEEDBACK_BUFFER_BINDING, + name: "TRANSFORM_FEEDBACK_BUFFER_BINDING", + }, + { + typeName: 'WebGLBuffer', + creationFn: glProt.createBuffer, + bindFn: glProt.bindBufferBase, + indexMax: gl.getParameter(glProt.MAX_UNIFORM_BUFFER_BINDINGS) - 1, + bindConstant: glProt.UNIFORM_BUFFER, + retrieveConstant: glProt.UNIFORM_BUFFER_BINDING, + name: "UNIFORM_BUFFER_BINDING", + }, + ]; + + simpleData.forEach(function(test) { + // This test sets all of the separate indexed bindings first, then + // tests them all. It puts a different extra expando on each indexed + // parameter so that we can ensure they're all distinct. + var instances = []; + for (var i = 0; i <= test.indexMax; i++) { + var instance = test.creationFn.call(gl); + var msg = "getIndexedParameter(" + test.name + ", " + i + ")"; + setTestExpandos(instance, i); + instances[i] = instance; + test.bindFn.call(gl, test.bindConstant, i, instance); + } + + for (var i = 0; i <= test.indexMax; i++) { + var msg = "getIndexedParameter(" + test.name + ", " + i + ")"; + assertMsg(instances[i] === gl.getIndexedParameter(test.retrieveConstant, i), msg + " returns instance that was bound."); + } + + // Garbage collect Javascript references. Remaining references should be internal to WebGL. + instances = null; + webglHarnessCollectGarbage(); + + for (var i = 0; i <= test.indexMax; i++) { + var msg = "getIndexedParameter(" + test.name + ", " + i + ")"; + var retrievedObject = gl.getIndexedParameter(test.retrieveConstant, i); + verifyTestExpandos(retrievedObject, msg, i); + shouldBeType(retrievedObject, test.typeName); + debug(''); + } + }); +} + function testQueries() { debug('Query'); @@ -152,6 +292,7 @@ // Run tests testBasicBindings(); +testIndexedBindings(); testQueries(); // FYI: There's no need to test WebGLSync objects because there is no notion of an "active" sync, diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/misc/getextension-while-pbo-bound-stability.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/misc/getextension-while-pbo-bound-stability.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/misc/getextension-while-pbo-bound-stability.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/misc/getextension-while-pbo-bound-stability.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,78 @@ + + + + + + +WebGL2 getExtension while PBO bound stability conformance test. + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/misc/object-deletion-behaviour-2.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/misc/object-deletion-behaviour-2.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/misc/object-deletion-behaviour-2.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/misc/object-deletion-behaviour-2.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,136 @@ + + + + + + + + + + + +
    +
    + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/misc/uninitialized-test-2.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/misc/uninitialized-test-2.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/misc/uninitialized-test-2.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/misc/uninitialized-test-2.html 2017-01-16 01:37:11.000000000 +0000 @@ -42,7 +42,7 @@ description("Tests to check user code cannot access uninitialized data from GL resources."); var wtu = WebGLTestUtils; -var gl = wtu.create3DContext("canvas"); +var gl = wtu.create3DContext("canvas", undefined, 2); if (!gl) testFailed("Context created."); else diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/misc/views-with-offsets.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/misc/views-with-offsets.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/misc/views-with-offsets.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/misc/views-with-offsets.html 2017-01-16 01:37:11.000000000 +0000 @@ -0,0 +1,341 @@ + + + + + + + + + + + + +
    +
    + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/query/occlusion-query.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/query/occlusion-query.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/query/occlusion-query.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/query/occlusion-query.html 2017-01-16 01:37:12.000000000 +0000 @@ -63,7 +63,7 @@ name: "ANY_SAMPLES_PASSED", result: 1, }, - ]; + ]; } function runOcclusionQueryTest() { @@ -135,7 +135,7 @@ } else { currentTestIndex = 0; requestAnimationFrame(runOcclusionQueryTest); - } + } } else { requestAnimationFrame(runOcclusionQueryTest); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/reading/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/reading/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/reading/00_test_list.txt 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/reading/00_test_list.txt 2017-01-16 01:37:12.000000000 +0000 @@ -1,3 +1,5 @@ +--min-version 2.0.1 format-r11f-g11f-b10f.html read-pixels-from-fbo-test.html +--min-version 2.0.1 read-pixels-from-rgb8-into-pbo-bug.html read-pixels-into-pixel-pack-buffer.html read-pixels-pack-parameters.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/reading/format-r11f-g11f-b10f.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/reading/format-r11f-g11f-b10f.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/reading/format-r11f-g11f-b10f.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/reading/format-r11f-g11f-b10f.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,287 @@ + + + + + + +Test Format R11F_G11F_B10F + + + + + +
    +
    + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/reading/read-pixels-from-fbo-test.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/reading/read-pixels-from-fbo-test.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/reading/read-pixels-from-fbo-test.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/reading/read-pixels-from-fbo-test.html 2017-01-16 01:37:12.000000000 +0000 @@ -145,7 +145,7 @@ case gl.SRGB8_ALPHA8: case gl.RGB10_A2: srcIsNormalized = true; - tol = 5; + tol = 6; break; case gl.RGBA4: srcIsNormalized = true; @@ -191,6 +191,7 @@ result[2] = result[2] * 0x1F; break; case gl.UNSIGNED_INT_2_10_10_10_REV: + tol = 25; result[0] = result[0] * 0x3FF; result[1] = result[1] * 0x3FF; result[2] = result[2] * 0x3FF; @@ -656,4 +657,3 @@ - diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/reading/read-pixels-from-rgb8-into-pbo-bug.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/reading/read-pixels-from-rgb8-into-pbo-bug.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/reading/read-pixels-from-rgb8-into-pbo-bug.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/reading/read-pixels-from-rgb8-into-pbo-bug.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,106 @@ + + + + + + +WebGL 2 Conformance Test: readPixels from RGB8 Buffer Into Pixel Pack Buffer. + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/reading/read-pixels-pack-parameters.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/reading/read-pixels-pack-parameters.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/reading/read-pixels-pack-parameters.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/reading/read-pixels-pack-parameters.html 2017-01-16 01:37:12.000000000 +0000 @@ -115,7 +115,7 @@ return false; } -function runTestIteration(xoffset, yoffset, width, height, packParams, usePixelPackBuffer) +function runTestIteration(xoffset, yoffset, width, height, packParams, usePixelPackBuffer, packParamsValid) { if (!("alignment" in packParams)) packParams.alignment = 4; @@ -168,15 +168,19 @@ } gl.readPixels(xoffset, yoffset, width, height, gl.RGBA, gl.UNSIGNED_BYTE, array); } - wtu.glErrorShouldBe(gl, gl.NO_ERROR, "readPixels should succeed"); + if (packParamsValid) { + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "readPixels should succeed"); + } else { + wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "Invalid pack params combination"); + return; + } if (size == 0) return; if (usePixelPackBuffer) { - var arrBuffer = new ArrayBuffer(skipSize + size); - gl.getBufferSubData(gl.PIXEL_PACK_BUFFER, 0, arrBuffer); - array = new Uint8Array(arrBuffer); + array = new Uint8Array(skipSize + size); + gl.getBufferSubData(gl.PIXEL_PACK_BUFFER, 0, array); } // Check skipped bytes are unchanged. @@ -262,83 +266,83 @@ debug(""); var destText = usePixelPackBuffer ? "PIXEL_PACK buffer" : "array buffer"; debug("Verify that reading pixels to " + destText + " works fine with various pack alignments."); - runTestIteration(0, 0, 1, 3, {alignment:1}, usePixelPackBuffer); - runTestIteration(0, 0, 1, 3, {alignment:2}, usePixelPackBuffer); - runTestIteration(0, 0, 1, 3, {alignment:4}, usePixelPackBuffer); - runTestIteration(0, 0, 1, 3, {alignment:8}, usePixelPackBuffer); - runTestIteration(0, 0, 2, 3, {alignment:4}, usePixelPackBuffer); - runTestIteration(0, 0, 2, 3, {alignment:8}, usePixelPackBuffer); - runTestIteration(0, 0, 3, 3, {alignment:4}, usePixelPackBuffer); - runTestIteration(0, 0, 3, 3, {alignment:8}, usePixelPackBuffer); - runTestIteration(0, 0, 0, 0, {alignment:1}, usePixelPackBuffer); - runTestIteration(0, 0, 1, 3, {alignment:4}, usePixelPackBuffer); - runTestIteration(0, 0, 1, 3, {alignment:8}, usePixelPackBuffer); - - debug(""); - debug("Verify that reading pixels to " + destText + " works fine with PACK_ROW_LENGTH < width."); - runTestIteration(0, 0, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer); - runTestIteration(-1, 0, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer); - runTestIteration(0, -1, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer); - runTestIteration(-1, -1, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer); - runTestIteration(-5, 0, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer); - runTestIteration(0, -5, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer); - runTestIteration(2, 0, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer); - runTestIteration(0, 2, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer); - runTestIteration(2, 2, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer); - runTestIteration(5, 0, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer); - runTestIteration(0, 5, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer); - runTestIteration(0, 0, 3, 3, {alignment:8, rowLength:1}, usePixelPackBuffer); + runTestIteration(0, 0, 1, 3, {alignment:1}, usePixelPackBuffer, true); + runTestIteration(0, 0, 1, 3, {alignment:2}, usePixelPackBuffer, true); + runTestIteration(0, 0, 1, 3, {alignment:4}, usePixelPackBuffer, true); + runTestIteration(0, 0, 1, 3, {alignment:8}, usePixelPackBuffer, true); + runTestIteration(0, 0, 2, 3, {alignment:4}, usePixelPackBuffer, true); + runTestIteration(0, 0, 2, 3, {alignment:8}, usePixelPackBuffer, true); + runTestIteration(0, 0, 3, 3, {alignment:4}, usePixelPackBuffer, true); + runTestIteration(0, 0, 3, 3, {alignment:8}, usePixelPackBuffer, true); + runTestIteration(0, 0, 0, 0, {alignment:1}, usePixelPackBuffer, true); + runTestIteration(0, 0, 1, 3, {alignment:4}, usePixelPackBuffer, true); + runTestIteration(0, 0, 1, 3, {alignment:8}, usePixelPackBuffer, true); + + debug(""); + debug("Verify that reading pixels to " + destText + " is disallowed when PACK_ROW_LENGTH < width."); + runTestIteration(0, 0, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer, false); + runTestIteration(-1, 0, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer, false); + runTestIteration(0, -1, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer, false); + runTestIteration(-1, -1, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer, false); + runTestIteration(-5, 0, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer, false); + runTestIteration(0, -5, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer, false); + runTestIteration(2, 0, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer, false); + runTestIteration(0, 2, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer, false); + runTestIteration(2, 2, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer, false); + runTestIteration(5, 0, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer, false); + runTestIteration(0, 5, 3, 3, {alignment:8, rowLength:2}, usePixelPackBuffer, false); + runTestIteration(0, 0, 3, 3, {alignment:8, rowLength:1}, usePixelPackBuffer, false); debug(""); debug("Verify that reading pixels to " + destText + " works fine with PACK_ROW_LENGTH == width."); - runTestIteration(0, 0, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer); - runTestIteration(-1, 0, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer); - runTestIteration(0, -1, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer); - runTestIteration(-1, -1, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer); - runTestIteration(-5, 0, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer); - runTestIteration(0, -5, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer); - runTestIteration(2, 0, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer); - runTestIteration(0, 2, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer); - runTestIteration(2, 2, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer); - runTestIteration(5, 0, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer); - runTestIteration(0, 5, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer); + runTestIteration(0, 0, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer, true); + runTestIteration(-1, 0, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer, true); + runTestIteration(0, -1, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer, true); + runTestIteration(-1, -1, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer, true); + runTestIteration(-5, 0, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer, true); + runTestIteration(0, -5, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer, true); + runTestIteration(2, 0, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer, true); + runTestIteration(0, 2, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer, true); + runTestIteration(2, 2, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer, true); + runTestIteration(5, 0, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer, true); + runTestIteration(0, 5, 3, 3, {alignment:8, rowLength:3}, usePixelPackBuffer, true); debug(""); debug("Verify that reading pixels to " + destText + " works fine with PACK_ROW_LENGTH > width and with no padding"); - runTestIteration(0, 0, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer); - runTestIteration(-1, 0, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer); - runTestIteration(0, -1, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer); - runTestIteration(-1, -1, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer); - runTestIteration(-5, 0, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer); - runTestIteration(0, -5, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer); - runTestIteration(2, 0, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer); - runTestIteration(0, 2, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer); - runTestIteration(2, 2, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer); - runTestIteration(5, 0, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer); - runTestIteration(0, 5, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer); + runTestIteration(0, 0, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer, true); + runTestIteration(-1, 0, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer, true); + runTestIteration(0, -1, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer, true); + runTestIteration(-1, -1, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer, true); + runTestIteration(-5, 0, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer, true); + runTestIteration(0, -5, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer, true); + runTestIteration(2, 0, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer, true); + runTestIteration(0, 2, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer, true); + runTestIteration(2, 2, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer, true); + runTestIteration(5, 0, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer, true); + runTestIteration(0, 5, 3, 3, {alignment:8, rowLength:4}, usePixelPackBuffer, true); debug(""); debug("Verify that reading pixels to " + destText + " works fine with PACK_ROW_LENGTH > width and with padding"); - runTestIteration(0, 0, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer); - runTestIteration(-1, 0, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer); - runTestIteration(0, -1, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer); - runTestIteration(-1, -1, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer); - runTestIteration(-5, 0, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer); - runTestIteration(0, -5, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer); - runTestIteration(2, 0, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer); - runTestIteration(0, 2, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer); - runTestIteration(2, 2, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer); - runTestIteration(5, 0, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer); - runTestIteration(0, 5, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer); + runTestIteration(0, 0, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer, true); + runTestIteration(-1, 0, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer, true); + runTestIteration(0, -1, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer, true); + runTestIteration(-1, -1, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer, true); + runTestIteration(-5, 0, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer, true); + runTestIteration(0, -5, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer, true); + runTestIteration(2, 0, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer, true); + runTestIteration(0, 2, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer, true); + runTestIteration(2, 2, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer, true); + runTestIteration(5, 0, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer, true); + runTestIteration(0, 5, 3, 3, {alignment:8, rowLength:5}, usePixelPackBuffer, true); debug(""); debug("Verify that reading pixels to " + destText + " works fine with pack skip parameters."); - runTestIteration(0, 0, 3, 3, {alignment:8, skipPixels:2}, usePixelPackBuffer); - runTestIteration(0, 0, 3, 3, {alignment:8, skipPixels:1, skipRows:3}, usePixelPackBuffer); - runTestIteration(0, 0, 3, 3, {alignment:8, skipRows:3}, usePixelPackBuffer); - runTestIteration(0, 0, 2, 3, {alignment:8, skipPixels:2}, usePixelPackBuffer); - runTestIteration(0, 0, 2, 3, {alignment:8, skipPixels:1, skipRows:3}, usePixelPackBuffer); - runTestIteration(0, 0, 2, 3, {alignment:8, skipRows:3}, usePixelPackBuffer); + runTestIteration(0, 0, 3, 3, {alignment:8, skipPixels:2}, usePixelPackBuffer, false); + runTestIteration(0, 0, 3, 3, {alignment:8, skipPixels:1, skipRows:3}, usePixelPackBuffer, false); + runTestIteration(0, 0, 3, 3, {alignment:8, skipRows:3}, usePixelPackBuffer, true); + runTestIteration(0, 0, 2, 3, {alignment:8, skipPixels:2}, usePixelPackBuffer, false); + runTestIteration(0, 0, 2, 3, {alignment:8, skipPixels:1, skipRows:3}, usePixelPackBuffer, false); + runTestIteration(0, 0, 2, 3, {alignment:8, skipRows:3}, usePixelPackBuffer, true); } debug(""); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/renderbuffers/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/renderbuffers/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/renderbuffers/00_test_list.txt 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/renderbuffers/00_test_list.txt 2017-01-16 01:37:12.000000000 +0000 @@ -3,4 +3,5 @@ framebuffer-texture-layer.html invalidate-framebuffer.html multisampled-renderbuffer-initialization.html +--min-version 2.0.1 multisample-with-full-sample-counts.html readbuffer.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/renderbuffers/invalidate-framebuffer.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/renderbuffers/invalidate-framebuffer.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/renderbuffers/invalidate-framebuffer.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/renderbuffers/invalidate-framebuffer.html 2017-01-16 01:37:12.000000000 +0000 @@ -109,10 +109,10 @@ var maxColorAttachments = gl.getParameter(gl.MAX_COLOR_ATTACHMENTS); gl.invalidateSubFramebuffer(gl.READ_FRAMEBUFFER, [gl.COLOR_ATTACHMENT0 + maxColorAttachments], 5, 5, 10, 10); wtu.glErrorShouldBe(gl, [gl.INVALID_OPERATION, gl.INVALID_ENUM], - "calling invalidateSubFramebuffer to invalidate a COLOR_ATTACHMENT that exceeds MAX_COLOR_ATTACHMENT should generate INVALID_OPERATION."); + "calling invalidateSubFramebuffer to invalidate a COLOR_ATTACHMENT that exceeds MAX_COLOR_ATTACHMENT should generate INVALID_ENUM or INVALID_OPERATION."); gl.invalidateFramebuffer(gl.READ_FRAMEBUFFER, [gl.COLOR_ATTACHMENT0 + maxColorAttachments]); wtu.glErrorShouldBe(gl, [gl.INVALID_OPERATION, gl.INVALID_ENUM], - "calling invalidateFramebuffer to invalidate a COLOR_ATTACHMENT that exceeds MAX_COLOR_ATTACHMENT should generate INVALID_OPERATION."); + "calling invalidateFramebuffer to invalidate a COLOR_ATTACHMENT that exceeds MAX_COLOR_ATTACHMENT should generate INVALID_ENUM or INVALID_OPERATION."); // invalidate the default framebuffer gl.bindFramebuffer(gl.FRAMEBUFFER, null); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/renderbuffers/multisample-with-full-sample-counts.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/renderbuffers/multisample-with-full-sample-counts.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/renderbuffers/multisample-with-full-sample-counts.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/renderbuffers/multisample-with-full-sample-counts.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,119 @@ + + + + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/00_test_list.txt 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/00_test_list.txt 2017-01-16 01:37:12.000000000 +0000 @@ -1,4 +1,25 @@ +attrib-type-match.html +blitframebuffer-filter-outofbounds.html +blitframebuffer-filter-srgb.html +blitframebuffer-multisampled-readbuffer.html +--min-version 2.0.1 blitframebuffer-outside-readbuffer.html +blitframebuffer-scissor-enabled.html +blitframebuffer-size-overflow.html +--min-version 2.0.1 blitframebuffer-srgb-and-linear-drawbuffers.html +--min-version 2.0.1 blitframebuffer-stencil-only.html +blitframebuffer-test.html +canvas-resizing-with-pbo-bound.html +clear-func-buffer-type-match.html +--min-version 2.0.1 clear-srgb-color-buffer.html +--min-version 2.0.1 clipping-wide-points.html draw-buffers.html element-index-uint.html framebuffer-completeness-unaffected.html +framebuffer-unsupported.html +--min-version 2.0.1 fs-color-type-mismatch-color-buffer-type.html instanced-arrays.html +--min-version 2.0.1 instanced-rendering-bug.html +out-of-bounds-index-buffers-after-copying.html +--min-version 2.0.1 rendering-sampling-feedback-loop.html +rgb-format-support.html +uniform-block-buffer-size.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/attrib-type-match.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/attrib-type-match.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/attrib-type-match.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/attrib-type-match.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,582 @@ + + + + + + +WebGL Conformance Tests: Vertex Attribute Type Match + + + + + + +
    + +
    + + + + + + + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-filter-outofbounds.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-filter-outofbounds.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-filter-outofbounds.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-filter-outofbounds.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,199 @@ + + + + + + +WebGL BlitFramebuffer Tests + + + + + + + +
    +
    + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-filter-srgb.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-filter-srgb.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-filter-srgb.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-filter-srgb.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,183 @@ + + + + + + +WebGL BlitFramebuffer Tests + + + + + + + +
    +
    + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-multisampled-readbuffer.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-multisampled-readbuffer.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-multisampled-readbuffer.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-multisampled-readbuffer.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,134 @@ + + + + + + +WebGL BlitFramebuffer Tests + + + + + + + +
    +
    + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-outside-readbuffer.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-outside-readbuffer.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-outside-readbuffer.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-outside-readbuffer.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,289 @@ + + + + + + +WebGL BlitFramebuffer Tests + + + + + + + +
    +
    + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-scissor-enabled.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-scissor-enabled.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-scissor-enabled.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-scissor-enabled.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,182 @@ + + + + + + +WebGL BlitFramebuffer Tests + + + + + + + +
    +
    + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-size-overflow.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-size-overflow.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-size-overflow.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-size-overflow.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,98 @@ + + + + + + +WebGL BlitFramebuffer Tests + + + + + + +
    +
    + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-srgb-and-linear-drawbuffers.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-srgb-and-linear-drawbuffers.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-srgb-and-linear-drawbuffers.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-srgb-and-linear-drawbuffers.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,229 @@ + + + + + + +WebGL BlitFramebuffer Tests + + + + + + + +
    +
    + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-stencil-only.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-stencil-only.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-stencil-only.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-stencil-only.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,192 @@ + + + + + + +WebGL BlitFramebuffer Stencil-only Tests + + + + + + + + + + + +
    +
    + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-test.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-test.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-test.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/blitframebuffer-test.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,342 @@ + + + + + + +WebGL BlitFramebuffer Tests + + + + + + +
    +
    + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/canvas-resizing-with-pbo-bound.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/canvas-resizing-with-pbo-bound.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/canvas-resizing-with-pbo-bound.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/canvas-resizing-with-pbo-bound.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,130 @@ + + + + + + +WebGL 2 Resizing With PBO Bound Test + + + + + +
    + + +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/clear-func-buffer-type-match.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/clear-func-buffer-type-match.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/clear-func-buffer-type-match.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/clear-func-buffer-type-match.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,166 @@ + + + + + + +Test clear and clearBuffer functions have to match fbo's buffer format + + + + + +
    +
    + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/clear-srgb-color-buffer.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/clear-srgb-color-buffer.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/clear-srgb-color-buffer.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/clear-srgb-color-buffer.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,109 @@ + + + + + + +Clear sRGB Color Buffer + + + + + + + +
    +
    + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/clipping-wide-points.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/clipping-wide-points.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/clipping-wide-points.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/clipping-wide-points.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,47 @@ + + + + + +Clipping wide points test + + + + + + + +
    +
    + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/draw-buffers.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/draw-buffers.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/draw-buffers.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/draw-buffers.html 2017-01-16 01:37:12.000000000 +0000 @@ -386,16 +386,17 @@ return (index == 0) ? [0, 0, 255, 255] : [0, 255, 0, 255]; }); - // By default, gl_FragColor only writes to color number zero. - // In GLES SL 3.00 context, drawBuffers can specify the color buffers that gl_FragColor should write into. - // See GLES3 spec section 4.2.1 Selecting Buffers for Writing. - debug("test that an OpenGL ES Shading Language 3.00 shader with a single output color writes to color buffers specified by drawBuffers"); + // If there is only a single output, the location defaults to zero if not specified. + // See GLSL ES Spec 3.00.4, Section 4.3.8.2, Output Layout Qualifiers. + debug("test that an OpenGL ES Shading Language 3.00 shader with a single output color defaults to color number zero"); gl.bindFramebuffer(gl.FRAMEBUFFER, fb); gl.drawBuffers(bufs); gl.useProgram(redProgram); wtu.drawUnitQuad(gl); - checkAttachmentsForColor(attachments, [255, 0, 0, 255]); + checkAttachmentsForColorFn(attachments, function(attachment, index) { + return (index == 0) ? [255, 0, 0, 255] : [0, 255, 0, 255]; + }); if (maxUsable > 1) { // Prepare for following tests by clearing all attachments to red. diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/element-index-uint.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/element-index-uint.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/element-index-uint.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/element-index-uint.html 2017-01-16 01:37:12.000000000 +0000 @@ -78,7 +78,7 @@ testFailed("WebGL context does not exist"); } else { testPassed("WebGL context exists"); - + var drawType = (ii == 0) ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW; debug("Testing " + ((ii == 0) ? "STATIC_DRAW" : "DYNAMIC_DRAW")); @@ -98,17 +98,17 @@ function runDrawTests(drawType) { debug("Test that draws with unsigned integer indices produce the expected results"); - + canvas.width = 50; canvas.height = 50; gl.viewport(0, 0, canvas.width, canvas.height); - + var program = wtu.setupNoTexCoordTextureProgram(gl); function setupDraw(s) { // Create a vertex buffer that cannot be fully indexed via shorts var quadArrayLen = 65537 * 3; var quadArray = new Float32Array(quadArrayLen); - + // Leave all but the last 4 values zero-ed out var idx = quadArrayLen - 12; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/framebuffer-completeness-unaffected.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/framebuffer-completeness-unaffected.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/framebuffer-completeness-unaffected.html 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/framebuffer-completeness-unaffected.html 2017-01-16 01:37:12.000000000 +0000 @@ -77,9 +77,12 @@ gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.RENDERBUFFER, null); shouldBe('gl.checkFramebufferStatus(gl.FRAMEBUFFER)', 'gl.FRAMEBUFFER_COMPLETE'); - debug("set read buffer to ATTACHMENT1, fbo should be complete"); - gl.readBuffer(gl.COLOR_ATTACHMENT1); - shouldBe('gl.checkFramebufferStatus(gl.FRAMEBUFFER)', 'gl.FRAMEBUFFER_COMPLETE'); + // Setting of GL_READ_BUFFER and GL_DRAW_BUFFERs affects framebuffer completeness on Mac Intel. + // Chromium bug: crbug.com/630800 + // Apple Radar: 28236629 + //debug("set read buffer to ATTACHMENT1, fbo should be complete"); + //gl.readBuffer(gl.COLOR_ATTACHMENT1); + //shouldBe('gl.checkFramebufferStatus(gl.FRAMEBUFFER)', 'gl.FRAMEBUFFER_COMPLETE'); debug("drawBuffers selects ATTACHMENT0, fbo should be complete"); gl.drawBuffers([gl.COLOR_ATTACHMENT0]); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/framebuffer-unsupported.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/framebuffer-unsupported.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/framebuffer-unsupported.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/framebuffer-unsupported.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,155 @@ + + + + + + +WebGL FRAMEBUFFER_UNSUPPORTED Test + + + + + +
    +
    + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/fs-color-type-mismatch-color-buffer-type.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/fs-color-type-mismatch-color-buffer-type.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/fs-color-type-mismatch-color-buffer-type.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/fs-color-type-mismatch-color-buffer-type.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,190 @@ + + + + + + +The Color Types of Fragment Shader's Outputs Should Match The Data Types of Color Buffers + + + + + + +
    +
    + + + + + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/instanced-rendering-bug.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/instanced-rendering-bug.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/instanced-rendering-bug.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/instanced-rendering-bug.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,275 @@ + + + + + + +WebGL Instanced Arrays Conformance Tests + + + + + + +
    + +
    + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/out-of-bounds-index-buffers-after-copying.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/out-of-bounds-index-buffers-after-copying.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/out-of-bounds-index-buffers-after-copying.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/out-of-bounds-index-buffers-after-copying.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,207 @@ + + + + + + + + +WebGL Out-of-Bounds Index Buffer Caused by CopyBufferSubData Conformance Test + + + +
    +
    + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/rendering-sampling-feedback-loop.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/rendering-sampling-feedback-loop.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/rendering-sampling-feedback-loop.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/rendering-sampling-feedback-loop.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,148 @@ + + + + + + +WebGL Rendering and Sampling Feedback Loop Tests + + + + + + +
    +
    + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/rgb-format-support.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/rgb-format-support.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/rgb-format-support.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/rgb-format-support.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,132 @@ + + + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/uniform-block-buffer-size.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/uniform-block-buffer-size.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/uniform-block-buffer-size.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/rendering/uniform-block-buffer-size.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,249 @@ + + + + + + +WebGL UniformBlock Buffer Size Conformance Tests + + + + + + + +
    + +
    + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/sync/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/sync/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/sync/00_test_list.txt 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/sync/00_test_list.txt 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1 @@ +sync-webgl-specific.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/sync/sync-webgl-specific.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/sync/sync-webgl-specific.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/sync/sync-webgl-specific.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/sync/sync-webgl-specific.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,87 @@ + + + + + + +WebGL2 specific sync object behaviors + + + + + +
    +
    + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/00_test_list.txt 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/00_test_list.txt 2017-01-16 01:37:12.000000000 +0000 @@ -1,13 +1,14 @@ -//misc/00_test_list.txt -//canvas/00_test_list.txt -//image/00_test_list.txt -//image_data/00_test_list.txt -//svg_image/00_test_list.txt -//video/00_test_list.txt -//webgl_canvas/00_test_list.txt -//image_bitmap_from_image_data/00_test_list.txt -//image_bitmap_from_image/00_test_list.txt -//image_bitmap_from_video/00_test_list.txt -//image_bitmap_from_canvas/00_test_list.txt -//image_bitmap_from_blob/00_test_list.txt -//image_bitmap_from_image_bitmap/00_test_list.txt +misc/00_test_list.txt +canvas/00_test_list.txt +canvas_sub_rectangle/00_test_list.txt +image/00_test_list.txt +image_data/00_test_list.txt +svg_image/00_test_list.txt +video/00_test_list.txt +webgl_canvas/00_test_list.txt +// image_bitmap_from_image_data/00_test_list.txt +// image_bitmap_from_image/00_test_list.txt +// image_bitmap_from_video/00_test_list.txt +// image_bitmap_from_canvas/00_test_list.txt +// image_bitmap_from_blob/00_test_list.txt +// image_bitmap_from_image_bitmap/00_test_list.txt diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas/00_test_list.txt 2017-01-13 01:36:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas/00_test_list.txt 2017-01-16 01:37:12.000000000 +0000 @@ -15,8 +15,8 @@ tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html tex-2d-r11f_g11f_b10f-rgb-half_float.html tex-2d-r11f_g11f_b10f-rgb-float.html -tex-2d-rgb9_e5-rgb-half_float.html -tex-2d-rgb9_e5-rgb-float.html +//tex-2d-rgb9_e5-rgb-half_float.html // crbug.com/663188 , Apple Radar 29259244 +//tex-2d-rgb9_e5-rgb-float.html // crbug.com/663188 , Apple Radar 29259244 tex-2d-rgb16f-rgb-half_float.html tex-2d-rgb16f-rgb-float.html tex-2d-rgb32f-rgb-float.html @@ -48,8 +48,8 @@ tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html tex-3d-r11f_g11f_b10f-rgb-half_float.html tex-3d-r11f_g11f_b10f-rgb-float.html -tex-3d-rgb9_e5-rgb-half_float.html -tex-3d-rgb9_e5-rgb-float.html +//tex-3d-rgb9_e5-rgb-half_float.html // crbug.com/663188 , Apple Radar 29259244 +//tex-3d-rgb9_e5-rgb-float.html // crbug.com/663188 , Apple Radar 29259244 tex-3d-rgb16f-rgb-half_float.html tex-3d-rgb16f-rgb-float.html tex-3d-rgb32f-rgb-float.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/00_test_list.txt 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/00_test_list.txt 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,66 @@ +tex-2d-r8-red-unsigned_byte.html +tex-2d-r16f-red-half_float.html +tex-2d-r16f-red-float.html +tex-2d-r32f-red-float.html +tex-2d-r8ui-red_integer-unsigned_byte.html +tex-2d-rg8-rg-unsigned_byte.html +tex-2d-rg16f-rg-half_float.html +tex-2d-rg16f-rg-float.html +tex-2d-rg32f-rg-float.html +tex-2d-rg8ui-rg_integer-unsigned_byte.html +tex-2d-rgb8-rgb-unsigned_byte.html +tex-2d-srgb8-rgb-unsigned_byte.html +tex-2d-rgb565-rgb-unsigned_byte.html +tex-2d-rgb565-rgb-unsigned_short_5_6_5.html +tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html +tex-2d-r11f_g11f_b10f-rgb-half_float.html +tex-2d-r11f_g11f_b10f-rgb-float.html +tex-2d-rgb9_e5-rgb-half_float.html +tex-2d-rgb9_e5-rgb-float.html +tex-2d-rgb16f-rgb-half_float.html +tex-2d-rgb16f-rgb-float.html +tex-2d-rgb32f-rgb-float.html +tex-2d-rgb8ui-rgb_integer-unsigned_byte.html +tex-2d-rgba8-rgba-unsigned_byte.html +tex-2d-srgb8_alpha8-rgba-unsigned_byte.html +tex-2d-rgb5_a1-rgba-unsigned_byte.html +tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html +tex-2d-rgba4-rgba-unsigned_byte.html +tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html +tex-2d-rgba16f-rgba-half_float.html +tex-2d-rgba16f-rgba-float.html +tex-2d-rgba32f-rgba-float.html +tex-2d-rgba8ui-rgba_integer-unsigned_byte.html +tex-3d-r8-red-unsigned_byte.html +tex-3d-r16f-red-half_float.html +tex-3d-r16f-red-float.html +tex-3d-r32f-red-float.html +tex-3d-r8ui-red_integer-unsigned_byte.html +tex-3d-rg8-rg-unsigned_byte.html +tex-3d-rg16f-rg-half_float.html +tex-3d-rg16f-rg-float.html +tex-3d-rg32f-rg-float.html +tex-3d-rg8ui-rg_integer-unsigned_byte.html +tex-3d-rgb8-rgb-unsigned_byte.html +tex-3d-srgb8-rgb-unsigned_byte.html +tex-3d-rgb565-rgb-unsigned_byte.html +tex-3d-rgb565-rgb-unsigned_short_5_6_5.html +tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html +tex-3d-r11f_g11f_b10f-rgb-half_float.html +tex-3d-r11f_g11f_b10f-rgb-float.html +tex-3d-rgb9_e5-rgb-half_float.html +tex-3d-rgb9_e5-rgb-float.html +tex-3d-rgb16f-rgb-half_float.html +tex-3d-rgb16f-rgb-float.html +tex-3d-rgb32f-rgb-float.html +tex-3d-rgb8ui-rgb_integer-unsigned_byte.html +tex-3d-rgba8-rgba-unsigned_byte.html +tex-3d-srgb8_alpha8-rgba-unsigned_byte.html +tex-3d-rgb5_a1-rgba-unsigned_byte.html +tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html +tex-3d-rgba4-rgba-unsigned_byte.html +tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html +tex-3d-rgba16f-rgba-half_float.html +tex-3d-rgba16f-rgba-float.html +tex-3d-rgba32f-rgba-float.html +tex-3d-rgba8ui-rgba_integer-unsigned_byte.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-half_float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r16f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r16f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r16f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r16f-red-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r16f-red-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r16f-red-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r16f-red-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r16f-red-half_float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r32f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r32f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r32f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r32f-red-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r8-red-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r8-red-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r8-red-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r8-red-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r8ui-red_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r8ui-red_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r8ui-red_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r8ui-red_integer-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg16f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg16f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg16f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg16f-rg-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg16f-rg-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg16f-rg-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg16f-rg-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg16f-rg-half_float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg32f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg32f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg32f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg32f-rg-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg8-rg-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg8-rg-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg8-rg-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg8-rg-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg8ui-rg_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg8ui-rg_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg8ui-rg_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg8ui-rg_integer-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb16f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb16f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb16f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb16f-rgb-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb16f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb16f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb16f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb16f-rgb-half_float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb32f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb32f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb32f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb32f-rgb-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb565-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb565-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb565-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb565-rgb-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb5_a1-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb5_a1-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb5_a1-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb5_a1-rgba-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb8-rgb-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb8ui-rgb_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb8ui-rgb_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb8ui-rgb_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb8ui-rgb_integer-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb9_e5-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb9_e5-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb9_e5-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb9_e5-rgb-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb9_e5-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb9_e5-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb9_e5-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb9_e5-rgb-half_float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba16f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba16f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba16f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba16f-rgba-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba16f-rgba-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba16f-rgba-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba16f-rgba-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba16f-rgba-half_float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba32f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba32f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba32f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba32f-rgba-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba4-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba4-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba4-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba4-rgba-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba8-rgba-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba8ui-rgba_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba8ui-rgba_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba8ui-rgba_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba8ui-rgba_integer-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-srgb8_alpha8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-srgb8_alpha8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-srgb8_alpha8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-srgb8_alpha8-rgba-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-srgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-srgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-srgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-srgb8-rgb-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-half_float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r16f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r16f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r16f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r16f-red-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r16f-red-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r16f-red-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r16f-red-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r16f-red-half_float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r32f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r32f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r32f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r32f-red-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r8-red-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r8-red-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r8-red-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r8-red-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r8ui-red_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r8ui-red_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r8ui-red_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r8ui-red_integer-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg16f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg16f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg16f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg16f-rg-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg16f-rg-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg16f-rg-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg16f-rg-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg16f-rg-half_float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg32f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg32f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg32f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg32f-rg-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg8-rg-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg8-rg-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg8-rg-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg8-rg-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg8ui-rg_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg8ui-rg_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg8ui-rg_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg8ui-rg_integer-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb16f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb16f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb16f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb16f-rgb-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb16f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb16f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb16f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb16f-rgb-half_float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb32f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb32f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb32f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb32f-rgb-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb565-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb565-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb565-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb565-rgb-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb5_a1-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb5_a1-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb5_a1-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb5_a1-rgba-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb8-rgb-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb8ui-rgb_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb8ui-rgb_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb8ui-rgb_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb8ui-rgb_integer-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb9_e5-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb9_e5-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb9_e5-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb9_e5-rgb-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb9_e5-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb9_e5-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb9_e5-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb9_e5-rgb-half_float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba16f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba16f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba16f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba16f-rgba-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba16f-rgba-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba16f-rgba-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba16f-rgba-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba16f-rgba-half_float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba32f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba32f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba32f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba32f-rgba-float.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba4-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba4-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba4-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba4-rgba-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba8-rgba-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba8ui-rgba_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba8ui-rgba_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba8ui-rgba_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba8ui-rgba_integer-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-srgb8_alpha8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-srgb8_alpha8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-srgb8_alpha8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-srgb8_alpha8-rgba-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-srgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-srgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-srgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-srgb8-rgb-unsigned_byte.html 2017-01-16 01:37:12.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/00_test_list.txt 2017-01-13 01:37:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/00_test_list.txt 2017-01-16 01:38:18.000000000 +0000 @@ -1,11 +1,20 @@ -compressed-tex-image.html +--min-version 2.0.1 active-3d-texture-bug.html copy-texture-image.html +copy-texture-image-luma-format.html +copy-texture-image-webgl-specific.html gl-get-tex-parameter.html +--min-version 2.0.1 integer-cubemap-texture-sampling.html +--min-version 2.0.1 integer-cubemap-specification-order-bug.html mipmap-fbo.html tex-3d-size-limit.html +tex-image-and-sub-image-with-array-buffer-view-sub-source.html +tex-image-with-bad-args.html +tex-image-with-bad-args-from-dom-elements.html +tex-image-with-different-data-source.html tex-input-validation.html tex-mipmap-levels.html tex-new-formats.html +--min-version 2.0.1 tex-srgb-mipmap.html tex-storage-2d.html tex-storage-and-subimage-3d.html tex-storage-compressed-formats.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/active-3d-texture-bug.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/active-3d-texture-bug.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/active-3d-texture-bug.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/active-3d-texture-bug.html 2017-01-16 01:38:18.000000000 +0000 @@ -0,0 +1,145 @@ + + + + + + +WebGL Active TEXTURE1 Bug Tests + + + + + +
    + +
    + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/copy-texture-image-luma-format.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/copy-texture-image-luma-format.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/copy-texture-image-luma-format.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/copy-texture-image-luma-format.html 2017-01-16 01:38:18.000000000 +0000 @@ -0,0 +1,187 @@ + + + + + + +WebGL CopyTexSubImage Tests + + + + + + +
    + +
    + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/copy-texture-image-webgl-specific.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/copy-texture-image-webgl-specific.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/copy-texture-image-webgl-specific.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/copy-texture-image-webgl-specific.html 2017-01-16 01:38:18.000000000 +0000 @@ -0,0 +1,324 @@ + + + + + + +WebGL CopyTexImage Tests + + + + + + +
    +
    + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/integer-cubemap-specification-order-bug.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/integer-cubemap-specification-order-bug.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/integer-cubemap-specification-order-bug.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/integer-cubemap-specification-order-bug.html 2017-01-16 01:38:18.000000000 +0000 @@ -0,0 +1,190 @@ + + + + + + +WebGL Integer Cubemap Texture Specification Order Bug Test + + + + + + +
    +
    + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/integer-cubemap-texture-sampling.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/integer-cubemap-texture-sampling.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/integer-cubemap-texture-sampling.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/integer-cubemap-texture-sampling.html 2017-01-16 01:38:18.000000000 +0000 @@ -0,0 +1,190 @@ + + + + + + +WebGL Integer Cubemap Texture Sampling Tests + + + + + + + +
    +
    + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/texel-fetch-undefined.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/texel-fetch-undefined.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/texel-fetch-undefined.html 2017-01-13 01:37:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/texel-fetch-undefined.html 2017-01-16 01:38:18.000000000 +0000 @@ -55,7 +55,7 @@ out vec4 my_FragColor; void main() { - my_FragColor = texelFetch(uSampler, uTestPos, 0); + my_FragColor = texelFetch(uSampler, uTestPos, 0); } + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-image-with-bad-args-from-dom-elements.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-image-with-bad-args-from-dom-elements.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-image-with-bad-args-from-dom-elements.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-image-with-bad-args-from-dom-elements.html 2017-01-16 01:38:18.000000000 +0000 @@ -0,0 +1,149 @@ + + + + + + + + + + + +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-image-with-bad-args.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-image-with-bad-args.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-image-with-bad-args.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-image-with-bad-args.html 2017-01-16 01:38:18.000000000 +0000 @@ -0,0 +1,76 @@ + + + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-image-with-different-data-source.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-image-with-different-data-source.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-image-with-different-data-source.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-image-with-different-data-source.html 2017-01-16 01:38:18.000000000 +0000 @@ -0,0 +1,72 @@ + + + + + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-mipmap-levels.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-mipmap-levels.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-mipmap-levels.html 2017-01-13 01:37:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-mipmap-levels.html 2017-01-16 01:38:18.000000000 +0000 @@ -59,6 +59,41 @@ gl_FragColor = texture2D(tex, texCoord); } + + + + + + + + + + + + +
    +
    + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-storage-compressed-formats.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-storage-compressed-formats.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-storage-compressed-formats.html 2017-01-13 01:37:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-storage-compressed-formats.html 2017-01-16 01:38:18.000000000 +0000 @@ -50,10 +50,13 @@ var wtu = WebGLTestUtils; var canvas = document.getElementById("canvas"); var gl = wtu.create3DContext(canvas, null, 2); +var WEBGL_compressed_texture_etc = gl.getExtension("WEBGL_compressed_texture_etc"); var vao = null; if (!gl) { testFailed("WebGL context does not exist"); +} else if (!WEBGL_compressed_texture_etc) { + testPassed("No WEBGL_compressed_texture_etc support -- this is legal"); } else { testPassed("WebGL context exists"); @@ -70,16 +73,16 @@ { // These compressed formats are in Table 3.19 from the OpenGL ES 3.0.4 spec. var texCompressedFormats = [ - gl.COMPRESSED_R11_EAC, - gl.COMPRESSED_SIGNED_R11_EAC, - gl.COMPRESSED_RG11_EAC, - gl.COMPRESSED_SIGNED_RG11_EAC, - gl.COMPRESSED_RGB8_ETC2, - gl.COMPRESSED_SRGB8_ETC2, - gl.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, - gl.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, - gl.COMPRESSED_RGBA8_ETC2_EAC, - gl.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, + WEBGL_compressed_texture_etc.COMPRESSED_R11_EAC, + WEBGL_compressed_texture_etc.COMPRESSED_SIGNED_R11_EAC, + WEBGL_compressed_texture_etc.COMPRESSED_RG11_EAC, + WEBGL_compressed_texture_etc.COMPRESSED_SIGNED_RG11_EAC, + WEBGL_compressed_texture_etc.COMPRESSED_RGB8_ETC2, + WEBGL_compressed_texture_etc.COMPRESSED_SRGB8_ETC2, + WEBGL_compressed_texture_etc.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, + WEBGL_compressed_texture_etc.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, + WEBGL_compressed_texture_etc.COMPRESSED_RGBA8_ETC2_EAC, + WEBGL_compressed_texture_etc.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, ]; texCompressedFormats.forEach(function(internalformat){ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-unpack-params.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-unpack-params.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-unpack-params.html 2017-01-13 01:37:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/misc/tex-unpack-params.html 2017-01-16 01:38:18.000000000 +0000 @@ -268,7 +268,17 @@ } gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB8, testCase.width, testCase.height, 0, gl.RGB, gl.UNSIGNED_BYTE, useUnpackBuffer ? 0 : array); - wtu.glErrorShouldBe(gl, gl.NO_ERROR, "texImage2D with correct buffer size should succeed"); + if (testCase.validUnpackParams2D) { + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "texImage2D with correct buffer size should succeed"); + } else { + wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid unpack params combination"); + if (!useUnpackBuffer) { + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB8, testCase.width, testCase.height, 0, + gl.RGB, gl.UNSIGNED_BYTE, null); + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "unpack param constraints do not apply if no data are uploaded."); + } + return; + } var buffer1 = unpackPixels(array, testCase.width, testCase.height, 1, imageSizes); var buffer2 = getPixelsFromTexture2D(gl, tex, 0, 0, testCase.width, testCase.height); @@ -300,7 +310,12 @@ } gl.texSubImage2D(gl.TEXTURE_2D, 0, testCase.xoffset, testCase.yoffset, subWidth, subHeight, gl.RGB, gl.UNSIGNED_BYTE, useUnpackBuffer ? 0 : array); - wtu.glErrorShouldBe(gl, gl.NO_ERROR, "texSubImage2D with correct buffer size should succeed"); + if (testCase.validUnpackParamsForSub2D) { + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "texSubImage2D with correct buffer size should succeed"); + } else { + wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid unpack params combination"); + return; + } var buffer1 = unpackPixels(array, subWidth, subHeight, 1, imageSizes); var buffer2 = getPixelsFromTexture2D( @@ -361,7 +376,17 @@ } gl.texImage3D(gl.TEXTURE_3D, 0, gl.RGB8, testCase.width, testCase.height, testCase.depth, 0, gl.RGB, gl.UNSIGNED_BYTE, useUnpackBuffer ? 0 : array); - wtu.glErrorShouldBe(gl, gl.NO_ERROR, "texImage3D with correct buffer size should succeed"); + if (testCase.validUnpackParams3D) { + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "texImage3D with correct buffer size should succeed"); + } else { + wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid unpack params combination"); + if (!useUnpackBuffer) { + gl.texImage3D(gl.TEXTURE_3D, 0, gl.RGB8, testCase.width, testCase.height, testCase.depth, 0, + gl.RGB, gl.UNSIGNED_BYTE, null); + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "unpack param constraints do not apply if no data are uploaded."); + } + return; + } var buffer1 = unpackPixels(array, testCase.width, testCase.height, testCase.depth, imageSizes); var buffer2 = getPixelsFromTexture3D( @@ -396,7 +421,12 @@ gl.texSubImage3D(gl.TEXTURE_3D, 0, testCase.xoffset, testCase.yoffset, testCase.zoffset, subWidth, subHeight, subDepth, gl.RGB, gl.UNSIGNED_BYTE, useUnpackBuffer ? 0 : array); - wtu.glErrorShouldBe(gl, gl.NO_ERROR, "texSubImage3D with correct buffer size should succeed"); + if (testCase.validUnpackParamsForSub3D) { + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "texSubImage3D with correct buffer size should succeed"); + } else { + wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid unpack params combination"); + return; + } buffer1 = unpackPixels(array, subWidth, subHeight, subDepth, imageSizes); buffer2 = getPixelsFromTexture3D(gl, tex, testCase.xoffset, testCase.yoffset, testCase.zoffset, @@ -422,85 +452,137 @@ // For 2D cases, depth, zoffset, imageHeight, skipImages are ignored. var testCases = [ { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 1, rowLength: 0, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0 }, + alignment: 1, rowLength: 0, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: true, validUnpackParamsForSub3D: true }, { width: 5, height: 7, depth: 4, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 2, rowLength: 0, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0 }, + alignment: 2, rowLength: 0, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: true, validUnpackParamsForSub3D: true }, { width: 6, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 4, rowLength: 0, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0 }, + alignment: 4, rowLength: 0, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: true, validUnpackParamsForSub3D: true }, { width: 5, height: 8, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 8, rowLength: 0, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0 }, + alignment: 8, rowLength: 0, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: true, validUnpackParamsForSub3D: true }, // ROW_LENGTH == width { width: 10, height: 9, depth: 2, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 4, rowLength: 10, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0 }, + alignment: 4, rowLength: 10, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: true, validUnpackParamsForSub3D: true }, // ROW_LENGTH < width { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 1, rowLength: 4, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0 }, + alignment: 1, rowLength: 4, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: false, validUnpackParams3D: false }, { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 2, rowLength: 4, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0 }, + alignment: 2, rowLength: 4, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: false, validUnpackParams3D: false }, { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 4, rowLength: 4, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0 }, + alignment: 4, rowLength: 4, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: false, validUnpackParams3D: false }, { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 8, rowLength: 4, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0 }, + alignment: 8, rowLength: 4, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: false, validUnpackParams3D: false }, // ROW_LENGTH > width { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 1, rowLength: 6, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0 }, - { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 2, rowLength: 7, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0 }, - { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 4, rowLength: 8, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0 }, + alignment: 1, rowLength: 6, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: true, validUnpackParamsForSub3D: true }, + { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, + alignment: 2, rowLength: 7, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: true, validUnpackParamsForSub3D: true }, + { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, + alignment: 4, rowLength: 8, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: true, validUnpackParamsForSub3D: true }, { width: 5, height: 7, depth: 5, xoffset: 2, yoffset: 3, zoffset: 2, - alignment: 8, rowLength: 9, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0 }, + alignment: 8, rowLength: 9, imageHeight: 0, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: true, validUnpackParamsForSub3D: true }, // IMAGE_HEIGHT == height { width: 6, height: 7, depth: 4, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 8, rowLength: 0, imageHeight: 7, skipPixels: 0, skipRows: 0, skipImages: 0 }, + alignment: 8, rowLength: 0, imageHeight: 7, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: true, validUnpackParamsForSub3D: true }, // IMAGE_HEIGHT < height { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 1, rowLength: 0, imageHeight: 6, skipPixels: 0, skipRows: 0, skipImages: 0 }, - { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 2, rowLength: 0, imageHeight: 6, skipPixels: 0, skipRows: 0, skipImages: 0 }, - { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 4, rowLength: 0, imageHeight: 6, skipPixels: 0, skipRows: 0, skipImages: 0 }, - { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 8, rowLength: 0, imageHeight: 6, skipPixels: 0, skipRows: 0, skipImages: 0 }, + alignment: 1, rowLength: 0, imageHeight: 6, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: false }, + { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, + alignment: 2, rowLength: 0, imageHeight: 6, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: false }, + { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, + alignment: 4, rowLength: 0, imageHeight: 6, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: false }, + { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, + alignment: 8, rowLength: 0, imageHeight: 6, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: false }, // IMAGE_HEIGHT > height { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 1, rowLength: 0, imageHeight: 8, skipPixels: 0, skipRows: 0, skipImages: 0 }, + alignment: 1, rowLength: 0, imageHeight: 8, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: true, validUnpackParamsForSub3D: true }, { width: 6, height: 7, depth: 3, xoffset: 2, yoffset: 2, zoffset: 1, - alignment: 2, rowLength: 0, imageHeight: 9, skipPixels: 0, skipRows: 0, skipImages: 0 }, + alignment: 2, rowLength: 0, imageHeight: 9, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: true, validUnpackParamsForSub3D: true }, { width: 7, height: 7, depth: 3, xoffset: 2, yoffset: 4, zoffset: 1, - alignment: 4, rowLength: 0, imageHeight: 10, skipPixels: 0, skipRows: 0, skipImages: 0 }, + alignment: 4, rowLength: 0, imageHeight: 10, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: true, validUnpackParamsForSub3D: true }, { width: 8, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 8, rowLength: 0, imageHeight: 11, skipPixels: 0, skipRows: 0, skipImages: 0 }, + alignment: 8, rowLength: 0, imageHeight: 11, skipPixels: 0, skipRows: 0, skipImages: 0, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: true, validUnpackParamsForSub3D: true }, // SKIP parameters { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 1, rowLength: 0, imageHeight: 0, skipPixels: 10, skipRows: 0, skipImages: 0 }, + alignment: 1, rowLength: 0, imageHeight: 0, skipPixels: 10, skipRows: 0, skipImages: 0, + validUnpackParams2D: false, validUnpackParams3D: false }, { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 2, rowLength: 0, imageHeight: 0, skipPixels: 2, skipRows: 8, skipImages: 0 }, + alignment: 2, rowLength: 0, imageHeight: 0, skipPixels: 2, skipRows: 8, skipImages: 0, + validUnpackParams2D: false, validUnpackParams3D: false }, { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 4, rowLength: 0, imageHeight: 0, skipPixels: 3, skipRows: 5, skipImages: 1 }, + alignment: 4, rowLength: 0, imageHeight: 0, skipPixels: 3, skipRows: 5, skipImages: 1, + validUnpackParams2D: false, validUnpackParams3D: false }, { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 8, rowLength: 0, imageHeight: 0, skipPixels: 7, skipRows: 0, skipImages: 2 }, + alignment: 8, rowLength: 0, imageHeight: 0, skipPixels: 7, skipRows: 0, skipImages: 2, + validUnpackParams2D: false, validUnpackParams3D: false }, // all mixed. { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 1, rowLength: 6, imageHeight: 6, skipPixels: 3, skipRows: 5, skipImages: 1 }, + alignment: 1, rowLength: 6, imageHeight: 6, skipPixels: 3, skipRows: 5, skipImages: 1, + validUnpackParams2D: false, validUnpackParams3D: false }, { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 2, rowLength: 4, imageHeight: 8, skipPixels: 7, skipRows: 2, skipImages: 2 }, + alignment: 2, rowLength: 4, imageHeight: 8, skipPixels: 7, skipRows: 2, skipImages: 2, + validUnpackParams2D: false, validUnpackParams3D: false }, { width: 5, height: 7, depth: 3, xoffset: 2, yoffset: 3, zoffset: 1, - alignment: 4, rowLength: 10, imageHeight: 2, skipPixels: 0, skipRows: 3, skipImages: 1 }, + alignment: 4, rowLength: 10, imageHeight: 2, skipPixels: 0, skipRows: 3, skipImages: 1, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: false }, { width: 1, height: 1, depth: 1, xoffset: 0, yoffset: 0, zoffset: 0, - alignment: 2, rowLength: 3, imageHeight: 2, skipPixels: 3, skipRows: 5, skipImages: 1 }, + alignment: 2, rowLength: 3, imageHeight: 2, skipPixels: 3, skipRows: 5, skipImages: 1, + validUnpackParams2D: false, validUnpackParams3D: false }, { width: 17, height: 6, depth: 4, xoffset: 12, yoffset: 3, zoffset: 2, - alignment: 2, rowLength: 4, imageHeight: 8, skipPixels: 1, skipRows: 4, skipImages: 2 }, + alignment: 2, rowLength: 4, imageHeight: 8, skipPixels: 1, skipRows: 4, skipImages: 2, + validUnpackParams2D: false, validUnpackParams3D: false }, { width: 8, height: 17, depth: 3, xoffset: 2, yoffset: 13, zoffset: 1, - alignment: 4, rowLength: 9, imageHeight: 2, skipPixels: 0, skipRows: 3, skipImages: 1 }, + alignment: 4, rowLength: 9, imageHeight: 2, skipPixels: 0, skipRows: 3, skipImages: 1, + validUnpackParams2D: true, validUnpackParamsForSub2D: true, + validUnpackParams3D: false }, ]; // Upload textures from client data diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/webgl_canvas/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/webgl_canvas/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/textures/webgl_canvas/00_test_list.txt 2017-01-13 01:37:11.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/textures/webgl_canvas/00_test_list.txt 2017-01-16 01:38:18.000000000 +0000 @@ -15,8 +15,8 @@ tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html tex-2d-r11f_g11f_b10f-rgb-half_float.html tex-2d-r11f_g11f_b10f-rgb-float.html -tex-2d-rgb9_e5-rgb-half_float.html -tex-2d-rgb9_e5-rgb-float.html +//tex-2d-rgb9_e5-rgb-half_float.html // crbug.com/663188 , Apple Radar 29259244 +//tex-2d-rgb9_e5-rgb-float.html // crbug.com/663188 , Apple Radar 29259244 tex-2d-rgb16f-rgb-half_float.html tex-2d-rgb16f-rgb-float.html tex-2d-rgb32f-rgb-float.html @@ -48,8 +48,8 @@ tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html tex-3d-r11f_g11f_b10f-rgb-half_float.html tex-3d-r11f_g11f_b10f-rgb-float.html -tex-3d-rgb9_e5-rgb-half_float.html -tex-3d-rgb9_e5-rgb-float.html +//tex-3d-rgb9_e5-rgb-half_float.html // crbug.com/663188 , Apple Radar 29259244 +//tex-3d-rgb9_e5-rgb-float.html // crbug.com/663188 , Apple Radar 29259244 tex-3d-rgb16f-rgb-half_float.html tex-3d-rgb16f-rgb-float.html tex-3d-rgb32f-rgb-float.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/00_test_list.txt 2017-01-13 01:37:12.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/00_test_list.txt 2017-01-16 01:38:19.000000000 +0000 @@ -1 +1,3 @@ transform_feedback.html +two-unreferenced-varyings.html +unwritten-output-defaults-to-zero.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/transform_feedback.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/transform_feedback.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/transform_feedback.html 2017-01-13 01:37:12.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/transform_feedback.html 2017-01-16 01:38:19.000000000 +0000 @@ -78,6 +78,7 @@ runBindingTest(); runObjectTest(); + runGetBufferSubDataTest(); runOneOutFeedbackTest(); runTwoOutFeedbackTest(); } @@ -85,15 +86,15 @@ function runBindingTest() { debug(""); debug("Testing binding enum"); - + shouldBe("gl.TRANSFORM_FEEDBACK_BINDING", "0x8E25"); - + gl.getParameter(gl.TRANSFORM_FEEDBACK_BINDING); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "TRANSFORM_FEEDBACK_BINDING query should succeed"); - + // Default value is null shouldBe("gl.getParameter(gl.TRANSFORM_FEEDBACK_BINDING)", "null"); - + debug("Testing binding a Transform Feedback object"); tf = gl.createTransformFeedback(); tf1 = gl.createTransformFeedback(); @@ -115,11 +116,11 @@ function runObjectTest() { debug(""); debug("Testing object creation"); - + tf = gl.createTransformFeedback(); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "createTransformFeedback should not set an error"); shouldBeNonNull("tf"); - + // Expect false if never bound shouldBeFalse("gl.isTransformFeedback(tf)"); gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, tf); @@ -128,7 +129,7 @@ shouldBeTrue("gl.isTransformFeedback(tf)"); gl.deleteTransformFeedback(tf); shouldBeFalse("gl.isTransformFeedback(tf)"); - + shouldBeFalse("gl.isTransformFeedback(null)"); tf = null; @@ -289,6 +290,84 @@ requestAnimationFrame(completeTransformFeedbackQueryTest); } +var retArray; + +function verifyGetBufferSubData(expected) { + wtu.shouldGenerateGLError(gl, expected, "gl.getBufferSubData(gl.TRANSFORM_FEEDBACK_BUFFER, 0, retArray, 0, retArray.length)"); +} + +function runGetBufferSubDataTest() { + debug(""); + debug("Test that getBufferSubData..."); + + // Build the input and output buffers + var in_data = [ + 1.0, 2.0, 3.0, 4.0, + 2.0, 4.0, 8.0, 16.0, + 0.75, 0.5, 0.25, 0.0 + ]; + + retArray = new Float32Array(in_data.length); + + var in_buffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, in_buffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(in_data), gl.STATIC_DRAW); + + var out_add_buffer = gl.createBuffer(); + gl.bindBuffer(gl.TRANSFORM_FEEDBACK_BUFFER, out_add_buffer); + gl.bufferData(gl.TRANSFORM_FEEDBACK_BUFFER, Float32Array.BYTES_PER_ELEMENT * in_data.length, gl.STATIC_DRAW); + + // Create the transform feedback shader + program = wtu.setupTransformFeedbackProgram(gl, ["vshader", "fshader"], + ["out_add"], gl.SEPARATE_ATTRIBS, + ["in_data"]); + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "linking transform feedback shader should not set an error"); + shouldBeNonNull("program"); + + // Draw the the transform feedback buffers + tf = gl.createTransformFeedback(); + + gl.enableVertexAttribArray(0); + gl.bindBuffer(gl.ARRAY_BUFFER, in_buffer); + gl.vertexAttribPointer(0, 4, gl.FLOAT, false, 16, 0); + + gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, null); + + debug("... passes when a transform feedback object is not bound"); + verifyGetBufferSubData(gl.NO_ERROR); + + gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, tf); + gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, out_add_buffer); + + debug("... passes when a transform feedback object is bound but not active"); + verifyGetBufferSubData(gl.NO_ERROR); + + gl.enable(gl.RASTERIZER_DISCARD); + gl.beginTransformFeedback(gl.POINTS); + + debug("... fails when a transform feedback object is active"); + verifyGetBufferSubData(gl.INVALID_OPERATION); + + gl.drawArrays(gl.POINTS, 0, 3); + + gl.endTransformFeedback(); + gl.disable(gl.RASTERIZER_DISCARD); + + gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, null); + + // Verify the output buffer contents + var add_expected = [ + 3.0, 5.0, 7.0, 9.0, + 4.0, 7.0, 12.0, 21.0, + 2.75, 3.5, 4.25, 5.0 + ]; + gl.bindBuffer(gl.TRANSFORM_FEEDBACK_BUFFER, out_add_buffer); + wtu.checkFloatBuffer(gl, gl.TRANSFORM_FEEDBACK_BUFFER, add_expected); + + tf = null; + program = null; +} + function completeTransformFeedbackQueryTest() { debug(""); debug("Testing TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN query"); @@ -315,6 +394,22 @@ runVaryingsTest(); } +function verifyTransformFeedbackVarying(prog, index, valid, name) { + activeInfo = gl.getTransformFeedbackVarying(prog, index); + if (valid) { + wtu.glErrorShouldBe(gl, gl.NO_ERROR, + "Should be no errors from valid getTransformFeedbackVarying."); + shouldBeNonNull("activeInfo"); + shouldBe("activeInfo.name", "'" + name + "'"); + shouldBe("activeInfo.type", "gl.FLOAT_VEC4"); + shouldBe("activeInfo.size", "1"); + } else { + wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, + "Should be INVALID_VALUE when calling getTransformFeedbackVarying with an invalid index."); + shouldBeNull("activeInfo"); + } +} + function runVaryingsTest() { debug(""); debug("Testing transform feedback varyings"); @@ -328,25 +423,27 @@ shouldBeNonNull("program"); // Check the varyings - activeInfo = gl.getTransformFeedbackVarying(program, 0); - wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors from valid getTransformFeedbackVarying."); - shouldBeNonNull("activeInfo"); - shouldBe("activeInfo.name", "'out_add'"); - shouldBe("activeInfo.type", "gl.FLOAT_VEC4"); - shouldBe("activeInfo.size", "1"); - - activeInfo = gl.getTransformFeedbackVarying(program, 1); - wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors from valid getTransformFeedbackVarying."); - shouldBeNonNull("activeInfo"); - shouldBe("activeInfo.name", "'out_mul'"); - shouldBe("activeInfo.type", "gl.FLOAT_VEC4"); - shouldBe("activeInfo.size", "1"); - - activeInfo = gl.getTransformFeedbackVarying(program, 2); - wtu.glErrorShouldBe(gl, gl.INVALID_VALUE, "Should be GL_INVALID_VALUE when calling getTransformFeedbackVarying with an invalid index."); - shouldBeNull("activeInfo"); + shouldBe("gl.getProgramParameter(program, gl.TRANSFORM_FEEDBACK_VARYINGS)", "2"); + verifyTransformFeedbackVarying(program, 0, true, "out_add"); + verifyTransformFeedbackVarying(program, 1, true, "out_mul"); + verifyTransformFeedbackVarying(program, 2, false); + + // transformFeedbackVaryings() doesn't take effect until a successful link. + gl.transformFeedbackVaryings(program, ["out_mul"], gl.SEPARATE_ATTRIBS); + shouldBe("gl.getProgramParameter(program, gl.TRANSFORM_FEEDBACK_VARYINGS)", "2"); + verifyTransformFeedbackVarying(program, 0, true, "out_add"); + verifyTransformFeedbackVarying(program, 1, true, "out_mul"); + verifyTransformFeedbackVarying(program, 2, false); + + // Now relink. + gl.linkProgram(program); + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "linking transform feedback shader should not set an error"); + shouldBeTrue("gl.getProgramParameter(program, gl.LINK_STATUS)"); + shouldBe("gl.getProgramParameter(program, gl.TRANSFORM_FEEDBACK_VARYINGS)", "1"); + verifyTransformFeedbackVarying(program, 0, true, "out_mul"); + verifyTransformFeedbackVarying(program, 1, false); + verifyTransformFeedbackVarying(program, 2, false); - wtu.glErrorShouldBe(gl, gl.NO_ERROR, "there should be no errors"); finishTest(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/two-unreferenced-varyings.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/two-unreferenced-varyings.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/two-unreferenced-varyings.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/two-unreferenced-varyings.html 2017-01-16 01:38:19.000000000 +0000 @@ -0,0 +1,157 @@ + + + + + + +WebGL Transform Feedback Conformance Tests + + + + + +
    + +
    + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/unwritten-output-defaults-to-zero.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/unwritten-output-defaults-to-zero.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/unwritten-output-defaults-to-zero.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/transform_feedback/unwritten-output-defaults-to-zero.html 2017-01-16 01:38:19.000000000 +0000 @@ -0,0 +1,154 @@ + + + + + + +WebGL Transform Feedback Conformance Tests + + + + + +
    + +
    + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/vertex_arrays/vertex-array-object.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/vertex_arrays/vertex-array-object.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/conformance2/vertex_arrays/vertex-array-object.html 2017-01-13 01:37:12.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/conformance2/vertex_arrays/vertex-array-object.html 2017-01-16 01:38:19.000000000 +0000 @@ -83,19 +83,19 @@ function runBindingTest() { debug("Testing binding enum"); - + shouldBe("gl.VERTEX_ARRAY_BINDING", "0x85B5"); - + gl.getParameter(gl.VERTEX_ARRAY_BINDING); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "VERTEX_ARRAY_BINDING query should succeed"); - + // Default value is null if (gl.getParameter(gl.VERTEX_ARRAY_BINDING) === null) { testPassed("Default value of VERTEX_ARRAY_BINDING is null"); } else { testFailed("Default value of VERTEX_ARRAY_BINDING is not null"); } - + debug("Testing binding a VAO"); var vao0 = gl.createVertexArray(); var vao1 = gl.createVertexArray(); @@ -123,77 +123,77 @@ function runObjectTest() { debug("Testing object creation"); - + vao = gl.createVertexArray(); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "createVertexArray should not set an error"); shouldBeNonNull("vao"); - + // Expect false if never bound shouldBeFalse("gl.isVertexArray(vao)"); gl.bindVertexArray(vao); shouldBeTrue("gl.isVertexArray(vao)"); gl.bindVertexArray(null); shouldBeTrue("gl.isVertexArray(vao)"); - + shouldBeFalse("gl.isVertexArray(null)"); - + gl.deleteVertexArray(vao); vao = null; } function runAttributeTests() { debug("Testing attributes work across bindings"); - + var states = []; - + var attrCount = gl.getParameter(gl.MAX_VERTEX_ATTRIBS); for (var n = 0; n < attrCount; n++) { gl.bindBuffer(gl.ARRAY_BUFFER, null); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null); - + var state = {}; states.push(state); - + var vao = state.vao = gl.createVertexArray(); gl.bindVertexArray(vao); - + var enableArray = (n % 2 == 0); if (enableArray) { gl.enableVertexAttribArray(n); } else { gl.disableVertexAttribArray(n); } - + if (enableArray) { var buffer = state.buffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buffer); gl.bufferData(gl.ARRAY_BUFFER, 1024, gl.STATIC_DRAW); - + gl.vertexAttribPointer(n, 1 + n % 4, gl.FLOAT, true, n * 4, n * 4); } - + if (enableArray) { var elbuffer = state.elbuffer = gl.createBuffer(); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elbuffer); gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, 1024, gl.STATIC_DRAW); } - + gl.bindVertexArray(null); } - + var anyMismatch = false; for (var n = 0; n < attrCount; n++) { var state = states[n]; - + gl.bindVertexArray(state.vao); - + var shouldBeEnabled = (n % 2 == 0); var isEnabled = gl.getVertexAttrib(n, gl.VERTEX_ATTRIB_ARRAY_ENABLED); if (shouldBeEnabled != isEnabled) { testFailed("VERTEX_ATTRIB_ARRAY_ENABLED not preserved"); anyMismatch = true; } - + var buffer = gl.getVertexAttrib(n, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING); if (shouldBeEnabled) { if (buffer == state.buffer) { @@ -219,7 +219,7 @@ anyMismatch = true; } } - + var elbuffer = gl.getParameter(gl.ELEMENT_ARRAY_BUFFER_BINDING); if (shouldBeEnabled) { if (elbuffer == state.elbuffer) { @@ -241,7 +241,7 @@ if (!anyMismatch) { testPassed("All attributes preserved across bindings"); } - + for (var n = 0; n < attrCount; n++) { var state = states[n]; gl.deleteVertexArray(state.vao); @@ -250,59 +250,59 @@ function runAttributeValueTests() { debug("Testing that attribute values are not attached to bindings"); - + var v; var vao0 = gl.createVertexArray(); var anyFailed = false; - + gl.bindVertexArray(null); gl.vertexAttrib4f(0, 0, 1, 2, 3); - + v = gl.getVertexAttrib(0, gl.CURRENT_VERTEX_ATTRIB); if (!(v[0] == 0 && v[1] == 1 && v[2] == 2 && v[3] == 3)) { testFailed("Vertex attrib value not round-tripped?"); anyFailed = true; } - + gl.bindVertexArray(vao0); - + v = gl.getVertexAttrib(0, gl.CURRENT_VERTEX_ATTRIB); if (!(v[0] == 0 && v[1] == 1 && v[2] == 2 && v[3] == 3)) { testFailed("Vertex attrib value reset across bindings"); anyFailed = true; } - + gl.vertexAttrib4f(0, 4, 5, 6, 7); gl.bindVertexArray(null); - + v = gl.getVertexAttrib(0, gl.CURRENT_VERTEX_ATTRIB); if (!(v[0] == 4 && v[1] == 5 && v[2] == 6 && v[3] == 7)) { testFailed("Vertex attrib value bound to buffer"); anyFailed = true; } - + if (!anyFailed) { testPassed("Vertex attribute values are not attached to bindings") } - + gl.bindVertexArray(null); gl.deleteVertexArray(vao0); } function runDrawTests() { debug("Testing draws with various VAO bindings"); - + canvas.width = 50; canvas.height = 50; gl.viewport(0, 0, canvas.width, canvas.height); - + var vao0 = gl.createVertexArray(); var vao1 = gl.createVertexArray(); var opt_positionLocation = 0; var opt_texcoordLocation = 1; - + var program = wtu.setupSimpleTextureProgram(gl, opt_positionLocation, opt_texcoordLocation); - + function setupQuad(s) { var vertexObject = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, vertexObject); @@ -328,7 +328,7 @@ gl.enableVertexAttribArray(opt_texcoordLocation); gl.vertexAttribPointer(opt_texcoordLocation, 2, gl.FLOAT, false, 0, 0); }; - + function readLocation(x, y) { var pixels = new Uint8Array(1 * 1 * 4); gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixels); @@ -367,14 +367,14 @@ testFailed("Draw " + drawNumber + " failed pixel test"); } }; - + // Setup all bindings setupQuad(1); gl.bindVertexArray(vao0); setupQuad(0.5); gl.bindVertexArray(vao1); setupQuad(0.25); - + // Verify drawing gl.bindVertexArray(null); verifyDraw(0, 1); @@ -382,7 +382,7 @@ verifyDraw(1, 0.5); gl.bindVertexArray(vao1); verifyDraw(2, 0.25); - + gl.bindVertexArray(null); gl.deleteVertexArray(vao0); gl.deleteVertexArray(vao1); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/00_test_list.txt 2017-01-13 01:37:12.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/00_test_list.txt 2017-01-16 01:38:19.000000000 +0000 @@ -1,7 +1,7 @@ // files that end in .txt list other tests // other lines are assumed to be .html files ---min-version 1.0.4 data/gles2/shaders/00_test_list.txt +--min-version 1.0.4 --max-version 1.9.9 data/gles2/shaders/00_test_list.txt --min-version 2.0.0 data/gles3/shaders/00_test_list.txt --min-version 2.0.0 framework/opengl/simplereference/00_test_list.txt ---min-version 2.0.0 functional/gles3/00_test_list.txt \ No newline at end of file +--min-version 2.0.0 functional/gles3/00_test_list.txt Binary files /tmp/tmpyf9cWy/Fm1wAFW8Cg/firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/compiler.jar and /tmp/tmpyf9cWy/hqwVq4DwOk/firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/compiler.jar differ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/conditionals.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/conditionals.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/conditionals.html 2017-01-13 01:37:12.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/conditionals.html 2017-01-16 01:38:19.000000000 +0000 @@ -30,7 +30,7 @@ modules.shared.glsShaderLibrary.run(testName, getFilter()) - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/constant_expressions.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/constant_expressions.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/constant_expressions.html 2017-01-13 01:37:12.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/constant_expressions.html 2017-01-16 01:38:19.000000000 +0000 @@ -30,7 +30,7 @@ modules.shared.glsShaderLibrary.run(testName, getFilter()) - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/constants.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/constants.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/constants.html 2017-01-13 01:37:12.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/constants.html 2017-01-16 01:38:19.000000000 +0000 @@ -30,7 +30,7 @@ modules.shared.glsShaderLibrary.run(testName, getFilter()) - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/conversions.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/conversions.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/conversions.html 2017-01-13 01:37:12.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/conversions.html 2017-01-16 01:38:19.000000000 +0000 @@ -30,7 +30,7 @@ modules.shared.glsShaderLibrary.run(testName, getFilter()) - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/declarations.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/declarations.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/declarations.html 2017-01-13 01:37:12.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/declarations.html 2017-01-16 01:38:19.000000000 +0000 @@ -30,7 +30,7 @@ modules.shared.glsShaderLibrary.run(testName, getFilter()) - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/fragdata.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/fragdata.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/fragdata.html 2017-01-13 01:37:12.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/fragdata.html 2017-01-16 01:38:19.000000000 +0000 @@ -30,7 +30,7 @@ modules.shared.glsShaderLibrary.run(testName, getFilter()) - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/functions.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/functions.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/functions.html 2017-01-13 01:37:12.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/functions.html 2017-01-16 01:38:19.000000000 +0000 @@ -30,7 +30,7 @@ modules.shared.glsShaderLibrary.run(testName, getFilter()) - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/invalid_texture_functions.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/invalid_texture_functions.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/invalid_texture_functions.html 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/invalid_texture_functions.html 2017-01-16 01:38:19.000000000 +0000 @@ -30,7 +30,7 @@ modules.shared.glsShaderLibrary.run(testName, getFilter()) - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/keywords.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/keywords.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/keywords.html 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/keywords.html 2017-01-16 01:38:19.000000000 +0000 @@ -30,7 +30,7 @@ modules.shared.glsShaderLibrary.run(testName, getFilter()) - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/linkage.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/linkage.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/linkage.html 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/linkage.html 2017-01-16 01:38:19.000000000 +0000 @@ -30,7 +30,7 @@ modules.shared.glsShaderLibrary.run(testName, getFilter()) - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/preprocessor.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/preprocessor.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/preprocessor.html 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/preprocessor.html 2017-01-16 01:38:19.000000000 +0000 @@ -30,7 +30,7 @@ modules.shared.glsShaderLibrary.run(testName, getFilter()) - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/preprocessor.test firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/preprocessor.test --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/preprocessor.test 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/preprocessor.test 2017-01-16 01:38:19.000000000 +0000 @@ -1306,6 +1306,9 @@ case basic_2 values { output float out0 = 1.0; } + # Note: this is expected to fail contrary to native dEQP, + # see https://github.com/KhronosGroup/WebGL/pull/1523 + expect compile_fail both "" precision mediump float; ${DECLARATIONS} @@ -2642,65 +2645,20 @@ group pragmas "Pragma Tests" - case pragma_vertex - values { output float out0 = 1.0; } - - vertex "" - #pragma - #pragma STDGL invariant(all) - #pragma debug(off) - #pragma optimize(off) - - precision mediump float; - ${VERTEX_DECLARATIONS} - varying float v_val; - void main() - { - v_val = 1.0; - ${VERTEX_OUTPUT} - } - "" - fragment "" - precision mediump float; - ${FRAGMENT_DECLARATIONS} - invariant varying float v_val; - void main() - { - out0 = v_val; - ${FRAGMENT_OUTPUT} - } - "" - end - - case pragma_fragment - values { output float out0 = 1.0; } - - vertex "" - precision mediump float; - ${VERTEX_DECLARATIONS} - varying float v_val; - void main() - { - v_val = 1.0; - ${VERTEX_OUTPUT} - } - "" - fragment "" - #pragma - #pragma STDGL invariant(all) - #pragma debug(off) - #pragma optimize(off) - - precision mediump float; - ${FRAGMENT_DECLARATIONS} - varying float v_val; - void main() - { - out0 = v_val; - ${FRAGMENT_OUTPUT} - } - "" - end + # Note: pragma_vertex was removed compared to the native dEQP. + # This test was in the gles2-failures.txt skip list in the + # native dEQP. While it seemed theoretically correct, in + # practice, linking the program failed on Mac OS on all GPU + # types. Since this version of the dEQP is unlikely to be + # revisited, the test was removed here, rather than adding it + # to tcuSkipList.js. + + # Note: pragma_fragment was removed compared to the native dEQP. + # This test was buggy; it required that a varying that was not + # invariant in the vertex shader, but invariant in the fragment + # shader, must link. The test was in the gles2-failures.txt skip + # list in the native test suite. To avoid confusion the test was + # removed here, rather than adding it to tcuSkipList.js. case pragma_macro_exp values { output float out0 = 1.0; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/qualification_order.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/qualification_order.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/qualification_order.html 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/qualification_order.html 2017-01-16 01:38:19.000000000 +0000 @@ -30,7 +30,7 @@ modules.shared.glsShaderLibrary.run(testName, getFilter()) - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/reserved_operators.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/reserved_operators.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/reserved_operators.html 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/reserved_operators.html 2017-01-16 01:38:19.000000000 +0000 @@ -30,7 +30,7 @@ modules.shared.glsShaderLibrary.run(testName, getFilter()) - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/scoping.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/scoping.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/scoping.html 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/scoping.html 2017-01-16 01:38:19.000000000 +0000 @@ -30,7 +30,7 @@ modules.shared.glsShaderLibrary.run(testName, getFilter()) - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/shader-lib-test.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/shader-lib-test.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/shader-lib-test.html 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/shader-lib-test.html 2017-01-16 01:38:19.000000000 +0000 @@ -14,448 +14,448 @@
    diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/swizzles.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/swizzles.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/swizzles.html 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/swizzles.html 2017-01-16 01:38:19.000000000 +0000 @@ -30,7 +30,7 @@ modules.shared.glsShaderLibrary.run(testName, getFilter()) - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/template.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/template.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/template.html 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles2/shaders/template.html 2017-01-16 01:38:19.000000000 +0000 @@ -30,7 +30,7 @@ modules.shared.glsShaderLibrary.run(testName, getFilter()) - + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles3/shaders/linkage.test firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles3/shaders/linkage.test --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles3/shaders/linkage.test 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles3/shaders/linkage.test 2017-01-16 01:38:19.000000000 +0000 @@ -464,20 +464,16 @@ "" end - # different interpolation - case differing_interpolation_1 + # interpolation_mismatch + case interpolation_mismatch_1 version 300 es desc "varying interpolation different (flat vs. smooth)" expect link_fail - values - { - input float in0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ]; - output float out0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ]; - } vertex "" #version 300 es ${VERTEX_DECLARATIONS} + in highp float in0; flat out mediump float var; void main() { @@ -492,8 +488,7 @@ in mediump float var; void main() { - out0 = var; - ${FRAGMENT_OUTPUT} + ${FRAG_COLOR} = vec4(var); } "" end @@ -502,7 +497,6 @@ case differing_interpolation_2 version 300 es desc "varying interpolation different (smooth vs. centroid)" - expect link_fail values { input float in0 = [ -1.25 | -25.0 | 1.0 | 2.25 | 3.4 | 16.0 ]; @@ -2348,6 +2342,125 @@ end group uniform "Uniform linkage" + group basic "Default block uniforms of scalar and vector types" + case precision_conflict_1 + version 300 es + desc "Vertex side uniform has highp, fragment side uniform mediump." + expect link_fail + values {output float out0 = 3.0;} + vertex "" + #version 300 es + ${VERTEX_DECLARATIONS} + uniform highp float u_val; + out mediump float res; + void main() + { + res = u_val; + ${VERTEX_OUTPUT} + } + "" + fragment "" + #version 300 es + precision mediump float; + uniform float u_val; + ${FRAGMENT_DECLARATIONS} + in mediump float res; + void main() + { + out0 = u_val + res; + ${FRAGMENT_OUTPUT} + } + "" + end + case precision_conflict_2 + version 300 es + desc "Vertex side uniform has highp, fragment side uniform mediump." + expect link_fail + values {output float out0 = 3.0;} + vertex "" + #version 300 es + ${VERTEX_DECLARATIONS} + uniform highp float u_val; + out mediump float res; + void main() + { + res = u_val; + ${VERTEX_OUTPUT} + } + "" + fragment "" + #version 300 es + precision highp float; + uniform mediump float u_val; + ${FRAGMENT_DECLARATIONS} + in mediump float res; + void main() + { + out0 = u_val + res; + ${FRAGMENT_OUTPUT} + } + "" + end + case precision_conflict_3 + version 300 es + desc "Vertex side uniform has lowp, fragment side uniform highp." + expect link_fail + values {output float out0 = 3.0;} + vertex "" + #version 300 es + ${VERTEX_DECLARATIONS} + uniform lowp int u_val; + out mediump float res; + void main() + { + res = float(u_val); + ${VERTEX_OUTPUT} + } + "" + fragment "" + #version 300 es + precision highp float; + uniform highp int u_val; + ${FRAGMENT_DECLARATIONS} + in mediump float res; + void main() + { + out0 = float(u_val) + res; + ${FRAGMENT_OUTPUT} + } + "" + end + case precision_conflict_4 + version 300 es + desc "Vertex side uniform has lowp, fragment side uniform mediump." + expect link_fail + values {output float out0 = 3.0;} + vertex "" + #version 300 es + ${VERTEX_DECLARATIONS} + uniform lowp vec3 u_val; + out mediump float res; + void main() + { + res = u_val.y; + ${VERTEX_OUTPUT} + } + "" + fragment "" + #version 300 es + precision highp float; + uniform mediump vec3 u_val; + ${FRAGMENT_DECLARATIONS} + in mediump float res; + void main() + { + out0 = u_val.z + res; + ${FRAGMENT_OUTPUT} + } + "" + end + end + group struct "Uniform structs" # Struct linkage handling case basic @@ -3494,43 +3607,6 @@ end group block "Uniform blocks" - case precision_mismatch - version 300 es - expect link_fail - vertex "" - #version 300 es - - uniform Block - { - highp vec4 val; - }; - - ${VERTEX_DECLARATIONS} - out mediump float res; - void main() - { - res = val.x; - ${VERTEX_OUTPUT} - } - "" - fragment "" - #version 300 es - - uniform Block - { - mediump vec4 val; - }; - - precision mediump float; - ${FRAGMENT_DECLARATIONS} - in mediump float res; - void main() - { - dEQP_FragColor = val; - } - "" - end - case type_mismatch version 300 es expect link_fail @@ -3606,46 +3682,9 @@ "" end - case layout_qualifier_mismatch_1 - version 300 es - expect link_fail - vertex "" - #version 300 es - - layout(std140) uniform Block - { - highp vec4 val; - }; - - ${VERTEX_DECLARATIONS} - out mediump float res; - void main() - { - res = val.x; - ${VERTEX_OUTPUT} - } - "" - fragment "" - #version 300 es - - uniform Block - { - highp vec4 val; - }; - - precision mediump float; - ${FRAGMENT_DECLARATIONS} - in mediump float res; - void main() - { - dEQP_FragColor = vec4(val); - } - "" - end - case layout_qualifier_mismatch_2 version 300 es - expect link_fail + expect compile_fail vertex "" #version 300 es diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles3/shaders/preprocessor.test firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles3/shaders/preprocessor.test --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/data/gles3/shaders/preprocessor.test 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/data/gles3/shaders/preprocessor.test 2017-01-16 01:38:19.000000000 +0000 @@ -1647,8 +1647,10 @@ case basic_2 version 300 es - expect compile_fail values { output float out0 = 1.0; } + # Note: this is expected to fail contrary to native dEQP, + # see https://github.com/KhronosGroup/WebGL/pull/1523 + expect compile_fail both "" #version 300 es precision mediump float; @@ -1669,8 +1671,10 @@ case defined_macro_defined_test version 300 es - expect compile_fail values { output float out0 = 1.0; } + # Note: this is expected to fail contrary to native dEQP, + # see https://github.com/KhronosGroup/WebGL/pull/1523 + expect compile_fail both "" #version 300 es precision mediump float; @@ -1691,8 +1695,10 @@ case defined_macro_undef version 300 es - expect compile_fail values { output float out0 = 1.0; } + # Note: this is expected to fail contrary to native dEQP, + # see https://github.com/KhronosGroup/WebGL/pull/1523 + expect compile_fail both "" #version 300 es precision mediump float; @@ -1715,8 +1721,10 @@ case define_defined version 300 es - expect compile_fail values { output float out0 = 1.0; } + # Note: this is expected to fail contrary to native dEQP, + # see https://github.com/KhronosGroup/WebGL/pull/1523 + expect compile_fail both "" #version 300 es precision mediump float; @@ -1739,8 +1747,10 @@ case define_defined_outside_if version 300 es - expect compile_fail values { output float out0 = 1.0; } + # Note: this is expected to fail contrary to native dEQP, + # see https://github.com/KhronosGroup/WebGL/pull/1523 + expect compile_fail both "" #version 300 es precision mediump float; @@ -3420,6 +3430,10 @@ end case pragma_unrecognized_token + # Note: upstream dEQP uses unicode characters here but we can't test + # this in WebGL because it requires strings passed to glShaderSource + # to be ASCII. This would cause the test to fail at glShaderSource + # instead of glCompileShader, which is not what we want to test. version 300 es expect build_successful both "" @@ -3583,6 +3597,10 @@ end case invalid_char_in_name + # Note: upstream dEQP uses unicode characters here but we can't test + # this in WebGL because it requires strings passed to glShaderSource + # to be ASCII. This would cause the test to fail at glShaderSource + # instead of glCompileShader, which is not what we want to test. version 300 es expect compile_fail both "" @@ -3598,6 +3616,10 @@ end case invalid_char_in_behavior + # Note: upstream dEQP uses unicode characters here but we can't test + # this in WebGL because it requires strings passed to glShaderSource + # to be ASCII. This would cause the test to fail at glShaderSource + # instead of glCompileShader, which is not what we want to test. version 300 es expect compile_fail both "" diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuCompressedTexture.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuCompressedTexture.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuCompressedTexture.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuCompressedTexture.js 2017-01-16 01:38:19.000000000 +0000 @@ -264,7 +264,6 @@ var dstOffset = (y * ETC2_BLOCK_WIDTH + x); var pixelBitNdx = 45 - 3 * pixelNdx; var modifierNdx = (getBit64(src, pixelBitNdx + 2) << 2) | (getBit64(src, pixelBitNdx + 1) << 1) | getBit64(src, pixelBitNdx); - // console.log('TableIndex: ' + tableNdx + ' ModifierNdx: ' + modifierNdx); var modifier = modifierTable[tableNdx][modifierNdx]; if (signedMode) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuImageCompare.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuImageCompare.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuImageCompare.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuImageCompare.js 2017-01-16 01:38:19.000000000 +0000 @@ -123,9 +123,10 @@ * @param {tcuTexture.ConstPixelBufferAccess} result Result image * @param {Array} threshold Maximum allowed difference * @param {tcuImageCompare.CompareLogMode=} logMode + * @param {Array< Array >} skipPixels pixels that are skipped comparison * @return {boolean} true if comparison passes, false otherwise */ -tcuImageCompare.intThresholdCompare = function(imageSetName, imageSetDesc, reference, result, threshold, logMode) { + tcuImageCompare.intThresholdCompare = function(imageSetName, imageSetDesc, reference, result, threshold, logMode, skipPixels) { var width = reference.getWidth(); var height = reference.getHeight(); var depth = reference.getDepth(); @@ -141,7 +142,19 @@ for (var z = 0; z < depth; z++) { for (var y = 0; y < height; y++) { for (var x = 0; x < width; x++) { - var refPix = reference.getPixelInt(x, y, z); + if (skipPixels && skipPixels.length > 0) { + var skip = false; + for (var ii = 0; ii < skipPixels.length; ++ii) { + var refZ = (skipPixels[ii].length > 2 ? skipPixels[ii][2] : 0); + if (x == skipPixels[ii][0] && y == skipPixels[ii][1] && z == refZ) { + skip = true; + break; + } + } + if (skip) + continue; + } + var refPix = reference.getPixelInt(x, y, z); var cmpPix = result.getPixelInt(x, y, z); var diff = deMath.absDiff(refPix, cmpPix); @@ -418,10 +431,11 @@ * @param {tcuSurface.Surface} result Result image * @param {Array} threshold Maximum allowed difference * @param {tcuImageCompare.CompareLogMode=} logMode + * @param {Array< Array >} skipPixels pixels that are skipped comparison * @return {boolean} true if comparison passes, false otherwise */ -tcuImageCompare.pixelThresholdCompare = function(imageSetName, imageSetDesc, reference, result, threshold, logMode) { - return tcuImageCompare.intThresholdCompare(imageSetName, imageSetDesc, reference.getAccess(), result.getAccess(), threshold, logMode); +tcuImageCompare.pixelThresholdCompare = function(imageSetName, imageSetDesc, reference, result, threshold, logMode, skipPixels) { + return tcuImageCompare.intThresholdCompare(imageSetName, imageSetDesc, reference.getAccess(), result.getAccess(), threshold, logMode, skipPixels); }; /** diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuRGBA.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuRGBA.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuRGBA.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuRGBA.js 2017-01-16 01:38:19.000000000 +0000 @@ -106,6 +106,19 @@ }; /** + * @param {Array} v + * @return {tcuRGBA.RGBA} + */ + tcuRGBA.newRGBAFromVec = function (v) { + var r = deMath.clamp(v[0] * 255.0, 0, 255); + var g = deMath.clamp(v[1] * 255.0, 0, 255); + var b = deMath.clamp(v[2] * 255.0, 0, 255); + var a = deMath.clamp(v[3] * 255.0, 0, 255); + + return new tcuRGBA.RGBA([r, g, b, a]); + }; + + /** * @param {number} v */ tcuRGBA.RGBA.prototype.setRed = function(v) { DE_ASSERT(deMath.deInRange32(v, 0, 255)); this.m_value[tcuRGBA.RGBA.Shift.RED] = v; }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuSkipList.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuSkipList.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuSkipList.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuSkipList.js 2017-01-16 01:38:19.000000000 +0000 @@ -43,6 +43,7 @@ var tcuSkipList = framework.common.tcuSkipList; var _skipEntries = {}; + var _wildcardSkipEntries = {}; var _reason = ""; function _setReason(reason) { @@ -50,7 +51,12 @@ } function _skip(testName) { - _skipEntries[testName] = _reason; + if(testName.indexOf("*") >= 0){ + testName = testName.split("*")[0]; + _wildcardSkipEntries[testName] = _reason; + }else{ + _skipEntries[testName] = _reason; + } } var runSkippedTests = false; @@ -79,13 +85,208 @@ _skip("texture_functions.textureprojoffset.sampler3d_fixed_fragment"); _skip("texture_functions.textureprojoffset.isampler3d_fragment"); _skip("texture_functions.textureprojoffset.usampler3d_fragment"); + // Please see https://android.googlesource.com/platform/external/deqp/+/master/android/cts/master/src/gles3-hw-issues.txt + _skip("texture_functions.textureprojlod.isampler3d_vertex"); + _skip("texture_functions.textureprojlod.usampler3d_vertex"); // Please see https://android.googlesource.com/platform/external/deqp/+/master/android/cts/master/src/gles3-test-issues.txt _skip("texture_functions.textureprojlodoffset.usampler3d_vertex"); _skip("texture_functions.textureoffset.sampler3d_float_fragment"); _skip("texture_functions.textureprojoffset.sampler3d_float_fragment"); // Please see https://android.googlesource.com/platform/external/deqp/+/master/android/cts/master/src/gles3-driver-issues.txt - _skip("texture_functions.texturegrad.samplercubeshadow_vertex"); - _skip("texture_functions.texturegrad.samplercubeshadow_fragment"); + _skip("texture_functions.textureprojlodoffset.isampler3d_vertex"); + _skip("texture_functions.texturegrad.samplercubeshadow*"); + + // https://android.googlesource.com/platform/external/deqp/+/0c1f83aee4709eef7ef2a3edd384f9c192f476fd/android/cts/master/src/gles3-hw-issues.txt#801 + _setReason("Tricky blit rects can result in imperfect copies on some HW."); + _skip("blit.rect.nearest_consistency_mag"); + _skip("blit.rect.nearest_consistency_mag_reverse_dst_x"); + _skip("blit.rect.nearest_consistency_mag_reverse_src_dst_x"); + _skip("blit.rect.nearest_consistency_mag_reverse_src_x"); + _skip("blit.rect.nearest_consistency_mag_reverse_src_y"); + _skip("blit.rect.nearest_consistency_min"); + _skip("blit.rect.nearest_consistency_min_reverse_dst_x"); + _skip("blit.rect.nearest_consistency_min_reverse_src_dst_x"); + _skip("blit.rect.nearest_consistency_min_reverse_src_x"); + _skip("blit.rect.nearest_consistency_out_of_bounds_mag"); + _skip("blit.rect.nearest_consistency_out_of_bounds_mag_reverse_dst_x"); + _skip("blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_dst_x"); + _skip("blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_x"); + _skip("blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_y"); + _skip("blit.rect.nearest_consistency_out_of_bounds_min"); + _skip("blit.rect.nearest_consistency_out_of_bounds_min_reverse_dst_x"); + _skip("blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_dst_x"); + _skip("blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_x"); + _skip("blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_y"); + + _setReason("Tricky blit rects can result in imperfect copies on Mac Intel driver."); + // crbug.com/658724 + // deqp/functional/gles3/framebufferblit/rect_03.html + _skip("blit.rect.nearest_consistency_mag_reverse_src_dst_y"); + // deqp/functional/gles3/framebufferblit/rect_04.html + _skip("blit.rect.nearest_consistency_min_reverse_src_dst_y"); + + // https://android.googlesource.com/platform/external/deqp/+/0c1f83aee4709eef7ef2a3edd384f9c192f476fd/android/cts/master/src/gles3-driver-issues.txt#381 + _setReason("Tricky blit rects can result in imperfect copies on some drivers."); + _skip("blit.rect.out_of_bounds_linear"); + _skip("blit.rect.out_of_bounds_reverse_src_x_linear"); + _skip("blit.rect.out_of_bounds_reverse_src_y_linear"); + _skip("blit.rect.out_of_bounds_reverse_dst_x_linear"); + _skip("blit.rect.out_of_bounds_reverse_dst_y_linear"); + _skip("blit.rect.out_of_bounds_reverse_src_dst_x_linear"); + _skip("blit.rect.out_of_bounds_reverse_src_dst_y_linear"); + + // https://android.googlesource.com/platform/external/deqp/+/0c1f83aee4709eef7ef2a3edd384f9c192f476fd/android/cts/master/src/gles3-driver-issues.txt#368 + _skip("blit.rect.nearest_consistency_out_of_bounds_mag_reverse_dst_y"); + _skip("blit.rect.nearest_consistency_out_of_bounds_mag_reverse_src_dst_y"); + _skip("blit.rect.nearest_consistency_out_of_bounds_min_reverse_dst_y"); + _skip("blit.rect.nearest_consistency_out_of_bounds_min_reverse_src_dst_y"); + + _setReason("Mac OSX drivers handle R11F_G11F_B10F format incorrectly"); + // https://github.com/KhronosGroup/WebGL/issues/1832 + // deqp/functional/gles3/fragmentoutput/basic.float.html + _skip("fragment_outputs.basic.float.r11f_g11f_b10f_mediump*"); + _skip("fragment_outputs.basic.float.r11f_g11f_b10f_highp*"); + // deqp/functional/gles3/fragmentoutput/array.float.html + _skip("fragment_outputs.array.float.r11f_g11f_b10f_mediump*"); + _skip("fragment_outputs.array.float.r11f_g11f_b10f_highp*"); + // deqp/functional/gles3/fragmentoutput/random_00.html + _skip("fragment_outputs.random.57"); + // deqp/functional/gles3/fragmentoutput/random_02.html + _skip("fragment_outputs.random.11"); + // deqp/functional/gles3/fborender/resize_01.html + _skip("render.resize.rbo_r11f_g11f_b10f"); + // deqp/functional/gles3/fborender/recreate_color_02.html + _skip("render.recreate_color.rbo_r11f_g11f_b10f_depth_stencil_rbo_depth24_stencil8"); + // deqp/functional/gles3/fbocolorbuffer/clear.html + _skip("color.clear.r11f_g11f_b10f"); + // deqp/functional/gles3/fbomultisample.2_samples.html + _skip("msaa.2_samples.r11f_g11f_b10f"); + // deqp/functional/gles3/fbomultisample.4_samples.html + _skip("msaa.4_samples.r11f_g11f_b10f"); + // deqp/functional/gles3/fbomultisample.8_samples.html + _skip("msaa.8_samples.r11f_g11f_b10f"); + + _setReason("Missing shadow sampler functions in D3D11"); + // https://github.com/KhronosGroup/WebGL/issues/1870 + // deqp/functional/gles3/shadertexturefunction/texture.html + _skip("texture_functions.texture.sampler2darrayshadow_vertex"); + // deqp/functional/gles3/shadertexturefunction/texturelod.html + _skip("texture_functions.texturelod.sampler2dshadow_vertex"); + _skip("texture_functions.texturelod.sampler2dshadow_fragment"); + // deqp/functional/gles3/shadertexturefunction/texturelodoffset.html + _skip("texture_functions.texturelodoffset.sampler2dshadow_vertex"); + _skip("texture_functions.texturelodoffset.sampler2dshadow_fragment"); + // deqp/functional/gles3/shadertexturefunction/textureprojlod.html + _skip("texture_functions.textureprojlod.sampler2dshadow_vertex"); + _skip("texture_functions.textureprojlod.sampler2dshadow_fragment"); + // deqp/functional/gles3/shadertexturefunction/textureprojlodoffset.html + _skip("texture_functions.textureprojlodoffset.sampler2dshadow_vertex"); + _skip("texture_functions.textureprojlodoffset.sampler2dshadow_fragment"); + // deqp/functional/gles3/shadertexturefunction/texturegrad.html + _skip("texture_functions.texturegrad.sampler2dshadow_vertex"); + _skip("texture_functions.texturegrad.sampler2dshadow_fragment"); + _skip("texture_functions.texturegrad.sampler2darrayshadow_vertex"); + _skip("texture_functions.texturegrad.sampler2darrayshadow_fragment"); + // deqp/functional/gles3/shadertexturefunction/texturegradoffset.html + _skip("texture_functions.texturegradoffset.sampler2dshadow_vertex"); + _skip("texture_functions.texturegradoffset.sampler2dshadow_fragment"); + _skip("texture_functions.texturegradoffset.sampler2darrayshadow_vertex"); + _skip("texture_functions.texturegradoffset.sampler2darrayshadow_fragment"); + // deqp/functional/gles3/shadertexturefunction/textureprojgrad.html + _skip("texture_functions.textureprojgrad.sampler2dshadow_vertex"); + _skip("texture_functions.textureprojgrad.sampler2dshadow_fragment"); + // deqp/functional/gles3/shadertexturefunction/textureprojgradoffset.html + _skip("texture_functions.textureprojgradoffset.sampler2dshadow_vertex"); + _skip("texture_functions.textureprojgradoffset.sampler2dshadow_fragment"); + + _setReason("MacOSX drivers share namespaces where they should not"); + // https://github.com/KhronosGroup/WebGL/issues/1890 + // deqp/data/gles3/shaders/scoping.html + _skip("scoping.valid.local_int_variable_hides_struct_type_vertex"); + _skip("scoping.valid.local_int_variable_hides_struct_type_fragment"); + _skip("scoping.valid.local_struct_variable_hides_struct_type_vertex"); + _skip("scoping.valid.local_struct_variable_hides_struct_type_fragment"); + _skip("scoping.valid.function_parameter_hides_struct_type_vertex"); + _skip("scoping.valid.function_parameter_hides_struct_type_fragment"); + + _setReason("NVidia Linux drivers does not clamp gl_FragDepth to [0.0, 1.0]"); + // Standalone Test case: + // https://github.com/Kangz/GLDriverBugs/blob/master/frag_depth_clamp_32f_depth/Main.cpp + // deqp/functional/gles3/fbodepthbuffer.html + _skip("depth.depth_write_clamp.depth_component32f"); + _skip("depth.depth_write_clamp.depth32f_stencil8"); + _skip("depth.depth_test_clamp.depth_component32f"); + _skip("depth.depth_test_clamp.depth32f_stencil8"); + + _setReason("NVidia Linux driver bug in nested uniform block location assignment"); + // crbug.com/621178 + // deqp/functional/gles3/uniformapi/random.html + _skip("uniform_api.random.64"); + + _setReason("Mac AMD / Linux AMD / older mesa handles clipping of wide points incorrectly"); + // crbug.com/642822 + // deqp/functional/gles3/clipping.html + _skip("clipping.wide_points_full_viewport"); + _skip("clipping.wide_points_partial_viewport"); + + + _setReason("Mac AMD drivers handle instanced rendering incorrectly under certain situation"); + // crbug.com/645298 + // deqp/functional/gles3/instancedrendering.html + _skip("instanced_rendering.draw_arrays_instanced.attribute_divisor.4_instances"); + _skip("instanced_rendering.draw_arrays_instanced.attribute_divisor.20_instances"); + _skip("instanced_rendering.draw_arrays_instanced.mixed.4_instances"); + _skip("instanced_rendering.draw_arrays_instanced.mixed.20_instances"); + _skip("instanced_rendering.draw_elements_instanced.attribute_divisor.4_instances"); + _skip("instanced_rendering.draw_elements_instanced.attribute_divisor.20_instances"); + _skip("instanced_rendering.draw_elements_instanced.mixed.4_instances"); + _skip("instanced_rendering.draw_elements_instanced.mixed.20_instances"); + + _setReason("Mac AMD drivers readPixels from RGB buffer into PIXEL_PACK_BUFFER got alpha values wrong"); + // crbug.com/646182 + // deqp/functional/gles3/pixelbufferobject.html + _skip("pixel_buffer_object.renderbuffer.rgb8_triangles"); + _skip("pixel_buffer_object.renderbuffer.rgb8_clears"); + + _setReason("Some Windows AMD D3D11 drivers have issues with blit and depth/stencil formats."); + // crbug.com/638323 + // deqp/functional/gles3/framebufferblit/depth_stencil.html + // Also see conformance2/rendering/blitframebuffer-stencil-only.html for 2.0.1 test. + _skip("blit.depth_stencil.depth24_stencil8_scale"); + _skip("blit.depth_stencil.depth24_stencil8_stencil_only"); + + _setReason("Transform feedback does not pass any tests on Mac AMD."); + // crbug.com/526748 + // Apple Radar: 28126946 + _skip("transform_feedback.*"); + + _setReason("Texture minification filtering is buggy for LINEAR mode on Mac Intel."); + // crbug.com/656478 + // Apple Radar: 28902129 + _skip("filtering.2d_combinations.linear_nearest_*"); + _skip("filtering.cube_combinations.linear_nearest_*"); + _skip("filtering.2d_array_combinations.linear_nearest_clamp_repeat"); + _skip("filtering.2d_array_combinations.linear_nearest_clamp_mirror"); + _skip("filtering.2d_array_combinations.linear_nearest_repeat_*"); + _skip("filtering.2d_array_combinations.linear_nearest_mirror_*"); + _skip("filtering.3d_combinations.linear_nearest_clamp_clamp_repeat"); + _skip("filtering.3d_combinations.linear_nearest_clamp_clamp_mirror"); + _skip("filtering.3d_combinations.linear_nearest_clamp_repeat_*"); + _skip("filtering.3d_combinations.linear_nearest_clamp_mirror_*"); + _skip("filtering.3d_combinations.linear_nearest_repeat_*"); + _skip("filtering.3d_combinations.linear_nearest_mirror_*"); + + _setReason("Setting of GL_READ_BUFFER and GL_DRAW_BUFFERs affects framebuffer completeness on Mac Intel."); + // crbug.com/630800 + // Apple Radar: 28236629 + _skip("completeness.attachment_combinations.none_rbo_none_none"); + _skip("completeness.attachment_combinations.none_tex_none_none"); + + _setReason("multisample constancy_alpha_to_coverage tests fail on Mac Intel."); + // crbug.com/663184 + _skip("multisample.fbo_4_samples.constancy_alpha_to_coverage"); + _skip("multisample.fbo_8_samples.constancy_alpha_to_coverage"); + _skip("multisample.fbo_max_samples.constancy_alpha_to_coverage"); } // if (!runSkippedTests) /* @@ -96,10 +297,28 @@ tcuSkipList.getSkipStatus = function(testName) { var skipEntry = _skipEntries[testName]; if (skipEntry === undefined) { - return { 'skip': false, 'reason': '' }; + return this._getWildcardSkipStatus(testName); } else { return { 'skip': true, 'reason': skipEntry }; } } + /* + * Gets the skip status of the given tests like testpath* + * object with the properties "skip", a boolean, and "reason", a + * string. + */ + tcuSkipList._getWildcardSkipStatus = function(testName) { + var skipEntry; + for (var key in _wildcardSkipEntries) { + if (testName.indexOf(key) >=0 ) { + skipEntry = _wildcardSkipEntries[key]; + if (skipEntry != undefined) { + return { 'skip': true, 'reason': skipEntry }; + } + } + } + return { 'skip': false, 'reason': '' }; + } + }); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuTexture.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuTexture.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuTexture.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuTexture.js 2017-01-16 01:38:19.000000000 +0000 @@ -832,7 +832,6 @@ */ tcuTexture.lookup = function(access, i, j, k) { var p = access.getPixel(i, j, k); - // console.log('Lookup at ' + i + ' ' + j + ' ' + k + ' ' + p); return access.getFormat().isSRGB() ? tcuTexture.sRGBToLinear(p) : p; }; @@ -1337,8 +1336,6 @@ */ tcuTexture.ConstPixelBufferAccess.prototype.getPixel = function(x, y, z) { z = z || 0; - // console.log(this); - // console.log('(' + x + ',' + y + ',' + z + ')'); DE_ASSERT(deMath.deInBounds32(x, 0, this.m_width)); DE_ASSERT(deMath.deInBounds32(y, 0, this.m_height)); @@ -1365,6 +1362,7 @@ color[0] /= 255; color[1] /= 255; color[2] /= 255; + color[3] = 1; return color; } } @@ -3098,7 +3096,6 @@ var width = tcuTexture.getMipPyramidLevelSize(this.m_width, levelNdx); var height = tcuTexture.getMipPyramidLevelSize(this.m_height, levelNdx); - // console.log('w ' + width + ' h ' + height); tcuTexture.TextureLevelPyramid.prototype.allocLevel.call(this, levelNdx, width, height, 1); }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/delibs/debase/deMath.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/delibs/debase/deMath.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/delibs/debase/deMath.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/delibs/debase/deMath.js 2017-01-16 01:38:19.000000000 +0000 @@ -800,9 +800,9 @@ */ deMath.shiftLeftVecScalar = function(a, b) { var dst = []; - for (var i = 0; i < a.length; i++) - dst.push(deMath.shiftLeft(a[i], b)); - return dst; + for (var i = 0; i < a.length; i++) + dst.push(deMath.shiftLeft(a[i], b)); + return dst; }; /** @@ -846,9 +846,9 @@ */ deMath.shiftRightVecScalar = function(a, b) { var dst = []; - for (var i = 0; i < a.length; i++) - dst.push(deMath.shiftRight(a[i], b)); - return dst; + for (var i = 0; i < a.length; i++) + dst.push(deMath.shiftRight(a[i], b)); + return dst; }; /** deMath.logicalAndBool over two arrays of booleans diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/gluShaderProgram.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/gluShaderProgram.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/gluShaderProgram.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/gluShaderProgram.js 2017-01-16 01:38:19.000000000 +0000 @@ -229,6 +229,8 @@ assertMsgOptions(this.gl.getError() == this.gl.NO_ERROR, 'gl.getProgramParameter()', false, true); this.info.linkOk = linkStatus; this.info.infoLog = this.gl.getProgramInfoLog(this.program); + if (!this.info.linkOk) + bufferedLogToConsole("program linking: " + this.info.infoLog); }; /** @@ -268,9 +270,9 @@ this.shaders.push(shader); this.shadersOK = this.shadersOK && shader.getCompileStatus(); if (!shader.getCompileStatus()) { - console.log('gluShaderProgram.Shader:\n' + programSources.sources[i].source); - console.log('Compile status: ' + shader.getCompileStatus()); - console.log('Shader infoLog: ' + shader.info.infoLog); + bufferedLogToConsole('gluShaderProgram.Shader:\n' + programSources.sources[i].source); + bufferedLogToConsole('Compile status: ' + shader.getCompileStatus()); + bufferedLogToConsole('Shader infoLog: ' + shader.info.infoLog); } } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/gluTexture.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/gluTexture.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/gluTexture.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/gluTexture.js 2017-01-16 01:38:19.000000000 +0000 @@ -160,8 +160,6 @@ var access = this.m_refTexture.getLevel(levelNdx); DE_ASSERT(access.getRowPitch() == access.getFormat().getPixelSize() * access.getWidth()); var data = access.getDataPtr(); - // console.log(data); - //debug('Level ' + levelNdx + ' format ' + wtu.glEnumToString(gl, this.m_format) + ' transfer Format ' + wtu.glEnumToString(gl, transferFormat.format) + ' datatype ' + wtu.glEnumToString(gl, transferFormat.dataType)); gl.texImage2D(gl.TEXTURE_2D, levelNdx, this.m_format, access.getWidth(), access.getHeight(), 0 /* border */, transferFormat.format, transferFormat.dataType, access.getDataPtr()); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/gluTextureUtil.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/gluTextureUtil.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/gluTextureUtil.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/gluTextureUtil.js 2017-01-16 01:38:19.000000000 +0000 @@ -229,6 +229,37 @@ }; /** + * Enable WEBGL_compressed_texture_etc support if available, by merging it + * into the WebGL2RenderingContext. + * + * This function may be called many times. + * + * @return {boolean} True if enabled. + */ +gluTextureUtil.enableCompressedTextureETC = (function() { + var enabled = undefined; + return function() { + if (enabled === undefined) { + enabled = false; + + var WEBGL_compressed_texture_etc = gl.getExtension("WEBGL_compressed_texture_etc"); + if (WEBGL_compressed_texture_etc) { + // Extend gl with enums from WEBGL_compressed_texture_etc + // (if it doesn't already have the etc texture formats). + var proto = Object.getPrototypeOf(WEBGL_compressed_texture_etc); + for (var prop in proto) { + if (proto.hasOwnProperty(prop)) { + gl[prop] = proto[prop]; + } + } + enabled = true; + } + } + return enabled; + }; +})(); + +/** * Map generic compressed format to GL compressed format enum. * * Maps generic compressed format to GL compressed format enum value. diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/simplereference/sglrReferenceContext.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/simplereference/sglrReferenceContext.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/simplereference/sglrReferenceContext.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/simplereference/sglrReferenceContext.js 2017-01-16 01:38:19.000000000 +0000 @@ -72,8 +72,7 @@ */ sglrReferenceContext.GLU_EXPECT_NO_ERROR = function(error, message) { if (error !== gl.NONE) { - console.log('Assertion failed message:' + message); - // throw new Error(message); + bufferedLogToConsole('Assertion failed message:' + message); } }; @@ -1328,6 +1327,7 @@ /** @type {number} */ this.m_blendFactorSrcAlpha = gl.ONE; /** @type {number} */ this.m_blendFactorDstAlpha = gl.ZERO; /** @type {Array} */ this.m_blendColor = [0, 0, 0, 0]; + /** @type {boolean} */ this.m_sRGBUpdateEnabled = true; /** @type {Array} */ this.m_colorMask = [true, true, true, true]; /** @type {boolean} */ this.m_depthMask = true; /** @type {sglrReferenceContext.VertexArray} */ this.m_defaultVAO = new sglrReferenceContext.VertexArray(this.m_limits.maxVertexAttribs); @@ -3132,7 +3132,8 @@ if (hasColor0 && (buffers & gl.COLOR_BUFFER_BIT) != 0) { /** @type {Array} */ var colorArea = deMath.intersect(baseArea, sglrReferenceContext.getBufferRect(colorBuf0)); access = colorBuf0.getSubregion(colorArea); - /** @type {Array} */ var c = this.m_clearColor; + /** @type {boolean} */ var isSRGB = colorBuf0.raw().getFormat().isSRGB(); + /** @type {Array} */ var c = (isSRGB && this.m_sRGBUpdateEnabled) ? tcuTextureUtil.linearToSRGB(this.m_clearColor) : this.m_clearColor; /** @type {boolean} */ var maskUsed = !this.m_colorMask[0] || !this.m_colorMask[1] || !this.m_colorMask[2] || !this.m_colorMask[3]; /** @type {boolean} */ var maskZero = !this.m_colorMask[0] && !this.m_colorMask[1] && !this.m_colorMask[2] && !this.m_colorMask[3]; @@ -3255,14 +3256,18 @@ if (!colorBuf.isEmpty() && !maskZero) { /** @type {Array} */ var colorArea = deMath.intersect(baseArea, sglrReferenceContext.getBufferRect(colorBuf)); access = colorBuf.getSubregion(colorArea); + var color = value; + + if (this.m_sRGBUpdateEnabled && access.raw().getFormat().isSRGB()) + color = tcuTextureUtil.linearToSRGB(color); if (!maskUsed) - access.clear(value); + access.clear(color); else { - for (var y = 0; y < access.raw().getDepth(); y++) - for (var x = 0; x < access.raw().getHeight(); x++) - for (var s = 0; s < access.getNumSamples(); s++) - access.raw().setPixel(tcuTextureUtil.select(value, access.raw().getPixel(s, x, y), this.m_colorMask), s, x, y); + for (var y = 0; y < access.raw().getDepth(); y++) + for (var x = 0; x < access.raw().getHeight(); x++) + for (var s = 0; s < access.getNumSamples(); s++) + access.raw().setPixel(tcuTextureUtil.select(color, access.raw().getPixel(s, x, y), this.m_colorMask), s, x, y); } } } else { @@ -3938,7 +3943,7 @@ sFilter, sFilter, 0.0 /* lod threshold */, false /* non-normalized coords */); /** @type {boolean} */ var srcIsSRGB = src.getFormat().order == tcuTexture.ChannelOrder.sRGB || src.getFormat().order == tcuTexture.ChannelOrder.sRGBA; /** @type {boolean} */ var dstIsSRGB = dst.getFormat().order == tcuTexture.ChannelOrder.sRGB || dst.getFormat().order == tcuTexture.ChannelOrder.sRGBA; - /** @type {boolean} */ var convertSRGB = false; + /** @type {boolean} */ var convertSRGB = this.m_sRGBUpdateEnabled; // \note We don't check for unsupported conversions, unlike spec requires. @@ -4681,7 +4686,7 @@ dst.setPixel(src.resolveMultisamplePixel(x+xo, y+yo), xo, yo); } } - } else { + } else { this.setError(gl.INVALID_ENUM); } } @@ -4727,7 +4732,7 @@ dst.setPixel(src.resolveMultisamplePixel(x+xo, y+yo), xo+xoffset, yo+yoffset); } } - } else if (target == gl.TEXTURE_CUBE_MAP_NEGATIVE_X || + } else if (target == gl.TEXTURE_CUBE_MAP_NEGATIVE_X || target == gl.TEXTURE_CUBE_MAP_POSITIVE_X || target == gl.TEXTURE_CUBE_MAP_NEGATIVE_Y || target == gl.TEXTURE_CUBE_MAP_POSITIVE_Y || diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/simplereference/sglrReferenceContextTest.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/simplereference/sglrReferenceContextTest.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/simplereference/sglrReferenceContextTest.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/opengl/simplereference/sglrReferenceContextTest.js 2017-01-16 01:38:19.000000000 +0000 @@ -158,7 +158,7 @@ ctx.bindRenderbuffer(gl.RENDERBUFFER, rbo); ctx.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA8, width, height); ctx.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, rbo); - console.log('Framebuffer status: ' + (ctx.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFER_COMPLETE)); + bufferedLogToConsole('Framebuffer status: ' + (ctx.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFER_COMPLETE)); ctx.clearColor(1, 0, 0, 1); ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); var pixels = new tcuSurface.Surface(width, height); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrFragmentOperations.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrFragmentOperations.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrFragmentOperations.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrFragmentOperations.js 2017-01-16 01:38:19.000000000 +0000 @@ -189,6 +189,21 @@ /** * @param {function(number=,number=):boolean} expression */ + var convertToDepthBuffer = false; + + var access; + if (depthBuffer.getFormat().type != tcuTexture.ChannelType.FLOAT && + depthBuffer.getFormat().type != tcuTexture.ChannelType.FLOAT_UNSIGNED_INT_24_8_REV) { + access = new tcuTexture.PixelBufferAccess({ + format: depthBuffer.getFormat(), + width: 1, + height: 1, + depth: 1, + data: new ArrayBuffer(8) + }); + convertToDepthBuffer = true; + } + var sample_register_depth_compare = function(expression) { for (var i = 0; i < inputFragments.length; i++) { var frag = inputFragments[i]; @@ -196,7 +211,16 @@ var fragSampleNdx = 0; var depthBufferValue = depthBuffer.getPixDepth(fragSampleNdx, frag.pixelCoord[0], frag.pixelCoord[1]); var sampleDepthFloat = frag.sampleDepths[fragSampleNdx]; - var sampleDepth = deMath.clamp(sampleDepthFloat, 0.0, 1.0); + + var sampleDepth; + if (convertToDepthBuffer) { + /* convert input float to target buffer format for comparison */ + access.setPixDepth(sampleDepthFloat, 0, 0, 0); + sampleDepth = access.getPixDepth(0, 0, 0); + } else { + sampleDepth = deMath.clamp(sampleDepthFloat, 0.0, 1.0); + } + frag.depthPassed = expression(sampleDepth, depthBufferValue); } } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrRenderer.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrRenderer.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrRenderer.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrRenderer.js 2017-01-16 01:38:19.000000000 +0000 @@ -296,34 +296,6 @@ }; /** - * @param {Array} v - * @param {Array} v1 - * @param {Array} v2 - * @param {Array} v3 - * @return {Array} - */ -rrRenderer.getBarycentricCoefficients = function(v, v1, v2, v3) { - var b = []; - - var x = v[0]; - var y = v[1]; - var x1 = v1[0]; - var x2 = v2[0]; - var x3 = v3[0]; - var y1 = v1[1]; - var y2 = v2[1]; - var y3 = v3[1]; - - var det = (y2 - y3) * (x1 - x3) + (x3 - x2) * (y1 - y3); - - b[0] = ((y2 - y3) * (x - x3) + (x3 - x2) * (y - y3)) / det; - b[1] = ((y3 - y1) * (x - x3) + (x1 - x3) * (y - y3)) / det; - b[2] = 1 - b[0] - b[1]; - - return b; -}; - -/** * @param {rrRenderState.RenderState} state * @param {rrRenderer.RenderTarget} renderTarget * @param {Array} fragments Fragments to write @@ -386,7 +358,7 @@ var stencilState = state.stencilStates[fragmentFacing]; var colorMaskFactor = [state.colorMask[0] ? 1 : 0, state.colorMask[1] ? 1 : 0, state.colorMask[2] ? 1 : 0, state.colorMask[3] ? 1 : 0]; var colorMaskNegationFactor = [state.colorMask[0] ? false : true, state.colorMask[1] ? false : true, state.colorMask[2] ? false : true, state.colorMask[3] ? false : true]; - var sRGBTarget = false; + var sRGBTarget = state.sRGBEnabled && colorBuffer.getFormat().isSRGB(); // Scissor test. @@ -550,6 +522,389 @@ return true; }; +// Rasterizer configuration +rrRenderer.RASTERIZER_SUBPIXEL_BITS = 8; +rrRenderer.RASTERIZER_MAX_SAMPLES_PER_FRAGMENT = 16; + +// Referenced from rrRasterizer.hpp + +/** + * Get coverage bit value + * @param {number} numSamples + * @param {number} x + * @param {number} y + * @param {number} sampleNdx + * @return {number} + */ +rrRenderer.getCoverageBit = function(numSamples, x, y, sampleNdx) { + var maxSamples = 16; + assertMsgOptions(maxSamples >= rrRenderer.RASTERIZER_MAX_SAMPLES_PER_FRAGMENT, 'maxSamples should not greater than ' + rrRenderer.RASTERIZER_MAX_SAMPLES_PER_FRAGMENT, false, true); + assertMsgOptions(deMath.deInRange32(numSamples, 1, maxSamples) && deMath.deInBounds32(x, 0, 2) && deMath.deInBounds32(y, 0, 2), 'numSamples, x or y not in bound', false, true); + return 1 << ((x * 2 + y) * numSamples + sampleNdx); +}; + +/** + * Get all sample bits for fragment + * @param {number} numSamples + * @param {number} x + * @param {number} y + * @return {number} + */ +rrRenderer.getCoverageFragmentSampleBits = function(numSamples, x, y) { + assertMsgOptions(deMath.deInBounds32(x, 0, 2) && deMath.deInBounds32(y, 0, 2), 'x or y is not in bound 0 to 2', false, true); + var fragMask = (1 << numSamples) - 1; + return fragMask << (x * 2 + y) * numSamples; +}; + +/** + * Set coverage bit in coverage mask + * @param {number} mask + * @param {number} numSamples + * @param {number} x + * @param {number} y + * @param {number} sampleNdx + * @param {number} val + * @return {number} + */ +rrRenderer.setCoverageValue = function(mask, numSamples, x, y, sampleNdx, val) { + var bit = rrRenderer.getCoverageBit(numSamples, x, y, sampleNdx); + return val ? (mask | bit) : (mask & ~bit); +}; + +/** + * Test if any sample for fragment is live + * @param {number} mask + * @param {number} numSamples + * @param {number} x + * @param {number} y + * @return {number} + */ +rrRenderer.getCoverageAnyFragmentSampleLive = function(mask, numSamples, x, y) { + return (mask & rrRenderer.getCoverageFragmentSampleBits(numSamples, x, y)) != 0; +}; + +// Referenced from rrRasterizer.cpp + +/** + * Pixel coord to sub pixel coord + * @param {number} v + * @return {number} + */ +rrRenderer.toSubpixelCoord = function(v) { + return Math.trunc(v * (1 << rrRenderer.RASTERIZER_SUBPIXEL_BITS) + (v < 0 ? -0.5 : 0.5)); +}; + +/** + * Floor sub pixel coord to pixel coord + * @param {number} coord + * @param {boolean} fillEdge + * @return {number} + */ +rrRenderer.floorSubpixelToPixelCoord = function(coord, fillEdge) { + if (coord >= 0) + return Math.trunc((coord - (fillEdge ? 1 : 0)) >> rrRenderer.RASTERIZER_SUBPIXEL_BITS); + else + return Math.trunc((coord - ((1 << rrRenderer.RASTERIZER_SUBPIXEL_BITS) - (fillEdge ? 0 : 1))) >> rrRenderer.RASTERIZER_SUBPIXEL_BITS); +}; + +/** + * Ceil sub pixel coord to pixel coord + * @param {number} coord + * @param {boolean} fillEdge + * @return {number} + */ +rrRenderer.ceilSubpixelToPixelCoord = function(coord, fillEdge) { + if (coord >= 0) + return Math.trunc((coord + (1 << rrRenderer.RASTERIZER_SUBPIXEL_BITS) - (fillEdge ? 0 : 1)) >> rrRenderer.RASTERIZER_SUBPIXEL_BITS); + else + return Math.trunc((coord + (fillEdge ? 1 : 0)) >> rrRenderer.RASTERIZER_SUBPIXEL_BITS); +}; + +/** + * \brief Edge function - referenced from struct EdgeFunction in rrRasterizer.hpp + * + * Edge function can be evaluated for point P (in a fixed-point coordinates + * with RASTERIZER_SUBPIXEL_BITS fractional part) by computing + * D = a * Px + b * Py + c + * + * D will be fixed-point value where lower (RASTERIZER_SUBPIXEL_BITS * 2) bits + * will be fractional part. + * + * Member function evaluateEdge, reverseEdge and isInsideCCW are referenced from rrRasterizer.cpp. + * + * @param {number} a + * @param {number} b + * @param {number} c + * @param {boolean} inclusive + */ +rrRenderer.edgeFunction = function(a, b, c, inclusive) { + this.a = a; + this.b = b; + this.c = c; + this.inclusive = inclusive; // True if edge is inclusive according to fill rules +}; + +/** + * Evaluate point (x,y) + * @param {number} x + * @param {number} y + * @return {number} + */ +rrRenderer.edgeFunction.prototype.evaluateEdge = function(x, y) { + return this.a * x + this.b * y + this.c; +}; + +/** + * Reverse edge (e.g. from CCW to CW) + */ +rrRenderer.edgeFunction.prototype.reverseEdge = function () { + this.a = -this.a; + this.b = -this.b; + this.c = -this.c; + this.inclusive = !this.inclusive; +}; + +/** + * Determine if a point with value edgeVal is inside the CCW region of the edge + * @param {number} edgeVal + * @return {boolean} + */ +rrRenderer.edgeFunction.prototype.isInsideCCW = function(edgeVal) { + return this.inclusive ? edgeVal >= 0 : edgeVal > 0; +}; + +/** + * Init an edge function in counter-clockwise (CCW) orientation + * @param {number} horizontalFill + * @param {number} verticalFill + * @param {number} x0 + * @param {number} y0 + * @param {number} x1 + * @param {number} y1 + * @return {rrRenderer.edgeFunction} + */ +rrRenderer.initEdgeCCW = function(horizontalFill, verticalFill, x0, y0, x1, y1) { + var xd = x1 - x0; + var yd = y1 - y0; + var inclusive = false; + + if (yd == 0) + inclusive = verticalFill == rrRenderState.VerticalFill.BOTTOM ? xd >= 0 : xd <= 0; + else + inclusive = horizontalFill == rrRenderState.HorizontalFill.LEFT ? yd <= 0 : yd >=0; + + return new rrRenderer.edgeFunction(y0 - y1, x1 - x0, x0 * y1 - y0 * x1, inclusive); +}; + +/** + * \brief Triangle rasterizer - referenced from class TriangleRasterizer in rrRasterizer.hpp + * + * Triangle rasterizer implements following features: + * - Rasterization using fixed-point coordinates + * - 1-sample rasterization (the value of numSamples always equals 1 in sglrReferenceContext) + * - Depth interpolation + * - Perspective-correct barycentric computation for interpolation + * - Visible face determination + * - Clipping - native dEQP does clipping before rasterization; see function drawBasicPrimitives + * in rrRenderer.cpp for more details + * + * It does not (and will not) implement following: + * - Triangle setup + * - Degenerate elimination + * - Coordinate transformation (inputs are in screen-space) + * - Culling - logic can be implemented outside by querying visible face + * - Scissoring - (this can be done by controlling viewport rectangle) + * - Any per-fragment operations + * + * @param {rrRenderState.RenderState} state + */ +rrRenderer.triangleRasterizer = function(state) { + this.m_viewport = state.viewport; + this.m_winding = state.rasterization.winding; + this.m_horizontalFill = state.rasterization.horizontalFill; + this.m_verticalFill = state.rasterization.verticalFill; +}; + +/** + * Initialize triangle rasterization + * @param {vec} v0 Screen-space coordinates (x, y, z) and 1/w for vertex 0 + * @param {vec} v1 Screen-space coordinates (x, y, z) and 1/w for vertex 1 + * @param {vec} v2 Screen-space coordinates (x, y, z) and 1/w for vertex 2 + */ +rrRenderer.triangleRasterizer.prototype.init = function(v0, v1, v2) { + this.m_v0 = v0; + this.m_v1 = v1; + this.m_v2 = v2; + + // Positions in fixed-point coordinates + var x0 = rrRenderer.toSubpixelCoord(v0[0]); + var y0 = rrRenderer.toSubpixelCoord(v0[1]); + var x1 = rrRenderer.toSubpixelCoord(v1[0]); + var y1 = rrRenderer.toSubpixelCoord(v1[1]); + var x2 = rrRenderer.toSubpixelCoord(v2[0]); + var y2 = rrRenderer.toSubpixelCoord(v2[1]); + + // Initialize edge functions + if (this.m_winding == rrRenderState.Winding.CCW) { + this.m_edge01 = rrRenderer.initEdgeCCW(this.m_horizontalFill, this.m_verticalFill, x0, y0, x1, y1); + this.m_edge12 = rrRenderer.initEdgeCCW(this.m_horizontalFill, this.m_verticalFill, x1, y1, x2, y2); + this.m_edge20 = rrRenderer.initEdgeCCW(this.m_horizontalFill, this.m_verticalFill, x2, y2, x0, y0); + } else { + // Reverse edges + this.m_edge01 = rrRenderer.initEdgeCCW(this.m_horizontalFill, this.m_verticalFill, x1, y1, x0, y0); + this.m_edge12 = rrRenderer.initEdgeCCW(this.m_horizontalFill, this.m_verticalFill, x2, y2, x1, y1); + this.m_edge20 = rrRenderer.initEdgeCCW(this.m_horizontalFill, this.m_verticalFill, x0, y0, x2, y2); + } + + // Determine face + var s = this.m_edge01.evaluateEdge(x2, y2); + var positiveArea = (this.m_winding == rrRenderState.Winding.CCW ) ? s > 0 : s < 0; + this.m_face = positiveArea ? rrDefs.FaceType.FACETYPE_FRONT : rrDefs.FaceType.FACETYPE_BACK; + if (!positiveArea) { + // Reverse edges so that we can use CCW area tests & interpolation + this.m_edge01.reverseEdge(); + this.m_edge12.reverseEdge(); + this.m_edge20.reverseEdge(); + } + + // Bounding box + var minX = Math.min(x0, x1, x2); + var maxX = Math.max(x0, x1, x2); + var minY = Math.min(y0, y1, y2); + var maxY = Math.max(y0, y1, y2); + + this.m_bboxMin = []; + this.m_bboxMax = []; + this.m_bboxMin[0] = rrRenderer.floorSubpixelToPixelCoord(minX, this.m_horizontalFill == rrRenderState.HorizontalFill.LEFT); + this.m_bboxMin[1] = rrRenderer.floorSubpixelToPixelCoord(minY, this.m_verticalFill == rrRenderState.VerticalFill.BOTTOM); + this.m_bboxMax[0] = rrRenderer.ceilSubpixelToPixelCoord(maxX, this.m_horizontalFill == rrRenderState.HorizontalFill.RIGHT); + this.m_bboxMax[1] = rrRenderer.ceilSubpixelToPixelCoord(maxY, this.m_verticalFill == rrRenderState.VerticalFill.TOP); + + // Clamp to viewport + var wX0 = this.m_viewport.rect.left; + var wY0 = this.m_viewport.rect.bottom; + var wX1 = wX0 + this.m_viewport.rect.width - 1; + var wY1 = wY0 + this.m_viewport.rect.height - 1; + + this.m_bboxMin[0] = deMath.clamp(this.m_bboxMin[0], wX0, wX1); + this.m_bboxMin[1] = deMath.clamp(this.m_bboxMin[1], wY0, wY1); + this.m_bboxMax[0] = deMath.clamp(this.m_bboxMax[0], wX0, wX1); + this.m_bboxMax[1] = deMath.clamp(this.m_bboxMax[1], wY0, wY1); + + this.m_curPos = [this.m_bboxMin[0], this.m_bboxMin[1]]; +}; + +rrRenderer.triangleRasterizer.prototype.rasterize = function() { + var fragmentPackets = []; + var halfPixel = 1 << (rrRenderer.RASTERIZER_SUBPIXEL_BITS - 1); + + // For depth interpolation; given barycentrics A, B, C = (1 - A -B) + // We can reformulate the usual z = z0 * A + z1 * B + z2 * C into more + // stable equation z = A * (z0 - z2) + B * (z1 - z2) + z2 + var za = this.m_v0[2] - this.m_v2[2]; + var zb = this.m_v1[2] - this.m_v2[2]; + var zc = this.m_v2[2]; + + var zn = this.m_viewport.zn; + var zf = this.m_viewport.zf; + var depthScale = (zf - zn) / 2; + var depthBias = (zf + zn) / 2; + + while (this.m_curPos[1] <= this.m_bboxMax[1]) { + var x0 = this.m_curPos[0]; + var y0 = this.m_curPos[1]; + + // Subpixel coords of (x0, y0), (x0 + 1, y0), (x0, y0 + 1), (x0 + 1, y0 + 1) + var sx0 = rrRenderer.toSubpixelCoord(x0) + halfPixel; + var sx1 = rrRenderer.toSubpixelCoord(x0 + 1) + halfPixel; + var sy0 = rrRenderer.toSubpixelCoord(y0) + halfPixel; + var sy1 = rrRenderer.toSubpixelCoord(y0 + 1) + halfPixel; + + var sx = [sx0, sx1, sx0, sx1]; + var sy = [sy0, sy0, sy1, sy1]; + + // Viewport test + var outX1 = x0 + 1 == this.m_viewport.rect.left + this.m_viewport.rect.width; + var outY1 = y0 + 1 == this.m_viewport.rect.bottom + this.m_viewport.rect.height; + + // Coverage + var coverage = 0; + + // Evaluate edge values + var e01 = []; + var e12 = []; + var e20 = []; + for (var i = 0; i < 4; i++) { + e01.push(this.m_edge01.evaluateEdge(sx[i], sy[i])); + e12.push(this.m_edge12.evaluateEdge(sx[i], sy[i])); + e20.push(this.m_edge20.evaluateEdge(sx[i], sy[i])); + } + + // Compute coverage mask + coverage = rrRenderer.setCoverageValue(coverage, 1, 0, 0, 0, this.m_edge01.isInsideCCW(e01[0]) && this.m_edge12.isInsideCCW(e12[0]) && this.m_edge20.isInsideCCW(e20[0])); + coverage = rrRenderer.setCoverageValue(coverage, 1, 1, 0, 0, !outX1 && this.m_edge01.isInsideCCW(e01[1]) && this.m_edge12.isInsideCCW(e12[1]) && this.m_edge20.isInsideCCW(e20[1])); + coverage = rrRenderer.setCoverageValue(coverage, 1, 0, 1, 0, !outY1 && this.m_edge01.isInsideCCW(e01[2]) && this.m_edge12.isInsideCCW(e12[2]) && this.m_edge20.isInsideCCW(e20[2])); + coverage = rrRenderer.setCoverageValue(coverage, 1, 1, 1, 0, !outX1 && !outY1 && this.m_edge01.isInsideCCW(e01[3]) && this.m_edge12.isInsideCCW(e12[3]) && this.m_edge20.isInsideCCW(e20[3])); + + // Advance to next location + this.m_curPos[0] += 2; + if (this.m_curPos[0] > this.m_bboxMax[0]) { + this.m_curPos[0] = this.m_bboxMin[0]; + this.m_curPos[1] += 2; + } + + if (coverage == 0) + continue; // Discard + + // Compute depth and barycentric coordinates + var edgeSum = deMath.add(deMath.add(e01, e12), e20); + var z0 = deMath.divide(e12, edgeSum); + var z1 = deMath.divide(e20, edgeSum); + + var b0 = deMath.multiply(e12, [this.m_v0[3], this.m_v0[3], this.m_v0[3], this.m_v0[3]]); + var b1 = deMath.multiply(e20, [this.m_v1[3], this.m_v1[3], this.m_v1[3], this.m_v1[3]]); + var b2 = deMath.multiply(e01, [this.m_v2[3], this.m_v2[3], this.m_v2[3], this.m_v2[3]]); + var bSum = deMath.add(deMath.add(b0, b1), b2); + var barycentric0 = deMath.divide(b0, bSum); + var barycentric1 = deMath.divide(b1, bSum); + var barycentric2 = deMath.subtract(deMath.subtract([1, 1, 1, 1], barycentric0), barycentric1); + + // In native dEQP, after rasterization, the pixel (x0, y0) actually represents four pixels: + // (x0, y0), (x0 + 1, y0), (x0, y0 + 1) and (x0 + 1, y0 + 1). + // The barycentrics and depths of these four pixels are to be computed after rasterization: + // barycentrics are computed in function shadeFragments in es3fFboTestUtil.cpp; + // depths are computed in function writeFragmentPackets in rrRenderer.cpp. + + // In js, pixels are processed one after another, so their depths and barycentrics should be computed immediately. + + // Determine if (x0, y0), (x0 + 1, y0), (x0, y0 + 1), (x0 + 1, y0 + 1) can be rendered + for (var fragNdx = 0; fragNdx < 4; fragNdx++) { + var xo = fragNdx % 2; + var yo = Math.trunc(fragNdx / 2); + var x = x0 + xo; + var y = y0 + yo; + + // The value of numSamples always equals 1 in sglrReferenceContext. + if(rrRenderer.getCoverageAnyFragmentSampleLive(coverage, 1, xo, yo)) { + // Barycentric coordinates - referenced from function readTriangleVarying in rrShadingContext.hpp + var b = [barycentric0[fragNdx], barycentric1[fragNdx], barycentric2[fragNdx]]; + + // Depth - referenced from writeFragmentPackets in rrRenderer.cpp + var depth = z0[fragNdx] * za + z1[fragNdx] * zb + zc; + depth = depth * depthScale + depthBias; + + // Clip test + // Native dEQP does clipping test before rasterization. + if (!rrRenderer.clipTest(x, y, depth, this.m_viewport.rect)) + continue; + + fragmentPackets.push(new rrFragmentOperations.Fragment(b, [x, y], depth)); + } + } + } + return fragmentPackets; +}; + /** * @param {rrRenderState.RenderState} state * @param {rrRenderer.RenderTarget} renderTarget @@ -574,6 +929,8 @@ return result; }; + // Referenced from native dEQP Renderer::drawInstanced() in rrRenderer.cpp + var primitives = new rrRenderer.PrimitiveList(primitive, count, first); // Do not draw if nothing to draw if (primitives.getNumElements() == 0) @@ -603,10 +960,12 @@ } program.shadeVertices(vertexAttribs, vertexPackets, numVertexPackets); - var zn = state.viewport.zn; - var zf = state.viewport.zf; - var depthScale = (zf - zn) / 2; - var depthBias = (zf + zn) / 2; + // Referenced from native dEQP Renderer::rasterizePrimitive() for triangle rasterization in rrRenderer.cpp + + // In native dEQP, only maxFragmentPackets packets are processed per rasterize-shade-write loop; + // in js all packets are processed in one loop. + + var rasterizer = new rrRenderer.triangleRasterizer(state); for (var prim = primitives.getNextPrimitive(true); prim.length > 0; prim = primitives.getNextPrimitive()) { var vertices = selectVertices(vertexPackets, prim); @@ -615,32 +974,22 @@ var v1 = rrRenderer.transformGLToWindowCoords(state, vertices[1]); var v2 = rrRenderer.transformGLToWindowCoords(state, vertices[2]); + rasterizer.init(v0, v1, v2); + + // Culling + if ((state.cullMode == rrRenderState.CullMode.FRONT && rasterizer.m_face == rrDefs.FaceType.FACETYPE_FRONT) || + (state.cullMode == rrRenderState.CullMode.BACK && rasterizer.m_face == rrDefs.FaceType.FACETYPE_BACK)) + return; + + /* TODO: Add Polygon Offset and Depth Clamp */ + // Compute a conservative integer bounding box for the triangle var minX = Math.floor(Math.min(v0[0], v1[0], v2[0])); var maxX = Math.ceil(Math.max(v0[0], v1[0], v2[0])); var minY = Math.floor(Math.min(v0[1], v1[1], v2[1])); var maxY = Math.ceil(Math.max(v0[1], v1[1], v2[1])); - var fragmentPackets = []; - for (var i = minX; i <= maxX; i++) { - for (var j = minY; j <= maxY; j++) { - var x = i + 0.5; - var y = j + 0.5; - - // A pixel is inside the triangle iff all its barycentric coordinates are non-negative - var b = rrRenderer.getBarycentricCoefficients([x, y], v0, v1, v2); - if (b[0] < 0 || b[1] < 0 || b[2] < 0) { - continue; - } - - var depth = v0[2] * b[0] + v1[2] * b[1] + v2[2] * b[2]; - depth = depth * depthScale + depthBias; - if (!rrRenderer.clipTest(i, j, depth, state.viewport.rect)) - continue; - fragmentPackets.push(new rrFragmentOperations.Fragment(b, [i, j], depth)); - } - } - + // Shading context var shadingContext = new rrShadingContext.FragmentShadingContext( vertices[0].outputs, vertices[1].outputs, @@ -648,8 +997,13 @@ ); shadingContext.setSize(maxX - minX, maxY - minY); + // Rasterize + var fragmentPackets = rasterizer.rasterize(); + + // Shade program.shadeFragments(fragmentPackets, shadingContext); + // Handle fragment shader outputs rrRenderer.writeFragments2(state, renderTarget, fragmentPackets); } }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrUtil.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrUtil.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrUtil.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/framework/referencerenderer/rrUtil.js 2017-01-16 01:38:19.000000000 +0000 @@ -42,18 +42,15 @@ p0[0], p0[1], p0[2], 1.0, p0[0], p1[1], hz, 1.0, p1[0], p0[1], hz, 1.0, - p1[0], p0[1], hz, 1.0, - p0[0], p1[1], hz, 1.0, p1[0], p1[1], p1[2], 1.0 ]; /** @type {Array} */ var coord = [ 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, - 1.0, 0.0, - 0.0, 1.0, 1.0, 1.0 ]; + /** @type {Array} */ var indices = [0, 1, 2, 2, 1, 3]; var posLoc = ctx.getAttribLocation(program, 'a_position'); if (posLoc == -1) @@ -70,13 +67,16 @@ bufIDs[1] = ctx.createBuffer(); ctx.useProgram(program); - ctx.bindBuffer(gl.ARRAY_BUFFER, bufIDs[0]); - ctx.bufferData(gl.ARRAY_BUFFER, new Float32Array(position), gl.STATIC_DRAW); - ctx.enableVertexAttribArray(posLoc); - ctx.vertexAttribPointer(posLoc, 4, gl.FLOAT, false, 0, 0); + if (posLoc >= 0) { + ctx.bindBuffer(gl.ARRAY_BUFFER, bufIDs[0]); + ctx.bufferData(gl.ARRAY_BUFFER, new Float32Array(position), gl.STATIC_DRAW); - ctx.bindBuffer(gl.ARRAY_BUFFER, null); + ctx.enableVertexAttribArray(posLoc); + ctx.vertexAttribPointer(posLoc, 4, gl.FLOAT, false, 0, 0); + + ctx.bindBuffer(gl.ARRAY_BUFFER, null); + } if (coordLoc >= 0) { ctx.bindBuffer(gl.ARRAY_BUFFER, bufIDs[1]); @@ -88,12 +88,28 @@ ctx.bindBuffer(gl.ARRAY_BUFFER, null); } - ctx.drawQuads(gl.TRIANGLES, 0, 6); + { + var ndxID = ctx.createBuffer(); + + ctx.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, ndxID); + ctx.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW); + + ctx.drawElements(gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0); + + ctx.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null); + ctx.deleteBuffer(ndxID); + } ctx.bindVertexArray(null); ctx.deleteBuffer(bufIDs[0]); ctx.deleteBuffer(bufIDs[1]); ctx.deleteVertexArray(vaoID); + + if (posLoc >= 0) + ctx.disableVertexAttribArray(posLoc); + + if (coordLoc >= 0) + ctx.disableVertexAttribArray(coordLoc); }; }); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/00_test_list.txt 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/00_test_list.txt 2017-01-16 01:38:19.000000000 +0000 @@ -1,6 +1,11 @@ -builtinprecision/00_test_list.txt +--min-version 2.0.1 builtinprecision/00_test_list.txt draw/00_test_list.txt fbocolorbuffer/00_test_list.txt +fboinvalidate/00_test_list.txt +fborender/00_test_list.txt +fragmentoutput/00_test_list.txt +framebufferblit/00_test_list.txt +primitiverestart/00_test_list.txt shaderindexing/00_test_list.txt shadermatrix/00_test_list.txt shaderoperator/00_test_list.txt @@ -22,15 +27,13 @@ defaultvertexattribute.html fbocompleteness.html fbodepthbuffer.html -fboinvalidate.html -fbomultisample.html -fborender.html +fbomultisample.2_samples.html +fbomultisample.4_samples.html +fbomultisample.8_samples.html fbostatequery.html fbostencilbuffer.html floatstatequery.html fragdepth.html -fragmentoutput.html -framebufferblit.html indexedstatequery.html instancedrendering.html integerstatequery.html @@ -43,9 +46,9 @@ negativestateapi.html negativetextureapi.html negativevertexarrayapi.html -occlusionquery.html +occlusionquery_strict.html +occlusionquery_conservative.html pixelbufferobject.html -primitiverestart.html rasterizerdiscard.html rbostatequery.html readpixel.html @@ -54,7 +57,9 @@ shaderapi.html shaderbuiltinvar.html shadercommonfunction.html -shaderderivate.html +shaderderivate_dfdx.html +shaderderivate_dfdy.html +shaderderivate_fwidth.html shaderloop_for.html shaderloop_while.html shaderloop_do_while.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fApiCase.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fApiCase.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fApiCase.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fApiCase.js 2017-01-16 01:38:20.000000000 +0000 @@ -129,6 +129,15 @@ } }; + es3fApiCase.ApiCase.prototype.expectThrowNoError = function(f) { + try { + f(); + this.testFailed("should have thrown exception"); + } catch (e) { + this.expectError(this.m_gl.NO_ERROR); + } + } + /** * Base class for all the API tests. * @constructor diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboColorbufferTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboColorbufferTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboColorbufferTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboColorbufferTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -172,6 +172,7 @@ es3fFboColorbufferTests.FboColorClearCase.prototype.preCheck = function() { this.checkFormatSupport(this.m_format); + return true; // No exception thrown }; es3fFboColorbufferTests.FboColorClearCase.prototype.render = function(dst) { @@ -226,7 +227,6 @@ var color = es3fFboColorbufferTests.randomVector(rnd, fmtInfo.valueMin, fmtInfo.valueMax); ctx.scissor(x, y, w, h); - ctx.clearBufferfv(gl.COLOR, 0, color); switch (fmtClass) { case tcuTexture.TextureChannelClass.FLOATING_POINT: @@ -276,6 +276,7 @@ es3fFboColorbufferTests.FboColorMultiTex2DCase.prototype.preCheck = function() { this.checkFormatSupport(this.m_tex0Fmt); this.checkFormatSupport(this.m_tex1Fmt); + return true; // No exception thrown }; es3fFboColorbufferTests.FboColorMultiTex2DCase.prototype.render = function(dst) { @@ -397,6 +398,7 @@ es3fFboColorbufferTests.FboColorTexCubeCase.prototype.preCheck = function() { this.checkFormatSupport(this.m_format); + return true; // No exception thrown }; es3fFboColorbufferTests.FboColorTexCubeCase.prototype.render = function(dst) { @@ -543,6 +545,7 @@ es3fFboColorbufferTests.FboColorTex2DArrayCase.prototype.preCheck = function() { this.checkFormatSupport(this.m_format); + return true; // No exception thrown }; es3fFboColorbufferTests.FboColorTex2DArrayCase.prototype.render = function(dst) { @@ -668,6 +671,7 @@ es3fFboColorbufferTests.FboColorTex3DCase.prototype.preCheck = function() { this.checkFormatSupport(this.m_format); + return true; // No exception thrown }; es3fFboColorbufferTests.FboColorTex3DCase.prototype.render = function(dst) { @@ -804,6 +808,7 @@ es3fFboColorbufferTests.FboBlendCase.prototype.preCheck = function() { this.checkFormatSupport(this.m_format); + return true; // No exception thrown } es3fFboColorbufferTests.FboBlendCase.prototype.render = function(dst) { @@ -941,39 +946,49 @@ es3fFboTestUtil.getFormatName(colorFormats[ndx]), "", colorFormats[ndx], 129, 117)); } - // .tex2d - var tex2DGroup = tcuTestCase.newTest("tex2d", "Texture 2D tests"); - this.addChild(tex2DGroup); + var numGroups = 6; + // .tex2d + var tex2DGroup = []; + for (var ii = 0; ii < numGroups; ++ii) { + tex2DGroup[ii] = tcuTestCase.newTest("tex2d", "Texture 2D tests"); + this.addChild(tex2DGroup[ii]); + } for (var ndx = 0; ndx < colorFormats.length; ndx++) { - tex2DGroup.addChild(new es3fFboColorbufferTests.FboColorMultiTex2DCase( + tex2DGroup[ndx % numGroups].addChild(new es3fFboColorbufferTests.FboColorMultiTex2DCase( es3fFboTestUtil.getFormatName(colorFormats[ndx]), "", colorFormats[ndx], [129, 117], colorFormats[ndx], [99, 128])); } // .texcube - var texCubeGroup = tcuTestCase.newTest("texcube", "Texture cube map tests"); - this.addChild(texCubeGroup); - + var texCubeGroup = []; + for (var ii = 0; ii < numGroups; ++ii) { + texCubeGroup[ii] = tcuTestCase.newTest("texcube", "Texture cube map tests"); + this.addChild(texCubeGroup[ii]); + } for (var ndx = 0; ndx < colorFormats.length; ndx++) { - texCubeGroup.addChild(new es3fFboColorbufferTests.FboColorTexCubeCase( + texCubeGroup[ndx % numGroups].addChild(new es3fFboColorbufferTests.FboColorTexCubeCase( es3fFboTestUtil.getFormatName(colorFormats[ndx]), "", colorFormats[ndx], [128, 128])); } // .tex2darray - var tex2DArrayGroup = tcuTestCase.newTest("tex2darray", "Texture 2D array tests"); - this.addChild(tex2DArrayGroup); - + var tex2DArrayGroup = []; + for (var ii = 0; ii < numGroups; ++ii) { + tex2DArrayGroup[ii] = tcuTestCase.newTest("tex2darray", "Texture 2D array tests"); + this.addChild(tex2DArrayGroup[ii]); + } for (var ndx = 0; ndx < colorFormats.length; ndx++) { - tex2DArrayGroup.addChild(new es3fFboColorbufferTests.FboColorTex2DArrayCase( + tex2DArrayGroup[ndx % numGroups].addChild(new es3fFboColorbufferTests.FboColorTex2DArrayCase( es3fFboTestUtil.getFormatName(colorFormats[ndx]), "", colorFormats[ndx], [128, 128, 5])); } // .tex3d - var tex3DGroup = tcuTestCase.newTest("tex3d", "Texture 3D tests"); - this.addChild(tex3DGroup); - + var tex3DGroup = []; + for (var ii = 0; ii < numGroups; ++ii) { + tex3DGroup[ii] = tcuTestCase.newTest("tex3d", "Texture 3D tests"); + this.addChild(tex3DGroup[ii]); + } for (var ndx = 0; ndx < colorFormats.length; ndx++) { - tex3DGroup.addChild(new es3fFboColorbufferTests.FboColorTex3DCase( + tex3DGroup[ndx % numGroups].addChild(new es3fFboColorbufferTests.FboColorTex3DCase( es3fFboTestUtil.getFormatName(colorFormats[ndx]), "", colorFormats[ndx], [128, 128, 5])); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboCompletenessTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboCompletenessTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboCompletenessTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboCompletenessTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -558,7 +558,6 @@ es3fFboCompletenessTests.init(); tcuTestCase.runner.runCallback(tcuTestCase.runTestCases); } catch (err) { - console.log(err); bufferedLogToConsole(err); tcuTestCase.runner.terminate(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboDepthbufferTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboDepthbufferTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboDepthbufferTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboDepthbufferTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -77,6 +77,7 @@ es3fFboDepthbufferTests.BasicFboDepthCase.prototype.preCheck = function() { this.checkFormatSupport(this.m_format); + return true; // No exception thrown }; es3fFboDepthbufferTests.BasicFboDepthCase.prototype.render = function(dst) { @@ -169,6 +170,7 @@ es3fFboDepthbufferTests.DepthWriteClampCase.prototype.preCheck = function() { this.checkFormatSupport(this.m_format); + return true; // No exception thrown }; es3fFboDepthbufferTests.DepthWriteClampCase.prototype.render = function(dst) { @@ -253,6 +255,7 @@ es3fFboDepthbufferTests.DepthTestClampCase.prototype.preCheck = function() { this.checkFormatSupport(this.m_format); + return true; // No exception thrown }; es3fFboDepthbufferTests.DepthTestClampCase.prototype.render = function(dst) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboInvalidateTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboInvalidateTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboInvalidateTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboInvalidateTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -453,6 +453,7 @@ es3fFboInvalidateTests.InvalidateFboRenderCase.prototype.preCheck = function() { if (this.m_colorFmt != gl.NONE) this.checkFormatSupport(this.m_colorFmt); if (this.m_depthStencilFmt != gl.NONE) this.checkFormatSupport(this.m_depthStencilFmt); + return true; // No exception thrown }; es3fFboInvalidateTests.InvalidateFboRenderCase.prototype.render = function(dst) { @@ -557,6 +558,7 @@ es3fFboInvalidateTests.InvalidateFboUnbindReadCase.prototype.preCheck = function() { if (this.m_colorFmt != gl.NONE) this.checkFormatSupport(this.m_colorFmt); if (this.m_depthStencilFmt != gl.NONE) this.checkFormatSupport(this.m_depthStencilFmt); + return true; // No exception thrown }; es3fFboInvalidateTests.InvalidateFboUnbindReadCase.prototype.render = function(dst) { @@ -667,6 +669,7 @@ es3fFboInvalidateTests.InvalidateFboUnbindBlitCase.prototype.preCheck = function() { if (this.m_colorFmt != gl.NONE) this.checkFormatSupport(this.m_colorFmt); if (this.m_depthStencilFmt != gl.NONE) this.checkFormatSupport(this.m_depthStencilFmt); + return true; // No exception thrown }; es3fFboInvalidateTests.InvalidateFboUnbindBlitCase.prototype.render = function(dst) { @@ -787,6 +790,7 @@ es3fFboInvalidateTests.InvalidateSubFboUnbindReadCase.prototype.preCheck = function() { if (this.m_colorFmt != gl.NONE) this.checkFormatSupport(this.m_colorFmt); if (this.m_depthStencilFmt != gl.NONE) this.checkFormatSupport(this.m_depthStencilFmt); + return true; // No exception thrown }; es3fFboInvalidateTests.InvalidateSubFboUnbindReadCase.prototype.compare = function(reference, result) { @@ -804,7 +808,7 @@ var attachments = getFBODiscardAttachments(this.m_invalidateBuffers); // Create fbo. var transferFmt = gluTextureUtil.getTransferFormat(colorFmt); - var gradShader = new es3fFboTestUtil.GradientShader(gluShaderUtil.DataType.FLOAT_VEC4); + var gradShader = new es3fFboTestUtil.GradientShader(es3fFboTestUtil.getFragmentOutputType(colorFmt)); var gradShaderID = ctx.createProgram(gradShader); var invalidateX = 0; var invalidateY = 0; @@ -818,7 +822,8 @@ var colorTex = ctx.createTexture(); ctx.bindTexture(gl.TEXTURE_2D, colorTex); ctx.texImage2D(gl.TEXTURE_2D, 0, this.m_colorFmt, this.getWidth(), this.getHeight(), 0, transferFmt.format, transferFmt.dataType, null); - ctx.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + ctx.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + ctx.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); if (this.m_depthStencilFmt != gl.NONE) { transferFmt = gluTextureUtil.getTransferFormat(depthStencilFmt); @@ -842,8 +847,8 @@ this.checkFramebufferStatus(gl.FRAMEBUFFER); - ctx.clearColor(0, 0, 0, 1); - ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); + this.clearColorBuffer(colorFmt, [0.0, 0.0, 0.0, 1.0]); + ctx.clear(gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); ctx.enable(gl.DEPTH_TEST); ctx.enable(gl.STENCIL_TEST); @@ -859,6 +864,9 @@ ctx.disable(gl.DEPTH_TEST); ctx.disable(gl.STENCIL_TEST); + ctx.clearColor(0.25, 0.5, 0.75, 1); + ctx.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); + // Limit read area using scissor. ctx.scissor(readX, readY, readW, readH); ctx.enable(gl.SCISSOR_TEST); @@ -911,6 +919,7 @@ es3fFboInvalidateTests.InvalidateSubFboRenderCase.prototype.preCheck = function() { if (this.m_colorFmt != gl.NONE) this.checkFormatSupport(this.m_colorFmt); if (this.m_depthStencilFmt != gl.NONE) this.checkFormatSupport(this.m_depthStencilFmt); + return true; // No exception thrown }; es3fFboInvalidateTests.InvalidateSubFboRenderCase.prototype.render = function(dst) { @@ -1010,6 +1019,7 @@ es3fFboInvalidateTests.InvalidateSubFboUnbindBlitCase.prototype.preCheck = function() { if (this.m_colorFmt != gl.NONE) this.checkFormatSupport(this.m_colorFmt); if (this.m_depthStencilFmt != gl.NONE) this.checkFormatSupport(this.m_depthStencilFmt); + return true; // No exception thrown }; es3fFboInvalidateTests.InvalidateSubFboUnbindBlitCase.prototype.render = function(dst) { @@ -1328,8 +1338,12 @@ subFboGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboUnbindBlitCase('unbind_blit_msaa_depth_stencil', '', 4, gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT)); } // invalidate.format. - var formatGroup = new tcuTestCase.DeqpTest('format', 'Invalidating framebuffers with selected formats'); - this.addChild(formatGroup); + var numFormatSubGroups = 3; + var formatGroup = []; + for (var ii = 0; ii < numFormatSubGroups; ++ii) { + formatGroup[ii] = new tcuTestCase.DeqpTest('format', 'Invalidating framebuffers with selected formats'); + this.addChild(formatGroup[ii]); + } // Color buffer formats. var colorFormats = [ // RGBA formats @@ -1390,11 +1404,11 @@ // Colorbuffer tests use invalidate, unbind, read test. for (var ndx = 0; ndx < colorFormats.length; ndx++) - formatGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboUnbindReadCase(es3fFboTestUtil.getFormatName(colorFormats[ndx]), '', colorFormats[ndx], gl.NONE, gl.COLOR_BUFFER_BIT)); + formatGroup[ndx % numFormatSubGroups].addChild(new es3fFboInvalidateTests.InvalidateSubFboUnbindReadCase(es3fFboTestUtil.getFormatName(colorFormats[ndx]), '', colorFormats[ndx], gl.NONE, gl.COLOR_BUFFER_BIT)); // Depth/stencilbuffer tests use invalidate, render test. for (var ndx = 0; ndx < depthStencilFormats.length; ndx++) - formatGroup.addChild(new es3fFboInvalidateTests.InvalidateSubFboRenderCase(es3fFboTestUtil.getFormatName(depthStencilFormats[ndx]), '', gl.RGBA8, depthStencilFormats[ndx], gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT)); + formatGroup[ndx % numFormatSubGroups].addChild(new es3fFboInvalidateTests.InvalidateSubFboRenderCase(es3fFboTestUtil.getFormatName(depthStencilFormats[ndx]), '', gl.RGBA8, depthStencilFormats[ndx], gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT)); // invalidate.target var targetGroup = new tcuTestCase.DeqpTest('target', 'Invalidate target'); @@ -1432,7 +1446,7 @@ * Run test * @param {WebGL2RenderingContext} context */ -es3fFboInvalidateTests.run = function(context) { +es3fFboInvalidateTests.run = function(context, range) { gl = context; //Set up Test Root parameters var state = tcuTestCase.runner; @@ -1443,6 +1457,8 @@ description(state.testCases.getDescription()); try { + if (range) + state.setRange(range); //Run test cases tcuTestCase.runTestCases(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboMultisampleTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboMultisampleTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboMultisampleTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboMultisampleTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -79,12 +79,15 @@ es3fFboMultisampleTests.BasicFboMultisampleCase.prototype.preCheck = function() { this.checkFormatSupport(this.m_colorFormat); - this.checkSampleCount(this.m_colorFormat, this.m_numSamples); + if (!this.checkSampleCount(this.m_colorFormat, this.m_numSamples)) + return false; if (this.m_depthStencilFormat != gl.NONE) { this.checkFormatSupport(this.m_depthStencilFormat); - this.checkSampleCount(this.m_depthStencilFormat, this.m_numSamples); + if (!this.checkSampleCount(this.m_depthStencilFormat, this.m_numSamples)) + return false; } + return true; // No exception thrown }; /** @@ -305,14 +308,14 @@ gl.R8, // gl.EXT_color_buffer_float - // Multi-sample floating-point color buffers are not supported, see https://www.khronos.org/registry/webgl/extensions/EXT_color_buffer_float/ - // gl.RGBA32F, - // gl.RGBA16F, - // gl.R11F_G11F_B10F, - // gl.RG32F, - // gl.RG16F, - // gl.R32F, - // gl.R16F + // Multi-sample floating-point color buffers can be optional supported, see https://www.khronos.org/registry/webgl/extensions/EXT_color_buffer_float/ + gl.RGBA32F, + gl.RGBA16F, + gl.R11F_G11F_B10F, + gl.RG32F, + gl.RG16F, + gl.R32F, + gl.R16F ]; /** @const {Array} */ var depthStencilFormats = [ @@ -342,7 +345,7 @@ } }; - es3fFboMultisampleTests.run = function(context) { + es3fFboMultisampleTests.run = function(context, range) { gl = context; //Set up root Test var state = tcuTestCase.runner; @@ -360,6 +363,8 @@ try { //Create test cases test.init(); + if (range) + state.setRange(range); //Run test cases tcuTestCase.runTestCases(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboRenderTest.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboRenderTest.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboRenderTest.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboRenderTest.js 2017-01-16 01:38:20.000000000 +0000 @@ -141,20 +141,18 @@ switch (format) { case gl.RGB16F: - out.push('EXT_color_buffer_half_float'); + assertMsgOptions(false, "Not part of the tested formats", false, true); break; case gl.RGBA16F: case gl.RG16F: case gl.R16F: - out.push('EXT_color_buffer_half_float'); - case gl.RGBA32F: case gl.RGB32F: case gl.R11F_G11F_B10F: case gl.RG32F: case gl.R32F: - out.push('WEBGL_color_buffer_float'); + out.push('EXT_color_buffer_float'); default: break; @@ -1823,6 +1821,7 @@ switch (type) { case gl.TEXTURE_2D: ctx.deleteTexture(/** @type {WebGLTexture} */ (buf)); + buf = ctx.createTexture(); ctx.bindTexture(gl.TEXTURE_2D, buf); ctx.texImage2DDelegate( gl.TEXTURE_2D, 0, format, width, height @@ -1839,6 +1838,7 @@ ctx.deleteRenderbuffer( /** @type {WebGLRenderbuffer} */ (buf) ); + buf = ctx.createRenderbuffer(); ctx.bindRenderbuffer(gl.RENDERBUFFER, buf); ctx.renderbufferStorage( gl.RENDERBUFFER, format, width, height @@ -1848,6 +1848,12 @@ default: throw new Error('Unsupported buffer type'); } + + if (ndx == 0) { + fbo.m_colorBuffer = buf; + } else { + fbo.m_depthStencilBuffer = buf; + } } // Rebind. @@ -2008,9 +2014,10 @@ format: gl.RGBA16I, type: FormatType.INT },{ format: gl.RGBA16UI, type: FormatType.UINT - },{ + },/*{ + // RGB16F isn't made color-renderable through WebGL's EXT_color_buffer_float format: gl.RGB16F, type: FormatType.FLOAT - },{ + },*/{ format: gl.RGBA8I, type: FormatType.INT },{ format: gl.RGBA8UI, type: FormatType.UINT @@ -2135,16 +2142,16 @@ } // .shared_colorbuffer - /** @type {tcuTestCase.DeqpTest} */ - var sharedColorbufferGroup = new tcuTestCase.DeqpTest( - 'shared_colorbuffer', 'Shared colorbuffer tests' - ); + /** @type {Array} */ var sharedColorbufferGroup = []; + var numSharedColorbufferGroups = 3; + for (var ii = 0; ii < numSharedColorbufferGroups; ++ii) { + sharedColorbufferGroup[ii] = new tcuTestCase.DeqpTest( + 'shared_colorbuffer', 'Shared colorbuffer tests' + ); + this.addChild(sharedColorbufferGroup[ii]); + } - this.addChild(sharedColorbufferGroup); - - for (var colorFmtNdx = 0; - colorFmtNdx < colorFormats.length; - colorFmtNdx++) { + for (var colorFmtNdx = 0; colorFmtNdx < colorFormats.length; colorFmtNdx++) { depthStencilType = gl.RENDERBUFFER; depthStencilFormat = gl.DEPTH24_STENCIL8; @@ -2180,17 +2187,17 @@ depthStencilType, depthStencilFormat ); - sharedColorbufferGroup.addChild( + sharedColorbufferGroup[0].addChild( new es3fFboRenderTest.SharedColorbufferTest(colorOnlyConfig) ); - sharedColorbufferGroup.addChild( + sharedColorbufferGroup[1].addChild( new es3fFboRenderTest.SharedColorbufferTest( colorDepthConfig ) ); - sharedColorbufferGroup.addChild( + sharedColorbufferGroup[2].addChild( new es3fFboRenderTest.SharedColorbufferTest( colorDepthStencilConfig ) @@ -2232,16 +2239,14 @@ } // .resize - /** @type {tcuTestCase.DeqpTest} */ - var resizeGroup = new tcuTestCase.DeqpTest( - 'resize', 'FBO resize tests' - ); + /** @type {Array} */ var resizeGroup = []; + var numResizeGroups = 4; + for (var ii = 0; ii < numResizeGroups; ++ii) { + resizeGroup[ii] = new tcuTestCase.DeqpTest('resize', 'FBO resize tests'); + this.addChild(resizeGroup[ii]); + } - this.addChild(resizeGroup); - - for (var colorFmtNdx = 0; - colorFmtNdx < colorFormats.length; - colorFmtNdx++) { + for (var colorFmtNdx = 0; colorFmtNdx < colorFormats.length; colorFmtNdx++) { var colorFormat = colorFormats[colorFmtNdx].format; @@ -2251,23 +2256,19 @@ gl.COLOR_BUFFER_BIT, objectTypes[typeNdx], colorFormat, gl.NONE, gl.NONE ); - resizeGroup.addChild(new es3fFboRenderTest.ResizeTest(config)); + resizeGroup[colorFmtNdx % numResizeGroups].addChild(new es3fFboRenderTest.ResizeTest(config)); } // For selected color formats tests depth & stencil variants. if (colorFormat == gl.RGBA8 || colorFormat == gl.RGBA16F) { - for (var depthStencilFmtNdx = 0; - depthStencilFmtNdx < depthStencilFormats.length; - depthStencilFmtNdx++) { + for (var depthStencilFmtNdx = 0; depthStencilFmtNdx < depthStencilFormats.length; depthStencilFmtNdx++) { colorType = gl.TEXTURE_2D; depth = depthStencilFormats[depthStencilFmtNdx].depth; stencil = depthStencilFormats[depthStencilFmtNdx].stencil; // Depth and stencil: both rbo and textures - for (var typeNdx = 0; - typeNdx < objectTypes.length; - typeNdx++) { + for (var typeNdx = 0; typeNdx < objectTypes.length; typeNdx++) { if (!depth && objectTypes[typeNdx] != gl.RENDERBUFFER) continue; // Not supported. @@ -2280,7 +2281,7 @@ depthStencilFormats[depthStencilFmtNdx].format ); - resizeGroup.addChild( + resizeGroup[colorFmtNdx % numResizeGroups].addChild( new es3fFboRenderTest.ResizeTest(config) ); } @@ -2289,16 +2290,14 @@ } // .recreate_color - /** @type {tcuTestCase.DeqpTest} */ - var recreateColorGroup = new tcuTestCase.DeqpTest( - 'recreate_color', 'Recreate colorbuffer tests' - ); - - this.addChild(recreateColorGroup); + /** @type {Array} */ var recreateColorGroup = []; + var numRecreateColorGroups = 7; + for (var ii = 0; ii < numRecreateColorGroups; ++ii) { + recreateColorGroup[ii] = new tcuTestCase.DeqpTest('recreate_color', 'Recreate colorbuffer tests'); + this.addChild(recreateColorGroup[ii]); + } - for (var colorFmtNdx = 0; - colorFmtNdx < colorFormats.length; - colorFmtNdx++) { + for (var colorFmtNdx = 0; colorFmtNdx < colorFormats.length; colorFmtNdx++) { colorFormat = colorFormats[colorFmtNdx].format; depthStencilFormat = gl.DEPTH24_STENCIL8; @@ -2314,7 +2313,7 @@ depthStencilType, depthStencilFormat ); - recreateColorGroup.addChild( + recreateColorGroup[colorFmtNdx % numRecreateColorGroups].addChild( new es3fFboRenderTest.RecreateBuffersTest( config, gl.COLOR_BUFFER_BIT, true /* rebind */ ) @@ -2365,7 +2364,7 @@ * Create and execute the test cases * @param {WebGL2RenderingContext} context */ - es3fFboRenderTest.run = function(context) { + es3fFboRenderTest.run = function(context, range) { gl = context; //Set up Test Root parameters var state = tcuTestCase.runner; @@ -2377,6 +2376,8 @@ description(state.testCases.getDescription()); try { + if (range) + state.setRange(range); //Run test cases tcuTestCase.runTestCases(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboStencilbufferTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboStencilbufferTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboStencilbufferTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboStencilbufferTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -68,6 +68,7 @@ es3fFboStencilbufferTests.BasicFboStencilCase.prototype.preCheck = function() { this.checkFormatSupport(this.m_format); + return true; // No exception thrown }; /** diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboTestCase.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboTestCase.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboTestCase.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboTestCase.js 2017-01-16 01:38:20.000000000 +0000 @@ -134,9 +134,17 @@ // Exceeds spec-mandated minimum - need to check. /** @const @type {goog.NumberArray} */ var supportedSampleCounts = es3fFboTestCase.querySampleCounts(sizedFormat); var supported = Array.prototype.slice.call(supportedSampleCounts); - if (supported.indexOf(numSamples) == -1) - throw new Error('Sample count not supported'); + if (supported.indexOf(numSamples) == -1) { + if (minSampleCount == 0 || numSamples > gl.getParameter(gl.MAX_SAMPLES)) { + checkMessage(false, "Sample count not supported, but it is allowed."); + return false; + } else { + throw new Error('Sample count not supported'); + } + } + return true; } + return true; }; /** @@ -202,8 +210,8 @@ /** @type {tcuSurface.Surface} */ var result = new tcuSurface.Surface(width, height); // Call preCheck() that can throw exception if some requirement is not met. - if (this.preCheck) - this.preCheck(); + if (this.preCheck && !this.preCheck()) + return tcuTestCase.IterateResult.STOP; // Render using GLES3. try { @@ -292,7 +300,9 @@ gl.clearColor(0.0, 0.0, 0.0, 0.0); gl.clearDepth(1.0); gl.clearStencil(0.0); - gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); + // Do not call clear() here because it might generate an INVALID_OPERATION if + // some color buffers are of integer formats due to WebGL2 specific constraint. + // The tests do not rely on clear() here. } }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboTestUtil.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboTestUtil.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboTestUtil.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFboTestUtil.js 2017-01-16 01:38:20.000000000 +0000 @@ -283,7 +283,7 @@ /** @const {number} */ var f1 = 0.5 + (x - y) * 0.5; /** @const {Array} */ var fv = [f0, f1, 1.0 - f0, 1.0 - f1]; - /** @const {Array} */ var color = deMath.clampVector(deMath.add(gradientMin, deMath.multiply(deMath.subtract(gradientMax, gradientMin), fv)), 0, 1); + /** @const {Array} */ var color = deMath.add(gradientMin, deMath.multiply(deMath.subtract(gradientMax, gradientMin), fv)); /** @const {Array} */ var icolor = es3fFboTestUtil.castVectorSaturate(color, tcuTexture.deTypes.deInt32); /** @const {Array} */ var uicolor = es3fFboTestUtil.castVectorSaturate(color, tcuTexture.deTypes.deUint32); @@ -673,7 +673,7 @@ colors = tex.sample(texCoords, lod); - var color = deMath.clampVector(deMath.add(deMath.multiply(colors, texScale), texBias), 0, 1); + var color = deMath.add(deMath.multiply(colors, texScale), texBias); var icolor = es3fFboTestUtil.castVectorSaturate(color, tcuTexture.deTypes.deInt32); var uicolor = es3fFboTestUtil.castVectorSaturate(color, tcuTexture.deTypes.deUint32); @@ -801,7 +801,7 @@ colors = tex.sample(texCoords, lod); - /** @const {Array} */ var color = deMath.clampVector(deMath.add(deMath.multiply(colors, texScale), texBias), 0, 1); + /** @const {Array} */ var color = deMath.add(deMath.multiply(colors, texScale), texBias); /** @const {Array} */ var icolor = es3fFboTestUtil.castVectorSaturate(color, tcuTexture.deTypes.deInt32); /** @const {Array} */ var uicolor = es3fFboTestUtil.castVectorSaturate(color, tcuTexture.deTypes.deUint32); @@ -931,7 +931,7 @@ colors = tex.sample(texCoords, lod); - /** @const {Array} */ var color = deMath.clampVector(deMath.add(deMath.multiply(colors, texScale), texBias), 0, 1); + /** @const {Array} */ var color = deMath.add(deMath.multiply(colors, texScale), texBias); /** @const {Array} */ var icolor = es3fFboTestUtil.castVectorSaturate(color, tcuTexture.deTypes.deInt32); /** @const {Array} */ var uicolor = es3fFboTestUtil.castVectorSaturate(color, tcuTexture.deTypes.deUint32); @@ -1031,7 +1031,7 @@ var numPackets = packet.length; /** @const {number} */ var gradientMin = this.u_minGradient.value[0]; /** @const {number} */ var gradientMax = this.u_maxGradient.value[0]; - /** @type {Array} */ var color = deMath.clampVector(this.u_color.value, 0, 1); + /** @type {Array} */ var color = this.u_color.value; /** @type {Array} */ var icolor = es3fFboTestUtil.castVectorSaturate(color, tcuTexture.deTypes.deInt32); /** @type {Array} */ var uicolor = es3fFboTestUtil.castVectorSaturate(color, tcuTexture.deTypes.deUint32); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFragmentOutputTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFragmentOutputTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFragmentOutputTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFragmentOutputTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -581,7 +581,7 @@ maxVal = deMath.min(maxVal, fmtInfo.valueMax); } - console.log('out ' + curInVec + ' value range: ' + minVal + ' -> ' + maxVal); + bufferedLogToConsole('out ' + curInVec + ' value range: ' + minVal + ' -> ' + maxVal); for (var y = 0; y < gridHeight; y++) { for (var x = 0; x < gridWidth; x++) { @@ -623,7 +623,7 @@ maxVal = tcuTextureUtil.select(maxVal, deMath.min(maxVal, fmtMaxVal), isZero); } - console.log('out ' + curInVec + ' value range: ' + minVal + ' -> ' + maxVal); + bufferedLogToConsole('out ' + curInVec + ' value range: ' + minVal + ' -> ' + maxVal); rangeDiv = es3fFragmentOutputTests.swizzleVec([gridWidth - 1, gridHeight - 1, gridWidth - 1, gridHeight - 1], curInVec); // IVec4 for (var i = 0; i < 4; i++) { @@ -658,7 +658,7 @@ maxVal = deMath.min(maxVal, fmtMaxVal); } - console.log('out ' + curInVec + ' value range: ' + minVal + ' -> ' + maxVal); + bufferedLogToConsole('out ' + curInVec + ' value range: ' + minVal + ' -> ' + maxVal); rangeDiv = es3fFragmentOutputTests.swizzleVec([gridWidth - 1, gridHeight - 1, gridWidth - 1, gridHeight - 1], curInVec); // IVec4 @@ -900,9 +900,11 @@ case tcuTexture.TextureChannelClass.SIGNED_INTEGER: case tcuTexture.TextureChannelClass.UNSIGNED_INTEGER: { + // The C++ dEQP code uses ~0u but ~0 is -1 in Javascript + var UINT_MAX = Math.pow(2.0, 32.0) - 1; threshold = tcuTextureUtil.select( [0, 0, 0, 0], - [1, 1, 1, 1], + [UINT_MAX, UINT_MAX, UINT_MAX, UINT_MAX], cmpMask ); // UVec4 isOk = tcuImageCompare.intThresholdCompare(name, desc, reference, rendered, threshold/*, tcu::COMPARE_LOG_RESULT*/); @@ -1154,9 +1156,6 @@ // .basic. - /** @type {tcuTestCase.DeqpTest} */ var basicGroup = tcuTestCase.newTest('basic', 'Basic fragment output tests'); - testGroup.addChild(basicGroup); - /** @const @type {number} */ var width = 64; /** @const @type {number} */ var height = 64; /** @const @type {number} */ var samples = 0; @@ -1166,8 +1165,8 @@ // .float if (gl.getExtension('EXT_color_buffer_float')) { - /** @type {tcuTestCase.DeqpTest} */ var floatGroup = tcuTestCase.newTest('float', 'Floating-point output tests'); - basicGroup.addChild(floatGroup); + /** @type {tcuTestCase.DeqpTest} */ var floatGroup = tcuTestCase.newTest('basic.float', 'Floating-point output tests'); + testGroup.addChild(floatGroup); for (var fmtNdx = 0; fmtNdx < requiredFloatFormats.length; fmtNdx++) { var format = requiredFloatFormats[fmtNdx]; @@ -1190,8 +1189,8 @@ } // .fixed - /** @type {tcuTestCase.DeqpTest} */ var fixedGroup = tcuTestCase.newTest('fixed', 'Fixed-point output tests'); - basicGroup.addChild(fixedGroup); + /** @type {tcuTestCase.DeqpTest} */ var fixedGroup = tcuTestCase.newTest('basic.fixed', 'Fixed-point output tests'); + testGroup.addChild(fixedGroup); for (var fmtNdx = 0; fmtNdx < requiredFixedFormats.length; fmtNdx++) { var format = requiredFixedFormats[fmtNdx]; var fmtName = es3fFboTestUtil.getFormatName(format); @@ -1211,8 +1210,8 @@ } // .int - /** @type {tcuTestCase.DeqpTest} */ var intGroup = tcuTestCase.newTest('int', 'Integer output tests'); - basicGroup.addChild(intGroup); + /** @type {tcuTestCase.DeqpTest} */ var intGroup = tcuTestCase.newTest('basic.int', 'Integer output tests'); + testGroup.addChild(intGroup); for (var fmtNdx = 0; fmtNdx < requiredIntFormats.length; fmtNdx++) { var format = requiredIntFormats[fmtNdx]; var fmtName = es3fFboTestUtil.getFormatName(format); @@ -1232,8 +1231,8 @@ } // .uint - /** @type {tcuTestCase.DeqpTest} */ var uintGroup = tcuTestCase.newTest('uint', 'Usigned integer output tests'); - basicGroup.addChild(uintGroup); + /** @type {tcuTestCase.DeqpTest} */ var uintGroup = tcuTestCase.newTest('basic.uint', 'Usigned integer output tests'); + testGroup.addChild(uintGroup); for (var fmtNdx = 0; fmtNdx < requiredUintFormats.length; fmtNdx++) { var format = requiredUintFormats[fmtNdx]; var fmtName = es3fFboTestUtil.getFormatName(format); @@ -1255,15 +1254,12 @@ // .array - /** @type {tcuTestCase.DeqpTest} */ var arrayGroup = tcuTestCase.newTest('array', 'Array outputs'); - testGroup.addChild(arrayGroup); - /** @type {number} */ var numTargets = 3; // .float if (gl.getExtension('EXT_color_buffer_float')) { - /** @type {tcuTestCase.DeqpTest} */ var arrayFloatGroup = tcuTestCase.newTest('float', 'Floating-point output tests'); - arrayGroup.addChild(arrayFloatGroup); + /** @type {tcuTestCase.DeqpTest} */ var arrayFloatGroup = tcuTestCase.newTest('array.float', 'Floating-point output tests'); + testGroup.addChild(arrayFloatGroup); for (var fmtNdx = 0; fmtNdx < requiredFloatFormats.length; fmtNdx++) { var format = requiredFloatFormats[fmtNdx]; var fmtName = es3fFboTestUtil.getFormatName(format); @@ -1285,8 +1281,8 @@ } // .fixed - /** @type {tcuTestCase.DeqpTest} */ var arrayFixedGroup = tcuTestCase.newTest('fixed', 'Fixed-point output tests'); - arrayGroup.addChild(arrayFixedGroup); + /** @type {tcuTestCase.DeqpTest} */ var arrayFixedGroup = tcuTestCase.newTest('array.fixed', 'Fixed-point output tests'); + testGroup.addChild(arrayFixedGroup); for (var fmtNdx = 0; fmtNdx < requiredFixedFormats.length; fmtNdx++) { var format = requiredFixedFormats[fmtNdx]; var fmtName = es3fFboTestUtil.getFormatName(format); @@ -1307,8 +1303,8 @@ } // .int - /** @type {tcuTestCase.DeqpTest} */ var arrayIntGroup = tcuTestCase.newTest('int', 'Integer output tests'); - arrayGroup.addChild(arrayIntGroup); + /** @type {tcuTestCase.DeqpTest} */ var arrayIntGroup = tcuTestCase.newTest('array.int', 'Integer output tests'); + testGroup.addChild(arrayIntGroup); for (var fmtNdx = 0; fmtNdx < requiredIntFormats.length; fmtNdx++) { var format = requiredIntFormats[fmtNdx]; var fmtName = es3fFboTestUtil.getFormatName(format); @@ -1329,8 +1325,8 @@ } // .uint - /** @type {tcuTestCase.DeqpTest} */ var arrayUintGroup = tcuTestCase.newTest('uint', 'Usigned integer output tests'); - arrayGroup.addChild(arrayUintGroup); + /** @type {tcuTestCase.DeqpTest} */ var arrayUintGroup = tcuTestCase.newTest('array.uint', 'Usigned integer output tests'); + testGroup.addChild(arrayUintGroup); for (var fmtNdx = 0; fmtNdx < requiredUintFormats.length; fmtNdx++) { var format = requiredUintFormats[fmtNdx]; var fmtName = es3fFboTestUtil.getFormatName(format); @@ -1352,14 +1348,18 @@ // .random - /** @type {tcuTestCase.DeqpTest} */ var randomGroup = tcuTestCase.newTest('random', 'Random fragment output cases'); - testGroup.addChild(randomGroup); + /** @type {Array} */ var randomGroup = []; + var numRandomGroups = 3; + for (var ii = 0; ii < numRandomGroups; ++ii) { + randomGroup[ii] = tcuTestCase.newTest('random', 'Random fragment output cases'); + testGroup.addChild(randomGroup[ii]); + } /** @type {boolean} */ var colorBufferFloatSupported = (gl.getExtension('EXT_color_buffer_float') != null); for (var seed = 0; seed < 100; seed++) { var test = es3fFragmentOutputTests.createRandomCase(2, 4, seed, colorBufferFloatSupported); if (test !== null) { - randomGroup.addChild(test); + randomGroup[seed % numRandomGroups].addChild(test); } } @@ -1368,7 +1368,7 @@ /** * Create and execute the test cases */ - es3fFragmentOutputTests.run = function(context) { + es3fFragmentOutputTests.run = function(context, range) { gl = context; //Set up Test Root parameters var testName = 'fragment_output'; @@ -1384,10 +1384,12 @@ try { es3fFragmentOutputTests.init(gl); + if (range) + state.setRange(range); tcuTestCase.runTestCases(); } catch (err) { testFailedOptions('Failed to es3fFragmentOutputTests.run tests', false); - console.log(err); + bufferedLogToConsole(err); tcuTestCase.runner.terminate(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFramebufferBlitTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFramebufferBlitTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFramebufferBlitTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fFramebufferBlitTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -227,8 +227,8 @@ // Image origin must be visible (for baseColor) DE_ASSERT(Math.min(this.m_dstRect[0], this.m_dstRect[2]) >= 0); DE_ASSERT(Math.min(this.m_dstRect[1], this.m_dstRect[3]) >= 0); - /** @const {tcuRGBA.RGBA} */ var cellColorA = tcuRGBA.newRGBAFromArray(this.m_gridCellColorA); - /** @const {tcuRGBA.RGBA} */ var cellColorB = tcuRGBA.newRGBAFromArray(this.m_gridCellColorB); + /** @const {tcuRGBA.RGBA} */ var cellColorA = tcuRGBA.newRGBAFromVec(this.m_gridCellColorA); + /** @const {tcuRGBA.RGBA} */ var cellColorB = tcuRGBA.newRGBAFromVec(this.m_gridCellColorB); // TODO: implement // const tcu::RGBA threshold = this.m_context.getRenderTarget().getPixelFormat().getColorThreshold() + tcu::RGBA(7,7,7,7); /** @type {tcuRGBA.RGBA} */ var threshold = tcuRGBA.newRGBAComponents(7, 7, 7, 7); @@ -477,9 +477,10 @@ /** @const {Array} */ var dstSize = [132, 128]; // Blit rectangle tests. - /** @type {tcuTestCase.DeqpTest} */ var rectGroup = tcuTestCase.newTest('rect', 'Blit rectangle tests'); - this.addChild(rectGroup); for (var rectNdx = 0; rectNdx < copyRects.length; rectNdx++) { + /** @type {tcuTestCase.DeqpTest} */ var rectGroup = tcuTestCase.newTest('rect', 'Blit rectangle tests'); + this.addChild(rectGroup); + for (var swzNdx = 0; swzNdx < swizzles.length; swzNdx++) { /** @type {string} */ var name = copyRects[rectNdx].name + (swizzles[swzNdx].name ? ('_' + swizzles[swzNdx].name) : ''); /** @type {Array} */ var srcSwz = swizzles[swzNdx].srcSwizzle; @@ -494,6 +495,8 @@ // Nearest filter tests for (var rectNdx = 0; rectNdx < filterConsistencyRects.length; rectNdx++) { + /** @type {tcuTestCase.DeqpTest} */ var rectGroup = tcuTestCase.newTest('rect', 'Blit rectangle tests'); + this.addChild(rectGroup); for (var swzNdx = 0; swzNdx < swizzles.length; swzNdx++) { var name = 'nearest_consistency_' + filterConsistencyRects[rectNdx].name + (swizzles[swzNdx].name ? ('_' + swizzles[swzNdx].name) : ''); var srcSwz = swizzles[swzNdx].srcSwizzle; @@ -506,10 +509,9 @@ } // .conversion - /** @type {tcuTestCase.DeqpTest} */ var conversionGroup = tcuTestCase.newTest('conversion', 'Color conversion tests'); - this.addChild(conversionGroup); - for (var srcFmtNdx = 0; srcFmtNdx < colorFormats.length; srcFmtNdx++) { + /** @type {tcuTestCase.DeqpTest} */ var conversionGroup = tcuTestCase.newTest('conversion', 'Color conversion tests'); + this.addChild(conversionGroup); for (var dstFmtNdx = 0; dstFmtNdx < colorFormats.length; dstFmtNdx++) { /** @type {number} */ var srcFormat = colorFormats[srcFmtNdx]; /** @type {tcuTexture.TextureFormat} */ var srcTexFmt = gluTextureUtil.mapGLInternalFormat(srcFormat); @@ -567,9 +569,12 @@ new Area('out_of_bounds', es3fFramebufferBlitTests.BlitArea.AREA_OUT_OF_BOUNDS) ]; - /** @type {tcuTestCase.DeqpTest} */ var defaultFbGroup = tcuTestCase.newTest('default_framebuffer', 'Blits with default framebuffer'); - this.addChild(defaultFbGroup); - + var numDefaultFbSubGroups = 7; + /** @type {Array} */ var defaultFbGroup = []; + for (var ii = 0; ii < numDefaultFbSubGroups; ++ii) { + defaultFbGroup[ii] = tcuTestCase.newTest('default_framebuffer', 'Blits with default framebuffer'); + this.addChild(defaultFbGroup[ii]); + } for (var fmtNdx = 0; fmtNdx < colorFormats.length; fmtNdx++) { var format = colorFormats[fmtNdx]; var texFmt = gluTextureUtil.mapGLInternalFormat(format); @@ -582,7 +587,7 @@ fmtClass != tcuTexture.TextureChannelClass.SIGNED_FIXED_POINT) continue; // Conversion not supported. - defaultFbGroup.addChild(new es3fFramebufferBlitTests.BlitDefaultFramebufferCase(es3fFboTestUtil.getFormatName(format), '', format, filter)); + defaultFbGroup[fmtNdx % numDefaultFbSubGroups].addChild(new es3fFramebufferBlitTests.BlitDefaultFramebufferCase(es3fFboTestUtil.getFormatName(format), '', format, filter)); for (var areaNdx = 0; areaNdx < areas.length; areaNdx++) { var name = areas[areaNdx].name; @@ -591,13 +596,13 @@ if (addNearest) { - defaultFbGroup.addChild(new es3fFramebufferBlitTests.DefaultFramebufferBlitCase((es3fFboTestUtil.getFormatName(format) + '_nearest_' + name + '_blit_from_default'), '', format, gl.NEAREST, es3fFramebufferBlitTests.BlitDirection.BLIT_DEFAULT_TO_TARGET, areas[areaNdx].area)); - defaultFbGroup.addChild(new es3fFramebufferBlitTests.DefaultFramebufferBlitCase((es3fFboTestUtil.getFormatName(format) + '_nearest_' + name + '_blit_to_default'), '', format, gl.NEAREST, es3fFramebufferBlitTests.BlitDirection.BLIT_TO_DEFAULT_FROM_TARGET, areas[areaNdx].area)); + defaultFbGroup[fmtNdx % numDefaultFbSubGroups].addChild(new es3fFramebufferBlitTests.DefaultFramebufferBlitCase((es3fFboTestUtil.getFormatName(format) + '_nearest_' + name + '_blit_from_default'), '', format, gl.NEAREST, es3fFramebufferBlitTests.BlitDirection.BLIT_DEFAULT_TO_TARGET, areas[areaNdx].area)); + defaultFbGroup[fmtNdx % numDefaultFbSubGroups].addChild(new es3fFramebufferBlitTests.DefaultFramebufferBlitCase((es3fFboTestUtil.getFormatName(format) + '_nearest_' + name + '_blit_to_default'), '', format, gl.NEAREST, es3fFramebufferBlitTests.BlitDirection.BLIT_TO_DEFAULT_FROM_TARGET, areas[areaNdx].area)); } if (addLinear) { - defaultFbGroup.addChild(new es3fFramebufferBlitTests.DefaultFramebufferBlitCase((es3fFboTestUtil.getFormatName(format) + '_linear_' + name + '_blit_from_default'), '', format, gl.LINEAR, es3fFramebufferBlitTests.BlitDirection.BLIT_DEFAULT_TO_TARGET, areas[areaNdx].area)); - defaultFbGroup.addChild(new es3fFramebufferBlitTests.DefaultFramebufferBlitCase((es3fFboTestUtil.getFormatName(format) + '_linear_' + name + '_blit_to_default'), '', format, gl.LINEAR, es3fFramebufferBlitTests.BlitDirection.BLIT_TO_DEFAULT_FROM_TARGET, areas[areaNdx].area)); + defaultFbGroup[fmtNdx % numDefaultFbSubGroups].addChild(new es3fFramebufferBlitTests.DefaultFramebufferBlitCase((es3fFboTestUtil.getFormatName(format) + '_linear_' + name + '_blit_from_default'), '', format, gl.LINEAR, es3fFramebufferBlitTests.BlitDirection.BLIT_DEFAULT_TO_TARGET, areas[areaNdx].area)); + defaultFbGroup[fmtNdx % numDefaultFbSubGroups].addChild(new es3fFramebufferBlitTests.DefaultFramebufferBlitCase((es3fFboTestUtil.getFormatName(format) + '_linear_' + name + '_blit_to_default'), '', format, gl.LINEAR, es3fFramebufferBlitTests.BlitDirection.BLIT_TO_DEFAULT_FROM_TARGET, areas[areaNdx].area)); } } } @@ -644,6 +649,7 @@ es3fFramebufferBlitTests.BlitColorConversionCase.prototype.preCheck = function() { this.checkFormatSupport(this.m_srcFormat); this.checkFormatSupport(this.m_dstFormat); + return true; // No exception thrown }; /** @@ -717,14 +723,16 @@ ctx.viewport(0, 0, this.m_size[0], this.m_size[1]); // Render gradients. - ctx.bindFramebuffer(gl.FRAMEBUFFER, srcFbo); - gradientToDstShader.setGradient(ctx, gradShaderDstID, dstRangeInfo.valueMin, dstRangeInfo.valueMax); - - rrUtil.drawQuad(ctx, gradShaderDstID, [-1, -1, 0], [1, 1, 0]); - - ctx.bindFramebuffer(gl.FRAMEBUFFER, dstFbo); - gradientToSrcShader.setGradient(ctx, gradShaderSrcID, srcRangeInfo.valueMin, dstRangeInfo.valueMax); - rrUtil.drawQuad(ctx, gradShaderSrcID, [-1, -1, 0], [1, 1, 0]); + for (var ndx = 0; ndx < 2; ndx++) { + ctx.bindFramebuffer(gl.FRAMEBUFFER, ndx ? dstFbo : srcFbo); + if (ndx) { + gradientToDstShader.setGradient(ctx, gradShaderDstID, dstRangeInfo.valueMax, dstRangeInfo.valueMin); + rrUtil.drawQuad(ctx, gradShaderDstID, [-1, -1, 0], [1, 1, 0]); + } else { + gradientToSrcShader.setGradient(ctx, gradShaderSrcID, srcRangeInfo.valueMin, srcRangeInfo.valueMax); + rrUtil.drawQuad(ctx, gradShaderSrcID, [-1, -1, 0], [1, 1, 0]); + } + } // Execute copy. ctx.bindFramebuffer(gl.READ_FRAMEBUFFER, srcFbo); @@ -798,6 +806,7 @@ */ es3fFramebufferBlitTests.BlitDepthStencilCase.prototype.preCheck = function() { this.checkFormatSupport(this.m_format); + return true; // No exception thrown }; /** @@ -965,6 +974,7 @@ */ es3fFramebufferBlitTests.BlitDefaultFramebufferCase.prototype.preCheck = function() { this.checkFormatSupport(this.m_format); + return true; // No exception thrown }; /** @@ -1218,7 +1228,7 @@ this.checkError(); }; - es3fFramebufferBlitTests.run = function(context) { + es3fFramebufferBlitTests.run = function(context, range) { gl = context; //Set up root Test var state = tcuTestCase.runner; @@ -1236,11 +1246,13 @@ try { //Create test cases test.init(); + if (range) + state.setRange(range); //Run test cases tcuTestCase.runTestCases(); } catch (err) { - console.log(err); + bufferedLogToConsole(err); testFailedOptions('Failed to es3fFramebufferBlitTests.run tests', false); tcuTestCase.runner.terminate(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fInstancedRenderingTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fInstancedRenderingTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fInstancedRenderingTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fInstancedRenderingTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -372,6 +372,14 @@ } }; + es3fInstancedRenderingTests.InstancedRenderingCase.prototype.deinit = function() { + var numVertexAttribArrays = /** @type{number} */ (gl.getParameter(gl.MAX_VERTEX_ATTRIBS)); + for (var idx = 0; idx < numVertexAttribArrays; idx++) { + gl.disableVertexAttribArray(idx); + gl.vertexAttribDivisor(idx, 0); + } + }; + es3fInstancedRenderingTests.InstancedRenderingCase.prototype.iterate = function() { /** @type {number} */ var width = Math.min(gl.drawingBufferWidth, es3fInstancedRenderingTests.MAX_RENDER_WIDTH); /** @type {number} */ var height = Math.min(gl.drawingBufferHeight, es3fInstancedRenderingTests.MAX_RENDER_HEIGHT); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fIntegerStateQueryTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fIntegerStateQueryTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fIntegerStateQueryTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fIntegerStateQueryTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -1,2043 +1,2049 @@ -/*------------------------------------------------------------------------- - * drawElements Quality Program OpenGL ES Utilities - * ------------------------------------------------ - * - * Copyright 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the 'License'); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an 'AS IS' BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -'use strict'; -goog.provide('functional.gles3.es3fIntegerStateQueryTests'); -goog.require('framework.common.tcuTestCase'); -goog.require('framework.delibs.debase.deRandom'); -goog.require('functional.gles3.es3fApiCase'); -goog.require('modules.shared.glsStateQuery'); - -goog.scope(function() { - var es3fIntegerStateQueryTests = functional.gles3.es3fIntegerStateQueryTests; - var tcuTestCase = framework.common.tcuTestCase; - var deRandom = framework.delibs.debase.deRandom; - var es3fApiCase = functional.gles3.es3fApiCase; - var glsStateQuery = modules.shared.glsStateQuery; - - /** @type {string} */ var transformFeedbackTestVertSource = '' + - '#version 300 es\n' + - 'void main (void)\n' + - '{\n' + - ' gl_Position = vec4(0.0);\n' + - '}\n'; - - /** @type {string} */ var transformFeedbackTestFragSource = '' + - '#version 300 es\n' + - 'layout(location = 0) out mediump vec4 fragColor;' + - 'void main (void)\n' + - '{\n' + - ' fragColor = vec4(0.0);\n' + - '}\n'; - - /** @type {string} */ var testVertSource = '' + - '#version 300 es\n' + - 'void main (void)\n' + - '{\n' + - ' gl_Position = vec4(0.0);\n' + - '}\n'; - - /** @type {string} */ var testFragSource = '' + - '#version 300 es\n' + - 'layout(location = 0) out mediump vec4 fragColor;' + - 'void main (void)\n' + - '{\n' + - ' fragColor = vec4(0.0);\n' + - '}\n'; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.TransformFeedbackTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {WebGLTransformFeedback} */ this.m_transformfeedback; - }; - - es3fIntegerStateQueryTests.TransformFeedbackTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.TransformFeedbackTestCase.prototype.constructor = es3fIntegerStateQueryTests.TransformFeedbackTestCase; - - es3fIntegerStateQueryTests.TransformFeedbackTestCase.prototype.testTransformFeedback = function() { - throw new Error('This method should be implemented by child classes.'); - }; - - es3fIntegerStateQueryTests.TransformFeedbackTestCase.prototype.test = function() { - this.beforeTransformFeedbackTest(); // [dag] added this as there is no other way this method would be called. - - this.m_transformfeedback = gl.createTransformFeedback(); - - /** @type {WebGLShader} */ var shaderVert = gl.createShader(gl.VERTEX_SHADER); - gl.shaderSource(shaderVert, transformFeedbackTestVertSource); - gl.compileShader(shaderVert); - - var compileStatus = /** @type {boolean} */ (gl.getShaderParameter(shaderVert, gl.COMPILE_STATUS)); - glsStateQuery.compare(compileStatus, true); - - /** @type {WebGLShader} */ var shaderFrag = gl.createShader(gl.FRAGMENT_SHADER); - gl.shaderSource(shaderFrag, transformFeedbackTestFragSource); - gl.compileShader(shaderFrag); - - compileStatus = /** @type {boolean} */ (gl.getShaderParameter(shaderFrag, gl.COMPILE_STATUS)); - glsStateQuery.compare(compileStatus, true); - - /** @type {WebGLProgram} */ var shaderProg = gl.createProgram(); - gl.attachShader(shaderProg, shaderVert); - gl.attachShader(shaderProg, shaderFrag); - /** @type {Array} */ var transform_feedback_outputs = ['gl_Position']; - gl.transformFeedbackVaryings(shaderProg, transform_feedback_outputs, gl.INTERLEAVED_ATTRIBS); - gl.linkProgram(shaderProg); - - var linkStatus = /** @type {boolean} */ (gl.getProgramParameter(shaderProg, gl.LINK_STATUS)); - glsStateQuery.compare(linkStatus, true); - - gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, this.m_transformfeedback); - - - /** @type {WebGLBuffer} */ var feedbackBufferId = gl.createBuffer(); - gl.bindBuffer(gl.TRANSFORM_FEEDBACK_BUFFER, feedbackBufferId); - gl.bufferData(gl.TRANSFORM_FEEDBACK_BUFFER, new Float32Array(16), gl.DYNAMIC_READ); - gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, feedbackBufferId); - - gl.useProgram(shaderProg); - - this.testTransformFeedback(); - - gl.useProgram(null); - gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, null); - gl.deleteTransformFeedback(this.m_transformfeedback); - gl.deleteBuffer(feedbackBufferId); - gl.deleteShader(shaderVert); - gl.deleteShader(shaderFrag); - gl.deleteProgram(shaderProg); - - this.afterTransformFeedbackTest(); // [dag] added this as there is no other way this method would be called. - }; - - /** - * @constructor - * @extends {es3fIntegerStateQueryTests.TransformFeedbackTestCase} - * @param {string} name - */ - es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase = function(name) { - es3fIntegerStateQueryTests.TransformFeedbackTestCase.call(this, name, 'GL_TRANSFORM_FEEDBACK_BINDING'); - }; - - es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase.prototype = Object.create(es3fIntegerStateQueryTests.TransformFeedbackTestCase.prototype); - es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase; - - - es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase.prototype.beforeTransformFeedbackTest = function() { - this.check(glsStateQuery.verify(gl.TRANSFORM_FEEDBACK_BINDING, null), 'beforeTransformFeedbackTest'); - }; - - es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase.prototype.testTransformFeedback = function() { - this.check(glsStateQuery.verify(gl.TRANSFORM_FEEDBACK_BINDING, this.m_transformfeedback), 'testTransformFeedback'); - }; - - es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase.prototype.afterTransformFeedbackTest = function() { - this.check(glsStateQuery.verify(gl.TRANSFORM_FEEDBACK_BINDING, null), 'afterTransformFeedbackTest'); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} targetName - * @param {number} minValue - */ - es3fIntegerStateQueryTests.ConstantMinimumValueTestCase = function(name, description, targetName, minValue) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_targetName = targetName; - /** @type {number} */ this.m_minValue = minValue; - }; - - es3fIntegerStateQueryTests.ConstantMinimumValueTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.ConstantMinimumValueTestCase.prototype.constructor = es3fIntegerStateQueryTests.ConstantMinimumValueTestCase; - - es3fIntegerStateQueryTests.ConstantMinimumValueTestCase.prototype.test = function() { - this.check(glsStateQuery.verifyGreaterOrEqual(this.m_targetName, this.m_minValue), 'Fail'); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} targetName - * @param {number} minValue - */ - es3fIntegerStateQueryTests.ConstantMaximumValueTestCase = function(name, description, targetName, minValue) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_targetName = targetName; - /** @type {number} */ this.m_minValue = minValue; - }; - - es3fIntegerStateQueryTests.ConstantMaximumValueTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.ConstantMaximumValueTestCase.prototype.constructor = es3fIntegerStateQueryTests.ConstantMaximumValueTestCase; - - es3fIntegerStateQueryTests.ConstantMaximumValueTestCase.prototype.test = function() { - this.check(glsStateQuery.verifyLessOrEqual(this.m_targetName, this.m_minValue), 'Fail'); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.SampleBuffersTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.SampleBuffersTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.SampleBuffersTestCase.prototype.constructor = es3fIntegerStateQueryTests.SampleBuffersTestCase; - - es3fIntegerStateQueryTests.SampleBuffersTestCase.prototype.test = function() { - /** @type {number} */ var expectedSampleBuffers = (/** @type {number} */ (gl.getParameter(gl.SAMPLES)) > 1) ? 1 : 0; - - bufferedLogToConsole('Sample count is ' + expectedSampleBuffers + ', expecting GL_SAMPLE_BUFFERS to be ' + expectedSampleBuffers); - - this.check(glsStateQuery.verify(gl.SAMPLE_BUFFERS, expectedSampleBuffers)); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.SamplesTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.SamplesTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.SamplesTestCase.prototype.constructor = es3fIntegerStateQueryTests.SamplesTestCase; - - es3fIntegerStateQueryTests.SamplesTestCase.prototype.test = function() { - var numSamples = /** @type {number} */ (gl.getParameter(gl.SAMPLES)); - // MSAA? - if (numSamples > 1) { - bufferedLogToConsole('Sample count is ' + numSamples); - - this.check(glsStateQuery.verify(gl.SAMPLES, numSamples)); - } else { - /** @type {Array} */ var validSamples = [0, 1]; - - bufferedLogToConsole('Expecting GL_SAMPLES to be 0 or 1'); - - this.check(glsStateQuery.verifyAnyOf(gl.SAMPLES, validSamples)); - } - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} targetName - */ - es3fIntegerStateQueryTests.HintTestCase = function(name, description, targetName) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_targetName = targetName; - }; - - es3fIntegerStateQueryTests.HintTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.HintTestCase.prototype.constructor = es3fIntegerStateQueryTests.HintTestCase; - - es3fIntegerStateQueryTests.HintTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(this.m_targetName, gl.DONT_CARE)); - - gl.hint(this.m_targetName, gl.NICEST); - this.check(glsStateQuery.verify(this.m_targetName, gl.NICEST)); - - gl.hint(this.m_targetName, gl.FASTEST); - this.check(glsStateQuery.verify(this.m_targetName, gl.FASTEST)); - - gl.hint(this.m_targetName, gl.DONT_CARE); - this.check(glsStateQuery.verify(this.m_targetName, gl.DONT_CARE)); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.DepthFuncTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.DepthFuncTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.DepthFuncTestCase.prototype.constructor = es3fIntegerStateQueryTests.DepthFuncTestCase; - - es3fIntegerStateQueryTests.DepthFuncTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(gl.DEPTH_FUNC, gl.LESS)); - - /** @type {Array} */ var depthFunctions = [gl.NEVER, gl.ALWAYS, gl.LESS, gl.LEQUAL, gl.EQUAL, gl.GREATER, gl.GEQUAL, gl.NOTEQUAL]; - for (var ndx = 0; ndx < depthFunctions.length; ndx++) { - gl.depthFunc(depthFunctions[ndx]); - - this.check(glsStateQuery.verify(gl.DEPTH_FUNC, depthFunctions[ndx])); - } - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.CullFaceTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.CullFaceTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.CullFaceTestCase.prototype.constructor = es3fIntegerStateQueryTests.CullFaceTestCase; - - es3fIntegerStateQueryTests.CullFaceTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(gl.CULL_FACE_MODE, gl.BACK)); - - /** @type {Array} */ var cullFaces = [gl.FRONT, gl.BACK, gl.FRONT_AND_BACK]; - for (var ndx = 0; ndx < cullFaces.length; ndx++) { - gl.cullFace(cullFaces[ndx]); - - this.check(glsStateQuery.verify(gl.CULL_FACE_MODE, cullFaces[ndx])); - } - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.FrontFaceTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.FrontFaceTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.FrontFaceTestCase.prototype.constructor = es3fIntegerStateQueryTests.FrontFaceTestCase; - - es3fIntegerStateQueryTests.FrontFaceTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(gl.FRONT_FACE, gl.CCW)); - - /** @type {Array} */ var frontFaces = [gl.CW, gl.CCW]; - for (var ndx = 0; ndx < frontFaces.length; ndx++) { - gl.frontFace(frontFaces[ndx]); - - this.check(glsStateQuery.verify(gl.FRONT_FACE, frontFaces[ndx])); - } - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.ViewPortTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.ViewPortTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.ViewPortTestCase.prototype.constructor = es3fIntegerStateQueryTests.ViewPortTestCase; - - es3fIntegerStateQueryTests.ViewPortTestCase.prototype.test = function() { - /** @type {deRandom.Random} */ var rnd = new deRandom.Random(0xabcdef); - - var maxViewportDimensions = /** @type {Array} */ (gl.getParameter(gl.MAX_VIEWPORT_DIMS)); - - // verify initial value of first two values - this.check(glsStateQuery.verify(gl.VIEWPORT, new Int32Array([0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight]))); - - /** @type {number} */ var numIterations = 120; - for (var i = 0; i < numIterations; ++i) { - /** @type {number} */ var x = rnd.getInt(-64000, 64000); - /** @type {number} */ var y = rnd.getInt(-64000, 64000); - /** @type {number} */ var width = rnd.getInt(0, maxViewportDimensions[0]); - /** @type {number} */ var height = rnd.getInt(0, maxViewportDimensions[1]); - - gl.viewport(x, y, width, height); - this.check(glsStateQuery.verify(gl.VIEWPORT, new Int32Array([x, y, width, height]))); - } - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.ScissorBoxTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.ScissorBoxTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.ScissorBoxTestCase.prototype.constructor = es3fIntegerStateQueryTests.ScissorBoxTestCase; - - es3fIntegerStateQueryTests.ScissorBoxTestCase.prototype.test = function() { - /** @type {deRandom.Random} */ var rnd = new deRandom.Random(0xabcdef); - - // verify initial value of first two values - this.check(glsStateQuery.verifyMask(gl.SCISSOR_BOX, [0, 0, 0, 0], [true, true, false, false])); - - /** @type {number} */ var numIterations = 120; - for (var i = 0; i < numIterations; ++i) { - /** @type {number} */ var left = rnd.getInt(-64000, 64000); - /** @type {number} */ var bottom = rnd.getInt(-64000, 64000); - /** @type {number} */ var width = rnd.getInt(0, 64000); - /** @type {number} */ var height = rnd.getInt(0, 64000); - - gl.scissor(left, bottom, width, height); - this.check(glsStateQuery.verify(gl.SCISSOR_BOX, new Int32Array([left, bottom, width, height]))); - } - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.MaxViewportDimsTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.MaxViewportDimsTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.MaxViewportDimsTestCase.prototype.constructor = es3fIntegerStateQueryTests.MaxViewportDimsTestCase; - - es3fIntegerStateQueryTests.MaxViewportDimsTestCase.prototype.test = function() { - this.check(glsStateQuery.verifyGreaterOrEqual(gl.MAX_VIEWPORT_DIMS, [gl.drawingBufferWidth, gl.drawingBufferHeight])); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} testTargetName - */ - es3fIntegerStateQueryTests.StencilRefTestCase = function(name, description, testTargetName) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_testTargetName = testTargetName; - }; - - es3fIntegerStateQueryTests.StencilRefTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.StencilRefTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilRefTestCase; - - es3fIntegerStateQueryTests.StencilRefTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(this.m_testTargetName, 0)); - - var stencilBits = /** @type {number} */ (gl.getParameter(gl.STENCIL_BITS)); - - for (var stencilBit = 0; stencilBit < stencilBits; ++stencilBit) { - /** @type {number} */ var ref = 1 << stencilBit; - - gl.stencilFunc(gl.ALWAYS, ref, 0); // mask should not affect the REF - - this.check(glsStateQuery.verify(this.m_testTargetName, ref)); - - gl.stencilFunc(gl.ALWAYS, ref, ref); - - this.check(glsStateQuery.verify(this.m_testTargetName, ref)); - } - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} testTargetName - * @param {number} stencilFuncTargetFace - */ - es3fIntegerStateQueryTests.StencilRefSeparateTestCase = function(name, description, testTargetName, stencilFuncTargetFace) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_testTargetName = testTargetName; - /** @type {number} */ this.m_stencilFuncTargetFace = stencilFuncTargetFace; - }; - - es3fIntegerStateQueryTests.StencilRefSeparateTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.StencilRefSeparateTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilRefSeparateTestCase; - - es3fIntegerStateQueryTests.StencilRefSeparateTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(this.m_testTargetName, 0)); - - var stencilBits = /** @type {number} */ (gl.getParameter(gl.STENCIL_BITS)); - - for (var stencilBit = 0; stencilBit < stencilBits; ++stencilBit) { - /** @type {number} */ var ref = 1 << stencilBit; - - gl.stencilFuncSeparate(this.m_stencilFuncTargetFace, gl.ALWAYS, ref, 0); - - this.check(glsStateQuery.verify(this.m_testTargetName, ref)); - - gl.stencilFuncSeparate(this.m_stencilFuncTargetFace, gl.ALWAYS, ref, ref); - - this.check(glsStateQuery.verify(this.m_testTargetName, ref)); - } - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} stencilOpName - */ - es3fIntegerStateQueryTests.StencilOpTestCase = function(name, description, stencilOpName) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_stencilOpName = stencilOpName; - }; - - es3fIntegerStateQueryTests.StencilOpTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.StencilOpTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilOpTestCase; - - es3fIntegerStateQueryTests.StencilOpTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(this.m_stencilOpName, gl.KEEP)); - - /** @type {Array} */ var stencilOpValues = [gl.KEEP, gl.ZERO, gl.REPLACE, gl.INCR, gl.DECR, gl.INVERT, gl.INCR_WRAP, gl.DECR_WRAP]; - for (var ndx = 0; ndx < stencilOpValues.length; ++ndx) { - this.setStencilOp(stencilOpValues[ndx]); - - this.check(glsStateQuery.verify(this.m_stencilOpName, stencilOpValues[ndx])); - } - }; - - es3fIntegerStateQueryTests.StencilOpTestCase.prototype.deinit = function() { - // [dag] need to reset everything once the test is done, otherwise related tests fail - gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP); - }; - - /** - * @param {number} stencilOpValue - */ - es3fIntegerStateQueryTests.StencilOpTestCase.prototype.setStencilOp = function(stencilOpValue) { - switch (this.m_stencilOpName) { - case gl.STENCIL_FAIL: - case gl.STENCIL_BACK_FAIL: - gl.stencilOp(stencilOpValue, gl.KEEP, gl.KEEP); - break; - - case gl.STENCIL_PASS_DEPTH_FAIL: - case gl.STENCIL_BACK_PASS_DEPTH_FAIL: - gl.stencilOp(gl.KEEP, stencilOpValue, gl.KEEP); - break; - - case gl.STENCIL_PASS_DEPTH_PASS: - case gl.STENCIL_BACK_PASS_DEPTH_PASS: - gl.stencilOp(gl.KEEP, gl.KEEP, stencilOpValue); - break; - - default: - throw new Error('should not happen'); - } - }; - - /** - * @constructor - * @extends {es3fIntegerStateQueryTests.StencilOpTestCase} - * @param {string} name - * @param {string} description - * @param {number} stencilOpName - * @param {number} stencilOpFace - */ - es3fIntegerStateQueryTests.StencilOpSeparateTestCase = function(name, description, stencilOpName, stencilOpFace) { - es3fIntegerStateQueryTests.StencilOpTestCase.call(this, name, description, stencilOpName); - /** @type {number} */ this.m_stencilOpName = stencilOpName; - /** @type {number} */ this.m_stencilOpFace = stencilOpFace; - }; - - es3fIntegerStateQueryTests.StencilOpSeparateTestCase.prototype = Object.create(es3fIntegerStateQueryTests.StencilOpTestCase.prototype); - es3fIntegerStateQueryTests.StencilOpSeparateTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilOpSeparateTestCase; - - es3fIntegerStateQueryTests.StencilOpSeparateTestCase.prototype.test = function() {}; - - /** - * @param {number} stencilOpValue - */ - es3fIntegerStateQueryTests.StencilOpSeparateTestCase.prototype.setStencilOp = function(stencilOpValue) { - switch (this.m_stencilOpName) { - case gl.STENCIL_FAIL: - case gl.STENCIL_BACK_FAIL: - gl.stencilOpSeparate(this.m_stencilOpFace, stencilOpValue, gl.KEEP, gl.KEEP); - break; - - case gl.STENCIL_PASS_DEPTH_FAIL: - case gl.STENCIL_BACK_PASS_DEPTH_FAIL: - gl.stencilOpSeparate(this.m_stencilOpFace, gl.KEEP, stencilOpValue, gl.KEEP); - break; - - case gl.STENCIL_PASS_DEPTH_PASS: - case gl.STENCIL_BACK_PASS_DEPTH_PASS: - gl.stencilOpSeparate(this.m_stencilOpFace, gl.KEEP, gl.KEEP, stencilOpValue); - break; - - default: - throw new Error('should not happen'); - } - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.StencilFuncTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.StencilFuncTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.StencilFuncTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilFuncTestCase; - - es3fIntegerStateQueryTests.StencilFuncTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(gl.STENCIL_FUNC, gl.ALWAYS)); - - /** @type {Array} */ var stencilfuncValues = [gl.NEVER, gl.ALWAYS, gl.LESS, gl.LEQUAL, gl.EQUAL, gl.GEQUAL, gl.GREATER, gl.NOTEQUAL]; - - for (var ndx = 0; ndx < stencilfuncValues.length; ++ndx) { - gl.stencilFunc(stencilfuncValues[ndx], 0, 0); - - this.check(glsStateQuery.verify(gl.STENCIL_FUNC, stencilfuncValues[ndx])); - - this.check(glsStateQuery.verify(gl.STENCIL_BACK_FUNC, stencilfuncValues[ndx])); - } - }; - - es3fIntegerStateQueryTests.StencilFuncTestCase.prototype.deinit = function() { - // [dag] reset stencilFunc to ALWAYS - gl.stencilFunc(gl.ALWAYS, 0, 0); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} stencilFuncName - * @param {number} stencilFuncFace - */ - es3fIntegerStateQueryTests.StencilFuncSeparateTestCase = function(name, description, stencilFuncName, stencilFuncFace) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_stencilFuncName = stencilFuncName; - /** @type {number} */ this.m_stencilFuncFace = stencilFuncFace; - }; - - es3fIntegerStateQueryTests.StencilFuncSeparateTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.StencilFuncSeparateTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilFuncSeparateTestCase; - - es3fIntegerStateQueryTests.StencilFuncSeparateTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(this.m_stencilFuncName, gl.ALWAYS)); - - /** @type {Array} */ var stencilfuncValues = [gl.NEVER, gl.ALWAYS, gl.LESS, gl.LEQUAL, gl.EQUAL, gl.GEQUAL, gl.GREATER, gl.NOTEQUAL]; - - for (var ndx = 0; ndx < stencilfuncValues.length; ++ndx) { - gl.stencilFuncSeparate(this.m_stencilFuncFace, stencilfuncValues[ndx], 0, 0); - - this.check(glsStateQuery.verify(this.m_stencilFuncName, stencilfuncValues[ndx])); - } - }; - - es3fIntegerStateQueryTests.StencilFuncSeparateTestCase.prototype.deinit = function() { - // [dag] reset the stencil func - gl.stencilFuncSeparate(this.m_stencilFuncFace, gl.ALWAYS, 0, 0); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} testTargetName - */ - es3fIntegerStateQueryTests.StencilMaskTestCase = function(name, description, testTargetName) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_testTargetName = testTargetName; - }; - - es3fIntegerStateQueryTests.StencilMaskTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.StencilMaskTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilMaskTestCase; - - es3fIntegerStateQueryTests.StencilMaskTestCase.prototype.test = function() { - var stencilBits = /** @type {number} */ (gl.getParameter(gl.STENCIL_BITS)); - - this.check(glsStateQuery.verify(this.m_testTargetName, stencilBits)); - - for (var stencilBit = 0; stencilBit < stencilBits; ++stencilBit) { - /** @type {number} */ var mask = 1 << stencilBit; - - gl.stencilFunc(gl.ALWAYS, 0, mask); - - this.check(glsStateQuery.verify(this.m_testTargetName, mask)); - } - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} testTargetName - * @param {number} stencilFuncTargetFace - */ - es3fIntegerStateQueryTests.StencilMaskSeparateTestCase = function(name, description, testTargetName, stencilFuncTargetFace) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_testTargetName = testTargetName; - /** @type {number} */ this.m_stencilFuncTargetFace = stencilFuncTargetFace; - }; - - es3fIntegerStateQueryTests.StencilMaskSeparateTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.StencilMaskSeparateTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilMaskSeparateTestCase; - - es3fIntegerStateQueryTests.StencilMaskSeparateTestCase.prototype.test = function() { - var stencilBits = /** @type {number} */ (gl.getParameter(gl.STENCIL_BITS)); - - this.check(glsStateQuery.verify(this.m_testTargetName, stencilBits)); - - for (var stencilBit = 0; stencilBit < stencilBits; ++stencilBit) { - /** @type {number} */ var mask = 1 << stencilBit; - - gl.stencilFuncSeparate(this.m_stencilFuncTargetFace, gl.ALWAYS, 0, mask); - - this.check(glsStateQuery.verify(this.m_testTargetName, mask)); - } - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} testTargetName - */ - es3fIntegerStateQueryTests.StencilWriteMaskTestCase = function(name, description, testTargetName) { - /** @type {number} */ this.m_testTargetName = testTargetName; - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.StencilWriteMaskTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.StencilWriteMaskTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilWriteMaskTestCase; - - es3fIntegerStateQueryTests.StencilWriteMaskTestCase.prototype.test = function() { - var stencilBits = /** @type {number} */ (gl.getParameter(gl.STENCIL_BITS)); - - for (var stencilBit = 0; stencilBit < stencilBits; ++stencilBit) { - /** @type {number} */ var mask = 1 << stencilBit; - - gl.stencilMask(mask); - - this.check(glsStateQuery.verify(this.m_testTargetName, mask)); - } - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} testTargetName - * @param {number} stencilTargetFace - */ - es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase = function(name, description, testTargetName, stencilTargetFace) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_testTargetName = testTargetName; - /** @type {number} */ this.m_stencilTargetFace = stencilTargetFace; - }; - - es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase; - - es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase.prototype.test = function() { - var stencilBits = /** @type {number} */ (gl.getParameter(gl.STENCIL_BITS)); - - for (var stencilBit = 0; stencilBit < stencilBits; ++stencilBit) { - /** @type {number} */ var mask = 1 << stencilBit; - - gl.stencilMaskSeparate(this.m_stencilTargetFace, mask); - - this.check(glsStateQuery.verify(this.m_testTargetName, mask)); - } - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} testTargetName - * @param {number} initialValue - */ - es3fIntegerStateQueryTests.PixelStoreTestCase = function(name, description, testTargetName, initialValue) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_testTargetName = testTargetName; - /** @type {number} */ this.m_initialValue = initialValue; - }; - - es3fIntegerStateQueryTests.PixelStoreTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.PixelStoreTestCase.prototype.constructor = es3fIntegerStateQueryTests.PixelStoreTestCase; - - es3fIntegerStateQueryTests.PixelStoreTestCase.prototype.test = function() { - /** @type {deRandom.Random} */ var rnd = new deRandom.Random(0xabcdef); - - this.check(glsStateQuery.verify(this.m_testTargetName, this.m_initialValue)); - - /** @type {number} */ var numIterations = 120; - for (var i = 0; i < numIterations; ++i) { - /** @type {number} */ var referenceValue = rnd.getInt(0, 64000); - - gl.pixelStorei(this.m_testTargetName, referenceValue); - - this.check(glsStateQuery.verify(this.m_testTargetName, referenceValue)); - } - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} testTargetName - */ - es3fIntegerStateQueryTests.PixelStoreAlignTestCase = function(name, description, testTargetName) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_testTargetName = testTargetName; - }; - - es3fIntegerStateQueryTests.PixelStoreAlignTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.PixelStoreAlignTestCase.prototype.constructor = es3fIntegerStateQueryTests.PixelStoreAlignTestCase; - - es3fIntegerStateQueryTests.PixelStoreAlignTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(this.m_testTargetName, 4)); - - /** @type {Array} */ var alignments = [1, 2, 4, 8]; - - for (var ndx = 0; ndx < alignments.length; ++ndx) { - /** @type {number} */ var referenceValue = alignments[ndx]; - - gl.pixelStorei(this.m_testTargetName, referenceValue); - - this.check(glsStateQuery.verify(this.m_testTargetName, referenceValue)); - } - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} testTargetName - * @param {number} initialValue - */ - es3fIntegerStateQueryTests.BlendFuncTestCase = function(name, description, testTargetName) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_testTargetName = testTargetName; - }; - - es3fIntegerStateQueryTests.BlendFuncTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.BlendFuncTestCase.prototype.constructor = es3fIntegerStateQueryTests.BlendFuncTestCase; - - es3fIntegerStateQueryTests.BlendFuncTestCase.prototype.test = function() { - /** @type {Array} */ var blendFuncValues = [ - gl.ZERO, gl.ONE, gl.SRC_COLOR, gl.ONE_MINUS_SRC_COLOR, gl.DST_COLOR, gl.ONE_MINUS_DST_COLOR, - gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.DST_ALPHA, gl.ONE_MINUS_DST_ALPHA, gl.CONSTANT_COLOR, - gl.ONE_MINUS_CONSTANT_COLOR, gl.CONSTANT_ALPHA, gl.ONE_MINUS_CONSTANT_ALPHA, - gl.SRC_ALPHA_SATURATE - ]; - - for (var ndx = 0; ndx < blendFuncValues.length; ++ndx) { - /** @type {number} */ var referenceValue = blendFuncValues[ndx]; - - this.setBlendFunc(referenceValue); - - this.check(glsStateQuery.verify(this.m_testTargetName, referenceValue)); - }}; - - /** - * @param {number} func - */ - es3fIntegerStateQueryTests.BlendFuncTestCase.prototype.setBlendFunc = function(func) { - switch (this.m_testTargetName) { - case gl.BLEND_SRC_RGB: - case gl.BLEND_SRC_ALPHA: - gl.blendFunc(func, gl.ZERO); - break; - - case gl.BLEND_DST_RGB: - case gl.BLEND_DST_ALPHA: - gl.blendFunc(gl.ZERO, func); - break; - - default: - throw new Error('should not happen'); - } - }; - - es3fIntegerStateQueryTests.BlendFuncTestCase.prototype.deinit = function() { - gl.blendFunc(gl.ONE, gl.ZERO); - }; - - /** - * @constructor - * @extends {es3fIntegerStateQueryTests.BlendFuncTestCase} - * @param {string} name - * @param {string} description - * @param {number} testTargetName - * @param {number} initialValue - */ - es3fIntegerStateQueryTests.BlendFuncSeparateTestCase = function(name, description, testTargetName) { - es3fIntegerStateQueryTests.BlendFuncTestCase.call(this, name, description, testTargetName); - /** @type {number} */ this.m_testTargetName = testTargetName; - }; - - es3fIntegerStateQueryTests.BlendFuncSeparateTestCase.prototype = Object.create(es3fIntegerStateQueryTests.BlendFuncTestCase.prototype); - es3fIntegerStateQueryTests.BlendFuncSeparateTestCase.prototype.constructor = es3fIntegerStateQueryTests.BlendFuncSeparateTestCase; - - /** - * @param {number} func - */ - es3fIntegerStateQueryTests.BlendFuncSeparateTestCase.prototype.setBlendFunc = function(func) { - switch (this.m_testTargetName) { - case gl.BLEND_SRC_RGB: - gl.blendFuncSeparate(func, gl.ZERO, gl.ZERO, gl.ZERO); - break; - - case gl.BLEND_DST_RGB: - gl.blendFuncSeparate(gl.ZERO, func, gl.ZERO, gl.ZERO); - break; - - case gl.BLEND_SRC_ALPHA: - gl.blendFuncSeparate(gl.ZERO, gl.ZERO, func, gl.ZERO); - break; - - case gl.BLEND_DST_ALPHA: - gl.blendFuncSeparate(gl.ZERO, gl.ZERO, gl.ZERO, func); - break; - - default: - throw new Error('should not happen'); - } - }; - - es3fIntegerStateQueryTests.BlendFuncSeparateTestCase.prototype.deinit = function() { - gl.blendFuncSeparate(gl.ONE, gl.ZERO, gl.ONE, gl.ZERO); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} testTargetName - * @param {number} initialValue - */ - es3fIntegerStateQueryTests.BlendEquationTestCase = function(name, description, testTargetName, initialValue) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_testTargetName = testTargetName; - /** @type {number} */ this.m_initialValue = initialValue; - }; - - es3fIntegerStateQueryTests.BlendEquationTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.BlendEquationTestCase.prototype.constructor = es3fIntegerStateQueryTests.BlendEquationTestCase; - - es3fIntegerStateQueryTests.BlendEquationTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(this.m_testTargetName, this.m_initialValue)); - - /** @type {Array} */ var blendFuncValues = [gl.FUNC_ADD, gl.FUNC_SUBTRACT, gl.FUNC_REVERSE_SUBTRACT, gl.MIN, gl.MAX]; - - for (var ndx = 0; ndx < blendFuncValues.length; ++ndx) { - /** @type {number} */ var referenceValue = blendFuncValues[ndx]; - - this.setBlendEquation(referenceValue); - - this.check(glsStateQuery.verify(this.m_testTargetName, referenceValue)); - } - }; - - /** - * @param {number} equation - */ - es3fIntegerStateQueryTests.BlendEquationTestCase.prototype.setBlendEquation = function(equation) { - gl.blendEquation(equation); - }; - - es3fIntegerStateQueryTests.BlendEquationTestCase.prototype.deinit = function() { - gl.blendEquation(this.m_initialValue); - }; - - /** - * @constructor - * @extends {es3fIntegerStateQueryTests.BlendEquationTestCase} - * @param {string} name - * @param {string} description - * @param {number} testTargetName - * @param {number} initialValue - */ - es3fIntegerStateQueryTests.BlendEquationSeparateTestCase = function(name, description, testTargetName, initialValue) { - es3fIntegerStateQueryTests.BlendEquationTestCase.call(this, name, description, testTargetName, initialValue); - /** @type {number} */ this.m_testTargetName = testTargetName; - /** @type {number} */ this.m_initialValue = initialValue; - }; - - es3fIntegerStateQueryTests.BlendEquationSeparateTestCase.prototype = Object.create(es3fIntegerStateQueryTests.BlendEquationTestCase.prototype); - es3fIntegerStateQueryTests.BlendEquationSeparateTestCase.prototype.constructor = es3fIntegerStateQueryTests.BlendEquationSeparateTestCase; - - /** - * @param {number} equation - */ - es3fIntegerStateQueryTests.BlendEquationSeparateTestCase.prototype.setBlendEquation = function(equation) { - switch (this.m_testTargetName) { - case gl.BLEND_EQUATION_RGB: - gl.blendEquationSeparate(equation, gl.FUNC_ADD); - break; - - case gl.BLEND_EQUATION_ALPHA: - gl.blendEquationSeparate(gl.FUNC_ADD, equation); - break; - - default: - throw new Error('should not happen'); - } - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} testTargetName - * @param {number} minValue - */ - es3fIntegerStateQueryTests.ImplementationArrayTestCase = function(name, description, testTargetName, minValue) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_testTargetName = testTargetName; - /** @type {number} */ this.m_minValue = minValue; - }; - - es3fIntegerStateQueryTests.ImplementationArrayTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.ImplementationArrayTestCase.prototype.constructor = es3fIntegerStateQueryTests.ImplementationArrayTestCase; - - es3fIntegerStateQueryTests.ImplementationArrayTestCase.prototype.test = function() { - var queryResult = /** @type {Array} */ (gl.getParameter(this.m_testTargetName)); - this.check(glsStateQuery.compare(queryResult.length, this.m_minValue)); - - /** @type {Array} */ var textureFormats = [ - gl.COMPRESSED_R11_EAC, gl.COMPRESSED_SIGNED_R11_EAC, gl.COMPRESSED_RG11_EAC, gl.COMPRESSED_SIGNED_RG11_EAC, gl.COMPRESSED_RGB8_ETC2, gl.COMPRESSED_SRGB8_ETC2, - gl.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, gl.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, gl.COMPRESSED_RGBA8_ETC2_EAC, gl.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC - ]; - - for (var ndx = 0; ndx < textureFormats.length; ndx++) { - /** @type {number} */ var format = textureFormats[ndx]; - /** @type {boolean} */ var isInArray = queryResult.indexOf(format) !== -1; - this.check(glsStateQuery.compare(isInArray, true)); - } - - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.CurrentProgramBindingTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.CurrentProgramBindingTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.CurrentProgramBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.CurrentProgramBindingTestCase; - - es3fIntegerStateQueryTests.CurrentProgramBindingTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(gl.CURRENT_PROGRAM, null)); - - /** @type {WebGLShader} */ var shaderVert = gl.createShader(gl.VERTEX_SHADER); - gl.shaderSource(shaderVert, testVertSource); - gl.compileShader(shaderVert); - var compileStatus = /** @type {boolean} */ (gl.getShaderParameter(shaderVert, gl.COMPILE_STATUS)); - this.check(glsStateQuery.compare(compileStatus, true)); - - /** @type {WebGLShader} */ var shaderFrag = gl.createShader(gl.FRAGMENT_SHADER); - gl.shaderSource(shaderFrag, testFragSource); - gl.compileShader(shaderFrag); - compileStatus = /** @type {boolean} */ (gl.getShaderParameter(shaderFrag, gl.COMPILE_STATUS)); - this.check(glsStateQuery.compare(compileStatus, true)); - - /** @type {WebGLProgram} */ var shaderProg = gl.createProgram(); - gl.attachShader(shaderProg, shaderVert); - gl.attachShader(shaderProg, shaderFrag); - gl.linkProgram(shaderProg); - var linkStatus = /** @type {boolean} */ (gl.getProgramParameter(shaderProg, gl.LINK_STATUS)); - this.check(glsStateQuery.compare(linkStatus, true)); - - gl.useProgram(shaderProg); - - this.check(glsStateQuery.verify(gl.CURRENT_PROGRAM, shaderProg)); - - gl.deleteShader(shaderVert); - gl.deleteShader(shaderFrag); - gl.deleteProgram(shaderProg); - - this.check(glsStateQuery.verify(gl.CURRENT_PROGRAM, shaderProg)); - - gl.useProgram(null); - this.check(glsStateQuery.verify(gl.CURRENT_PROGRAM, null)); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.VertexArrayBindingTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.VertexArrayBindingTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.VertexArrayBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.VertexArrayBindingTestCase; - - es3fIntegerStateQueryTests.VertexArrayBindingTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(gl.VERTEX_ARRAY_BINDING, null)); - - /** @type {WebGLVertexArrayObject} */ var vertexArrayObject = gl.createVertexArray(); - - gl.bindVertexArray(vertexArrayObject); - this.check(glsStateQuery.verify(gl.VERTEX_ARRAY_BINDING, vertexArrayObject)); - - gl.deleteVertexArray(vertexArrayObject); - this.check(glsStateQuery.verify(gl.VERTEX_ARRAY_BINDING, null)); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} bufferBindingName - * @param {number} bufferType - */ - es3fIntegerStateQueryTests.BufferBindingTestCase = function(name, description, bufferBindingName, bufferType) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_bufferBindingName = bufferBindingName; - /** @type {number} */ this.m_bufferType = bufferType; - }; - - es3fIntegerStateQueryTests.BufferBindingTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.BufferBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.BufferBindingTestCase; - - es3fIntegerStateQueryTests.BufferBindingTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(this.m_bufferBindingName, null)); - - /** @type {WebGLBuffer} */ var bufferObject = gl.createBuffer(); - - gl.bindBuffer(this.m_bufferType, bufferObject); - this.check(glsStateQuery.verify(this.m_bufferBindingName, bufferObject)); - - gl.deleteBuffer(bufferObject); - this.check(glsStateQuery.verify(this.m_bufferBindingName, null)); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - */ - es3fIntegerStateQueryTests.ElementArrayBufferBindingTestCase = function(name) { - es3fApiCase.ApiCase.call(this, name, 'GL_ELEMENT_ARRAY_BUFFER_BINDING', gl); - }; - - es3fIntegerStateQueryTests.ElementArrayBufferBindingTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.ElementArrayBufferBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.ElementArrayBufferBindingTestCase; - - es3fIntegerStateQueryTests.ElementArrayBufferBindingTestCase.prototype.test = function() { - // Test with default VAO - bufferedLogToConsole('DefaultVAO: Test with default VAO'); - - this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, null)); - - /** @type {WebGLBuffer} */ var bufferObject = gl.createBuffer(); - - gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, bufferObject); - this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, bufferObject)); - - gl.deleteBuffer(bufferObject); - this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, null)); - - // Test with multiple VAOs - bufferedLogToConsole('WithVAO: Test with VAO'); - - /** @type {Array} */ var vaos = []; - /** @type {Array} */ var buffers = []; - - for (var ndx = 0; ndx < 2; ndx++) { - vaos[ndx] = gl.createVertexArray(); - buffers[ndx] = gl.createBuffer(); - } - - // initial - gl.bindVertexArray(vaos[0]); - this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, null)); - - // after setting - gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffers[0]); - this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, buffers[0])); - - // initial of vao 2 - gl.bindVertexArray(vaos[1]); - this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, null)); - - // after setting to 2 - gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffers[1]); - this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, buffers[1])); - - // vao 1 still has buffer 1 bound? - gl.bindVertexArray(vaos[0]); - this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, buffers[0])); - - // deleting clears from bound vaos ... - for (var ndx = 0; ndx < 2; ndx++) - gl.deleteBuffer(buffers[ndx]); - this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, null)); - - // ... but does not from non-bound vaos? - gl.bindVertexArray(vaos[1]); - this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, buffers[1])); - - for (var ndx = 0; ndx < 2; ndx++) - gl.deleteVertexArray(vaos[ndx]); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.StencilClearValueTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.StencilClearValueTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.StencilClearValueTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilClearValueTestCase; - - es3fIntegerStateQueryTests.StencilClearValueTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(gl.STENCIL_CLEAR_VALUE, 0)); - - var stencilBits = /** @type {number} */ (gl.getParameter(gl.STENCIL_BITS)); - - for (var stencilBit = 0; stencilBit < stencilBits; ++stencilBit) { - /** @type {number} */ var ref = 1 << stencilBit; - - gl.clearStencil(ref); // mask should not affect the REF - - this.check(glsStateQuery.verify(gl.STENCIL_CLEAR_VALUE, ref)); - } - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.ActiveTextureTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.ActiveTextureTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.ActiveTextureTestCase.prototype.constructor = es3fIntegerStateQueryTests.ActiveTextureTestCase; - - es3fIntegerStateQueryTests.ActiveTextureTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(gl.ACTIVE_TEXTURE, gl.TEXTURE0)); - - var textureUnits = /** @type {number} */ (gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS)); - - for (var ndx = 0; ndx < textureUnits; ++ndx) { - gl.activeTexture(gl.TEXTURE0 + ndx); - - this.check(glsStateQuery.verify(gl.ACTIVE_TEXTURE, gl.TEXTURE0 + ndx)); - } - }; - - es3fIntegerStateQueryTests.ActiveTextureTestCase.prototype.deinit = function() { - // [dag] reset the state of the context - gl.activeTexture(gl.TEXTURE0); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.RenderbufferBindingTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.RenderbufferBindingTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.RenderbufferBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.RenderbufferBindingTestCase; - - es3fIntegerStateQueryTests.RenderbufferBindingTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(gl.RENDERBUFFER_BINDING, null)); - - /** @type {WebGLRenderbuffer} */ var renderBuffer = gl.createRenderbuffer(); - - gl.bindRenderbuffer(gl.RENDERBUFFER, renderBuffer); - - this.check(glsStateQuery.verify(gl.RENDERBUFFER_BINDING, renderBuffer)); - - gl.deleteRenderbuffer(renderBuffer); - this.check(glsStateQuery.verify(gl.RENDERBUFFER_BINDING, null)); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.SamplerObjectBindingTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.SamplerObjectBindingTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.SamplerObjectBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.SamplerObjectBindingTestCase; - - es3fIntegerStateQueryTests.SamplerObjectBindingTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(gl.SAMPLER_BINDING, null)); - - bufferedLogToConsole('SingleUnit: Single unit'); - /** @type {WebGLSampler} */ var sampler = gl.createSampler(); - - gl.bindSampler(0, sampler); - - this.check(glsStateQuery.verify(gl.SAMPLER_BINDING, sampler)); - - gl.deleteSampler(sampler); - this.check(glsStateQuery.verify(gl.SAMPLER_BINDING, null)); - - bufferedLogToConsole('MultipleUnits: Multiple units'); - - /** @type {WebGLSampler} */ var samplerA = gl.createSampler(); - /** @type {WebGLSampler} */ var samplerB = gl.createSampler(); - - gl.bindSampler(1, samplerA); - gl.bindSampler(2, samplerB); - - this.check(glsStateQuery.verify(gl.SAMPLER_BINDING, null)); - - gl.activeTexture(gl.TEXTURE1); - this.check(glsStateQuery.verify(gl.SAMPLER_BINDING, samplerA)); - - gl.activeTexture(gl.TEXTURE2); - this.check(glsStateQuery.verify(gl.SAMPLER_BINDING, samplerB)); - - gl.deleteSampler(samplerB); - gl.deleteSampler(samplerA); - }; - - es3fIntegerStateQueryTests.SamplerObjectBindingTestCase.prototype.deinit = function() { - gl.activeTexture(gl.TEXTURE0); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} testBindingName - * @param {number} textureType - */ - es3fIntegerStateQueryTests.TextureBindingTestCase = function(name, description, testBindingName, textureType) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_testBindingName = testBindingName; - /** @type {number} */ this.m_textureType = textureType; - }; - - es3fIntegerStateQueryTests.TextureBindingTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.TextureBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.TextureBindingTestCase; - - es3fIntegerStateQueryTests.TextureBindingTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(this.m_testBindingName, null)); - - /** @type {WebGLTexture} */ var texture = gl.createTexture(); - - gl.bindTexture(this.m_textureType, texture); - this.check(glsStateQuery.verify(this.m_testBindingName, texture)); - - gl.deleteTexture(texture); - - this.check(glsStateQuery.verify(this.m_testBindingName, null)); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.FrameBufferBindingTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.FrameBufferBindingTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.FrameBufferBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.FrameBufferBindingTestCase; - - es3fIntegerStateQueryTests.FrameBufferBindingTestCase.prototype.test = function() { - this.check(glsStateQuery.verify(gl.DRAW_FRAMEBUFFER_BINDING, null)); - this.check(glsStateQuery.verify(gl.FRAMEBUFFER_BINDING, null)); - this.check(glsStateQuery.verify(gl.READ_FRAMEBUFFER_BINDING, null)); - - /** @type {WebGLFramebuffer} */ var framebufferId = gl.createFramebuffer(); - - gl.bindFramebuffer(gl.FRAMEBUFFER, framebufferId); - - this.check(glsStateQuery.verify(gl.DRAW_FRAMEBUFFER_BINDING, framebufferId)); - this.check(glsStateQuery.verify(gl.FRAMEBUFFER_BINDING, framebufferId)); - this.check(glsStateQuery.verify(gl.READ_FRAMEBUFFER_BINDING, framebufferId)); - - gl.bindFramebuffer(gl.FRAMEBUFFER, null); - - this.check(glsStateQuery.verify(gl.DRAW_FRAMEBUFFER_BINDING, null)); - this.check(glsStateQuery.verify(gl.FRAMEBUFFER_BINDING, null)); - this.check(glsStateQuery.verify(gl.READ_FRAMEBUFFER_BINDING, null)); - - gl.bindFramebuffer(gl.READ_FRAMEBUFFER, framebufferId); - - this.check(glsStateQuery.verify(gl.DRAW_FRAMEBUFFER_BINDING, null)); - this.check(glsStateQuery.verify(gl.FRAMEBUFFER_BINDING, null)); - this.check(glsStateQuery.verify(gl.READ_FRAMEBUFFER_BINDING, framebufferId)); - - gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, framebufferId); - - this.check(glsStateQuery.verify(gl.DRAW_FRAMEBUFFER_BINDING, framebufferId)); - this.check(glsStateQuery.verify(gl.FRAMEBUFFER_BINDING, framebufferId)); - this.check(glsStateQuery.verify(gl.READ_FRAMEBUFFER_BINDING, framebufferId)); - - gl.deleteFramebuffer(framebufferId); - - this.check(glsStateQuery.verify(gl.DRAW_FRAMEBUFFER_BINDING, null)); - this.check(glsStateQuery.verify(gl.FRAMEBUFFER_BINDING, null)); - this.check(glsStateQuery.verify(gl.READ_FRAMEBUFFER_BINDING, null)); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.ImplementationColorReadTestCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.ImplementationColorReadTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.ImplementationColorReadTestCase.prototype.constructor = es3fIntegerStateQueryTests.ImplementationColorReadTestCase; - - es3fIntegerStateQueryTests.ImplementationColorReadTestCase.prototype.test = function() { - /** @type {Array} */ var defaultColorTypes = [ - gl.UNSIGNED_BYTE, gl.BYTE, gl.UNSIGNED_SHORT, gl.SHORT, - gl.UNSIGNED_INT, gl.INT, gl.HALF_FLOAT, gl.FLOAT, gl.UNSIGNED_SHORT_5_6_5, - gl.UNSIGNED_SHORT_4_4_4_4, gl.UNSIGNED_SHORT_5_5_5_1, - gl.UNSIGNED_INT_2_10_10_10_REV, gl.UNSIGNED_INT_10F_11F_11F_REV - ]; - - /** @type {Array} */ var defaultColorFormats = [ - gl.RGBA, gl.RGBA_INTEGER, gl.RGB, gl.RGB_INTEGER, - gl.RG, gl.RG_INTEGER, gl.RED, gl.RED_INTEGER - ]; - - /** @type {Array} */ var validColorTypes = []; - /** @type {Array} */ var validColorFormats = []; - - // Defined by the spec - - for (var ndx = 0; ndx < defaultColorTypes.length; ++ndx) - validColorTypes.push(defaultColorTypes[ndx]); - for (var ndx = 0; ndx < defaultColorFormats.length; ++ndx) - validColorFormats.push(defaultColorFormats[ndx]); - - // Extensions - - // if (this.m_context.getContextInfo().isExtensionSupported("gl.EXT_texture_format_BGRA8888") || - // this.m_context.getContextInfo().isExtensionSupported("gl.APPLE_texture_format_BGRA8888")) - // validColorFormats.push(gl.BGRA); - // - // if (this.m_context.getContextInfo().isExtensionSupported("gl.EXT_read_format_bgra")) { - // validColorFormats.push(gl.BGRA); - // validColorTypes.push(gl.UNSIGNED_SHORT_4_4_4_4_REV); - // validColorTypes.push(gl.UNSIGNED_SHORT_1_5_5_5_REV); - // } - // - // if (this.m_context.getContextInfo().isExtensionSupported("gl.IMG_read_format")) { - // validColorFormats.push(gl.BGRA); - // validColorTypes.push(gl.UNSIGNED_SHORT_4_4_4_4_REV); - // } - // - // if (this.m_context.getContextInfo().isExtensionSupported("gl.NV_sRGB_formats")) { - // validColorFormats.push(gl.SLUMINANCE_NV); - // validColorFormats.push(gl.SLUMINANCE_ALPHA_NV); - // } - // - // if (this.m_context.getContextInfo().isExtensionSupported("gl.NV_bgr")) { - // validColorFormats.push(gl.BGR_NV); - // } - - this.check(glsStateQuery.verifyAnyOf(gl.IMPLEMENTATION_COLOR_READ_TYPE, validColorTypes)); - this.check(glsStateQuery.verifyAnyOf(gl.IMPLEMENTATION_COLOR_READ_FORMAT, validColorFormats)); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.ReadBufferCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.ReadBufferCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.ReadBufferCase.prototype.constructor = es3fIntegerStateQueryTests.ReadBufferCase; - - es3fIntegerStateQueryTests.ReadBufferCase.prototype.test = function() { - /** @type {Array} */ var validInitialValues = [gl.BACK, gl.NONE]; - this.check(glsStateQuery.verifyAnyOf(gl.READ_BUFFER, validInitialValues)); - - gl.readBuffer(gl.NONE); - this.check(glsStateQuery.verify(gl.READ_BUFFER, gl.NONE)); - - gl.readBuffer(gl.BACK); - this.check(glsStateQuery.verify(gl.READ_BUFFER, gl.BACK)); - - // test gl.READ_BUFFER with framebuffers - - /** @type {WebGLFramebuffer} */ var framebufferId = gl.createFramebuffer(); - - /** @type {WebGLRenderbuffer} */ var renderbuffer_id = gl.createRenderbuffer(); - - gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer_id); - - gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA8, 128, 128); - - gl.bindFramebuffer(gl.READ_FRAMEBUFFER, framebufferId); - - gl.framebufferRenderbuffer(gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, renderbuffer_id); - - this.check(glsStateQuery.verify(gl.READ_BUFFER, gl.COLOR_ATTACHMENT0)); - - gl.deleteFramebuffer(framebufferId); - gl.deleteRenderbuffer(renderbuffer_id); - - this.check(glsStateQuery.verify(gl.READ_BUFFER, gl.BACK)); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - */ - es3fIntegerStateQueryTests.DrawBufferCase = function(name, description) { - es3fApiCase.ApiCase.call(this, name, description, gl); - }; - - es3fIntegerStateQueryTests.DrawBufferCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.DrawBufferCase.prototype.constructor = es3fIntegerStateQueryTests.DrawBufferCase; - - es3fIntegerStateQueryTests.DrawBufferCase.prototype.test = function() { - /** @type {Array} */ var validInitialValues = [gl.BACK, gl.NONE]; - this.check(glsStateQuery.verifyAnyOf(gl.DRAW_BUFFER0, validInitialValues)); - - /** @type {number} */ var bufs = gl.NONE; - gl.drawBuffers([bufs]); - this.check(glsStateQuery.verify(gl.DRAW_BUFFER0, gl.NONE)); - - bufs = gl.BACK; - gl.drawBuffers([bufs]); - this.check(glsStateQuery.verify(gl.DRAW_BUFFER0, gl.BACK)); - - // test gl.DRAW_BUFFER with framebuffers - - /** @type {WebGLFramebuffer} */ var framebufferId = gl.createFramebuffer(); - - /** @type {Array} */ var renderbuffer_ids = []; - - for (var ndx = 0; ndx < 2; ndx++) - renderbuffer_ids[ndx] = gl.createRenderbuffer(); - - gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer_ids[0]); - gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA8, 128, 128); - - gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer_ids[1]); - gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA8, 128, 128); - - gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, framebufferId); - - gl.framebufferRenderbuffer(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, renderbuffer_ids[0]); - gl.framebufferRenderbuffer(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.RENDERBUFFER, renderbuffer_ids[1]); - - // only the initial state the draw buffer for fragment color zero is defined - this.check(glsStateQuery.verify(gl.DRAW_BUFFER0, gl.COLOR_ATTACHMENT0)); - - /** @type {Array} */ var bufTargets = [gl.NONE, gl.COLOR_ATTACHMENT1]; - gl.drawBuffers(bufTargets); - this.check(glsStateQuery.verify(gl.DRAW_BUFFER0, gl.NONE)); - this.check(glsStateQuery.verify(gl.DRAW_BUFFER1, gl.COLOR_ATTACHMENT1)); - - gl.deleteFramebuffer(framebufferId); - gl.deleteRenderbuffer(renderbuffer_ids[0]); - gl.deleteRenderbuffer(renderbuffer_ids[1]); - - this.check(glsStateQuery.verify(gl.DRAW_BUFFER0, gl.BACK)); - }; - - // Integer64 - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} targetName - * @param {number} minValue - */ - es3fIntegerStateQueryTests.ConstantMinimumValue64TestCase = function(name, description, targetName, minValue) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_targetName = targetName; - /** @type {number} */ this.m_minValue = minValue; - }; - - es3fIntegerStateQueryTests.ConstantMinimumValue64TestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.ConstantMinimumValue64TestCase.prototype.constructor = es3fIntegerStateQueryTests.ConstantMinimumValue64TestCase; - - es3fIntegerStateQueryTests.ConstantMinimumValue64TestCase.prototype.test = function() { - this.check(glsStateQuery.verifyGreaterOrEqual(this.m_targetName, this.m_minValue), 'Fail'); - }; - - /** - * @constructor - * @extends {es3fApiCase.ApiCase} - * @param {string} name - * @param {string} description - * @param {number} targetName - * @param {number} targetMaxUniformBlocksName - * @param {number} targetMaxUniformComponentsName - */ - es3fIntegerStateQueryTests.MaxCombinedStageUniformComponentsCase = function(name, description, targetName, targetMaxUniformBlocksName, targetMaxUniformComponentsName) { - es3fApiCase.ApiCase.call(this, name, description, gl); - /** @type {number} */ this.m_targetName = targetName; - /** @type {number} */ this.m_targetMaxUniformBlocksName = targetMaxUniformBlocksName; - /** @type {number} */ this.m_targetMaxUniformComponentsName = targetMaxUniformComponentsName; - }; - - es3fIntegerStateQueryTests.MaxCombinedStageUniformComponentsCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); - es3fIntegerStateQueryTests.MaxCombinedStageUniformComponentsCase.prototype.constructor = es3fIntegerStateQueryTests.MaxCombinedStageUniformComponentsCase; - - es3fIntegerStateQueryTests.MaxCombinedStageUniformComponentsCase.prototype.test = function() { - var uniformBlockSize = /** @type {number} */ (gl.getParameter(gl.MAX_UNIFORM_BLOCK_SIZE)); - var maxUniformBlocks = /** @type {number} */ (gl.getParameter(this.m_targetMaxUniformBlocksName)); - var maxUniformComponents = /** @type {number} */ (gl.getParameter(this.m_targetMaxUniformComponentsName)); - - // MAX_stage_UNIFORM_BLOCKS * MAX_UNIFORM_BLOCK_SIZE / 4 + MAX_stage_UNIFORM_COMPONENTS - /** @type {number} */ var minCombinedUniformComponents = maxUniformBlocks * uniformBlockSize / 4 + maxUniformComponents; - - this.check(glsStateQuery.verifyGreaterOrEqual(this.m_targetName, minCombinedUniformComponents)); - }; - - /** - * @constructor - * @extends {tcuTestCase.DeqpTest} - */ - es3fIntegerStateQueryTests.IntegerStateQueryTests = function() { - tcuTestCase.DeqpTest.call(this, 'integers', 'Integer Values'); - }; - - es3fIntegerStateQueryTests.IntegerStateQueryTests.prototype = Object.create(tcuTestCase.DeqpTest.prototype); - es3fIntegerStateQueryTests.IntegerStateQueryTests.prototype.constructor = es3fIntegerStateQueryTests.IntegerStateQueryTests; - - es3fIntegerStateQueryTests.IntegerStateQueryTests.prototype.init = function() { - /** - * @struct - * @constructor - * @param {string} name - * @param {string} description - * @param {number} targetName - * @param {number} value - */ - var LimitedStateInteger = function(name, description, targetName, value) { - /** @type {string} */ this.name = name; - /** @type {string} */ this.description = description; - /** @type {number} */ this.targetName = targetName; - /** @type {number} */ this.value = value; - }; - - /** @type {Array} */ var implementationMinLimits = [ - new LimitedStateInteger('subpixel_bits', 'SUBPIXEL_BITS has minimum value of 4', gl.SUBPIXEL_BITS, 4), - new LimitedStateInteger('max_3d_texture_size', 'MAX_3D_TEXTURE_SIZE has minimum value of 256', gl.MAX_3D_TEXTURE_SIZE, 256), - new LimitedStateInteger('max_texture_size', 'MAX_TEXTURE_SIZE has minimum value of 2048', gl.MAX_TEXTURE_SIZE, 2048), - new LimitedStateInteger('max_array_texture_layers', 'MAX_ARRAY_TEXTURE_LAYERS has minimum value of 256', gl.MAX_ARRAY_TEXTURE_LAYERS, 256), - new LimitedStateInteger('max_cube_map_texture_size', 'MAX_CUBE_MAP_TEXTURE_SIZE has minimum value of 2048', gl.MAX_CUBE_MAP_TEXTURE_SIZE, 2048), - new LimitedStateInteger('max_renderbuffer_size', 'MAX_RENDERBUFFER_SIZE has minimum value of 2048', gl.MAX_RENDERBUFFER_SIZE, 2048), - new LimitedStateInteger('max_draw_buffers', 'MAX_DRAW_BUFFERS has minimum value of 4', gl.MAX_DRAW_BUFFERS, 4), - new LimitedStateInteger('max_color_attachments', 'MAX_COLOR_ATTACHMENTS has minimum value of 4', gl.MAX_COLOR_ATTACHMENTS, 4), - new LimitedStateInteger('max_elements_indices', 'MAX_ELEMENTS_INDICES has minimum value of 0', gl.MAX_ELEMENTS_INDICES, 0), - new LimitedStateInteger('max_elements_vertices', 'MAX_ELEMENTS_VERTICES has minimum value of 0', gl.MAX_ELEMENTS_VERTICES, 0), - new LimitedStateInteger('max_vertex_attribs', 'MAX_VERTEX_ATTRIBS has minimum value of 16', gl.MAX_VERTEX_ATTRIBS, 16), - new LimitedStateInteger('max_vertex_uniform_components', 'MAX_VERTEX_UNIFORM_COMPONENTS has minimum value of 1024', gl.MAX_VERTEX_UNIFORM_COMPONENTS, 1024), - new LimitedStateInteger('max_vertex_uniform_vectors', 'MAX_VERTEX_UNIFORM_VECTORS has minimum value of 256', gl.MAX_VERTEX_UNIFORM_VECTORS, 256), - new LimitedStateInteger('max_vertex_uniform_blocks', 'MAX_VERTEX_UNIFORM_BLOCKS has minimum value of 12', gl.MAX_VERTEX_UNIFORM_BLOCKS, 12), - new LimitedStateInteger('max_vertex_output_components', 'MAX_VERTEX_OUTPUT_COMPONENTS has minimum value of 64', gl.MAX_VERTEX_OUTPUT_COMPONENTS, 64), - new LimitedStateInteger('max_vertex_texture_image_units', 'MAX_VERTEX_TEXTURE_IMAGE_UNITS has minimum value of 16', gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS, 16), - new LimitedStateInteger('max_fragment_uniform_components', 'MAX_FRAGMENT_UNIFORM_COMPONENTS has minimum value of 896', gl.MAX_FRAGMENT_UNIFORM_COMPONENTS, 896), - new LimitedStateInteger('max_fragment_uniform_vectors', 'MAX_FRAGMENT_UNIFORM_VECTORS has minimum value of 224', gl.MAX_FRAGMENT_UNIFORM_VECTORS, 224), - new LimitedStateInteger('max_fragment_uniform_blocks', 'MAX_FRAGMENT_UNIFORM_BLOCKS has minimum value of 12', gl.MAX_FRAGMENT_UNIFORM_BLOCKS, 12), - new LimitedStateInteger('max_fragment_input_components', 'MAX_FRAGMENT_INPUT_COMPONENTS has minimum value of 60', gl.MAX_FRAGMENT_INPUT_COMPONENTS, 60), - new LimitedStateInteger('max_texture_image_units', 'MAX_TEXTURE_IMAGE_UNITS has minimum value of 16', gl.MAX_TEXTURE_IMAGE_UNITS, 16), - new LimitedStateInteger('max_program_texel_offset', 'MAX_PROGRAM_TEXEL_OFFSET has minimum value of 7', gl.MAX_PROGRAM_TEXEL_OFFSET, 7), - new LimitedStateInteger('max_uniform_buffer_bindings', 'MAX_UNIFORM_BUFFER_BINDINGS has minimum value of 24', gl.MAX_UNIFORM_BUFFER_BINDINGS, 24), - new LimitedStateInteger('max_combined_uniform_blocks', 'MAX_COMBINED_UNIFORM_BLOCKS has minimum value of 24', gl.MAX_COMBINED_UNIFORM_BLOCKS, 24), - new LimitedStateInteger('max_varying_components', 'MAX_VARYING_COMPONENTS has minimum value of 60', gl.MAX_VARYING_COMPONENTS, 60), - new LimitedStateInteger('max_varying_vectors', 'MAX_VARYING_VECTORS has minimum value of 15', gl.MAX_VARYING_VECTORS, 15), - new LimitedStateInteger('max_combined_texture_image_units', 'MAX_COMBINED_TEXTURE_IMAGE_UNITS has minimum value of 32', gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS, 32), - new LimitedStateInteger('max_transform_feedback_interleaved_components', 'MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS has minimum value of 64', gl.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, 64), - new LimitedStateInteger('max_transform_feedback_separate_attribs', 'MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS has minimum value of 4', gl.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, 4), - new LimitedStateInteger('max_transform_feedback_separate_components', 'MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS has minimum value of 4', gl.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, 4), - new LimitedStateInteger('max_samples', 'MAX_SAMPLES has minimum value of 4', gl.MAX_SAMPLES, 4), - new LimitedStateInteger('red_bits', 'RED_BITS has minimum value of 0', gl.RED_BITS, 0), - new LimitedStateInteger('green_bits', 'GREEN_BITS has minimum value of 0', gl.GREEN_BITS, 0), - new LimitedStateInteger('blue_bits', 'BLUE_BITS has minimum value of 0', gl.BLUE_BITS, 0), - new LimitedStateInteger('alpha_bits', 'ALPHA_BITS has minimum value of 0', gl.ALPHA_BITS, 0), - new LimitedStateInteger('depth_bits', 'DEPTH_BITS has minimum value of 0', gl.DEPTH_BITS, 0), - new LimitedStateInteger('stencil_bits', 'STENCIL_BITS has minimum value of 0', gl.STENCIL_BITS, 0) - ]; - - /** @type {Array} */ var implementationMaxLimits = [ - new LimitedStateInteger('min_program_texel_offset', 'MIN_PROGRAM_TEXEL_OFFSET has maximum value of -8', gl.MIN_PROGRAM_TEXEL_OFFSET, -8), - new LimitedStateInteger('uniform_buffer_offset_alignment', 'UNIFORM_BUFFER_OFFSET_ALIGNMENT has minimum value of 1', gl.UNIFORM_BUFFER_OFFSET_ALIGNMENT, 256) - ]; - - var testCtx = this; - - for (var testNdx = 0; testNdx < implementationMinLimits.length; testNdx++) - testCtx.addChild(new es3fIntegerStateQueryTests.ConstantMinimumValueTestCase(implementationMinLimits[testNdx].name, implementationMinLimits[testNdx].description, implementationMinLimits[testNdx].targetName, implementationMinLimits[testNdx].value)); - - for (var testNdx = 0; testNdx < implementationMaxLimits.length; testNdx++) - testCtx.addChild(new es3fIntegerStateQueryTests.ConstantMaximumValueTestCase(implementationMaxLimits[testNdx].name, implementationMaxLimits[testNdx].description, implementationMaxLimits[testNdx].targetName, implementationMaxLimits[testNdx].value)); - - testCtx.addChild(new es3fIntegerStateQueryTests.SampleBuffersTestCase('sample_buffers', 'SAMPLE_BUFFERS')); - testCtx.addChild(new es3fIntegerStateQueryTests.SamplesTestCase('samples' , 'SAMPLES')); - testCtx.addChild(new es3fIntegerStateQueryTests.HintTestCase('generate_mipmap_hint', 'GENERATE_MIPMAP_HINT', gl.GENERATE_MIPMAP_HINT)); - testCtx.addChild(new es3fIntegerStateQueryTests.HintTestCase('fragment_shader_derivative_hint', 'FRAGMENT_SHADER_DERIVATIVE_HINT', gl.FRAGMENT_SHADER_DERIVATIVE_HINT)); - testCtx.addChild(new es3fIntegerStateQueryTests.DepthFuncTestCase('depth_func', 'DEPTH_FUNC')); - testCtx.addChild(new es3fIntegerStateQueryTests.CullFaceTestCase('cull_face_mode', 'CULL_FACE_MODE')); - testCtx.addChild(new es3fIntegerStateQueryTests.FrontFaceTestCase('front_face_mode', 'FRONT_FACE')); - testCtx.addChild(new es3fIntegerStateQueryTests.ViewPortTestCase('viewport', 'VIEWPORT')); - testCtx.addChild(new es3fIntegerStateQueryTests.ScissorBoxTestCase('scissor_box', 'SCISSOR_BOX')); - testCtx.addChild(new es3fIntegerStateQueryTests.MaxViewportDimsTestCase('max_viewport_dims', 'MAX_VIEWPORT_DIMS')); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilRefTestCase('stencil_ref', 'STENCIL_REF', gl.STENCIL_REF)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilRefTestCase('stencil_back_ref', 'STENCIL_BACK_REF', gl.STENCIL_BACK_REF)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilRefSeparateTestCase('stencil_ref_separate', 'STENCIL_REF (separate)', gl.STENCIL_REF, gl.FRONT)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilRefSeparateTestCase('stencil_ref_separate_both', 'STENCIL_REF (separate)', gl.STENCIL_REF, gl.FRONT_AND_BACK)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilRefSeparateTestCase('stencil_back_ref_separate', 'STENCIL_BACK_REF (separate)', gl.STENCIL_BACK_REF, gl.BACK)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilRefSeparateTestCase('stencil_back_ref_separate_both', 'STENCIL_BACK_REF (separate)', gl.STENCIL_BACK_REF, gl.FRONT_AND_BACK)); - - /** - * @struct - * @constructor - * @param {string} name - * @param {string} frontDescription - * @param {number} frontTarget - * @param {string} backDescription - * @param {number} backTarget - */ - var NamedStencilOp = function(name, frontDescription, frontTarget, backDescription, backTarget) { - /** @type {string} */ this.name = name; - /** @type {string} */ this.frontDescription = frontDescription; - /** @type {number} */ this.frontTarget = frontTarget; - /** @type {string} */ this.backDescription = backDescription; - /** @type {number} */ this.backTarget = backTarget; - }; - - /** @type {Array} */ var stencilOps = [ - new NamedStencilOp('fail', 'STENCIL_FAIL', gl.STENCIL_FAIL, 'STENCIL_BACK_FAIL', gl.STENCIL_BACK_FAIL), - new NamedStencilOp('depth_fail', 'STENCIL_PASS_DEPTH_FAIL', gl.STENCIL_PASS_DEPTH_FAIL, 'STENCIL_BACK_PASS_DEPTH_FAIL', gl.STENCIL_BACK_PASS_DEPTH_FAIL), - new NamedStencilOp('depth_pass', 'STENCIL_PASS_DEPTH_PASS', gl.STENCIL_PASS_DEPTH_PASS, 'STENCIL_BACK_PASS_DEPTH_PASS', gl.STENCIL_BACK_PASS_DEPTH_PASS) - ]; - - for (var testNdx = 0; testNdx < stencilOps.length; testNdx++) { - testCtx.addChild(new es3fIntegerStateQueryTests.StencilOpTestCase('stencil_' + stencilOps[testNdx].name, stencilOps[testNdx].frontDescription, stencilOps[testNdx].frontTarget)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilOpTestCase('stencil_back_' + stencilOps[testNdx].name, stencilOps[testNdx].backDescription, stencilOps[testNdx].backTarget)); - - testCtx.addChild(new es3fIntegerStateQueryTests.StencilOpSeparateTestCase('stencil_' + stencilOps[testNdx].name + '_separate_both', stencilOps[testNdx].frontDescription, stencilOps[testNdx].frontTarget, gl.FRONT_AND_BACK)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilOpSeparateTestCase('stencil_back_' + stencilOps[testNdx].name + '_separate_both', stencilOps[testNdx].backDescription, stencilOps[testNdx].backTarget, gl.FRONT_AND_BACK)); - - testCtx.addChild(new es3fIntegerStateQueryTests.StencilOpSeparateTestCase('stencil_' + stencilOps[testNdx].name + '_separate', stencilOps[testNdx].frontDescription, stencilOps[testNdx].frontTarget, gl.FRONT)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilOpSeparateTestCase('stencil_back_' + stencilOps[testNdx].name + '_separate', stencilOps[testNdx].backDescription, stencilOps[testNdx].backTarget, gl.BACK)); - } - - testCtx.addChild(new es3fIntegerStateQueryTests.StencilFuncTestCase('stencil_func', 'STENCIL_FUNC')); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilFuncSeparateTestCase('stencil_func_separate', 'STENCIL_FUNC (separate)', gl.STENCIL_FUNC, gl.FRONT)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilFuncSeparateTestCase('stencil_func_separate_both', 'STENCIL_FUNC (separate)', gl.STENCIL_FUNC, gl.FRONT_AND_BACK)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilFuncSeparateTestCase('stencil_back_func_separate', 'STENCIL_FUNC (separate)', gl.STENCIL_BACK_FUNC, gl.BACK)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilFuncSeparateTestCase('stencil_back_func_separate_both', 'STENCIL_FUNC (separate)', gl.STENCIL_BACK_FUNC, gl.FRONT_AND_BACK)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilMaskTestCase('stencil_value_mask', 'STENCIL_VALUE_MASK', gl.STENCIL_VALUE_MASK)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilMaskTestCase('stencil_back_value_mask', 'STENCIL_BACK_VALUE_MASK', gl.STENCIL_BACK_VALUE_MASK)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilMaskSeparateTestCase('stencil_value_mask_separate', 'STENCIL_VALUE_MASK (separate)', gl.STENCIL_VALUE_MASK, gl.FRONT)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilMaskSeparateTestCase('stencil_value_mask_separate_both', 'STENCIL_VALUE_MASK (separate)', gl.STENCIL_VALUE_MASK, gl.FRONT_AND_BACK)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilMaskSeparateTestCase('stencil_back_value_mask_separate', 'STENCIL_BACK_VALUE_MASK (separate)', gl.STENCIL_BACK_VALUE_MASK, gl.BACK)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilMaskSeparateTestCase('stencil_back_value_mask_separate_both', 'STENCIL_BACK_VALUE_MASK (separate)', gl.STENCIL_BACK_VALUE_MASK, gl.FRONT_AND_BACK)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilWriteMaskTestCase('stencil_writemask', 'STENCIL_WRITEMASK', gl.STENCIL_WRITEMASK)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilWriteMaskTestCase('stencil_back_writemask', 'STENCIL_BACK_WRITEMASK', gl.STENCIL_BACK_WRITEMASK)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase('stencil_writemask_separate', 'STENCIL_WRITEMASK (separate)', gl.STENCIL_WRITEMASK, gl.FRONT)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase('stencil_writemask_separate_both', 'STENCIL_WRITEMASK (separate)', gl.STENCIL_WRITEMASK, gl.FRONT_AND_BACK)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase('stencil_back_writemask_separate', 'STENCIL_BACK_WRITEMASK (separate)', gl.STENCIL_BACK_WRITEMASK, gl.BACK)); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase('stencil_back_writemask_separate_both', 'STENCIL_BACK_WRITEMASK (separate)', gl.STENCIL_BACK_WRITEMASK, gl.FRONT_AND_BACK)); - - /** - * @struct - * @constructor - * @param {string} name - * @param {string} description - * @param {number} target - * @param {number} initialValue - */ - var PixelStoreState = function(name, description, target, initialValue) { - /** @type {string} */ this.name = name; - /** @type {string} */ this.description = description; - /** @type {number} */ this.target = target; - /** @type {number} */ this.initialValue = initialValue; - }; - - /** @type {Array} */ var pixelStoreStates = [ - new PixelStoreState('unpack_image_height', 'UNPACK_IMAGE_HEIGHT', gl.UNPACK_IMAGE_HEIGHT, 0), - new PixelStoreState('unpack_skip_images', 'UNPACK_SKIP_IMAGES', gl.UNPACK_SKIP_IMAGES, 0), - new PixelStoreState('unpack_row_length', 'UNPACK_ROW_LENGTH', gl.UNPACK_ROW_LENGTH, 0), - new PixelStoreState('unpack_skip_rows', 'UNPACK_SKIP_ROWS', gl.UNPACK_SKIP_ROWS, 0), - new PixelStoreState('unpack_skip_pixels', 'UNPACK_SKIP_PIXELS', gl.UNPACK_SKIP_PIXELS, 0), - new PixelStoreState('pack_row_length', 'PACK_ROW_LENGTH', gl.PACK_ROW_LENGTH, 0), - new PixelStoreState('pack_skip_rows', 'PACK_SKIP_ROWS', gl.PACK_SKIP_ROWS, 0), - new PixelStoreState('pack_skip_pixels', 'PACK_SKIP_PIXELS', gl.PACK_SKIP_PIXELS, 0) - ]; - - for (var testNdx = 0; testNdx < pixelStoreStates.length; testNdx++) - testCtx.addChild(new es3fIntegerStateQueryTests.PixelStoreTestCase(pixelStoreStates[testNdx].name, pixelStoreStates[testNdx].description, pixelStoreStates[testNdx].target, pixelStoreStates[testNdx].initialValue)); - - testCtx.addChild(new es3fIntegerStateQueryTests.PixelStoreAlignTestCase('unpack_alignment', 'UNPACK_ALIGNMENT', gl.UNPACK_ALIGNMENT)); - testCtx.addChild(new es3fIntegerStateQueryTests.PixelStoreAlignTestCase('pack_alignment', 'PACK_ALIGNMENT', gl.PACK_ALIGNMENT)); - - /** - * @struct - * @constructor - * @param {string} name - * @param {string} description - * @param {number} target - * @param {number} initialValue - */ - var BlendColorState = function(name, description, target, initialValue) { - /** @type {string} */ this.name = name; - /** @type {string} */ this.description = description; - /** @type {number} */ this.target = target; - /** @type {number} */ this.initialValue = initialValue; - }; - - /** @type {Array} */ var blendColorStates = [ - new BlendColorState('blend_src_rgb', 'BLEND_SRC_RGB', gl.BLEND_SRC_RGB), - new BlendColorState('blend_src_alpha', 'BLEND_SRC_ALPHA', gl.BLEND_SRC_ALPHA), - new BlendColorState('blend_dst_rgb', 'BLEND_DST_RGB', gl.BLEND_DST_RGB), - new BlendColorState('blend_dst_alpha', 'BLEND_DST_ALPHA', gl.BLEND_DST_ALPHA) - ]; - - for (var testNdx = 0; testNdx < blendColorStates.length; testNdx++) { - testCtx.addChild(new es3fIntegerStateQueryTests.BlendFuncTestCase(blendColorStates[testNdx].name, blendColorStates[testNdx].description, blendColorStates[testNdx].target)); - testCtx.addChild(new es3fIntegerStateQueryTests.BlendFuncSeparateTestCase(blendColorStates[testNdx].name + '_separate', blendColorStates[testNdx].description, blendColorStates[testNdx].target)); - } - - /** - * @struct - * @constructor - * @param {string} name - * @param {string} description - * @param {number} target - * @param {number} initialValue - */ - var BlendEquationState = function(name, description, target, initialValue) { - /** @type {string} */ this.name = name; - /** @type {string} */ this.description = description; - /** @type {number} */ this.target = target; - /** @type {number} */ this.initialValue = initialValue; - }; - - /** @type {Array} */ var blendEquationStates = [ - new BlendEquationState('blend_equation_rgb', 'BLEND_EQUATION_RGB', gl.BLEND_EQUATION_RGB, gl.FUNC_ADD), - new BlendEquationState('blend_equation_alpha', 'BLEND_EQUATION_ALPHA', gl.BLEND_EQUATION_ALPHA, gl.FUNC_ADD) - ]; - - for (var testNdx = 0; testNdx < blendEquationStates.length; testNdx++) { - testCtx.addChild(new es3fIntegerStateQueryTests.BlendEquationTestCase(blendEquationStates[testNdx].name, blendEquationStates[testNdx].description, blendEquationStates[testNdx].target, blendEquationStates[testNdx].initialValue)); - testCtx.addChild(new es3fIntegerStateQueryTests.BlendEquationSeparateTestCase(blendEquationStates[testNdx].name + '_separate', blendEquationStates[testNdx].description, blendEquationStates[testNdx].target, blendEquationStates[testNdx].initialValue)); - } - - /** - * @struct - * @constructor - * @param {string} name - * @param {string} description - * @param {number} target - * @param {number} minValue - */ - var ImplementationArrayReturningState = function(name, description, target, minValue) { - /** @type {string} */ this.name = name; - /** @type {string} */ this.description = description; - /** @type {number} */ this.target = target; - /** @type {number} */ this.minValue = minValue; - }; - - /** @type {ImplementationArrayReturningState} */ var implementationArrayReturningStates = new ImplementationArrayReturningState('compressed_texture_formats', 'COMPRESSED_TEXTURE_FORMATS', gl.COMPRESSED_TEXTURE_FORMATS, 10); - - testCtx.addChild(new es3fIntegerStateQueryTests.ImplementationArrayTestCase(implementationArrayReturningStates.name, implementationArrayReturningStates.description, implementationArrayReturningStates.target, implementationArrayReturningStates.minValue)); - - /** - * @struct - * @constructor - * @param {string} name - * @param {string} description - * @param {number} target - * @param {number} type - */ - var BufferBindingState = function(name, description, target, type) { - /** @type {string} */ this.name = name; - /** @type {string} */ this.description = description; - /** @type {number} */ this.target = target; - /** @type {number} */ this.type = type; - }; - - /** @type {Array} */ var bufferBindingStates = [ - new BufferBindingState('array_buffer_binding', 'ARRAY_BUFFER_BINDING', gl.ARRAY_BUFFER_BINDING, gl.ARRAY_BUFFER), - new BufferBindingState('uniform_buffer_binding', 'UNIFORM_BUFFER_BINDING', gl.UNIFORM_BUFFER_BINDING, gl.UNIFORM_BUFFER), - new BufferBindingState('pixel_pack_buffer_binding', 'PIXEL_PACK_BUFFER_BINDING', gl.PIXEL_PACK_BUFFER_BINDING, gl.PIXEL_PACK_BUFFER), - new BufferBindingState('pixel_unpack_buffer_binding', 'PIXEL_UNPACK_BUFFER_BINDING', gl.PIXEL_UNPACK_BUFFER_BINDING, gl.PIXEL_UNPACK_BUFFER), - new BufferBindingState('transform_feedback_buffer_binding', 'TRANSFORM_FEEDBACK_BUFFER_BINDING', gl.TRANSFORM_FEEDBACK_BUFFER_BINDING, gl.TRANSFORM_FEEDBACK_BUFFER), - new BufferBindingState('copy_read_buffer_binding', 'COPY_READ_BUFFER_BINDING', gl.COPY_READ_BUFFER_BINDING, gl.COPY_READ_BUFFER), - new BufferBindingState('copy_write_buffer_binding', 'COPY_WRITE_BUFFER_BINDING', gl.COPY_WRITE_BUFFER_BINDING, gl.COPY_WRITE_BUFFER) - ]; - - for (var testNdx = 0; testNdx < bufferBindingStates.length; testNdx++) - testCtx.addChild(new es3fIntegerStateQueryTests.BufferBindingTestCase(bufferBindingStates[testNdx].name, bufferBindingStates[testNdx].description, bufferBindingStates[testNdx].target, bufferBindingStates[testNdx].type)); - - testCtx.addChild(new es3fIntegerStateQueryTests.ElementArrayBufferBindingTestCase('element_array_buffer_binding')); - testCtx.addChild(new es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase('transform_feedback_binding')); - testCtx.addChild(new es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase('transform_feedback_binding')); - testCtx.addChild(new es3fIntegerStateQueryTests.CurrentProgramBindingTestCase('current_program_binding', 'CURRENT_PROGRAM')); - testCtx.addChild(new es3fIntegerStateQueryTests.VertexArrayBindingTestCase('vertex_array_binding', 'VERTEX_ARRAY_BINDING')); - testCtx.addChild(new es3fIntegerStateQueryTests.StencilClearValueTestCase('stencil_clear_value', 'STENCIL_CLEAR_VALUE')); - testCtx.addChild(new es3fIntegerStateQueryTests.ActiveTextureTestCase('active_texture', 'ACTIVE_TEXTURE')); - testCtx.addChild(new es3fIntegerStateQueryTests.RenderbufferBindingTestCase('renderbuffer_binding', 'RENDERBUFFER_BINDING')); - testCtx.addChild(new es3fIntegerStateQueryTests.SamplerObjectBindingTestCase('sampler_binding', 'SAMPLER_BINDING')); - - /** - * @struct - * @constructor - * @param {string} name - * @param {string} description - * @param {number} target - * @param {number} type - */ - var TextureBinding = function(name, description, target, type) { - /** @type {string} */ this.name = name; - /** @type {string} */ this.description = description; - /** @type {number} */ this.target = target; - /** @type {number} */ this.type = type; - }; - - /** @type {Array} */ var textureBindings = [ - new TextureBinding('texture_binding_2d', 'TEXTURE_BINDING_2D', gl.TEXTURE_BINDING_2D, gl.TEXTURE_2D), - new TextureBinding('texture_binding_3d', 'TEXTURE_BINDING_3D', gl.TEXTURE_BINDING_3D, gl.TEXTURE_3D), - new TextureBinding('texture_binding_2d_array', 'TEXTURE_BINDING_2D_ARRAY', gl.TEXTURE_BINDING_2D_ARRAY, gl.TEXTURE_2D_ARRAY), - new TextureBinding('texture_binding_cube_map', 'TEXTURE_BINDING_CUBE_MAP', gl.TEXTURE_BINDING_CUBE_MAP, gl.TEXTURE_CUBE_MAP) - ]; - - for (var testNdx = 0; testNdx < textureBindings.length; testNdx++) - testCtx.addChild(new es3fIntegerStateQueryTests.TextureBindingTestCase(textureBindings[testNdx].name, textureBindings[testNdx].description, textureBindings[testNdx].target, textureBindings[testNdx].type)); - - testCtx.addChild(new es3fIntegerStateQueryTests.FrameBufferBindingTestCase('framebuffer_binding', 'DRAW_FRAMEBUFFER_BINDING and READ_FRAMEBUFFER_BINDING')); - testCtx.addChild(new es3fIntegerStateQueryTests.ImplementationColorReadTestCase('implementation_color_read', 'IMPLEMENTATION_COLOR_READ_TYPE and IMPLEMENTATION_COLOR_READ_FORMAT')); - testCtx.addChild(new es3fIntegerStateQueryTests.ReadBufferCase('read_buffer', 'READ_BUFFER')); - testCtx.addChild(new es3fIntegerStateQueryTests.DrawBufferCase('draw_buffer', 'DRAW_BUFFER')); - - - // Integer64 - /** - * @struct - * @constructor - * @param {string} name - * @param {string} description - * @param {number} targetName - * @param {number} minValue - */ - var LimitedStateInteger64 = function(name, description, targetName, minValue) { - /** @type {string} */ this.name = name; - /** @type {string} */ this.description = description; - /** @type {number} */ this.targetName = targetName; - /** @type {number} */ this.minValue = minValue; - - }; - - /** @type {Array} */ var implementationLimits = [ - new LimitedStateInteger64('max_element_index', 'MAX_ELEMENT_INDEX', gl.MAX_ELEMENT_INDEX, 0x00FFFFFF), - new LimitedStateInteger64('max_server_wait_timeout', 'MAX_SERVER_WAIT_TIMEOUT', gl.MAX_SERVER_WAIT_TIMEOUT, 0), - new LimitedStateInteger64('max_uniform_block_size', 'MAX_UNIFORM_BLOCK_SIZE', gl.MAX_UNIFORM_BLOCK_SIZE, 16384) - ]; - - for (var testNdx = 0; testNdx < implementationLimits.length; testNdx++) - this.addChild(new es3fIntegerStateQueryTests.ConstantMinimumValue64TestCase(implementationLimits[testNdx].name, implementationLimits[testNdx].description, implementationLimits[testNdx].targetName, implementationLimits[testNdx].minValue)); - - this.addChild(new es3fIntegerStateQueryTests.MaxCombinedStageUniformComponentsCase('max_combined_vertex_uniform_components', 'MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS', gl.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS, gl.MAX_VERTEX_UNIFORM_BLOCKS, gl.MAX_VERTEX_UNIFORM_COMPONENTS)); - this.addChild(new es3fIntegerStateQueryTests.MaxCombinedStageUniformComponentsCase('max_combined_fragment_uniform_components', 'MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS', gl.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, gl.MAX_FRAGMENT_UNIFORM_BLOCKS, gl.MAX_FRAGMENT_UNIFORM_COMPONENTS)); - - }; - - /** - * Run test - * @param {WebGL2RenderingContext} context - */ - es3fIntegerStateQueryTests.run = function(context) { - gl = context; - //Set up Test Root parameters - var state = tcuTestCase.runner; - state.setRoot(new es3fIntegerStateQueryTests.IntegerStateQueryTests()); - - //Set up name and description of this test series. - setCurrentTestName(state.testCases.fullName()); - description(state.testCases.getDescription()); - - try { - //Run test cases - tcuTestCase.runTestCases(); - } - catch (err) { - testFailedOptions('Failed to es3fIntegerStateQueryTests.run tests', false); - tcuTestCase.runner.terminate(); - } - }; - -}); +/*------------------------------------------------------------------------- + * drawElements Quality Program OpenGL ES Utilities + * ------------------------------------------------ + * + * Copyright 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the 'License'); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +'use strict'; +goog.provide('functional.gles3.es3fIntegerStateQueryTests'); +goog.require('framework.common.tcuTestCase'); +goog.require('framework.delibs.debase.deRandom'); +goog.require('framework.opengl.gluTextureUtil'); +goog.require('functional.gles3.es3fApiCase'); +goog.require('modules.shared.glsStateQuery'); + +goog.scope(function() { + var es3fIntegerStateQueryTests = functional.gles3.es3fIntegerStateQueryTests; + var tcuTestCase = framework.common.tcuTestCase; + var deRandom = framework.delibs.debase.deRandom; + var es3fApiCase = functional.gles3.es3fApiCase; + var glsStateQuery = modules.shared.glsStateQuery; + + /** @type {string} */ var transformFeedbackTestVertSource = '' + + '#version 300 es\n' + + 'void main (void)\n' + + '{\n' + + ' gl_Position = vec4(0.0);\n' + + '}\n'; + + /** @type {string} */ var transformFeedbackTestFragSource = '' + + '#version 300 es\n' + + 'layout(location = 0) out mediump vec4 fragColor;' + + 'void main (void)\n' + + '{\n' + + ' fragColor = vec4(0.0);\n' + + '}\n'; + + /** @type {string} */ var testVertSource = '' + + '#version 300 es\n' + + 'void main (void)\n' + + '{\n' + + ' gl_Position = vec4(0.0);\n' + + '}\n'; + + /** @type {string} */ var testFragSource = '' + + '#version 300 es\n' + + 'layout(location = 0) out mediump vec4 fragColor;' + + 'void main (void)\n' + + '{\n' + + ' fragColor = vec4(0.0);\n' + + '}\n'; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.TransformFeedbackTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {WebGLTransformFeedback} */ this.m_transformfeedback; + }; + + es3fIntegerStateQueryTests.TransformFeedbackTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.TransformFeedbackTestCase.prototype.constructor = es3fIntegerStateQueryTests.TransformFeedbackTestCase; + + es3fIntegerStateQueryTests.TransformFeedbackTestCase.prototype.testTransformFeedback = function() { + throw new Error('This method should be implemented by child classes.'); + }; + + es3fIntegerStateQueryTests.TransformFeedbackTestCase.prototype.test = function() { + this.beforeTransformFeedbackTest(); // [dag] added this as there is no other way this method would be called. + + this.m_transformfeedback = gl.createTransformFeedback(); + + /** @type {WebGLShader} */ var shaderVert = gl.createShader(gl.VERTEX_SHADER); + gl.shaderSource(shaderVert, transformFeedbackTestVertSource); + gl.compileShader(shaderVert); + + var compileStatus = /** @type {boolean} */ (gl.getShaderParameter(shaderVert, gl.COMPILE_STATUS)); + glsStateQuery.compare(compileStatus, true); + + /** @type {WebGLShader} */ var shaderFrag = gl.createShader(gl.FRAGMENT_SHADER); + gl.shaderSource(shaderFrag, transformFeedbackTestFragSource); + gl.compileShader(shaderFrag); + + compileStatus = /** @type {boolean} */ (gl.getShaderParameter(shaderFrag, gl.COMPILE_STATUS)); + glsStateQuery.compare(compileStatus, true); + + /** @type {WebGLProgram} */ var shaderProg = gl.createProgram(); + gl.attachShader(shaderProg, shaderVert); + gl.attachShader(shaderProg, shaderFrag); + /** @type {Array} */ var transform_feedback_outputs = ['gl_Position']; + gl.transformFeedbackVaryings(shaderProg, transform_feedback_outputs, gl.INTERLEAVED_ATTRIBS); + gl.linkProgram(shaderProg); + + var linkStatus = /** @type {boolean} */ (gl.getProgramParameter(shaderProg, gl.LINK_STATUS)); + glsStateQuery.compare(linkStatus, true); + + gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, this.m_transformfeedback); + + + /** @type {WebGLBuffer} */ var feedbackBufferId = gl.createBuffer(); + gl.bindBuffer(gl.TRANSFORM_FEEDBACK_BUFFER, feedbackBufferId); + gl.bufferData(gl.TRANSFORM_FEEDBACK_BUFFER, new Float32Array(16), gl.DYNAMIC_READ); + gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, feedbackBufferId); + + gl.useProgram(shaderProg); + + this.testTransformFeedback(); + + gl.useProgram(null); + gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, null); + gl.deleteTransformFeedback(this.m_transformfeedback); + gl.deleteBuffer(feedbackBufferId); + gl.deleteShader(shaderVert); + gl.deleteShader(shaderFrag); + gl.deleteProgram(shaderProg); + + this.afterTransformFeedbackTest(); // [dag] added this as there is no other way this method would be called. + }; + + /** + * @constructor + * @extends {es3fIntegerStateQueryTests.TransformFeedbackTestCase} + * @param {string} name + */ + es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase = function(name) { + es3fIntegerStateQueryTests.TransformFeedbackTestCase.call(this, name, 'GL_TRANSFORM_FEEDBACK_BINDING'); + }; + + es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase.prototype = Object.create(es3fIntegerStateQueryTests.TransformFeedbackTestCase.prototype); + es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase; + + + es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase.prototype.beforeTransformFeedbackTest = function() { + this.check(glsStateQuery.verify(gl.TRANSFORM_FEEDBACK_BINDING, null), 'beforeTransformFeedbackTest'); + }; + + es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase.prototype.testTransformFeedback = function() { + this.check(glsStateQuery.verify(gl.TRANSFORM_FEEDBACK_BINDING, this.m_transformfeedback), 'testTransformFeedback'); + }; + + es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase.prototype.afterTransformFeedbackTest = function() { + this.check(glsStateQuery.verify(gl.TRANSFORM_FEEDBACK_BINDING, null), 'afterTransformFeedbackTest'); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} targetName + * @param {number} minValue + */ + es3fIntegerStateQueryTests.ConstantMinimumValueTestCase = function(name, description, targetName, minValue) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_targetName = targetName; + /** @type {number} */ this.m_minValue = minValue; + }; + + es3fIntegerStateQueryTests.ConstantMinimumValueTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.ConstantMinimumValueTestCase.prototype.constructor = es3fIntegerStateQueryTests.ConstantMinimumValueTestCase; + + es3fIntegerStateQueryTests.ConstantMinimumValueTestCase.prototype.test = function() { + this.check(glsStateQuery.verifyGreaterOrEqual(this.m_targetName, this.m_minValue), 'Fail'); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} targetName + * @param {number} minValue + */ + es3fIntegerStateQueryTests.ConstantMaximumValueTestCase = function(name, description, targetName, minValue) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_targetName = targetName; + /** @type {number} */ this.m_minValue = minValue; + }; + + es3fIntegerStateQueryTests.ConstantMaximumValueTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.ConstantMaximumValueTestCase.prototype.constructor = es3fIntegerStateQueryTests.ConstantMaximumValueTestCase; + + es3fIntegerStateQueryTests.ConstantMaximumValueTestCase.prototype.test = function() { + this.check(glsStateQuery.verifyLessOrEqual(this.m_targetName, this.m_minValue), 'Fail'); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.SampleBuffersTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.SampleBuffersTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.SampleBuffersTestCase.prototype.constructor = es3fIntegerStateQueryTests.SampleBuffersTestCase; + + es3fIntegerStateQueryTests.SampleBuffersTestCase.prototype.test = function() { + /** @type {number} */ var expectedSampleBuffers = (/** @type {number} */ (gl.getParameter(gl.SAMPLES)) > 1) ? 1 : 0; + + bufferedLogToConsole('Sample count is ' + expectedSampleBuffers + ', expecting GL_SAMPLE_BUFFERS to be ' + expectedSampleBuffers); + + this.check(glsStateQuery.verify(gl.SAMPLE_BUFFERS, expectedSampleBuffers)); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.SamplesTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.SamplesTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.SamplesTestCase.prototype.constructor = es3fIntegerStateQueryTests.SamplesTestCase; + + es3fIntegerStateQueryTests.SamplesTestCase.prototype.test = function() { + var numSamples = /** @type {number} */ (gl.getParameter(gl.SAMPLES)); + // MSAA? + if (numSamples > 1) { + bufferedLogToConsole('Sample count is ' + numSamples); + + this.check(glsStateQuery.verify(gl.SAMPLES, numSamples)); + } else { + /** @type {Array} */ var validSamples = [0, 1]; + + bufferedLogToConsole('Expecting GL_SAMPLES to be 0 or 1'); + + this.check(glsStateQuery.verifyAnyOf(gl.SAMPLES, validSamples)); + } + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} targetName + */ + es3fIntegerStateQueryTests.HintTestCase = function(name, description, targetName) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_targetName = targetName; + }; + + es3fIntegerStateQueryTests.HintTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.HintTestCase.prototype.constructor = es3fIntegerStateQueryTests.HintTestCase; + + es3fIntegerStateQueryTests.HintTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(this.m_targetName, gl.DONT_CARE)); + + gl.hint(this.m_targetName, gl.NICEST); + this.check(glsStateQuery.verify(this.m_targetName, gl.NICEST)); + + gl.hint(this.m_targetName, gl.FASTEST); + this.check(glsStateQuery.verify(this.m_targetName, gl.FASTEST)); + + gl.hint(this.m_targetName, gl.DONT_CARE); + this.check(glsStateQuery.verify(this.m_targetName, gl.DONT_CARE)); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.DepthFuncTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.DepthFuncTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.DepthFuncTestCase.prototype.constructor = es3fIntegerStateQueryTests.DepthFuncTestCase; + + es3fIntegerStateQueryTests.DepthFuncTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(gl.DEPTH_FUNC, gl.LESS)); + + /** @type {Array} */ var depthFunctions = [gl.NEVER, gl.ALWAYS, gl.LESS, gl.LEQUAL, gl.EQUAL, gl.GREATER, gl.GEQUAL, gl.NOTEQUAL]; + for (var ndx = 0; ndx < depthFunctions.length; ndx++) { + gl.depthFunc(depthFunctions[ndx]); + + this.check(glsStateQuery.verify(gl.DEPTH_FUNC, depthFunctions[ndx])); + } + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.CullFaceTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.CullFaceTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.CullFaceTestCase.prototype.constructor = es3fIntegerStateQueryTests.CullFaceTestCase; + + es3fIntegerStateQueryTests.CullFaceTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(gl.CULL_FACE_MODE, gl.BACK)); + + /** @type {Array} */ var cullFaces = [gl.FRONT, gl.BACK, gl.FRONT_AND_BACK]; + for (var ndx = 0; ndx < cullFaces.length; ndx++) { + gl.cullFace(cullFaces[ndx]); + + this.check(glsStateQuery.verify(gl.CULL_FACE_MODE, cullFaces[ndx])); + } + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.FrontFaceTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.FrontFaceTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.FrontFaceTestCase.prototype.constructor = es3fIntegerStateQueryTests.FrontFaceTestCase; + + es3fIntegerStateQueryTests.FrontFaceTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(gl.FRONT_FACE, gl.CCW)); + + /** @type {Array} */ var frontFaces = [gl.CW, gl.CCW]; + for (var ndx = 0; ndx < frontFaces.length; ndx++) { + gl.frontFace(frontFaces[ndx]); + + this.check(glsStateQuery.verify(gl.FRONT_FACE, frontFaces[ndx])); + } + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.ViewPortTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.ViewPortTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.ViewPortTestCase.prototype.constructor = es3fIntegerStateQueryTests.ViewPortTestCase; + + es3fIntegerStateQueryTests.ViewPortTestCase.prototype.test = function() { + /** @type {deRandom.Random} */ var rnd = new deRandom.Random(0xabcdef); + + var maxViewportDimensions = /** @type {Array} */ (gl.getParameter(gl.MAX_VIEWPORT_DIMS)); + + // verify initial value of first two values + this.check(glsStateQuery.verify(gl.VIEWPORT, new Int32Array([0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight]))); + + /** @type {number} */ var numIterations = 120; + for (var i = 0; i < numIterations; ++i) { + /** @type {number} */ var x = rnd.getInt(-64000, 64000); + /** @type {number} */ var y = rnd.getInt(-64000, 64000); + /** @type {number} */ var width = rnd.getInt(0, maxViewportDimensions[0]); + /** @type {number} */ var height = rnd.getInt(0, maxViewportDimensions[1]); + + gl.viewport(x, y, width, height); + this.check(glsStateQuery.verify(gl.VIEWPORT, new Int32Array([x, y, width, height]))); + } + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.ScissorBoxTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.ScissorBoxTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.ScissorBoxTestCase.prototype.constructor = es3fIntegerStateQueryTests.ScissorBoxTestCase; + + es3fIntegerStateQueryTests.ScissorBoxTestCase.prototype.test = function() { + /** @type {deRandom.Random} */ var rnd = new deRandom.Random(0xabcdef); + + // verify initial value of first two values + this.check(glsStateQuery.verifyMask(gl.SCISSOR_BOX, [0, 0, 0, 0], [true, true, false, false])); + + /** @type {number} */ var numIterations = 120; + for (var i = 0; i < numIterations; ++i) { + /** @type {number} */ var left = rnd.getInt(-64000, 64000); + /** @type {number} */ var bottom = rnd.getInt(-64000, 64000); + /** @type {number} */ var width = rnd.getInt(0, 64000); + /** @type {number} */ var height = rnd.getInt(0, 64000); + + gl.scissor(left, bottom, width, height); + this.check(glsStateQuery.verify(gl.SCISSOR_BOX, new Int32Array([left, bottom, width, height]))); + } + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.MaxViewportDimsTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.MaxViewportDimsTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.MaxViewportDimsTestCase.prototype.constructor = es3fIntegerStateQueryTests.MaxViewportDimsTestCase; + + es3fIntegerStateQueryTests.MaxViewportDimsTestCase.prototype.test = function() { + this.check(glsStateQuery.verifyGreaterOrEqual(gl.MAX_VIEWPORT_DIMS, [gl.drawingBufferWidth, gl.drawingBufferHeight])); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} testTargetName + */ + es3fIntegerStateQueryTests.StencilRefTestCase = function(name, description, testTargetName) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_testTargetName = testTargetName; + }; + + es3fIntegerStateQueryTests.StencilRefTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.StencilRefTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilRefTestCase; + + es3fIntegerStateQueryTests.StencilRefTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(this.m_testTargetName, 0)); + + var stencilBits = /** @type {number} */ (gl.getParameter(gl.STENCIL_BITS)); + + for (var stencilBit = 0; stencilBit < stencilBits; ++stencilBit) { + /** @type {number} */ var ref = 1 << stencilBit; + + gl.stencilFunc(gl.ALWAYS, ref, 0); // mask should not affect the REF + + this.check(glsStateQuery.verify(this.m_testTargetName, ref)); + + gl.stencilFunc(gl.ALWAYS, ref, ref); + + this.check(glsStateQuery.verify(this.m_testTargetName, ref)); + } + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} testTargetName + * @param {number} stencilFuncTargetFace + */ + es3fIntegerStateQueryTests.StencilRefSeparateTestCase = function(name, description, testTargetName, stencilFuncTargetFace) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_testTargetName = testTargetName; + /** @type {number} */ this.m_stencilFuncTargetFace = stencilFuncTargetFace; + }; + + es3fIntegerStateQueryTests.StencilRefSeparateTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.StencilRefSeparateTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilRefSeparateTestCase; + + es3fIntegerStateQueryTests.StencilRefSeparateTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(this.m_testTargetName, 0)); + + var stencilBits = /** @type {number} */ (gl.getParameter(gl.STENCIL_BITS)); + + for (var stencilBit = 0; stencilBit < stencilBits; ++stencilBit) { + /** @type {number} */ var ref = 1 << stencilBit; + + gl.stencilFuncSeparate(this.m_stencilFuncTargetFace, gl.ALWAYS, ref, 0); + + this.check(glsStateQuery.verify(this.m_testTargetName, ref)); + + gl.stencilFuncSeparate(this.m_stencilFuncTargetFace, gl.ALWAYS, ref, ref); + + this.check(glsStateQuery.verify(this.m_testTargetName, ref)); + } + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} stencilOpName + */ + es3fIntegerStateQueryTests.StencilOpTestCase = function(name, description, stencilOpName) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_stencilOpName = stencilOpName; + }; + + es3fIntegerStateQueryTests.StencilOpTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.StencilOpTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilOpTestCase; + + es3fIntegerStateQueryTests.StencilOpTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(this.m_stencilOpName, gl.KEEP)); + + /** @type {Array} */ var stencilOpValues = [gl.KEEP, gl.ZERO, gl.REPLACE, gl.INCR, gl.DECR, gl.INVERT, gl.INCR_WRAP, gl.DECR_WRAP]; + for (var ndx = 0; ndx < stencilOpValues.length; ++ndx) { + this.setStencilOp(stencilOpValues[ndx]); + + this.check(glsStateQuery.verify(this.m_stencilOpName, stencilOpValues[ndx])); + } + }; + + es3fIntegerStateQueryTests.StencilOpTestCase.prototype.deinit = function() { + // [dag] need to reset everything once the test is done, otherwise related tests fail + gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP); + }; + + /** + * @param {number} stencilOpValue + */ + es3fIntegerStateQueryTests.StencilOpTestCase.prototype.setStencilOp = function(stencilOpValue) { + switch (this.m_stencilOpName) { + case gl.STENCIL_FAIL: + case gl.STENCIL_BACK_FAIL: + gl.stencilOp(stencilOpValue, gl.KEEP, gl.KEEP); + break; + + case gl.STENCIL_PASS_DEPTH_FAIL: + case gl.STENCIL_BACK_PASS_DEPTH_FAIL: + gl.stencilOp(gl.KEEP, stencilOpValue, gl.KEEP); + break; + + case gl.STENCIL_PASS_DEPTH_PASS: + case gl.STENCIL_BACK_PASS_DEPTH_PASS: + gl.stencilOp(gl.KEEP, gl.KEEP, stencilOpValue); + break; + + default: + throw new Error('should not happen'); + } + }; + + /** + * @constructor + * @extends {es3fIntegerStateQueryTests.StencilOpTestCase} + * @param {string} name + * @param {string} description + * @param {number} stencilOpName + * @param {number} stencilOpFace + */ + es3fIntegerStateQueryTests.StencilOpSeparateTestCase = function(name, description, stencilOpName, stencilOpFace) { + es3fIntegerStateQueryTests.StencilOpTestCase.call(this, name, description, stencilOpName); + /** @type {number} */ this.m_stencilOpName = stencilOpName; + /** @type {number} */ this.m_stencilOpFace = stencilOpFace; + }; + + es3fIntegerStateQueryTests.StencilOpSeparateTestCase.prototype = Object.create(es3fIntegerStateQueryTests.StencilOpTestCase.prototype); + es3fIntegerStateQueryTests.StencilOpSeparateTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilOpSeparateTestCase; + + es3fIntegerStateQueryTests.StencilOpSeparateTestCase.prototype.test = function() {}; + + /** + * @param {number} stencilOpValue + */ + es3fIntegerStateQueryTests.StencilOpSeparateTestCase.prototype.setStencilOp = function(stencilOpValue) { + switch (this.m_stencilOpName) { + case gl.STENCIL_FAIL: + case gl.STENCIL_BACK_FAIL: + gl.stencilOpSeparate(this.m_stencilOpFace, stencilOpValue, gl.KEEP, gl.KEEP); + break; + + case gl.STENCIL_PASS_DEPTH_FAIL: + case gl.STENCIL_BACK_PASS_DEPTH_FAIL: + gl.stencilOpSeparate(this.m_stencilOpFace, gl.KEEP, stencilOpValue, gl.KEEP); + break; + + case gl.STENCIL_PASS_DEPTH_PASS: + case gl.STENCIL_BACK_PASS_DEPTH_PASS: + gl.stencilOpSeparate(this.m_stencilOpFace, gl.KEEP, gl.KEEP, stencilOpValue); + break; + + default: + throw new Error('should not happen'); + } + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.StencilFuncTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.StencilFuncTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.StencilFuncTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilFuncTestCase; + + es3fIntegerStateQueryTests.StencilFuncTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(gl.STENCIL_FUNC, gl.ALWAYS)); + + /** @type {Array} */ var stencilfuncValues = [gl.NEVER, gl.ALWAYS, gl.LESS, gl.LEQUAL, gl.EQUAL, gl.GEQUAL, gl.GREATER, gl.NOTEQUAL]; + + for (var ndx = 0; ndx < stencilfuncValues.length; ++ndx) { + gl.stencilFunc(stencilfuncValues[ndx], 0, 0); + + this.check(glsStateQuery.verify(gl.STENCIL_FUNC, stencilfuncValues[ndx])); + + this.check(glsStateQuery.verify(gl.STENCIL_BACK_FUNC, stencilfuncValues[ndx])); + } + }; + + es3fIntegerStateQueryTests.StencilFuncTestCase.prototype.deinit = function() { + // [dag] reset stencilFunc to ALWAYS + gl.stencilFunc(gl.ALWAYS, 0, 0); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} stencilFuncName + * @param {number} stencilFuncFace + */ + es3fIntegerStateQueryTests.StencilFuncSeparateTestCase = function(name, description, stencilFuncName, stencilFuncFace) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_stencilFuncName = stencilFuncName; + /** @type {number} */ this.m_stencilFuncFace = stencilFuncFace; + }; + + es3fIntegerStateQueryTests.StencilFuncSeparateTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.StencilFuncSeparateTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilFuncSeparateTestCase; + + es3fIntegerStateQueryTests.StencilFuncSeparateTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(this.m_stencilFuncName, gl.ALWAYS)); + + /** @type {Array} */ var stencilfuncValues = [gl.NEVER, gl.ALWAYS, gl.LESS, gl.LEQUAL, gl.EQUAL, gl.GEQUAL, gl.GREATER, gl.NOTEQUAL]; + + for (var ndx = 0; ndx < stencilfuncValues.length; ++ndx) { + gl.stencilFuncSeparate(this.m_stencilFuncFace, stencilfuncValues[ndx], 0, 0); + + this.check(glsStateQuery.verify(this.m_stencilFuncName, stencilfuncValues[ndx])); + } + }; + + es3fIntegerStateQueryTests.StencilFuncSeparateTestCase.prototype.deinit = function() { + // [dag] reset the stencil func + gl.stencilFuncSeparate(this.m_stencilFuncFace, gl.ALWAYS, 0, 0); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} testTargetName + */ + es3fIntegerStateQueryTests.StencilMaskTestCase = function(name, description, testTargetName) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_testTargetName = testTargetName; + }; + + es3fIntegerStateQueryTests.StencilMaskTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.StencilMaskTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilMaskTestCase; + + es3fIntegerStateQueryTests.StencilMaskTestCase.prototype.test = function() { + var stencilBits = /** @type {number} */ (gl.getParameter(gl.STENCIL_BITS)); + + this.check(glsStateQuery.verify(this.m_testTargetName, stencilBits)); + + for (var stencilBit = 0; stencilBit < stencilBits; ++stencilBit) { + /** @type {number} */ var mask = 1 << stencilBit; + + gl.stencilFunc(gl.ALWAYS, 0, mask); + + this.check(glsStateQuery.verify(this.m_testTargetName, mask)); + } + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} testTargetName + * @param {number} stencilFuncTargetFace + */ + es3fIntegerStateQueryTests.StencilMaskSeparateTestCase = function(name, description, testTargetName, stencilFuncTargetFace) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_testTargetName = testTargetName; + /** @type {number} */ this.m_stencilFuncTargetFace = stencilFuncTargetFace; + }; + + es3fIntegerStateQueryTests.StencilMaskSeparateTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.StencilMaskSeparateTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilMaskSeparateTestCase; + + es3fIntegerStateQueryTests.StencilMaskSeparateTestCase.prototype.test = function() { + var stencilBits = /** @type {number} */ (gl.getParameter(gl.STENCIL_BITS)); + + this.check(glsStateQuery.verify(this.m_testTargetName, stencilBits)); + + for (var stencilBit = 0; stencilBit < stencilBits; ++stencilBit) { + /** @type {number} */ var mask = 1 << stencilBit; + + gl.stencilFuncSeparate(this.m_stencilFuncTargetFace, gl.ALWAYS, 0, mask); + + this.check(glsStateQuery.verify(this.m_testTargetName, mask)); + } + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} testTargetName + */ + es3fIntegerStateQueryTests.StencilWriteMaskTestCase = function(name, description, testTargetName) { + /** @type {number} */ this.m_testTargetName = testTargetName; + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.StencilWriteMaskTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.StencilWriteMaskTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilWriteMaskTestCase; + + es3fIntegerStateQueryTests.StencilWriteMaskTestCase.prototype.test = function() { + var stencilBits = /** @type {number} */ (gl.getParameter(gl.STENCIL_BITS)); + + for (var stencilBit = 0; stencilBit < stencilBits; ++stencilBit) { + /** @type {number} */ var mask = 1 << stencilBit; + + gl.stencilMask(mask); + + this.check(glsStateQuery.verify(this.m_testTargetName, mask)); + } + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} testTargetName + * @param {number} stencilTargetFace + */ + es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase = function(name, description, testTargetName, stencilTargetFace) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_testTargetName = testTargetName; + /** @type {number} */ this.m_stencilTargetFace = stencilTargetFace; + }; + + es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase; + + es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase.prototype.test = function() { + var stencilBits = /** @type {number} */ (gl.getParameter(gl.STENCIL_BITS)); + + for (var stencilBit = 0; stencilBit < stencilBits; ++stencilBit) { + /** @type {number} */ var mask = 1 << stencilBit; + + gl.stencilMaskSeparate(this.m_stencilTargetFace, mask); + + this.check(glsStateQuery.verify(this.m_testTargetName, mask)); + } + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} testTargetName + * @param {number} initialValue + */ + es3fIntegerStateQueryTests.PixelStoreTestCase = function(name, description, testTargetName, initialValue) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_testTargetName = testTargetName; + /** @type {number} */ this.m_initialValue = initialValue; + }; + + es3fIntegerStateQueryTests.PixelStoreTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.PixelStoreTestCase.prototype.constructor = es3fIntegerStateQueryTests.PixelStoreTestCase; + + es3fIntegerStateQueryTests.PixelStoreTestCase.prototype.test = function() { + /** @type {deRandom.Random} */ var rnd = new deRandom.Random(0xabcdef); + + this.check(glsStateQuery.verify(this.m_testTargetName, this.m_initialValue)); + + /** @type {number} */ var numIterations = 120; + for (var i = 0; i < numIterations; ++i) { + /** @type {number} */ var referenceValue = rnd.getInt(0, 64000); + + gl.pixelStorei(this.m_testTargetName, referenceValue); + + this.check(glsStateQuery.verify(this.m_testTargetName, referenceValue)); + } + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} testTargetName + */ + es3fIntegerStateQueryTests.PixelStoreAlignTestCase = function(name, description, testTargetName) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_testTargetName = testTargetName; + }; + + es3fIntegerStateQueryTests.PixelStoreAlignTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.PixelStoreAlignTestCase.prototype.constructor = es3fIntegerStateQueryTests.PixelStoreAlignTestCase; + + es3fIntegerStateQueryTests.PixelStoreAlignTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(this.m_testTargetName, 4)); + + /** @type {Array} */ var alignments = [1, 2, 4, 8]; + + for (var ndx = 0; ndx < alignments.length; ++ndx) { + /** @type {number} */ var referenceValue = alignments[ndx]; + + gl.pixelStorei(this.m_testTargetName, referenceValue); + + this.check(glsStateQuery.verify(this.m_testTargetName, referenceValue)); + } + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} testTargetName + * @param {number} initialValue + */ + es3fIntegerStateQueryTests.BlendFuncTestCase = function(name, description, testTargetName) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_testTargetName = testTargetName; + }; + + es3fIntegerStateQueryTests.BlendFuncTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.BlendFuncTestCase.prototype.constructor = es3fIntegerStateQueryTests.BlendFuncTestCase; + + es3fIntegerStateQueryTests.BlendFuncTestCase.prototype.test = function() { + /** @type {Array} */ var blendFuncValues = [ + gl.ZERO, gl.ONE, gl.SRC_COLOR, gl.ONE_MINUS_SRC_COLOR, gl.DST_COLOR, gl.ONE_MINUS_DST_COLOR, + gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.DST_ALPHA, gl.ONE_MINUS_DST_ALPHA, gl.CONSTANT_COLOR, + gl.ONE_MINUS_CONSTANT_COLOR, gl.CONSTANT_ALPHA, gl.ONE_MINUS_CONSTANT_ALPHA, + gl.SRC_ALPHA_SATURATE + ]; + + for (var ndx = 0; ndx < blendFuncValues.length; ++ndx) { + /** @type {number} */ var referenceValue = blendFuncValues[ndx]; + + this.setBlendFunc(referenceValue); + + this.check(glsStateQuery.verify(this.m_testTargetName, referenceValue)); + }}; + + /** + * @param {number} func + */ + es3fIntegerStateQueryTests.BlendFuncTestCase.prototype.setBlendFunc = function(func) { + switch (this.m_testTargetName) { + case gl.BLEND_SRC_RGB: + case gl.BLEND_SRC_ALPHA: + gl.blendFunc(func, gl.ZERO); + break; + + case gl.BLEND_DST_RGB: + case gl.BLEND_DST_ALPHA: + gl.blendFunc(gl.ZERO, func); + break; + + default: + throw new Error('should not happen'); + } + }; + + es3fIntegerStateQueryTests.BlendFuncTestCase.prototype.deinit = function() { + gl.blendFunc(gl.ONE, gl.ZERO); + }; + + /** + * @constructor + * @extends {es3fIntegerStateQueryTests.BlendFuncTestCase} + * @param {string} name + * @param {string} description + * @param {number} testTargetName + * @param {number} initialValue + */ + es3fIntegerStateQueryTests.BlendFuncSeparateTestCase = function(name, description, testTargetName) { + es3fIntegerStateQueryTests.BlendFuncTestCase.call(this, name, description, testTargetName); + /** @type {number} */ this.m_testTargetName = testTargetName; + }; + + es3fIntegerStateQueryTests.BlendFuncSeparateTestCase.prototype = Object.create(es3fIntegerStateQueryTests.BlendFuncTestCase.prototype); + es3fIntegerStateQueryTests.BlendFuncSeparateTestCase.prototype.constructor = es3fIntegerStateQueryTests.BlendFuncSeparateTestCase; + + /** + * @param {number} func + */ + es3fIntegerStateQueryTests.BlendFuncSeparateTestCase.prototype.setBlendFunc = function(func) { + switch (this.m_testTargetName) { + case gl.BLEND_SRC_RGB: + gl.blendFuncSeparate(func, gl.ZERO, gl.ZERO, gl.ZERO); + break; + + case gl.BLEND_DST_RGB: + gl.blendFuncSeparate(gl.ZERO, func, gl.ZERO, gl.ZERO); + break; + + case gl.BLEND_SRC_ALPHA: + gl.blendFuncSeparate(gl.ZERO, gl.ZERO, func, gl.ZERO); + break; + + case gl.BLEND_DST_ALPHA: + gl.blendFuncSeparate(gl.ZERO, gl.ZERO, gl.ZERO, func); + break; + + default: + throw new Error('should not happen'); + } + }; + + es3fIntegerStateQueryTests.BlendFuncSeparateTestCase.prototype.deinit = function() { + gl.blendFuncSeparate(gl.ONE, gl.ZERO, gl.ONE, gl.ZERO); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} testTargetName + * @param {number} initialValue + */ + es3fIntegerStateQueryTests.BlendEquationTestCase = function(name, description, testTargetName, initialValue) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_testTargetName = testTargetName; + /** @type {number} */ this.m_initialValue = initialValue; + }; + + es3fIntegerStateQueryTests.BlendEquationTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.BlendEquationTestCase.prototype.constructor = es3fIntegerStateQueryTests.BlendEquationTestCase; + + es3fIntegerStateQueryTests.BlendEquationTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(this.m_testTargetName, this.m_initialValue)); + + /** @type {Array} */ var blendFuncValues = [gl.FUNC_ADD, gl.FUNC_SUBTRACT, gl.FUNC_REVERSE_SUBTRACT, gl.MIN, gl.MAX]; + + for (var ndx = 0; ndx < blendFuncValues.length; ++ndx) { + /** @type {number} */ var referenceValue = blendFuncValues[ndx]; + + this.setBlendEquation(referenceValue); + + this.check(glsStateQuery.verify(this.m_testTargetName, referenceValue)); + } + }; + + /** + * @param {number} equation + */ + es3fIntegerStateQueryTests.BlendEquationTestCase.prototype.setBlendEquation = function(equation) { + gl.blendEquation(equation); + }; + + es3fIntegerStateQueryTests.BlendEquationTestCase.prototype.deinit = function() { + gl.blendEquation(this.m_initialValue); + }; + + /** + * @constructor + * @extends {es3fIntegerStateQueryTests.BlendEquationTestCase} + * @param {string} name + * @param {string} description + * @param {number} testTargetName + * @param {number} initialValue + */ + es3fIntegerStateQueryTests.BlendEquationSeparateTestCase = function(name, description, testTargetName, initialValue) { + es3fIntegerStateQueryTests.BlendEquationTestCase.call(this, name, description, testTargetName, initialValue); + /** @type {number} */ this.m_testTargetName = testTargetName; + /** @type {number} */ this.m_initialValue = initialValue; + }; + + es3fIntegerStateQueryTests.BlendEquationSeparateTestCase.prototype = Object.create(es3fIntegerStateQueryTests.BlendEquationTestCase.prototype); + es3fIntegerStateQueryTests.BlendEquationSeparateTestCase.prototype.constructor = es3fIntegerStateQueryTests.BlendEquationSeparateTestCase; + + /** + * @param {number} equation + */ + es3fIntegerStateQueryTests.BlendEquationSeparateTestCase.prototype.setBlendEquation = function(equation) { + switch (this.m_testTargetName) { + case gl.BLEND_EQUATION_RGB: + gl.blendEquationSeparate(equation, gl.FUNC_ADD); + break; + + case gl.BLEND_EQUATION_ALPHA: + gl.blendEquationSeparate(gl.FUNC_ADD, equation); + break; + + default: + throw new Error('should not happen'); + } + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} testTargetName + * @param {number} minValue + */ + es3fIntegerStateQueryTests.ImplementationArrayTestCase = function(name, description, testTargetName, minValue) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_testTargetName = testTargetName; + /** @type {number} */ this.m_minValue = minValue; + }; + + es3fIntegerStateQueryTests.ImplementationArrayTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.ImplementationArrayTestCase.prototype.constructor = es3fIntegerStateQueryTests.ImplementationArrayTestCase; + + es3fIntegerStateQueryTests.ImplementationArrayTestCase.prototype.test = function() { + if (!framework.opengl.gluTextureUtil.enableCompressedTextureETC()) { + debug('Skipping ETC2 texture format tests: no support for WEBGL_compressed_texture_etc'); + return; + } + + var queryResult = /** @type {Array} */ (gl.getParameter(this.m_testTargetName)); + this.check(glsStateQuery.compare(queryResult.length, this.m_minValue)); + + /** @type {Array} */ var textureFormats = [ + gl.COMPRESSED_R11_EAC, gl.COMPRESSED_SIGNED_R11_EAC, gl.COMPRESSED_RG11_EAC, gl.COMPRESSED_SIGNED_RG11_EAC, gl.COMPRESSED_RGB8_ETC2, gl.COMPRESSED_SRGB8_ETC2, + gl.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, gl.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, gl.COMPRESSED_RGBA8_ETC2_EAC, gl.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC + ]; + + for (var ndx = 0; ndx < textureFormats.length; ndx++) { + /** @type {number} */ var format = textureFormats[ndx]; + /** @type {boolean} */ var isInArray = queryResult.indexOf(format) !== -1; + this.check(glsStateQuery.compare(isInArray, true)); + } + + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.CurrentProgramBindingTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.CurrentProgramBindingTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.CurrentProgramBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.CurrentProgramBindingTestCase; + + es3fIntegerStateQueryTests.CurrentProgramBindingTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(gl.CURRENT_PROGRAM, null)); + + /** @type {WebGLShader} */ var shaderVert = gl.createShader(gl.VERTEX_SHADER); + gl.shaderSource(shaderVert, testVertSource); + gl.compileShader(shaderVert); + var compileStatus = /** @type {boolean} */ (gl.getShaderParameter(shaderVert, gl.COMPILE_STATUS)); + this.check(glsStateQuery.compare(compileStatus, true)); + + /** @type {WebGLShader} */ var shaderFrag = gl.createShader(gl.FRAGMENT_SHADER); + gl.shaderSource(shaderFrag, testFragSource); + gl.compileShader(shaderFrag); + compileStatus = /** @type {boolean} */ (gl.getShaderParameter(shaderFrag, gl.COMPILE_STATUS)); + this.check(glsStateQuery.compare(compileStatus, true)); + + /** @type {WebGLProgram} */ var shaderProg = gl.createProgram(); + gl.attachShader(shaderProg, shaderVert); + gl.attachShader(shaderProg, shaderFrag); + gl.linkProgram(shaderProg); + var linkStatus = /** @type {boolean} */ (gl.getProgramParameter(shaderProg, gl.LINK_STATUS)); + this.check(glsStateQuery.compare(linkStatus, true)); + + gl.useProgram(shaderProg); + + this.check(glsStateQuery.verify(gl.CURRENT_PROGRAM, shaderProg)); + + gl.deleteShader(shaderVert); + gl.deleteShader(shaderFrag); + gl.deleteProgram(shaderProg); + + this.check(glsStateQuery.verify(gl.CURRENT_PROGRAM, shaderProg)); + + gl.useProgram(null); + this.check(glsStateQuery.verify(gl.CURRENT_PROGRAM, null)); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.VertexArrayBindingTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.VertexArrayBindingTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.VertexArrayBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.VertexArrayBindingTestCase; + + es3fIntegerStateQueryTests.VertexArrayBindingTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(gl.VERTEX_ARRAY_BINDING, null)); + + /** @type {WebGLVertexArrayObject} */ var vertexArrayObject = gl.createVertexArray(); + + gl.bindVertexArray(vertexArrayObject); + this.check(glsStateQuery.verify(gl.VERTEX_ARRAY_BINDING, vertexArrayObject)); + + gl.deleteVertexArray(vertexArrayObject); + this.check(glsStateQuery.verify(gl.VERTEX_ARRAY_BINDING, null)); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} bufferBindingName + * @param {number} bufferType + */ + es3fIntegerStateQueryTests.BufferBindingTestCase = function(name, description, bufferBindingName, bufferType) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_bufferBindingName = bufferBindingName; + /** @type {number} */ this.m_bufferType = bufferType; + }; + + es3fIntegerStateQueryTests.BufferBindingTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.BufferBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.BufferBindingTestCase; + + es3fIntegerStateQueryTests.BufferBindingTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(this.m_bufferBindingName, null)); + + /** @type {WebGLBuffer} */ var bufferObject = gl.createBuffer(); + + gl.bindBuffer(this.m_bufferType, bufferObject); + this.check(glsStateQuery.verify(this.m_bufferBindingName, bufferObject)); + + gl.deleteBuffer(bufferObject); + this.check(glsStateQuery.verify(this.m_bufferBindingName, null)); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + */ + es3fIntegerStateQueryTests.ElementArrayBufferBindingTestCase = function(name) { + es3fApiCase.ApiCase.call(this, name, 'GL_ELEMENT_ARRAY_BUFFER_BINDING', gl); + }; + + es3fIntegerStateQueryTests.ElementArrayBufferBindingTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.ElementArrayBufferBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.ElementArrayBufferBindingTestCase; + + es3fIntegerStateQueryTests.ElementArrayBufferBindingTestCase.prototype.test = function() { + // Test with default VAO + bufferedLogToConsole('DefaultVAO: Test with default VAO'); + + this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, null)); + + /** @type {WebGLBuffer} */ var bufferObject = gl.createBuffer(); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, bufferObject); + this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, bufferObject)); + + gl.deleteBuffer(bufferObject); + this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, null)); + + // Test with multiple VAOs + bufferedLogToConsole('WithVAO: Test with VAO'); + + /** @type {Array} */ var vaos = []; + /** @type {Array} */ var buffers = []; + + for (var ndx = 0; ndx < 2; ndx++) { + vaos[ndx] = gl.createVertexArray(); + buffers[ndx] = gl.createBuffer(); + } + + // initial + gl.bindVertexArray(vaos[0]); + this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, null)); + + // after setting + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffers[0]); + this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, buffers[0])); + + // initial of vao 2 + gl.bindVertexArray(vaos[1]); + this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, null)); + + // after setting to 2 + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffers[1]); + this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, buffers[1])); + + // vao 1 still has buffer 1 bound? + gl.bindVertexArray(vaos[0]); + this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, buffers[0])); + + // deleting clears from bound vaos ... + for (var ndx = 0; ndx < 2; ndx++) + gl.deleteBuffer(buffers[ndx]); + this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, null)); + + // ... but does not from non-bound vaos? + gl.bindVertexArray(vaos[1]); + this.check(glsStateQuery.verify(gl.ELEMENT_ARRAY_BUFFER_BINDING, buffers[1])); + + for (var ndx = 0; ndx < 2; ndx++) + gl.deleteVertexArray(vaos[ndx]); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.StencilClearValueTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.StencilClearValueTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.StencilClearValueTestCase.prototype.constructor = es3fIntegerStateQueryTests.StencilClearValueTestCase; + + es3fIntegerStateQueryTests.StencilClearValueTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(gl.STENCIL_CLEAR_VALUE, 0)); + + var stencilBits = /** @type {number} */ (gl.getParameter(gl.STENCIL_BITS)); + + for (var stencilBit = 0; stencilBit < stencilBits; ++stencilBit) { + /** @type {number} */ var ref = 1 << stencilBit; + + gl.clearStencil(ref); // mask should not affect the REF + + this.check(glsStateQuery.verify(gl.STENCIL_CLEAR_VALUE, ref)); + } + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.ActiveTextureTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.ActiveTextureTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.ActiveTextureTestCase.prototype.constructor = es3fIntegerStateQueryTests.ActiveTextureTestCase; + + es3fIntegerStateQueryTests.ActiveTextureTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(gl.ACTIVE_TEXTURE, gl.TEXTURE0)); + + var textureUnits = /** @type {number} */ (gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS)); + + for (var ndx = 0; ndx < textureUnits; ++ndx) { + gl.activeTexture(gl.TEXTURE0 + ndx); + + this.check(glsStateQuery.verify(gl.ACTIVE_TEXTURE, gl.TEXTURE0 + ndx)); + } + }; + + es3fIntegerStateQueryTests.ActiveTextureTestCase.prototype.deinit = function() { + // [dag] reset the state of the context + gl.activeTexture(gl.TEXTURE0); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.RenderbufferBindingTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.RenderbufferBindingTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.RenderbufferBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.RenderbufferBindingTestCase; + + es3fIntegerStateQueryTests.RenderbufferBindingTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(gl.RENDERBUFFER_BINDING, null)); + + /** @type {WebGLRenderbuffer} */ var renderBuffer = gl.createRenderbuffer(); + + gl.bindRenderbuffer(gl.RENDERBUFFER, renderBuffer); + + this.check(glsStateQuery.verify(gl.RENDERBUFFER_BINDING, renderBuffer)); + + gl.deleteRenderbuffer(renderBuffer); + this.check(glsStateQuery.verify(gl.RENDERBUFFER_BINDING, null)); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.SamplerObjectBindingTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.SamplerObjectBindingTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.SamplerObjectBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.SamplerObjectBindingTestCase; + + es3fIntegerStateQueryTests.SamplerObjectBindingTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(gl.SAMPLER_BINDING, null)); + + bufferedLogToConsole('SingleUnit: Single unit'); + /** @type {WebGLSampler} */ var sampler = gl.createSampler(); + + gl.bindSampler(0, sampler); + + this.check(glsStateQuery.verify(gl.SAMPLER_BINDING, sampler)); + + gl.deleteSampler(sampler); + this.check(glsStateQuery.verify(gl.SAMPLER_BINDING, null)); + + bufferedLogToConsole('MultipleUnits: Multiple units'); + + /** @type {WebGLSampler} */ var samplerA = gl.createSampler(); + /** @type {WebGLSampler} */ var samplerB = gl.createSampler(); + + gl.bindSampler(1, samplerA); + gl.bindSampler(2, samplerB); + + this.check(glsStateQuery.verify(gl.SAMPLER_BINDING, null)); + + gl.activeTexture(gl.TEXTURE1); + this.check(glsStateQuery.verify(gl.SAMPLER_BINDING, samplerA)); + + gl.activeTexture(gl.TEXTURE2); + this.check(glsStateQuery.verify(gl.SAMPLER_BINDING, samplerB)); + + gl.deleteSampler(samplerB); + gl.deleteSampler(samplerA); + }; + + es3fIntegerStateQueryTests.SamplerObjectBindingTestCase.prototype.deinit = function() { + gl.activeTexture(gl.TEXTURE0); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} testBindingName + * @param {number} textureType + */ + es3fIntegerStateQueryTests.TextureBindingTestCase = function(name, description, testBindingName, textureType) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_testBindingName = testBindingName; + /** @type {number} */ this.m_textureType = textureType; + }; + + es3fIntegerStateQueryTests.TextureBindingTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.TextureBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.TextureBindingTestCase; + + es3fIntegerStateQueryTests.TextureBindingTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(this.m_testBindingName, null)); + + /** @type {WebGLTexture} */ var texture = gl.createTexture(); + + gl.bindTexture(this.m_textureType, texture); + this.check(glsStateQuery.verify(this.m_testBindingName, texture)); + + gl.deleteTexture(texture); + + this.check(glsStateQuery.verify(this.m_testBindingName, null)); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.FrameBufferBindingTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.FrameBufferBindingTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.FrameBufferBindingTestCase.prototype.constructor = es3fIntegerStateQueryTests.FrameBufferBindingTestCase; + + es3fIntegerStateQueryTests.FrameBufferBindingTestCase.prototype.test = function() { + this.check(glsStateQuery.verify(gl.DRAW_FRAMEBUFFER_BINDING, null)); + this.check(glsStateQuery.verify(gl.FRAMEBUFFER_BINDING, null)); + this.check(glsStateQuery.verify(gl.READ_FRAMEBUFFER_BINDING, null)); + + /** @type {WebGLFramebuffer} */ var framebufferId = gl.createFramebuffer(); + + gl.bindFramebuffer(gl.FRAMEBUFFER, framebufferId); + + this.check(glsStateQuery.verify(gl.DRAW_FRAMEBUFFER_BINDING, framebufferId)); + this.check(glsStateQuery.verify(gl.FRAMEBUFFER_BINDING, framebufferId)); + this.check(glsStateQuery.verify(gl.READ_FRAMEBUFFER_BINDING, framebufferId)); + + gl.bindFramebuffer(gl.FRAMEBUFFER, null); + + this.check(glsStateQuery.verify(gl.DRAW_FRAMEBUFFER_BINDING, null)); + this.check(glsStateQuery.verify(gl.FRAMEBUFFER_BINDING, null)); + this.check(glsStateQuery.verify(gl.READ_FRAMEBUFFER_BINDING, null)); + + gl.bindFramebuffer(gl.READ_FRAMEBUFFER, framebufferId); + + this.check(glsStateQuery.verify(gl.DRAW_FRAMEBUFFER_BINDING, null)); + this.check(glsStateQuery.verify(gl.FRAMEBUFFER_BINDING, null)); + this.check(glsStateQuery.verify(gl.READ_FRAMEBUFFER_BINDING, framebufferId)); + + gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, framebufferId); + + this.check(glsStateQuery.verify(gl.DRAW_FRAMEBUFFER_BINDING, framebufferId)); + this.check(glsStateQuery.verify(gl.FRAMEBUFFER_BINDING, framebufferId)); + this.check(glsStateQuery.verify(gl.READ_FRAMEBUFFER_BINDING, framebufferId)); + + gl.deleteFramebuffer(framebufferId); + + this.check(glsStateQuery.verify(gl.DRAW_FRAMEBUFFER_BINDING, null)); + this.check(glsStateQuery.verify(gl.FRAMEBUFFER_BINDING, null)); + this.check(glsStateQuery.verify(gl.READ_FRAMEBUFFER_BINDING, null)); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.ImplementationColorReadTestCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.ImplementationColorReadTestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.ImplementationColorReadTestCase.prototype.constructor = es3fIntegerStateQueryTests.ImplementationColorReadTestCase; + + es3fIntegerStateQueryTests.ImplementationColorReadTestCase.prototype.test = function() { + /** @type {Array} */ var defaultColorTypes = [ + gl.UNSIGNED_BYTE, gl.BYTE, gl.UNSIGNED_SHORT, gl.SHORT, + gl.UNSIGNED_INT, gl.INT, gl.HALF_FLOAT, gl.FLOAT, gl.UNSIGNED_SHORT_5_6_5, + gl.UNSIGNED_SHORT_4_4_4_4, gl.UNSIGNED_SHORT_5_5_5_1, + gl.UNSIGNED_INT_2_10_10_10_REV, gl.UNSIGNED_INT_10F_11F_11F_REV + ]; + + /** @type {Array} */ var defaultColorFormats = [ + gl.RGBA, gl.RGBA_INTEGER, gl.RGB, gl.RGB_INTEGER, + gl.RG, gl.RG_INTEGER, gl.RED, gl.RED_INTEGER + ]; + + /** @type {Array} */ var validColorTypes = []; + /** @type {Array} */ var validColorFormats = []; + + // Defined by the spec + + for (var ndx = 0; ndx < defaultColorTypes.length; ++ndx) + validColorTypes.push(defaultColorTypes[ndx]); + for (var ndx = 0; ndx < defaultColorFormats.length; ++ndx) + validColorFormats.push(defaultColorFormats[ndx]); + + // Extensions + + // if (this.m_context.getContextInfo().isExtensionSupported("gl.EXT_texture_format_BGRA8888") || + // this.m_context.getContextInfo().isExtensionSupported("gl.APPLE_texture_format_BGRA8888")) + // validColorFormats.push(gl.BGRA); + // + // if (this.m_context.getContextInfo().isExtensionSupported("gl.EXT_read_format_bgra")) { + // validColorFormats.push(gl.BGRA); + // validColorTypes.push(gl.UNSIGNED_SHORT_4_4_4_4_REV); + // validColorTypes.push(gl.UNSIGNED_SHORT_1_5_5_5_REV); + // } + // + // if (this.m_context.getContextInfo().isExtensionSupported("gl.IMG_read_format")) { + // validColorFormats.push(gl.BGRA); + // validColorTypes.push(gl.UNSIGNED_SHORT_4_4_4_4_REV); + // } + // + // if (this.m_context.getContextInfo().isExtensionSupported("gl.NV_sRGB_formats")) { + // validColorFormats.push(gl.SLUMINANCE_NV); + // validColorFormats.push(gl.SLUMINANCE_ALPHA_NV); + // } + // + // if (this.m_context.getContextInfo().isExtensionSupported("gl.NV_bgr")) { + // validColorFormats.push(gl.BGR_NV); + // } + + this.check(glsStateQuery.verifyAnyOf(gl.IMPLEMENTATION_COLOR_READ_TYPE, validColorTypes)); + this.check(glsStateQuery.verifyAnyOf(gl.IMPLEMENTATION_COLOR_READ_FORMAT, validColorFormats)); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.ReadBufferCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.ReadBufferCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.ReadBufferCase.prototype.constructor = es3fIntegerStateQueryTests.ReadBufferCase; + + es3fIntegerStateQueryTests.ReadBufferCase.prototype.test = function() { + /** @type {Array} */ var validInitialValues = [gl.BACK, gl.NONE]; + this.check(glsStateQuery.verifyAnyOf(gl.READ_BUFFER, validInitialValues)); + + gl.readBuffer(gl.NONE); + this.check(glsStateQuery.verify(gl.READ_BUFFER, gl.NONE)); + + gl.readBuffer(gl.BACK); + this.check(glsStateQuery.verify(gl.READ_BUFFER, gl.BACK)); + + // test gl.READ_BUFFER with framebuffers + + /** @type {WebGLFramebuffer} */ var framebufferId = gl.createFramebuffer(); + + /** @type {WebGLRenderbuffer} */ var renderbuffer_id = gl.createRenderbuffer(); + + gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer_id); + + gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA8, 128, 128); + + gl.bindFramebuffer(gl.READ_FRAMEBUFFER, framebufferId); + + gl.framebufferRenderbuffer(gl.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, renderbuffer_id); + + this.check(glsStateQuery.verify(gl.READ_BUFFER, gl.COLOR_ATTACHMENT0)); + + gl.deleteFramebuffer(framebufferId); + gl.deleteRenderbuffer(renderbuffer_id); + + this.check(glsStateQuery.verify(gl.READ_BUFFER, gl.BACK)); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + */ + es3fIntegerStateQueryTests.DrawBufferCase = function(name, description) { + es3fApiCase.ApiCase.call(this, name, description, gl); + }; + + es3fIntegerStateQueryTests.DrawBufferCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.DrawBufferCase.prototype.constructor = es3fIntegerStateQueryTests.DrawBufferCase; + + es3fIntegerStateQueryTests.DrawBufferCase.prototype.test = function() { + /** @type {Array} */ var validInitialValues = [gl.BACK, gl.NONE]; + this.check(glsStateQuery.verifyAnyOf(gl.DRAW_BUFFER0, validInitialValues)); + + /** @type {number} */ var bufs = gl.NONE; + gl.drawBuffers([bufs]); + this.check(glsStateQuery.verify(gl.DRAW_BUFFER0, gl.NONE)); + + bufs = gl.BACK; + gl.drawBuffers([bufs]); + this.check(glsStateQuery.verify(gl.DRAW_BUFFER0, gl.BACK)); + + // test gl.DRAW_BUFFER with framebuffers + + /** @type {WebGLFramebuffer} */ var framebufferId = gl.createFramebuffer(); + + /** @type {Array} */ var renderbuffer_ids = []; + + for (var ndx = 0; ndx < 2; ndx++) + renderbuffer_ids[ndx] = gl.createRenderbuffer(); + + gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer_ids[0]); + gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA8, 128, 128); + + gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer_ids[1]); + gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA8, 128, 128); + + gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, framebufferId); + + gl.framebufferRenderbuffer(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, renderbuffer_ids[0]); + gl.framebufferRenderbuffer(gl.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.RENDERBUFFER, renderbuffer_ids[1]); + + // only the initial state the draw buffer for fragment color zero is defined + this.check(glsStateQuery.verify(gl.DRAW_BUFFER0, gl.COLOR_ATTACHMENT0)); + + /** @type {Array} */ var bufTargets = [gl.NONE, gl.COLOR_ATTACHMENT1]; + gl.drawBuffers(bufTargets); + this.check(glsStateQuery.verify(gl.DRAW_BUFFER0, gl.NONE)); + this.check(glsStateQuery.verify(gl.DRAW_BUFFER1, gl.COLOR_ATTACHMENT1)); + + gl.deleteFramebuffer(framebufferId); + gl.deleteRenderbuffer(renderbuffer_ids[0]); + gl.deleteRenderbuffer(renderbuffer_ids[1]); + + this.check(glsStateQuery.verify(gl.DRAW_BUFFER0, gl.BACK)); + }; + + // Integer64 + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} targetName + * @param {number} minValue + */ + es3fIntegerStateQueryTests.ConstantMinimumValue64TestCase = function(name, description, targetName, minValue) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_targetName = targetName; + /** @type {number} */ this.m_minValue = minValue; + }; + + es3fIntegerStateQueryTests.ConstantMinimumValue64TestCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.ConstantMinimumValue64TestCase.prototype.constructor = es3fIntegerStateQueryTests.ConstantMinimumValue64TestCase; + + es3fIntegerStateQueryTests.ConstantMinimumValue64TestCase.prototype.test = function() { + this.check(glsStateQuery.verifyGreaterOrEqual(this.m_targetName, this.m_minValue), 'Fail'); + }; + + /** + * @constructor + * @extends {es3fApiCase.ApiCase} + * @param {string} name + * @param {string} description + * @param {number} targetName + * @param {number} targetMaxUniformBlocksName + * @param {number} targetMaxUniformComponentsName + */ + es3fIntegerStateQueryTests.MaxCombinedStageUniformComponentsCase = function(name, description, targetName, targetMaxUniformBlocksName, targetMaxUniformComponentsName) { + es3fApiCase.ApiCase.call(this, name, description, gl); + /** @type {number} */ this.m_targetName = targetName; + /** @type {number} */ this.m_targetMaxUniformBlocksName = targetMaxUniformBlocksName; + /** @type {number} */ this.m_targetMaxUniformComponentsName = targetMaxUniformComponentsName; + }; + + es3fIntegerStateQueryTests.MaxCombinedStageUniformComponentsCase.prototype = Object.create(es3fApiCase.ApiCase.prototype); + es3fIntegerStateQueryTests.MaxCombinedStageUniformComponentsCase.prototype.constructor = es3fIntegerStateQueryTests.MaxCombinedStageUniformComponentsCase; + + es3fIntegerStateQueryTests.MaxCombinedStageUniformComponentsCase.prototype.test = function() { + var uniformBlockSize = /** @type {number} */ (gl.getParameter(gl.MAX_UNIFORM_BLOCK_SIZE)); + var maxUniformBlocks = /** @type {number} */ (gl.getParameter(this.m_targetMaxUniformBlocksName)); + var maxUniformComponents = /** @type {number} */ (gl.getParameter(this.m_targetMaxUniformComponentsName)); + + // MAX_stage_UNIFORM_BLOCKS * MAX_UNIFORM_BLOCK_SIZE / 4 + MAX_stage_UNIFORM_COMPONENTS + /** @type {number} */ var minCombinedUniformComponents = maxUniformBlocks * uniformBlockSize / 4 + maxUniformComponents; + + this.check(glsStateQuery.verifyGreaterOrEqual(this.m_targetName, minCombinedUniformComponents)); + }; + + /** + * @constructor + * @extends {tcuTestCase.DeqpTest} + */ + es3fIntegerStateQueryTests.IntegerStateQueryTests = function() { + tcuTestCase.DeqpTest.call(this, 'integers', 'Integer Values'); + }; + + es3fIntegerStateQueryTests.IntegerStateQueryTests.prototype = Object.create(tcuTestCase.DeqpTest.prototype); + es3fIntegerStateQueryTests.IntegerStateQueryTests.prototype.constructor = es3fIntegerStateQueryTests.IntegerStateQueryTests; + + es3fIntegerStateQueryTests.IntegerStateQueryTests.prototype.init = function() { + /** + * @struct + * @constructor + * @param {string} name + * @param {string} description + * @param {number} targetName + * @param {number} value + */ + var LimitedStateInteger = function(name, description, targetName, value) { + /** @type {string} */ this.name = name; + /** @type {string} */ this.description = description; + /** @type {number} */ this.targetName = targetName; + /** @type {number} */ this.value = value; + }; + + /** @type {Array} */ var implementationMinLimits = [ + new LimitedStateInteger('subpixel_bits', 'SUBPIXEL_BITS has minimum value of 4', gl.SUBPIXEL_BITS, 4), + new LimitedStateInteger('max_3d_texture_size', 'MAX_3D_TEXTURE_SIZE has minimum value of 256', gl.MAX_3D_TEXTURE_SIZE, 256), + new LimitedStateInteger('max_texture_size', 'MAX_TEXTURE_SIZE has minimum value of 2048', gl.MAX_TEXTURE_SIZE, 2048), + new LimitedStateInteger('max_array_texture_layers', 'MAX_ARRAY_TEXTURE_LAYERS has minimum value of 256', gl.MAX_ARRAY_TEXTURE_LAYERS, 256), + new LimitedStateInteger('max_cube_map_texture_size', 'MAX_CUBE_MAP_TEXTURE_SIZE has minimum value of 2048', gl.MAX_CUBE_MAP_TEXTURE_SIZE, 2048), + new LimitedStateInteger('max_renderbuffer_size', 'MAX_RENDERBUFFER_SIZE has minimum value of 2048', gl.MAX_RENDERBUFFER_SIZE, 2048), + new LimitedStateInteger('max_draw_buffers', 'MAX_DRAW_BUFFERS has minimum value of 4', gl.MAX_DRAW_BUFFERS, 4), + new LimitedStateInteger('max_color_attachments', 'MAX_COLOR_ATTACHMENTS has minimum value of 4', gl.MAX_COLOR_ATTACHMENTS, 4), + new LimitedStateInteger('max_elements_indices', 'MAX_ELEMENTS_INDICES has minimum value of 0', gl.MAX_ELEMENTS_INDICES, 0), + new LimitedStateInteger('max_elements_vertices', 'MAX_ELEMENTS_VERTICES has minimum value of 0', gl.MAX_ELEMENTS_VERTICES, 0), + new LimitedStateInteger('max_vertex_attribs', 'MAX_VERTEX_ATTRIBS has minimum value of 16', gl.MAX_VERTEX_ATTRIBS, 16), + new LimitedStateInteger('max_vertex_uniform_components', 'MAX_VERTEX_UNIFORM_COMPONENTS has minimum value of 1024', gl.MAX_VERTEX_UNIFORM_COMPONENTS, 1024), + new LimitedStateInteger('max_vertex_uniform_vectors', 'MAX_VERTEX_UNIFORM_VECTORS has minimum value of 256', gl.MAX_VERTEX_UNIFORM_VECTORS, 256), + new LimitedStateInteger('max_vertex_uniform_blocks', 'MAX_VERTEX_UNIFORM_BLOCKS has minimum value of 12', gl.MAX_VERTEX_UNIFORM_BLOCKS, 12), + new LimitedStateInteger('max_vertex_output_components', 'MAX_VERTEX_OUTPUT_COMPONENTS has minimum value of 64', gl.MAX_VERTEX_OUTPUT_COMPONENTS, 64), + new LimitedStateInteger('max_vertex_texture_image_units', 'MAX_VERTEX_TEXTURE_IMAGE_UNITS has minimum value of 16', gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS, 16), + new LimitedStateInteger('max_fragment_uniform_components', 'MAX_FRAGMENT_UNIFORM_COMPONENTS has minimum value of 896', gl.MAX_FRAGMENT_UNIFORM_COMPONENTS, 896), + new LimitedStateInteger('max_fragment_uniform_vectors', 'MAX_FRAGMENT_UNIFORM_VECTORS has minimum value of 224', gl.MAX_FRAGMENT_UNIFORM_VECTORS, 224), + new LimitedStateInteger('max_fragment_uniform_blocks', 'MAX_FRAGMENT_UNIFORM_BLOCKS has minimum value of 12', gl.MAX_FRAGMENT_UNIFORM_BLOCKS, 12), + new LimitedStateInteger('max_fragment_input_components', 'MAX_FRAGMENT_INPUT_COMPONENTS has minimum value of 60', gl.MAX_FRAGMENT_INPUT_COMPONENTS, 60), + new LimitedStateInteger('max_texture_image_units', 'MAX_TEXTURE_IMAGE_UNITS has minimum value of 16', gl.MAX_TEXTURE_IMAGE_UNITS, 16), + new LimitedStateInteger('max_program_texel_offset', 'MAX_PROGRAM_TEXEL_OFFSET has minimum value of 7', gl.MAX_PROGRAM_TEXEL_OFFSET, 7), + new LimitedStateInteger('max_uniform_buffer_bindings', 'MAX_UNIFORM_BUFFER_BINDINGS has minimum value of 24', gl.MAX_UNIFORM_BUFFER_BINDINGS, 24), + new LimitedStateInteger('max_combined_uniform_blocks', 'MAX_COMBINED_UNIFORM_BLOCKS has minimum value of 24', gl.MAX_COMBINED_UNIFORM_BLOCKS, 24), + new LimitedStateInteger('max_varying_components', 'MAX_VARYING_COMPONENTS has minimum value of 60', gl.MAX_VARYING_COMPONENTS, 60), + new LimitedStateInteger('max_varying_vectors', 'MAX_VARYING_VECTORS has minimum value of 15', gl.MAX_VARYING_VECTORS, 15), + new LimitedStateInteger('max_combined_texture_image_units', 'MAX_COMBINED_TEXTURE_IMAGE_UNITS has minimum value of 32', gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS, 32), + new LimitedStateInteger('max_transform_feedback_interleaved_components', 'MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS has minimum value of 64', gl.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS, 64), + new LimitedStateInteger('max_transform_feedback_separate_attribs', 'MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS has minimum value of 4', gl.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, 4), + new LimitedStateInteger('max_transform_feedback_separate_components', 'MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS has minimum value of 4', gl.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS, 4), + new LimitedStateInteger('max_samples', 'MAX_SAMPLES has minimum value of 4', gl.MAX_SAMPLES, 4), + new LimitedStateInteger('red_bits', 'RED_BITS has minimum value of 0', gl.RED_BITS, 0), + new LimitedStateInteger('green_bits', 'GREEN_BITS has minimum value of 0', gl.GREEN_BITS, 0), + new LimitedStateInteger('blue_bits', 'BLUE_BITS has minimum value of 0', gl.BLUE_BITS, 0), + new LimitedStateInteger('alpha_bits', 'ALPHA_BITS has minimum value of 0', gl.ALPHA_BITS, 0), + new LimitedStateInteger('depth_bits', 'DEPTH_BITS has minimum value of 0', gl.DEPTH_BITS, 0), + new LimitedStateInteger('stencil_bits', 'STENCIL_BITS has minimum value of 0', gl.STENCIL_BITS, 0) + ]; + + /** @type {Array} */ var implementationMaxLimits = [ + new LimitedStateInteger('min_program_texel_offset', 'MIN_PROGRAM_TEXEL_OFFSET has maximum value of -8', gl.MIN_PROGRAM_TEXEL_OFFSET, -8), + new LimitedStateInteger('uniform_buffer_offset_alignment', 'UNIFORM_BUFFER_OFFSET_ALIGNMENT has minimum value of 1', gl.UNIFORM_BUFFER_OFFSET_ALIGNMENT, 256) + ]; + + var testCtx = this; + + for (var testNdx = 0; testNdx < implementationMinLimits.length; testNdx++) + testCtx.addChild(new es3fIntegerStateQueryTests.ConstantMinimumValueTestCase(implementationMinLimits[testNdx].name, implementationMinLimits[testNdx].description, implementationMinLimits[testNdx].targetName, implementationMinLimits[testNdx].value)); + + for (var testNdx = 0; testNdx < implementationMaxLimits.length; testNdx++) + testCtx.addChild(new es3fIntegerStateQueryTests.ConstantMaximumValueTestCase(implementationMaxLimits[testNdx].name, implementationMaxLimits[testNdx].description, implementationMaxLimits[testNdx].targetName, implementationMaxLimits[testNdx].value)); + + testCtx.addChild(new es3fIntegerStateQueryTests.SampleBuffersTestCase('sample_buffers', 'SAMPLE_BUFFERS')); + testCtx.addChild(new es3fIntegerStateQueryTests.SamplesTestCase('samples' , 'SAMPLES')); + testCtx.addChild(new es3fIntegerStateQueryTests.HintTestCase('generate_mipmap_hint', 'GENERATE_MIPMAP_HINT', gl.GENERATE_MIPMAP_HINT)); + testCtx.addChild(new es3fIntegerStateQueryTests.HintTestCase('fragment_shader_derivative_hint', 'FRAGMENT_SHADER_DERIVATIVE_HINT', gl.FRAGMENT_SHADER_DERIVATIVE_HINT)); + testCtx.addChild(new es3fIntegerStateQueryTests.DepthFuncTestCase('depth_func', 'DEPTH_FUNC')); + testCtx.addChild(new es3fIntegerStateQueryTests.CullFaceTestCase('cull_face_mode', 'CULL_FACE_MODE')); + testCtx.addChild(new es3fIntegerStateQueryTests.FrontFaceTestCase('front_face_mode', 'FRONT_FACE')); + testCtx.addChild(new es3fIntegerStateQueryTests.ViewPortTestCase('viewport', 'VIEWPORT')); + testCtx.addChild(new es3fIntegerStateQueryTests.ScissorBoxTestCase('scissor_box', 'SCISSOR_BOX')); + testCtx.addChild(new es3fIntegerStateQueryTests.MaxViewportDimsTestCase('max_viewport_dims', 'MAX_VIEWPORT_DIMS')); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilRefTestCase('stencil_ref', 'STENCIL_REF', gl.STENCIL_REF)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilRefTestCase('stencil_back_ref', 'STENCIL_BACK_REF', gl.STENCIL_BACK_REF)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilRefSeparateTestCase('stencil_ref_separate', 'STENCIL_REF (separate)', gl.STENCIL_REF, gl.FRONT)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilRefSeparateTestCase('stencil_ref_separate_both', 'STENCIL_REF (separate)', gl.STENCIL_REF, gl.FRONT_AND_BACK)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilRefSeparateTestCase('stencil_back_ref_separate', 'STENCIL_BACK_REF (separate)', gl.STENCIL_BACK_REF, gl.BACK)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilRefSeparateTestCase('stencil_back_ref_separate_both', 'STENCIL_BACK_REF (separate)', gl.STENCIL_BACK_REF, gl.FRONT_AND_BACK)); + + /** + * @struct + * @constructor + * @param {string} name + * @param {string} frontDescription + * @param {number} frontTarget + * @param {string} backDescription + * @param {number} backTarget + */ + var NamedStencilOp = function(name, frontDescription, frontTarget, backDescription, backTarget) { + /** @type {string} */ this.name = name; + /** @type {string} */ this.frontDescription = frontDescription; + /** @type {number} */ this.frontTarget = frontTarget; + /** @type {string} */ this.backDescription = backDescription; + /** @type {number} */ this.backTarget = backTarget; + }; + + /** @type {Array} */ var stencilOps = [ + new NamedStencilOp('fail', 'STENCIL_FAIL', gl.STENCIL_FAIL, 'STENCIL_BACK_FAIL', gl.STENCIL_BACK_FAIL), + new NamedStencilOp('depth_fail', 'STENCIL_PASS_DEPTH_FAIL', gl.STENCIL_PASS_DEPTH_FAIL, 'STENCIL_BACK_PASS_DEPTH_FAIL', gl.STENCIL_BACK_PASS_DEPTH_FAIL), + new NamedStencilOp('depth_pass', 'STENCIL_PASS_DEPTH_PASS', gl.STENCIL_PASS_DEPTH_PASS, 'STENCIL_BACK_PASS_DEPTH_PASS', gl.STENCIL_BACK_PASS_DEPTH_PASS) + ]; + + for (var testNdx = 0; testNdx < stencilOps.length; testNdx++) { + testCtx.addChild(new es3fIntegerStateQueryTests.StencilOpTestCase('stencil_' + stencilOps[testNdx].name, stencilOps[testNdx].frontDescription, stencilOps[testNdx].frontTarget)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilOpTestCase('stencil_back_' + stencilOps[testNdx].name, stencilOps[testNdx].backDescription, stencilOps[testNdx].backTarget)); + + testCtx.addChild(new es3fIntegerStateQueryTests.StencilOpSeparateTestCase('stencil_' + stencilOps[testNdx].name + '_separate_both', stencilOps[testNdx].frontDescription, stencilOps[testNdx].frontTarget, gl.FRONT_AND_BACK)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilOpSeparateTestCase('stencil_back_' + stencilOps[testNdx].name + '_separate_both', stencilOps[testNdx].backDescription, stencilOps[testNdx].backTarget, gl.FRONT_AND_BACK)); + + testCtx.addChild(new es3fIntegerStateQueryTests.StencilOpSeparateTestCase('stencil_' + stencilOps[testNdx].name + '_separate', stencilOps[testNdx].frontDescription, stencilOps[testNdx].frontTarget, gl.FRONT)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilOpSeparateTestCase('stencil_back_' + stencilOps[testNdx].name + '_separate', stencilOps[testNdx].backDescription, stencilOps[testNdx].backTarget, gl.BACK)); + } + + testCtx.addChild(new es3fIntegerStateQueryTests.StencilFuncTestCase('stencil_func', 'STENCIL_FUNC')); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilFuncSeparateTestCase('stencil_func_separate', 'STENCIL_FUNC (separate)', gl.STENCIL_FUNC, gl.FRONT)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilFuncSeparateTestCase('stencil_func_separate_both', 'STENCIL_FUNC (separate)', gl.STENCIL_FUNC, gl.FRONT_AND_BACK)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilFuncSeparateTestCase('stencil_back_func_separate', 'STENCIL_FUNC (separate)', gl.STENCIL_BACK_FUNC, gl.BACK)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilFuncSeparateTestCase('stencil_back_func_separate_both', 'STENCIL_FUNC (separate)', gl.STENCIL_BACK_FUNC, gl.FRONT_AND_BACK)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilMaskTestCase('stencil_value_mask', 'STENCIL_VALUE_MASK', gl.STENCIL_VALUE_MASK)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilMaskTestCase('stencil_back_value_mask', 'STENCIL_BACK_VALUE_MASK', gl.STENCIL_BACK_VALUE_MASK)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilMaskSeparateTestCase('stencil_value_mask_separate', 'STENCIL_VALUE_MASK (separate)', gl.STENCIL_VALUE_MASK, gl.FRONT)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilMaskSeparateTestCase('stencil_value_mask_separate_both', 'STENCIL_VALUE_MASK (separate)', gl.STENCIL_VALUE_MASK, gl.FRONT_AND_BACK)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilMaskSeparateTestCase('stencil_back_value_mask_separate', 'STENCIL_BACK_VALUE_MASK (separate)', gl.STENCIL_BACK_VALUE_MASK, gl.BACK)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilMaskSeparateTestCase('stencil_back_value_mask_separate_both', 'STENCIL_BACK_VALUE_MASK (separate)', gl.STENCIL_BACK_VALUE_MASK, gl.FRONT_AND_BACK)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilWriteMaskTestCase('stencil_writemask', 'STENCIL_WRITEMASK', gl.STENCIL_WRITEMASK)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilWriteMaskTestCase('stencil_back_writemask', 'STENCIL_BACK_WRITEMASK', gl.STENCIL_BACK_WRITEMASK)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase('stencil_writemask_separate', 'STENCIL_WRITEMASK (separate)', gl.STENCIL_WRITEMASK, gl.FRONT)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase('stencil_writemask_separate_both', 'STENCIL_WRITEMASK (separate)', gl.STENCIL_WRITEMASK, gl.FRONT_AND_BACK)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase('stencil_back_writemask_separate', 'STENCIL_BACK_WRITEMASK (separate)', gl.STENCIL_BACK_WRITEMASK, gl.BACK)); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilWriteMaskSeparateTestCase('stencil_back_writemask_separate_both', 'STENCIL_BACK_WRITEMASK (separate)', gl.STENCIL_BACK_WRITEMASK, gl.FRONT_AND_BACK)); + + /** + * @struct + * @constructor + * @param {string} name + * @param {string} description + * @param {number} target + * @param {number} initialValue + */ + var PixelStoreState = function(name, description, target, initialValue) { + /** @type {string} */ this.name = name; + /** @type {string} */ this.description = description; + /** @type {number} */ this.target = target; + /** @type {number} */ this.initialValue = initialValue; + }; + + /** @type {Array} */ var pixelStoreStates = [ + new PixelStoreState('unpack_image_height', 'UNPACK_IMAGE_HEIGHT', gl.UNPACK_IMAGE_HEIGHT, 0), + new PixelStoreState('unpack_skip_images', 'UNPACK_SKIP_IMAGES', gl.UNPACK_SKIP_IMAGES, 0), + new PixelStoreState('unpack_row_length', 'UNPACK_ROW_LENGTH', gl.UNPACK_ROW_LENGTH, 0), + new PixelStoreState('unpack_skip_rows', 'UNPACK_SKIP_ROWS', gl.UNPACK_SKIP_ROWS, 0), + new PixelStoreState('unpack_skip_pixels', 'UNPACK_SKIP_PIXELS', gl.UNPACK_SKIP_PIXELS, 0), + new PixelStoreState('pack_row_length', 'PACK_ROW_LENGTH', gl.PACK_ROW_LENGTH, 0), + new PixelStoreState('pack_skip_rows', 'PACK_SKIP_ROWS', gl.PACK_SKIP_ROWS, 0), + new PixelStoreState('pack_skip_pixels', 'PACK_SKIP_PIXELS', gl.PACK_SKIP_PIXELS, 0) + ]; + + for (var testNdx = 0; testNdx < pixelStoreStates.length; testNdx++) + testCtx.addChild(new es3fIntegerStateQueryTests.PixelStoreTestCase(pixelStoreStates[testNdx].name, pixelStoreStates[testNdx].description, pixelStoreStates[testNdx].target, pixelStoreStates[testNdx].initialValue)); + + testCtx.addChild(new es3fIntegerStateQueryTests.PixelStoreAlignTestCase('unpack_alignment', 'UNPACK_ALIGNMENT', gl.UNPACK_ALIGNMENT)); + testCtx.addChild(new es3fIntegerStateQueryTests.PixelStoreAlignTestCase('pack_alignment', 'PACK_ALIGNMENT', gl.PACK_ALIGNMENT)); + + /** + * @struct + * @constructor + * @param {string} name + * @param {string} description + * @param {number} target + * @param {number} initialValue + */ + var BlendColorState = function(name, description, target, initialValue) { + /** @type {string} */ this.name = name; + /** @type {string} */ this.description = description; + /** @type {number} */ this.target = target; + /** @type {number} */ this.initialValue = initialValue; + }; + + /** @type {Array} */ var blendColorStates = [ + new BlendColorState('blend_src_rgb', 'BLEND_SRC_RGB', gl.BLEND_SRC_RGB), + new BlendColorState('blend_src_alpha', 'BLEND_SRC_ALPHA', gl.BLEND_SRC_ALPHA), + new BlendColorState('blend_dst_rgb', 'BLEND_DST_RGB', gl.BLEND_DST_RGB), + new BlendColorState('blend_dst_alpha', 'BLEND_DST_ALPHA', gl.BLEND_DST_ALPHA) + ]; + + for (var testNdx = 0; testNdx < blendColorStates.length; testNdx++) { + testCtx.addChild(new es3fIntegerStateQueryTests.BlendFuncTestCase(blendColorStates[testNdx].name, blendColorStates[testNdx].description, blendColorStates[testNdx].target)); + testCtx.addChild(new es3fIntegerStateQueryTests.BlendFuncSeparateTestCase(blendColorStates[testNdx].name + '_separate', blendColorStates[testNdx].description, blendColorStates[testNdx].target)); + } + + /** + * @struct + * @constructor + * @param {string} name + * @param {string} description + * @param {number} target + * @param {number} initialValue + */ + var BlendEquationState = function(name, description, target, initialValue) { + /** @type {string} */ this.name = name; + /** @type {string} */ this.description = description; + /** @type {number} */ this.target = target; + /** @type {number} */ this.initialValue = initialValue; + }; + + /** @type {Array} */ var blendEquationStates = [ + new BlendEquationState('blend_equation_rgb', 'BLEND_EQUATION_RGB', gl.BLEND_EQUATION_RGB, gl.FUNC_ADD), + new BlendEquationState('blend_equation_alpha', 'BLEND_EQUATION_ALPHA', gl.BLEND_EQUATION_ALPHA, gl.FUNC_ADD) + ]; + + for (var testNdx = 0; testNdx < blendEquationStates.length; testNdx++) { + testCtx.addChild(new es3fIntegerStateQueryTests.BlendEquationTestCase(blendEquationStates[testNdx].name, blendEquationStates[testNdx].description, blendEquationStates[testNdx].target, blendEquationStates[testNdx].initialValue)); + testCtx.addChild(new es3fIntegerStateQueryTests.BlendEquationSeparateTestCase(blendEquationStates[testNdx].name + '_separate', blendEquationStates[testNdx].description, blendEquationStates[testNdx].target, blendEquationStates[testNdx].initialValue)); + } + + /** + * @struct + * @constructor + * @param {string} name + * @param {string} description + * @param {number} target + * @param {number} minValue + */ + var ImplementationArrayReturningState = function(name, description, target, minValue) { + /** @type {string} */ this.name = name; + /** @type {string} */ this.description = description; + /** @type {number} */ this.target = target; + /** @type {number} */ this.minValue = minValue; + }; + + /** @type {ImplementationArrayReturningState} */ var implementationArrayReturningStates = new ImplementationArrayReturningState('compressed_texture_formats', 'COMPRESSED_TEXTURE_FORMATS', gl.COMPRESSED_TEXTURE_FORMATS, 10); + + testCtx.addChild(new es3fIntegerStateQueryTests.ImplementationArrayTestCase(implementationArrayReturningStates.name, implementationArrayReturningStates.description, implementationArrayReturningStates.target, implementationArrayReturningStates.minValue)); + + /** + * @struct + * @constructor + * @param {string} name + * @param {string} description + * @param {number} target + * @param {number} type + */ + var BufferBindingState = function(name, description, target, type) { + /** @type {string} */ this.name = name; + /** @type {string} */ this.description = description; + /** @type {number} */ this.target = target; + /** @type {number} */ this.type = type; + }; + + /** @type {Array} */ var bufferBindingStates = [ + new BufferBindingState('array_buffer_binding', 'ARRAY_BUFFER_BINDING', gl.ARRAY_BUFFER_BINDING, gl.ARRAY_BUFFER), + new BufferBindingState('uniform_buffer_binding', 'UNIFORM_BUFFER_BINDING', gl.UNIFORM_BUFFER_BINDING, gl.UNIFORM_BUFFER), + new BufferBindingState('pixel_pack_buffer_binding', 'PIXEL_PACK_BUFFER_BINDING', gl.PIXEL_PACK_BUFFER_BINDING, gl.PIXEL_PACK_BUFFER), + new BufferBindingState('pixel_unpack_buffer_binding', 'PIXEL_UNPACK_BUFFER_BINDING', gl.PIXEL_UNPACK_BUFFER_BINDING, gl.PIXEL_UNPACK_BUFFER), + new BufferBindingState('transform_feedback_buffer_binding', 'TRANSFORM_FEEDBACK_BUFFER_BINDING', gl.TRANSFORM_FEEDBACK_BUFFER_BINDING, gl.TRANSFORM_FEEDBACK_BUFFER), + new BufferBindingState('copy_read_buffer_binding', 'COPY_READ_BUFFER_BINDING', gl.COPY_READ_BUFFER_BINDING, gl.COPY_READ_BUFFER), + new BufferBindingState('copy_write_buffer_binding', 'COPY_WRITE_BUFFER_BINDING', gl.COPY_WRITE_BUFFER_BINDING, gl.COPY_WRITE_BUFFER) + ]; + + for (var testNdx = 0; testNdx < bufferBindingStates.length; testNdx++) + testCtx.addChild(new es3fIntegerStateQueryTests.BufferBindingTestCase(bufferBindingStates[testNdx].name, bufferBindingStates[testNdx].description, bufferBindingStates[testNdx].target, bufferBindingStates[testNdx].type)); + + testCtx.addChild(new es3fIntegerStateQueryTests.ElementArrayBufferBindingTestCase('element_array_buffer_binding')); + testCtx.addChild(new es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase('transform_feedback_binding')); + testCtx.addChild(new es3fIntegerStateQueryTests.TransformFeedbackBindingTestCase('transform_feedback_binding')); + testCtx.addChild(new es3fIntegerStateQueryTests.CurrentProgramBindingTestCase('current_program_binding', 'CURRENT_PROGRAM')); + testCtx.addChild(new es3fIntegerStateQueryTests.VertexArrayBindingTestCase('vertex_array_binding', 'VERTEX_ARRAY_BINDING')); + testCtx.addChild(new es3fIntegerStateQueryTests.StencilClearValueTestCase('stencil_clear_value', 'STENCIL_CLEAR_VALUE')); + testCtx.addChild(new es3fIntegerStateQueryTests.ActiveTextureTestCase('active_texture', 'ACTIVE_TEXTURE')); + testCtx.addChild(new es3fIntegerStateQueryTests.RenderbufferBindingTestCase('renderbuffer_binding', 'RENDERBUFFER_BINDING')); + testCtx.addChild(new es3fIntegerStateQueryTests.SamplerObjectBindingTestCase('sampler_binding', 'SAMPLER_BINDING')); + + /** + * @struct + * @constructor + * @param {string} name + * @param {string} description + * @param {number} target + * @param {number} type + */ + var TextureBinding = function(name, description, target, type) { + /** @type {string} */ this.name = name; + /** @type {string} */ this.description = description; + /** @type {number} */ this.target = target; + /** @type {number} */ this.type = type; + }; + + /** @type {Array} */ var textureBindings = [ + new TextureBinding('texture_binding_2d', 'TEXTURE_BINDING_2D', gl.TEXTURE_BINDING_2D, gl.TEXTURE_2D), + new TextureBinding('texture_binding_3d', 'TEXTURE_BINDING_3D', gl.TEXTURE_BINDING_3D, gl.TEXTURE_3D), + new TextureBinding('texture_binding_2d_array', 'TEXTURE_BINDING_2D_ARRAY', gl.TEXTURE_BINDING_2D_ARRAY, gl.TEXTURE_2D_ARRAY), + new TextureBinding('texture_binding_cube_map', 'TEXTURE_BINDING_CUBE_MAP', gl.TEXTURE_BINDING_CUBE_MAP, gl.TEXTURE_CUBE_MAP) + ]; + + for (var testNdx = 0; testNdx < textureBindings.length; testNdx++) + testCtx.addChild(new es3fIntegerStateQueryTests.TextureBindingTestCase(textureBindings[testNdx].name, textureBindings[testNdx].description, textureBindings[testNdx].target, textureBindings[testNdx].type)); + + testCtx.addChild(new es3fIntegerStateQueryTests.FrameBufferBindingTestCase('framebuffer_binding', 'DRAW_FRAMEBUFFER_BINDING and READ_FRAMEBUFFER_BINDING')); + testCtx.addChild(new es3fIntegerStateQueryTests.ImplementationColorReadTestCase('implementation_color_read', 'IMPLEMENTATION_COLOR_READ_TYPE and IMPLEMENTATION_COLOR_READ_FORMAT')); + testCtx.addChild(new es3fIntegerStateQueryTests.ReadBufferCase('read_buffer', 'READ_BUFFER')); + testCtx.addChild(new es3fIntegerStateQueryTests.DrawBufferCase('draw_buffer', 'DRAW_BUFFER')); + + + // Integer64 + /** + * @struct + * @constructor + * @param {string} name + * @param {string} description + * @param {number} targetName + * @param {number} minValue + */ + var LimitedStateInteger64 = function(name, description, targetName, minValue) { + /** @type {string} */ this.name = name; + /** @type {string} */ this.description = description; + /** @type {number} */ this.targetName = targetName; + /** @type {number} */ this.minValue = minValue; + + }; + + /** @type {Array} */ var implementationLimits = [ + new LimitedStateInteger64('max_element_index', 'MAX_ELEMENT_INDEX', gl.MAX_ELEMENT_INDEX, 0x00FFFFFF), + new LimitedStateInteger64('max_server_wait_timeout', 'MAX_SERVER_WAIT_TIMEOUT', gl.MAX_SERVER_WAIT_TIMEOUT, 0), + new LimitedStateInteger64('max_uniform_block_size', 'MAX_UNIFORM_BLOCK_SIZE', gl.MAX_UNIFORM_BLOCK_SIZE, 16384) + ]; + + for (var testNdx = 0; testNdx < implementationLimits.length; testNdx++) + this.addChild(new es3fIntegerStateQueryTests.ConstantMinimumValue64TestCase(implementationLimits[testNdx].name, implementationLimits[testNdx].description, implementationLimits[testNdx].targetName, implementationLimits[testNdx].minValue)); + + this.addChild(new es3fIntegerStateQueryTests.MaxCombinedStageUniformComponentsCase('max_combined_vertex_uniform_components', 'MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS', gl.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS, gl.MAX_VERTEX_UNIFORM_BLOCKS, gl.MAX_VERTEX_UNIFORM_COMPONENTS)); + this.addChild(new es3fIntegerStateQueryTests.MaxCombinedStageUniformComponentsCase('max_combined_fragment_uniform_components', 'MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS', gl.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, gl.MAX_FRAGMENT_UNIFORM_BLOCKS, gl.MAX_FRAGMENT_UNIFORM_COMPONENTS)); + + }; + + /** + * Run test + * @param {WebGL2RenderingContext} context + */ + es3fIntegerStateQueryTests.run = function(context) { + gl = context; + //Set up Test Root parameters + var state = tcuTestCase.runner; + state.setRoot(new es3fIntegerStateQueryTests.IntegerStateQueryTests()); + + //Set up name and description of this test series. + setCurrentTestName(state.testCases.fullName()); + description(state.testCases.getDescription()); + + try { + //Run test cases + tcuTestCase.runTestCases(); + } + catch (err) { + testFailedOptions('Failed to es3fIntegerStateQueryTests.run tests', false); + tcuTestCase.runner.terminate(); + } + }; + +}); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fMultisampleTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fMultisampleTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fMultisampleTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fMultisampleTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -469,12 +469,10 @@ ' o_color = v_color;\n' + '}\n'; - - var numSamples = /** @type {number} */ (gl.getParameter(gl.SAMPLES)); if (!this.m_fboParams.useFbo && numSamples <= 1) { var msg = 'No multisample buffers'; - testSkippedOptions(msg, true); + checkMessage(false, msg); return false; } @@ -483,7 +481,13 @@ this.m_numSamples = this.m_fboParams.numSamples; else { bufferedLogToConsole('Querying maximum number of samples for ' + gluStrUtil.getPixelFormatName(gl.RGBA8) + ' with gl.getInternalformatParameter()'); - this.m_numSamples = /** @type {number} */ (gl.getInternalformatParameter(gl.RENDERBUFFER, gl.RGBA8, gl.SAMPLES).length); + var supportedSampleCountArray = /** @type {Int32Array} */ (gl.getInternalformatParameter(gl.RENDERBUFFER, gl.RGBA8, gl.SAMPLES)); + if (supportedSampleCountArray.length == 0) { + var msg = 'No supported sample counts'; + checkMessage(false, msg); + return false; + } + this.m_numSamples = supportedSampleCountArray[0]; } bufferedLogToConsole('Using FBO of size (' + this.m_renderWidth + ', ' + this.m_renderHeight + ') with ' + this.m_numSamples + ' samples'); @@ -525,9 +529,10 @@ gl.renderbufferStorageMultisample(gl.RENDERBUFFER, this.m_numSamples, gl.RGBA8, this.m_renderWidth, this.m_renderHeight); } catch (e) { - /** @type {Int32Array} */ var maxSampleCount = /** @type {Int32Array} */ (gl.getInternalformatParameter(gl.RENDERBUFFER, gl.RGBA8, gl.SAMPLES)); - if (maxSampleCount.length < this.m_numSamples) - throw new Error('Maximum sample count returned by gl.getInternalformatParameter() for ' + gluStrUtil.getPixelFormatName(gl.RGBA8) + ' is only ' + maxSampleCount.length); + /** @type {Int32Array} */ var supportedSampleCountArray = /** @type {Int32Array} */ (gl.getInternalformatParameter(gl.RENDERBUFFER, gl.RGBA8, gl.SAMPLES)); + var maxSampleCount = supportedSampleCountArray[0]; + if (maxSampleCount < this.m_numSamples) + throw new Error('Maximum sample count returned by gl.getInternalformatParameter() for ' + gluStrUtil.getPixelFormatName(gl.RGBA8) + ' is only ' + maxSampleCount); else throw new Error('Unspecified error.'); } @@ -563,6 +568,7 @@ this.m_viewportSize = Math.min(this.m_desiredViewportSize, this.m_renderWidth, this.m_renderHeight); this.randomizeViewport(); + return true; }; /** @@ -598,7 +604,6 @@ * @return {tcuTestCase.IterateResult} */ es3fMultisampleTests.NumSamplesCase.prototype.iterate = function() { - /** @type {tcuSurface.Surface} */ var renderedImg = new tcuSurface.Surface(this.m_viewportSize, this.m_viewportSize); this.randomizeViewport(); gl.clearColor(0.0, 0.0, 0.0, 1.0); @@ -608,7 +613,7 @@ // Read and log rendered image. - renderedImg = this.readImage(); + /** @type {tcuSurface.Surface} */ var renderedImg = this.readImage(); tcuLogImage.logImage('RenderedImage', 'Rendered image', renderedImg.getAccess()); // Detect new, previously unseen colors from image. @@ -795,7 +800,6 @@ * @return {tcuTestCase.IterateResult} */ es3fMultisampleTests.CommonEdgeCase.prototype.iterate = function() { - /** @type {tcuSurface.Surface} */ var renderedImg = new tcuSurface.Surface(this.m_viewportSize, this.m_viewportSize); /** @type {tcuSurface.Surface} */ var errorImg = new tcuSurface.Surface(this.m_viewportSize, this.m_viewportSize); this.randomizeViewport(); @@ -988,7 +992,7 @@ // Read pixels and check unicolored regions. - renderedImg = this.readImage(); + /** @type {tcuSurface.Surface} */ var renderedImg = this.readImage(); errorImg.getAccess().clear([0.0, 1.0, 0.0, 1.0]); tcuLogImage.logImage('RenderedImage', 'Rendered image', renderedImg.getAccess()); @@ -1116,9 +1120,6 @@ * @return {tcuTestCase.IterateResult} */ es3fMultisampleTests.SampleStencilCase.prototype.iterate = function() { - /** @type {tcuSurface.Surface} */ var renderedImgFirst = new tcuSurface.Surface(this.m_viewportSize, this.m_viewportSize); - /** @type {tcuSurface.Surface} */ var renderedImgSecond = new tcuSurface.Surface(this.m_viewportSize, this.m_viewportSize); - this.randomizeViewport(); gl.clearColor(0.0, 0.0, 0.0, 1.0); @@ -1142,7 +1143,7 @@ [1.0, 1.0, 1.0, 1.0]); } - renderedImgFirst = this.readImage(); + /** @type {tcuSurface.Surface} */ var renderedImgFirst = this.readImage(); tcuLogImage.logImage('RenderedImgFirst', 'First image rendered', renderedImgFirst.getAccess()); bufferedLogToConsole('Clearing color buffer to black'); @@ -1152,8 +1153,7 @@ bufferedLogToConsole('Checking that color buffer was actually cleared to black'); - /** @type {tcuSurface.Surface} */ var clearedImg = new tcuSurface.Surface(this.m_viewportSize, this.m_viewportSize); - clearedImg = this.readImage(); + /** @type {tcuSurface.Surface} */ var clearedImg = this.readImage(); for (var y = 0; y < clearedImg.getHeight(); y++) for (var x = 0; x < clearedImg.getWidth(); x++) { @@ -1175,7 +1175,7 @@ [1.0, 1.0], [1.0, 1.0, 1.0, 1.0]); - renderedImgSecond = this.readImage(); + /** @type {tcuSurface.Surface} */ var renderedImgSecond = this.readImage(); tcuLogImage.logImage('RenderedImgSecond', 'Second image rendered', renderedImgSecond.getAccess()); /** @type {boolean} */ var passed = tcuImageCompare.pixelThresholdCompare( @@ -1265,9 +1265,6 @@ * @return {tcuTestCase.IterateResult} */ es3fMultisampleTests.MaskProportionalityCase.prototype.iterate = function() { - /** @type {tcuSurface.Surface} */ var renderedImg = new tcuSurface.Surface(this.m_viewportSize, this.m_viewportSize); - /** @type {number} */ var numPixels = renderedImg.getWidth() * renderedImg.getHeight(); - bufferedLogToConsole('Clearing color to black'); gl.colorMask(true, true, true, true); gl.clearColor(0.0, 0.0, 0.0, 1.0); @@ -1305,9 +1302,9 @@ this.renderQuad_WithColor(pt0, pt1, pt2, pt3, quadColor); - // Read ang log image. - - renderedImg = this.readImage(); + // Read and log image. + /** @type {tcuSurface.Surface} */ var renderedImg = this.readImage(); + /** @type {number} */ var numPixels = renderedImg.getWidth() * renderedImg.getHeight(); tcuLogImage.logImage('RenderedImage', 'Rendered image', renderedImg.getAccess()); // Compute average red component in rendered image. @@ -1411,8 +1408,6 @@ * @return {tcuTestCase.IterateResult} */ es3fMultisampleTests.MaskConstancyCase.prototype.iterate = function() { - /** @type {tcuSurface.Surface} */ var renderedImg = new tcuSurface.Surface(this.m_viewportSize, this.m_viewportSize); - this.randomizeViewport(); bufferedLogToConsole('Clearing color to black'); @@ -1465,7 +1460,7 @@ } } - renderedImg = this.readImage(); + /** @type {tcuSurface.Surface} */ var renderedImg = this.readImage(); tcuLogImage.logImage('RenderedImage', 'Rendered image', renderedImg.getAccess()); for (var y = 0; y < renderedImg.getHeight(); y++) @@ -1541,9 +1536,6 @@ * @return {tcuTestCase.IterateResult} */ es3fMultisampleTests.CoverageMaskInvertCase.prototype.iterate = function() { - /** @type {tcuSurface.Surface} */ var renderedImgNoSampleCoverage = new tcuSurface.Surface(this.m_viewportSize, this.m_viewportSize); - /** @type {tcuSurface.Surface} */ var renderedImgSampleCoverage = new tcuSurface.Surface(this.m_viewportSize, this.m_viewportSize); - this.randomizeViewport(); gl.enable(gl.BLEND); @@ -1556,7 +1548,7 @@ gl.clear(gl.COLOR_BUFFER_BIT); bufferedLogToConsole('Drawing the pattern with gl.SAMPLE_COVERAGE disabled'); this.drawPattern(false); - renderedImgNoSampleCoverage = this.readImage(); + /** @type {tcuSurface.Surface} */ var renderedImgNoSampleCoverage = this.readImage(); tcuLogImage.logImage('RenderedImageNoSampleCoverage', 'Rendered image with gl.SAMPLE_COVERAGE disabled', renderedImgNoSampleCoverage.getAccess()); bufferedLogToConsole('Clearing color to all-zeros'); @@ -1566,7 +1558,7 @@ this.drawPattern(false); bufferedLogToConsole('Drawing the pattern with gl.SAMPLE_COVERAGE enabled, using same sample coverage values but inverted masks'); this.drawPattern(true); - renderedImgSampleCoverage = this.readImage(); + /** @type {tcuSurface.Surface} */ var renderedImgSampleCoverage = this.readImage(); tcuLogImage.logImage('RenderedImageSampleCoverage', 'Rendered image with gl.SAMPLE_COVERAGE enabled', renderedImgSampleCoverage.getAccess()); /** @type {boolean} */ var passed = tcuImageCompare.pixelThresholdCompare( diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeBufferApiTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeBufferApiTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeBufferApiTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeBufferApiTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -92,9 +92,10 @@ gl.bufferSubData(gl.ARRAY_BUFFER, 15, data); this.expectError(gl.INVALID_VALUE); - bufferedLogToConsole('gl.INVALID_VALUE is generated if data is null.'); - gl.bufferSubData(gl.ARRAY_BUFFER, 0, null); - this.expectError(gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if data is null.'); + this.expectThrowNoError(function() { + gl.bufferSubData(gl.ARRAY_BUFFER, 0, null); + }); gl.deleteBuffer(buffer); } @@ -1095,7 +1096,6 @@ es3fNegativeBufferApiTests.init(gl); tcuTestCase.runner.runCallback(tcuTestCase.runTestCases); } catch (err) { - console.log(err); bufferedLogToConsole(err); tcuTestCase.runner.terminate(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeFragmentApiTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeFragmentApiTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeFragmentApiTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeFragmentApiTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -213,13 +213,12 @@ gl.endQuery(gl.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN); this.expectError(gl.NO_ERROR); - bufferedLogToConsole('gl.INVALID_OPERATION is generated if id is 0.'); - gl.beginQuery(gl.ANY_SAMPLES_PASSED, null); - this.expectError(gl.INVALID_OPERATION); + bufferedLogToConsole('An exception is thrown if the name is null.'); + this.expectThrowNoError(function() { + gl.beginQuery(gl.ANY_SAMPLES_PASSED, null); + }); - bufferedLogToConsole('gl.INVALID_OPERATION is generated if id not a name returned from a previous call to glGenQueries, or if such a name has since been deleted with gl.deleteQuery.'); - gl.beginQuery(gl.ANY_SAMPLES_PASSED, null); - this.expectError(gl.INVALID_OPERATION); + bufferedLogToConsole('gl.INVALID_OPERATION is generated if the name has since been deleted with gl.deleteQuery.'); gl.deleteQuery(ids[2]); this.expectError(gl.NO_ERROR); gl.beginQuery(gl.ANY_SAMPLES_PASSED, ids[2]); @@ -281,9 +280,10 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('wait_sync', 'Invalid gl.waitSync() usage', gl, function() { /** @type{WebGLSync} */ var sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0); - bufferedLogToConsole('gl.INVALID_VALUE is generated if sync is not the name of a sync object.'); - gl.waitSync(null, 0, gl.TIMEOUT_IGNORED); - this.expectError(gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if sync is null.'); + this.expectThrowNoError(function() { + gl.waitSync(null, 0, gl.TIMEOUT_IGNORED); + }); bufferedLogToConsole('gl.INVALID_VALUE is generated if flags is not zero.'); gl.waitSync(sync, 0x0010, gl.TIMEOUT_IGNORED); @@ -299,12 +299,13 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('client_wait_sync', 'Invalid gl.clientWaitSync() usage', gl, function() { /** @type{WebGLSync} */ var sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0); - bufferedLogToConsole('gl.INVALID_VALUE is generated if sync is not the name of an existing sync object.'); - gl.clientWaitSync (null, 0, 10000); - this.expectError(gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if sync is null.'); + this.expectThrowNoError(function() { + gl.clientWaitSync (null, 0, 0); + }); bufferedLogToConsole('gl.INVALID_VALUE is generated if flags contains any unsupported flag.'); - gl.clientWaitSync(sync, 0x00000004, 10000); + gl.clientWaitSync(sync, 0x00000004, 0); this.expectError(gl.INVALID_VALUE); gl.deleteSync(sync); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeShaderApiTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeShaderApiTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeShaderApiTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeShaderApiTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -385,9 +385,10 @@ gl.uniformBlockBinding(program.getProgram(), maxUniformBufferBindings, 0); this.expectError(gl.INVALID_VALUE); - bufferedLogToConsole('gl.INVALID_VALUE is generated if program is not the name of a program object generated by the GL.'); - gl.uniformBlockBinding(null, 0, 0); - this.expectError(gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if program is null.'); + this.expectThrowNoError(function() { + gl.uniformBlockBinding(null, 0, 0); + }); } )); @@ -1119,9 +1120,10 @@ gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, tfID); this.expectError(gl.NO_ERROR); - bufferedLogToConsole('gl.INVALID_VALUE is generated if program is not the name of a program object.'); - name = gl.getTransformFeedbackVarying(null, 0); - this.expectError(gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if program is null.'); + this.expectThrowNoError(function() { + gl.getTransformFeedbackVarying(null, 0); + }); bufferedLogToConsole('gl.INVALID_VALUE is generated if index is greater or equal to the value of gl.TRANSFORM_FEEDBACK_VARYINGS.'); maxTransformFeedbackVaryings = /** @type {number} */ (gl.getProgramParameter(program.getProgram(), gl.TRANSFORM_FEEDBACK_VARYINGS)); @@ -1147,9 +1149,10 @@ tfID = gl.createTransformFeedback(); this.expectError(gl.NO_ERROR); - bufferedLogToConsole('gl.INVALID_VALUE is generated if program is not the name of a program object.'); - gl.transformFeedbackVaryings(null, tfVarying, gl.INTERLEAVED_ATTRIBS); - this.expectError(gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if program is null.'); + this.expectThrowNoError(function() { + gl.transformFeedbackVaryings(null, tfVarying, gl.INTERLEAVED_ATTRIBS); + }); bufferedLogToConsole('gl.INVALID_VALUE is generated if bufferMode is gl.SEPARATE_ATTRIBS and count is greater than gl.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS.'); maxTransformFeedbackSeparateAttribs = /** @type {number} */ (gl.getParameter(gl.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS)); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeStateApiTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeStateApiTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeStateApiTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeStateApiTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -112,13 +112,13 @@ // Enumerated state queries: Shaders testGroup.addChild(new es3fApiCase.ApiCaseCallback('get_attached_shaders', 'Invalid gl.getAttachedShaders() usage', gl, function() { - /** @type{Array} */ var shaders = []; /** @type{WebGLShader} */ var shaderObject = gl.createShader(gl.VERTEX_SHADER); /** @type{WebGLProgram} */ var program = gl.createProgram(); - bufferedLogToConsole('gl.INVALID_VALUE is generated if program is not a value generated by OpenGL.'); - shaders = gl.getAttachedShaders(null); - this.expectError(gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if program is null.'); + this.expectThrowNoError(function() { + gl.getAttachedShaders(null); + }); gl.deleteShader(shaderObject); gl.deleteProgram(program); @@ -133,9 +133,10 @@ param = /** @type{number} */ (gl.getShaderParameter(shader, -1)); this.expectError(gl.INVALID_ENUM); - bufferedLogToConsole('gl.INVALID_VALUE is generated if shader is not a value generated by OpenGL.'); - param = /** @type{number} */ (gl.getShaderParameter(null, gl.SHADER_TYPE)); - this.expectError(gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if shader is null.'); + this.expectThrowNoError(function() { + gl.getShaderParameter(null, gl.SHADER_TYPE); + }); gl.deleteShader(shader); gl.deleteProgram(program); @@ -144,11 +145,11 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('get_shader_info_log', 'Invalid gl.getShaderInfoLog() usage', gl, function() { /** @type{WebGLShader} */ var shader = gl.createShader(gl.VERTEX_SHADER); /** @type{WebGLProgram} */ var program = gl.createProgram(); - /** @type{string} */ var infoLog; - bufferedLogToConsole('gl.INVALID_VALUE is generated if shader is not a value generated by OpenGL.'); - infoLog = gl.getShaderInfoLog(null); - this.expectError(gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if shader is null.'); + this.expectThrowNoError(function() { + gl.getShaderInfoLog(null); + }); gl.deleteShader(shader); gl.deleteProgram(program); @@ -168,13 +169,13 @@ })); testGroup.addChild(new es3fApiCase.ApiCaseCallback('get_shader_source', 'Invalid gl.getShaderSource() usage', gl, function() { - /** @type{string} */ var source; /** @type{WebGLProgram} */ var program = gl.createProgram(); /** @type{WebGLShader} */ var shader = gl.createShader(gl.VERTEX_SHADER); - bufferedLogToConsole('gl.INVALID_VALUE is generated if shader is not a value generated by OpenGL.'); - source = gl.getShaderSource(null); - this.expectError(gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if shader is null.'); + this.expectThrowNoError(function() { + gl.getShaderSource(null); + }); gl.deleteProgram(program); gl.deleteShader(shader); @@ -191,9 +192,10 @@ params = /** @type{boolean} */ (gl.getProgramParameter(program, -1)); this.expectError(gl.INVALID_ENUM); - bufferedLogToConsole('gl.INVALID_VALUE is generated if program is not a value generated by OpenGL.'); - params = /** @type{boolean} */ (gl.getProgramParameter(null, gl.LINK_STATUS)); - this.expectError(gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if program is null.'); + this.expectThrowNoError(function() { + gl.getProgramParameter(null, gl.LINK_STATUS); + }); gl.deleteProgram(program); gl.deleteShader(shader); @@ -202,11 +204,11 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('get_program_info_log', 'Invalid gl.getProgramInfoLog() usage', gl, function() { /** @type{WebGLProgram} */ var program = gl.createProgram(); /** @type{WebGLShader} */ var shader = gl.createShader(gl.VERTEX_SHADER); - /** @type{string} */ var infoLog; - bufferedLogToConsole('gl.INVALID_VALUE is generated if program is not a value generated by OpenGL.'); - infoLog = gl.getProgramInfoLog (null); - this.expectError(gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if program is null.'); + this.expectThrowNoError(function() { + gl.getProgramInfoLog (null); + }); gl.deleteProgram(program); gl.deleteShader(shader); @@ -215,8 +217,8 @@ // Enumerated state queries: Shader variables testGroup.addChild(new es3fApiCase.ApiCaseCallback('get_tex_parameter', 'Invalid gl.getTexParameter() usage', gl, function() { - /** @type{WebGLTexture} */ var texture = gl.createTexture(); - gl.bindTexture(gl.TEXTURE_2D, texture); + /** @type{WebGLTexture} */ var texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); bufferedLogToConsole('gl.INVALID_ENUM is generated if target or pname is not an accepted value.'); gl.getTexParameter (-1, gl.TEXTURE_MAG_FILTER); @@ -226,7 +228,7 @@ gl.getTexParameter (-1, -1); this.expectError(gl.INVALID_ENUM); - gl.deleteTexture(texture); + gl.deleteTexture(texture); })); @@ -241,17 +243,19 @@ /** @type{WebGLProgram} */ var programEmpty = gl.createProgram(); /** @type{*} */ var params; - bufferedLogToConsole('gl.INVALID_VALUE is generated if program is not a value generated by OpenGL.'); - params = gl.getUniform (null, unif); - this.expectError(gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if program is null.'); + this.expectThrowNoError(function() { + gl.getUniform (null, unif); + }); bufferedLogToConsole('gl.INVALID_OPERATION is generated if program has not been successfully linked.'); params = gl.getUniform (programEmpty, unif); this.expectError(gl.INVALID_OPERATION); - bufferedLogToConsole('gl.INVALID_OPERATION is generated if location does not correspond to a valid uniform variable location for the specified program object.'); - params = gl.getUniform (program.getProgram(), null); - this.expectError(gl.INVALID_OPERATION); + bufferedLogToConsole('An exception is thrown if location is null.'); + this.expectThrowNoError(function() { + gl.getUniform (program.getProgram(), null); + }); gl.deleteShader(shader); gl.deleteProgram(programEmpty); @@ -265,9 +269,10 @@ numActiveUniforms = /** @type{number} */ (gl.getProgramParameter(program.getProgram(), gl.ACTIVE_UNIFORMS)); bufferedLogToConsole('// gl.ACTIVE_UNIFORMS = ' + numActiveUniforms + ' (expected 4).'); - bufferedLogToConsole('gl.INVALID_VALUE is generated if program is not a value generated by OpenGL.'); - gl.getActiveUniform(null, 0); - this.expectError(gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if program is null.'); + this.expectThrowNoError(function() { + gl.getActiveUniform(null, 0); + }); bufferedLogToConsole('gl.INVALID_VALUE is generated if index is greater than or equal to the number of active uniform variables in program.'); gl.useProgram(program.getProgram()); @@ -290,9 +295,10 @@ numActiveUniforms = /** @type{number} */ (gl.getProgramParameter(program.getProgram(), gl.ACTIVE_UNIFORMS)); bufferedLogToConsole('// gl.ACTIVE_UNIFORMS = ' + numActiveUniforms + ' (expected 4).'); - bufferedLogToConsole('gl.INVALID_VALUE is generated if program is not a value generated by OpenGL.'); - dummyParamDst = gl.getActiveUniforms(null, dummyUniformIndex, gl.UNIFORM_TYPE); - this.expectError(gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if program is null.'); + this.expectThrowNoError(function() { + gl.getActiveUniforms(null, dummyUniformIndex, gl.UNIFORM_TYPE); + }); bufferedLogToConsole('gl.INVALID_VALUE is generated if any value in uniformIndices is greater than or equal to the value of gl.ACTIVE_UNIFORMS for program.'); /** @type{Array} */ var invalidUniformIndices; @@ -367,9 +373,10 @@ gl.useProgram(program.getProgram()); - bufferedLogToConsole('gl.INVALID_VALUE is generated if program is not a value generated by OpenGL.'); - activeInfo = gl.getActiveAttrib(null, 0); - this.expectError(gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if program is null.'); + this.expectThrowNoError(function() { + gl.getActiveAttrib(null, 0); + }); bufferedLogToConsole('gl.INVALID_VALUE is generated if index is greater than or equal to gl.ACTIVE_ATTRIBUTES.'); activeInfo = gl.getActiveAttrib(program.getProgram(), numActiveAttributes); @@ -391,9 +398,10 @@ bufferedLogToConsole('// gl.ACTIVE_UNIFORM_BLOCKS = ' + numActiveBlocks); this.expectError (gl.NO_ERROR); - bufferedLogToConsole('gl.INVALID_VALUE is generated if program is not name of program or shader object.'); - uniformIndices = gl.getUniformIndices(null, uniformName); - this.expectError(gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if program is null.'); + this.expectThrowNoError(function() { + gl.getUniformIndices(null, uniformName); + }); gl.useProgram(null); gl.deleteShader(shader); @@ -535,12 +543,12 @@ })); testGroup.addChild(new es3fApiCase.ApiCaseCallback('get_internalformat_parameter', 'Invalid gl.getInternalformatParameter() usage', gl, function() { - /** @type{WebGLRenderbuffer} */ var rbo = gl.createRenderbuffer(); - /** @type{WebGLFramebuffer} */ var fbo = gl.createFramebuffer(); - /** @type{WebGLTexture} */ var tex = gl.createTexture(); - gl.bindRenderbuffer(gl.RENDERBUFFER, rbo); - gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); - gl.bindTexture(gl.TEXTURE_2D, tex); + /** @type{WebGLRenderbuffer} */ var rbo = gl.createRenderbuffer(); + /** @type{WebGLFramebuffer} */ var fbo = gl.createFramebuffer(); + /** @type{WebGLTexture} */ var tex = gl.createTexture(); + gl.bindRenderbuffer(gl.RENDERBUFFER, rbo); + gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); + gl.bindTexture(gl.TEXTURE_2D, tex); bufferedLogToConsole('gl.INVALID_ENUM is generated if pname is not gl.SAMPLES or gl.NUM_SAMPLE_COUNTS.'); gl.getInternalformatParameter (gl.RENDERBUFFER, gl.RGBA8, -1); @@ -560,9 +568,9 @@ gl.getInternalformatParameter (gl.TEXTURE_2D, gl.RGBA8, gl.NUM_SAMPLE_COUNTS); this.expectError (gl.INVALID_ENUM); - gl.deleteRenderbuffer(rbo); - gl.deleteFramebuffer(fbo); - gl.deleteTexture(tex); + gl.deleteRenderbuffer(rbo); + gl.deleteFramebuffer(fbo); + gl.deleteTexture(tex); })); @@ -586,9 +594,11 @@ /** @type{WebGLQuery} */ var id; id = gl.createQuery(); - bufferedLogToConsole('gl.INVALID_OPERATION is generated if id is not the name of a query object.'); - gl.getQueryParameter (null, gl.QUERY_RESULT_AVAILABLE); - this.expectError (gl.INVALID_OPERATION); + bufferedLogToConsole('An exception is thrown if the query object is null.'); + this.expectThrowNoError(function() { + gl.getQueryParameter (null, gl.QUERY_RESULT_AVAILABLE); + }); + bufferedLogToConsole('// Note: ' + id + ' is not a query object yet, since it hasn\'t been used by gl.beginQuery'); gl.getQueryParameter (id, gl.QUERY_RESULT_AVAILABLE); this.expectError (gl.INVALID_OPERATION); @@ -616,9 +626,10 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('get_sync_parameter', 'Invalid gl.getSyncParameter() usage', gl, function() { /** @type{WebGLSync} */ var sync; - bufferedLogToConsole('gl.INVALID_VALUE is generated if sync is not the name of a sync object.'); - gl.getSyncParameter (null, gl.OBJECT_TYPE); - this.expectError (gl.INVALID_VALUE); + bufferedLogToConsole('An exception is thrown if sync is null.'); + this.expectThrowNoError(function() { + gl.getSyncParameter (null, gl.OBJECT_TYPE); + }); bufferedLogToConsole('gl.INVALID_ENUM is generated if pname is not one of the accepted tokens.'); sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeTextureApiTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeTextureApiTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeTextureApiTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fNegativeTextureApiTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -27,6 +27,7 @@ goog.require('framework.common.tcuTexture'); goog.require('functional.gles3.es3fApiCase'); goog.require('framework.opengl.gluTexture'); +goog.require('framework.opengl.gluTextureUtil'); goog.scope(function() { @@ -35,6 +36,12 @@ var es3fApiCase = functional.gles3.es3fApiCase; var tcuTestCase = framework.common.tcuTestCase; var gluTexture = framework.opengl.gluTexture; + var gluTextureUtil = framework.opengl.gluTextureUtil; + + function etc2Unsupported() { + debug("Skipping test: no support for WEBGL_compressed_texture_etc"); + } + /** * @param {number} width @@ -70,6 +77,8 @@ */ es3fNegativeTextureApiTests.init = function(gl) { + var haveCompressedTextureETC = gluTextureUtil.enableCompressedTextureETC(); + var testGroup = tcuTestCase.runner.testCases; testGroup.addChild(new es3fApiCase.ApiCaseCallback('activetexture', 'Invalid gl.ActiveTexture() usage', gl, @@ -125,6 +134,7 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedteximage2d_invalid_target', 'Invalid gl.compressedTexImage2D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } /** @type {Array} */ var texture = []; texture[0] = gl.createTexture(); @@ -187,6 +197,7 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedteximage2d_neg_level', 'Invalid gl.compressedTexImage2D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } /** @type {Array} */ var texture = []; @@ -222,6 +233,7 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedteximage2d_max_level', 'Invalid gl.compressedTexImage2D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } /** @type {Array} */ var texture = []; @@ -263,6 +275,7 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedteximage2d_neg_width_height', 'Invalid gl.compressedTexImage2D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } /** @type {Array} */ var texture = []; @@ -340,6 +353,7 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedteximage2d_max_width_height', 'Invalid gl.compressedTexImage2D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } /** @type {Array} */ var texture = []; @@ -418,6 +432,7 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedteximage2d_invalid_border', 'Invalid gl.compressedTexImage2D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } /** @type {Array} */ var texture = []; @@ -482,6 +497,7 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedteximage2d_invalid_size', 'Invalid gl.compressedTexImage2D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } /** @type {WebGLTexture} */ var texture; @@ -973,14 +989,14 @@ bufferedLogToConsole('gl.INVALID_VALUE is generated if level is greater than log_2(gl.MAX_TEXTURE_SIZE) for 2D texture targets.'); /** @type{number} */ var log2MaxTextureSize = Math.floor(Math.log2(/** @type{number} */(gl.getParameter(gl.MAX_TEXTURE_SIZE)))) + 1; gl.copyTexSubImage2D(gl.TEXTURE_2D, log2MaxTextureSize, 0, 0, 0, 0, 4, 4); - this.expectError(gl.INVALID_VALUE); + this.expectError([gl.INVALID_VALUE, gl.INVALID_OPERATION]); bufferedLogToConsole('gl.INVALID_VALUE is generated if level is greater than log_2(gl.MAX_CUBE_MAP_SIZE) for cubemap targets.'); /** @type{number} */ var log2MaxCubemapSize = Math.floor(Math.log2(/** @type{number} */(gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE)))) + 1; var local = this; es3fNegativeTextureApiTests.forCubeFaces(function(faceGL) { gl.copyTexSubImage2D(faceGL, log2MaxCubemapSize, 0, 0, 0, 0, 4, 4); - local.expectError(gl.INVALID_VALUE); + local.expectError([gl.INVALID_VALUE, gl.INVALID_OPERATION]); }); gl.deleteTexture(texture[0]); @@ -1108,6 +1124,8 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('generatemipmap', 'Invalid gl.generateMipmap() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + /** @type{Array} */ var texture = []; /** @type{WebGLFramebuffer} */ var fbo; texture[0] = gl.createTexture(); @@ -1608,14 +1626,14 @@ bufferedLogToConsole('gl.INVALID_VALUE is generated if level is greater than log_2(gl.MAX_TEXTURE_SIZE).'); /** @type{number} */ var log2MaxTextureSize = Math.floor(Math.log2(/** @type{number} */(gl.getParameter(gl.MAX_TEXTURE_SIZE)))) + 1; gl.texSubImage2D(gl.TEXTURE_2D, log2MaxTextureSize, 0, 0, 0, 0, gl.RGB, gl.UNSIGNED_BYTE, uint8); - this.expectError(gl.INVALID_VALUE); + this.expectError([gl.INVALID_VALUE, gl.INVALID_OPERATION]); bufferedLogToConsole('gl.INVALID_VALUE is generated if level is greater than log_2(gl.MAX_CUBE_MAP_TEXTURE_SIZE).'); /** @type{number} */ var log2MaxCubemapSize = Math.floor(Math.log2(/** @type{number} */(gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE)))) + 1; var local = this; es3fNegativeTextureApiTests.forCubeFaces(function(faceGL) { gl.texSubImage2D(faceGL, log2MaxCubemapSize, 0, 0, 0, 0, gl.RGB, gl.UNSIGNED_BYTE, uint8); - local.expectError(gl.INVALID_VALUE); + local.expectError([gl.INVALID_VALUE, gl.INVALID_OPERATION]); }); gl.deleteTexture(texture[0]); @@ -1780,6 +1798,8 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedtexsubimage2d', 'Invalid gl.compressedTexSubImage2D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + /** @type{WebGLTexture} */ var texture; texture = gl.createTexture(); gl.bindTexture (gl.TEXTURE_2D, texture); @@ -1816,6 +1836,8 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedtexsubimage2d_neg_level', 'Invalid gl.compressedTexSubImage2D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + /** @type{Array} */ var texture = []; texture[0] = gl.createTexture(); texture[1] = gl.createTexture(); @@ -1845,6 +1867,8 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedtexsubimage2d_max_level', 'Invalid gl.compressedTexSubImage2D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + /** @type{Array} */ var texture = []; texture[0] = gl.createTexture(); texture[1] = gl.createTexture(); @@ -1860,14 +1884,14 @@ bufferedLogToConsole('gl.INVALID_VALUE is generated if level is greater than log_2(gl.MAX_TEXTURE_SIZE).'); /** @type{number} */ var log2MaxTextureSize = Math.floor(Math.log2(/** @type{number} */(gl.getParameter(gl.MAX_TEXTURE_SIZE)))) + 1; gl.compressedTexSubImage2D(gl.TEXTURE_2D, log2MaxTextureSize, 0, 0, 0, 0, gl.COMPRESSED_RGBA8_ETC2_EAC, new Uint8Array(0)); - this.expectError(gl.INVALID_VALUE); + this.expectError([gl.INVALID_VALUE, gl.INVALID_OPERATION]); bufferedLogToConsole('gl.INVALID_VALUE is generated if level is greater than log_2(gl.MAX_CUBE_MAP_TEXTURE_SIZE).'); /** @type{number} */ var log2MaxCubemapSize = Math.floor(Math.log2(/** @type{number} */(gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE)))) + 1; var local = this; es3fNegativeTextureApiTests.forCubeFaces(function(faceGL) { gl.compressedTexSubImage2D(faceGL, log2MaxCubemapSize, 0, 0, 0, 0, gl.COMPRESSED_RGBA8_ETC2_EAC, new Uint8Array(0)); - local.expectError(gl.INVALID_VALUE); + local.expectError([gl.INVALID_VALUE, gl.INVALID_OPERATION]); }); gl.deleteTexture(texture[0]); @@ -1876,6 +1900,8 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedtexsubimage2d_neg_offset', 'Invalid gl.compressedTexSubImage2D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + /** @type{ WebGLTexture} */ var texture; texture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, texture); @@ -1898,6 +1924,8 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedtexsubimage2d_invalid_offset', 'Invalid gl.compressedTexSubImage2D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + /** @type{WebGLTexture} */ var texture; texture = gl.createTexture(); gl.bindTexture (gl.TEXTURE_2D, texture); @@ -1918,6 +1946,8 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedtexsubimage2d_neg_width_height', 'Invalid gl.compressedTexSubImage2D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + /** @type{WebGLTexture} */ var texture; texture = gl.createTexture(); gl.bindTexture (gl.TEXTURE_2D, texture); @@ -1937,6 +1967,8 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedtexsubimage2d_invalid_size', 'Invalid gl.compressedTexImage2D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + /** @type{WebGLTexture} */ var texture; texture = gl.createTexture(); gl.bindTexture (gl.TEXTURE_2D, texture); @@ -2216,11 +2248,11 @@ /** @type {ArrayBufferView} */ var uint8 = new Uint8Array(4); bufferedLogToConsole('gl.INVALID_VALUE is generated if level is greater than log_2(gl.MAX_3D_TEXTURE_SIZE).'); gl.texSubImage3D(gl.TEXTURE_3D, log2Max3DTextureSize, 0, 0, 0, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, uint8); - this.expectError(gl.INVALID_VALUE); + this.expectError([gl.INVALID_VALUE, gl.INVALID_OPERATION]); bufferedLogToConsole('gl.INVALID_VALUE is generated if level is greater than log_2(gl.MAX_TEXTURE_SIZE).'); gl.texSubImage3D(gl.TEXTURE_2D_ARRAY, log2MaxTextureSize, 0, 0, 0, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, uint8); - this.expectError(gl.INVALID_VALUE); + this.expectError([gl.INVALID_VALUE, gl.INVALID_OPERATION]); gl.deleteTexture(texture[0]); gl.deleteTexture(texture[1]); @@ -2356,11 +2388,11 @@ bufferedLogToConsole('gl.INVALID_VALUE is generated if level is greater than log_2(gl.MAX_3D_TEXTURE_SIZE).'); gl.copyTexSubImage3D(gl.TEXTURE_3D, log2Max3DTextureSize, 0, 0, 0, 0, 0, 4, 0); - this.expectError(gl.INVALID_VALUE); + this.expectError([gl.INVALID_VALUE, gl.INVALID_OPERATION]); bufferedLogToConsole('gl.INVALID_VALUE is generated if level is greater than log_2(gl.MAX_TEXTURE_SIZE).'); gl.copyTexSubImage3D(gl.TEXTURE_2D_ARRAY, log2MaxTextureSize, 0, 0, 0, 0, 0, 4, 0); - this.expectError(gl.INVALID_VALUE); + this.expectError([gl.INVALID_VALUE, gl.INVALID_OPERATION]); gl.deleteTexture(texture[0]); gl.deleteTexture(texture[1]); @@ -2459,6 +2491,7 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedteximage3d', 'Invalid gl.compressedTexImage3D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } /** @type{Array} */ var texture = []; @@ -2486,6 +2519,8 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedteximage3d_neg_level', 'Invalid gl.compressedTexImage3D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + /** @type{ WebGLTexture} */ var texture; texture = gl.createTexture(); gl.bindTexture (gl.TEXTURE_2D_ARRAY, texture); @@ -2499,6 +2534,8 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedteximage3d_max_level', 'Invalid gl.compressedTexImage3D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + /** @type{ WebGLTexture} */ var texture; texture = gl.createTexture(); gl.bindTexture (gl.TEXTURE_2D_ARRAY, texture); @@ -2506,7 +2543,7 @@ bufferedLogToConsole('gl.INVALID_VALUE is generated if level is greater than log_2(gl.MAX_TEXTURE_SIZE).'); /** @type{number} */ var log2MaxTextureSize = Math.floor(Math.log2(/** @type{number} */(gl.getParameter(gl.MAX_TEXTURE_SIZE)))) + 1; gl.compressedTexImage3D(gl.TEXTURE_2D_ARRAY, log2MaxTextureSize, gl.COMPRESSED_RGBA8_ETC2_EAC, 0, 0, 0, 0, new Uint8Array(0)); - this.expectError(gl.INVALID_VALUE); + this.expectError([gl.INVALID_VALUE, gl.INVALID_OPERATION]); gl.deleteTexture(texture); @@ -2514,6 +2551,8 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedteximage3d_neg_width_height_depth', 'Invalid gl.compressedTexImage3D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + /** @type{ WebGLTexture} */ var texture; texture = gl.createTexture(); gl.bindTexture (gl.TEXTURE_2D_ARRAY, texture); @@ -2534,6 +2573,7 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedteximage3d_max_width_height_depth', 'Invalid gl.compressedTexImage3D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } /** @type{ WebGLTexture} */ var texture; texture = gl.createTexture(); @@ -2557,6 +2597,7 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedteximage3d_invalid_border', 'Invalid gl.compressedTexImage3D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } /** @type{ WebGLTexture} */ var texture; texture = gl.createTexture(); @@ -2574,6 +2615,7 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedteximage3d_invalid_size', 'Invalid gl.compressedTexImage3D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } /** @type{ WebGLTexture} */ var texture; texture = gl.createTexture(); @@ -2597,6 +2639,8 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedtexsubimage3d', 'Invalid gl.compressedTexSubImage3D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + bufferedLogToConsole('gl.INVALID_ENUM is generated if target is invalid.'); /** @type{WebGLTexture} */ var texture; texture = gl.createTexture(); @@ -2636,6 +2680,8 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedtexsubimage3d_neg_level', 'Invalid gl.compressedTexSubImage3D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + /** @type{WebGLTexture} */ var texture; texture = gl.createTexture(); gl.bindTexture (gl.TEXTURE_2D_ARRAY, texture); @@ -2651,6 +2697,8 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedtexsubimage3d_max_level', 'Invalid gl.compressedTexSubImage3D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + /** @type{WebGLTexture} */ var texture; texture = gl.createTexture(); gl.bindTexture (gl.TEXTURE_2D_ARRAY, texture); @@ -2660,13 +2708,15 @@ bufferedLogToConsole('gl.INVALID_VALUE is generated if level is greater than log_2(gl.MAX_TEXTURE_SIZE).'); /** @type{number} */ var log2MaxTextureSize = Math.floor(Math.log2(/** @type{number} */(gl.getParameter(gl.MAX_TEXTURE_SIZE)))) + 1; gl.compressedTexSubImage3D(gl.TEXTURE_2D_ARRAY, log2MaxTextureSize, 0, 0, 0, 0, 0, 0, gl.COMPRESSED_RGBA8_ETC2_EAC, new Uint8Array(0)); - this.expectError(gl.INVALID_VALUE); + this.expectError([gl.INVALID_VALUE, gl.INVALID_OPERATION]); gl.deleteTexture(texture); })); testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedtexsubimage3d_neg_offset', 'Invalid gl.compressedTexSubImage3D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + /** @type{WebGLTexture} */ var texture; texture = gl.createTexture(); gl.bindTexture (gl.TEXTURE_2D_ARRAY, texture); @@ -2688,6 +2738,8 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedtexsubimage3d_invalid_offset', 'Invalid gl.compressedTexSubImage3D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + /** @type{WebGLTexture} */ var texture; texture = gl.createTexture(); gl.bindTexture (gl.TEXTURE_2D_ARRAY, texture); @@ -2710,6 +2762,8 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedtexsubimage3d_neg_width_height_depth', 'Invalid gl.compressedTexSubImage3D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + /** @type{WebGLTexture} */ var texture; texture = gl.createTexture(); gl.bindTexture (gl.TEXTURE_2D_ARRAY, texture); @@ -2731,6 +2785,8 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('compressedtexsubimage3d_invalid_size', 'Invalid gl.compressedTexSubImage3D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } + /** @type{WebGLTexture} */ var texture; texture = gl.createTexture(); gl.bindTexture (gl.TEXTURE_2D_ARRAY, texture); @@ -2751,6 +2807,7 @@ testGroup.addChild(new es3fApiCase.ApiCaseCallback('texstorage2d', 'Invalid gl.texStorage2D() usage', gl, function() { + if (!haveCompressedTextureETC) { etc2Unsupported(); return; } /** @type{WebGLTexture} */ var texture; texture = gl.createTexture(); gl.bindTexture (gl.TEXTURE_2D, texture); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fOcclusionQueryTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fOcclusionQueryTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fOcclusionQueryTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fOcclusionQueryTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -486,7 +486,7 @@ * Run test * @param {WebGL2RenderingContext} context */ -es3fOcclusionQueryTests.run = function(context) { +es3fOcclusionQueryTests.run = function(context, range) { gl = context; //Set up Test Root parameters var state = tcuTestCase.runner; @@ -497,6 +497,8 @@ description(state.testCases.getDescription()); try { + if (range) + state.setRange(range); //Run test cases tcuTestCase.runTestCases(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fPixelBufferObjectTest.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fPixelBufferObjectTest.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fPixelBufferObjectTest.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fPixelBufferObjectTest.js 2017-01-16 01:38:20.000000000 +0000 @@ -403,7 +403,7 @@ gl.bufferData(gl.PIXEL_PACK_BUFFER, readReference.getLevel(0).getDataSize(), gl.STREAM_READ); gl.readPixels(0, 0, width, height, readPixelsFormat, readPixelsType, 0); - var bufferData = new ArrayBuffer(readReference.getLevel(0).getDataSize()); + var bufferData = new Uint8Array(readReference.getLevel(0).getDataSize()); gl.getBufferSubData(gl.PIXEL_PACK_BUFFER, 0, bufferData); @@ -411,7 +411,7 @@ width: width, height: height, format: readFormat, - data: bufferData}); + data: bufferData.buffer}); gl.bindBuffer(gl.PIXEL_PACK_BUFFER, null); @@ -425,8 +425,16 @@ var isOk = false; - if (floatCompare) - isOk = tcuImageCompare.floatThresholdCompare('Result comparison', 'Result of read pixels to memory compared with result of read pixels to buffer', readReference.getLevel(0), readResult, [0.0, 0.0, 0.0, 0.0]); + if (floatCompare) { + // The result of rgb10_a2 from Intel GPU would have slight difference with the one from CPU, so some tolerance is added here. + // Detailed discussion in Mesa upstream can be found at https://bugs.freedesktop.org/show_bug.cgi?id=89314. + var threshold; + if (this.m_renderbufferFormat == gl.RGB10_A2) + threshold = [0.004, 0.004, 0.004, 0.0]; + else + threshold = [0.0, 0.0, 0.0, 0.0]; + isOk = tcuImageCompare.floatThresholdCompare('Result comparison', 'Result of read pixels to memory compared with result of read pixels to buffer', readReference.getLevel(0), readResult, threshold); + } else isOk = tcuImageCompare.intThresholdCompare('Result comparison', 'Result of read pixels to memory compared with result of read pixels to buffer', readReference.getLevel(0), readResult, [0, 0, 0, 0]); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fPrimitiveRestartTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fPrimitiveRestartTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fPrimitiveRestartTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fPrimitiveRestartTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -673,7 +673,7 @@ } }; - es3fPrimitiveRestartTests.run = function(context) { + es3fPrimitiveRestartTests.run = function(context, range) { gl = context; //Set up Test Root parameters var testName = 'primitive_restart'; @@ -690,6 +690,8 @@ try { //Create test cases es3fPrimitiveRestartTests.init(); + if (range) + state.setRange(range); //Run test cases tcuTestCase.runTestCases(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fRasterizerDiscardTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fRasterizerDiscardTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fRasterizerDiscardTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fRasterizerDiscardTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -203,7 +203,7 @@ this.m_program = new gluShaderProgram.ShaderProgram(gl, gluShaderProgram.makeVtxFragSources(vertShaderSource, fragShaderSource)); if (!this.m_program.isOk()) { - console.log(this.m_program); + bufferedLogToConsole(this.m_program); testFailedOptions('Failed to compile shader program', true); } }; @@ -220,7 +220,7 @@ var passColorFound = false; var vertices; - console.log('Case iteration ' + (this.m_iterNdx + 1) + ' / ' + NUM_CASE_ITERATIONS); + bufferedLogToConsole('Case iteration ' + (this.m_iterNdx + 1) + ' / ' + NUM_CASE_ITERATIONS); // Create and bind FBO if needed @@ -231,7 +231,7 @@ if (this.m_caseOptions.useScissor) { gl.enable(gl.SCISSOR_TEST); gl.scissor(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); - console.log('Scissor test enabled: glScissor(0, 0, ' + gl.drawingBufferWidth + ', ' + gl.drawingBufferHeight + ')'); + bufferedLogToConsole('Scissor test enabled: glScissor(0, 0, ' + gl.drawingBufferWidth + ', ' + gl.drawingBufferHeight + ')'); } gl.useProgram(this.m_program.getProgram()); @@ -271,7 +271,7 @@ // Enable rasterizer discard gl.enable(gl.RASTERIZER_DISCARD); - console.log('Rasterizer discard enabled'); + bufferedLogToConsole('Rasterizer discard enabled'); // Do to-be-discarded primitive draws and buffer clears @@ -307,7 +307,7 @@ // Disable rasterizer discard gl.disable(gl.RASTERIZER_DISCARD); - console.log('Rasterizer discard disabled'); + bufferedLogToConsole('Rasterizer discard disabled'); if (this.m_caseType == es3fRasterizerDiscardTests.CaseType.WRITE_STENCIL) { if (this.m_caseOptions.useFBO || gl.getContextAttributes().stencil) { @@ -367,7 +367,7 @@ testFailed('Primitive or buffer clear was not discarded.'); return tcuTestCase.IterateResult.STOP; } - console.log('Primitive or buffer clear was discarded correctly.'); + bufferedLogToConsole('Primitive or buffer clear was discarded correctly.'); if (++this.m_iterNdx < NUM_CASE_ITERATIONS) return tcuTestCase.IterateResult.CONTINUE; @@ -477,7 +477,7 @@ tcuTestCase.runTestCases(); } catch (err) { testFailedOptions('Failed to run tests', false); - console.log(err); + bufferedLogToConsole(err); tcuTestCase.runner.terminate(); } }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fShaderBuiltinVarTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fShaderBuiltinVarTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fShaderBuiltinVarTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fShaderBuiltinVarTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -117,7 +117,7 @@ es3fShaderBuiltinVarTests.ShaderBuiltinConstantCase.prototype.deinit = function() { // an attempt to cleanup the GL state when the test fails - console.log('ShaderBuildInConstantCase.deinit()'); + bufferedLogToConsole('ShaderBuildInConstantCase.deinit()'); gl.useProgram(null); gl.bindBuffer(gl.ARRAY_BUFFER, null); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fShaderCommonFunctionTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fShaderCommonFunctionTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fShaderCommonFunctionTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fShaderCommonFunctionTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -618,7 +618,7 @@ /** @type {number} */ var rounded = (q > 0.5) ? (truncated + 1) : // Rounded up (q == 0.5 && (truncated % 2 != 0)) ? (truncated + 1) : // Round to nearest even at 0.5 truncated; // Rounded down - return rounded === 0 && v < 0 ? -0 : rounded; + return rounded; }; /** @@ -689,7 +689,6 @@ es3fShaderCommonFunctionTests.RoundEvenCase.prototype.compare = function(inputs, outputs) { /** @type {gluShaderUtil.DataType} */ var type = this.m_spec.inputs[0].varType.getBasicType(); /** @type {gluShaderUtil.precision} */ var precision = this.m_spec.inputs[0].varType.getPrecision(); - /** @type {boolean} */ var hasSignedZero = es3fShaderCommonFunctionTests.supportsSignedZero(precision); /** @type {number} */ var scalarSize = gluShaderUtil.getDataTypeScalarSize(type); /** @type {number} */ var in0; /** @type {number} */ var out0; @@ -701,9 +700,7 @@ out0 = outputs[0][compNdx]; /** @type {number} */ var ref = es3fShaderCommonFunctionTests.roundEven(in0); - /** @type {number} */ var ulpDiff = hasSignedZero ? - es3fShaderCommonFunctionTests.getUlpDiff(out0, ref) : - es3fShaderCommonFunctionTests.getUlpDiffIgnoreZeroSign(out0, ref); + /** @type {number} */ var ulpDiff = es3fShaderCommonFunctionTests.getUlpDiffIgnoreZeroSign(out0, ref); if (ulpDiff > 0) { this.m_failMsg += 'Expected [' + compNdx + '] = ' + ref + ', got ULP diff ' + ulpDiff; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fShaderDerivateTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fShaderDerivateTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fShaderDerivateTests.js 2017-01-13 01:37:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fShaderDerivateTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -28,6 +28,7 @@ goog.require('framework.opengl.gluShaderProgram'); goog.require('framework.opengl.gluShaderUtil'); goog.require('framework.opengl.gluTexture'); +goog.require('framework.opengl.gluTextureUtil'); goog.require('framework.common.tcuInterval'); goog.require('framework.common.tcuFloat'); goog.require('framework.common.tcuLogImage'); @@ -51,6 +52,7 @@ var gluShaderProgram = framework.opengl.gluShaderProgram; var gluShaderUtil = framework.opengl.gluShaderUtil; var gluTexture = framework.opengl.gluTexture; + var gluTextureUtil = framework.opengl.gluTextureUtil; var tcuInterval = framework.common.tcuInterval; var tcuFloat = framework.common.tcuFloat; var tcuLogImage = framework.common.tcuLogImage; @@ -433,13 +435,18 @@ for (var c = 0; c < numComponents; ++c) { // interpolation value range /** @type {tcuInterval.Interval} */ var forwardComponent = tcuInterval.withIntervals( - new tcuInterval.Interval(es3fShaderDerivateTests.convertFloorFlushToZero(functionValueForward[c], minExponent, numVaryingSampleBits)), - new tcuInterval.Interval(es3fShaderDerivateTests.convertCeilFlushToZero(functionValueForward[c], minExponent, numVaryingSampleBits)) + new tcuInterval.Interval(es3fShaderDerivateTests.convertFloorFlushToZero( + es3fShaderDerivateTests.addErrorUlp(functionValueForward[c], -0.5, numVaryingSampleBits), minExponent, numBits)), + new tcuInterval.Interval(es3fShaderDerivateTests.convertCeilFlushToZero( + es3fShaderDerivateTests.addErrorUlp(functionValueForward[c], +0.5, numVaryingSampleBits), minExponent, numBits)) ); /** @type {tcuInterval.Interval} */ var backwardComponent = tcuInterval.withIntervals( - new tcuInterval.Interval(es3fShaderDerivateTests.convertFloorFlushToZero(functionValueBackward[c], minExponent, numVaryingSampleBits)), - new tcuInterval.Interval(es3fShaderDerivateTests.convertCeilFlushToZero(functionValueBackward[c], minExponent, numVaryingSampleBits))); + new tcuInterval.Interval(es3fShaderDerivateTests.convertFloorFlushToZero( + es3fShaderDerivateTests.addErrorUlp(functionValueBackward[c], -0.5, numVaryingSampleBits), minExponent, numBits)), + new tcuInterval.Interval(es3fShaderDerivateTests.convertCeilFlushToZero( + es3fShaderDerivateTests.addErrorUlp(functionValueBackward[c], +0.5, numVaryingSampleBits), minExponent, numBits)) + ); /** @type {number} */ var maxValueExp = Math.max( @@ -647,7 +654,27 @@ /** @type {Array} */ var indices = [0, 2, 1, 2, 3, 1]; gl.clearColor(0.125, 0.25, 0.5, 1.0); - gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); + // We can't really call clear() on gl.COLOR_BUFFER_BIT here as in c++ deqp. + // The fbo format might be of integer type and WebGL2 requires an INVALID_OPERATION to be generated. + var formatObj = gluTextureUtil.mapGLInternalFormat(fboFormat); + var fmtClass = tcuTexture.getTextureChannelClass(formatObj.type); + switch (fmtClass) { + case tcuTexture.TextureChannelClass.FLOATING_POINT: + case tcuTexture.TextureChannelClass.SIGNED_FIXED_POINT: + case tcuTexture.TextureChannelClass.UNSIGNED_FIXED_POINT: + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); + break; + case tcuTexture.TextureChannelClass.UNSIGNED_INTEGER: + gl.clearBufferuiv(gl.COLOR, 0, new Uint32Array([31, 63, 127, 255])); + gl.clear(gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); + break; + case tcuTexture.TextureChannelClass.SIGNED_INTEGER: + gl.clearBufferiv(gl.COLOR, 0, new Int32Array([31, 63, 127, 255])); + gl.clear(gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); + break; + default: + throw new Error('Invalid channelclass ' + fmtClass); + } gl.disable(gl.DITHER); gl.useProgram(program.getProgram()); @@ -1644,7 +1671,7 @@ * Run test * @param {WebGL2RenderingContext} context */ - es3fShaderDerivateTests.run = function(context) { + es3fShaderDerivateTests.run = function(context, range) { gl = context; //Set up Test Root parameters var state = tcuTestCase.runner; @@ -1655,6 +1682,8 @@ description(state.testCases.getDescription()); try { + if (range) + state.setRange(range); //Run test cases tcuTestCase.runTestCases(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fShaderTextureFunctionTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fShaderTextureFunctionTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fShaderTextureFunctionTests.js 2017-01-13 01:37:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fShaderTextureFunctionTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -1729,7 +1729,7 @@ if (!this.testTextureSize(testSizes[currentIteration - 1])) testFailedOptions('Fail: Case ' + (currentIteration - 1) + ' Got unexpected texture size', false); else - testPassedOptions('Pass', true); + testPassedOptions('Pass', true); return tcuTestCase.IterateResult.CONTINUE; } @@ -2381,7 +2381,8 @@ es3fShaderTextureFunctionTests.getCaseSpec('isampler3d_bias', es3fShaderTextureFunctionTests.TexFunction.TEXTUREPROJ, [0.9, 1.05, -0.08, -0.75], [-1.13, -1.7, -1.7, -0.75], true, -2.0, 2.0, true, [3, -8, 7], tex3DInt, es3fShaderTextureFunctionTests.evalTexture3DProjOffsetBias, es3fShaderTextureFunctionTests.CaseFlags.FRAGMENT), es3fShaderTextureFunctionTests.getCaseSpec('usampler3d_bias', es3fShaderTextureFunctionTests.TexFunction.TEXTUREPROJ, [0.9, 1.05, -0.08, -0.75], [-1.13, -1.7, -1.7, -0.75], true, -2.0, 2.0, true, [-8, 7, 3], tex3DUint, es3fShaderTextureFunctionTests.evalTexture3DProjOffsetBias, es3fShaderTextureFunctionTests.CaseFlags.FRAGMENT), - es3fShaderTextureFunctionTests.getCaseSpec('sampler2dshadow', es3fShaderTextureFunctionTests.TexFunction.TEXTUREPROJ, [0.2, 0.6, 0.0, 1.5], [-2.25, -3.45, 1.5, 1.5], false, 0.0, 0.0, true, [-8, 7, 0], tex2DShadow, es3fShaderTextureFunctionTests.evalTexture2DShadowProjOffset, es3fShaderTextureFunctionTests.CaseFlags.VERTEX), + // NOTE: offset changed from [-8, 7, 0] in native dEQP to [7, -8, 0] per https://github.com/KhronosGroup/WebGL/issues/2033 + es3fShaderTextureFunctionTests.getCaseSpec('sampler2dshadow', es3fShaderTextureFunctionTests.TexFunction.TEXTUREPROJ, [0.2, 0.6, 0.0, 1.5], [-2.25, -3.45, 1.5, 1.5], false, 0.0, 0.0, true, [7, -8, 0], tex2DShadow, es3fShaderTextureFunctionTests.evalTexture2DShadowProjOffset, es3fShaderTextureFunctionTests.CaseFlags.VERTEX), es3fShaderTextureFunctionTests.getCaseSpec('sampler2dshadow', es3fShaderTextureFunctionTests.TexFunction.TEXTUREPROJ, [0.2, 0.6, 0.0, 1.5], [-2.25, -3.45, 1.5, 1.5], false, 0.0, 0.0, true, [7, -8, 0], tex2DMipmapShadow, es3fShaderTextureFunctionTests.evalTexture2DShadowProjOffset, es3fShaderTextureFunctionTests.CaseFlags.FRAGMENT), es3fShaderTextureFunctionTests.getCaseSpec('sampler2dshadow_bias', es3fShaderTextureFunctionTests.TexFunction.TEXTUREPROJ, [0.2, 0.6, 0.0, 1.5], [-2.25, -3.45, 1.5, 1.5], true, -2.0, 2.0, true, [-8, 7, 0], tex2DShadow, es3fShaderTextureFunctionTests.evalTexture2DShadowProjOffsetBias, es3fShaderTextureFunctionTests.CaseFlags.FRAGMENT) ]; @@ -2474,7 +2475,7 @@ es3fShaderTextureFunctionTests.getCaseSpec('sampler2dshadow', es3fShaderTextureFunctionTests.TexFunction.TEXTUREPROJLOD, [0.2, 0.6, 0.0, 1.5], [-2.25, -3.45, 1.5, 1.5], false, -1.0, 9.0, true, [-8, 7, 0], tex2DMipmapShadow, es3fShaderTextureFunctionTests.evalTexture2DShadowProjLodOffset, es3fShaderTextureFunctionTests.CaseFlags.BOTH) ]; - es3fShaderTextureFunctionTests.createCaseGroup(this, 'textureprojlodoffset', 'textureProjLodOffset() Tests', textureProjLodOffsetCases); + es3fShaderTextureFunctionTests.createCaseGroup(this, 'textureprojlodoffset', 'textureProjLodOffset() Tests', textureProjLodOffsetCases); // textureGrad() cases // \note Only one of dudx, dudy, dvdx, dvdy is non-zero since spec allows approximating p from derivates by various methods. diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fSyncTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fSyncTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fSyncTests.js 2017-01-13 01:37:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fSyncTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -295,8 +295,11 @@ this.addChild(new es3fSyncTests.FenceSyncCase('client_wait_sync_smalldraw', '', 10, es3fSyncTests.WaitCommand.CLIENT_WAIT_SYNC, 0, 0, 0)); this.addChild(new es3fSyncTests.FenceSyncCase('client_wait_sync_largedraw', '', 100000, es3fSyncTests.WaitCommand.CLIENT_WAIT_SYNC, 0, 0, 0)); - this.addChild(new es3fSyncTests.FenceSyncCase('client_wait_sync_timeout_smalldraw', '', 10, es3fSyncTests.WaitCommand.CLIENT_WAIT_SYNC, 0, 10, 0)); - this.addChild(new es3fSyncTests.FenceSyncCase('client_wait_sync_timeout_largedraw', '', 100000, es3fSyncTests.WaitCommand.CLIENT_WAIT_SYNC, 0, 10, 0)); + + // Originally the next two test cases' timeout is 10, but in WebGL2 that could be illegal. + var max = gl.getParameter(gl.MAX_CLIENT_WAIT_TIMEOUT_WEBGL) || 0; + this.addChild(new es3fSyncTests.FenceSyncCase('client_wait_sync_timeout_smalldraw', '', 10, es3fSyncTests.WaitCommand.CLIENT_WAIT_SYNC, 0, max, 0)); + this.addChild(new es3fSyncTests.FenceSyncCase('client_wait_sync_timeout_largedraw', '', 100000, es3fSyncTests.WaitCommand.CLIENT_WAIT_SYNC, 0, max, 0)); this.addChild(new es3fSyncTests.FenceSyncCase('client_wait_sync_flush_auto', '', 100000, es3fSyncTests.WaitCommand.CLIENT_WAIT_SYNC, gl.SYNC_FLUSH_COMMANDS_BIT, 0, 0)); this.addChild(new es3fSyncTests.FenceSyncCase('client_wait_sync_flush_manual', '', 100000, es3fSyncTests.WaitCommand.CLIENT_WAIT_SYNC, 0, 0, es3fSyncTests.CaseOptions.FLUSH_BEFORE_WAIT)); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fTextureFilteringTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fTextureFilteringTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fTextureFilteringTests.js 2017-01-13 01:37:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fTextureFilteringTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -835,8 +835,8 @@ if (!isHighQuality) { // Evaluate against lower precision requirements. - lodPrecision.lodBits = 4; - lookupPrecision.uvwBits = [4, 4, 0]; + lodPrecision.lodBits = 2; + lookupPrecision.uvwBits = [3, 3, 0]; bufferedLogToConsole('Warning: Verification against high ' + 'precision requirements failed, trying with lower ' + @@ -1233,8 +1233,8 @@ if (!isHighQuality) { // Evaluate against lower precision requirements. - lodPrecision.lodBits = 4; - lookupPrecision.uvwBits = [4, 4, 0]; + lodPrecision.lodBits = 3; + lookupPrecision.uvwBits = [3, 3, 0]; bufferedLogToConsole( 'Warning: Verification against high ' + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fTextureFormatTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fTextureFormatTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fTextureFormatTests.js 2017-01-13 01:37:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fTextureFormatTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -176,7 +176,7 @@ // Compare and log. var isOk = glsTextureTestUtil.compareImages(referenceFrame, renderedFrame, threshold); - assertMsgOptions(isOk, es3fTextureFormatTests.testDescription(), true, true); + assertMsgOptions(isOk, es3fTextureFormatTests.testDescription(), true, false); return tcuTestCase.IterateResult.STOP; }; @@ -307,9 +307,18 @@ this.m_texture.getRefTexture(), texCoord, renderParams); // Compare and log. - var isOk = glsTextureTestUtil.compareImages(referenceFrame, renderedFrame, threshold); + var skipPixels = null; + if (renderParams.samplerType == glsTextureTestUtil.samplerType.SAMPLERTYPE_INT || + renderParams.samplerType == glsTextureTestUtil.samplerType.SAMPLERTYPE_UINT) { + // Skip top right pixel due to Mac Intel driver bug. + // https://github.com/KhronosGroup/WebGL/issues/1819 + skipPixels = [ + [this.m_width - 1, this.m_height - 1] + ]; + } + var isOk = glsTextureTestUtil.compareImages(referenceFrame, renderedFrame, threshold, skipPixels); - assertMsgOptions(isOk, 'Face: ' + this.m_curFace + ' ' + es3fTextureFormatTests.testDescription(), true, true); + assertMsgOptions(isOk, 'Face: ' + this.m_curFace + ' ' + es3fTextureFormatTests.testDescription(), true, false); return isOk; }; @@ -434,7 +443,7 @@ // Compare and log. var isOk = glsTextureTestUtil.compareImages(referenceFrame, renderedFrame, threshold); - assertMsgOptions(isOk, 'Layer: ' + this.m_curLayer + ' ' + es3fTextureFormatTests.testDescription(), true, true); + assertMsgOptions(isOk, 'Layer: ' + this.m_curLayer + ' ' + es3fTextureFormatTests.testDescription(), true, false); return isOk; }; @@ -560,7 +569,7 @@ // Compare and log. var isOk = glsTextureTestUtil.compareImages(referenceFrame, renderedFrame, threshold); - assertMsgOptions(isOk, 'Slice: ' + this.m_curSlice + ' ' + es3fTextureFormatTests.testDescription(), true, true); + assertMsgOptions(isOk, 'Slice: ' + this.m_curSlice + ' ' + es3fTextureFormatTests.testDescription(), true, false); return isOk; }; @@ -667,7 +676,7 @@ // Compare and log. var isOk = glsTextureTestUtil.compareImages(referenceFrame, renderedFrame, threshold); - assertMsgOptions(isOk, es3fTextureFormatTests.testDescription(), true, true); + assertMsgOptions(isOk, es3fTextureFormatTests.testDescription(), true, false); return tcuTestCase.IterateResult.STOP; }; @@ -708,7 +717,8 @@ /* TODO: Implement // tcu::RGBA threshold = m_renderCtx.getRenderTarget().getPixelFormat().getColorThreshold() + tcu::RGBA(1,1,1,1); */ - var threshold = [3, 3, 3, 3]; + // Threshold high enough to cover numerical errors in software decoders on Windows and Mac. Threshold is 17 in native dEQP. + var threshold = [6, 6, 6, 6]; var renderParams = new glsTextureTestUtil.ReferenceParams(glsTextureTestUtil.textureType.TEXTURETYPE_CUBE); /** @const */ var wrapS = gl.CLAMP_TO_EDGE; @@ -762,7 +772,7 @@ // Compare and log. var isOk = glsTextureTestUtil.compareImages(referenceFrame, renderedFrame, threshold); - assertMsgOptions(isOk, 'Face: ' + this.m_curFace + ' ' + es3fTextureFormatTests.testDescription(), true, true); + assertMsgOptions(isOk, 'Face: ' + this.m_curFace + ' ' + es3fTextureFormatTests.testDescription(), true, false); return isOk; }; @@ -1115,6 +1125,10 @@ ['gl.COMPRESSED_RGBA8_ETC2_EAC', 'etc2_eac_rgba8', tcuCompressedTexture.Format.ETC2_EAC_RGBA8], ['gl.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC', 'etc2_eac_srgb8_alpha8', tcuCompressedTexture.Format.ETC2_EAC_SRGB8_ALPHA8] ]; + if (!gluTextureUtil.enableCompressedTextureETC()) { + debug('Skipping ETC2/EAC texture format tests: no support for WEBGL_compressed_texture_etc'); + etc2Formats = []; + } etc2Formats.forEach(function(elem) { var nameBase = elem[1]; var descriptionBase = elem[0]; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fTextureWrapTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fTextureWrapTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fTextureWrapTests.js 2017-01-13 01:37:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fTextureWrapTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -347,6 +347,10 @@ new Etc2Format('etc2_eac_rgba8', tcuCompressedTexture.Format.ETC2_EAC_RGBA8), new Etc2Format('etc2_eac_srgb8_alpha8', tcuCompressedTexture.Format.ETC2_EAC_SRGB8_ALPHA8) ]; + if (!gluTextureUtil.enableCompressedTextureETC()) { + debug('Skipping ETC2/EAC texture format tests: no support for WEBGL_compressed_texture_etc'); + etc2Formats = []; + } /** * @constructor diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fTransformFeedbackTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fTransformFeedbackTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fTransformFeedbackTests.js 2017-01-13 01:37:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fTransformFeedbackTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -1034,7 +1034,7 @@ } // Fall through case es3fTransformFeedbackTests.State.FINISH: - if (!this.m_testPassed) testFailedOptions('Result comparison failed', false); + if (!this.m_testPassed) testFailedOptions('Result comparison failed for iteration ' + s.iterations[this.m_iterNdx - 1], false); else testPassedOptions('Result comparison succeeded', true); return tcuTestCase.IterateResult.STOP; } @@ -1187,7 +1187,7 @@ // Bind buffer for reading. gl.bindBuffer(gl.TRANSFORM_FEEDBACK_BUFFER, this.m_outputBuffers[bufferNdx]); - gl.getBufferSubData(gl.TRANSFORM_FEEDBACK_BUFFER, 0, buffer); + gl.getBufferSubData(gl.TRANSFORM_FEEDBACK_BUFFER, 0, new Uint8Array(buffer)); // Verify all output variables that are written to this buffer. for (var i = 0; i < this.m_transformFeedbackOutputs.length; ++i) { @@ -1903,10 +1903,8 @@ es3fTransformFeedbackTests.init(); if (range) state.setRange(range); -// tcuTestCase.runner.runCallback(tcuTestCase.runTestCases); tcuTestCase.runTestCases(); } catch (err) { - console.log(err); bufferedLogToConsole(err); tcuTestCase.runner.terminate(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fUniformBlockTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fUniformBlockTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fUniformBlockTests.js 2017-01-13 01:37:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/es3fUniformBlockTests.js 2017-01-16 01:38:20.000000000 +0000 @@ -710,8 +710,9 @@ es3fUniformBlockTests.createRandomCaseGroup(randomGroup, 'nested_structs_instance_arrays', 'Nested structs, instance arrays, per-block buffers', glsUniformBlockCase.BufferMode.BUFFERMODE_PER_BLOCK, allShaders | allLayouts | unused | allBasicTypes | matFlags | glsRandomUniformBlockCase.FeatureBits.FEATURE_STRUCTS | glsRandomUniformBlockCase.FeatureBits.FEATURE_INSTANCE_ARRAYS, 25, 125); es3fUniformBlockTests.createRandomCaseGroup(randomGroup, 'nested_structs_arrays_instance_arrays', 'Nested structs, instance arrays, per-block buffers', glsUniformBlockCase.BufferMode.BUFFERMODE_PER_BLOCK, allShaders | allLayouts | unused | allBasicTypes | matFlags | glsRandomUniformBlockCase.FeatureBits.FEATURE_STRUCTS | glsRandomUniformBlockCase.FeatureBits.FEATURE_ARRAYS | glsRandomUniformBlockCase.FeatureBits.FEATURE_INSTANCE_ARRAYS, 25, 175); - es3fUniformBlockTests.createRandomCaseGroup(randomGroup, 'all_per_block_buffers', 'All random features, per-block buffers', glsUniformBlockCase.BufferMode.BUFFERMODE_PER_BLOCK, allFeatures, 50, 200); - es3fUniformBlockTests.createRandomCaseGroup(randomGroup, 'all_shared_buffer', 'All random features, shared buffer', glsUniformBlockCase.BufferMode.BUFFERMODE_SINGLE, allFeatures, 50, 250); + // Disabled: WebGL does not support shared or packed uniform buffers. + //es3fUniformBlockTests.createRandomCaseGroup(randomGroup, 'all_per_block_buffers', 'All random features, per-block buffers', glsUniformBlockCase.BufferMode.BUFFERMODE_PER_BLOCK, allFeatures, 50, 200); + //es3fUniformBlockTests.createRandomCaseGroup(randomGroup, 'all_shared_buffer', 'All random features, shared buffer', glsUniformBlockCase.BufferMode.BUFFERMODE_SINGLE, allFeatures, 50, 250); bufferedLogToConsole('ubo.random: Tests created'); }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/00_test_list.txt 2017-01-13 01:37:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/00_test_list.txt 2017-01-16 01:38:23.000000000 +0000 @@ -1,6 +1,26 @@ clear.html -tex2d.html -texcube.html -tex2darray.html -tex3d.html +tex2d_00.html +tex2d_01.html +tex2d_02.html +tex2d_03.html +tex2d_04.html +tex2d_05.html +texcube_00.html +texcube_01.html +texcube_02.html +texcube_03.html +texcube_04.html +texcube_05.html +tex2darray_00.html +tex2darray_01.html +tex2darray_02.html +tex2darray_03.html +tex2darray_04.html +tex2darray_05.html +tex3d_00.html +tex3d_01.html +tex3d_02.html +tex3d_03.html +tex3d_04.html +tex3d_05.html blend.html \ No newline at end of file diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/blend.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/blend.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/blend.html 2017-01-13 01:37:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/blend.html 2017-01-16 01:38:23.000000000 +0000 @@ -26,7 +26,7 @@ var gl = wtu.create3DContext('canvas', null, 2); var ext = gl.getExtension('EXT_color_buffer_float'); -functional.gles3.es3fFboColorbufferTests.run(gl, [5, 6]); +functional.gles3.es3fFboColorbufferTests.run(gl, [25, 26]); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/fbocolorbuffer_test_generator.py firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/fbocolorbuffer_test_generator.py --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/fbocolorbuffer_test_generator.py 2017-01-13 01:37:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/fbocolorbuffer_test_generator.py 2017-01-16 01:38:24.000000000 +0000 @@ -73,9 +73,24 @@ 'blend', ] -def GenerateFilename(group): +_GROUP_TEST_COUNTS = [ + 1, + 6, + 6, + 6, + 6, + 1 +] + +def GenerateFilename(group, count, index): """Generate test filename.""" filename = group + assert index >= 0 and index < count + if count > 1: + index_str = str(index) + if index < 10: + index_str = "0" + index_str + filename += "_" + index_str filename += ".html" return filename @@ -91,11 +106,17 @@ def GenerateTests(): """Generate all tests.""" + assert len(_GROUPS) == len(_GROUP_TEST_COUNTS) + test_index = 0 filelist = [] for ii in range(len(_GROUPS)): - filename = GenerateFilename(_GROUPS[ii]) - filelist.append(filename) - WriteTest(filename, ii, ii + 1) + group = _GROUPS[ii] + count = _GROUP_TEST_COUNTS[ii] + for index in range(count): + filename = GenerateFilename(group, count, index) + filelist.append(filename) + WriteTest(filename, test_index, test_index + 1) + test_index += 1 return filelist def GenerateTestList(filelist): diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_00.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_00.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_00.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_00.html 2017-01-16 01:38:26.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_01.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_01.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_01.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_01.html 2017-01-16 01:38:26.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_02.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_02.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_02.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_02.html 2017-01-16 01:38:26.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_03.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_03.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_03.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_03.html 2017-01-16 01:38:26.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_04.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_04.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_04.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_04.html 2017-01-16 01:38:26.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_05.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_05.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_05.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_05.html 2017-01-16 01:38:26.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_00.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_00.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_00.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_00.html 2017-01-16 01:38:28.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_01.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_01.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_01.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_01.html 2017-01-16 01:38:28.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_02.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_02.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_02.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_02.html 2017-01-16 01:38:28.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_03.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_03.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_03.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_03.html 2017-01-16 01:38:28.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_04.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_04.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_04.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_04.html 2017-01-16 01:38:28.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_05.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_05.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_05.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_05.html 2017-01-16 01:38:28.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_00.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_00.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_00.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_00.html 2017-01-16 01:38:29.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_01.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_01.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_01.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_01.html 2017-01-16 01:38:29.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_02.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_02.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_02.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_02.html 2017-01-16 01:38:29.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_03.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_03.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_03.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_03.html 2017-01-16 01:38:29.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_04.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_04.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_04.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_04.html 2017-01-16 01:38:29.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_05.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_05.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_05.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_05.html 2017-01-16 01:38:29.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_00.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_00.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_00.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_00.html 2017-01-16 01:38:32.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_01.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_01.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_01.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_01.html 2017-01-16 01:38:32.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_02.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_02.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_02.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_02.html 2017-01-16 01:38:32.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_03.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_03.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_03.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_03.html 2017-01-16 01:38:32.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_04.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_04.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_04.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_04.html 2017-01-16 01:38:32.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_05.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_05.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_05.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbocolorbuffer/texcube_05.html 2017-01-16 01:38:32.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Color Buffer Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/00_test_list.txt 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/00_test_list.txt 2017-01-16 01:38:37.000000000 +0000 @@ -0,0 +1,7 @@ +default.html +whole.html +sub.html +format_00.html +format_01.html +format_02.html +target.html \ No newline at end of file diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/default.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/default.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/default.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/default.html 2017-01-16 01:38:37.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Invalidate Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/fboinvalidate_test_generator.py firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/fboinvalidate_test_generator.py --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/fboinvalidate_test_generator.py 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/fboinvalidate_test_generator.py 2017-01-16 01:38:37.000000000 +0000 @@ -0,0 +1,131 @@ +#!/usr/bin/env python + +# Copyright (c) 2016 The Khronos Group Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and/or associated documentation files (the +# "Materials"), to deal in the Materials without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Materials, and to +# permit persons to whom the Materials are furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Materials. +# +# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + +""" + Generator for fboinvalidate* tests. + This file needs to be run in its folder. +""" + +import sys + +_DO_NOT_EDIT_WARNING = """ + +""" + +_HTML_TEMPLATE = """ + + +WebGL FBO Invalidate Conformance Tests + + + + + + + + + +
    +
    + + + + +""" + +_GROUPS = [ + 'default', + 'whole', + 'sub', + 'format', + 'target', +] + +_GROUP_TEST_COUNTS = [ + 1, + 1, + 1, + 3, + 1 +] + +def GenerateFilename(group, count, index): + """Generate test filename.""" + filename = group + assert index >= 0 and index < count + if count > 1: + index_str = str(index) + if index < 10: + index_str = "0" + index_str + filename += "_" + index_str + filename += ".html" + return filename + +def WriteTest(filename, start, end): + """Write one test.""" + file = open(filename, "wb") + file.write(_DO_NOT_EDIT_WARNING) + file.write(_HTML_TEMPLATE % { + 'start': start, + 'end': end + }) + file.close + +def GenerateTests(): + """Generate all tests.""" + assert len(_GROUPS) == len(_GROUP_TEST_COUNTS) + test_index = 0 + filelist = [] + for ii in range(len(_GROUPS)): + group = _GROUPS[ii] + count = _GROUP_TEST_COUNTS[ii] + for index in range(count): + filename = GenerateFilename(group, count, index) + filelist.append(filename) + WriteTest(filename, test_index, test_index + 1) + test_index += 1 + return filelist + +def GenerateTestList(filelist): + file = open("00_test_list.txt", "wb") + file.write('\n'.join(filelist)) + file.close + +def main(argv): + """This is the main function.""" + filelist = GenerateTests() + GenerateTestList(filelist) + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/format_00.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/format_00.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/format_00.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/format_00.html 2017-01-16 01:38:37.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Invalidate Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/format_01.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/format_01.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/format_01.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/format_01.html 2017-01-16 01:38:37.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Invalidate Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/format_02.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/format_02.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/format_02.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/format_02.html 2017-01-16 01:38:37.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Invalidate Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/sub.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/sub.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/sub.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/sub.html 2017-01-16 01:38:37.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Invalidate Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/target.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/target.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/target.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/target.html 2017-01-16 01:38:37.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Invalidate Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/whole.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/whole.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/whole.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fboinvalidate/whole.html 2017-01-16 01:38:37.000000000 +0000 @@ -0,0 +1,32 @@ + + + + + +WebGL FBO Invalidate Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbomultisample.2_samples.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbomultisample.2_samples.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbomultisample.2_samples.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbomultisample.2_samples.html 2017-01-16 01:38:37.000000000 +0000 @@ -0,0 +1,24 @@ + + + +WebGL Fbo Multisample Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbomultisample.4_samples.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbomultisample.4_samples.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbomultisample.4_samples.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbomultisample.4_samples.html 2017-01-16 01:38:37.000000000 +0000 @@ -0,0 +1,24 @@ + + + +WebGL Fbo Multisample Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbomultisample.8_samples.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbomultisample.8_samples.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbomultisample.8_samples.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fbomultisample.8_samples.html 2017-01-16 01:38:37.000000000 +0000 @@ -0,0 +1,24 @@ + + + +WebGL Fbo Multisample Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/00_test_list.txt 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/00_test_list.txt 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,18 @@ +stencil_clear.html +shared_colorbuffer_clear.html +shared_colorbuffer_00.html +shared_colorbuffer_01.html +shared_colorbuffer_02.html +shared_depth_stencil.html +resize_00.html +resize_01.html +resize_02.html +resize_03.html +recreate_color_00.html +recreate_color_01.html +recreate_color_02.html +recreate_color_03.html +recreate_color_04.html +recreate_color_05.html +recreate_color_06.html +recreate_depth_stencil.html \ No newline at end of file diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/fborender_test_generator.py firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/fborender_test_generator.py --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/fborender_test_generator.py 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/fborender_test_generator.py 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,134 @@ +#!/usr/bin/env python + +# Copyright (c) 2016 The Khronos Group Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and/or associated documentation files (the +# "Materials"), to deal in the Materials without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Materials, and to +# permit persons to whom the Materials are furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Materials. +# +# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + +""" + Generator for fborender* tests. + This file needs to be run in its folder. +""" + +import sys + +_DO_NOT_EDIT_WARNING = """ + +""" + +_HTML_TEMPLATE = """ + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + +""" + +_GROUPS = [ + 'stencil_clear', + 'shared_colorbuffer_clear', + 'shared_colorbuffer', + 'shared_depth_stencil', + 'resize', + 'recreate_color', + 'recreate_depth_stencil' +] + +_GROUP_TEST_COUNTS = [ + 1, + 1, + 3, + 1, + 4, + 7, + 1 +] + +def GenerateFilename(group, count, index): + """Generate test filename.""" + filename = group + assert index >= 0 and index < count + if count > 1: + index_str = str(index) + if index < 10: + index_str = "0" + index_str + filename += "_" + index_str + filename += ".html" + return filename + +def WriteTest(filename, start, end): + """Write one test.""" + file = open(filename, "wb") + file.write(_DO_NOT_EDIT_WARNING) + file.write(_HTML_TEMPLATE % { + 'start': start, + 'end': end + }) + file.close + +def GenerateTests(): + """Generate all tests.""" + assert len(_GROUPS) == len(_GROUP_TEST_COUNTS) + test_index = 0 + filelist = [] + for ii in range(len(_GROUPS)): + group = _GROUPS[ii] + count = _GROUP_TEST_COUNTS[ii] + for index in range(count): + filename = GenerateFilename(group, count, index) + filelist.append(filename) + WriteTest(filename, test_index, test_index + 1) + test_index += 1 + return filelist + +def GenerateTestList(filelist): + file = open("00_test_list.txt", "wb") + file.write('\n'.join(filelist)) + file.close + +def main(argv): + """This is the main function.""" + filelist = GenerateTests() + GenerateTestList(filelist) + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_00.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_00.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_00.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_00.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_01.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_01.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_01.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_01.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_02.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_02.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_02.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_02.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_03.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_03.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_03.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_03.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_04.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_04.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_04.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_04.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_05.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_05.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_05.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_05.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_06.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_06.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_06.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_color_06.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_depth_stencil.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_depth_stencil.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_depth_stencil.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/recreate_depth_stencil.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_00.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_00.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_00.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_00.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_01.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_01.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_01.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_01.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_02.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_02.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_02.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_02.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_03.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_03.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_03.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/resize_03.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_00.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_00.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_00.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_00.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_01.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_01.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_01.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_01.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_02.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_02.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_02.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_02.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_clear.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_clear.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_clear.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_colorbuffer_clear.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_depth_stencil.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_depth_stencil.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_depth_stencil.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/shared_depth_stencil.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/stencil_clear.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/stencil_clear.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/stencil_clear.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fborender/stencil_clear.html 2017-01-16 01:39:06.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Render Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/00_test_list.txt 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/00_test_list.txt 2017-01-16 01:39:24.000000000 +0000 @@ -0,0 +1,11 @@ +basic.float.html +basic.fixed.html +basic.int.html +basic.uint.html +array.float.html +array.fixed.html +array.int.html +array.uint.html +random_00.html +random_01.html +random_02.html \ No newline at end of file diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.fixed.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.fixed.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.fixed.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.fixed.html 2017-01-16 01:39:24.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Fragment Output Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.float.html 2017-01-16 01:39:24.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Fragment Output Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.int.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.int.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.int.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.int.html 2017-01-16 01:39:24.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Fragment Output Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.uint.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.uint.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.uint.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/array.uint.html 2017-01-16 01:39:24.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Fragment Output Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.fixed.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.fixed.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.fixed.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.fixed.html 2017-01-16 01:39:24.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Fragment Output Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.float.html 2017-01-16 01:39:24.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Fragment Output Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.int.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.int.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.int.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.int.html 2017-01-16 01:39:24.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Fragment Output Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.uint.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.uint.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.uint.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/basic.uint.html 2017-01-16 01:39:24.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Fragment Output Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/fragmentoutput_test_generator.py firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/fragmentoutput_test_generator.py --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/fragmentoutput_test_generator.py 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/fragmentoutput_test_generator.py 2017-01-16 01:39:24.000000000 +0000 @@ -0,0 +1,110 @@ +#!/usr/bin/env python + +# Copyright (c) 2016 The Khronos Group Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and/or associated documentation files (the +# "Materials"), to deal in the Materials without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Materials, and to +# permit persons to whom the Materials are furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Materials. +# +# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + +""" + Generator for fragmentoutput* tests. + This file needs to be run in its folder. +""" + +import sys + +_DO_NOT_EDIT_WARNING = """ + +""" + +_HTML_TEMPLATE = """ + + +WebGL Fragment Output Tests + + + + + + + + + +
    +
    + + + + +""" + +_GROUPS = [ + 'basic.float', + 'basic.fixed', + 'basic.int', + 'basic.uint', + 'array.float', + 'array.fixed', + 'array.int', + 'array.uint', + 'random_00', + 'random_01', + 'random_02' +] + +def WriteTest(filename, start, end): + """Write one test.""" + file = open(filename, "wb") + file.write(_DO_NOT_EDIT_WARNING) + file.write(_HTML_TEMPLATE % { + 'start': start, + 'end': end + }) + file.close + +def GenerateTests(): + """Generate all tests.""" + filelist = [] + for ii in range(len(_GROUPS)): + filename = _GROUPS[ii] + '.html' + filelist.append(filename) + WriteTest(filename, ii, ii + 1) + return filelist + +def GenerateTestList(filelist): + file = open("00_test_list.txt", "wb") + file.write('\n'.join(filelist)) + file.close + +def main(argv): + """This is the main function.""" + filelist = GenerateTests() + GenerateTestList(filelist) + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/random_00.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/random_00.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/random_00.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/random_00.html 2017-01-16 01:39:24.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Fragment Output Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/random_01.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/random_01.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/random_01.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/random_01.html 2017-01-16 01:39:24.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Fragment Output Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/random_02.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/random_02.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/random_02.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/fragmentoutput/random_02.html 2017-01-16 01:39:24.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Fragment Output Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/00_test_list.txt 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/00_test_list.txt 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,50 @@ +rect_00.html +rect_01.html +rect_02.html +rect_03.html +rect_04.html +rect_05.html +rect_06.html +conversion_00.html +conversion_01.html +conversion_02.html +conversion_03.html +conversion_04.html +conversion_05.html +conversion_06.html +conversion_07.html +conversion_08.html +conversion_09.html +conversion_10.html +conversion_11.html +conversion_12.html +conversion_13.html +conversion_14.html +conversion_15.html +conversion_16.html +conversion_17.html +conversion_18.html +conversion_19.html +conversion_20.html +conversion_21.html +conversion_22.html +conversion_23.html +conversion_24.html +conversion_25.html +conversion_26.html +conversion_27.html +conversion_28.html +conversion_29.html +conversion_30.html +conversion_31.html +conversion_32.html +conversion_33.html +conversion_34.html +depth_stencil.html +default_framebuffer_00.html +default_framebuffer_01.html +default_framebuffer_02.html +default_framebuffer_03.html +default_framebuffer_04.html +default_framebuffer_05.html +default_framebuffer_06.html \ No newline at end of file diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_00.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_00.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_00.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_00.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_01.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_01.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_01.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_01.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_02.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_02.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_02.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_02.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_03.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_03.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_03.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_03.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_04.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_04.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_04.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_04.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_05.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_05.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_05.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_05.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_06.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_06.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_06.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_06.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_07.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_07.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_07.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_07.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_08.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_08.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_08.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_08.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_09.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_09.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_09.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_09.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_10.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_10.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_10.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_10.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_11.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_11.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_11.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_11.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_12.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_12.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_12.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_12.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_13.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_13.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_13.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_13.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_14.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_14.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_14.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_14.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_15.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_15.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_15.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_15.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_16.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_16.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_16.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_16.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_17.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_17.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_17.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_17.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_18.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_18.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_18.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_18.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_19.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_19.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_19.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_19.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_20.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_20.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_20.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_20.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_21.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_21.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_21.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_21.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_22.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_22.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_22.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_22.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_23.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_23.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_23.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_23.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_24.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_24.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_24.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_24.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_25.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_25.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_25.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_25.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_26.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_26.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_26.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_26.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_27.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_27.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_27.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_27.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_28.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_28.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_28.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_28.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_29.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_29.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_29.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_29.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_30.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_30.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_30.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_30.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_31.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_31.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_31.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_31.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_32.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_32.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_32.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_32.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_33.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_33.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_33.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_33.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_34.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_34.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_34.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/conversion_34.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_00.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_00.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_00.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_00.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_01.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_01.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_01.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_01.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_02.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_02.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_02.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_02.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_03.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_03.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_03.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_03.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_04.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_04.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_04.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_04.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_05.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_05.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_05.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_05.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_06.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_06.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_06.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_06.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/depth_stencil.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/depth_stencil.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/depth_stencil.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/depth_stencil.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/frambufferblit_test_generator.py firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/frambufferblit_test_generator.py --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/frambufferblit_test_generator.py 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/frambufferblit_test_generator.py 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,128 @@ +#!/usr/bin/env python + +# Copyright (c) 2016 The Khronos Group Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and/or associated documentation files (the +# "Materials"), to deal in the Materials without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Materials, and to +# permit persons to whom the Materials are furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Materials. +# +# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + +""" + Generator for framebufferblit* tests. + This file needs to be run in its folder. +""" + +import sys + +_DO_NOT_EDIT_WARNING = """ + +""" + +_HTML_TEMPLATE = """ + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + +""" + +_GROUPS = [ + 'rect', + 'conversion', + 'depth_stencil', + 'default_framebuffer', +] + +_GROUP_TEST_COUNTS = [ + 7, + 35, + 1, + 7 +] + +def GenerateFilename(group, count, index): + """Generate test filename.""" + filename = group + assert index >= 0 and index < count + if count > 1: + index_str = str(index) + if index < 10: + index_str = "0" + index_str + filename += "_" + index_str + filename += ".html" + return filename + +def WriteTest(filename, start, end): + """Write one test.""" + file = open(filename, "wb") + file.write(_DO_NOT_EDIT_WARNING) + file.write(_HTML_TEMPLATE % { + 'start': start, + 'end': end + }) + file.close + +def GenerateTests(): + """Generate all tests.""" + assert len(_GROUPS) == len(_GROUP_TEST_COUNTS) + test_index = 0 + filelist = [] + for ii in range(len(_GROUPS)): + group = _GROUPS[ii] + count = _GROUP_TEST_COUNTS[ii] + for index in range(count): + filename = GenerateFilename(group, count, index) + filelist.append(filename) + WriteTest(filename, test_index, test_index + 1) + test_index += 1 + return filelist + +def GenerateTestList(filelist): + file = open("00_test_list.txt", "wb") + file.write('\n'.join(filelist)) + file.close + +def main(argv): + """This is the main function.""" + filelist = GenerateTests() + GenerateTestList(filelist) + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_00.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_00.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_00.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_00.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_01.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_01.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_01.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_01.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_02.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_02.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_02.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_02.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_03.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_03.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_03.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_03.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_04.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_04.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_04.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_04.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_05.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_05.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_05.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_05.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_06.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_06.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_06.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/framebufferblit/rect_06.html 2017-01-16 01:39:25.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Framebuffer Blit Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/occlusionquery_conservative.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/occlusionquery_conservative.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/occlusionquery_conservative.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/occlusionquery_conservative.html 2017-01-16 01:39:27.000000000 +0000 @@ -0,0 +1,26 @@ + + + +WebGL Occlusion Query Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/occlusionquery_strict.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/occlusionquery_strict.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/occlusionquery_strict.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/occlusionquery_strict.html 2017-01-16 01:39:27.000000000 +0000 @@ -0,0 +1,26 @@ + + + +WebGL Occlusion Query Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/pixelbufferobject.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/pixelbufferobject.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/pixelbufferobject.html 2017-01-13 01:37:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/pixelbufferobject.html 2017-01-16 01:39:27.000000000 +0000 @@ -1,7 +1,7 @@ -WebGL Instanced Rendering Conformance Tests +WebGL Pixel Buffer Object Conformance Tests diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/00.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/00.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/00.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/00.html 2017-01-16 01:39:27.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Primitive Restart Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/00_test_list.txt 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/00_test_list.txt 2017-01-16 01:39:27.000000000 +0000 @@ -0,0 +1,8 @@ +00.html +01.html +02.html +03.html +04.html +05.html +06.html +07.html \ No newline at end of file diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/01.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/01.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/01.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/01.html 2017-01-16 01:39:27.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Primitive Restart Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/02.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/02.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/02.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/02.html 2017-01-16 01:39:27.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Primitive Restart Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/03.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/03.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/03.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/03.html 2017-01-16 01:39:27.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Primitive Restart Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/04.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/04.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/04.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/04.html 2017-01-16 01:39:27.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Primitive Restart Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/05.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/05.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/05.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/05.html 2017-01-16 01:39:27.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Primitive Restart Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/06.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/06.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/06.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/06.html 2017-01-16 01:39:27.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Primitive Restart Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/07.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/07.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/07.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/07.html 2017-01-16 01:39:27.000000000 +0000 @@ -0,0 +1,31 @@ + + + + + +WebGL Primitive Restart Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/primitiverestart_test_generator.py firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/primitiverestart_test_generator.py --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/primitiverestart_test_generator.py 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/primitiverestart/primitiverestart_test_generator.py 2017-01-16 01:39:27.000000000 +0000 @@ -0,0 +1,101 @@ +#!/usr/bin/env python + +# Copyright (c) 2016 The Khronos Group Inc. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and/or associated documentation files (the +# "Materials"), to deal in the Materials without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Materials, and to +# permit persons to whom the Materials are furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Materials. +# +# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + +""" + Generator for primitiverestart* tests. + This file needs to be run in its folder. +""" + +import sys + +_DO_NOT_EDIT_WARNING = """ + +""" + +_HTML_TEMPLATE = """ + + +WebGL Primitive Restart Conformance Tests + + + + + + + + + +
    +
    + + + + +""" + +_NUM_TESTS = 8 + +def WriteTest(filename, start, end): + """Write one test.""" + file = open(filename, "wb") + file.write(_DO_NOT_EDIT_WARNING) + file.write(_HTML_TEMPLATE % { + 'start': start, + 'end': end + }) + file.close + +def GenerateTests(): + """Generate all tests.""" + filelist = [] + for ii in range(_NUM_TESTS): + index_str = str(ii) + if ii < 10: + index_str = "0" + index_str + filename = index_str + '.html' + filelist.append(filename) + WriteTest(filename, ii, ii + 1) + return filelist + +def GenerateTestList(filelist): + file = open("00_test_list.txt", "wb") + file.write('\n'.join(filelist)) + file.close + +def main(argv): + """This is the main function.""" + filelist = GenerateTests() + GenerateTestList(filelist) + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/readpixel.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/readpixel.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/readpixel.html 2017-01-13 01:37:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/readpixel.html 2017-01-16 01:39:27.000000000 +0000 @@ -8,7 +8,9 @@ - +
    diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderderivate_dfdx.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderderivate_dfdx.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderderivate_dfdx.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderderivate_dfdx.html 2017-01-16 01:39:27.000000000 +0000 @@ -0,0 +1,24 @@ + + + +WebGL Shader Derivate Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderderivate_dfdy.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderderivate_dfdy.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderderivate_dfdy.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderderivate_dfdy.html 2017-01-16 01:39:27.000000000 +0000 @@ -0,0 +1,24 @@ + + + +WebGL Shader Derivate Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderderivate_fwidth.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderderivate_fwidth.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderderivate_fwidth.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderderivate_fwidth.html 2017-01-16 01:39:27.000000000 +0000 @@ -0,0 +1,24 @@ + + + +WebGL Shader Derivate Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderoperator/00_test_list.txt firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderoperator/00_test_list.txt --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderoperator/00_test_list.txt 2017-01-13 01:37:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderoperator/00_test_list.txt 2017-01-16 01:39:27.000000000 +0000 @@ -22,10 +22,10 @@ angle_and_trigonometry_02.html angle_and_trigonometry_03.html exponential.html -common_fucntions.html +common_functions.html geometric.html float_compare.html int_compare.html bool_compare.html selection.html -sequence.html \ No newline at end of file +sequence.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderoperator/common_functions.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderoperator/common_functions.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderoperator/common_functions.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/functional/gles3/shaderoperator/common_functions.html 2017-01-16 01:39:27.000000000 +0000 @@ -0,0 +1,33 @@ + + + + + +WebGL Shader Operator Conformance Tests + + + + + + + + + +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsBufferTestUtil.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsBufferTestUtil.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsBufferTestUtil.js 2017-01-13 01:38:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsBufferTestUtil.js 2017-01-16 01:39:42.000000000 +0000 @@ -508,14 +508,14 @@ var wasReadBufferCreated = false; try { if (targetHint == gl.ELEMENT_ARRAY_BUFFER || targetHint == gl.TRANSFORM_FEEDBACK_BUFFER) { - var readBuffer = new ArrayBuffer(offset + numBytes); + var readBuffer = new Uint8Array(offset + numBytes); gl.getBufferSubData(targetHint, 0, readBuffer); buffer = gl.createBuffer(); wasReadBufferCreated = true; gl.bindBuffer(gl.ARRAY_BUFFER, buffer); - gl.bufferData(gl.ARRAY_BUFFER, new Uint8Array(readBuffer), gl.STATIC_DRAW); + gl.bufferData(gl.ARRAY_BUFFER, readBuffer, gl.STATIC_DRAW); } var result = this.verifyNoTarget(buffer, reference, offset, numBytes); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsBuiltinPrecisionTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsBuiltinPrecisionTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsBuiltinPrecisionTests.js 2017-01-13 01:38:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsBuiltinPrecisionTests.js 2017-01-16 01:39:42.000000000 +0000 @@ -479,6 +479,8 @@ /** type{tcuInterval.Interval} */ this.iVal; }; + setParentClass(glsBuiltinPrecisionTests.ScalarTraits, glsBuiltinPrecisionTests.Traits); + glsBuiltinPrecisionTests.ScalarTraits.prototype = Object.create(glsBuiltinPrecisionTests.Traits.prototype); glsBuiltinPrecisionTests.ScalarTraits.prototype.constructor = glsBuiltinPrecisionTests.ScalarTraits; @@ -3978,10 +3980,6 @@ this.m_body[ndx].execute(funCtx); var ret = this.m_ret.evaluate(funCtx); - if (this.m_ret_alternative !== undefined) { - var ret_alternative = this.m_ret_alternative.evaluate(funCtx); - ret = tcuInterval.withIntervals(ret, ret_alternative); - } // \todo [lauri] Store references instead of values in environment args.a = funEnv.lookup(this.m_var0); @@ -4006,13 +4004,37 @@ this.m_var1, this.m_var2, this.m_var3); this.m_ret = this.doExpand(ctx, args); - if (this.doExpandAlternative !== undefined) { - this.m_ret_alternative = this.doExpandAlternative(ctx, args); - } this.m_body = ctx.getStatements(); } }; + /** + * @constructor + * @extends {glsBuiltinPrecisionTests.Func} + * @param {glsBuiltinPrecisionTests.Signature} Sig_ template + */ + glsBuiltinPrecisionTests.Alternatives = function(Sig_) { + glsBuiltinPrecisionTests.Func.call(this, Sig_); + }; + + setParentClass(glsBuiltinPrecisionTests.Alternatives,glsBuiltinPrecisionTests.Func); + + glsBuiltinPrecisionTests.Alternatives.prototype.getName = function() { + return 'alternatives'; + }; + + glsBuiltinPrecisionTests.Alternatives.prototype.doPrintDefinition = function() {}; + + glsBuiltinPrecisionTests.Alternatives.prototype.doGetUsedFuncs = function(dst) {}; + + glsBuiltinPrecisionTests.Alternatives.prototype.doApply = function(ctx,args) { + return glsBuiltinPrecisionTests.union(this.Sig.Ret,args.a,args.b); + }; + + glsBuiltinPrecisionTests.Alternatives.prototype.doPrint = function(args) { + return '{' + args[0] + '|' + args[1] + '}'; + }; + glsBuiltinPrecisionTests.sizeToName = function(size) { switch (size) { case 4: return 'vec4'; @@ -4623,7 +4645,7 @@ return 'mix'; }; - glsBuiltinPrecisionTests.Mix.prototype.doExpand = function(ctx, args) { + glsBuiltinPrecisionTests.Mix.prototype.operation1 = function(ctx, args) { // (x * (constant(1.0f) - a)) + y * a var x = args.a; var y = args.b; @@ -4636,7 +4658,7 @@ return v3; }; - glsBuiltinPrecisionTests.Mix.prototype.doExpandAlternative = function(ctx, args) { + glsBuiltinPrecisionTests.Mix.prototype.operation2 = function(ctx, args) { // x + (y - x) * a var x = args.a; var y = args.b; @@ -4647,6 +4669,10 @@ return v2; }; + glsBuiltinPrecisionTests.Mix.prototype.doExpand = function(ctx, args){ + return app(new glsBuiltinPrecisionTests.Alternatives(this.Sig), this.operation1(ctx, args), this.operation2(ctx, args), new glsBuiltinPrecisionTests.Void(), new glsBuiltinPrecisionTests.Void()); + } + /** * @constructor * @extends {glsBuiltinPrecisionTests.DerivedFunc} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsFboCompletenessTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsFboCompletenessTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsFboCompletenessTests.js 2017-01-13 01:38:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsFboCompletenessTests.js 2017-01-16 01:39:42.000000000 +0000 @@ -559,7 +559,6 @@ glsFboCompletenessTests.TestBase = function(name, desc, params) { tcuTestCase.DeqpTest.call(this, name, desc); this.m_params = params; - // console.log('glsFboCompletenessTests.TestBase Constructor'); }; glsFboCompletenessTests.TestBase.prototype = Object.create(tcuTestCase.DeqpTest.prototype); glsFboCompletenessTests.TestBase.prototype.constructor = glsFboCompletenessTests.TestBase; @@ -928,7 +927,7 @@ throw new Error('Multiple attachments not supported'); var maxAttachments = gl.getParameter(gl.MAX_COLOR_ATTACHMENTS); - for (var i = 0; i < maxAttachments; ++i) { + for (var i = 1; i < maxAttachments; ++i) { this.attachTargetToNew(gl.COLOR_ATTACHMENT0 + i, this.m_params.colornKind, glsFboUtil.ImageFormat.none(), 64, 64, builder, gl); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsSamplerObjectTest.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsSamplerObjectTest.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsSamplerObjectTest.js 2017-01-13 01:38:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsSamplerObjectTest.js 2017-01-16 01:39:42.000000000 +0000 @@ -627,6 +627,10 @@ } }; + glsSamplerObjectTest.MultiTextureSamplerTest.prototype.deinit = function() { + gl.activeTexture(gl.TEXTURE0); + } + glsSamplerObjectTest.MultiTextureSamplerTest.prototype.iterate = function() { //tcu::TestLog& log = m_testCtx.getLog(); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsShaderExecUtil.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsShaderExecUtil.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsShaderExecUtil.js 2017-01-13 01:38:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsShaderExecUtil.js 2017-01-16 01:39:42.000000000 +0000 @@ -480,7 +480,7 @@ // Read back data. var result = new ArrayBuffer(outputBufferStride * numValues); - gl.getBufferSubData(gl.TRANSFORM_FEEDBACK_BUFFER, 0, result); + gl.getBufferSubData(gl.TRANSFORM_FEEDBACK_BUFFER, 0, new Uint8Array(result)); /** @type {number} */ var curOffset = 0; // Offset in buffer in bytes. for (var outputNdx = 0; outputNdx < this.m_outputs.length; outputNdx++) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsShaderLibrary.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsShaderLibrary.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsShaderLibrary.js 2017-01-13 01:38:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsShaderLibrary.js 2017-01-16 01:39:42.000000000 +0000 @@ -932,9 +932,6 @@ assumeToken(Token.TOKEN_SHADER_SOURCE); /** @type {string} */ var source = parseShaderSource(m_curTokenStr); - // console.log("old: " + m_curTokenStr); - // console.log("new: " + source); - advanceToken(); switch (token) { case Token.TOKEN_BOTH: bothSource = source; break; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsShaderRenderCase.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsShaderRenderCase.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsShaderRenderCase.js 2017-01-13 01:38:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsShaderRenderCase.js 2017-01-16 01:39:42.000000000 +0000 @@ -347,7 +347,7 @@ /** @type {glsShaderRenderCase.TextureBinding} */ var binding = bindings[ndx]; this.textures[ndx] = new glsShaderRenderCase.ShaderSampler(); - + if (binding.getType() == gluTexture.Type.TYPE_NONE) continue; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsStateQuery.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsStateQuery.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsStateQuery.js 2017-01-13 01:38:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsStateQuery.js 2017-01-16 01:39:42.000000000 +0000 @@ -339,28 +339,28 @@ }; /** - * @param {number} param - * @param {Array} reference - * @param {Array} enableRef - * @return {boolean} - */ + * @param {number} param + * @param {Array} reference + * @param {Array} enableRef + * @return {boolean} + */ glsStateQuery.verifyMask = function(param, reference, enableRef) { - var intVector4 = /** @type {Array} */ (gl.getParameter(param)); + var intVector4 = /** @type {Array} */ (gl.getParameter(param)); - if ((enableRef[0] && (intVector4[0] != reference[0])) || - (enableRef[1] && (intVector4[1] != reference[1])) || - (enableRef[2] && (intVector4[2] != reference[2])) || - (enableRef[3] && (intVector4[3] != reference[3]))) - { - bufferedLogToConsole("// ERROR: expected " + - (enableRef[0] ? "" : "(") + reference[0] + (enableRef[0] ? "" : ")") + ", " + - (enableRef[1] ? "" : "(") + reference[1] + (enableRef[1] ? "" : ")") + ", " + - (enableRef[2] ? "" : "(") + reference[2] + (enableRef[2] ? "" : ")") + ", " + - (enableRef[3] ? "" : "(") + reference[3] + (enableRef[3] ? "" : ")")); + if ((enableRef[0] && (intVector4[0] != reference[0])) || + (enableRef[1] && (intVector4[1] != reference[1])) || + (enableRef[2] && (intVector4[2] != reference[2])) || + (enableRef[3] && (intVector4[3] != reference[3]))) + { + bufferedLogToConsole("// ERROR: expected " + + (enableRef[0] ? "" : "(") + reference[0] + (enableRef[0] ? "" : ")") + ", " + + (enableRef[1] ? "" : "(") + reference[1] + (enableRef[1] ? "" : ")") + ", " + + (enableRef[2] ? "" : "(") + reference[2] + (enableRef[2] ? "" : ")") + ", " + + (enableRef[3] ? "" : "(") + reference[3] + (enableRef[3] ? "" : ")")); - return false; - } + return false; + } return true; }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsTextureTestUtil.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsTextureTestUtil.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsTextureTestUtil.js 2017-01-13 01:38:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsTextureTestUtil.js 2017-01-16 01:39:42.000000000 +0000 @@ -598,8 +598,6 @@ var vertSrc = tcuStringTemplate.specialize(vertShaderTemplate, params); var fragSrc = tcuStringTemplate.specialize(fragShaderTemplate, params); - // console.log(fragSrc); - // console.log(vertSrc); var progObj = new gluShaderProgram.ShaderProgram(gl, gluShaderProgram.makeVtxFragSources(vertSrc, fragSrc)); // if (!progObj.isOk()) { // // log << *progObj; @@ -821,8 +819,6 @@ // log << TestLog::Message << "u_colorBias = " << params.colorBias << TestLog::EndMessage; // } var vertexArrays = []; - // console.log(position); - // console.log(texCoord); var posLoc = gl.getAttribLocation(prog, 'a_position'); if (posLoc === -1) { @@ -1408,11 +1404,12 @@ * @param {tcuSurface.Surface} reference * @param {tcuSurface.Surface} rendered * @param {Array} threshold + * @param {Array< Array >} skipPixels * * @return {boolean} */ -glsTextureTestUtil.compareImages = function(reference, rendered, threshold) { - return tcuImageCompare.pixelThresholdCompare('Result', 'Image comparison result', reference, rendered, threshold, undefined /*tcu::COMPARE_LOG_RESULT*/); +glsTextureTestUtil.compareImages = function(reference, rendered, threshold, skipPixels) { + return tcuImageCompare.pixelThresholdCompare('Result', 'Image comparison result', reference, rendered, threshold, undefined /*tcu::COMPARE_LOG_RESULT*/, skipPixels); }; /** diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsVertexArrayTests.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsVertexArrayTests.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsVertexArrayTests.js 2017-01-13 01:38:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/modules/shared/glsVertexArrayTests.js 2017-01-16 01:39:42.000000000 +0000 @@ -202,7 +202,7 @@ 'int', // glsVertexArrayTests.deArray.InputType.INT 'unsigned_int', // glsVertexArrayTests.deArray.InputType.UNSIGNED_INT 'half', // glsVertexArrayTests.deArray.InputType.HALF - 'usigned_int2_10_10_10', // glsVertexArrayTests.deArray.InputType.UNSIGNED_INT_2_10_10_10 + 'unsigned_int2_10_10_10', // glsVertexArrayTests.deArray.InputType.UNSIGNED_INT_2_10_10_10 'int2_10_10_10' // glsVertexArrayTests.deArray.InputType.INT_2_10_10_10 ]; DE_ASSERT(types.length == Object.keys(glsVertexArrayTests.deArray.InputType).length); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/temp_externs/w3c_css.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/temp_externs/w3c_css.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/temp_externs/w3c_css.js 2017-01-13 01:38:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/temp_externs/w3c_css.js 2017-01-16 01:39:43.000000000 +0000 @@ -1408,6 +1408,12 @@ /** * @type {string} + * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-markerOffset + */ +CSSProperties.prototype.markerOffset; + +/** + * @type {string} * @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSProperties-marks */ CSSProperties.prototype.marks; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/webgl2.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/webgl2.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/deqp/webgl2.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/deqp/webgl2.js 2017-01-16 01:39:43.000000000 +0000 @@ -3999,36 +3999,6 @@ WebGL2RenderingContextBase.TRANSFORM_FEEDBACK_BINDING; /** @type {number} */ -WebGL2RenderingContextBase.COMPRESSED_R11_EAC; - -/** @type {number} */ -WebGL2RenderingContextBase.COMPRESSED_SIGNED_R11_EAC; - -/** @type {number} */ -WebGL2RenderingContextBase.COMPRESSED_RG11_EAC; - -/** @type {number} */ -WebGL2RenderingContextBase.COMPRESSED_SIGNED_RG11_EAC; - -/** @type {number} */ -WebGL2RenderingContextBase.COMPRESSED_RGB8_ETC2; - -/** @type {number} */ -WebGL2RenderingContextBase.COMPRESSED_SRGB8_ETC2; - -/** @type {number} */ -WebGL2RenderingContextBase.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2; - -/** @type {number} */ -WebGL2RenderingContextBase.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2; - -/** @type {number} */ -WebGL2RenderingContextBase.COMPRESSED_RGBA8_ETC2_EAC; - -/** @type {number} */ -WebGL2RenderingContextBase.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC; - -/** @type {number} */ WebGL2RenderingContextBase.TEXTURE_IMMUTABLE_FORMAT; /** @type {number} */ @@ -4828,36 +4798,6 @@ WebGL2RenderingContextBase.prototype.TRANSFORM_FEEDBACK_BINDING; /** @type {number} */ -WebGL2RenderingContextBase.prototype.COMPRESSED_R11_EAC; - -/** @type {number} */ -WebGL2RenderingContextBase.prototype.COMPRESSED_SIGNED_R11_EAC; - -/** @type {number} */ -WebGL2RenderingContextBase.prototype.COMPRESSED_RG11_EAC; - -/** @type {number} */ -WebGL2RenderingContextBase.prototype.COMPRESSED_SIGNED_RG11_EAC; - -/** @type {number} */ -WebGL2RenderingContextBase.prototype.COMPRESSED_RGB8_ETC2; - -/** @type {number} */ -WebGL2RenderingContextBase.prototype.COMPRESSED_SRGB8_ETC2; - -/** @type {number} */ -WebGL2RenderingContextBase.prototype.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2; - -/** @type {number} */ -WebGL2RenderingContextBase.prototype.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2; - -/** @type {number} */ -WebGL2RenderingContextBase.prototype.COMPRESSED_RGBA8_ETC2_EAC; - -/** @type {number} */ -WebGL2RenderingContextBase.prototype.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC; - -/** @type {number} */ WebGL2RenderingContextBase.prototype.TEXTURE_IMMUTABLE_FORMAT; /** @type {number} */ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/extra/big-fbos-example.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/extra/big-fbos-example.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/extra/big-fbos-example.html 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/extra/big-fbos-example.html 2017-01-16 01:39:43.000000000 +0000 @@ -157,7 +157,7 @@ var prog = wtu.setupProgram(gl, ["vshader", "fshader"], ["vPosition", "texCoord0"]); WebGLDebugUtils.init(gl); - + gl.disable(gl.DEPTH_TEST); gl.disable(gl.BLEND); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/extra/lots-of-polys-shader-example.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/extra/lots-of-polys-shader-example.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/extra/lots-of-polys-shader-example.html 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/extra/lots-of-polys-shader-example.html 2017-01-16 01:39:43.000000000 +0000 @@ -35,13 +35,13 @@ @@ -82,12 +82,12 @@ var size = 256; var pixels = new Uint8Array(size * size * 4); for (var y = 0; y < size; ++y) { - for (var x = 0; x < size; ++x) { + for (var x = 0; x < size; ++x) { var offset = (y * size + x) * 4; - pixels[offset + 0] = x * 255 / size; - pixels[offset + 1] = y * 255 / size; - pixels[offset + 2] = x * y * 255 / (size * size); - pixels[offset + 3] = 255; + pixels[offset + 0] = x * 255 / size; + pixels[offset + 1] = y * 255 / size; + pixels[offset + 2] = x * y * 255 / (size * size); + pixels[offset + 3] = 255; } } var tex = gl.createTexture(); @@ -151,7 +151,7 @@ v_texCoord = vPosition.xy; #ifdef ADD_TEST_COLORS - v_color = color; + v_color = color; #endif } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/extra/out-of-vram.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/extra/out-of-vram.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/extra/out-of-vram.html 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/extra/out-of-vram.html 2017-01-16 01:39:43.000000000 +0000 @@ -117,7 +117,7 @@ stop("got error: " + wtu.glEnumToString(gl, err)); return; } - // use the texture + // use the texture wtu.clearAndDrawUnitQuad(gl); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/extra/tex-image-with-video-test.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/extra/tex-image-with-video-test.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/extra/tex-image-with-video-test.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/extra/tex-image-with-video-test.js 2017-01-16 01:39:43.000000000 +0000 @@ -43,6 +43,7 @@ var videos = [ { src: "../resources/red-green.mp4" , type: 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"', }, { src: "../resources/red-green.webmvp8.webm", type: 'video/webm; codecs="vp8, vorbis"', }, + { src: "../resources/red-green.webmvp9.webm", type: 'video/webm; codecs="vp9"', }, { src: "../resources/red-green.theora.ogv", type: 'video/ogg; codecs="theora, vorbis"', }, ]; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/glsl-constructor-tests-generator.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/glsl-constructor-tests-generator.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/glsl-constructor-tests-generator.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/glsl-constructor-tests-generator.js 2017-01-16 01:39:44.000000000 +0000 @@ -23,35 +23,35 @@ var GLSLConstructorTestsGenerator = (function() { - + var wtu = WebGLTestUtils; -// Shader code templates +// Shader code templates var constructorVertexTemplate = [ "attribute vec4 vPosition;", "precision mediump int;", "precision mediump float;", - // Colors used to signal correctness of component values comparison + // Colors used to signal correctness of component values comparison "const vec4 green = vec4(0.0, 1.0, 0.0, 1.0);", "const vec4 red = vec4(1.0, 0.0, 0.0, 1.0);", - // Error bound used in comparison of floating point values - "$(errorBound)", + // Error bound used in comparison of floating point values + "$(errorBound)", "varying vec4 vColor;", - + "void main() {", " $(argsList)", - + " $(type) v = $(type)($(argsConstr));", - + " if ($(checkCompVals))", " vColor = green;", " else", " vColor = red;", - + " gl_Position = vPosition;", "}" ].join("\n"); @@ -59,9 +59,9 @@ var passThroughColorFragmentShader = [ "precision mediump float;", - + "varying vec4 vColor;", - + "void main() {", " gl_FragColor = vColor;", "}" @@ -72,18 +72,18 @@ "precision mediump int;", "precision mediump float;", - // Colors used to signal correctness of component values comparison + // Colors used to signal correctness of component values comparison "const vec4 green = vec4(0.0, 1.0, 0.0, 1.0); ", "const vec4 red = vec4(1.0, 0.0, 0.0, 1.0); ", - + // Error bound used in comparison of floating point values - "$(errorBound)", + "$(errorBound)", "void main() {", " $(argsList)", - + " $(type) v = $(type)($(argsConstr));", - + " if ($(checkCompVals))", " gl_FragColor = green;", " else", @@ -92,17 +92,17 @@ ].join("\n"); -// Coding of the different argument types +// Coding of the different argument types // s : scalar // v2 : vec2 // v3 : vec3 // v4 : vec4 // m2 : mat2 -// m3 : mat3 +// m3 : mat3 // m4 : mat4 // Returns the dimensions of the type -// Count of columns, count of rows +// Count of columns, count of rows function getTypeCodeDimensions(typeCode) { switch (typeCode) { case "s": return [1, 1]; @@ -112,18 +112,18 @@ case "m2": return [2, 2]; case "m3": return [3, 3]; case "m4": return [4, 4]; - + default: - wtu.error("GLSLConstructorTestsGenerator.getTypeCodeDimensions(), unknown type code"); + wtu.error("GLSLConstructorTestsGenerator.getTypeCodeDimensions(), unknown type code"); debugger; - } + } }; // Returns the component count for the type code function getTypeCodeComponentCount(typeCode) { var dim = getTypeCodeDimensions(typeCode); - + return dim[0] * dim[1]; } @@ -140,7 +140,7 @@ case "m4": return "mat4"; default: - wtu.error("GLSLConstructorTestsGenerator.getGLSLBaseTypeName(), unknown type code"); + wtu.error("GLSLConstructorTestsGenerator.getGLSLBaseTypeName(), unknown type code"); debugger; } } @@ -151,13 +151,13 @@ switch(targetType[0]) { case 'i': return "int"; case 'b': return "bool"; - + case 'v': case 'm': return "float"; - + default: - wtu.error("GLSLConstructorTestsGenerator.getGLSLScalarType(), unknown target type"); + wtu.error("GLSLConstructorTestsGenerator.getGLSLScalarType(), unknown target type"); debugger; } } @@ -166,16 +166,16 @@ // Returns the scalar prefix for the associated scalar type function getGLSLScalarPrefix(targetType) { switch(targetType[0]) { - case 'i': - case 'b': + case 'i': + case 'b': return targetType[0]; - + case 'v': case 'm': return ''; - + default: - wtu.error("GLSLConstructorTestsGenerator.getGLSLScalarPrefix(), unknown target type"); + wtu.error("GLSLConstructorTestsGenerator.getGLSLScalarPrefix(), unknown target type"); debugger; } } @@ -192,22 +192,22 @@ else return baseType; } - else + else return getGLSLScalarType(targetType); } -// Returns the glsl type of the argument components +// Returns the glsl type of the argument components function getGLSLArgumentComponentType(argTypeCode, targetType) { var scalarType; if (argTypeCode[0] === "m") { - // Matrices are always floats + // Matrices are always floats scalarType = "float"; } - else + else scalarType = getGLSLScalarType(targetType); - + return scalarType; } @@ -217,49 +217,49 @@ if (!isNaN(colSize)) return colSize; - - wtu.error("GLSLConstructorTestsGenerator.getGLSLColumnSize(), invalid target type"); + + wtu.error("GLSLConstructorTestsGenerator.getGLSLColumnSize(), invalid target type"); debugger; } - - -// Returns correct string representation of scalar value + + +// Returns correct string representation of scalar value function getScalarTypeValStr(val, scalarType) { if (val == null) debugger; - + switch (scalarType) { case "float": return val.toFixed(1); case "int": return val; case "bool": return (val === 0) ? "false" : "true"; - + default: - wtu.error("GLSLConstructorTestsGenerator.getScalarTypeValStr(), unknown scalar type"); + wtu.error("GLSLConstructorTestsGenerator.getScalarTypeValStr(), unknown scalar type"); debugger; } } -// Returns true if the glsl type name is a matrix +// Returns true if the glsl type name is a matrix function isGLSLTypeMatrix(type) { return (type.indexOf("mat") !== -1); } -// Returns true if the glsl type name is a vector +// Returns true if the glsl type name is a vector function isGLSLTypeVector(type) { return (type.indexOf("vec") !== -1); } - -// Returns the count of components + +// Returns the count of components function getGLSLTypeComponentCount(type) { var colSize = getGLSLColumnSize(type); - + if (isGLSLTypeMatrix(type)) return colSize * colSize; else - return colSize; + return colSize; } @@ -267,19 +267,19 @@ // Like vec3(1.0, 2.0, 3.0) function getComponentSequenceConstructorExpression(typeCode, firstCompValue, targetType) { var scalarType = getGLSLArgumentComponentType(typeCode, targetType); - + if (typeCode === "s") { // Scalar return getScalarTypeValStr(firstCompValue, scalarType) + ";"; - } + } else { // Structured typeargTypeCode[0] === "m" compCount = getTypeCodeComponentCount(typeCode); var constrExpParts = new Array(compCount); - for (var aa = 0; aa < compCount; ++aa) - constrExpParts[aa] = getScalarTypeValStr(firstCompValue + aa, scalarType); - - return getGLSLArgumentType(typeCode, targetType) + "(" + constrExpParts.join(", ") + ");"; + for (var aa = 0; aa < compCount; ++aa) + constrExpParts[aa] = getScalarTypeValStr(firstCompValue + aa, scalarType); + + return getGLSLArgumentType(typeCode, targetType) + "(" + constrExpParts.join(", ") + ");"; } } @@ -290,67 +290,67 @@ var colRowIx = getColRowIndexFromLinearIndex(compIx, getGLSLColumnSize(targetType)); return "v[" + colRowIx.colIx + "][" + colRowIx.rowIx + "]"; } - else + else return "v[" + compIx + "]"; } - - + + // Returns expression which validates the components set by the constructor expression function getComponentValidationExpression(refCompVals, targetType) { // Early out for invalid arguments - if (refCompVals.length === 0) + if (refCompVals.length === 0) return "false"; - + var scalarType = getGLSLScalarType(targetType); var checkComponentValueParts = new Array(refCompVals.length); for (var cc = 0; cc < refCompVals.length; ++cc) { var val_str = getScalarTypeValStr(refCompVals[cc], scalarType); var comp_sel_exp = getComponentSelectorExpStr(targetType, cc); if (scalarType === "float") { - // Comparison of floating point values with error bound + // Comparison of floating point values with error bound checkComponentValueParts[cc] = "abs(" + comp_sel_exp + " - " + val_str + ") <= errorBound"; } else { // Simple comparison to expected value checkComponentValueParts[cc] = comp_sel_exp + " == " + val_str; } - } - + } + return checkComponentValueParts.join(" && "); } -// Returns substitution parts to turn the shader template into testable shader code +// Returns substitution parts to turn the shader template into testable shader code function getTestShaderParts(targetType, argExp, firstCompValue) { - // glsl code of declarations of arguments + // glsl code of declarations of arguments var argsListParts = new Array(argExp.length); // glsl code of constructor expression var argsConstrParts = new Array(argExp.length); - + // glsl type expression var typeExpParts = new Array(argExp.length); for (var aa = 0; aa < argExp.length; ++aa) { var typeCode = argExp[aa]; var argCompCount = getTypeCodeComponentCount(typeCode); - var argName = "a" + aa; + var argName = "a" + aa; var argType = getGLSLArgumentType(typeCode, targetType); var argConstrExp = argType + " " + argName + " = " + getComponentSequenceConstructorExpression(typeCode, firstCompValue, targetType); - + // Add construction of one argument // Indent if not first argument argsListParts[aa] = ((aa > 0) ? " " : "") + argConstrExp; - + // Add argument name to target type argument list argsConstrParts[aa] = argName; - - // Add type name to type expression + + // Add type name to type expression typeExpParts[aa] = argType; // Increment argument component value so all argument component arguments have a unique value firstCompValue += argCompCount; } - + return { argsList: argsListParts.join("\n") + "\n", argsConstr: argsConstrParts.join(", "), @@ -366,7 +366,7 @@ var matArray = new Array(size); for (var aa = 0; aa < size; ++aa) matArray[aa] = val; - + return matArray; } @@ -376,16 +376,16 @@ var matArray = new Array(size); for (var aa = 0; aa < size; ++aa) matArray[aa] = start + aa; - + return matArray; } // Utility functions to manipulate the array of reference values if the target type is a matrix -// Returns an array which is the column order layout of a square matrix where the diagonal is set to a specified value +// Returns an array which is the column order layout of a square matrix where the diagonal is set to a specified value function matCompArraySetDiagonal(matArray, diagVal) { - // The entries for the diagonal start at array index 0 and increase + // The entries for the diagonal start at array index 0 and increase // by column size + 1 var colSize = Math.round(Math.sqrt(matArray.length)); var dIx = 0; @@ -394,57 +394,57 @@ dIx += (colSize + 1); } while (dIx < colSize * colSize); - + return matArray; } -// Returns an array which contains the values of an identity matrix read out in column order +// Returns an array which contains the values of an identity matrix read out in column order function matCompArrayCreateDiagonalMatrix(colSize, diagVal) { var size = colSize * colSize; var matArray = new Array(size); for (var aa = 0; aa < size; ++aa) matArray[aa] = 0; - - return matCompArraySetDiagonal(matArray, diagVal); + + return matCompArraySetDiagonal(matArray, diagVal); } // Returns the column and row index from the linear index if the components of the matrix are stored in column order in an array -// in a one dimensional array in column order +// in a one dimensional array in column order function getColRowIndexFromLinearIndex(linIx, colSize) { - return { + return { colIx: Math.floor(linIx / colSize), rowIx: linIx % colSize }; -} - - -// Returns the linear index for matrix column and row index for a specified matrix size +} + + +// Returns the linear index for matrix column and row index for a specified matrix size function getLinearIndexFromColRowIndex(rowColIx, colSize) { return rowColIx.colIx * colSize + rowColIx.rowIx; } - - -// Returns a matrix set from another matrix + + +// Returns a matrix set from another matrix function matCompArraySetMatrixFromMatrix(dstColSize, srcMatArray) { // Overwrite components from destination with the source component values at the same col, row coordinates var dstMatArray = matCompArrayCreateDiagonalMatrix(dstColSize, 1); - + var srcColSize = Math.round(Math.sqrt(srcMatArray.length)); - + for (var c_ix = 0; c_ix < srcMatArray.length; ++c_ix) { var srcMatIx = getColRowIndexFromLinearIndex(c_ix, srcColSize); - if (srcMatIx.colIx < dstColSize && srcMatIx.rowIx < dstColSize) { + if (srcMatIx.colIx < dstColSize && srcMatIx.rowIx < dstColSize) { // Source matrix coordinates are valid destination matrix coordinates dstMatArray[getLinearIndexFromColRowIndex(srcMatIx, dstColSize)] = srcMatArray[c_ix]; - } - } - - return dstMatArray; + } + } + + return dstMatArray; } - + // Returns the glsl code to verify if the components are set correctly // and the message to display for the test function getConstructorExpressionInfo(targetType, argExp, firstCompValue) { @@ -452,15 +452,15 @@ var argCompCounts = new Array(argExp.length); for (var aa = 0; aa < argExp.length; ++aa) { argCompCounts[aa] = getTypeCodeComponentCount(argExp[aa]); - argCompCountsSum += argCompCounts[aa]; + argCompCountsSum += argCompCounts[aa]; } - - var targetCompCount = getGLSLTypeComponentCount(targetType); + + var targetCompCount = getGLSLTypeComponentCount(targetType); var refCompVals; var testMsg; - var valid; - + var valid; + if (argCompCountsSum === 0) { // A constructor needs at least one argument refCompVals = []; @@ -468,7 +468,7 @@ valid = false; } else { - if (isGLSLTypeVector(targetType)) { + if (isGLSLTypeVector(targetType)) { if (argCompCountsSum === 1) { // One scalar argument // Vector constructor with one scalar argument set all components to the same value @@ -488,38 +488,38 @@ // argCompCountsSum >= targetCompCount // All components set var lastArgFirstCompIx = argCompCountsSum - argCompCounts[argCompCounts.length - 1]; - + if (lastArgFirstCompIx < targetCompCount) { // First component of last argument is used refCompVals = getArrayWithIncreasingValues(targetCompCount, firstCompValue); testMsg = "valid"; valid = true; } - else { + else { // First component of last argument is not used refCompVals = []; testMsg = "invalid (unused argument)"; valid = false; - } + } } } - } + } else { // Matrix target type if (argCompCountsSum === 1) { // One scalar argument // Matrix constructors with one scalar set all components on the diagonal to the same value - // All other components are set to zero + // All other components are set to zero refCompVals = matCompArrayCreateDiagonalMatrix(Math.round(Math.sqrt(targetCompCount)), firstCompValue); testMsg = "valid (diagonal components set to the same value, off-diagonal components set to zero)"; - valid = true; + valid = true; } else { // Not one scalar argument if (argExp.length === 1 && argExp[0][0] === "m") { // One single matrix argument var dstColSize = getGLSLColumnSize(targetType); - refCompVals = matCompArraySetMatrixFromMatrix(dstColSize, getArrayWithIncreasingValues(getTypeCodeComponentCount(argExp[0]), firstCompValue)); + refCompVals = matCompArraySetMatrixFromMatrix(dstColSize, getArrayWithIncreasingValues(getTypeCodeComponentCount(argExp[0]), firstCompValue)); testMsg = "valid, components at corresponding col, row indices are set from argument, other components are set from identity matrix"; valid = true; } @@ -528,10 +528,10 @@ // Can be treated in the same manner // Arguments can not be of type matrix var matFound = false; - for (var aa = 0; aa < argExp.length; ++aa) + for (var aa = 0; aa < argExp.length; ++aa) if (argExp[aa][0] === "m") matFound = true; - + if (matFound) { refCompVals = []; testMsg = "invalid, argument list greater than one contains matrix type"; @@ -547,32 +547,32 @@ // argCompCountsSum >= targetCompCount // All components set var lastArgFirstCompIx = argCompCountsSum - argCompCounts[argCompCounts.length - 1]; - + if (lastArgFirstCompIx < targetCompCount) { // First component of last argument is used refCompVals = getArrayWithIncreasingValues(targetCompCount, firstCompValue); testMsg = "valid"; valid = true; } - else { + else { // First component of last argument is not used refCompVals = []; testMsg = "invalid (unused argument)"; valid = false; - } + } } } } } } } - - // Check if no case is missed + + // Check if no case is missed if (testMsg == null || valid == null) { - wtu.error("GLSLConstructorTestsGenerator.getConstructorExpressionInfo(), info not set"); + wtu.error("GLSLConstructorTestsGenerator.getConstructorExpressionInfo(), info not set"); debugger; } - + return { refCompVals: refCompVals, testMsg: testMsg, @@ -589,18 +589,18 @@ // 0 and 1 are values used by matrix constructed from a matrix or a single scalar firstCompValue = 2; } - + var argCode = getTestShaderParts (targetType, argExp, firstCompValue); var expInfo = getConstructorExpressionInfo(targetType, argExp, firstCompValue); - + var substitutions = { - type: targetType, + type: targetType, errorBound: (getGLSLScalarType(targetType) === "float") ? "const float errorBound = 1.0E-5;" : "", argsList: argCode.argsList, - argsConstr: argCode.argsConstr, + argsConstr: argCode.argsConstr, checkCompVals: getComponentValidationExpression(expInfo.refCompVals, targetType) }; - + return [ { // Test constructor argument list in vertex shader vShaderSource: wtu.replaceParams(constructorVertexTemplate, substitutions), @@ -618,7 +618,7 @@ passMsg: "Fragment shader : " + argCode.typeExp + ", " + expInfo.testMsg, render: expInfo.valid } - ]; + ]; } @@ -659,35 +659,35 @@ nextSeq[aa] = currArg; } } - + if (overflow) { - nextSeq.push(typeCodeIncrementer.first); - } + nextSeq.push(typeCodeIncrementer.first); + } } - - return nextSeq; + + return nextSeq; } - + // Returns true if two argument expressions are equal function areArgExpEqual(expA, expB) { if (expA.length !== expB.length) return false; - - for (var aa = 0; aa < expA.length; ++aa) + + for (var aa = 0; aa < expA.length; ++aa) if (expA[aa] !== expB[aa]) return false; - + return true; } -// Returns true if first argument expression is smaller -// (comes before the second one in iterating order) -// compared to the second argument expression +// Returns true if first argument expression is smaller +// (comes before the second one in iterating order) +// compared to the second argument expression function isArgExpSmallerOrEqual(argExpA, argExpB) { var aLen = argExpA.length; - var bLen = argExpB.length; + var bLen = argExpB.length; if (aLen !== bLen) return (aLen < bLen); @@ -695,7 +695,7 @@ for (var aa = aLen - 1; aa >= 0; --aa) { var argA = argExpA[aa]; var argB = argExpB[aa]; - + if (argA !== argB) { var aOrder = typeCodeIncrementer[argA].order; var bOrder = typeCodeIncrementer[argB].order; @@ -703,17 +703,17 @@ return (aOrder < bOrder); } } - - // Argument type expressions are equal + + // Argument type expressions are equal return true; } -// Returns the next argument expression from sequence set +// Returns the next argument expression from sequence set // Returns null if end is reached function getNextArgumentExpression(testExp, testSet) { var testInterval = testSet[testExp.ix]; - + if (areArgExpEqual(testExp.argExp, testInterval[1])) { // End of current interval reached if (testExp.ix === testSet.length - 1) { @@ -723,7 +723,7 @@ else { // Return first argument expression of next interval var nextIx = testExp.ix + 1; - return { ix: nextIx, argExp: testSet[nextIx][0] }; + return { ix: nextIx, argExp: testSet[nextIx][0] }; } } else { @@ -733,27 +733,27 @@ } -// Returns an array of the parts in the string separated by commas and with the white space trimmed +// Returns an array of the parts in the string separated by commas and with the white space trimmed function convertCsvToArray(str) { // Checks type codes in input function checkInput(el, ix, arr) { var typeCode = el.trim(); if (!(typeCode in typeCodeIncrementer) && typeCode !== "first") { - wtu.error("GLSLConstructorTestsGenerator.convertCsvToArray(), unknown type code" + typeCode); - debugger; + wtu.error("GLSLConstructorTestsGenerator.convertCsvToArray(), unknown type code" + typeCode); + debugger; } - arr[ix] = typeCode; - } - + arr[ix] = typeCode; + } + var spArr = str.split(","); - + // Convert empty string to empty array if (spArr.length === 1 && spArr[0].trim() === "") spArr = []; - + spArr.forEach(checkInput); - + return spArr; } @@ -769,13 +769,13 @@ // Check if interval is valid if (!isArgExpSmallerOrEqual(begin, end)) { - wtu.error("GLSLConstructorTestsGenerator.processInputs(), interval not valid"); - debugger; + wtu.error("GLSLConstructorTestsGenerator.processInputs(), interval not valid"); + debugger; } - - testSet[tt] = [ begin, end ]; + + testSet[tt] = [ begin, end ]; } - + return testSet; } @@ -783,21 +783,21 @@ /** * Returns list of test cases for vector types * All combinations of arguments up to one unused argument of one component are tested - * @param {targetType} Name of target type to test the constructor expressions on + * @param {targetType} Name of target type to test the constructor expressions on * @param {testSet} Set of intervals of argument sequences to test */ function getConstructorTests(targetType, testSequences) { // List of tests to return var testInfos = []; - // List of argument types + // List of argument types var testSet = processInputs(testSequences); var testExp = { ix: 0, argExp: testSet[0][0] }; - + do { - // Add one vertex shader test case and one fragment shader test case + // Add one vertex shader test case and one fragment shader test case testInfos = testInfos.concat(getVertexAndFragmentShaderTestCase(targetType, testExp.argExp)); - + // Generate next argument expression testExp = getNextArgumentExpression(testExp, testSet); } @@ -805,7 +805,7 @@ return testInfos; } - + // Returns default test argument expression set // For details on input format : see bottom of file @@ -816,14 +816,14 @@ case "bvec2": return [ // No arguments and all single argument expressions - " - m4", - + " - m4", + // All two argument expressions with a scalar as second argument "s, s - m4, s", - + // All two arguments expressions with a scalar as first argument "s, v2", "s, v3", "s, v4", "s, m2", "s, m3", "s, m4", - + // Three argument expression "s, s, s" ]; @@ -833,20 +833,20 @@ case "bvec3": return [ // No arguments and all single argument expressions - " - m4", - + " - m4", + // All two argument expressions with a scalar as second argument "s, s - m4, s", - + // All two argument expressions with a scalar as first argument "s, v2", "s, v3", "s, v4", "s, m2", "s, m3", "s, m4", - + // All three argument expressions with two scalars as second and third argument "s, s, s - m4, s, s", - - // All three argument expressions with two scalars as first and second argument + + // All three argument expressions with two scalars as first and second argument "s, s, v2", "s, s, v3", "s, s, v4", "s, s, m2", "s, s, m3", "s, s, m4", - + // Four argument expression "s, s, s, s" ]; @@ -857,26 +857,26 @@ case "mat2": return [ // No arguments and all single argument expressions - " - m4", - + " - m4", + // All two argument expressions with a scalar as second argument "s, s - m4, s", - + // All two argument expressions with a scalar as first argument "s, v2", "s, v3", "s, v4", "s, m2", "s, m3", "s, m4", - + // All three argument expressions with two scalars as second and third argument "s, s, s - m4, s, s", - - // All three argument expressions with two scalars as first and second argument + + // All three argument expressions with two scalars as first and second argument "s, s, v2", "s, s, v3", "s, s, v4", "s, s, m2", "s, s, m3", "s, s, m4", // All four argument expressions with three scalars as second, third and fourth argument "s, s, s, s - m4, s, s, s", - - // All four argument expressions with three scalars as first, second and third argument + + // All four argument expressions with three scalars as first, second and third argument "s, s, s, v2", "s, s, s, v3", "s, s, s, v4", "s, s, s, m2", "s, s, s, m3", "s, s, s, m4", - + // Five argument expression "s, s, s, s, s" ]; @@ -885,17 +885,17 @@ case "mat4": return [ // No arguments and all single argument expressions - " - m4", - + " - m4", + // All two argument expressions with a scalar as second argument "s, s - m4, s", - + // All two argument expressions with a scalar as first argument "s, v2", "s, v3", "s, v4", "s, m2", "s, m3", "s, m4", // Several argument sequences "v4, s, v4", "v4, s, v3, v2", "v4, v4, v3, v2", "v4, v4, v4, v4", "v2, v2, v2, v2, v2", "v2, v2, v2, v2, v2, v2, v2, v2", - "v3, v3, v3", "v3, v3, v3, s", "v3, v3, v3, v3, v3, s", "v3, v3, v3, v3, v3, s, s", + "v3, v3, v3", "v3, v3, v3, s", "v3, v3, v3, v3, v3, s", "v3, v3, v3, v3, v3, s, s", ]; } } @@ -913,24 +913,24 @@ // Input is an array of intervals of argument types // The generated test argument sequences are from (including) the lower interval boundary // until (including) the upper boundary -// Coding and order of the different argument types : +// Coding and order of the different argument types : // s : scalar // v2 : vec2 // v3 : vec3 // v4 : vec4 // m2 : mat2 -// m3 : mat3 +// m3 : mat3 // m4 : mat4 // One interval is put in one string // Low and high bound are separated by a dash. // If there is no dash it is regarded as an interval of one expression -// The individual argument codes are separated by commas +// The individual argument codes are separated by commas // The individual arguments are incremented from left to right // The left most argument is the one which is incremented first -// Once the left most arguments wraps the second argument is increased +// Once the left most arguments wraps the second argument is increased // Examples : // "s - m4" : All single arguments from scalar up to (including) mat4 -// "m2, s - m4, s" : All two argument expressions with a matrix argument as first argument and a scalar as second argument +// "m2, s - m4, s" : All two argument expressions with a matrix argument as first argument and a scalar as second argument // " - m4, m4" : The empty argument, all one arguments and all two argument expressions // "m2, s, v3, m4" : One 4 argument expression : mat2, scalar, vec3, mat4 diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/glsl-generator.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/glsl-generator.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/glsl-generator.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/glsl-generator.js 2017-01-16 01:39:44.000000000 +0000 @@ -1103,13 +1103,13 @@ * float, vec2, vec3, vec4 in that order. * * tolerance: (optional) - * Allow some tolerance in the comparisons. The tolerance is applied to - * both vertex and fragment shaders. The default tolerance is 0, meaning + * Allow some tolerance in the comparisons. The tolerance is applied to + * both vertex and fragment shaders. The default tolerance is 0, meaning * the values have to be identical. * * fragmentTolerance: (optional) - * Specify a tolerance which only applies to fragment shaders. The - * fragment-only tolerance will override the shared tolerance for + * Specify a tolerance which only applies to fragment shaders. The + * fragment-only tolerance will override the shared tolerance for * fragment shaders if both are specified. Fragment shaders usually * use mediump float precision so they sometimes require higher tolerance * than vertex shaders which use highp by default. @@ -1229,15 +1229,15 @@ * * extra: (optional) * Extra GLSL code inserted at the top of each test's shader. - * + * * tolerance: (optional) - * Allow some tolerance in the comparisons. The tolerance is applied to - * both vertex and fragment shaders. The default tolerance is 0, meaning + * Allow some tolerance in the comparisons. The tolerance is applied to + * both vertex and fragment shaders. The default tolerance is 0, meaning * the values have to be identical. * * fragmentTolerance: (optional) - * Specify a tolerance which only applies to fragment shaders. The - * fragment-only tolerance will override the shared tolerance for + * Specify a tolerance which only applies to fragment shaders. The + * fragment-only tolerance will override the shared tolerance for * fragment shaders if both are specified. Fragment shaders usually * use mediump float precision so they sometimes require higher tolerance * than vertex shaders which use highp. diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/js-test-pre.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/js-test-pre.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/js-test-pre.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/js-test-pre.js 2017-01-16 01:39:44.000000000 +0000 @@ -200,7 +200,7 @@ if (!quietMode()) _addSpan(msg); if (_jsTestPreVerboseLogging) { - _bufferedLogToConsole(msg); + _bufferedLogToConsole(msg); } } @@ -231,7 +231,7 @@ if (!quietMode()) _addSpan('PASS ' + escapeHTML(msg) + ''); if (_jsTestPreVerboseLogging) { - _bufferedLogToConsole('PASS ' + msg); + _bufferedLogToConsole('PASS ' + msg); } } @@ -277,12 +277,12 @@ function testPassedOptions(msg, addSpan) { if (addSpan && !quietMode()) - { + { reportTestResultsToHarness(true, _currentTestName + ": " + msg); _addSpan('PASS ' + escapeHTML(_currentTestName) + ": " + escapeHTML(msg) + ''); - } + } if (_jsTestPreVerboseLogging) { - _bufferedLogToConsole('PASS ' + msg); + _bufferedLogToConsole('PASS ' + msg); } } @@ -294,12 +294,12 @@ function testSkippedOptions(msg, addSpan) { if (addSpan && !quietMode()) - { + { reportSkippedTestResultsToHarness(true, _currentTestName + ": " + msg); _addSpan('SKIP ' + escapeHTML(_currentTestName) + ": " + escapeHTML(msg) + ''); - } + } if (_jsTestPreVerboseLogging) { - _bufferedLogToConsole('SKIP' + msg); + _bufferedLogToConsole('SKIP' + msg); } } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/clipping-wide-points.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/clipping-wide-points.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/clipping-wide-points.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/clipping-wide-points.js 2017-01-16 01:39:44.000000000 +0000 @@ -0,0 +1,109 @@ +/* +** Copyright (c) 2016 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +'use strict'; +description("This test ensures clipping works with wide points whose centers are out of the viewport"); + +var wtu = WebGLTestUtils; +var gl = wtu.create3DContext("testbed", undefined, contextVersion); + +var pointSize; + +function setupProgram() { + var vs = "attribute vec4 pos;" + + "uniform float pointSize; " + + "void main() {" + + " gl_PointSize = pointSize;" + + " gl_Position = pos;" + + "}"; + var fs = "precision mediump float;" + + "void main() {" + + " gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);" + + "}"; + var program = wtu.setupProgram(gl, [vs, fs], ['pos']); + if (program) { + var loc = gl.getUniformLocation(program, 'pointSize'); + gl.uniform1f(loc, pointSize); + gl.vertexAttribPointer(0, 4, gl.FLOAT, false, 0, 0); + gl.enableVertexAttribArray(0); + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors after setting up program"); + } + return program; +} + +function runOneTestCase(vertex) { + debug(""); + debug("testing point at (" + vertex[0] + ", " + vertex[1] + ", " + vertex[2] + ")"); + var data = new Float32Array(vertex); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, data); + + gl.clear(gl.COLOR_BUFFER_BIT); + gl.drawArrays(gl.POINTS, 0, 1); + wtu.checkCanvasRect(gl, 0, 0, 1, 1, [0, 255, 0]); + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors after running one test case"); +} + +function runTests() { + if (!gl) { + testFailed("context does not exist"); + return; + } + + var range = gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE); + if (range[1] < 2.0) { + testPassed("ALIASDED_POINT_SIZE_RANGE less than 2"); + return; + } + pointSize = 2.0; + + var data = new Float32Array(4); + var buffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, buffer); + gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW); + + var program = setupProgram(); + if (!program) { + testFailed("fail to set up program"); + return; + } + + gl.disable(gl.BLEND); + gl.disable(gl.DITHER); + gl.disable(gl.DEPTH_TEST); + + gl.clearColor(1.0, 0.0, 0.0, 1.0); + + var vertices = [ + [ 0.99, 0.5, 0.0, 1.0 ], + [ 1.01, 0.5, 0.0, 1.0 ], + [ 0.5, 0.99, 0.0, 1.0 ], + [ 0.5, 1.01, 0.0, 1.0 ], + ]; + for (var idx = 0; idx < vertices.length; ++idx) { + runOneTestCase(vertices[idx]); + } +} + +runTests(); +debug(""); +var successfullyParsed = true; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/compound-assignment-type-combination.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/compound-assignment-type-combination.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/compound-assignment-type-combination.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/compound-assignment-type-combination.js 2017-01-16 01:39:44.000000000 +0000 @@ -0,0 +1,150 @@ +/* +** Copyright (c) 2014 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +'use strict'; + +// ESSL 1.00 spec section 5.8 (also ESSL 3.00 spec section 5.8): +// "The l-value and the expression must satisfy the semantic requirements of both op and equals (=)" +// In the semantic requirements of assignment (=): +// "The lvalue-expression and rvalue-expression must have the same type" + +var runTest = function(contextVersion) { + var vertexTemplateESSL1 = [ + 'precision mediump float;', + + 'uniform $(rtype) ur;', + 'uniform $(ltype) ul;', + + 'void main() {', + ' $(ltype) a = ul;', + ' a $(op) ur;', + ' gl_Position = vec4(float(a$(ltypeToScalar)));', + '}' + ].join('\n'); + + var vertexTemplateESSL3 = [ + '#version 300 es', + vertexTemplateESSL1 + ].join('\n'); + + var fragmentTemplateESSL1 = [ + 'precision mediump float;', + + 'uniform $(rtype) ur;', + 'uniform $(ltype) ul;', + + 'void main() {', + ' $(ltype) a = ul;', + ' a $(op) ur;', + ' gl_FragColor = vec4(float(a$(ltypeToScalar)));', + '}' + ].join('\n'); + + var fragmentTemplateESSL3 = [ + '#version 300 es', + 'out mediump vec4 my_FragColor;', + fragmentTemplateESSL1 + ].join('\n').replace('gl_FragColor', 'my_FragColor'); + + var isNonSquareMatrix = function(typeStr) { + return typeStr.substring(0, 3) == 'mat' && + typeStr.length > 5 && + typeStr[3] != typeStr[5]; + } + + var vsTemplate = contextVersion < 2 ? vertexTemplateESSL1 : vertexTemplateESSL3; + var fsTemplate = contextVersion < 2 ? fragmentTemplateESSL1 : fragmentTemplateESSL3; + + var wtu = WebGLTestUtils; + + var tests = []; + + var baseTypes = ['float', 'int']; + var vecTypes = [['vec2', 'vec3', 'vec4', 'mat2', 'mat3', 'mat4'], ['ivec2', 'ivec3', 'ivec4']]; + if (contextVersion >= 2) { + vecTypes[0] = ['vec2', 'vec3', 'vec4', 'mat2x2', 'mat3x3', 'mat4x4', 'mat2x3', 'mat2x4', 'mat3x2', 'mat3x4', 'mat4x2', 'mat4x3']; + } + var ops = ['+=', '-=', '*=', '/=']; + + var fs, vs; + for (var k = 0; k < ops.length; ++k) { + var op = ops[k]; + for (var i = 0; i < baseTypes.length; ++i) { + var baseType = baseTypes[i]; + for (var j = 0; j < vecTypes[i].length; ++j) { + var vecType = vecTypes[i][j]; + var vecTypeToScalar = vecType.substring(0, 3) == 'mat' ? '[0].x' : '.x'; + + var pushTest = function(ltype, rtype, ltypeToScalar, expectSuccess) { + vs = wtu.replaceParams(vsTemplate, {ltype: ltype, rtype: rtype, ltypeToScalar: ltypeToScalar, op: op}); + fs = wtu.replaceParams(fsTemplate, {ltype: ltype, rtype: rtype, ltypeToScalar: ltypeToScalar, op: op}); + tests.push({ + vShaderSource: vs, + vShaderSuccess: expectSuccess, + linkSuccess: expectSuccess, + passMsg: ltype + " " + op + " " + rtype + " in a vertex shader should " + (expectSuccess ? "succeed." : "fail.") + }); + tests.push({ + fShaderSource: fs, + fShaderSuccess: expectSuccess, + linkSuccess: expectSuccess, + passMsg: ltype + " " + op + " " + rtype + " in a fragment shader should " + (expectSuccess ? "succeed." : "fail.") + }); + } + + // "scalar op= vector" is not okay, since the result of op is a vector, + // which can't be assigned to a scalar. + pushTest(baseType, vecType, '', false); + + if (j > 0) { + var vecType2 = vecTypes[i][j - 1]; + // "vector1 op= vector2" is not okay when vector1 and vector2 have + // non-matching dimensions. + pushTest(vecType, vecType2, vecTypeToScalar, false); + } + + // "vector op= scalar" is okay. + pushTest(vecType, baseType, vecTypeToScalar, true); + + // vecX *= matX is okay (effectively, this treats vector as a row vector). + if (vecType.substring(0, 3) == 'vec' && op == '*=') { + pushTest(vecType, 'mat' + vecType[3], vecTypeToScalar, true); + } + + if (op != '*=' || !isNonSquareMatrix(vecType)) { + // "vector1 op= vector2" is okay when vector1 and vector2 have the same + // type (does a component-wise operation or matrix multiplication). + pushTest(vecType, vecType, vecTypeToScalar, true); + } else { + // non-square matrices can only be compound multiplied with a square matrix. + pushTest(vecType, vecType, vecTypeToScalar, false); + pushTest(vecType, 'mat' + vecType[3], vecTypeToScalar, true); + } + } + } + } + + GLSLConformanceTester.runTests(tests, contextVersion); +} + +var successfullyParsed = true; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/instanceof-test.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/instanceof-test.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/instanceof-test.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/instanceof-test.js 2017-01-16 01:39:44.000000000 +0000 @@ -66,13 +66,13 @@ if (contextVersion > 1) { shouldBeTrue('gl.createQuery() instanceof WebGLQuery'); checkGLError("createQuery") - + shouldBeTrue('gl.createSampler() instanceof WebGLSampler'); checkGLError("createSampler") - + shouldBeTrue('gl.createTransformFeedback() instanceof WebGLTransformFeedback'); checkGLError("createTransformFeedback") - + shouldBeTrue('gl.createVertexArray() instanceof WebGLVertexArrayObject'); checkGLError("createVertexArray") } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-canvas.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-canvas.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-canvas.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-canvas.js 2017-01-16 01:39:44.000000000 +0000 @@ -116,7 +116,7 @@ } } testPassed("Pixel values in source canvas remain unchanged after canvas used in webgl texture."); - } + } function runOneIteration(canvas, useTexSubImage2D, flipY, program, bindingTarget, opt_texture, opt_fontTest) { @@ -164,13 +164,24 @@ var width = gl.canvas.width; var height = gl.canvas.height; + var halfWidth = Math.floor(width / 2); var halfHeight = Math.floor(height / 2); var top = flipY ? 0 : (height - halfHeight); var bottom = flipY ? (height - halfHeight) : 0; var loc; + var skipCorner = false; if (bindingTarget == gl.TEXTURE_CUBE_MAP) { loc = gl.getUniformLocation(program, "face"); + switch (gl[pixelFormat]) { + case gl.RED_INTEGER: + case gl.RG_INTEGER: + case gl.RGB_INTEGER: + case gl.RGBA_INTEGER: + // https://github.com/KhronosGroup/WebGL/issues/1819 + skipCorner = true; + break; + } } for (var tt = 0; tt < targets.length; ++tt) { @@ -194,16 +205,16 @@ testFailed("font missing"); }, function() { - testPassed("font renderered"); + testPassed("font rendered"); }, debug); } else { // Check the top and bottom halves and make sure they have the right color. debug("Checking " + (flipY ? "top" : "bottom")); - wtu.checkCanvasRect(gl, 0, bottom, width, halfHeight, redColor, + wtu.checkCanvasRect(gl, 0, bottom, (skipCorner && flipY) ? halfWidth : width, halfHeight, redColor, "shouldBe " + redColor); debug("Checking " + (flipY ? "bottom" : "top")); - wtu.checkCanvasRect(gl, 0, top, width, halfHeight, greenColor, + wtu.checkCanvasRect(gl, 0, top, (skipCorner && !flipY) ? halfWidth : width, halfHeight, greenColor, "shouldBe " + greenColor); } @@ -279,6 +290,7 @@ } // for the first 2 iterations always make a new texture. if (count > 2) { + gl.deleteTexture(texture); texture = undefined; } ++caseNdx; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-canvas-sub-rectangle.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-canvas-sub-rectangle.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-canvas-sub-rectangle.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-canvas-sub-rectangle.js 2017-01-16 01:39:44.000000000 +0000 @@ -0,0 +1,329 @@ +/* +** Copyright (c) 2016 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +function generateTest(internalFormat, pixelFormat, pixelType, prologue, resourcePath, defaultContextVersion) { + var wtu = WebGLTestUtils; + var tiu = TexImageUtils; + var gl = null; + var successfullyParsed = false; + var realRedColor = [255, 0, 0]; + var realGreenColor = [0, 255, 0]; + var realBlueColor = [0, 0, 255]; + var realCyanColor = [0, 255, 255]; + var redColor = realRedColor; + var greenColor = realGreenColor; + var blueColor = realBlueColor; + var cyanColor = realCyanColor; + + function init() + { + description('Verify texImage2D and texSubImage2D code paths taking a sub-rectangle of a canvas (' + internalFormat + '/' + pixelFormat + '/' + pixelType + ')'); + + // Set the default context version while still allowing the webglVersion URL query string to override it. + wtu.setDefault3DContextVersion(defaultContextVersion); + + // The sub-rectangle tests only apply to WebGL 2.0 for the + // time being, though the tests for the WebGL 1.0 + // format/internal format/type combinations are generated into + // conformance/textures/. + if (wtu.getDefault3DContextVersion() < 2) { + debug('Test only applies to WebGL 2.0'); + finishTest(); + return; + } + + gl = wtu.create3DContext("example", { preserveDrawingBuffer: true }); + + if (!prologue(gl)) { + finishTest(); + return; + } + + switch (gl[pixelFormat]) { + case gl.RED: + case gl.RED_INTEGER: + greenColor = [0, 0, 0]; + blueColor = [0, 0, 0]; + cyanColor = [0, 0, 0]; + break; + + case gl.RG: + case gl.RG_INTEGER: + blueColor = [0, 0, 0]; + cyanColor = [0, 255, 0]; + break; + + default: + break; + } + + gl.clearColor(0,0,0,1); + gl.clearDepth(1); + gl.disable(gl.BLEND); + + var canvas2d = document.createElement('canvas'); + runTest(canvas2d, setupSourceCanvas2D, '2D-rendered canvas'); + + var canvasWebGL = document.createElement('canvas'); + runTest(canvasWebGL, setupSourceCanvasWebGL, 'WebGL-rendered canvas'); + + finishTest(); + } + + function fillStyle2D(ctx, color) { + ctx.fillStyle = 'rgb(' + color[0] + ', ' + color[1] + ', ' + color[2] + ')'; + } + + function setupSourceCanvas2D(canvas) { + var width = canvas.width; + var height = canvas.height; + var halfWidth = Math.floor(width / 2); + var halfHeight = Math.floor(height / 2); + + var ctx = canvas.getContext('2d'); + // Always use the same pattern for this test: four quadrants: + // red green + // blue cyan + // Handle odd-sized canvases + fillStyle2D(ctx, realRedColor); + ctx.fillRect(0, 0, halfWidth, halfHeight); + fillStyle2D(ctx, realGreenColor); + ctx.fillRect(halfWidth, 0, width - halfWidth, halfHeight); + fillStyle2D(ctx, realBlueColor); + ctx.fillRect(0, halfHeight, halfWidth, height - halfHeight); + fillStyle2D(ctx, realCyanColor); + ctx.fillRect(halfWidth, halfHeight, width - halfWidth, height - halfHeight); + } + + function clearColorWebGL(ctx, color) { + ctx.clearColor(color[0] / 255.0, color[1] / 255.0, color[2] / 255.0, 1.0); + ctx.clear(ctx.COLOR_BUFFER_BIT); + } + + function setupSourceCanvasWebGL(canvas) { + var width = canvas.width; + var height = canvas.height; + var halfWidth = Math.floor(width / 2); + var halfHeight = Math.floor(height / 2); + + var ctx = canvas.getContext('webgl'); + // Always use the same pattern for this test: four quadrants: + // red green + // blue cyan + // Handle odd-sized canvases + + ctx.viewport(0, 0, width, height); + ctx.enable(ctx.SCISSOR_TEST); + // OpenGL origin is lower-left + ctx.scissor(0, 0, halfWidth, halfHeight); + clearColorWebGL(ctx, realBlueColor); + ctx.scissor(halfWidth, 0, width - halfWidth, halfHeight); + clearColorWebGL(ctx, realCyanColor); + ctx.scissor(0, halfHeight, halfWidth, height - halfHeight); + clearColorWebGL(ctx, realRedColor); + ctx.scissor(halfWidth, halfHeight, width - halfWidth, height - halfHeight); + clearColorWebGL(ctx, realGreenColor); + } + + function runOneIteration(sourceDescription, useTexSubImage2D, flipY, + canvas, canvasSize, canvasSetupFunction, + sourceSubRectangle, expected, + bindingTarget, program) + { + sourceSubRectangleString = ''; + if (sourceSubRectangle) { + sourceSubRectangleString = ', sourceSubRectangle=' + sourceSubRectangle; + } + debug(''); + debug('Testing ' + sourceDescription + ' with ' + + (useTexSubImage2D ? 'texSubImage2D' : 'texImage2D') + + ', flipY=' + flipY + + ', bindingTarget=' + (bindingTarget == gl.TEXTURE_2D ? 'TEXTURE_2D' : 'TEXTURE_CUBE_MAP') + + sourceSubRectangleString); + + var loc; + var skipCorner = false; + if (bindingTarget == gl.TEXTURE_CUBE_MAP) { + loc = gl.getUniformLocation(program, "face"); + switch (gl[pixelFormat]) { + case gl.RED_INTEGER: + case gl.RG_INTEGER: + case gl.RGB_INTEGER: + case gl.RGBA_INTEGER: + // https://github.com/KhronosGroup/WebGL/issues/1819 + skipCorner = true; + break; + } + } + + if (skipCorner && sourceSubRectangle && + sourceSubRectangle[2] == 1 && sourceSubRectangle[3] == 1) { + debug("Test skipped, see WebGL#1819"); + return; + } + + // Initialize the contents of the source canvas. + var width = canvasSize[0]; + var height = canvasSize[1]; + var halfWidth = Math.floor(width / 2); + var halfHeight = Math.floor(height / 2); + canvas.width = width; + canvas.height = height; + canvasSetupFunction(canvas); + + // Upload the source canvas to the texture and draw it to a quad. + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); + // Enable writes to the RGBA channels + gl.colorMask(1, 1, 1, 0); + var texture = gl.createTexture(); + // Bind the texture to texture unit 0 + gl.bindTexture(bindingTarget, texture); + // Set up texture parameters + gl.texParameteri(bindingTarget, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(bindingTarget, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + // Set up pixel store parameters + gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false); + wtu.failIfGLError(gl, 'gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);'); + var targets = [gl.TEXTURE_2D]; + if (bindingTarget == gl.TEXTURE_CUBE_MAP) { + targets = [gl.TEXTURE_CUBE_MAP_POSITIVE_X, + gl.TEXTURE_CUBE_MAP_NEGATIVE_X, + gl.TEXTURE_CUBE_MAP_POSITIVE_Y, + gl.TEXTURE_CUBE_MAP_NEGATIVE_Y, + gl.TEXTURE_CUBE_MAP_POSITIVE_Z, + gl.TEXTURE_CUBE_MAP_NEGATIVE_Z]; + } + // In this test, this is always specified. It's currently WebGL 2.0-specific. + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, sourceSubRectangle[0]); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, sourceSubRectangle[1]); + // Upload the image into the texture + var uploadWidth = sourceSubRectangle[2]; + var uploadHeight = sourceSubRectangle[3]; + for (var tt = 0; tt < targets.length; ++tt) { + if (useTexSubImage2D) { + // Initialize the texture to black first + gl.texImage2D(targets[tt], 0, gl[internalFormat], + uploadWidth, uploadHeight, 0, + gl[pixelFormat], gl[pixelType], null); + gl.texSubImage2D(targets[tt], 0, 0, 0, + uploadWidth, uploadHeight, + gl[pixelFormat], gl[pixelType], canvas); + } else { + gl.texImage2D(targets[tt], 0, gl[internalFormat], + uploadWidth, uploadHeight, 0, + gl[pixelFormat], gl[pixelType], canvas); + } + } + + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, 0); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, 0); + + // The tests are constructed to upload a single solid color + // out of the canvas. + var outputCanvasWidth = gl.drawingBufferWidth; + var outputCanvasHeight = gl.drawingBufferHeight; + var outputCanvasHalfWidth = Math.floor(outputCanvasWidth / 2); + var outputCanvasHalfHeight = Math.floor(outputCanvasHeight / 2); + var top = 0; + var bottom = outputCanvasHeight - outputCanvasHalfHeight; + var left = 0; + var right = outputCanvasWidth - outputCanvasHalfWidth; + + for (var tt = 0; tt < targets.length; ++tt) { + if (bindingTarget == gl.TEXTURE_CUBE_MAP) { + gl.uniform1i(loc, targets[tt]); + } + // Draw the triangles + wtu.clearAndDrawUnitQuad(gl, [0, 0, 0, 255]); + + // Check the four quadrants and make sure they have the right color. + // This is split up into four tests only because of the driver bug above. + var msg = 'should be ' + expected; + wtu.checkCanvasRect(gl, left, top, outputCanvasHalfWidth, outputCanvasHalfHeight, expected, msg); + if (!skipCorner) { + wtu.checkCanvasRect(gl, right, top, outputCanvasHalfWidth, outputCanvasHalfHeight, expected, msg); + } + wtu.checkCanvasRect(gl, left, bottom, outputCanvasHalfWidth, outputCanvasHalfHeight, expected, msg); + if (!skipCorner) { + wtu.checkCanvasRect(gl, right, bottom, outputCanvasHalfWidth, outputCanvasHalfHeight, expected, msg); + } + } + } + + function runTest(canvas, canvasSetupFunction, sourceDescription) + { + var program = tiu.setupTexturedQuad(gl, internalFormat); + runTestOnBindingTarget(gl.TEXTURE_2D, program, canvas, canvasSetupFunction, sourceDescription); + program = tiu.setupTexturedQuadWithCubeMap(gl, internalFormat); + runTestOnBindingTarget(gl.TEXTURE_CUBE_MAP, program, canvas, canvasSetupFunction, sourceDescription); + + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "should be no errors"); + } + + function runTestOnBindingTarget(bindingTarget, program, canvas, canvasSetupFunction, sourceDescription) { + var cases = [ + // Small canvas cases. Expected that these won't be + // GPU-accelerated in most browsers' implementations. + { expected: redColor, flipY: false, size: [2, 2], subRect: [0, 0, 1, 1] }, + { expected: greenColor, flipY: false, size: [2, 2], subRect: [1, 0, 1, 1] }, + { expected: blueColor, flipY: false, size: [2, 2], subRect: [0, 1, 1, 1] }, + { expected: cyanColor, flipY: false, size: [2, 2], subRect: [1, 1, 1, 1] }, + { expected: redColor, flipY: true, size: [2, 2], subRect: [0, 1, 1, 1] }, + { expected: greenColor, flipY: true, size: [2, 2], subRect: [1, 1, 1, 1] }, + { expected: blueColor, flipY: true, size: [2, 2], subRect: [0, 0, 1, 1] }, + { expected: cyanColor, flipY: true, size: [2, 2], subRect: [1, 0, 1, 1] }, + + // Larger canvas cases. Expected that these will be + // GPU-accelerated in most browsers' implementations. + // Changes will be gladly accepted to trigger more + // browsers' heuristics to accelerate these canvases. + { expected: redColor, flipY: false, size: [384, 384], subRect: [ 0, 0, 192, 192] }, + { expected: greenColor, flipY: false, size: [384, 384], subRect: [192, 0, 192, 192] }, + { expected: blueColor, flipY: false, size: [384, 384], subRect: [ 0, 192, 192, 192] }, + { expected: cyanColor, flipY: false, size: [384, 384], subRect: [192, 192, 192, 192] }, + { expected: blueColor, flipY: true, size: [384, 384], subRect: [ 0, 0, 192, 192] }, + { expected: cyanColor, flipY: true, size: [384, 384], subRect: [192, 0, 192, 192] }, + { expected: redColor, flipY: true, size: [384, 384], subRect: [ 0, 192, 192, 192] }, + { expected: greenColor, flipY: true, size: [384, 384], subRect: [192, 192, 192, 192] }, + + ]; + + for (var i in cases) { + runOneIteration(sourceDescription, false, cases[i].flipY, + canvas, cases[i].size, canvasSetupFunction, + cases[i].subRect, + cases[i].expected, bindingTarget, program); + + // In Chrome, this hits a bug on Mac with Intel GPU. + // Chromium bug: crbug.com/665656 + // Apple Radar: 29563996 + //runOneIteration(sourceDescription, true, cases[i].flipY, + // canvas, cases[i].size, canvasSetupFunction, + // cases[i].subRect, + // cases[i].expected, bindingTarget, program); + } + } + + return init; +} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-image-bitmap-from-image.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-image-bitmap-from-image.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-image-bitmap-from-image.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-image-bitmap-from-image.js 2017-01-16 01:39:44.000000000 +0000 @@ -50,6 +50,7 @@ var image = new Image(); image.onload = function() { + bufferedLogToConsole("Source image has been loaded"); runImageBitmapTest(image, 0.5, internalFormat, pixelFormat, pixelType, gl, tiu, wtu, false); finishTest(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-image-data.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-image-data.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-image-data.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-image-data.js 2017-01-16 01:39:44.000000000 +0000 @@ -81,11 +81,40 @@ runTest(); } - function runOneIteration(useTexSubImage2D, flipY, premultiplyAlpha, bindingTarget, program) + function runOneIteration(useTexSubImage2D, flipY, premultiplyAlpha, + sourceSubRectangle, expected, + bindingTarget, program) { + sourceSubRectangleString = ''; + if (sourceSubRectangle) { + sourceSubRectangleString = ', sourceSubRectangle=' + sourceSubRectangle; + } + debug(''); debug('Testing ' + (useTexSubImage2D ? 'texSubImage2D' : 'texImage2D') + ' with flipY=' + flipY + ' and premultiplyAlpha=' + premultiplyAlpha + - ', bindingTarget=' + (bindingTarget == gl.TEXTURE_2D ? 'TEXTURE_2D' : 'TEXTURE_CUBE_MAP')); + ', bindingTarget=' + (bindingTarget == gl.TEXTURE_2D ? 'TEXTURE_2D' : 'TEXTURE_CUBE_MAP') + + sourceSubRectangleString); + + var loc; + var skipCorner = false; + if (bindingTarget == gl.TEXTURE_CUBE_MAP) { + loc = gl.getUniformLocation(program, "face"); + switch (gl[pixelFormat]) { + case gl.RED_INTEGER: + case gl.RG_INTEGER: + case gl.RGB_INTEGER: + case gl.RGBA_INTEGER: + // https://github.com/KhronosGroup/WebGL/issues/1819 + skipCorner = true; + break; + } + } + + if (skipCorner && expected.length == 1 && (flipY ^ sourceSubRectangle[1] == 0)) { + debug("Test skipped, see WebGL#1819"); + return; + } + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); // Enable writes to the RGBA channels gl.colorMask(1, 1, 1, 0); @@ -107,34 +136,62 @@ gl.TEXTURE_CUBE_MAP_POSITIVE_Z, gl.TEXTURE_CUBE_MAP_NEGATIVE_Z]; } + // Handle the source sub-rectangle if specified (WebGL 2.0 only) + if (sourceSubRectangle) { + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, sourceSubRectangle[0]); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, sourceSubRectangle[1]); + } // Upload the image into the texture for (var tt = 0; tt < targets.length; ++tt) { - if (useTexSubImage2D) { - // Initialize the texture to black first - gl.texImage2D(targets[tt], 0, gl[internalFormat], imageData.width, imageData.height, 0, - gl[pixelFormat], gl[pixelType], null); - gl.texSubImage2D(targets[tt], 0, 0, 0, gl[pixelFormat], gl[pixelType], imageData); + if (sourceSubRectangle) { + if (useTexSubImage2D) { + // Initialize the texture to black first + gl.texImage2D(targets[tt], 0, gl[internalFormat], + sourceSubRectangle[2], sourceSubRectangle[3], 0, + gl[pixelFormat], gl[pixelType], null); + gl.texSubImage2D(targets[tt], 0, 0, 0, + sourceSubRectangle[2], sourceSubRectangle[3], + gl[pixelFormat], gl[pixelType], imageData); + } else { + gl.texImage2D(targets[tt], 0, gl[internalFormat], + sourceSubRectangle[2], sourceSubRectangle[3], 0, + gl[pixelFormat], gl[pixelType], imageData); + } } else { - gl.texImage2D(targets[tt], 0, gl[internalFormat], gl[pixelFormat], gl[pixelType], imageData); + if (useTexSubImage2D) { + // Initialize the texture to black first + gl.texImage2D(targets[tt], 0, gl[internalFormat], imageData.width, imageData.height, 0, + gl[pixelFormat], gl[pixelType], null); + gl.texSubImage2D(targets[tt], 0, 0, 0, gl[pixelFormat], gl[pixelType], imageData); + } else { + gl.texImage2D(targets[tt], 0, gl[internalFormat], gl[pixelFormat], gl[pixelType], imageData); + } } } + if (sourceSubRectangle) { + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, 0); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, 0); + } + var width = gl.canvas.width; var halfWidth = Math.floor(width / 2); var height = gl.canvas.height; var halfHeight = Math.floor(height / 2); - var top = flipY ? 0 : (height - halfHeight); - var bottom = flipY ? (height - halfHeight) : 0; - - var tl = redColor; - var tr = premultiplyAlpha ? blackColor : redColor; - var bl = greenColor; - var br = premultiplyAlpha ? blackColor : greenColor; - - var loc; - if (bindingTarget == gl.TEXTURE_CUBE_MAP) { - loc = gl.getUniformLocation(program, "face"); + var top = 0; + var bottom = height - halfHeight; + var left = 0; + var right = width - halfWidth; + + var tl, tr, bl, br; + if (expected.length == 1) { + tl = tr = bl = br = expected[0]; + } else { + tl = expected[0]; + tr = expected[1]; + bl = expected[2]; + br = expected[3]; } for (var tt = 0; tt < targets.length; ++tt) { @@ -146,12 +203,14 @@ // Check the top pixel and bottom pixel and make sure they have // the right color. - debug("Checking " + (flipY ? "top" : "bottom")); - wtu.checkCanvasRect(gl, 0, bottom, halfWidth, halfHeight, tl, "shouldBe " + tl); - wtu.checkCanvasRect(gl, halfWidth, bottom, halfWidth, halfHeight, tr, "shouldBe " + tr); - debug("Checking " + (flipY ? "bottom" : "top")); - wtu.checkCanvasRect(gl, 0, top, halfWidth, halfHeight, bl, "shouldBe " + bl); - wtu.checkCanvasRect(gl, halfWidth, top, halfWidth, halfHeight, br, "shouldBe " + br); + wtu.checkCanvasRect(gl, left, top, halfWidth, halfHeight, tl, "shouldBe " + tl); + if (!skipCorner) { + wtu.checkCanvasRect(gl, right, top, halfWidth, halfHeight, tr, "shouldBe " + tr); + } + wtu.checkCanvasRect(gl, left, bottom, halfWidth, halfHeight, bl, "shouldBe " + bl); + if (!skipCorner) { + wtu.checkCanvasRect(gl, right, bottom, halfWidth, halfHeight, br, "shouldBe " + br); + } } } @@ -167,19 +226,39 @@ } function runTestOnBindingTarget(bindingTarget, program) { + var k = blackColor; + var r = redColor; + var g = greenColor; var cases = [ - { sub: false, flipY: true, premultiplyAlpha: false }, - { sub: false, flipY: false, premultiplyAlpha: false }, - { sub: false, flipY: true, premultiplyAlpha: true }, - { sub: false, flipY: false, premultiplyAlpha: true }, - { sub: true, flipY: true, premultiplyAlpha: false }, - { sub: true, flipY: false, premultiplyAlpha: false }, - { sub: true, flipY: true, premultiplyAlpha: true }, - { sub: true, flipY: false, premultiplyAlpha: true }, + { expected: [r, r, g, g], flipY: false, premultiplyAlpha: false, sub: false }, + { expected: [r, r, g, g], flipY: false, premultiplyAlpha: false, sub: true }, + { expected: [r, k, g, k], flipY: false, premultiplyAlpha: true, sub: false }, + { expected: [r, k, g, k], flipY: false, premultiplyAlpha: true, sub: true }, + { expected: [g, g, r, r], flipY: true, premultiplyAlpha: false, sub: false }, + { expected: [g, g, r, r], flipY: true, premultiplyAlpha: false, sub: true }, + { expected: [g, k, r, k], flipY: true, premultiplyAlpha: true, sub: false }, + { expected: [g, k, r, k], flipY: true, premultiplyAlpha: true, sub: true }, ]; + if (wtu.getDefault3DContextVersion() > 1) { + var morecases = []; + // Make 2 copies of the original case: top left and bottom right 1x1 rectangles + for (var i = 0; i < cases.length; i++) { + for (var subX = 0; subX <= 1; subX++) { + var subY = subX == 0 ? 1 : 0; + // shallow-copy cases[i] into newcase + var newcase = Object.assign({}, cases[i]); + newcase.expected = [cases[i].expected[subY * 2 + subX]]; + newcase.sourceSubRectangle = [subX, subY, 1, 1]; + morecases.push(newcase); + } + } + cases = cases.concat(morecases); + } + for (var i in cases) { runOneIteration(cases[i].sub, cases[i].flipY, cases[i].premultiplyAlpha, + cases[i].sourceSubRectangle, cases[i].expected, bindingTarget, program); } } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-image.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-image.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-image.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-image.js 2017-01-16 01:39:44.000000000 +0000 @@ -60,11 +60,16 @@ } function runOneIteration(image, useTexSubImage2D, flipY, topColor, bottomColor, - bindingTarget, program) + sourceSubRectangle, bindingTarget, program) { + sourceSubRectangleString = ''; + if (sourceSubRectangle) { + sourceSubRectangleString = ' sourceSubRectangle=' + sourceSubRectangle; + } debug('Testing ' + (useTexSubImage2D ? 'texSubImage2D' : 'texImage2D') + - ' with flipY=' + flipY + ' bindingTarget=' + - (bindingTarget == gl.TEXTURE_2D ? 'TEXTURE_2D' : 'TEXTURE_CUBE_MAP')); + ' with ' + image.width + 'x' + image.height + ' flipY=' + flipY + ' bindingTarget=' + + (bindingTarget == gl.TEXTURE_2D ? 'TEXTURE_2D' : 'TEXTURE_CUBE_MAP') + + sourceSubRectangleString); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); // Disable any writes to the alpha channel gl.colorMask(1, 1, 1, 0); @@ -87,18 +92,44 @@ gl.TEXTURE_CUBE_MAP_POSITIVE_Z, gl.TEXTURE_CUBE_MAP_NEGATIVE_Z]; } + // Handle the source sub-rectangle if specified (WebGL 2.0 only) + if (sourceSubRectangle) { + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, sourceSubRectangle[0]); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, sourceSubRectangle[1]); + } // Upload the image into the texture for (var tt = 0; tt < targets.length; ++tt) { - if (useTexSubImage2D) { - // Initialize the texture to black first - gl.texImage2D(targets[tt], 0, gl[internalFormat], image.width, image.height, 0, - gl[pixelFormat], gl[pixelType], null); - gl.texSubImage2D(targets[tt], 0, 0, 0, gl[pixelFormat], gl[pixelType], image); + if (sourceSubRectangle) { + if (useTexSubImage2D) { + // Initialize the texture to black first + gl.texImage2D(targets[tt], 0, gl[internalFormat], + sourceSubRectangle[2], sourceSubRectangle[3], 0, + gl[pixelFormat], gl[pixelType], null); + gl.texSubImage2D(targets[tt], 0, 0, 0, + sourceSubRectangle[2], sourceSubRectangle[3], + gl[pixelFormat], gl[pixelType], image); + } else { + gl.texImage2D(targets[tt], 0, gl[internalFormat], + sourceSubRectangle[2], sourceSubRectangle[3], 0, + gl[pixelFormat], gl[pixelType], image); + } } else { - gl.texImage2D(targets[tt], 0, gl[internalFormat], gl[pixelFormat], gl[pixelType], image); + if (useTexSubImage2D) { + // Initialize the texture to black first + gl.texImage2D(targets[tt], 0, gl[internalFormat], image.width, image.height, 0, + gl[pixelFormat], gl[pixelType], null); + gl.texSubImage2D(targets[tt], 0, 0, 0, gl[pixelFormat], gl[pixelType], image); + } else { + gl.texImage2D(targets[tt], 0, gl[internalFormat], gl[pixelFormat], gl[pixelType], image); + } } } + if (sourceSubRectangle) { + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, 0); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, 0); + } + var loc; if (bindingTarget == gl.TEXTURE_CUBE_MAP) { loc = gl.getUniformLocation(program, "face"); @@ -130,20 +161,47 @@ { sub: true, flipY: false, topColor: greenColor, bottomColor: redColor }, ]; + + if (wtu.getDefault3DContextVersion() > 1) { + cases = cases.concat([ + { sub: false, flipY: false, topColor: redColor, bottomColor: redColor, + sourceSubRectangle: [0, 0, 1, 1] }, + { sub: false, flipY: true, topColor: greenColor, bottomColor: greenColor, + sourceSubRectangle: [0, 0, 1, 1] }, + { sub: false, flipY: false, topColor: greenColor, bottomColor: greenColor, + sourceSubRectangle: [0, 1, 1, 1] }, + { sub: false, flipY: true, topColor: redColor, bottomColor: redColor, + sourceSubRectangle: [0, 1, 1, 1] }, + { sub: true, flipY: false, topColor: redColor, bottomColor: redColor, + sourceSubRectangle: [0, 0, 1, 1] }, + { sub: true, flipY: true, topColor: greenColor, bottomColor: greenColor, + sourceSubRectangle: [0, 0, 1, 1] }, + { sub: true, flipY: false, topColor: greenColor, bottomColor: greenColor, + sourceSubRectangle: [0, 1, 1, 1] }, + { sub: true, flipY: true, topColor: redColor, bottomColor: redColor, + sourceSubRectangle: [0, 1, 1, 1] }, + ]); + } + var program = tiu.setupTexturedQuad(gl, internalFormat); for (var i in cases) { runOneIteration(image, cases[i].sub, cases[i].flipY, cases[i].topColor, cases[i].bottomColor, + cases[i].sourceSubRectangle, gl.TEXTURE_2D, program); } // cube map texture must be square. if (image.width != image.height) return; + // Skip sub-rectangle tests for cube map textures for the moment. program = tiu.setupTexturedQuadWithCubeMap(gl, internalFormat); for (var i in cases) { - runOneIteration(image, cases[i].sub, cases[i].flipY, - cases[i].topColor, cases[i].bottomColor, - gl.TEXTURE_CUBE_MAP, program); + if (!cases[i].sourceSubRectangle) { + runOneIteration(image, cases[i].sub, cases[i].flipY, + cases[i].topColor, cases[i].bottomColor, + undefined, + gl.TEXTURE_CUBE_MAP, program); + } } } @@ -155,18 +213,23 @@ imgCanvas.width = 2; imgCanvas.height = 2; var imgCtx = imgCanvas.getContext("2d"); - var imgData = imgCtx.createImageData(1, 2); - for (var i = 0; i < 2; i++) { - var stride = i * 8; - imgData.data[stride + 0] = redColor[0]; - imgData.data[stride + 1] = redColor[1]; - imgData.data[stride + 2] = redColor[2]; - imgData.data[stride + 3] = 255; - imgData.data[stride + 4] = greenColor[0]; - imgData.data[stride + 5] = greenColor[1]; - imgData.data[stride + 6] = greenColor[2]; - imgData.data[stride + 7] = 255; - } + var imgData = imgCtx.createImageData(2, 2); + imgData.data[0] = redColor[0]; + imgData.data[1] = redColor[1]; + imgData.data[2] = redColor[2]; + imgData.data[3] = 255; + imgData.data[4] = redColor[0]; + imgData.data[5] = redColor[1]; + imgData.data[6] = redColor[2]; + imgData.data[7] = 255; + imgData.data[8] = greenColor[0]; + imgData.data[9] = greenColor[1]; + imgData.data[10] = greenColor[2]; + imgData.data[11] = 255; + imgData.data[12] = greenColor[0]; + imgData.data[13] = greenColor[1]; + imgData.data[14] = greenColor[2]; + imgData.data[15] = 255; imgCtx.putImageData(imgData, 0, 0); // apparently Image is different than . diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-video.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-video.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-video.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-video.js 2017-01-16 01:39:44.000000000 +0000 @@ -45,6 +45,7 @@ var videos = [ { src: resourcePath + "red-green.mp4" , type: 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"', }, { src: resourcePath + "red-green.webmvp8.webm", type: 'video/webm; codecs="vp8, vorbis"', }, + { src: resourcePath + "red-green.webmvp9.webm", type: 'video/webm; codecs="vp9"', }, { src: resourcePath + "red-green.theora.ogv", type: 'video/ogg; codecs="theora, vorbis"', }, ]; @@ -76,11 +77,16 @@ runTest(); } - function runOneIteration(videoElement, useTexSubImage2D, flipY, topColor, bottomColor, program, bindingTarget) + function runOneIteration(videoElement, useTexSubImage2D, flipY, topColor, bottomColor, sourceSubRectangle, program, bindingTarget) { + sourceSubRectangleString = ''; + if (sourceSubRectangle) { + sourceSubRectangleString = ' sourceSubRectangle=' + sourceSubRectangle; + } debug('Testing ' + (useTexSubImage2D ? 'texSubImage2D' : 'texImage2D') + ' with flipY=' + flipY + ' bindingTarget=' + - (bindingTarget == gl.TEXTURE_2D ? 'TEXTURE_2D' : 'TEXTURE_CUBE_MAP')); + (bindingTarget == gl.TEXTURE_2D ? 'TEXTURE_2D' : 'TEXTURE_CUBE_MAP') + + sourceSubRectangleString); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); // Disable any writes to the alpha channel gl.colorMask(1, 1, 1, 0); @@ -104,26 +110,56 @@ gl.TEXTURE_CUBE_MAP_POSITIVE_Z, gl.TEXTURE_CUBE_MAP_NEGATIVE_Z]; } + // Handle the source sub-rectangle if specified (WebGL 2.0 only) + if (sourceSubRectangle) { + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, sourceSubRectangle[0]); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, sourceSubRectangle[1]); + } // Upload the videoElement into the texture for (var tt = 0; tt < targets.length; ++tt) { - // Initialize the texture to black first - if (useTexSubImage2D) { - var width = videoElement.videoWidth; - var height = videoElement.videoHeight; - if (bindingTarget == gl.TEXTURE_CUBE_MAP) { - // cube map texture must be square. - width = Math.max(width, height); - height = width; + if (sourceSubRectangle) { + // Initialize the texture to black first + if (useTexSubImage2D) { + // Skip sub-rectangle tests for cube map textures for the moment. + if (bindingTarget == gl.TEXTURE_CUBE_MAP) { + continue; + } + gl.texImage2D(targets[tt], 0, gl[internalFormat], + sourceSubRectangle[2], sourceSubRectangle[3], 0, + gl[pixelFormat], gl[pixelType], null); + gl.texSubImage2D(targets[tt], 0, 0, 0, + sourceSubRectangle[2], sourceSubRectangle[3], + gl[pixelFormat], gl[pixelType], videoElement); + } else { + gl.texImage2D(targets[tt], 0, gl[internalFormat], + sourceSubRectangle[2], sourceSubRectangle[3], 0, + gl[pixelFormat], gl[pixelType], videoElement); } - gl.texImage2D(targets[tt], 0, gl[internalFormat], - width, height, 0, - gl[pixelFormat], gl[pixelType], null); - gl.texSubImage2D(targets[tt], 0, 0, 0, gl[pixelFormat], gl[pixelType], videoElement); } else { - gl.texImage2D(targets[tt], 0, gl[internalFormat], gl[pixelFormat], gl[pixelType], videoElement); + // Initialize the texture to black first + if (useTexSubImage2D) { + var width = videoElement.videoWidth; + var height = videoElement.videoHeight; + if (bindingTarget == gl.TEXTURE_CUBE_MAP) { + // cube map texture must be square. + width = Math.max(width, height); + height = width; + } + gl.texImage2D(targets[tt], 0, gl[internalFormat], + width, height, 0, + gl[pixelFormat], gl[pixelType], null); + gl.texSubImage2D(targets[tt], 0, 0, 0, gl[pixelFormat], gl[pixelType], videoElement); + } else { + gl.texImage2D(targets[tt], 0, gl[internalFormat], gl[pixelFormat], gl[pixelType], videoElement); + } } } + if (sourceSubRectangle) { + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, 0); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, 0); + } + var c = document.createElement("canvas"); c.width = 16; c.height = 16; @@ -164,6 +200,27 @@ { sub: true, flipY: false, topColor: greenColor, bottomColor: redColor }, ]; + if (wtu.getDefault3DContextVersion() > 1) { + cases = cases.concat([ + { sub: false, flipY: false, topColor: redColor, bottomColor: redColor, + sourceSubRectangle: [20, 16, 40, 32] }, + { sub: false, flipY: true, topColor: greenColor, bottomColor: greenColor, + sourceSubRectangle: [20, 16, 40, 32] }, + { sub: false, flipY: false, topColor: greenColor, bottomColor: greenColor, + sourceSubRectangle: [20, 80, 40, 32] }, + { sub: false, flipY: true, topColor: redColor, bottomColor: redColor, + sourceSubRectangle: [20, 80, 40, 32] }, + { sub: true, flipY: false, topColor: redColor, bottomColor: redColor, + sourceSubRectangle: [20, 16, 40, 32] }, + { sub: true, flipY: true, topColor: greenColor, bottomColor: greenColor, + sourceSubRectangle: [20, 16, 40, 32] }, + { sub: true, flipY: false, topColor: greenColor, bottomColor: greenColor, + sourceSubRectangle: [20, 80, 40, 32] }, + { sub: true, flipY: true, topColor: redColor, bottomColor: redColor, + sourceSubRectangle: [20, 80, 40, 32] }, + ]); + } + function runTexImageTest(bindingTarget) { var program; if (bindingTarget == gl.TEXTURE_2D) { @@ -209,12 +266,20 @@ } function runTest() { for (var i in cases) { - // cube map texture must be square but video is not square. - if (bindingTarget == gl.TEXTURE_2D || cases[i].sub == true) { - runOneIteration(video, cases[i].sub, cases[i].flipY, - cases[i].topColor, cases[i].bottomColor, - program, bindingTarget); + if (bindingTarget == gl.TEXTURE_CUBE_MAP) { + // Cube map texture must be square but video is not square. + if (!cases[i].sub) { + break; + } + // Skip sub-rectangle tests for cube map textures for the moment. + if (cases[i].sourceSubRectangle) { + break; + } } + runOneIteration(video, cases[i].sub, cases[i].flipY, + cases[i].topColor, cases[i].bottomColor, + cases[i].sourceSubRectangle, + program, bindingTarget); } runNextVideo(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-webgl-canvas.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-webgl-canvas.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-webgl-canvas.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-2d-with-webgl-canvas.js 2017-01-16 01:39:44.000000000 +0000 @@ -90,7 +90,7 @@ ctx.canvas.height = 2; setCanvasToRedGreen(ctx); } - + function runOneIteration(canvas, useTexSubImage2D, flipY, program, bindingTarget, opt_texture) { debug('Testing ' + (useTexSubImage2D ? 'texSubImage2D' : 'texImage2D') + ' with flipY=' + @@ -136,13 +136,24 @@ var width = gl.canvas.width; var height = gl.canvas.height; + var halfWidth = Math.floor(width / 2); var halfHeight = Math.floor(height / 2); var top = flipY ? (height - halfHeight) : 0; var bottom = flipY ? 0 : (height - halfHeight); var loc; + var skipCorner = false; if (bindingTarget == gl.TEXTURE_CUBE_MAP) { loc = gl.getUniformLocation(program, "face"); + switch (gl[pixelFormat]) { + case gl.RED_INTEGER: + case gl.RG_INTEGER: + case gl.RGB_INTEGER: + case gl.RGBA_INTEGER: + // https://github.com/KhronosGroup/WebGL/issues/1819 + skipCorner = true; + break; + } } for (var tt = 0; tt < targets.length; ++tt) { @@ -154,10 +165,10 @@ // Check the top and bottom halves and make sure they have the right color. debug("Checking " + (flipY ? "top" : "bottom")); - wtu.checkCanvasRect(gl, 0, bottom, width, halfHeight, redColor, + wtu.checkCanvasRect(gl, 0, bottom, (skipCorner && !flipY) ? halfWidth : width, halfHeight, redColor, "shouldBe " + redColor); debug("Checking " + (flipY ? "bottom" : "top")); - wtu.checkCanvasRect(gl, 0, top, width, halfHeight, greenColor, + wtu.checkCanvasRect(gl, 0, top, (skipCorner && flipY) ? halfWidth : width, halfHeight, greenColor, "shouldBe " + greenColor); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-canvas.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-canvas.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-canvas.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-canvas.js 2017-01-16 01:39:44.000000000 +0000 @@ -129,7 +129,8 @@ // Initialize the texture to black first gl.texImage3D(bindingTarget, 0, gl[internalFormat], canvas.width, canvas.height, 1 /* depth */, 0, gl[pixelFormat], gl[pixelType], null); - gl.texSubImage3D(bindingTarget, 0, 0, 0, 0, gl[pixelFormat], gl[pixelType], canvas); + gl.texSubImage3D(bindingTarget, 0, 0, 0, 0, canvas.width, canvas.height, 1 /* depth */, + gl[pixelFormat], gl[pixelType], canvas); var width = gl.canvas.width; var height = gl.canvas.height; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-canvas-sub-rectangle.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-canvas-sub-rectangle.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-canvas-sub-rectangle.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-canvas-sub-rectangle.js 2017-01-16 01:39:44.000000000 +0000 @@ -0,0 +1,304 @@ +/* +** Copyright (c) 2016 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +function generateTest(internalFormat, pixelFormat, pixelType, prologue, resourcePath, defaultContextVersion) { + var wtu = WebGLTestUtils; + var tiu = TexImageUtils; + var gl = null; + var successfullyParsed = false; + var realRedColor = [255, 0, 0]; + var realGreenColor = [0, 255, 0]; + var realBlueColor = [0, 0, 255]; + var realCyanColor = [0, 255, 255]; + var redColor = [255, 0, 0]; + var greenColor = [0, 255, 0]; + var blueColor = [0, 0, 255]; + var cyanColor = [0, 255, 255]; + + function init() + { + description('Verify texImage3D and texSubImage3D code paths taking a sub-rectangle of a canvas (' + internalFormat + '/' + pixelFormat + '/' + pixelType + ')'); + + // Set the default context version while still allowing the webglVersion URL query string to override it. + wtu.setDefault3DContextVersion(defaultContextVersion); + gl = wtu.create3DContext("example"); + + if (!prologue(gl)) { + finishTest(); + return; + } + + switch (gl[pixelFormat]) { + case gl.RED: + case gl.RED_INTEGER: + greenColor = [0, 0, 0]; + blueColor = [0, 0, 0]; + cyanColor = [0, 0, 0]; + break; + + case gl.RG: + case gl.RG_INTEGER: + blueColor = [0, 0, 0]; + cyanColor = [0, 255, 0]; + break; + + default: + break; + } + + gl.clearColor(0,0,0,1); + gl.clearDepth(1); + + var canvas2d = document.createElement('canvas'); + runTest(canvas2d, setupSourceCanvas2D, '2D-rendered canvas'); + + var canvasWebGL = document.createElement('canvas'); + runTest(canvasWebGL, setupSourceCanvasWebGL, 'WebGL-rendered canvas'); + + finishTest(); + } + + function uploadCanvasToTexture(canvas, useTexSubImage3D, flipY, bindingTarget, + depth, sourceSubRectangle, unpackImageHeight) + { + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); + // Disable any writes to the alpha channel + gl.colorMask(1, 1, 1, 0); + var texture = gl.createTexture(); + // Bind the texture to texture unit 0 + gl.bindTexture(bindingTarget, texture); + // Set up texture parameters + gl.texParameteri(bindingTarget, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(bindingTarget, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + gl.texParameteri(bindingTarget, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(bindingTarget, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.texParameteri(bindingTarget, gl.TEXTURE_WRAP_R, gl.CLAMP_TO_EDGE); + // Set up pixel store parameters + gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false); + gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE); + var uploadWidth = canvas.width; + var uploadHeight = canvas.height; + if (sourceSubRectangle) { + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, sourceSubRectangle[0]); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, sourceSubRectangle[1]); + uploadWidth = sourceSubRectangle[2]; + uploadHeight = sourceSubRectangle[3]; + } + if (unpackImageHeight) { + gl.pixelStorei(gl.UNPACK_IMAGE_HEIGHT, unpackImageHeight); + } + // Upload the image into the texture + if (useTexSubImage3D) { + // Initialize the texture to black first + gl.texImage3D(bindingTarget, 0, gl[internalFormat], uploadWidth, uploadHeight, depth, 0, + gl[pixelFormat], gl[pixelType], null); + gl.texSubImage3D(bindingTarget, 0, 0, 0, 0, uploadWidth, uploadHeight, depth, + gl[pixelFormat], gl[pixelType], canvas); + } else { + gl.texImage3D(bindingTarget, 0, gl[internalFormat], uploadWidth, uploadHeight, depth, 0, + gl[pixelFormat], gl[pixelType], canvas); + } + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, 0); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, 0); + gl.pixelStorei(gl.UNPACK_IMAGE_HEIGHT, 0); + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "should be no errors from texture upload"); + } + + function fillStyle2D(ctx, color) { + ctx.fillStyle = 'rgb(' + color[0] + ', ' + color[1] + ', ' + color[2] + ')'; + } + + function setupSourceCanvas2D(canvas) { + var width = canvas.width; + var height = canvas.height; + var halfWidth = Math.floor(width / 2); + var halfHeight = Math.floor(height / 2); + + var ctx = canvas.getContext('2d'); + // Always use the same pattern for this test: four quadrants: + // red green + // blue cyan + // Handle odd-sized canvases + fillStyle2D(ctx, realRedColor); + ctx.fillRect(0, 0, halfWidth, halfHeight); + fillStyle2D(ctx, realGreenColor); + ctx.fillRect(halfWidth, 0, width - halfWidth, halfHeight); + fillStyle2D(ctx, realBlueColor); + ctx.fillRect(0, halfHeight, halfWidth, height - halfHeight); + fillStyle2D(ctx, realCyanColor); + ctx.fillRect(halfWidth, halfHeight, width - halfWidth, height - halfHeight); + } + + function clearColorWebGL(ctx, color) { + ctx.clearColor(color[0] / 255.0, color[1] / 255.0, color[2] / 255.0, 1.0); + ctx.clear(ctx.COLOR_BUFFER_BIT); + } + + function setupSourceCanvasWebGL(canvas) { + var width = canvas.width; + var height = canvas.height; + var halfWidth = Math.floor(width / 2); + var halfHeight = Math.floor(height / 2); + + var ctx = canvas.getContext('webgl'); + // Always use the same pattern for this test: four quadrants: + // red green + // blue cyan + // Handle odd-sized canvases + + ctx.viewport(0, 0, width, height); + ctx.enable(ctx.SCISSOR_TEST); + // OpenGL origin is lower-left + ctx.scissor(0, 0, halfWidth, halfHeight); + clearColorWebGL(ctx, realBlueColor); + ctx.scissor(halfWidth, 0, width - halfWidth, halfHeight); + clearColorWebGL(ctx, realCyanColor); + ctx.scissor(0, halfHeight, halfWidth, height - halfHeight); + clearColorWebGL(ctx, realRedColor); + ctx.scissor(halfWidth, halfHeight, width - halfWidth, height - halfHeight); + clearColorWebGL(ctx, realGreenColor); + } + + function runOneIteration(canvas, useTexSubImage3D, flipY, bindingTarget, + depth, sourceSubRectangle, unpackImageHeight, + rTextureCoord, expectedColor, program, + canvasSize, canvasSetupFunction, sourceDescription) + { + debug(''); + debug('Testing ' + sourceDescription + ' with ' + + (useTexSubImage3D ? 'texSubImage3D' : 'texImage3D') + + ', flipY=' + flipY + ', bindingTarget=' + + (bindingTarget == gl.TEXTURE_3D ? 'TEXTURE_3D' : 'TEXTURE_2D_ARRAY') + + ', sourceSubRectangle=' + sourceSubRectangle + + ', depth=' + depth + + (unpackImageHeight ? ', unpackImageHeight=' + unpackImageHeight : '') + + ', rTextureCoord=' + rTextureCoord); + + // Initialize the contents of the source canvas. + var width = canvasSize[0]; + var height = canvasSize[1]; + var halfWidth = Math.floor(width / 2); + var halfHeight = Math.floor(height / 2); + canvas.width = width; + canvas.height = height; + canvasSetupFunction(canvas); + + uploadCanvasToTexture(canvas, useTexSubImage3D, flipY, bindingTarget, + depth, sourceSubRectangle, unpackImageHeight); + var rCoordLocation = gl.getUniformLocation(program, 'uRCoord'); + if (!rCoordLocation) { + testFailed('Shader incorrectly set up; couldn\'t find uRCoord uniform'); + return; + } + gl.uniform1f(rCoordLocation, rTextureCoord); + + // Draw the triangles + wtu.clearAndDrawUnitQuad(gl, [0, 0, 0, 255]); + // Check the rendered canvas + wtu.checkCanvasRect(gl, 0, 0, canvasSize[0], canvasSize[1], expectedColor, "shouldBe " + expectedColor); + } + + function runTest(canvas, canvasSetupFunction, sourceDescription) + { + var cases = [ + // Small canvas cases. Expected that these won't be + // GPU-accelerated in most browsers' implementations. + + // No UNPACK_IMAGE_HEIGHT specified. + { expected: redColor, flipY: false, size: [4, 4], subRect: [0, 0, 2, 2], depth: 2, rTextureCoord: 0.0 }, + { expected: blueColor, flipY: false, size: [4, 4], subRect: [0, 0, 2, 2], depth: 2, rTextureCoord: 1.0 }, + { expected: blueColor, flipY: true, size: [4, 4], subRect: [0, 0, 2, 2], depth: 2, rTextureCoord: 0.0 }, + { expected: redColor, flipY: true, size: [4, 4], subRect: [0, 0, 2, 2], depth: 2, rTextureCoord: 1.0 }, + { expected: greenColor, flipY: false, size: [4, 4], subRect: [2, 0, 2, 2], depth: 2, rTextureCoord: 0.0 }, + { expected: cyanColor, flipY: false, size: [4, 4], subRect: [2, 0, 2, 2], depth: 2, rTextureCoord: 1.0 }, + { expected: cyanColor, flipY: true, size: [4, 4], subRect: [2, 0, 2, 2], depth: 2, rTextureCoord: 0.0 }, + { expected: greenColor, flipY: true, size: [4, 4], subRect: [2, 0, 2, 2], depth: 2, rTextureCoord: 1.0 }, + + // Use UNPACK_IMAGE_HEIGHT to skip some pixels. + { expected: redColor, flipY: false, size: [4, 4], subRect: [0, 0, 1, 1], depth: 2, unpackImageHeight: 2, rTextureCoord: 0.0 }, + { expected: blueColor, flipY: false, size: [4, 4], subRect: [0, 0, 1, 1], depth: 2, unpackImageHeight: 2, rTextureCoord: 1.0 }, + { expected: blueColor, flipY: true, size: [4, 4], subRect: [0, 0, 1, 1], depth: 2, unpackImageHeight: 2, rTextureCoord: 0.0 }, + { expected: redColor, flipY: true, size: [4, 4], subRect: [0, 0, 1, 1], depth: 2, unpackImageHeight: 2, rTextureCoord: 1.0 }, + { expected: greenColor, flipY: false, size: [4, 4], subRect: [2, 0, 1, 1], depth: 2, unpackImageHeight: 2, rTextureCoord: 0.0 }, + { expected: cyanColor, flipY: false, size: [4, 4], subRect: [2, 0, 1, 1], depth: 2, unpackImageHeight: 2, rTextureCoord: 1.0 }, + { expected: cyanColor, flipY: true, size: [4, 4], subRect: [2, 0, 1, 1], depth: 2, unpackImageHeight: 2, rTextureCoord: 0.0 }, + { expected: greenColor, flipY: true, size: [4, 4], subRect: [2, 0, 1, 1], depth: 2, unpackImageHeight: 2, rTextureCoord: 1.0 }, + + // Larger canvas cases. Expected that these will be + // GPU-accelerated in most browsers' implementations. + // Changes will be gladly accepted to trigger more + // browsers' heuristics to accelerate these canvases. + + // No UNPACK_IMAGE_HEIGHT specified. + { expected: redColor, flipY: false, size: [384, 384], subRect: [0, 0, 192, 192], depth: 2, rTextureCoord: 0.0 }, + { expected: blueColor, flipY: false, size: [384, 384], subRect: [0, 0, 192, 192], depth: 2, rTextureCoord: 1.0 }, + { expected: blueColor, flipY: true, size: [384, 384], subRect: [0, 0, 192, 192], depth: 2, rTextureCoord: 0.0 }, + { expected: redColor, flipY: true, size: [384, 384], subRect: [0, 0, 192, 192], depth: 2, rTextureCoord: 1.0 }, + { expected: greenColor, flipY: false, size: [384, 384], subRect: [192, 0, 192, 192], depth: 2, rTextureCoord: 0.0 }, + { expected: cyanColor, flipY: false, size: [384, 384], subRect: [192, 0, 192, 192], depth: 2, rTextureCoord: 1.0 }, + { expected: cyanColor, flipY: true, size: [384, 384], subRect: [192, 0, 192, 192], depth: 2, rTextureCoord: 0.0 }, + { expected: greenColor, flipY: true, size: [384, 384], subRect: [192, 0, 192, 192], depth: 2, rTextureCoord: 1.0 }, + + // Use UNPACK_IMAGE_HEIGHT to skip some pixels. + { expected: redColor, flipY: false, size: [384, 384], subRect: [0, 0, 96, 96], depth: 2, unpackImageHeight: 192, rTextureCoord: 0.0 }, + { expected: blueColor, flipY: false, size: [384, 384], subRect: [0, 0, 96, 96], depth: 2, unpackImageHeight: 192, rTextureCoord: 1.0 }, + { expected: blueColor, flipY: true, size: [384, 384], subRect: [0, 0, 96, 96], depth: 2, unpackImageHeight: 192, rTextureCoord: 0.0 }, + { expected: redColor, flipY: true, size: [384, 384], subRect: [0, 0, 96, 96], depth: 2, unpackImageHeight: 192, rTextureCoord: 1.0 }, + { expected: greenColor, flipY: false, size: [384, 384], subRect: [192, 0, 96, 96], depth: 2, unpackImageHeight: 192, rTextureCoord: 0.0 }, + { expected: cyanColor, flipY: false, size: [384, 384], subRect: [192, 0, 96, 96], depth: 2, unpackImageHeight: 192, rTextureCoord: 1.0 }, + { expected: cyanColor, flipY: true, size: [384, 384], subRect: [192, 0, 96, 96], depth: 2, unpackImageHeight: 192, rTextureCoord: 0.0 }, + { expected: greenColor, flipY: true, size: [384, 384], subRect: [192, 0, 96, 96], depth: 2, unpackImageHeight: 192, rTextureCoord: 1.0 }, + ]; + + var program = tiu.setupTexturedQuadWith3D(gl, internalFormat); + for (var i in cases) { + runOneIteration(canvas, false, cases[i].flipY, gl.TEXTURE_3D, + cases[i].depth, cases[i].subRect, + cases[i].unpackImageHeight, cases[i].rTextureCoord, + cases[i].expected, + program, cases[i].size, canvasSetupFunction, sourceDescription); + runOneIteration(canvas, true, cases[i].flipY, gl.TEXTURE_3D, + cases[i].depth, cases[i].subRect, + cases[i].unpackImageHeight, cases[i].rTextureCoord, + cases[i].expected, + program, cases[i].size, canvasSetupFunction, sourceDescription); + } + + program = tiu.setupTexturedQuadWith2DArray(gl, internalFormat); + for (var i in cases) { + runOneIteration(canvas, false, cases[i].flipY, gl.TEXTURE_2D_ARRAY, + cases[i].depth, cases[i].subRect, + cases[i].unpackImageHeight, cases[i].rTextureCoord, + cases[i].expected, + program, cases[i].size, canvasSetupFunction, sourceDescription); + runOneIteration(canvas, true, cases[i].flipY, gl.TEXTURE_2D_ARRAY, + cases[i].depth, cases[i].subRect, + cases[i].unpackImageHeight, cases[i].rTextureCoord, + cases[i].expected, + program, cases[i].size, canvasSetupFunction, sourceDescription); + } + } + + return init; +} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-image-bitmap-from-canvas.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-image-bitmap-from-canvas.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-image-bitmap-from-canvas.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-image-bitmap-from-canvas.js 2017-01-16 01:39:44.000000000 +0000 @@ -51,10 +51,10 @@ var testCanvas = document.createElement('canvas'); var ctx = testCanvas.getContext("2d"); setCanvasToMin(ctx); - runImageBitmapTest(testCanvas, 0.5, internalFormat, pixelFormat, pixelType, gl, tiu, wtu, false); + runImageBitmapTest(testCanvas, 0.5, internalFormat, pixelFormat, pixelType, gl, tiu, wtu, true); setCanvasTo257x257(ctx); - runImageBitmapTest(testCanvas, 0.5, internalFormat, pixelFormat, pixelType, gl, tiu, wtu, false); + runImageBitmapTest(testCanvas, 0.5, internalFormat, pixelFormat, pixelType, gl, tiu, wtu, true); finishTest(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-image-data.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-image-data.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-image-data.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-image-data.js 2017-01-16 01:39:44.000000000 +0000 @@ -28,8 +28,17 @@ var successfullyParsed = false; var imageData = null; var blackColor = [0, 0, 0]; - var redColor = [255, 0, 0]; - var greenColor = [0, 255, 0]; + var originalPixels = (function() { + // (red|green|blue|cyan)(opaque|transparent) + var ro = [255, 0, 0, 255]; var rt = [255, 0, 0, 0]; + var go = [0, 255, 0, 255]; var gt = [0, 255, 0, 0]; + var bo = [0, 0, 255, 255]; var bt = [0, 0, 255, 0]; + var co = [0, 255, 255, 255]; var ct = [0, 255, 255, 0]; + return [ro, rt, go, gt, + ro, rt, go, gt, + bo, bt, co, ct, + bo, bt, co, ct]; + })(); function init() { @@ -44,47 +53,35 @@ return; } - switch (gl[pixelFormat]) { - case gl.RED: - case gl.RED_INTEGER: - greenColor = [0, 0, 0]; - break; - default: - break; - } - gl.clearColor(0,0,0,1); gl.clearDepth(1); gl.disable(gl.BLEND); var canvas2d = document.getElementById("texcanvas"); var context2d = canvas2d.getContext("2d"); - imageData = context2d.createImageData(2, 2); + imageData = context2d.createImageData(4, 4); var data = imageData.data; - data[0] = 255; - data[1] = 0; - data[2] = 0; - data[3] = 255; - data[4] = 255; - data[5] = 0; - data[6] = 0; - data[7] = 0; - data[8] = 0; - data[9] = 255; - data[10] = 0; - data[11] = 255; - data[12] = 0; - data[13] = 255; - data[14] = 0; - data[15] = 0; + for (var i = 0; i < originalPixels.length; i++) { + data.set(originalPixels[i], 4 * i); + } runTest(); } - function runOneIteration(flipY, premultiplyAlpha, bindingTarget, program) + function runOneIteration(useTexSubImage3D, flipY, premultiplyAlpha, bindingTarget, + depth, sourceSubRectangle, rTexCoord, program) { - debug('Testing ' + ' with flipY=' + flipY + ' and premultiplyAlpha=' + premultiplyAlpha + - ', bindingTarget=' + (bindingTarget == gl.TEXTURE_3D ? 'TEXTURE_3D' : 'TEXTURE_2D_ARRAY')); + var expected = simulate(flipY, premultiplyAlpha, depth, sourceSubRectangle, rTexCoord); + var sourceSubRectangleString = ''; + if (sourceSubRectangle) { + sourceSubRectangleString = ', sourceSubRectangle=' + sourceSubRectangle; + sourceSubRectangleString += ', rTexCoord=' + rTexCoord; + } + debug(''); + debug('Testing ' + (useTexSubImage3D ? 'texSubImage3D' : 'texImage3D') + + ' with flipY=' + flipY + ', premultiplyAlpha=' + premultiplyAlpha + + ', bindingTarget=' + (bindingTarget == gl.TEXTURE_3D ? 'TEXTURE_3D' : 'TEXTURE_2D_ARRAY') + + sourceSubRectangleString); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); // Enable writes to the RGBA channels gl.colorMask(1, 1, 1, 0); @@ -94,39 +91,76 @@ // Set up texture parameters gl.texParameteri(bindingTarget, gl.TEXTURE_MIN_FILTER, gl.NEAREST); gl.texParameteri(bindingTarget, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + gl.texParameteri(bindingTarget, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(bindingTarget, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.texParameteri(bindingTarget, gl.TEXTURE_WRAP_R, gl.CLAMP_TO_EDGE); // Set up pixel store parameters gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha); + gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE); + var uploadWidth = imageData.width; + var uploadHeight = imageData.height; + if (sourceSubRectangle) { + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, sourceSubRectangle[0]); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, sourceSubRectangle[1]); + uploadWidth = sourceSubRectangle[2]; + uploadHeight = sourceSubRectangle[3]; + } // Upload the image into the texture - // Initialize the texture to black first - gl.texImage3D(bindingTarget, 0, gl[internalFormat], imageData.width, imageData.height, 1 /* depth */, 0, - gl[pixelFormat], gl[pixelType], null); - gl.texSubImage3D(bindingTarget, 0, 0, 0, 0, gl[pixelFormat], gl[pixelType], imageData); + if (useTexSubImage3D) { + // Initialize the texture to black first + gl.texImage3D(bindingTarget, 0, gl[internalFormat], uploadWidth, uploadHeight, depth, 0, + gl[pixelFormat], gl[pixelType], null); + gl.texSubImage3D(bindingTarget, 0, 0, 0, 0, uploadWidth, uploadHeight, depth, + gl[pixelFormat], gl[pixelType], imageData); + } else { + gl.texImage3D(bindingTarget, 0, gl[internalFormat], uploadWidth, uploadHeight, depth, 0, + gl[pixelFormat], gl[pixelType], imageData); + } + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, 0); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, 0); + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "should be no errors from texture upload"); + + var tl = expected[0][0]; + var tr = expected[0][1]; + var bl = expected[1][0]; + var br = expected[1][1]; + + var rCoordLocation = gl.getUniformLocation(program, 'uRCoord'); + if (!rCoordLocation) { + testFailed("Shader incorrectly set up; couldn't find uRCoord uniform"); + return; + } + gl.uniform1f(rCoordLocation, rTexCoord); + // Draw the triangles + wtu.clearAndDrawUnitQuad(gl, [0, 0, 0, 255]); var width = gl.canvas.width; var halfWidth = Math.floor(width / 2); var height = gl.canvas.height; var halfHeight = Math.floor(height / 2); - var top = flipY ? 0 : (height - halfHeight); - var bottom = flipY ? (height - halfHeight) : 0; - - var tl = redColor; - var tr = premultiplyAlpha ? blackColor : redColor; - var bl = greenColor; - var br = premultiplyAlpha ? blackColor : greenColor; - - // Draw the triangles - wtu.clearAndDrawUnitQuad(gl, [0, 0, 0, 255]); - - // Check the top pixel and bottom pixel and make sure they have - // the right color. - debug("Checking " + (flipY ? "top" : "bottom")); - wtu.checkCanvasRect(gl, 0, bottom, halfWidth, halfHeight, tl, "shouldBe " + tl); - wtu.checkCanvasRect(gl, halfWidth, bottom, width, halfHeight, tr, "shouldBe " + tr); - debug("Checking " + (flipY ? "bottom" : "top")); - wtu.checkCanvasRect(gl, 0, top, halfWidth, halfHeight, bl, "shouldBe " + bl); - wtu.checkCanvasRect(gl, halfWidth, top, width, halfHeight, br, "shouldBe " + br); + var top = 0; + var bottom = height - halfHeight; + var left = 0; + var right = width - halfWidth; + + debug("Checking pixel values"); + debug("Expecting: " + expected); + var expectedH = expected.length; + var expectedW = expected[0].length; + var texelH = Math.floor(gl.canvas.height / expectedH); + var texelW = Math.floor(gl.canvas.width / expectedW); + // For each entry of the expected[][] array, check the appropriate + // canvas rectangle for correctness. + for (var row = 0; row < expectedH; row++) { + var y = row * texelH; + for (var col = 0; col < expectedW; col++) { + var x = col * texelW; + var val = expected[row][col]; + wtu.checkCanvasRect(gl, x, y, texelW, texelH, val, "should be " + val); + } + } } function runTest() @@ -136,21 +170,105 @@ program = tiu.setupTexturedQuadWith2DArray(gl, internalFormat); runTestOnBindingTarget(gl.TEXTURE_2D_ARRAY, program); + debug(""); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "should be no errors"); finishTest(); } + function simulate(flipY, premultiplyAlpha, depth, sourceSubRectangle, rTexCoord) { + var ro = [255, 0, 0]; var rt = premultiplyAlpha ? [0, 0, 0] : [255, 0, 0]; + var go = [0, 255, 0]; var gt = premultiplyAlpha ? [0, 0, 0] : [0, 255, 0]; + var bo = [0, 0, 255]; var bt = premultiplyAlpha ? [0, 0, 0] : [0, 0, 255]; + var co = [0, 255, 255]; var ct = premultiplyAlpha ? [0, 0, 0] : [0, 255, 255]; + var expected = [[ro, rt, go, gt], + [ro, rt, go, gt], + [bo, bt, co, ct], + [bo, bt, co, ct]]; + switch (gl[pixelFormat]) { + case gl.RED: + case gl.RED_INTEGER: + for (var row = 0; row < 4; row++) { + for (var col = 0; col < 4; col++) { + expected[row][col][1] = 0; // zero the green channel + } + } + // fall-through + case gl.RG: + case gl.RG_INTEGER: + for (var row = 0; row < 4; row++) { + for (var col = 0; col < 4; col++) { + expected[row][col][2] = 0; // zero the blue channel + } + } + break; + default: + break; + } + + if (flipY) { + expected.reverse(); + } + + if (sourceSubRectangle) { + let expected2 = []; + for (var row = 0; row < sourceSubRectangle[3]; row++) { + expected2[row] = []; + for (var col = 0; col < sourceSubRectangle[2]; col++) { + expected2[row][col] = + expected[sourceSubRectangle[1] + row + rTexCoord * sourceSubRectangle[3]][sourceSubRectangle[0] + col]; + } + } + expected = expected2; + } + + return expected; + } + function runTestOnBindingTarget(bindingTarget, program) { - var cases = [ - { flipY: true, premultiplyAlpha: false }, - { flipY: false, premultiplyAlpha: false }, - { flipY: true, premultiplyAlpha: true }, - { flipY: false, premultiplyAlpha: true }, + var rects = [ + undefined, + [0, 0, 2, 2], + [2, 0, 2, 2], ]; - - for (var i in cases) { - runOneIteration(cases[i].flipY, cases[i].premultiplyAlpha, - bindingTarget, program); + var dbg = false; // Set to true for debug output images + if (dbg) { + (function() { + debug(""); + debug("Original ImageData (transparent pixels appear black):"); + var cvs = document.createElement("canvas"); + cvs.width = 4; + cvs.height = 4; + cvs.style.width = "32px"; + cvs.style.height = "32px"; + cvs.style.imageRendering = "pixelated"; + cvs.style.background = "#000"; + var ctx = cvs.getContext("2d"); + ctx.putImageData(imageData, 0, 0); + var output = document.getElementById("console"); + output.appendChild(cvs); + })(); + } + for (const sub of [false, true]) { + for (const flipY of [false, true]) { + for (const premul of [false, true]) { + for (let irect = 0; irect < rects.length; irect++) { + var rect = rects[irect]; + let depth = rect ? 2 : 1; + for (let rTexCoord = 0; rTexCoord < depth; rTexCoord++) { + // TODO: add tests for UNPACK_IMAGE_HEIGHT. + runOneIteration(sub, flipY, premul, bindingTarget, + depth, rect, rTexCoord, program); + if (dbg) { + debug("Actual:"); + var img = document.createElement("img"); + img.src = gl.canvas.toDataURL("image/png"); + var output = document.getElementById("console"); + output.appendChild(img); + } + } + } + } + } } } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-image.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-image.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-image.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-image.js 2017-01-16 01:39:44.000000000 +0000 @@ -29,6 +29,10 @@ var imgCanvas; var redColor = [255, 0, 0]; var greenColor = [0, 255, 0]; + var blueColor = [0, 0, 255]; + var cyanColor = [0, 255, 255]; + var imageURLs = [resourcePath + "red-green.png", + resourcePath + "red-green-blue-cyan-4x4.png"]; function init() { @@ -47,6 +51,14 @@ case gl.RED: case gl.RED_INTEGER: greenColor = [0, 0, 0]; + blueColor = [0, 0, 0]; + cyanColor = [0, 0, 0]; + break; + + case gl.RG: + case gl.RG_INTEGER: + blueColor = [0, 0, 0]; + cyanColor = [0, 255, 0]; break; default: @@ -56,13 +68,12 @@ gl.clearColor(0,0,0,1); gl.clearDepth(1); - wtu.loadTexture(gl, resourcePath + "red-green.png", runTest); + wtu.loadImagesAsync(imageURLs, runTest); } - function runOneIteration(image, flipY, topColor, bottomColor, bindingTarget, program) + function uploadImageToTexture(image, useTexSubImage3D, flipY, bindingTarget, + depth, sourceSubRectangle, unpackImageHeight) { - debug('Testing ' + ' with flipY=' + flipY + ' bindingTarget=' + - (bindingTarget == gl.TEXTURE_3D ? 'TEXTURE_3D' : 'TEXTURE_2D_ARRAY')); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); // Disable any writes to the alpha channel gl.colorMask(1, 1, 1, 0); @@ -72,93 +83,192 @@ // Set up texture parameters gl.texParameteri(bindingTarget, gl.TEXTURE_MIN_FILTER, gl.NEAREST); gl.texParameteri(bindingTarget, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + gl.texParameteri(bindingTarget, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(bindingTarget, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + gl.texParameteri(bindingTarget, gl.TEXTURE_WRAP_R, gl.CLAMP_TO_EDGE); // Set up pixel store parameters gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false); - wtu.failIfGLError(gl, 'gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);'); + gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE); + var uploadWidth = image.width; + var uploadHeight = image.height; + if (sourceSubRectangle) { + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, sourceSubRectangle[0]); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, sourceSubRectangle[1]); + uploadWidth = sourceSubRectangle[2]; + uploadHeight = sourceSubRectangle[3]; + } + if (unpackImageHeight) { + gl.pixelStorei(gl.UNPACK_IMAGE_HEIGHT, unpackImageHeight); + } // Upload the image into the texture - // Initialize the texture to black first - gl.texImage3D(bindingTarget, 0, gl[internalFormat], image.width, image.height, 1 /* depth */, 0, - gl[pixelFormat], gl[pixelType], null); - gl.texSubImage3D(bindingTarget, 0, 0, 0, 0, gl[pixelFormat], gl[pixelType], image); - - // Draw the triangles - wtu.clearAndDrawUnitQuad(gl, [0, 0, 0, 255]); - // Check a few pixels near the top and bottom and make sure they have - // the right color. - debug("Checking lower left corner"); - wtu.checkCanvasRect(gl, 4, 4, 2, 2, bottomColor, - "shouldBe " + bottomColor); - debug("Checking upper left corner"); - wtu.checkCanvasRect(gl, 4, gl.canvas.height - 8, 2, 2, topColor, - "shouldBe " + topColor); - } + if (useTexSubImage3D) { + // Initialize the texture to black first + gl.texImage3D(bindingTarget, 0, gl[internalFormat], uploadWidth, uploadHeight, depth, 0, + gl[pixelFormat], gl[pixelType], null); + gl.texSubImage3D(bindingTarget, 0, 0, 0, 0, uploadWidth, uploadHeight, depth, + gl[pixelFormat], gl[pixelType], image); + } else { + gl.texImage3D(bindingTarget, 0, gl[internalFormat], uploadWidth, uploadHeight, depth, 0, + gl[pixelFormat], gl[pixelType], image); + } + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, 0); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, 0); + gl.pixelStorei(gl.UNPACK_IMAGE_HEIGHT, 0); + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "should be no errors from texture upload"); + } + + function runRedGreenTest(image) { + function runOneIteration(image, useTexSubImage3D, flipY, bindingTarget, topColor, bottomColor, program) + { + debug('Testing ' + (useTexSubImage3D ? 'texSubImage3D' : 'texImage3D') + + ' with flipY=' + flipY + ' bindingTarget=' + + (bindingTarget == gl.TEXTURE_3D ? 'TEXTURE_3D' : 'TEXTURE_2D_ARRAY')); + + uploadImageToTexture(image, useTexSubImage3D, flipY, bindingTarget, 1); + + // Draw the triangles + wtu.clearAndDrawUnitQuad(gl, [0, 0, 0, 255]); + // Check a few pixels near the top and bottom and make sure they have + // the right color. + debug("Checking lower left corner"); + wtu.checkCanvasRect(gl, 4, 4, 2, 2, bottomColor, + "shouldBe " + bottomColor); + debug("Checking upper left corner"); + wtu.checkCanvasRect(gl, 4, gl.canvas.height - 8, 2, 2, topColor, + "shouldBe " + topColor); + } - function runTestOnImage(image) { var cases = [ - { flipY: true, topColor: redColor, bottomColor: greenColor }, - { flipY: false, topColor: greenColor, bottomColor: redColor }, + { sub: false, flipY: true, topColor: redColor, bottomColor: greenColor }, + { sub: false, flipY: false, topColor: greenColor, bottomColor: redColor }, + { sub: true, flipY: true, topColor: redColor, bottomColor: greenColor }, + { sub: true, flipY: false, topColor: greenColor, bottomColor: redColor }, ]; var program = tiu.setupTexturedQuadWith3D(gl, internalFormat); for (var i in cases) { - runOneIteration(image, cases[i].flipY, - cases[i].topColor, cases[i].bottomColor, - gl.TEXTURE_3D, program); + runOneIteration(image, cases[i].sub, cases[i].flipY, gl.TEXTURE_3D, + cases[i].topColor, cases[i].bottomColor, program); } program = tiu.setupTexturedQuadWith2DArray(gl, internalFormat); for (var i in cases) { - runOneIteration(image, cases[i].flipY, - cases[i].topColor, cases[i].bottomColor, - gl.TEXTURE_2D_ARRAY, program); + runOneIteration(image, cases[i].sub, cases[i].flipY, gl.TEXTURE_2D_ARRAY, + cases[i].topColor, cases[i].bottomColor, program); } } - function runTest(image) - { - runTestOnImage(image); + function runRedGreenBlueCyanTest(image) { + function runOneIteration(image, useTexSubImage3D, flipY, bindingTarget, + depth, sourceSubRectangle, unpackImageHeight, + rTextureCoord, topColor, bottomColor, program) + { + sourceSubRectangleString = ''; + if (sourceSubRectangle) { + sourceSubRectangleString = ' sourceSubRectangle=' + sourceSubRectangle; + } + unpackImageHeightString = ''; + if (unpackImageHeight) { + unpackImageHeightString = ' unpackImageHeight=' + unpackImageHeight; + } + debug('Testing ' + (useTexSubImage3D ? 'texSubImage3D' : 'texImage3D') + + ' with flipY=' + flipY + ' bindingTarget=' + + (bindingTarget == gl.TEXTURE_3D ? 'TEXTURE_3D' : 'TEXTURE_2D_ARRAY') + + sourceSubRectangleString + ' depth=' + depth + unpackImageHeightString + + ' rTextureCoord=' + rTextureCoord); + + uploadImageToTexture(image, useTexSubImage3D, flipY, bindingTarget, + depth, sourceSubRectangle, unpackImageHeight); + var rCoordLocation = gl.getUniformLocation(program, 'uRCoord'); + if (!rCoordLocation) { + testFailed('Shader incorrectly set up; couldn\'t find uRCoord uniform'); + return; + } + gl.uniform1f(rCoordLocation, rTextureCoord); + + // Draw the triangles + wtu.clearAndDrawUnitQuad(gl, [0, 0, 0, 255]); + // Check a few pixels near the top and bottom and make sure they have + // the right color. + debug("Checking lower left corner"); + wtu.checkCanvasRect(gl, 4, 4, 2, 2, bottomColor, + "shouldBe " + bottomColor); + debug("Checking upper left corner"); + wtu.checkCanvasRect(gl, 4, gl.canvas.height - 8, 2, 2, topColor, + "shouldBe " + topColor); + } - imgCanvas = document.createElement("canvas"); - imgCanvas.width = 2; - imgCanvas.height = 2; - var imgCtx = imgCanvas.getContext("2d"); - var imgData = imgCtx.createImageData(1, 2); - for (var i = 0; i < 2; i++) { - var stride = i * 8; - imgData.data[stride + 0] = redColor[0]; - imgData.data[stride + 1] = redColor[1]; - imgData.data[stride + 2] = redColor[2]; - imgData.data[stride + 3] = 255; - imgData.data[stride + 4] = greenColor[0]; - imgData.data[stride + 5] = greenColor[1]; - imgData.data[stride + 6] = greenColor[2]; - imgData.data[stride + 7] = 255; - } - imgCtx.putImageData(imgData, 0, 0); - - // apparently Image is different than . - var newImage = new Image(); - newImage.onload = function() { - runTest2(newImage); - }; - newImage.onerror = function() { - testFailed("Creating image from canvas failed. Image src: " + this.src); - finishTest(); - }; - newImage.src = imgCanvas.toDataURL(); - } + var cases = [ + // No UNPACK_IMAGE_HEIGHT specified. + { flipY: false, sourceSubRectangle: [0, 0, 2, 2], depth: 2, rTextureCoord: 0.0, + topColor: redColor, bottomColor: redColor }, + { flipY: false, sourceSubRectangle: [0, 0, 2, 2], depth: 2, rTextureCoord: 1.0, + topColor: blueColor, bottomColor: blueColor }, + { flipY: true, sourceSubRectangle: [0, 0, 2, 2], depth: 2, rTextureCoord: 0.0, + topColor: blueColor, bottomColor: blueColor }, + { flipY: true, sourceSubRectangle: [0, 0, 2, 2], depth: 2, rTextureCoord: 1.0, + topColor: redColor, bottomColor: redColor }, + { flipY: false, sourceSubRectangle: [2, 0, 2, 2], depth: 2, rTextureCoord: 0.0, + topColor: greenColor, bottomColor: greenColor }, + { flipY: false, sourceSubRectangle: [2, 0, 2, 2], depth: 2, rTextureCoord: 1.0, + topColor: cyanColor, bottomColor: cyanColor }, + { flipY: true, sourceSubRectangle: [2, 0, 2, 2], depth: 2, rTextureCoord: 0.0, + topColor: cyanColor, bottomColor: cyanColor }, + { flipY: true, sourceSubRectangle: [2, 0, 2, 2], depth: 2, rTextureCoord: 1.0, + topColor: greenColor, bottomColor: greenColor }, + + // Use UNPACK_IMAGE_HEIGHT to skip some pixels. + { flipY: false, sourceSubRectangle: [0, 0, 1, 1], depth: 2, unpackImageHeight: 2, rTextureCoord: 0.0, + topColor: redColor, bottomColor: redColor }, + { flipY: false, sourceSubRectangle: [0, 0, 1, 1], depth: 2, unpackImageHeight: 2, rTextureCoord: 1.0, + topColor: blueColor, bottomColor: blueColor }, + { flipY: true, sourceSubRectangle: [0, 0, 1, 1], depth: 2, unpackImageHeight: 2, rTextureCoord: 0.0, + topColor: blueColor, bottomColor: blueColor }, + { flipY: true, sourceSubRectangle: [0, 0, 1, 1], depth: 2, unpackImageHeight: 2, rTextureCoord: 1.0, + topColor: redColor, bottomColor: redColor }, + { flipY: false, sourceSubRectangle: [2, 0, 1, 1], depth: 2, unpackImageHeight: 2, rTextureCoord: 0.0, + topColor: greenColor, bottomColor: greenColor }, + { flipY: false, sourceSubRectangle: [2, 0, 1, 1], depth: 2, unpackImageHeight: 2, rTextureCoord: 1.0, + topColor: cyanColor, bottomColor: cyanColor }, + { flipY: true, sourceSubRectangle: [2, 0, 1, 1], depth: 2, unpackImageHeight: 2, rTextureCoord: 0.0, + topColor: cyanColor, bottomColor: cyanColor }, + { flipY: true, sourceSubRectangle: [2, 0, 1, 1], depth: 2, unpackImageHeight: 2, rTextureCoord: 1.0, + topColor: greenColor, bottomColor: greenColor }, + ]; - function runTest2(image) { - runTestOnImage(image); + var program = tiu.setupTexturedQuadWith3D(gl, internalFormat); + for (var i in cases) { + runOneIteration(image, false, cases[i].flipY, gl.TEXTURE_3D, + cases[i].depth, cases[i].sourceSubRectangle, + cases[i].unpackImageHeight, cases[i].rTextureCoord, + cases[i].topColor, cases[i].bottomColor, + program); + runOneIteration(image, true, cases[i].flipY, gl.TEXTURE_3D, + cases[i].depth, cases[i].sourceSubRectangle, + cases[i].unpackImageHeight, cases[i].rTextureCoord, + cases[i].topColor, cases[i].bottomColor, + program); + } - wtu.makeImageFromCanvas(imgCanvas, function() { - runTest3(this); - }); + program = tiu.setupTexturedQuadWith2DArray(gl, internalFormat); + for (var i in cases) { + runOneIteration(image, false, cases[i].flipY, gl.TEXTURE_2D_ARRAY, + cases[i].depth, cases[i].sourceSubRectangle, + cases[i].unpackImageHeight, cases[i].rTextureCoord, + cases[i].topColor, cases[i].bottomColor, + program); + runOneIteration(image, true, cases[i].flipY, gl.TEXTURE_2D_ARRAY, + cases[i].depth, cases[i].sourceSubRectangle, + cases[i].unpackImageHeight, cases[i].rTextureCoord, + cases[i].topColor, cases[i].bottomColor, + program); + } } - function runTest3(image) { - runTestOnImage(image); - + function runTest(imageMap) + { + runRedGreenTest(imageMap[imageURLs[0]]); + runRedGreenBlueCyanTest(imageMap[imageURLs[1]]); wtu.glErrorShouldBe(gl, gl.NO_ERROR, "should be no errors"); finishTest(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-svg-image.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-svg-image.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-svg-image.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-svg-image.js 2017-01-16 01:39:44.000000000 +0000 @@ -79,7 +79,8 @@ // Initialize the texture to black first gl.texImage3D(bindingTarget, 0, gl[internalFormat], image.width, image.height, 1 /* depth */, 0, gl[pixelFormat], gl[pixelType], null); - gl.texSubImage3D(bindingTarget, 0, 0, 0, 0, gl[pixelFormat], gl[pixelType], image); + gl.texSubImage3D(bindingTarget, 0, 0, 0, 0, image.width, image.height, 1 /* depth */, + gl[pixelFormat], gl[pixelType], image); // Draw the triangles wtu.clearAndDrawUnitQuad(gl, [0, 0, 0, 255]); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-video.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-video.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-video.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-video.js 2017-01-16 01:39:44.000000000 +0000 @@ -44,6 +44,7 @@ // differently. Some might be GPU accelerated, some might not. Etc... var videos = [ { src: resourcePath + "red-green.mp4" , type: 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"', }, + { src: resourcePath + "red-green.webmvp9.webm", type: 'video/webm; codecs="vp9"', }, { src: resourcePath + "red-green.webmvp8.webm", type: 'video/webm; codecs="vp8, vorbis"', }, { src: resourcePath + "red-green.theora.ogv", type: 'video/ogg; codecs="theora, vorbis"', }, ]; @@ -76,10 +77,17 @@ runTest(); } - function runOneIteration(videoElement, flipY, topColor, bottomColor, program, bindingTarget) + function runOneIteration(videoElement, flipY, useTexSubImage3D, topColor, bottomColor, program, bindingTarget, + depth, sourceSubRectangle, unpackImageHeight, rTextureCoord) { - debug('Testing ' + ' with flipY=' + flipY + ' bindingTarget=' + - (bindingTarget == gl.TEXTURE_3D ? 'TEXTURE_3D' : 'TEXTURE_2D_ARRAY')); + debug('Testing ' + + (useTexSubImage3D ? "texSubImage3D" : "texImage3D") + + ' with flipY=' + flipY + ' bindingTarget=' + + (bindingTarget == gl.TEXTURE_3D ? 'TEXTURE_3D' : 'TEXTURE_2D_ARRAY') + + (sourceSubRectangle ? ', sourceSubRectangle=' + sourceSubRectangle : '') + + (unpackImageHeight ? ', unpackImageHeight=' + unpackImageHeight : '') + + ', depth=' + depth + + ', rTextureCoord=' + rTextureCoord); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); // Disable any writes to the alpha channel gl.colorMask(1, 1, 1, 0); @@ -95,14 +103,35 @@ // Set up pixel store parameters gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false); + gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE); + var uploadWidth = videoElement.width; + var uploadHeight = videoElement.height; + if (sourceSubRectangle) { + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, sourceSubRectangle[0]); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, sourceSubRectangle[1]); + uploadWidth = sourceSubRectangle[2]; + uploadHeight = sourceSubRectangle[3]; + } + if (unpackImageHeight) { + gl.pixelStorei(gl.UNPACK_IMAGE_HEIGHT, unpackImageHeight); + } // Upload the videoElement into the texture - // Initialize the texture to black first - var width = videoElement.videoWidth; - var height = videoElement.videoHeight; - gl.texImage3D(bindingTarget, 0, gl[internalFormat], - width, height, 1 /* depth */, 0, - gl[pixelFormat], gl[pixelType], null); - gl.texSubImage3D(bindingTarget, 0, 0, 0, 0, gl[pixelFormat], gl[pixelType], videoElement); + if (useTexSubImage3D) { + // Initialize the texture to black first + gl.texImage3D(bindingTarget, 0, gl[internalFormat], + uploadWidth, uploadHeight, depth, 0, + gl[pixelFormat], gl[pixelType], null); + gl.texSubImage3D(bindingTarget, 0, 0, 0, 0, + uploadWidth, uploadHeight, depth, + gl[pixelFormat], gl[pixelType], videoElement); + } else { + gl.texImage3D(bindingTarget, 0, gl[internalFormat], + uploadWidth, uploadHeight, depth, 0, + gl[pixelFormat], gl[pixelType], videoElement); + } + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, 0); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, 0); + gl.pixelStorei(gl.UNPACK_IMAGE_HEIGHT, 0); var c = document.createElement("canvas"); c.width = 16; @@ -112,6 +141,13 @@ ctx.drawImage(videoElement, 0, 0, 16, 16); document.body.appendChild(c); + var rCoordLocation = gl.getUniformLocation(program, 'uRCoord'); + if (!rCoordLocation) { + testFailed('Shader incorrectly set up; couldn\'t find uRCoord uniform'); + return; + } + gl.uniform1f(rCoordLocation, rTextureCoord); + // Draw the triangles wtu.clearAndDrawUnitQuad(gl, [0, 0, 0, 255]); // Check a few pixels near the top and bottom and make sure they have @@ -128,8 +164,24 @@ function runTest(videoElement) { var cases = [ - { flipY: true, topColor: redColor, bottomColor: greenColor }, - { flipY: false, topColor: greenColor, bottomColor: redColor }, + // No UNPACK_IMAGE_HEIGHT specified. + { flipY: false, sourceSubRectangle: [32, 16, 16, 16], depth: 5, rTextureCoord: 0, + topColor: redColor, bottomColor: redColor }, + // Note that an rTextureCoord of 4.0 satisfies the need to + // have it be >= 1.0 for the TEXTURE_3D case, and also its + // use as an index in the TEXTURE_2D_ARRAY case. + { flipY: false, sourceSubRectangle: [32, 16, 16, 16], depth: 5, rTextureCoord: 4, + topColor: greenColor, bottomColor: greenColor }, + { flipY: false, sourceSubRectangle: [24, 48, 32, 32], depth: 1, rTextureCoord: 0, + topColor: greenColor, bottomColor: redColor }, + { flipY: true, sourceSubRectangle: [24, 48, 32, 32], depth: 1, rTextureCoord: 0, + topColor: redColor, bottomColor: greenColor }, + + // Use UNPACK_IMAGE_HEIGHT to skip some pixels. + { flipY: false, sourceSubRectangle: [32, 16, 16, 16], depth: 2, unpackImageHeight: 64, rTextureCoord: 0, + topColor: redColor, bottomColor: redColor }, + { flipY: false, sourceSubRectangle: [32, 16, 16, 16], depth: 2, unpackImageHeight: 64, rTextureCoord: 1, + topColor: greenColor, bottomColor: greenColor }, ]; function runTexImageTest(bindingTarget) { @@ -177,9 +229,18 @@ } function runTest() { for (var i in cases) { - runOneIteration(video, cases[i].flipY, + runOneIteration(video, cases[i].flipY, false, + cases[i].topColor, cases[i].bottomColor, + program, bindingTarget, cases[i].depth, + cases[i].sourceSubRectangle, + cases[i].unpackImageHeight, + cases[i].rTextureCoord); + runOneIteration(video, cases[i].flipY, true, cases[i].topColor, cases[i].bottomColor, - program, bindingTarget); + program, bindingTarget, cases[i].depth, + cases[i].sourceSubRectangle, + cases[i].unpackImageHeight, + cases[i].rTextureCoord); } runNextVideo(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-webgl-canvas.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-webgl-canvas.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-webgl-canvas.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-3d-with-webgl-canvas.js 2017-01-16 01:39:44.000000000 +0000 @@ -85,7 +85,7 @@ ctx.canvas.height = 2; setCanvasToRedGreen(ctx); } - + function runOneIteration(canvas, flipY, program, bindingTarget, opt_texture) { debug('Testing ' + flipY + ' bindingTarget=' + (bindingTarget == gl.TEXTURE_3D ? 'TEXTURE_3D' : 'TEXTURE_2D_ARRAY') + @@ -113,7 +113,8 @@ // Initialize the texture to black first gl.texImage3D(bindingTarget, 0, gl[internalFormat], canvas.width, canvas.height, 1 /* depth */, 0, gl[pixelFormat], gl[pixelType], null); - gl.texSubImage3D(bindingTarget, 0, 0, 0, 0, gl[pixelFormat], gl[pixelType], canvas); + gl.texSubImage3D(bindingTarget, 0, 0, 0, 0, canvas.width, canvas.height, 1 /* depth */, + gl[pixelFormat], gl[pixelType], canvas); var width = gl.canvas.width; var height = gl.canvas.height; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-utils.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-utils.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-utils.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-utils.js 2017-01-16 01:39:44.000000000 +0000 @@ -41,7 +41,7 @@ '}'].join('\n'); /** - * A fragment shader for a single integer texture. + * A fragment shader for a single unsigned integer texture. * @type {string} */ // Note we always output 1.0 for alpha because if the texture does not contain @@ -61,7 +61,27 @@ '}'].join('\n'); /** - * A fragment shader for a single cube map integer texture. + * A fragment shader for a single signed integer texture. + * @type {string} + */ + // Note we always output 1.0 for alpha because if the texture does not contain + // alpha channel, sampling returns 1; for RGBA textures, sampling returns [0,255]. + var simpleIntTextureFragmentShaderES3 = [ + '#version 300 es', + 'precision mediump float;', + 'uniform mediump isampler2D tex;', + 'in vec2 texCoord;', + 'out vec4 fragData;', + 'void main() {', + ' ivec4 data = texture(tex, texCoord);', + ' fragData = vec4(float(data[0])/255.0,', + ' float(data[1])/255.0,', + ' float(data[2])/255.0,', + ' 1.0);', + '}'].join('\n'); + + /** + * A fragment shader for a single cube map unsigned integer texture. * @type {string} */ // Note we always output 1.0 for alpha because if the texture does not contain @@ -99,25 +119,64 @@ '}'].join('\n'); /** + * A fragment shader for a single cube map signed integer texture. + * @type {string} + */ + // Note we always output 1.0 for alpha because if the texture does not contain + // alpha channel, sampling returns 1; for RGBA textures, sampling returns [0,255]. + var simpleCubeMapIntTextureFragmentShaderES3 = [ + '#version 300 es', + 'precision mediump float;', + 'uniform mediump isamplerCube tex;', + 'uniform int face;', + 'in vec2 texCoord;', + 'out vec4 fragData;', + 'void main() {', + // Transform [0, 1] -> [-1, 1] + ' vec2 texC2 = (texCoord * 2.) - 1.;', + // Transform 2d tex coord. to each face of TEXTURE_CUBE_MAP coord. + ' vec3 texCube = vec3(0., 0., 0.);', + ' if (face == 34069) {', // TEXTURE_CUBE_MAP_POSITIVE_X + ' texCube = vec3(1., -texC2.y, -texC2.x);', + ' } else if (face == 34070) {', // TEXTURE_CUBE_MAP_NEGATIVE_X + ' texCube = vec3(-1., -texC2.y, texC2.x);', + ' } else if (face == 34071) {', // TEXTURE_CUBE_MAP_POSITIVE_Y + ' texCube = vec3(texC2.x, 1., texC2.y);', + ' } else if (face == 34072) {', // TEXTURE_CUBE_MAP_NEGATIVE_Y + ' texCube = vec3(texC2.x, -1., -texC2.y);', + ' } else if (face == 34073) {', // TEXTURE_CUBE_MAP_POSITIVE_Z + ' texCube = vec3(texC2.x, -texC2.y, 1.);', + ' } else if (face == 34074) {', // TEXTURE_CUBE_MAP_NEGATIVE_Z + ' texCube = vec3(-texC2.x, -texC2.y, -1.);', + ' }', + ' ivec4 data = texture(tex, texCube);', + ' fragData = vec4(float(data[0])/255.0,', + ' float(data[1])/255.0,', + ' float(data[2])/255.0,', + ' 1.0);', + '}'].join('\n'); + + /** * A fragment shader for a single 3D texture. * @type {string} */ - // Note we always set the tex coordinate t to 0. + // Note that the tex coordinate r (the uniform uRCoord) is set to 0.0 by default. var simple3DTextureFragmentShaderES3 = [ '#version 300 es', 'precision mediump float;', 'uniform mediump sampler3D tex;', 'in vec2 texCoord;', + 'uniform float uRCoord;', 'out vec4 fragData;', 'void main() {', - ' fragData = vec4(texture(tex, vec3(texCoord, 0.0)).rgb, 1.0);', + ' fragData = vec4(texture(tex, vec3(texCoord, uRCoord)).rgb, 1.0);', '}'].join('\n'); /** - * A fragment shader for a single 3D integer texture. + * A fragment shader for a single 3D unsigned integer texture. * @type {string} */ - // Note we always set the tex coordinate t to 0. + // Note that the tex coordinate r (the uniform uRCoord) is set to 0.0 by default. // Note we always output 1.0 for alpha because if the texture does not contain // alpha channel, sampling returns 1; for RGBA textures, sampling returns [0,255]. var simple3DUintTextureFragmentShaderES3 = [ @@ -125,9 +184,32 @@ 'precision mediump float;', 'uniform mediump usampler3D tex;', 'in vec2 texCoord;', + 'uniform float uRCoord;', + 'out vec4 fragData;', + 'void main() {', + ' uvec4 data = texture(tex, vec3(texCoord, uRCoord));', + ' fragData = vec4(float(data[0])/255.0,', + ' float(data[1])/255.0,', + ' float(data[2])/255.0,', + ' 1.0);', + '}'].join('\n'); + + /** + * A fragment shader for a single 3D signed integer texture. + * @type {string} + */ + // Note that the tex coordinate r (the uniform uRCoord) is set to 0.0 by default. + // Note we always output 1.0 for alpha because if the texture does not contain + // alpha channel, sampling returns 1; for RGBA textures, sampling returns [0,255]. + var simple3DIntTextureFragmentShaderES3 = [ + '#version 300 es', + 'precision mediump float;', + 'uniform mediump isampler3D tex;', + 'in vec2 texCoord;', + 'uniform float uRCoord;', 'out vec4 fragData;', 'void main() {', - ' vec4 data = vec4(texture(tex, vec3(texCoord, 0.0)).rgb, 1.0);', + ' ivec4 data = texture(tex, vec3(texCoord, uRCoord));', ' fragData = vec4(float(data[0])/255.0,', ' float(data[1])/255.0,', ' float(data[2])/255.0,', @@ -138,22 +220,25 @@ * A fragment shader for a single 2D_ARRAY texture. * @type {string} */ - // Note we always use the first image in the array. + // Note that the first image in the array (selected by the uniform + // uRCoord) is used by default. var simple2DArrayTextureFragmentShaderES3 = [ '#version 300 es', 'precision mediump float;', 'uniform mediump sampler2DArray tex;', 'in vec2 texCoord;', + 'uniform float uRCoord;', 'out vec4 fragData;', 'void main() {', - ' fragData = vec4(texture(tex, vec3(texCoord, 0.0)).rgb, 1.0);', + ' fragData = vec4(texture(tex, vec3(texCoord, uRCoord)).rgb, 1.0);', '}'].join('\n'); /** * A fragment shader for a single 2D_ARRAY unsigned integer texture. * @type {string} */ - // Note we always use the first image in the array. + // Note that the first image in the array (selected by the uniform + // uRCoord) is used by default. // Note we always output 1.0 for alpha because if the texture does not contain // alpha channel, sampling returns 1; for RGBA textures, sampling returns [0,255]. var simple2DArrayUintTextureFragmentShaderES3 = [ @@ -161,9 +246,33 @@ 'precision mediump float;', 'uniform mediump usampler2DArray tex;', 'in vec2 texCoord;', + 'uniform float uRCoord;', 'out vec4 fragData;', 'void main() {', - ' vec4 data = vec4(texture(tex, vec3(texCoord, 0.0)).rgb, 1.0);', + ' uvec4 data = texture(tex, vec3(texCoord, uRCoord));', + ' fragData = vec4(float(data[0])/255.0,', + ' float(data[1])/255.0,', + ' float(data[2])/255.0,', + ' 1.0);', + '}'].join('\n'); + + /** + * A fragment shader for a single 2D_ARRAY signed integer texture. + * @type {string} + */ + // Note that the first image in the array (selected by the uniform + // uRCoord) is used by default. + // Note we always output 1.0 for alpha because if the texture does not contain + // alpha channel, sampling returns 1; for RGBA textures, sampling returns [0,255]. + var simple2DArrayIntTextureFragmentShaderES3 = [ + '#version 300 es', + 'precision mediump float;', + 'uniform mediump isampler2DArray tex;', + 'in vec2 texCoord;', + 'uniform float uRCoord;', + 'out vec4 fragData;', + 'void main() {', + ' ivec4 data = texture(tex, vec3(texCoord, uRCoord));', ' fragData = vec4(float(data[0])/255.0,', ' float(data[1])/255.0,', ' float(data[2])/255.0,', @@ -191,6 +300,16 @@ }; /** + * Creates a simple signed integer texture fragment shader. + * Output is scaled by 1/255 to bring the result into normalized float range. + * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. + * @return {!WebGLShader} + */ + var setupSimpleIntTextureFragmentShader = function(gl) { + return WebGLTestUtils.loadShader(gl, simpleIntTextureFragmentShaderES3, gl.FRAGMENT_SHADER); + }; + + /** * Creates a simple cube map unsigned integer texture fragment shader. * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. * @return {!WebGLShader} @@ -200,6 +319,15 @@ }; /** + * Creates a simple cube map signed integer texture fragment shader. + * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. + * @return {!WebGLShader} + */ + var setupSimpleCubeMapIntTextureFragmentShader = function(gl) { + return WebGLTestUtils.loadShader(gl, simpleCubeMapIntTextureFragmentShaderES3, gl.FRAGMENT_SHADER); + }; + + /** * Creates a simple 3D texture fragment shader. * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. * @return {!WebGLShader} @@ -209,7 +337,7 @@ }; /** - * Creates a simple 3D integer texture fragment shader. + * Creates a simple 3D unsigned integer texture fragment shader. * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. * @return {!WebGLShader} */ @@ -218,6 +346,15 @@ }; /** + * Creates a simple 3D signed integer texture fragment shader. + * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. + * @return {!WebGLShader} + */ + var setupSimple3DIntTextureFragmentShader = function(gl) { + return WebGLTestUtils.loadShader(gl, simple3DIntTextureFragmentShaderES3, gl.FRAGMENT_SHADER); + }; + + /** * Creates a simple 2D_ARRAY texture fragment shader. * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. * @return {!WebGLShader} @@ -265,6 +402,35 @@ }; /** + * Creates a simple signed integer texture program. + * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. + * @param {number} opt_positionLocation The attrib location for position. + * @param {number} opt_texcoordLocation The attrib location for texture coords. + * @return {WebGLProgram} + */ + var setupSimpleIntTextureProgram = function(gl, opt_positionLocation, opt_texcoordLocation) + { + opt_positionLocation = opt_positionLocation || 0; + opt_texcoordLocation = opt_texcoordLocation || 1; + var vs = setupSimpleTextureVertexShader(gl), + fs = setupSimpleIntTextureFragmentShader(gl); + if (!vs || !fs) { + return null; + } + var program = WebGLTestUtils.setupProgram( + gl, + [vs, fs], + ['vPosition', 'texCoord0'], + [opt_positionLocation, opt_texcoordLocation]); + if (!program) { + gl.deleteShader(fs); + gl.deleteShader(vs); + } + gl.useProgram(program); + return program; + }; + + /** * Creates a simple cube map unsigned integer texture program. * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. * @param {number} opt_positionLocation The attrib location for position. @@ -293,6 +459,34 @@ }; /** + * Creates a simple cube map signed integer texture program. + * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. + * @param {number} opt_positionLocation The attrib location for position. + * @param {number} opt_texcoordLocation The attrib location for texture coords. + * @return {WebGLProgram} + */ + var setupSimpleCubeMapIntTextureProgram = function(gl, opt_positionLocation, opt_texcoordLocation) { + opt_positionLocation = opt_positionLocation || 0; + opt_texcoordLocation = opt_texcoordLocation || 1; + var vs = setupSimpleTextureVertexShader(gl); + var fs = setupSimpleCubeMapIntTextureFragmentShader(gl); + if (!vs || !fs) { + return null; + } + var program = WebGLTestUtils.setupProgram( + gl, + [vs, fs], + ['vPosition', 'texCoord0'], + [opt_positionLocation, opt_texcoordLocation]); + if (!program) { + gl.deleteShader(fs); + gl.deleteShader(vs); + } + gl.useProgram(program); + return program; + }; + + /** * Creates a simple 3D texture program. * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. * @param {number} opt_positionLocation The attrib location for position. @@ -351,6 +545,35 @@ }; /** + * Creates a simple 3D signed integer texture program. + * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. + * @param {number} opt_positionLocation The attrib location for position. + * @param {number} opt_texcoordLocation The attrib location for texture coords. + * @return {WebGLProgram} + */ + var setupSimple3DIntTextureProgram = function(gl, opt_positionLocation, opt_texcoordLocation) + { + opt_positionLocation = opt_positionLocation || 0; + opt_texcoordLocation = opt_texcoordLocation || 1; + var vs = setupSimpleTextureVertexShader(gl), + fs = setupSimple3DIntTextureFragmentShader(gl); + if (!vs || !fs) { + return null; + } + var program = WebGLTestUtils.setupProgram( + gl, + [vs, fs], + ['vPosition', 'texCoord0'], + [opt_positionLocation, opt_texcoordLocation]); + if (!program) { + gl.deleteShader(fs); + gl.deleteShader(vs); + } + gl.useProgram(program); + return program; + }; + + /** * Creates a simple 2D_ARRAY texture program. * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. * @param {number} opt_positionLocation The attrib location for position. @@ -409,6 +632,35 @@ }; /** + * Creates a simple 2D_ARRAY signed integer texture program. + * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. + * @param {number} opt_positionLocation The attrib location for position. + * @param {number} opt_texcoordLocation The attrib location for texture coords. + * @return {WebGLProgram} + */ + var setupSimple2DArrayIntTextureProgram = function(gl, opt_positionLocation, opt_texcoordLocation) + { + opt_positionLocation = opt_positionLocation || 0; + opt_texcoordLocation = opt_texcoordLocation || 1; + var vs = setupSimpleTextureVertexShader(gl), + fs = setupSimple2DArrayIntTextureFragmentShader(gl); + if (!vs || !fs) { + return null; + } + var program = WebGLTestUtils.setupProgram( + gl, + [vs, fs], + ['vPosition', 'texCoord0'], + [opt_positionLocation, opt_texcoordLocation]); + if (!program) { + gl.deleteShader(fs); + gl.deleteShader(vs); + } + gl.useProgram(program); + return program; + }; + + /** * Creates a program and buffers for rendering a unsigned integer textured quad. * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. * @return {!WebGLProgram} @@ -420,6 +672,17 @@ }; /** + * Creates a program and buffers for rendering a signed integer textured quad. + * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. + * @return {!WebGLProgram} + */ + var setupIntTexturedQuad = function(gl) { + var program = setupSimpleIntTextureProgram(gl); + wtu.setupUnitQuad(gl); + return program; + }; + + /** * Creates a program and buffers for rendering a textured quad with * a cube map unsigned integer texture. * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. @@ -433,16 +696,40 @@ }; /** + * Creates a program and buffers for rendering a textured quad with + * a cube map signed integer texture. + * @param {!WebGLRenderingContext} gl The WebGLRenderingContext to use. + * @return {!WebGLProgram} + */ + var setupIntTexturedQuadWithCubeMap = function(gl) + { + var program = setupSimpleCubeMapIntTextureProgram(gl); + wtu.setupUnitQuad(gl); + return program; + }; + + /** * Does the GL internal format represent an unsigned integer format * texture? * @return {boolean} */ var isUintFormat = function(internalFormat) { - return (internalFormat == "R8UI" || - internalFormat == "RG8UI" || - internalFormat == "RGB8UI" || - internalFormat == "RGBA8UI"); + return (internalFormat == "R8UI" || internalFormat == "RG8UI" || internalFormat == "RGB8UI" || internalFormat == "RGBA8UI" || + internalFormat == "R16UI" || internalFormat == "RG16UI" || internalFormat == "RGB16UI" || internalFormat == "RGBA16UI" || + internalFormat == "R32UI" || internalFormat == "RG32UI" || internalFormat == "RGB32UI" || internalFormat == "RGBA32UI"); + }; + + /** + * Does the GL internal format represent an signed integer format + * texture? + * @return {boolean} + */ + var isIntFormat = function(internalFormat) + { + return (internalFormat == "R8I" || internalFormat == "RG8I" || internalFormat == "RGB8I" || internalFormat == "RGBA8I" || + internalFormat == "R16I" || internalFormat == "RG16I" || internalFormat == "RGB16I" || internalFormat == "RGBA16I" || + internalFormat == "R32I" || internalFormat == "RG32I" || internalFormat == "RGB32I" || internalFormat == "RGBA32I"); }; /** @@ -456,7 +743,8 @@ { if (isUintFormat(internalFormat)) return setupUintTexturedQuad(gl); - + if (isIntFormat(internalFormat)) + return setupIntTexturedQuad(gl); return wtu.setupTexturedQuad(gl); }; @@ -471,7 +759,8 @@ { if (isUintFormat(internalFormat)) return setupUintTexturedQuadWithCubeMap(gl); - + if (isIntFormat(internalFormat)) + return setupIntTexturedQuadWithCubeMap(gl); return wtu.setupTexturedQuadWithCubeMap(gl); } @@ -487,8 +776,12 @@ var program; if (isUintFormat(internalFormat)) program = setupSimple3DUintTextureProgram(gl); + else if (isIntFormat(internalFormat)) + program = setupSimple3DIntTextureProgram(gl); else program = setupSimple3DTextureProgram(gl); + var uRCoordLoc = gl.getUniformLocation(program, 'uRCoord'); + gl.uniform1f(uRCoordLoc, 0.0); wtu.setupUnitQuad(gl); return program; }; @@ -505,8 +798,12 @@ var program; if (isUintFormat(internalFormat)) program = setupSimple2DArrayUintTextureProgram(gl); + else if (isIntFormat(internalFormat)) + program = setupSimple2DArrayIntTextureProgram(gl); else program = setupSimple2DArrayTextureProgram(gl); + var uRCoordLoc = gl.getUniformLocation(program, 'uRCoord'); + gl.uniform1f(uRCoordLoc, 0.0); wtu.setupUnitQuad(gl); return program; }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-with-image-bitmap-utils.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-with-image-bitmap-utils.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-with-image-bitmap-utils.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/tests/tex-image-and-sub-image-with-image-bitmap-utils.js 2017-01-16 01:39:44.000000000 +0000 @@ -22,7 +22,7 @@ */ -function runOneIterationImageBitmapTest(useTexSubImage2D, bindingTarget, program, bitmap, flipY, premultiplyAlpha, optionsVal, +function runOneIterationImageBitmapTest(useTexSubImage, bindingTarget, program, bitmap, flipY, premultiplyAlpha, optionsVal, internalFormat, pixelFormat, pixelType, gl, tiu, wtu) { var halfRed = [128, 0, 0]; @@ -52,13 +52,19 @@ break; } - if (optionsVal.is3D) - debug('Testing texSubImage3D' + ' with flipY=' + flipY + ' and premultiplyAlpha=' + premultiplyAlpha + - ', bindingTarget=' + (bindingTarget == gl.TEXTURE_3D ? 'TEXTURE_3D' : 'TEXTURE_2D_ARRAY')); - else - debug('Testing ' + (useTexSubImage2D ? 'texSubImage2D' : 'texImage2D') + - ' with flipY=' + flipY + ' and premultiplyAlpha=' + premultiplyAlpha + - ', bindingTarget=' + (bindingTarget == gl.TEXTURE_2D ? 'TEXTURE_2D' : 'TEXTURE_CUBE_MAP')); + var str; + if (optionsVal.is3D) { + str = 'Testing ' + (useTexSubImage ? 'texSubImage3D' : 'texImage3D') + + ' with flipY=' + flipY + ', premultiplyAlpha=' + premultiplyAlpha + + ', bindingTarget=' + (bindingTarget == gl.TEXTURE_3D ? 'TEXTURE_3D' : 'TEXTURE_2D_ARRAY'); + } else { + str = 'Testing ' + (useTexSubImage ? 'texSubImage2D' : 'texImage2D') + + ' with flipY=' + flipY + ', premultiplyAlpha=' + premultiplyAlpha + + ', bindingTarget=' + (bindingTarget == gl.TEXTURE_2D ? 'TEXTURE_2D' : 'TEXTURE_CUBE_MAP'); + } + debug(str); + bufferedLogToConsole(str); + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); // Enable writes to the RGBA channels gl.colorMask(1, 1, 1, 0); @@ -80,14 +86,17 @@ gl.TEXTURE_CUBE_MAP_POSITIVE_Z, gl.TEXTURE_CUBE_MAP_NEGATIVE_Z]; } + + bufferedLogToConsole("Starts uploading the image into texture"); // Upload the image into the texture for (var tt = 0; tt < targets.length; ++tt) { if (optionsVal.is3D) { gl.texImage3D(targets[tt], 0, gl[internalFormat], bitmap.width, bitmap.height, 1 /* depth */, 0, gl[pixelFormat], gl[pixelType], null); - gl.texSubImage3D(targets[tt], 0, 0, 0, 0, gl[pixelFormat], gl[pixelType], bitmap); + gl.texSubImage3D(targets[tt], 0, 0, 0, 0, bitmap.width, bitmap.height, 1, + gl[pixelFormat], gl[pixelType], bitmap); } else { - if (useTexSubImage2D) { + if (useTexSubImage) { // Initialize the texture to black first gl.texImage2D(targets[tt], 0, gl[internalFormat], bitmap.width, bitmap.height, 0, gl[pixelFormat], gl[pixelType], null); @@ -97,6 +106,7 @@ } } } + bufferedLogToConsole("Uploading texture completed"); var width = gl.canvas.width; var halfWidth = Math.floor(width / 2); @@ -114,8 +124,18 @@ var br = premultiplyAlpha ? ((optionsVal.alpha == 0.5) ? halfGreen : (optionsVal.alpha == 1) ? greenColor : blackColor) : greenColor; var loc; + var skipCorner = false; if (bindingTarget == gl.TEXTURE_CUBE_MAP) { loc = gl.getUniformLocation(program, "face"); + switch (pixelFormat) { + case gl.RED_INTEGER: + case gl.RG_INTEGER: + case gl.RGB_INTEGER: + case gl.RGBA_INTEGER: + // https://github.com/KhronosGroup/WebGL/issues/1819 + skipCorner = true; + break; + } } var tolerance = 10; @@ -128,13 +148,189 @@ // Check the top pixel and bottom pixel and make sure they have // the right color. - debug("Checking " + (flipY ? "top" : "bottom")); + bufferedLogToConsole("Checking " + (flipY ? "top" : "bottom")); wtu.checkCanvasRect(gl, quaterWidth, bottom, 2, 2, tl, "shouldBe " + tl); - wtu.checkCanvasRect(gl, halfWidth + quaterWidth, bottom, 2, 2, tr, "shouldBe " + tr, tolerance); - debug("Checking " + (flipY ? "bottom" : "top")); + if (!skipCorner && !flipY) { + wtu.checkCanvasRect(gl, halfWidth + quaterWidth, bottom, 2, 2, tr, "shouldBe " + tr, tolerance); + } + bufferedLogToConsole("Checking " + (flipY ? "bottom" : "top")); wtu.checkCanvasRect(gl, quaterWidth, top, 2, 2, bl, "shouldBe " + bl); - wtu.checkCanvasRect(gl, halfWidth + quaterWidth, top, 2, 2, br, "shouldBe " + br, tolerance); + if (!skipCorner && flipY) { + wtu.checkCanvasRect(gl, halfWidth + quaterWidth, top, 2, 2, br, "shouldBe " + br, tolerance); + } } + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "should be no errors"); +} + +function resetUnpackParams(gl) +{ + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, 0); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, 0); + gl.pixelStorei(gl.UNPACK_SKIP_IMAGES, 0); + gl.pixelStorei(gl.UNPACK_ROW_LENGTH, 0); + gl.pixelStorei(gl.UNPACK_IMAGE_HEIGHT, 0); +} + +function runOneIterationImageBitmapTestSubSource(useTexSubImage, bindingTarget, program, bitmap, flipY, premultiplyAlpha, optionsVal, + internalFormat, pixelFormat, pixelType, gl, tiu, wtu) +{ + var halfRed = [128, 0, 0]; + var halfGreen = [0, 128, 0]; + var redColor = [255, 0, 0]; + var greenColor = [0, 255, 0]; + var blackColor = [0, 0, 0]; + + switch (gl[pixelFormat]) { + case gl.RED: + case gl.RED_INTEGER: + greenColor = [0, 0, 0]; + halfGreen = [0, 0, 0]; + break; + default: + break; + } + + switch (gl[internalFormat]) { + case gl.SRGB8: + case gl.SRGB8_ALPHA8: + // Math.pow((128 / 255 + 0.055) / 1.055, 2.4) * 255 = 55 + halfRed = [55, 0, 0]; + halfGreen = [0, 55, 0]; + break; + default: + break; + } + + var str; + if (optionsVal.is3D) { + str = 'Testing ' + (useTexSubImage ? 'texSubImage3D' : 'texImage3D') + '[SubSource]' + + ' with flipY=' + flipY + ', premultiplyAlpha=' + premultiplyAlpha + + ', bindingTarget=TEXTURE_3D'; + } else { + str = 'Testing ' + (useTexSubImage ? 'texSubImage2D' : 'texImage2D') + '[SubSource]' + + ' with flipY=' + flipY + ', premultiplyAlpha=' + premultiplyAlpha + + ', bindingTarget=TEXTURE_2D'; + } + debug(str); + bufferedLogToConsole(str); + + gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); + // Enable writes to the RGBA channels + gl.colorMask(1, 1, 1, 0); + var texture = gl.createTexture(); + // Bind the texture to texture unit 0 + gl.bindTexture(bindingTarget, texture); + // Set up texture parameters + gl.texParameteri(bindingTarget, gl.TEXTURE_MIN_FILTER, gl.NEAREST); + gl.texParameteri(bindingTarget, gl.TEXTURE_MAG_FILTER, gl.NEAREST); + gl.texParameteri(bindingTarget, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(bindingTarget, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + + var srcTL = redColor; + var srcTR = premultiplyAlpha ? ((optionsVal.alpha == 0.5) ? halfRed : (optionsVal.alpha == 1) ? redColor : blackColor) : redColor; + var srcBL = greenColor; + var srcBR = premultiplyAlpha ? ((optionsVal.alpha == 0.5) ? halfGreen : (optionsVal.alpha == 1) ? greenColor : blackColor) : greenColor; + + var tl, tr, bl, br; + + bufferedLogToConsole("Starts uploading the image into texture"); + // Upload the image into the texture + if (optionsVal.is3D) { + if (useTexSubImage) { + // Initialize the texture to black first + gl.texImage3D(bindingTarget, 0, gl[internalFormat], bitmap.width, bitmap.height, 1 /* depth */, 0, + gl[pixelFormat], gl[pixelType], null); + // Only upload the left half image to the right half texture. + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, 0); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, 0); + gl.pixelStorei(gl.UNPACK_SKIP_IMAGES, 0); + gl.texSubImage3D(bindingTarget, 0, bitmap.width / 2, 0, 0, bitmap.width / 2, bitmap.height, 1, + gl[pixelFormat], gl[pixelType], bitmap); + tl = blackColor; + tr = srcTL; + bl = blackColor; + br = srcBL; + } else { + // Only upload the bottom middle quarter image + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, 0); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, bitmap.height / 2); + gl.pixelStorei(gl.UNPACK_SKIP_IMAGES, 0); + gl.texImage3D(bindingTarget, 0, gl[internalFormat], bitmap.width, bitmap.height / 2, 1 /* depth */, 0, + gl[pixelFormat], gl[pixelType], bitmap); + if (!flipY) { + tl = srcBL; + tr = srcBR; + bl = srcBL; + br = srcBR; + } else { + tl = srcTL; + tr = srcTR; + bl = srcTL; + br = srcTR; + } + } + } else { + if (useTexSubImage) { + // Initialize the texture to black first + gl.texImage2D(bindingTarget, 0, gl[internalFormat], bitmap.width, bitmap.height, 0, + gl[pixelFormat], gl[pixelType], null); + // Only upload the left half image to the right half texture. + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, 0); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, 0); + gl.texSubImage2D(bindingTarget, 0, bitmap.width / 2, 0, bitmap.width / 2, bitmap.height, + gl[pixelFormat], gl[pixelType], bitmap); + tl = blackColor; + tr = srcTL; + bl = blackColor; + br = srcBL; + } else { + // Only upload the right bottom image. + gl.pixelStorei(gl.UNPACK_SKIP_PIXELS, bitmap.width / 2); + gl.pixelStorei(gl.UNPACK_SKIP_ROWS, bitmap.height / 2); + gl.texImage2D(bindingTarget, 0, gl[internalFormat], bitmap.width / 2, bitmap.height / 2, 0, + gl[pixelFormat], gl[pixelType], bitmap); + resetUnpackParams(gl); + if (!flipY) { + tl = srcBR; + tr = srcBR; + bl = srcBR; + br = srcBR; + } else { + tl = srcTR; + tr = srcTR; + bl = srcTR; + br = srcTR; + } + } + } + bufferedLogToConsole("Uploading texture completed"); + + var width = gl.canvas.width; + var halfWidth = Math.floor(width / 2); + var quaterWidth = Math.floor(halfWidth / 2); + var height = gl.canvas.height; + var halfHeight = Math.floor(height / 2); + var quaterHeight = Math.floor(halfHeight / 2); + + var top = flipY ? quaterHeight : (height - halfHeight + quaterHeight); + var bottom = flipY ? (height - halfHeight + quaterHeight) : quaterHeight; + + + var tolerance = 10; + // Draw the triangles + wtu.clearAndDrawUnitQuad(gl, [0, 0, 0, 255]); + + // Check the top pixel and bottom pixel and make sure they have + // the right color. + // For right side, check pixels closer to left to avoid border in the video tests. + bufferedLogToConsole("Checking " + (flipY ? "top" : "bottom")); + wtu.checkCanvasRect(gl, quaterWidth, bottom, 2, 2, tl, "shouldBe " + tl, tolerance); + wtu.checkCanvasRect(gl, halfWidth + quaterWidth / 2, bottom, 2, 2, tr, "shouldBe " + tr, tolerance); + bufferedLogToConsole("Checking " + (flipY ? "bottom" : "top")); + wtu.checkCanvasRect(gl, quaterWidth, top, 2, 2, bl, "shouldBe " + bl, tolerance); + wtu.checkCanvasRect(gl, halfWidth + quaterWidth / 2, top, 2, 2, br, "shouldBe " + br, tolerance); + + wtu.glErrorShouldBe(gl, gl.NO_ERROR, "should be no errors"); } function runTestOnBindingTargetImageBitmap(bindingTarget, program, bitmaps, optionsVal, @@ -155,6 +351,15 @@ runOneIterationImageBitmapTest(cases[i].sub, bindingTarget, program, cases[i].bitmap, cases[i].flipY, cases[i].premultiply, optionsVal, internalFormat, pixelFormat, pixelType, gl, tiu, wtu); } + + if (wtu.getDefault3DContextVersion() > 1 && + (bindingTarget == gl.TEXTURE_2D || bindingTarget == gl.TEXTURE_3D)) { + // SKip testing source sub region on TEXTURE_CUBE_MAP and TEXTURE_2D_ARRAY to save running time. + for (var i in cases) { + runOneIterationImageBitmapTestSubSource(cases[i].sub, bindingTarget, program, cases[i].bitmap, + cases[i].flipY, cases[i].premultiply, optionsVal, internalFormat, pixelFormat, pixelType, gl, tiu, wtu); + } + } } function runImageBitmapTestInternal(bitmaps, alphaVal, internalFormat, pixelFormat, pixelType, gl, tiu, wtu, is3D) @@ -183,8 +388,6 @@ internalFormat, pixelFormat, pixelType, gl, tiu, wtu); } } - - wtu.glErrorShouldBe(gl, gl.NO_ERROR, "should be no errors"); } function runImageBitmapTest(source, alphaVal, internalFormat, pixelFormat, pixelType, gl, tiu, wtu, is3D) @@ -195,6 +398,7 @@ var p3 = createImageBitmap(source, {imageOrientation: "flipY", premultiplyAlpha: "premultiply"}).then(function(imageBitmap) { bitmaps.flipYPremul = imageBitmap }); var p4 = createImageBitmap(source, {imageOrientation: "flipY", premultiplyAlpha: "none"}).then(function(imageBitmap) { bitmaps.flipYUnpremul = imageBitmap }); Promise.all([p1, p2, p3, p4]).then(function() { + bufferedLogToConsole("All createImageBitmap promises are resolved"); runImageBitmapTestInternal(bitmaps, alphaVal, internalFormat, pixelFormat, pixelType, gl, tiu, wtu, is3D); }, function() { // createImageBitmap with options could be rejected if it is not supported diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/webgl-test-utils.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/webgl-test-utils.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/js/webgl-test-utils.js 2017-01-13 01:38:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/js/webgl-test-utils.js 2017-01-16 01:39:44.000000000 +0000 @@ -816,11 +816,13 @@ * where each element is in the range 0 to 255. * @param {number} opt_level The level of the texture to fill. Default = 0. * @param {number} opt_format The format for the texture. + * @param {number} opt_internalFormat The internal format for the texture. */ -var fillTexture = function(gl, tex, width, height, color, opt_level, opt_format, opt_type) { +var fillTexture = function(gl, tex, width, height, color, opt_level, opt_format, opt_type, opt_internalFormat) { opt_level = opt_level || 0; opt_format = opt_format || gl.RGBA; opt_type = opt_type || gl.UNSIGNED_BYTE; + opt_internalFormat = opt_internalFormat || opt_format; var pack = gl.getParameter(gl.UNPACK_ALIGNMENT); var numComponents = color.length; var bytesPerComponent = getBytesPerComponent(gl, opt_type); @@ -839,7 +841,7 @@ } gl.bindTexture(gl.TEXTURE_2D, tex); gl.texImage2D( - gl.TEXTURE_2D, opt_level, opt_format, width, height, 0, + gl.TEXTURE_2D, opt_level, opt_internalFormat, width, height, 0, opt_format, opt_type, buf); }; @@ -1160,7 +1162,7 @@ * @param {number} height width of region to check. * @param {!Array.} color The color expected. A 4 element array where * each element is in the range 0 to 255. - * @param {string} opt_msg Message to associate with success. Eg + * @param {string} opt_msg Message to associate with success or failure. Eg * ("should be red"). * @param {number} opt_errorRange Optional. Acceptable error in * color checking. 0 by default. @@ -1174,7 +1176,12 @@ msg = "should be " + color.toString(); testPassed(msg); }, - testFailed, + function(differentMsg) { + var msg = opt_msg; + if (msg === undefined) + msg = "should be " + color.toString(); + testFailed(msg + "\n" + differentMsg); + }, debug); }; @@ -1511,7 +1518,7 @@ * @param {number|Array.} glErrors The expected gl error or an array of expected errors. * @param {string} evalStr The string to evaluate. */ -var shouldGenerateGLError = function(gl, glErrors, evalStr) { +var shouldGenerateGLError = function(gl, glErrors, evalStr, opt_msg) { var exception; try { eval(evalStr); @@ -1521,7 +1528,10 @@ if (exception) { testFailed(evalStr + " threw exception " + exception); } else { - glErrorShouldBe(gl, glErrors, "after evaluating: " + evalStr); + if (!opt_msg) { + opt_msg = "after evaluating: " + evalStr; + } + glErrorShouldBe(gl, glErrors, opt_msg); } }; @@ -2385,11 +2395,11 @@ */ var insertImage = function(element, caption, img) { var div = document.createElement("div"); - div.appendChild(img); var label = document.createElement("div"); label.appendChild(document.createTextNode(caption)); div.appendChild(label); - element.appendChild(div); + div.appendChild(img); + element.appendChild(div); }; /** @@ -2922,6 +2932,60 @@ }, false); } +/** + * Convert sRGB color to linear color. + * @param {!Array.} color The color to be converted. + * The array has 4 elements, for example [R, G, B, A]. + * where each element is in the range 0 to 255. + * @return {!Array.} color The color to be converted. + * The array has 4 elements, for example [R, G, B, A]. + * where each element is in the range 0 to 255. + */ +var sRGBToLinear = function(color) { + return [sRGBChannelToLinear(color[0]), + sRGBChannelToLinear(color[1]), + sRGBChannelToLinear(color[2]), + color[3]] +} + +/** + * Convert linear color to sRGB color. + * @param {!Array.} color The color to be converted. + * The array has 4 elements, for example [R, G, B, A]. + * where each element is in the range 0 to 255. + * @return {!Array.} color The color to be converted. + * The array has 4 elements, for example [R, G, B, A]. + * where each element is in the range 0 to 255. + */ +var linearToSRGB = function(color) { + return [linearChannelToSRGB(color[0]), + linearChannelToSRGB(color[1]), + linearChannelToSRGB(color[2]), + color[3]] +} + +function sRGBChannelToLinear(value) { + value = value / 255; + if (value <= 0.04045) + value = value / 12.92; + else + value = Math.pow((value + 0.055) / 1.055, 2.4); + return Math.trunc(value * 255 + 0.5); +} + +function linearChannelToSRGB(value) { + value = value / 255; + if (value <= 0.0) { + value = 0.0; + } else if (value < 0.0031308) { + value = value * 12.92; + } else if (value < 1) { + value = Math.pow(value, 0.41666) * 1.055 - 0.055; + } else { + value = 1.0; + } + return Math.trunc(value * 255 + 0.5); +} var API = { addShaderSource: addShaderSource, addShaderSources: addShaderSources, @@ -3028,6 +3092,10 @@ // fullscreen api setupFullscreen: setupFullscreen, + // sRGB converter api + sRGBToLinear: sRGBToLinear, + linearToSRGB: linearToSRGB, + getHost: getHost, getBaseDomain: getBaseDomain, runningOnLocalhost: runningOnLocalhost, @@ -3045,7 +3113,6 @@ simpleVertexShader: { value: simpleVertexShader, writable: false }, simpleTextureFragmentShader: { value: simpleTextureFragmentShader, writable: false }, simpleCubeMapTextureFragmentShader: { value: simpleCubeMapTextureFragmentShader, writable: false }, - simpleTextureVertexShader: { value: simpleTextureVertexShader, writable: false }, simpleVertexColorFragmentShader: { value: simpleVertexColorFragmentShader, writable: false }, simpleVertexColorVertexShader: { value: simpleVertexColorVertexShader, writable: false } }); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/py/lint/LICENSE firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/py/lint/LICENSE --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/py/lint/LICENSE 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/py/lint/LICENSE 2017-01-16 01:39:44.000000000 +0000 @@ -0,0 +1,30 @@ +W3C 3-clause BSD License + +http://www.w3.org/Consortium/Legal/2008/03-bsd-license.html + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of works must retain the original copyright notice, + this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the original copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +* Neither the name of the W3C nor the names of its contributors may be + used to endorse or promote products derived from this work without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/py/lint/lint.py firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/py/lint/lint.py --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/py/lint/lint.py 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/py/lint/lint.py 2017-01-16 01:39:44.000000000 +0000 @@ -0,0 +1,223 @@ +#! /usr/bin/env python +import os +import subprocess +import re +import sys +import fnmatch +import commands + +from collections import defaultdict +from optparse import OptionParser + +lint_root = os.path.dirname(os.path.abspath(__file__)) +repo_root = os.path.dirname(os.path.dirname(lint_root)) + + +def git(command, *args): + args = list(args) + proc_kwargs = {"cwd": repo_root} + command_line = ["git", command] + args + + try: + return subprocess.check_output(command_line, **proc_kwargs) + except subprocess.CalledProcessError: + raise + + +def iter_files(flag=False, floder=""): + if floder != "" and floder != None: + os.chdir(repo_root) + for pardir, subdir, files in os.walk(floder): + for item in subdir + files: + if not os.path.isdir(os.path.join(pardir, item)): + yield os.path.join(pardir, item) + os.chdir(lint_root) + else: + if not flag: + os.chdir(repo_root) + for pardir, subdir, files in os.walk(repo_root): + for item in subdir + files: + if not os.path.isdir(os.path.join(pardir, item)): + yield os.path.join(pardir, item).split(repo_root + "/")[1] + os.chdir(lint_root) + else: + for item in git("diff", "--name-status", "HEAD~1").strip().split("\n"): + status = item.split("\t") + if status[0].strip() != "D": + yield status[1] + + +def check_filename_space(path): + bname = os.path.basename(path) + if re.compile(" ").search(bname): + return [("FILENAME WHITESPACE", "Filename of %s contains white space" % path, None)] + return [] + + +def check_permission(path): + bname = os.path.basename(path) + if not re.compile('\.py$|\.sh$').search(bname): + if os.access(os.path.join(repo_root, path), os.X_OK): + return [("UNNECESSARY EXECUTABLE PERMISSION", "%s contains unnecessary executable permission" % path, None)] + return [] + + +def parse_whitelist_file(filename): + data = defaultdict(lambda:defaultdict(set)) + + with open(filename) as f: + for line in f: + line = line.strip() + if not line or line.startswith("#"): + continue + parts = [item.strip() for item in line.split(":")] + if len(parts) == 2: + parts.append(None) + else: + parts[-1] = int(parts[-1]) + + error_type, file_match, line_number = parts + data[file_match][error_type].add(line_number) + + def inner(path, errors): + whitelisted = [False for item in xrange(len(errors))] + + for file_match, whitelist_errors in data.iteritems(): + if fnmatch.fnmatch(path, file_match): + for i, (error_type, msg, line) in enumerate(errors): + if "*" in whitelist_errors: + whitelisted[i] = True + elif error_type in whitelist_errors: + allowed_lines = whitelist_errors[error_type] + if None in allowed_lines or line in allowed_lines: + whitelisted[i] = True + + return [item for i, item in enumerate(errors) if not whitelisted[i]] + return inner + + +_whitelist_fn = None +def whitelist_errors(path, errors): + global _whitelist_fn + + if _whitelist_fn is None: + _whitelist_fn = parse_whitelist_file(os.path.join(lint_root, "lint.whitelist")) + return _whitelist_fn(path, errors) + + +class Regexp(object): + pattern = None + file_extensions = None + error = None + _re = None + + def __init__(self): + self._re = re.compile(self.pattern) + + def applies(self, path): + return (self.file_extensions is None or + os.path.splitext(path)[1] in self.file_extensions) + + def search(self, line): + return self._re.search(line) + + +class TrailingWhitespaceRegexp(Regexp): + pattern = " $" + error = "TRAILING WHITESPACE" + + +class TabsRegexp(Regexp): + pattern = "^\t" + error = "INDENT TABS" + + +class CRRegexp(Regexp): + pattern = "\r$" + error = "CR AT EOL" + +regexps = [item() for item in + [TrailingWhitespaceRegexp, + TabsRegexp, + CRRegexp]] + + +def check_regexp_line(path, f): + errors = [] + + applicable_regexps = [regexp for regexp in regexps if regexp.applies(path)] + + for i, line in enumerate(f): + for regexp in applicable_regexps: + if regexp.search(line): + errors.append((regexp.error, "%s line %i" % (path, i+1), i+1)) + + return errors + + +def output_errors(errors): + for error_type, error, line_number in errors: + print "%s: %s" % (error_type, error) + + +def output_error_count(error_count): + if not error_count: + return + + by_type = " ".join("%s: %d" % item for item in error_count.iteritems()) + count = sum(error_count.values()) + if count == 1: + print "There was 1 error (%s)" % (by_type,) + else: + print "There were %d errors (%s)" % (count, by_type) + + +def main(): + global repo_root + error_count = defaultdict(int) + + parser = OptionParser() + parser.add_option('-p', '--pull', dest="pull_request", action='store_true', default=False) + parser.add_option("-d", '--dir', dest="dir", help="specify the checking dir, e.g. tools") + parser.add_option("-r", '--repo', dest="repo", help="specify the repo, e.g. WebGL") + options, args = parser.parse_args() + if options.pull_request == True: + options.pull_request = "WebGL" + repo_root = repo_root.replace("WebGL/sdk/tests", options.pull_request) + if options.repo == "" or options.repo == None: + options.repo = "WebGL/sdk/tests" + repo_root = repo_root.replace("WebGL/sdk/tests", options.repo) + + def run_lint(path, fn, *args): + errors = whitelist_errors(path, fn(path, *args)) + output_errors(errors) + for error_type, error, line in errors: + error_count[error_type] += 1 + + for path in iter_files(options.pull_request, options.dir): + abs_path = os.path.join(repo_root, path) + if not os.path.exists(abs_path): + continue + for path_fn in file_path_lints: + run_lint(path, path_fn) + for state_fn in file_state_lints: + run_lint(path, state_fn) + + if not os.path.isdir(abs_path): + if re.compile('\.html$|\.htm$|\.xhtml$|\.xhtm$|\.frag$|\.vert$|\.js$').search(abs_path): + with open(abs_path) as f: + for file_fn in file_content_lints: + run_lint(path, file_fn, f) + f.seek(0) + + output_error_count(error_count) + return sum(error_count.itervalues()) + +file_path_lints = [check_filename_space] +file_content_lints = [check_regexp_line] +file_state_lints = [check_permission] + +if __name__ == "__main__": + error_count = main() + if error_count > 0: + sys.exit(1) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/py/lint/lint.whitelist firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/py/lint/lint.whitelist --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/py/lint/lint.whitelist 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/py/lint/lint.whitelist 2017-01-16 01:39:44.000000000 +0000 @@ -0,0 +1,46 @@ +# File containing whiteslist for lint errors +# Format is: +# ERROR TYPE:file/name/pattern[:line number] +# e.g. +# TRAILING WHITESPACE:example/file.html:128 +# to allow trailing whitespace on example/file.html line 128 + +## Whitespace rules that we can't enforce yet ## + +TRAILING WHITESPACE:*.md +TRAILING WHITESPACE:*.txt +TRAILING WHITESPACE:*.frag +TRAILING WHITESPACE:*.vert + +## Accept executable permission ## + +UNNECESSARY EXECUTABLE PERMISSION:*.cgi +UNNECESSARY EXECUTABLE PERMISSION:.git/* + +## Ignore INDENT TABS ## + +INDENT TABS:*.frag +INDENT TABS:*.vert +#The original dEQP tests used tabs throughout. +INDENT TABS:deqp/functional/gles3/*.js + +## File types that should never be checked ## + +*:*.pdf +*:*.jpg +*:*.png +*:*.gif +*:*.pdf +*:*.wav +*:*.mp3 +*:*.m4a +*:*.oga +*:*.ogv +*:*.webm +*:*.mp4 +*:*.m4v +*:*.ttf +*:*.woff +*:*.eot +*:*.sfd +*:*.swf diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/py/lint/README.md firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/py/lint/README.md --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/py/lint/README.md 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/py/lint/README.md 2017-01-16 01:39:44.000000000 +0000 @@ -0,0 +1,115 @@ +## Introduction + +We have a lint tool for catching common mistakes in test files. The tool comes from +[W3C/wpt-tools](https://github.com/w3c/wpt-tools/) with modification for catching +common mistakes in submitted pull request, all WebGL/sdk/tests and specified folder. + +The copyright of this tool is belong to W3C and/or the author listed in the test +file. The tool is dual-licensed under the +[W3C Test Suite License](http://www.w3.org/Consortium/Legal/2008/04-testsuite-license) +and [BSD 3-clause License](http://www.w3.org/Consortium/Legal/2008/03-bsd-license), +which are introduced in +[W3C's test suite licensing policy](http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright). + +Now the tool can check html, htm, xhtml, xhtm, js, frag and vert files. +- You can run it manually by starting the `lint.py` executable from the root of your local +WebGL/sdk/tests working directory like this: + +``` +./py/lint/lint.py +``` + +You can use the lint tool to check submitted pull request and fix the errors reported by the tool. +Reviewers will not merge branches with tests that have lint errors, so you must either +[fix all lint errors](#fixing-lint-errors) or update +[white-list test files] (#updating-the-whitelist) to suppress the errors. + +## Usage of lint tool + +1. Check other repos, specify the repo name with `-r`, default +is WebGL/sdk/tests:
    + +./py/lint/lint.py -r demo-express + +1. Check submitted pull request:
    + +./py/lint/lint.py -p + +1. Check specified folder, the specified folder must be relative path of +WebGL/sdk/tests:
    + +./py/lint/lint.py -d conformance/attribs + + +## Fixing lint errors + +You must fix any errors the lint tool reports, unless an error is for +something essential to a certain test or that for some other exceptional +reason shouldn't prevent the test from being merged. In those cases you can +update [white-list test files](#updating-the-whiteslist) to suppress the errors. +Otherwise, use the details in this section to fix all errors reported. + +* **CR AT EOL**: Test-file line ends with CR (U+000D) character; **fix**: + reformat file so each line just has LF (U+000A) line ending (standard, + cross-platform "Unix" line endings instead of, e.g., DOS line endings). + +* **INDENT TABS**: Test-file line starts with one or more tab characters; + **fix**: use spaces to replace any tab characters at beginning of lines. + +* **TRAILING WHITESPACE**: Test-file line has trailing whitespace; **fix**: + remove trailing whitespace from all lines in the file. + +* **UNNECESSARY EXECUTABLE PERMISSION**: Test file contains unnecessary executable permission; **fix**: + remove unnecessary executable permission of the file. + +* **FILENAME WHITESPACE**: Test file name contains white space; **fix**: + remove white space from test file name. + +## Updating the whitelist + +Normally you must [fix all lint errors](#fixing-lint-errors). But in the +unusual case of error reports for things essential to certain tests or that +for other exceptional reasons shouldn't prevent a merge of a test, you can +update and commit the `lint.whitelist` file in the WebGL/sdk/tests/py/lint/ +directory to suppress errors the lint tool would report for a test file. + +To add a test file or directory to the whitelist, use the following format: + +``` +ERROR TYPE:file/name/pattern +``` + +For example, to whitelist the file `example/file.html` such that all +`TRAILING WHITESPACE` errors the lint tool would report for it are +suppressed, add the following line to the `lint.whitelist` file. + +``` +TRAILING WHITESPACE:example/file.html +``` + +To whitelist an entire directory rather than just one file, use the `*` +wildcard. For example, to whitelist the `example` directory such that all +`TRAILING WHITESPACE` errors the lint tool would report for any files in it +are suppressed, add the following line to the `lint.whitelist` file. + +``` +TRAILING WHITESPACE:example/* +``` + +If needed, you can also use the `*` wildcard to express other filename +patterns or directory-name patterns (just as you would when, e.g., +executing shell commands from the command line). + +Finally, to whitelist just one line in a file, use the following format: + +``` +ERROR TYPE:file/name/pattern:line_number +``` + +For example, to whitelist just line 128 of the file `example/file.html` +such that any `TRAILING WHITESPACE` error the lint tool would report for +that line is suppressed, add the following to the `lint.whitelist` file. + +``` +TRAILING WHITESPACE:example/file.html:128 +``` diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/py/tex_image_test_generator.py firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/py/tex_image_test_generator.py --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/py/tex_image_test_generator.py 2017-01-13 01:38:16.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/py/tex_image_test_generator.py 2017-01-16 01:39:44.000000000 +0000 @@ -68,6 +68,7 @@ _ELEMENT_TYPES = [ 'canvas', + 'canvas-sub-rectangle', 'image', 'image-data', 'svg-image', diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/resources/glsl-generator.js firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/resources/glsl-generator.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/resources/glsl-generator.js 2017-01-13 01:38:16.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/resources/glsl-generator.js 2017-01-16 01:39:44.000000000 +0000 @@ -1103,13 +1103,13 @@ * float, vec2, vec3, vec4 in that order. * * tolerance: (optional) - * Allow some tolerance in the comparisons. The tolerance is applied to - * both vertex and fragment shaders. The default tolerance is 0, meaning + * Allow some tolerance in the comparisons. The tolerance is applied to + * both vertex and fragment shaders. The default tolerance is 0, meaning * the values have to be identical. * * fragmentTolerance: (optional) - * Specify a tolerance which only applies to fragment shaders. The - * fragment-only tolerance will override the shared tolerance for + * Specify a tolerance which only applies to fragment shaders. The + * fragment-only tolerance will override the shared tolerance for * fragment shaders if both are specified. Fragment shaders usually * use mediump float precision so they sometimes require higher tolerance * than vertex shaders which use highp by default. @@ -1229,15 +1229,15 @@ * * extra: (optional) * Extra GLSL code inserted at the top of each test's shader. - * + * * tolerance: (optional) - * Allow some tolerance in the comparisons. The tolerance is applied to - * both vertex and fragment shaders. The default tolerance is 0, meaning + * Allow some tolerance in the comparisons. The tolerance is applied to + * both vertex and fragment shaders. The default tolerance is 0, meaning * the values have to be identical. * * fragmentTolerance: (optional) - * Specify a tolerance which only applies to fragment shaders. The - * fragment-only tolerance will override the shared tolerance for + * Specify a tolerance which only applies to fragment shaders. The + * fragment-only tolerance will override the shared tolerance for * fragment shaders if both are specified. Fragment shaders usually * use mediump float precision so they sometimes require higher tolerance * than vertex shaders which use highp. Binary files /tmp/tmpyf9cWy/Fm1wAFW8Cg/firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/resources/red-green-blue-cyan-4x4.png and /tmp/tmpyf9cWy/hqwVq4DwOk/firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/resources/red-green-blue-cyan-4x4.png differ Binary files /tmp/tmpyf9cWy/Fm1wAFW8Cg/firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/resources/red-green-blue-cyan-4x4.psd and /tmp/tmpyf9cWy/hqwVq4DwOk/firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/resources/red-green-blue-cyan-4x4.psd differ Binary files /tmp/tmpyf9cWy/Fm1wAFW8Cg/firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/resources/red-green.webmvp9.webm and /tmp/tmpyf9cWy/hqwVq4DwOk/firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/resources/red-green.webmvp9.webm differ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/webgl-conformance-tests.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/webgl-conformance-tests.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/checkout/webgl-conformance-tests.html 2017-01-13 01:38:16.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/checkout/webgl-conformance-tests.html 2017-01-16 01:39:44.000000000 +0000 @@ -95,7 +95,7 @@ #frames iframe { border: 0; } - + #testList { padding:1em; } @@ -121,7 +121,7 @@ white-space: nowrap; } - .testpage { + .testpage { border-style: solid; border-color: #CCC; border-width: 0px 0 1px 0; @@ -133,7 +133,7 @@ transition: background-color 0.25s; } - .testpage:first-child { + .testpage:first-child { border-width: 1px 0 1px 0; } @@ -165,7 +165,7 @@ + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__buffers__get-buffer-sub-data.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__buffers__get-buffer-sub-data.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__buffers__get-buffer-sub-data.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__buffers__get-buffer-sub-data.html 2017-01-16 01:39:44.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__buffers__one-large-uniform-buffer.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__buffers__one-large-uniform-buffer.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__buffers__one-large-uniform-buffer.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__buffers__one-large-uniform-buffer.html 2017-01-16 01:39:44.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__extensions__ext-disjoint-timer-query-webgl2.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__extensions__ext-disjoint-timer-query-webgl2.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__extensions__ext-disjoint-timer-query-webgl2.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__extensions__ext-disjoint-timer-query-webgl2.html 2017-01-16 01:39:44.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__array-element-increment.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__array-element-increment.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__array-element-increment.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__array-element-increment.html 2017-01-16 01:39:44.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__bool-type-cast-bug-uint-ivec-uvec.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__bool-type-cast-bug-uint-ivec-uvec.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__bool-type-cast-bug-uint-ivec-uvec.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__bool-type-cast-bug-uint-ivec-uvec.html 2017-01-16 01:39:44.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__compound-assignment-type-combination.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__compound-assignment-type-combination.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__compound-assignment-type-combination.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__compound-assignment-type-combination.html 2017-01-16 01:39:44.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__invalid-invariant.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__invalid-invariant.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__invalid-invariant.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__invalid-invariant.html 2017-01-16 01:39:44.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__no-attribute-vertex-shader.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__no-attribute-vertex-shader.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__no-attribute-vertex-shader.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__no-attribute-vertex-shader.html 2017-01-16 01:39:44.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__shader-with-invalid-characters.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__shader-with-invalid-characters.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__shader-with-invalid-characters.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__shader-with-invalid-characters.html 2017-01-16 01:39:56.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__shader-with-mis-matching-uniform-block.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__shader-with-mis-matching-uniform-block.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__shader-with-mis-matching-uniform-block.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__shader-with-mis-matching-uniform-block.html 2017-01-16 01:39:56.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__texture-offset-uniform-texture-coordinate.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__texture-offset-uniform-texture-coordinate.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__texture-offset-uniform-texture-coordinate.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__texture-offset-uniform-texture-coordinate.html 2017-01-16 01:40:08.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__tricky-loop-conditions.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__tricky-loop-conditions.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__tricky-loop-conditions.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__tricky-loop-conditions.html 2017-01-16 01:40:08.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__unary-minus-operator-in-dynamic-loop.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__unary-minus-operator-in-dynamic-loop.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__unary-minus-operator-in-dynamic-loop.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__unary-minus-operator-in-dynamic-loop.html 2017-01-16 01:40:08.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__uniform-block-layout-match.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__uniform-block-layout-match.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__uniform-block-layout-match.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__uniform-block-layout-match.html 2017-01-16 01:40:08.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__uniform-block-layouts.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__uniform-block-layouts.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__uniform-block-layouts.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__uniform-block-layouts.html 2017-01-16 01:40:08.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__valid-invariant.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__valid-invariant.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__valid-invariant.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__valid-invariant.html 2017-01-16 01:40:19.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__vector-dynamic-indexing-nv-driver-bug.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__vector-dynamic-indexing-nv-driver-bug.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__vector-dynamic-indexing-nv-driver-bug.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__glsl3__vector-dynamic-indexing-nv-driver-bug.html 2017-01-16 01:40:19.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__misc__getextension-while-pbo-bound-stability.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__misc__getextension-while-pbo-bound-stability.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__misc__getextension-while-pbo-bound-stability.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__misc__getextension-while-pbo-bound-stability.html 2017-01-16 01:40:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__misc__object-deletion-behaviour-2.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__misc__object-deletion-behaviour-2.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__misc__object-deletion-behaviour-2.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__misc__object-deletion-behaviour-2.html 2017-01-16 01:40:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__misc__views-with-offsets.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__misc__views-with-offsets.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__misc__views-with-offsets.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__misc__views-with-offsets.html 2017-01-16 01:40:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__reading__format-r11f-g11f-b10f.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__reading__format-r11f-g11f-b10f.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__reading__format-r11f-g11f-b10f.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__reading__format-r11f-g11f-b10f.html 2017-01-16 01:40:55.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__reading__read-pixels-from-rgb8-into-pbo-bug.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__reading__read-pixels-from-rgb8-into-pbo-bug.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__reading__read-pixels-from-rgb8-into-pbo-bug.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__reading__read-pixels-from-rgb8-into-pbo-bug.html 2017-01-16 01:40:56.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__renderbuffers__multisample-with-full-sample-counts.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__renderbuffers__multisample-with-full-sample-counts.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__renderbuffers__multisample-with-full-sample-counts.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__renderbuffers__multisample-with-full-sample-counts.html 2017-01-16 01:40:56.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__attrib-type-match.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__attrib-type-match.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__attrib-type-match.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__attrib-type-match.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-filter-outofbounds.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-filter-outofbounds.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-filter-outofbounds.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-filter-outofbounds.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-filter-srgb.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-filter-srgb.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-filter-srgb.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-filter-srgb.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-multisampled-readbuffer.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-multisampled-readbuffer.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-multisampled-readbuffer.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-multisampled-readbuffer.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-outside-readbuffer.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-outside-readbuffer.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-outside-readbuffer.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-outside-readbuffer.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-scissor-enabled.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-scissor-enabled.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-scissor-enabled.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-scissor-enabled.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-size-overflow.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-size-overflow.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-size-overflow.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-size-overflow.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-srgb-and-linear-drawbuffers.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-srgb-and-linear-drawbuffers.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-srgb-and-linear-drawbuffers.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-srgb-and-linear-drawbuffers.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-stencil-only.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-stencil-only.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-stencil-only.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-stencil-only.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-test.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-test.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-test.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__blitframebuffer-test.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__canvas-resizing-with-pbo-bound.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__canvas-resizing-with-pbo-bound.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__canvas-resizing-with-pbo-bound.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__canvas-resizing-with-pbo-bound.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__clear-func-buffer-type-match.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__clear-func-buffer-type-match.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__clear-func-buffer-type-match.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__clear-func-buffer-type-match.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__clear-srgb-color-buffer.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__clear-srgb-color-buffer.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__clear-srgb-color-buffer.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__clear-srgb-color-buffer.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__clipping-wide-points.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__clipping-wide-points.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__clipping-wide-points.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__clipping-wide-points.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__framebuffer-unsupported.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__framebuffer-unsupported.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__framebuffer-unsupported.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__framebuffer-unsupported.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__fs-color-type-mismatch-color-buffer-type.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__fs-color-type-mismatch-color-buffer-type.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__fs-color-type-mismatch-color-buffer-type.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__fs-color-type-mismatch-color-buffer-type.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__instanced-rendering-bug.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__instanced-rendering-bug.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__instanced-rendering-bug.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__instanced-rendering-bug.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__out-of-bounds-index-buffers-after-copying.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__out-of-bounds-index-buffers-after-copying.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__out-of-bounds-index-buffers-after-copying.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__out-of-bounds-index-buffers-after-copying.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__rendering-sampling-feedback-loop.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__rendering-sampling-feedback-loop.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__rendering-sampling-feedback-loop.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__rendering-sampling-feedback-loop.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__rgb-format-support.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__rgb-format-support.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__rgb-format-support.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__rgb-format-support.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__uniform-block-buffer-size.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__uniform-block-buffer-size.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__uniform-block-buffer-size.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__rendering__uniform-block-buffer-size.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r11f_g11f_b10f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r11f_g11f_b10f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r11f_g11f_b10f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r11f_g11f_b10f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r11f_g11f_b10f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r11f_g11f_b10f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r11f_g11f_b10f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r11f_g11f_b10f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r16f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r16f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r16f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r16f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r16f-red-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r16f-red-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r16f-red-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r16f-red-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r32f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r32f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r32f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r32f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r8-red-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r8-red-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r8-red-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r8-red-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r8ui-red_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r8ui-red_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r8ui-red_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r8ui-red_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg16f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg16f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg16f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg16f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg16f-rg-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg16f-rg-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg16f-rg-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg16f-rg-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg32f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg32f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg32f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg32f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg8-rg-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg8-rg-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg8-rg-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg8-rg-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg8ui-rg_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg8ui-rg_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg8ui-rg_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg8ui-rg_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb16f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb16f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb16f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb16f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb16f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb16f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb16f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb16f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb32f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb32f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb32f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb32f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb565-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb565-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb565-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb565-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb5_a1-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb5_a1-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb5_a1-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb5_a1-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb9_e5-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb9_e5-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb9_e5-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb9_e5-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb9_e5-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb9_e5-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb9_e5-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb9_e5-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba16f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba16f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba16f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba16f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba16f-rgba-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba16f-rgba-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba16f-rgba-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba16f-rgba-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba32f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba32f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba32f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba32f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba4-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba4-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba4-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba4-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-srgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-srgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-srgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-srgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r16f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r16f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r16f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r16f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r16f-red-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r16f-red-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r16f-red-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r16f-red-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r32f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r32f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r32f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r32f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r8-red-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r8-red-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r8-red-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r8-red-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r8ui-red_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r8ui-red_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r8ui-red_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r8ui-red_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg16f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg16f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg16f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg16f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg16f-rg-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg16f-rg-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg16f-rg-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg16f-rg-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg32f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg32f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg32f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg32f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg8-rg-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg8-rg-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg8-rg-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg8-rg-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg8ui-rg_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg8ui-rg_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg8ui-rg_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg8ui-rg_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb16f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb16f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb16f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb16f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb16f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb16f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb16f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb16f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb32f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb32f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb32f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb32f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb565-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb565-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb565-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb565-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb5_a1-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb5_a1-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb5_a1-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb5_a1-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb9_e5-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb9_e5-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb9_e5-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb9_e5-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb9_e5-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb9_e5-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb9_e5-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb9_e5-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba16f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba16f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba16f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba16f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba16f-rgba-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba16f-rgba-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba16f-rgba-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba16f-rgba-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba32f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba32f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba32f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba32f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba4-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba4-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba4-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba4-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-srgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-srgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-srgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-srgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r11f_g11f_b10f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r11f_g11f_b10f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r11f_g11f_b10f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r11f_g11f_b10f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r11f_g11f_b10f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r11f_g11f_b10f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r11f_g11f_b10f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r11f_g11f_b10f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r16f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r16f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r16f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r16f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r16f-red-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r16f-red-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r16f-red-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r16f-red-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r32f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r32f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r32f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r32f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r8-red-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r8-red-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r8-red-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r8-red-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r8ui-red_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r8ui-red_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r8ui-red_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-r8ui-red_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg16f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg16f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg16f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg16f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg16f-rg-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg16f-rg-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg16f-rg-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg16f-rg-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg32f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg32f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg32f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg32f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg8-rg-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg8-rg-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg8-rg-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg8-rg-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg8ui-rg_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg8ui-rg_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg8ui-rg_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rg8ui-rg_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb16f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb16f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb16f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb16f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb16f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb16f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb16f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb16f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb32f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb32f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb32f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb32f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb565-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb565-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb565-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb565-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb5_a1-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb5_a1-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb5_a1-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb5_a1-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba16f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba16f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba16f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba16f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba16f-rgba-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba16f-rgba-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba16f-rgba-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba16f-rgba-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba32f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba32f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba32f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba32f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba4-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba4-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba4-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba4-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-srgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-srgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-srgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-2d-srgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r11f_g11f_b10f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r11f_g11f_b10f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r11f_g11f_b10f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r11f_g11f_b10f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r11f_g11f_b10f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r11f_g11f_b10f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r11f_g11f_b10f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r11f_g11f_b10f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r16f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r16f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r16f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r16f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r16f-red-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r16f-red-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r16f-red-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r16f-red-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r32f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r32f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r32f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r32f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r8-red-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r8-red-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r8-red-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r8-red-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r8ui-red_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r8ui-red_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r8ui-red_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-r8ui-red_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg16f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg16f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg16f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg16f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg16f-rg-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg16f-rg-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg16f-rg-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg16f-rg-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg32f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg32f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg32f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg32f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg8-rg-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg8-rg-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg8-rg-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg8-rg-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg8ui-rg_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg8ui-rg_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg8ui-rg_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rg8ui-rg_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb16f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb16f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb16f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb16f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb16f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb16f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb16f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb16f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb32f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb32f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb32f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb32f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb565-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb565-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb565-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb565-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb5_a1-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb5_a1-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb5_a1-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb5_a1-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba16f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba16f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba16f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba16f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba16f-rgba-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba16f-rgba-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba16f-rgba-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba16f-rgba-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba32f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba32f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba32f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba32f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba4-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba4-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba4-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba4-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-srgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-srgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-srgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__canvas__tex-3d-srgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r11f_g11f_b10f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r11f_g11f_b10f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r11f_g11f_b10f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r11f_g11f_b10f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r11f_g11f_b10f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r11f_g11f_b10f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r11f_g11f_b10f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r11f_g11f_b10f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r16f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r16f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r16f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r16f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r16f-red-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r16f-red-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r16f-red-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r16f-red-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r32f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r32f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r32f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r32f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r8-red-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r8-red-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r8-red-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r8-red-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r8ui-red_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r8ui-red_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r8ui-red_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-r8ui-red_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg16f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg16f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg16f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg16f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg16f-rg-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg16f-rg-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg16f-rg-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg16f-rg-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg32f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg32f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg32f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg32f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg8-rg-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg8-rg-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg8-rg-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg8-rg-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg8ui-rg_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg8ui-rg_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg8ui-rg_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rg8ui-rg_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb16f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb16f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb16f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb16f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb16f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb16f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb16f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb16f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb32f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb32f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb32f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb32f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb565-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb565-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb565-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb565-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb5_a1-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb5_a1-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb5_a1-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb5_a1-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb9_e5-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb9_e5-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb9_e5-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb9_e5-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb9_e5-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb9_e5-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb9_e5-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgb9_e5-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba16f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba16f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba16f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba16f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba16f-rgba-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba16f-rgba-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba16f-rgba-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba16f-rgba-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba32f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba32f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba32f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba32f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba4-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba4-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba4-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba4-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-srgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-srgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-srgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-2d-srgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r11f_g11f_b10f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r11f_g11f_b10f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r11f_g11f_b10f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r11f_g11f_b10f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r11f_g11f_b10f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r11f_g11f_b10f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r11f_g11f_b10f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r11f_g11f_b10f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r16f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r16f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r16f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r16f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r16f-red-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r16f-red-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r16f-red-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r16f-red-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r32f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r32f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r32f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r32f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r8-red-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r8-red-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r8-red-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r8-red-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r8ui-red_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r8ui-red_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r8ui-red_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-r8ui-red_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg16f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg16f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg16f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg16f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg16f-rg-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg16f-rg-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg16f-rg-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg16f-rg-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg32f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg32f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg32f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg32f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg8-rg-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg8-rg-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg8-rg-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg8-rg-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg8ui-rg_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg8ui-rg_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg8ui-rg_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rg8ui-rg_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb16f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb16f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb16f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb16f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb16f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb16f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb16f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb16f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb32f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb32f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb32f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb32f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb565-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb565-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb565-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb565-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb5_a1-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb5_a1-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb5_a1-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb5_a1-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb9_e5-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb9_e5-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb9_e5-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb9_e5-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb9_e5-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb9_e5-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb9_e5-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgb9_e5-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba16f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba16f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba16f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba16f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba16f-rgba-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba16f-rgba-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba16f-rgba-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba16f-rgba-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba32f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba32f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba32f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba32f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba4-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba4-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba4-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba4-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-srgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-srgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-srgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image_data__tex-3d-srgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r11f_g11f_b10f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r11f_g11f_b10f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r11f_g11f_b10f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r11f_g11f_b10f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r11f_g11f_b10f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r11f_g11f_b10f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r11f_g11f_b10f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r11f_g11f_b10f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r16f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r16f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r16f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r16f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r16f-red-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r16f-red-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r16f-red-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r16f-red-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r32f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r32f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r32f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r32f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r8-red-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r8-red-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r8-red-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r8-red-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r8ui-red_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r8ui-red_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r8ui-red_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-r8ui-red_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg16f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg16f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg16f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg16f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg16f-rg-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg16f-rg-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg16f-rg-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg16f-rg-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg32f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg32f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg32f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg32f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg8-rg-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg8-rg-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg8-rg-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg8-rg-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg8ui-rg_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg8ui-rg_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg8ui-rg_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rg8ui-rg_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb16f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb16f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb16f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb16f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb16f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb16f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb16f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb16f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb32f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb32f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb32f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb32f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb565-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb565-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb565-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb565-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb5_a1-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb5_a1-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb5_a1-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb5_a1-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb9_e5-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb9_e5-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb9_e5-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb9_e5-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb9_e5-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb9_e5-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb9_e5-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgb9_e5-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba16f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba16f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba16f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba16f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba16f-rgba-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba16f-rgba-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba16f-rgba-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba16f-rgba-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba32f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba32f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba32f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba32f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba4-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba4-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba4-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba4-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-srgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-srgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-srgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-2d-srgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r16f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r16f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r16f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r16f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r16f-red-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r16f-red-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r16f-red-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r16f-red-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r32f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r32f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r32f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r32f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r8-red-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r8-red-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r8-red-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r8-red-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r8ui-red_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r8ui-red_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r8ui-red_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-r8ui-red_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg16f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg16f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg16f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg16f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg16f-rg-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg16f-rg-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg16f-rg-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg16f-rg-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg32f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg32f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg32f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg32f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg8-rg-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg8-rg-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg8-rg-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg8-rg-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg8ui-rg_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg8ui-rg_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg8ui-rg_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rg8ui-rg_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb16f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb16f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb16f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb16f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb16f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb16f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb16f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb16f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb32f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb32f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb32f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb32f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb565-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb565-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb565-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb565-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb5_a1-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb5_a1-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb5_a1-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb5_a1-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb9_e5-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb9_e5-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb9_e5-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb9_e5-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb9_e5-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb9_e5-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb9_e5-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgb9_e5-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba16f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba16f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba16f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba16f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba16f-rgba-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba16f-rgba-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba16f-rgba-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba16f-rgba-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba32f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba32f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba32f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba32f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba4-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba4-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba4-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba4-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-srgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-srgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-srgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__image__tex-3d-srgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__active-3d-texture-bug.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__active-3d-texture-bug.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__active-3d-texture-bug.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__active-3d-texture-bug.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__copy-texture-image.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__copy-texture-image.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__copy-texture-image.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__copy-texture-image.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__copy-texture-image-luma-format.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__copy-texture-image-luma-format.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__copy-texture-image-luma-format.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__copy-texture-image-luma-format.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__copy-texture-image-webgl-specific.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__copy-texture-image-webgl-specific.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__copy-texture-image-webgl-specific.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__copy-texture-image-webgl-specific.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__gl-get-tex-parameter.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__gl-get-tex-parameter.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__gl-get-tex-parameter.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__gl-get-tex-parameter.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__integer-cubemap-specification-order-bug.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__integer-cubemap-specification-order-bug.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__integer-cubemap-specification-order-bug.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__integer-cubemap-specification-order-bug.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__integer-cubemap-texture-sampling.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__integer-cubemap-texture-sampling.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__integer-cubemap-texture-sampling.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__integer-cubemap-texture-sampling.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__mipmap-fbo.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__mipmap-fbo.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__mipmap-fbo.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__mipmap-fbo.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-3d-size-limit.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-3d-size-limit.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-3d-size-limit.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-3d-size-limit.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__texel-fetch-undefined.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__texel-fetch-undefined.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__texel-fetch-undefined.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__texel-fetch-undefined.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-image-and-sub-image-with-array-buffer-view-sub-source.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-image-and-sub-image-with-array-buffer-view-sub-source.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-image-and-sub-image-with-array-buffer-view-sub-source.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-image-and-sub-image-with-array-buffer-view-sub-source.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-image-with-bad-args-from-dom-elements.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-image-with-bad-args-from-dom-elements.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-image-with-bad-args-from-dom-elements.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-image-with-bad-args-from-dom-elements.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-image-with-bad-args.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-image-with-bad-args.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-image-with-bad-args.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-image-with-bad-args.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-image-with-different-data-source.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-image-with-different-data-source.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-image-with-different-data-source.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-image-with-different-data-source.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-input-validation.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-input-validation.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-input-validation.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-input-validation.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-mipmap-levels.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-mipmap-levels.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-mipmap-levels.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-mipmap-levels.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-new-formats.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-new-formats.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-new-formats.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-new-formats.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-srgb-mipmap.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-srgb-mipmap.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-srgb-mipmap.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-srgb-mipmap.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-storage-2d.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-storage-2d.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-storage-2d.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-storage-2d.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-storage-and-subimage-3d.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-storage-and-subimage-3d.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-storage-and-subimage-3d.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-storage-and-subimage-3d.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-storage-compressed-formats.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-storage-compressed-formats.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-storage-compressed-formats.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-storage-compressed-formats.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__texture-npot.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__texture-npot.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__texture-npot.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__texture-npot.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-unpack-params.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-unpack-params.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-unpack-params.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__misc__tex-unpack-params.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r11f_g11f_b10f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r11f_g11f_b10f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r11f_g11f_b10f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r11f_g11f_b10f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r11f_g11f_b10f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r11f_g11f_b10f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r11f_g11f_b10f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r11f_g11f_b10f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r16f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r16f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r16f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r16f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r16f-red-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r16f-red-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r16f-red-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r16f-red-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r32f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r32f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r32f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r32f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r8-red-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r8-red-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r8-red-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r8-red-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r8ui-red_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r8ui-red_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r8ui-red_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-r8ui-red_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg16f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg16f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg16f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg16f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg16f-rg-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg16f-rg-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg16f-rg-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg16f-rg-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg32f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg32f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg32f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg32f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg8-rg-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg8-rg-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg8-rg-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg8-rg-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg8ui-rg_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg8ui-rg_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg8ui-rg_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rg8ui-rg_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb16f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb16f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb16f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb16f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb16f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb16f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb16f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb16f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb32f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb32f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb32f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb32f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb565-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb565-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb565-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb565-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb5_a1-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb5_a1-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb5_a1-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb5_a1-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb9_e5-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb9_e5-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb9_e5-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb9_e5-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb9_e5-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb9_e5-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb9_e5-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgb9_e5-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba16f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba16f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba16f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba16f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba16f-rgba-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba16f-rgba-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba16f-rgba-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba16f-rgba-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba32f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba32f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba32f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba32f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba4-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba4-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba4-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba4-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-srgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-srgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-srgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-2d-srgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r11f_g11f_b10f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r11f_g11f_b10f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r11f_g11f_b10f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r11f_g11f_b10f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r11f_g11f_b10f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r11f_g11f_b10f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r11f_g11f_b10f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r11f_g11f_b10f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r16f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r16f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r16f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r16f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r16f-red-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r16f-red-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r16f-red-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r16f-red-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r32f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r32f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r32f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r32f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r8-red-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r8-red-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r8-red-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r8-red-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r8ui-red_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r8ui-red_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r8ui-red_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-r8ui-red_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg16f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg16f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg16f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg16f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg16f-rg-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg16f-rg-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg16f-rg-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg16f-rg-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg32f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg32f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg32f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg32f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg8-rg-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg8-rg-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg8-rg-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg8-rg-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg8ui-rg_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg8ui-rg_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg8ui-rg_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rg8ui-rg_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb16f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb16f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb16f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb16f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb16f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb16f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb16f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb16f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb32f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb32f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb32f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb32f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb565-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb565-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb565-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb565-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb5_a1-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb5_a1-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb5_a1-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb5_a1-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb9_e5-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb9_e5-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb9_e5-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb9_e5-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb9_e5-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb9_e5-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb9_e5-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgb9_e5-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba16f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba16f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba16f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba16f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba16f-rgba-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba16f-rgba-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba16f-rgba-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba16f-rgba-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba32f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba32f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba32f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba32f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba4-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba4-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba4-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba4-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-srgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-srgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-srgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__svg_image__tex-3d-srgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r16f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r16f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r16f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r16f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r16f-red-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r16f-red-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r16f-red-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r16f-red-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r32f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r32f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r32f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r32f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r8-red-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r8-red-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r8-red-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r8-red-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r8ui-red_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r8ui-red_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r8ui-red_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-r8ui-red_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg16f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg16f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg16f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg16f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg16f-rg-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg16f-rg-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg16f-rg-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg16f-rg-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg32f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg32f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg32f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg32f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg8-rg-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg8-rg-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg8-rg-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg8-rg-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg8ui-rg_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg8ui-rg_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg8ui-rg_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rg8ui-rg_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb16f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb16f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb16f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb16f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb16f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb16f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb16f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb16f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb32f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb32f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb32f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb32f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb565-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb565-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb565-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb565-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb5_a1-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb5_a1-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb5_a1-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb5_a1-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb9_e5-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb9_e5-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb9_e5-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb9_e5-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb9_e5-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb9_e5-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb9_e5-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgb9_e5-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba16f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba16f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba16f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba16f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba16f-rgba-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba16f-rgba-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba16f-rgba-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba16f-rgba-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba32f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba32f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba32f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba32f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba4-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba4-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba4-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba4-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-srgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-srgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-srgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-2d-srgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r16f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r16f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r16f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r16f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r16f-red-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r16f-red-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r16f-red-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r16f-red-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r32f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r32f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r32f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r32f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r8-red-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r8-red-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r8-red-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r8-red-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r8ui-red_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r8ui-red_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r8ui-red_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-r8ui-red_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg16f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg16f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg16f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg16f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg16f-rg-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg16f-rg-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg16f-rg-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg16f-rg-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg32f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg32f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg32f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg32f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg8-rg-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg8-rg-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg8-rg-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg8-rg-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg8ui-rg_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg8ui-rg_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg8ui-rg_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rg8ui-rg_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb16f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb16f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb16f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb16f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb16f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb16f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb16f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb16f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb32f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb32f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb32f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb32f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb565-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb565-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb565-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb565-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb5_a1-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb5_a1-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb5_a1-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb5_a1-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb9_e5-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb9_e5-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb9_e5-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb9_e5-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb9_e5-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb9_e5-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb9_e5-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgb9_e5-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba16f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba16f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba16f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba16f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba16f-rgba-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba16f-rgba-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba16f-rgba-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba16f-rgba-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba32f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba32f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba32f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba32f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba4-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba4-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba4-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba4-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-srgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-srgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-srgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__video__tex-3d-srgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r11f_g11f_b10f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r11f_g11f_b10f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r11f_g11f_b10f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r11f_g11f_b10f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r11f_g11f_b10f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r11f_g11f_b10f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r11f_g11f_b10f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r11f_g11f_b10f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r16f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r16f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r16f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r16f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r16f-red-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r16f-red-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r16f-red-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r16f-red-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r32f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r32f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r32f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r32f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r8-red-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r8-red-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r8-red-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r8-red-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r8ui-red_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r8ui-red_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r8ui-red_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r8ui-red_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg16f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg16f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg16f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg16f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg16f-rg-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg16f-rg-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg16f-rg-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg16f-rg-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg32f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg32f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg32f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg32f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg8-rg-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg8-rg-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg8-rg-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg8-rg-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg8ui-rg_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg8ui-rg_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg8ui-rg_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg8ui-rg_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb16f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb16f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb16f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb16f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb16f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb16f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb16f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb16f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb32f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb32f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb32f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb32f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb565-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb565-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb565-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb565-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb5_a1-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb5_a1-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb5_a1-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb5_a1-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba16f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba16f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba16f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba16f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba16f-rgba-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba16f-rgba-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba16f-rgba-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba16f-rgba-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba32f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba32f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba32f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba32f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba4-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba4-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba4-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba4-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-srgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-srgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-srgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-2d-srgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r11f_g11f_b10f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r11f_g11f_b10f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r11f_g11f_b10f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r11f_g11f_b10f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r11f_g11f_b10f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r11f_g11f_b10f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r11f_g11f_b10f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r11f_g11f_b10f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r16f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r16f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r16f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r16f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r16f-red-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r16f-red-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r16f-red-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r16f-red-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r32f-red-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r32f-red-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r32f-red-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r32f-red-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r8-red-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r8-red-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r8-red-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r8-red-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r8ui-red_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r8ui-red_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r8ui-red_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r8ui-red_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg16f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg16f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg16f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg16f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg16f-rg-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg16f-rg-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg16f-rg-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg16f-rg-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg32f-rg-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg32f-rg-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg32f-rg-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg32f-rg-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg8-rg-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg8-rg-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg8-rg-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg8-rg-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg8ui-rg_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg8ui-rg_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg8ui-rg_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg8ui-rg_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb16f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb16f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb16f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb16f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb16f-rgb-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb16f-rgb-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb16f-rgb-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb16f-rgb-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb32f-rgb-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb32f-rgb-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb32f-rgb-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb32f-rgb-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb565-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb565-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb565-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb565-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb5_a1-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb5_a1-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb5_a1-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb5_a1-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba16f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba16f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba16f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba16f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba16f-rgba-half_float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba16f-rgba-half_float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba16f-rgba-half_float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba16f-rgba-half_float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba32f-rgba-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba32f-rgba-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba32f-rgba-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba32f-rgba-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba4-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba4-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba4-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba4-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-srgb8-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-srgb8-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-srgb8-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__textures__webgl_canvas__tex-3d-srgb8-rgb-unsigned_byte.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__transform_feedback__two-unreferenced-varyings.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__transform_feedback__two-unreferenced-varyings.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__transform_feedback__two-unreferenced-varyings.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__transform_feedback__two-unreferenced-varyings.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__transform_feedback__unwritten-output-defaults-to-zero.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__transform_feedback__unwritten-output-defaults-to-zero.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance2__transform_feedback__unwritten-output-defaults-to-zero.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance2__transform_feedback__unwritten-output-defaults-to-zero.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__buffers__buffer-uninitialized.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__buffers__buffer-uninitialized.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__buffers__buffer-uninitialized.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__buffers__buffer-uninitialized.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__context__context-no-alpha-fbo-with-alpha.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__context__context-no-alpha-fbo-with-alpha.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__context__context-no-alpha-fbo-with-alpha.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__context__context-no-alpha-fbo-with-alpha.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__extensions__webgl-compressed-texture-etc.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__extensions__webgl-compressed-texture-etc.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__extensions__webgl-compressed-texture-etc.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__extensions__webgl-compressed-texture-etc.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__extensions__webgl-compressed-texture-s3tc-srgb.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__extensions__webgl-compressed-texture-s3tc-srgb.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__extensions__webgl-compressed-texture-s3tc-srgb.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__extensions__webgl-compressed-texture-s3tc-srgb.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__glsl__bugs__bool-type-cast-bug-int-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__glsl__bugs__bool-type-cast-bug-int-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__glsl__bugs__bool-type-cast-bug-int-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__glsl__bugs__bool-type-cast-bug-int-float.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__glsl__bugs__global-invariant-does-not-leak-across-shaders.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__glsl__bugs__global-invariant-does-not-leak-across-shaders.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__glsl__bugs__global-invariant-does-not-leak-across-shaders.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__glsl__bugs__global-invariant-does-not-leak-across-shaders.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__glsl__bugs__invariant-does-not-leak-across-shaders.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__glsl__bugs__invariant-does-not-leak-across-shaders.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__glsl__bugs__invariant-does-not-leak-across-shaders.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__glsl__bugs__invariant-does-not-leak-across-shaders.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__glsl__bugs__nested-sequence-operator.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__glsl__bugs__nested-sequence-operator.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__glsl__bugs__nested-sequence-operator.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__glsl__bugs__nested-sequence-operator.html 2017-01-16 01:40:57.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__programs__program-infolog.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__programs__program-infolog.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__programs__program-infolog.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__programs__program-infolog.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__rendering__out-of-bounds-index-buffers.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__rendering__out-of-bounds-index-buffers.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__rendering__out-of-bounds-index-buffers.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__rendering__out-of-bounds-index-buffers.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_byte.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_byte.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_byte.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_byte.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_byte.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_byte.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgba-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgba-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgba-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgba-rgba-unsigned_byte.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgb-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgb-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgb-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgb-rgb-unsigned_byte.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 2017-01-16 01:41:24.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_byte.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_byte.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_byte.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_byte.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__buffers__buffer-uninitialized.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__buffers__buffer-uninitialized.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__buffers__buffer-uninitialized.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__buffers__buffer-uninitialized.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__context__context-no-alpha-fbo-with-alpha.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__context__context-no-alpha-fbo-with-alpha.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__context__context-no-alpha-fbo-with-alpha.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__context__context-no-alpha-fbo-with-alpha.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__extensions__webgl-compressed-texture-etc.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__extensions__webgl-compressed-texture-etc.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__extensions__webgl-compressed-texture-etc.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__extensions__webgl-compressed-texture-etc.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__extensions__webgl-compressed-texture-s3tc-srgb.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__extensions__webgl-compressed-texture-s3tc-srgb.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__extensions__webgl-compressed-texture-s3tc-srgb.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__extensions__webgl-compressed-texture-s3tc-srgb.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__extensions__webgl-draw-buffers-framebuffer-unsupported.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__extensions__webgl-draw-buffers-framebuffer-unsupported.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__extensions__webgl-draw-buffers-framebuffer-unsupported.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__extensions__webgl-draw-buffers-framebuffer-unsupported.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__glsl__bugs__bool-type-cast-bug-int-float.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__glsl__bugs__bool-type-cast-bug-int-float.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__glsl__bugs__bool-type-cast-bug-int-float.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__glsl__bugs__bool-type-cast-bug-int-float.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__glsl__bugs__global-invariant-does-not-leak-across-shaders.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__glsl__bugs__global-invariant-does-not-leak-across-shaders.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__glsl__bugs__global-invariant-does-not-leak-across-shaders.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__glsl__bugs__global-invariant-does-not-leak-across-shaders.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__glsl__bugs__invariant-does-not-leak-across-shaders.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__glsl__bugs__invariant-does-not-leak-across-shaders.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__glsl__bugs__invariant-does-not-leak-across-shaders.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__glsl__bugs__invariant-does-not-leak-across-shaders.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__glsl__bugs__nested-sequence-operator.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__glsl__bugs__nested-sequence-operator.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__glsl__bugs__nested-sequence-operator.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__glsl__bugs__nested-sequence-operator.html 2017-01-16 01:41:25.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__programs__program-infolog.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__programs__program-infolog.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__programs__program-infolog.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__programs__program-infolog.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__rendering__clipping-wide-points.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__rendering__clipping-wide-points.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__rendering__clipping-wide-points.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__rendering__clipping-wide-points.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__rendering__out-of-bounds-index-buffers.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__rendering__out-of-bounds-index-buffers.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__rendering__out-of-bounds-index-buffers.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__rendering__out-of-bounds-index-buffers.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_byte.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_byte.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_byte.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_byte.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_byte.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_byte.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgba-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgba-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgba-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgba-rgba-unsigned_byte.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgb-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgb-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgb-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgb-rgb-unsigned_byte.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 2017-01-16 01:42:31.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_byte.html 2017-01-16 01:42:32.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:42:32.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:42:32.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_byte.html 2017-01-16 01:42:32.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 2017-01-16 01:42:32.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_byte.html 2017-01-16 01:42:32.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html 2017-01-16 01:42:32.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html 2017-01-16 01:42:32.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_byte.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_byte.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_byte.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_byte.html 2017-01-16 01:42:32.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated/test_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html 2017-01-16 01:42:32.000000000 +0000 @@ -0,0 +1,17 @@ + + + + + + + Mochitest wrapper for WebGL Conformance Test Suite tests + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated-mochitest.ini firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated-mochitest.ini --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/generated-mochitest.ini 2017-01-13 01:38:16.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/generated-mochitest.ini 2017-01-16 01:39:44.000000000 +0000 @@ -43,6 +43,7 @@ checkout/conformance/buffers/buffer-bind-test.html checkout/conformance/buffers/buffer-data-and-buffer-sub-data.html checkout/conformance/buffers/buffer-data-array-buffer-delete.html + checkout/conformance/buffers/buffer-uninitialized.html checkout/conformance/buffers/element-array-buffer-delete-recreate.html checkout/conformance/buffers/index-validation-copies-indices.html checkout/conformance/buffers/index-validation-crash-with-buffer-sub-data.html @@ -76,6 +77,7 @@ checkout/conformance/context/context-hidden-alpha.html checkout/conformance/context/context-lost-restored.html checkout/conformance/context/context-lost.html + checkout/conformance/context/context-no-alpha-fbo-with-alpha.html checkout/conformance/context/context-release-upon-reload.html checkout/conformance/context/context-release-with-workers.html checkout/conformance/context/context-size-change.html @@ -115,12 +117,15 @@ checkout/conformance/extensions/oes-vertex-array-object-bufferData.html checkout/conformance/extensions/oes-vertex-array-object.html checkout/conformance/extensions/webgl-compressed-texture-atc.html + checkout/conformance/extensions/webgl-compressed-texture-etc.html checkout/conformance/extensions/webgl-compressed-texture-pvrtc.html + checkout/conformance/extensions/webgl-compressed-texture-s3tc-srgb.html checkout/conformance/extensions/webgl-compressed-texture-s3tc.html checkout/conformance/extensions/webgl-compressed-texture-size-limit.html checkout/conformance/extensions/webgl-debug-renderer-info.html checkout/conformance/extensions/webgl-debug-shaders.html checkout/conformance/extensions/webgl-depth-texture.html + checkout/conformance/extensions/webgl-draw-buffers-framebuffer-unsupported.html checkout/conformance/extensions/webgl-draw-buffers-max-draw-buffers.html checkout/conformance/extensions/webgl-draw-buffers.html checkout/conformance/extensions/webgl-shared-resources.html @@ -132,6 +137,7 @@ checkout/conformance/glsl/bugs/angle-d3d11-compiler-error.html checkout/conformance/glsl/bugs/angle-dx-variable-bug.html checkout/conformance/glsl/bugs/array-of-struct-with-int-first-position.html + checkout/conformance/glsl/bugs/bool-type-cast-bug-int-float.html checkout/conformance/glsl/bugs/compare-loop-index-to-uniform.html checkout/conformance/glsl/bugs/complex-glsl-does-not-crash.html checkout/conformance/glsl/bugs/compound-assignment-type-combination.html @@ -143,6 +149,8 @@ checkout/conformance/glsl/bugs/floored-division-accuracy.html checkout/conformance/glsl/bugs/fragcoord-linking-bug.html checkout/conformance/glsl/bugs/gl-fragcoord-multisampling-bug.html + checkout/conformance/glsl/bugs/global-invariant-does-not-leak-across-shaders.html + checkout/conformance/glsl/bugs/invariant-does-not-leak-across-shaders.html checkout/conformance/glsl/bugs/logic-inside-block-without-braces.html checkout/conformance/glsl/bugs/long-expressions-should-not-crash.html checkout/conformance/glsl/bugs/loop-if-loop-gradient.html @@ -150,6 +158,7 @@ checkout/conformance/glsl/bugs/multiplication-assignment.html checkout/conformance/glsl/bugs/nested-functions-should-not-crash.html checkout/conformance/glsl/bugs/nested-loops-with-break-and-continue.html + checkout/conformance/glsl/bugs/nested-sequence-operator.html checkout/conformance/glsl/bugs/pow-of-small-constant-in-user-defined-function.html checkout/conformance/glsl/bugs/pow-with-constant-exponent-should-not-crash.html checkout/conformance/glsl/bugs/qualcomm-crash.html @@ -2218,6 +2227,7 @@ checkout/conformance/programs/gl-getshadersource.html checkout/conformance/programs/gl-shader-test.html checkout/conformance/programs/invalid-UTF-16.html + checkout/conformance/programs/program-infolog.html checkout/conformance/programs/program-test.html checkout/conformance/programs/use-program-crash-with-discard-in-fragment-shader.html checkout/conformance/reading/00_test_list.txt @@ -2230,6 +2240,7 @@ checkout/conformance/renderbuffers/framebuffer-test.html checkout/conformance/renderbuffers/renderbuffer-initialization.html checkout/conformance/rendering/00_test_list.txt + checkout/conformance/rendering/clipping-wide-points.html checkout/conformance/rendering/culling.html checkout/conformance/rendering/default-texture-draw-bug.html checkout/conformance/rendering/draw-arrays-out-of-bounds.html @@ -2243,12 +2254,14 @@ checkout/conformance/rendering/gl-scissor-canvas-dimensions.html checkout/conformance/rendering/gl-scissor-fbo-test.html checkout/conformance/rendering/gl-scissor-test.html + checkout/conformance/rendering/gl-viewport-test-2.html checkout/conformance/rendering/gl-viewport-test.html checkout/conformance/rendering/line-loop-tri-fan.html checkout/conformance/rendering/many-draw-calls.html checkout/conformance/rendering/more-than-65536-indices.html checkout/conformance/rendering/multisample-corruption.html checkout/conformance/rendering/negative-one-index.html + checkout/conformance/rendering/out-of-bounds-index-buffers.html checkout/conformance/rendering/point-no-attributes.html checkout/conformance/rendering/point-size.html checkout/conformance/rendering/point-specific-shader-variables.html @@ -2258,6 +2271,7 @@ checkout/conformance/rendering/triangle.html checkout/conformance/rendering/vertex-texture-fetch.html checkout/conformance/state/00_test_list.txt + checkout/conformance/state/diffs.txt checkout/conformance/state/gl-enable-enum-test.html checkout/conformance/state/gl-enum-tests.html checkout/conformance/state/gl-get-calls.html @@ -2273,6 +2287,12 @@ checkout/conformance/textures/canvas/tex-2d-rgba-rgba-unsigned_byte.html checkout/conformance/textures/canvas/tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html checkout/conformance/textures/canvas/tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html + checkout/conformance/textures/canvas_sub_rectangle/00_test_list.txt + checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgb-rgb-unsigned_byte.html + checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgb-rgb-unsigned_short_5_6_5.html + checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_byte.html + checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html + checkout/conformance/textures/canvas_sub_rectangle/tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html checkout/conformance/textures/image/00_test_list.txt checkout/conformance/textures/image/tex-2d-rgb-rgb-unsigned_byte.html checkout/conformance/textures/image/tex-2d-rgb-rgb-unsigned_short_5_6_5.html @@ -2413,9 +2433,12 @@ checkout/conformance2/buffers/bound-buffer-size-change-test.html checkout/conformance2/buffers/buffer-copying-contents.html checkout/conformance2/buffers/buffer-copying-restrictions.html + checkout/conformance2/buffers/buffer-data-and-buffer-sub-data-sub-source.html checkout/conformance2/buffers/buffer-overflow-test.html checkout/conformance2/buffers/buffer-type-restrictions.html + checkout/conformance2/buffers/get-buffer-sub-data.html checkout/conformance2/buffers/getBufferSubData.html + checkout/conformance2/buffers/one-large-uniform-buffer.html checkout/conformance2/buffers/uniform-buffers.html checkout/conformance2/context/00_test_list.txt checkout/conformance2/context/constants-and-properties-2.html @@ -2424,6 +2447,7 @@ checkout/conformance2/context/methods-2.html checkout/conformance2/extensions/00_test_list.txt checkout/conformance2/extensions/ext-color-buffer-float.html + checkout/conformance2/extensions/ext-disjoint-timer-query-webgl2.html checkout/conformance2/extensions/promoted-extensions-in-shaders.html checkout/conformance2/extensions/promoted-extensions.html checkout/conformance2/glsl3/00_test_list.txt @@ -2431,17 +2455,22 @@ checkout/conformance2/glsl3/array-assign-constructor.html checkout/conformance2/glsl3/array-assign.html checkout/conformance2/glsl3/array-complex-indexing.html + checkout/conformance2/glsl3/array-element-increment.html checkout/conformance2/glsl3/array-equality.html checkout/conformance2/glsl3/array-in-complex-expression.html checkout/conformance2/glsl3/array-length-side-effects.html checkout/conformance2/glsl3/attrib-location-length-limits.html + checkout/conformance2/glsl3/bool-type-cast-bug-uint-ivec-uvec.html checkout/conformance2/glsl3/compare-structs-containing-arrays.html + checkout/conformance2/glsl3/compound-assignment-type-combination.html checkout/conformance2/glsl3/const-array-init.html checkout/conformance2/glsl3/forbidden-operators.html checkout/conformance2/glsl3/frag-depth.html checkout/conformance2/glsl3/invalid-default-precision.html + checkout/conformance2/glsl3/invalid-invariant.html checkout/conformance2/glsl3/loops-with-side-effects.html checkout/conformance2/glsl3/misplaced-version-directive.html + checkout/conformance2/glsl3/no-attribute-vertex-shader.html checkout/conformance2/glsl3/sampler-no-precision.html checkout/conformance2/glsl3/sequence-operator-returns-non-constant.html checkout/conformance2/glsl3/shader-linking.html @@ -2449,14 +2478,26 @@ checkout/conformance2/glsl3/shader-with-1024-character-identifier.frag.html checkout/conformance2/glsl3/shader-with-1025-character-define.html checkout/conformance2/glsl3/shader-with-1025-character-identifier.frag.html + checkout/conformance2/glsl3/shader-with-invalid-characters.html + checkout/conformance2/glsl3/shader-with-mis-matching-uniform-block.html checkout/conformance2/glsl3/short-circuiting-in-loop-condition.html checkout/conformance2/glsl3/texture-offset-out-of-range.html + checkout/conformance2/glsl3/texture-offset-uniform-texture-coordinate.html + checkout/conformance2/glsl3/tricky-loop-conditions.html + checkout/conformance2/glsl3/unary-minus-operator-in-dynamic-loop.html + checkout/conformance2/glsl3/uniform-block-layout-match.html + checkout/conformance2/glsl3/uniform-block-layouts.html checkout/conformance2/glsl3/uniform-location-length-limits.html + checkout/conformance2/glsl3/valid-invariant.html + checkout/conformance2/glsl3/vector-dynamic-indexing-nv-driver-bug.html checkout/conformance2/glsl3/vector-dynamic-indexing.html checkout/conformance2/misc/00_test_list.txt checkout/conformance2/misc/expando-loss-2.html + checkout/conformance2/misc/getextension-while-pbo-bound-stability.html checkout/conformance2/misc/instanceof-test.html + checkout/conformance2/misc/object-deletion-behaviour-2.html checkout/conformance2/misc/uninitialized-test-2.html + checkout/conformance2/misc/views-with-offsets.html checkout/conformance2/programs/00_test_list.txt checkout/conformance2/programs/active-built-in-attribs.html checkout/conformance2/programs/gl-get-frag-data-location.html @@ -2464,7 +2505,9 @@ checkout/conformance2/query/occlusion-query.html checkout/conformance2/query/query.html checkout/conformance2/reading/00_test_list.txt + checkout/conformance2/reading/format-r11f-g11f-b10f.html checkout/conformance2/reading/read-pixels-from-fbo-test.html + checkout/conformance2/reading/read-pixels-from-rgb8-into-pbo-bug.html checkout/conformance2/reading/read-pixels-into-pixel-pack-buffer.html checkout/conformance2/reading/read-pixels-pack-parameters.html checkout/conformance2/renderbuffers/00_test_list.txt @@ -2472,13 +2515,35 @@ checkout/conformance2/renderbuffers/framebuffer-test.html checkout/conformance2/renderbuffers/framebuffer-texture-layer.html checkout/conformance2/renderbuffers/invalidate-framebuffer.html + checkout/conformance2/renderbuffers/multisample-with-full-sample-counts.html checkout/conformance2/renderbuffers/multisampled-renderbuffer-initialization.html checkout/conformance2/renderbuffers/readbuffer.html checkout/conformance2/rendering/00_test_list.txt + checkout/conformance2/rendering/attrib-type-match.html + checkout/conformance2/rendering/blitframebuffer-filter-outofbounds.html + checkout/conformance2/rendering/blitframebuffer-filter-srgb.html + checkout/conformance2/rendering/blitframebuffer-multisampled-readbuffer.html + checkout/conformance2/rendering/blitframebuffer-outside-readbuffer.html + checkout/conformance2/rendering/blitframebuffer-scissor-enabled.html + checkout/conformance2/rendering/blitframebuffer-size-overflow.html + checkout/conformance2/rendering/blitframebuffer-srgb-and-linear-drawbuffers.html + checkout/conformance2/rendering/blitframebuffer-stencil-only.html + checkout/conformance2/rendering/blitframebuffer-test.html + checkout/conformance2/rendering/canvas-resizing-with-pbo-bound.html + checkout/conformance2/rendering/clear-func-buffer-type-match.html + checkout/conformance2/rendering/clear-srgb-color-buffer.html + checkout/conformance2/rendering/clipping-wide-points.html checkout/conformance2/rendering/draw-buffers.html checkout/conformance2/rendering/element-index-uint.html checkout/conformance2/rendering/framebuffer-completeness-unaffected.html + checkout/conformance2/rendering/framebuffer-unsupported.html + checkout/conformance2/rendering/fs-color-type-mismatch-color-buffer-type.html checkout/conformance2/rendering/instanced-arrays.html + checkout/conformance2/rendering/instanced-rendering-bug.html + checkout/conformance2/rendering/out-of-bounds-index-buffers-after-copying.html + checkout/conformance2/rendering/rendering-sampling-feedback-loop.html + checkout/conformance2/rendering/rgb-format-support.html + checkout/conformance2/rendering/uniform-block-buffer-size.html checkout/conformance2/samplers/00_test_list.txt checkout/conformance2/samplers/sampler-drawing-test.html checkout/conformance2/samplers/samplers.html @@ -2487,6 +2552,8 @@ checkout/conformance2/state/gl-get-calls.html checkout/conformance2/state/gl-getstring.html checkout/conformance2/state/gl-object-get-calls.html + checkout/conformance2/sync/00_test_list.txt + checkout/conformance2/sync/sync-webgl-specific.html checkout/conformance2/textures/00_test_list.txt checkout/conformance2/textures/canvas/00_test_list.txt checkout/conformance2/textures/canvas/tex-2d-r11f_g11f_b10f-rgb-float.html @@ -2555,6 +2622,73 @@ checkout/conformance2/textures/canvas/tex-3d-rgba8ui-rgba_integer-unsigned_byte.html checkout/conformance2/textures/canvas/tex-3d-srgb8-rgb-unsigned_byte.html checkout/conformance2/textures/canvas/tex-3d-srgb8_alpha8-rgba-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/00_test_list.txt + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-half_float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r16f-red-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r16f-red-half_float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r32f-red-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r8-red-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-r8ui-red_integer-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg16f-rg-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg16f-rg-half_float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg32f-rg-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg8-rg-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rg8ui-rg_integer-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb16f-rgb-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb16f-rgb-half_float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb32f-rgb-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb565-rgb-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb5_a1-rgba-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb8-rgb-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb8ui-rgb_integer-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb9_e5-rgb-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgb9_e5-rgb-half_float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba16f-rgba-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba16f-rgba-half_float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba32f-rgba-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba4-rgba-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba8-rgba-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-rgba8ui-rgba_integer-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-srgb8-rgb-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-2d-srgb8_alpha8-rgba-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-half_float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r16f-red-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r16f-red-half_float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r32f-red-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r8-red-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-r8ui-red_integer-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg16f-rg-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg16f-rg-half_float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg32f-rg-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg8-rg-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rg8ui-rg_integer-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb16f-rgb-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb16f-rgb-half_float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb32f-rgb-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb565-rgb-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb565-rgb-unsigned_short_5_6_5.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb5_a1-rgba-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb8-rgb-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb8ui-rgb_integer-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb9_e5-rgb-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgb9_e5-rgb-half_float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba16f-rgba-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba16f-rgba-half_float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba32f-rgba-float.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba4-rgba-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba8-rgba-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-rgba8ui-rgba_integer-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-srgb8-rgb-unsigned_byte.html + checkout/conformance2/textures/canvas_sub_rectangle/tex-3d-srgb8_alpha8-rgba-unsigned_byte.html checkout/conformance2/textures/image/00_test_list.txt checkout/conformance2/textures/image/tex-2d-r11f_g11f_b10f-rgb-float.html checkout/conformance2/textures/image/tex-2d-r11f_g11f_b10f-rgb-half_float.html @@ -3092,14 +3226,24 @@ checkout/conformance2/textures/image_data/tex-3d-srgb8-rgb-unsigned_byte.html checkout/conformance2/textures/image_data/tex-3d-srgb8_alpha8-rgba-unsigned_byte.html checkout/conformance2/textures/misc/00_test_list.txt + checkout/conformance2/textures/misc/active-3d-texture-bug.html checkout/conformance2/textures/misc/compressed-tex-image.html + checkout/conformance2/textures/misc/copy-texture-image-luma-format.html + checkout/conformance2/textures/misc/copy-texture-image-webgl-specific.html checkout/conformance2/textures/misc/copy-texture-image.html checkout/conformance2/textures/misc/gl-get-tex-parameter.html + checkout/conformance2/textures/misc/integer-cubemap-specification-order-bug.html + checkout/conformance2/textures/misc/integer-cubemap-texture-sampling.html checkout/conformance2/textures/misc/mipmap-fbo.html checkout/conformance2/textures/misc/tex-3d-size-limit.html + checkout/conformance2/textures/misc/tex-image-and-sub-image-with-array-buffer-view-sub-source.html + checkout/conformance2/textures/misc/tex-image-with-bad-args-from-dom-elements.html + checkout/conformance2/textures/misc/tex-image-with-bad-args.html + checkout/conformance2/textures/misc/tex-image-with-different-data-source.html checkout/conformance2/textures/misc/tex-input-validation.html checkout/conformance2/textures/misc/tex-mipmap-levels.html checkout/conformance2/textures/misc/tex-new-formats.html + checkout/conformance2/textures/misc/tex-srgb-mipmap.html checkout/conformance2/textures/misc/tex-storage-2d.html checkout/conformance2/textures/misc/tex-storage-and-subimage-3d.html checkout/conformance2/textures/misc/tex-storage-compressed-formats.html @@ -3309,12 +3453,15 @@ checkout/conformance2/textures/webgl_canvas/tex-3d-srgb8_alpha8-rgba-unsigned_byte.html checkout/conformance2/transform_feedback/00_test_list.txt checkout/conformance2/transform_feedback/transform_feedback.html + checkout/conformance2/transform_feedback/two-unreferenced-varyings.html + checkout/conformance2/transform_feedback/unwritten-output-defaults-to-zero.html checkout/conformance2/vertex_arrays/00_test_list.txt checkout/conformance2/vertex_arrays/vertex-array-object.html checkout/deqp/00_test_list.txt checkout/deqp/LICENSE checkout/deqp/README.md checkout/deqp/build.py + checkout/deqp/compiler.jar checkout/deqp/compiler_additional_extern.js checkout/deqp/data/gles2/shaders/00_test_list.txt checkout/deqp/data/gles2/shaders/conditionals.html @@ -3588,20 +3735,141 @@ checkout/deqp/functional/gles3/fbocolorbuffer/clear.html checkout/deqp/functional/gles3/fbocolorbuffer/fbocolorbuffer_test_generator.py checkout/deqp/functional/gles3/fbocolorbuffer/tex2d.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_00.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_01.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_02.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_03.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_04.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex2d_05.html checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_00.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_01.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_02.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_03.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_04.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex2darray_05.html checkout/deqp/functional/gles3/fbocolorbuffer/tex3d.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_00.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_01.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_02.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_03.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_04.html + checkout/deqp/functional/gles3/fbocolorbuffer/tex3d_05.html checkout/deqp/functional/gles3/fbocolorbuffer/texcube.html + checkout/deqp/functional/gles3/fbocolorbuffer/texcube_00.html + checkout/deqp/functional/gles3/fbocolorbuffer/texcube_01.html + checkout/deqp/functional/gles3/fbocolorbuffer/texcube_02.html + checkout/deqp/functional/gles3/fbocolorbuffer/texcube_03.html + checkout/deqp/functional/gles3/fbocolorbuffer/texcube_04.html + checkout/deqp/functional/gles3/fbocolorbuffer/texcube_05.html checkout/deqp/functional/gles3/fbocompleteness.html checkout/deqp/functional/gles3/fbodepthbuffer.html checkout/deqp/functional/gles3/fboinvalidate.html + checkout/deqp/functional/gles3/fboinvalidate/00_test_list.txt + checkout/deqp/functional/gles3/fboinvalidate/default.html + checkout/deqp/functional/gles3/fboinvalidate/fboinvalidate_test_generator.py + checkout/deqp/functional/gles3/fboinvalidate/format_00.html + checkout/deqp/functional/gles3/fboinvalidate/format_01.html + checkout/deqp/functional/gles3/fboinvalidate/format_02.html + checkout/deqp/functional/gles3/fboinvalidate/sub.html + checkout/deqp/functional/gles3/fboinvalidate/target.html + checkout/deqp/functional/gles3/fboinvalidate/whole.html + checkout/deqp/functional/gles3/fbomultisample.2_samples.html + checkout/deqp/functional/gles3/fbomultisample.4_samples.html + checkout/deqp/functional/gles3/fbomultisample.8_samples.html checkout/deqp/functional/gles3/fbomultisample.html checkout/deqp/functional/gles3/fborender.html + checkout/deqp/functional/gles3/fborender/00_test_list.txt + checkout/deqp/functional/gles3/fborender/fborender_test_generator.py + checkout/deqp/functional/gles3/fborender/recreate_color_00.html + checkout/deqp/functional/gles3/fborender/recreate_color_01.html + checkout/deqp/functional/gles3/fborender/recreate_color_02.html + checkout/deqp/functional/gles3/fborender/recreate_color_03.html + checkout/deqp/functional/gles3/fborender/recreate_color_04.html + checkout/deqp/functional/gles3/fborender/recreate_color_05.html + checkout/deqp/functional/gles3/fborender/recreate_color_06.html + checkout/deqp/functional/gles3/fborender/recreate_depth_stencil.html + checkout/deqp/functional/gles3/fborender/resize_00.html + checkout/deqp/functional/gles3/fborender/resize_01.html + checkout/deqp/functional/gles3/fborender/resize_02.html + checkout/deqp/functional/gles3/fborender/resize_03.html + checkout/deqp/functional/gles3/fborender/shared_colorbuffer_00.html + checkout/deqp/functional/gles3/fborender/shared_colorbuffer_01.html + checkout/deqp/functional/gles3/fborender/shared_colorbuffer_02.html + checkout/deqp/functional/gles3/fborender/shared_colorbuffer_clear.html + checkout/deqp/functional/gles3/fborender/shared_depth_stencil.html + checkout/deqp/functional/gles3/fborender/stencil_clear.html checkout/deqp/functional/gles3/fbostatequery.html checkout/deqp/functional/gles3/fbostencilbuffer.html checkout/deqp/functional/gles3/floatstatequery.html checkout/deqp/functional/gles3/fragdepth.html checkout/deqp/functional/gles3/fragmentoutput.html + checkout/deqp/functional/gles3/fragmentoutput/00_test_list.txt + checkout/deqp/functional/gles3/fragmentoutput/array.fixed.html + checkout/deqp/functional/gles3/fragmentoutput/array.float.html + checkout/deqp/functional/gles3/fragmentoutput/array.int.html + checkout/deqp/functional/gles3/fragmentoutput/array.uint.html + checkout/deqp/functional/gles3/fragmentoutput/basic.fixed.html + checkout/deqp/functional/gles3/fragmentoutput/basic.float.html + checkout/deqp/functional/gles3/fragmentoutput/basic.int.html + checkout/deqp/functional/gles3/fragmentoutput/basic.uint.html + checkout/deqp/functional/gles3/fragmentoutput/fragmentoutput_test_generator.py + checkout/deqp/functional/gles3/fragmentoutput/random_00.html + checkout/deqp/functional/gles3/fragmentoutput/random_01.html + checkout/deqp/functional/gles3/fragmentoutput/random_02.html checkout/deqp/functional/gles3/framebufferblit.html + checkout/deqp/functional/gles3/framebufferblit/00_test_list.txt + checkout/deqp/functional/gles3/framebufferblit/conversion_00.html + checkout/deqp/functional/gles3/framebufferblit/conversion_01.html + checkout/deqp/functional/gles3/framebufferblit/conversion_02.html + checkout/deqp/functional/gles3/framebufferblit/conversion_03.html + checkout/deqp/functional/gles3/framebufferblit/conversion_04.html + checkout/deqp/functional/gles3/framebufferblit/conversion_05.html + checkout/deqp/functional/gles3/framebufferblit/conversion_06.html + checkout/deqp/functional/gles3/framebufferblit/conversion_07.html + checkout/deqp/functional/gles3/framebufferblit/conversion_08.html + checkout/deqp/functional/gles3/framebufferblit/conversion_09.html + checkout/deqp/functional/gles3/framebufferblit/conversion_10.html + checkout/deqp/functional/gles3/framebufferblit/conversion_11.html + checkout/deqp/functional/gles3/framebufferblit/conversion_12.html + checkout/deqp/functional/gles3/framebufferblit/conversion_13.html + checkout/deqp/functional/gles3/framebufferblit/conversion_14.html + checkout/deqp/functional/gles3/framebufferblit/conversion_15.html + checkout/deqp/functional/gles3/framebufferblit/conversion_16.html + checkout/deqp/functional/gles3/framebufferblit/conversion_17.html + checkout/deqp/functional/gles3/framebufferblit/conversion_18.html + checkout/deqp/functional/gles3/framebufferblit/conversion_19.html + checkout/deqp/functional/gles3/framebufferblit/conversion_20.html + checkout/deqp/functional/gles3/framebufferblit/conversion_21.html + checkout/deqp/functional/gles3/framebufferblit/conversion_22.html + checkout/deqp/functional/gles3/framebufferblit/conversion_23.html + checkout/deqp/functional/gles3/framebufferblit/conversion_24.html + checkout/deqp/functional/gles3/framebufferblit/conversion_25.html + checkout/deqp/functional/gles3/framebufferblit/conversion_26.html + checkout/deqp/functional/gles3/framebufferblit/conversion_27.html + checkout/deqp/functional/gles3/framebufferblit/conversion_28.html + checkout/deqp/functional/gles3/framebufferblit/conversion_29.html + checkout/deqp/functional/gles3/framebufferblit/conversion_30.html + checkout/deqp/functional/gles3/framebufferblit/conversion_31.html + checkout/deqp/functional/gles3/framebufferblit/conversion_32.html + checkout/deqp/functional/gles3/framebufferblit/conversion_33.html + checkout/deqp/functional/gles3/framebufferblit/conversion_34.html + checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_00.html + checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_01.html + checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_02.html + checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_03.html + checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_04.html + checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_05.html + checkout/deqp/functional/gles3/framebufferblit/default_framebuffer_06.html + checkout/deqp/functional/gles3/framebufferblit/depth_stencil.html + checkout/deqp/functional/gles3/framebufferblit/frambufferblit_test_generator.py + checkout/deqp/functional/gles3/framebufferblit/rect_00.html + checkout/deqp/functional/gles3/framebufferblit/rect_01.html + checkout/deqp/functional/gles3/framebufferblit/rect_02.html + checkout/deqp/functional/gles3/framebufferblit/rect_03.html + checkout/deqp/functional/gles3/framebufferblit/rect_04.html + checkout/deqp/functional/gles3/framebufferblit/rect_05.html + checkout/deqp/functional/gles3/framebufferblit/rect_06.html checkout/deqp/functional/gles3/indexedstatequery.html checkout/deqp/functional/gles3/instancedrendering.html checkout/deqp/functional/gles3/integerstatequery.html @@ -3615,8 +3883,20 @@ checkout/deqp/functional/gles3/negativetextureapi.html checkout/deqp/functional/gles3/negativevertexarrayapi.html checkout/deqp/functional/gles3/occlusionquery.html + checkout/deqp/functional/gles3/occlusionquery_conservative.html + checkout/deqp/functional/gles3/occlusionquery_strict.html checkout/deqp/functional/gles3/pixelbufferobject.html checkout/deqp/functional/gles3/primitiverestart.html + checkout/deqp/functional/gles3/primitiverestart/00.html + checkout/deqp/functional/gles3/primitiverestart/00_test_list.txt + checkout/deqp/functional/gles3/primitiverestart/01.html + checkout/deqp/functional/gles3/primitiverestart/02.html + checkout/deqp/functional/gles3/primitiverestart/03.html + checkout/deqp/functional/gles3/primitiverestart/04.html + checkout/deqp/functional/gles3/primitiverestart/05.html + checkout/deqp/functional/gles3/primitiverestart/06.html + checkout/deqp/functional/gles3/primitiverestart/07.html + checkout/deqp/functional/gles3/primitiverestart/primitiverestart_test_generator.py checkout/deqp/functional/gles3/rasterizerdiscard.html checkout/deqp/functional/gles3/rbostatequery.html checkout/deqp/functional/gles3/readpixel.html @@ -3626,6 +3906,9 @@ checkout/deqp/functional/gles3/shaderbuiltinvar.html checkout/deqp/functional/gles3/shadercommonfunction.html checkout/deqp/functional/gles3/shaderderivate.html + checkout/deqp/functional/gles3/shaderderivate_dfdx.html + checkout/deqp/functional/gles3/shaderderivate_dfdy.html + checkout/deqp/functional/gles3/shaderderivate_fwidth.html checkout/deqp/functional/gles3/shaderindexing/00_test_list.txt checkout/deqp/functional/gles3/shaderindexing/mat_00.html checkout/deqp/functional/gles3/shaderindexing/mat_01.html @@ -3700,6 +3983,7 @@ checkout/deqp/functional/gles3/shaderoperator/binary_operator_15.html checkout/deqp/functional/gles3/shaderoperator/bool_compare.html checkout/deqp/functional/gles3/shaderoperator/common_fucntions.html + checkout/deqp/functional/gles3/shaderoperator/common_functions.html checkout/deqp/functional/gles3/shaderoperator/exponential.html checkout/deqp/functional/gles3/shaderoperator/float_compare.html checkout/deqp/functional/gles3/shaderoperator/geometric.html @@ -4351,6 +4635,8 @@ checkout/js/js-test-pre.js checkout/js/pnglib.js checkout/js/test-eval.js + checkout/js/tests/clipping-wide-points.js + checkout/js/tests/compound-assignment-type-combination.js checkout/js/tests/gl-enum-tests.js checkout/js/tests/gl-get-tex-parameter.js checkout/js/tests/gl-object-get-calls.js @@ -4359,6 +4645,7 @@ checkout/js/tests/iterable-test.js checkout/js/tests/oes-texture-float-and-half-float-linear.js checkout/js/tests/out-of-bounds-test.js + checkout/js/tests/tex-image-and-sub-image-2d-with-canvas-sub-rectangle.js checkout/js/tests/tex-image-and-sub-image-2d-with-canvas.js checkout/js/tests/tex-image-and-sub-image-2d-with-image-bitmap-from-blob.js checkout/js/tests/tex-image-and-sub-image-2d-with-image-bitmap-from-canvas.js @@ -4371,6 +4658,7 @@ checkout/js/tests/tex-image-and-sub-image-2d-with-svg-image.js checkout/js/tests/tex-image-and-sub-image-2d-with-video.js checkout/js/tests/tex-image-and-sub-image-2d-with-webgl-canvas.js + checkout/js/tests/tex-image-and-sub-image-3d-with-canvas-sub-rectangle.js checkout/js/tests/tex-image-and-sub-image-3d-with-canvas.js checkout/js/tests/tex-image-and-sub-image-3d-with-image-bitmap-from-blob.js checkout/js/tests/tex-image-and-sub-image-3d-with-image-bitmap-from-canvas.js @@ -4390,6 +4678,10 @@ checkout/js/tests/typed-array-worker.js checkout/js/webgl-test-harness.js checkout/js/webgl-test-utils.js + checkout/py/lint/LICENSE + checkout/py/lint/README.md + checkout/py/lint/lint.py + checkout/py/lint/lint.whitelist checkout/py/tex_image_test_generator.py checkout/resources/1-channel.jpg checkout/resources/3x3.png @@ -4425,12 +4717,15 @@ checkout/resources/npot-video.webmvp8.webm checkout/resources/ogles-tests.css checkout/resources/opengl_logo.jpg + checkout/resources/red-green-blue-cyan-4x4.png + checkout/resources/red-green-blue-cyan-4x4.psd checkout/resources/red-green-semi-transparent.png checkout/resources/red-green.mp4 checkout/resources/red-green.png checkout/resources/red-green.svg checkout/resources/red-green.theora.ogv checkout/resources/red-green.webmvp8.webm + checkout/resources/red-green.webmvp9.webm checkout/resources/red-indexed.png checkout/resources/samplerForWebGL2UniformShader.frag checkout/resources/samplerUniformShader.frag @@ -4471,137 +4766,1331 @@ skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance2__buffers__buffer-copying-restrictions.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__buffers__buffer-data-and-buffer-sub-data-sub-source.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance2__buffers__buffer-overflow-test.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__buffers__buffer-type-restrictions.html] +[generated/test_2_conformance2__buffers__buffer-type-restrictions.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__buffers__get-buffer-sub-data.html] +skip-if = (os == 'win') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__buffers__one-large-uniform-buffer.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__buffers__uniform-buffers.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__context__constants-and-properties-2.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__context__context-attributes-depth-stencil-antialias-obeyed.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__context__context-type-test-2.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__context__methods-2.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__extensions__ext-color-buffer-float.html] +skip-if = (os == 'mac' && debug) || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__extensions__ext-disjoint-timer-query-webgl2.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__extensions__promoted-extensions-in-shaders.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__extensions__promoted-extensions.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__array-as-return-value.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__array-assign-constructor.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__array-assign.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__array-complex-indexing.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__array-element-increment.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__array-equality.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__array-in-complex-expression.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__array-length-side-effects.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__attrib-location-length-limits.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__bool-type-cast-bug-uint-ivec-uvec.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__compare-structs-containing-arrays.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__compound-assignment-type-combination.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__const-array-init.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__forbidden-operators.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__frag-depth.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__invalid-default-precision.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__invalid-invariant.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__loops-with-side-effects.html] +skip-if = (os == 'win') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__misplaced-version-directive.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__no-attribute-vertex-shader.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__sampler-no-precision.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__sequence-operator-returns-non-constant.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__shader-linking.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__shader-with-1024-character-define.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__shader-with-1024-character-identifier.frag.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__shader-with-1025-character-define.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__shader-with-1025-character-identifier.frag.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__shader-with-invalid-characters.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__shader-with-mis-matching-uniform-block.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__short-circuiting-in-loop-condition.html] +skip-if = (os == 'win' && os_version == '6.1') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__texture-offset-out-of-range.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__texture-offset-uniform-texture-coordinate.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__tricky-loop-conditions.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__unary-minus-operator-in-dynamic-loop.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__uniform-block-layout-match.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__uniform-block-layouts.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__uniform-location-length-limits.html] +skip-if = (os == 'win' && debug) || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__valid-invariant.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__vector-dynamic-indexing-nv-driver-bug.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__glsl3__vector-dynamic-indexing.html] +skip-if = (os == 'win') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__misc__expando-loss-2.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__misc__getextension-while-pbo-bound-stability.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__misc__instanceof-test.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__misc__object-deletion-behaviour-2.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__misc__uninitialized-test-2.html] +skip-if = (os == 'mac') || (os == 'win') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__misc__views-with-offsets.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__programs__active-built-in-attribs.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__programs__gl-get-frag-data-location.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__query__occlusion-query.html] +skip-if = (os == 'win') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__query__query.html] +skip-if = (os == 'win') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__reading__format-r11f-g11f-b10f.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__reading__read-pixels-from-fbo-test.html] +skip-if = (os == 'mac') || (os == 'win') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__reading__read-pixels-from-rgb8-into-pbo-bug.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__reading__read-pixels-into-pixel-pack-buffer.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__reading__read-pixels-pack-parameters.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__renderbuffers__framebuffer-object-attachment.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__renderbuffers__framebuffer-test.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__renderbuffers__framebuffer-texture-layer.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__renderbuffers__invalidate-framebuffer.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__renderbuffers__multisample-with-full-sample-counts.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__renderbuffers__multisampled-renderbuffer-initialization.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__renderbuffers__readbuffer.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__attrib-type-match.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__blitframebuffer-filter-outofbounds.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__blitframebuffer-filter-srgb.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__blitframebuffer-multisampled-readbuffer.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__blitframebuffer-outside-readbuffer.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__blitframebuffer-scissor-enabled.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__blitframebuffer-size-overflow.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__blitframebuffer-srgb-and-linear-drawbuffers.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__blitframebuffer-stencil-only.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__blitframebuffer-test.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__canvas-resizing-with-pbo-bound.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__clear-func-buffer-type-match.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__clear-srgb-color-buffer.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__clipping-wide-points.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__draw-buffers.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__element-index-uint.html] +fail-if = (os != 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__framebuffer-completeness-unaffected.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__framebuffer-unsupported.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__fs-color-type-mismatch-color-buffer-type.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__instanced-arrays.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__instanced-rendering-bug.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__out-of-bounds-index-buffers-after-copying.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__rendering-sampling-feedback-loop.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__rgb-format-support.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__rendering__uniform-block-buffer-size.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__samplers__sampler-drawing-test.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__samplers__samplers.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__state__gl-enum-tests.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__state__gl-get-calls.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__state__gl-getstring.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__state__gl-object-get-calls.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-r11f_g11f_b10f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-r11f_g11f_b10f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-r16f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-r16f-red-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-r32f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-r8-red-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-r8ui-red_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rg16f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rg16f-rg-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rg32f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rg8-rg-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rg8ui-rg_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rgb16f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rgb16f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rgb32f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rgb565-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rgb5_a1-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rgba16f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rgba16f-rgba-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rgba32f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rgba4-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rgba8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-srgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-r11f_g11f_b10f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-r11f_g11f_b10f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-r16f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-r16f-red-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-r32f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-r8-red-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-r8ui-red_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rg16f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rg16f-rg-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rg32f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rg8-rg-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rg8ui-rg_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rgb16f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rgb16f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rgb32f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rgb565-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rgb5_a1-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rgba16f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rgba16f-rgba-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rgba32f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rgba4-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rgba8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-srgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r11f_g11f_b10f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r11f_g11f_b10f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r16f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r16f-red-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r32f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r8-red-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-r8ui-red_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg16f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg16f-rg-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg32f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg8-rg-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rg8ui-rg_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb16f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb16f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb32f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb565-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb5_a1-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb9_e5-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgb9_e5-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba16f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba16f-rgba-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba32f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba4-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-srgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-half_float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r16f-red-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r16f-red-half_float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r32f-red-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r8-red-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r8ui-red_integer-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg16f-rg-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg16f-rg-half_float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg32f-rg-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg8-rg-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg8ui-rg_integer-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb16f-rgb-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb16f-rgb-half_float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb32f-rgb-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb565-rgb-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb5_a1-rgba-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb8-rgb-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb9_e5-rgb-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb9_e5-rgb-half_float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba16f-rgba-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba16f-rgba-half_float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba32f-rgba-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba4-rgba-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba8-rgba-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-srgb8-rgb-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-r11f_g11f_b10f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-r11f_g11f_b10f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-r16f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-r16f-red-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-r32f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-r8-red-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-r8ui-red_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rg16f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rg16f-rg-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rg32f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rg8-rg-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rg8ui-rg_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgb16f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgb16f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgb32f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgb565-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgb5_a1-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgb9_e5-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgb9_e5-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgba16f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgba16f-rgba-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgba32f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgba4-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgba8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-srgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-half_float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-r16f-red-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-r16f-red-half_float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-r32f-red-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-r8-red-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-r8ui-red_integer-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rg16f-rg-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rg16f-rg-half_float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rg32f-rg-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rg8-rg-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rg8ui-rg_integer-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgb16f-rgb-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgb16f-rgb-half_float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgb32f-rgb-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgb565-rgb-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgb5_a1-rgba-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgb8-rgb-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgb9_e5-rgb-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgb9_e5-rgb-half_float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgba16f-rgba-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgba16f-rgba-half_float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgba32f-rgba-float.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgba4-rgba-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgba8-rgba-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-srgb8-rgb-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-r11f_g11f_b10f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-r11f_g11f_b10f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-r16f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-r16f-red-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-r32f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-r8-red-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-r8ui-red_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rg16f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rg16f-rg-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rg32f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rg8-rg-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rg8ui-rg_integer-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgb16f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgb16f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgb32f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgb565-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgb5_a1-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgb9_e5-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgb9_e5-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgba16f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgba16f-rgba-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgba32f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgba4-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgba8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-srgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-r11f_g11f_b10f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-r11f_g11f_b10f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-r16f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-r16f-red-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-r32f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-r8-red-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-r8ui-red_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rg16f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rg16f-rg-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rg32f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rg8-rg-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rg8ui-rg_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgb16f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgb16f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgb32f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgb565-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgb5_a1-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgb9_e5-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgb9_e5-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgba16f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgba16f-rgba-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgba32f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgba4-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgba8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-srgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__image_data__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__active-3d-texture-bug.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__copy-texture-image-luma-format.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__copy-texture-image-webgl-specific.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__copy-texture-image.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__gl-get-tex-parameter.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__integer-cubemap-specification-order-bug.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__integer-cubemap-texture-sampling.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__mipmap-fbo.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__tex-3d-size-limit.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__tex-image-and-sub-image-with-array-buffer-view-sub-source.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__tex-image-with-bad-args-from-dom-elements.html] +skip-if = (os == 'win') || (os == 'mac') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__tex-image-with-bad-args.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__tex-image-with-different-data-source.html] +skip-if = (os == 'mac' && debug) || (os == 'win' && debug) || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__misc__tex-input-validation.html] +skip-if = (os == 'win') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__tex-mipmap-levels.html] +fail-if = (os == 'mac') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__tex-new-formats.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__tex-srgb-mipmap.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__tex-storage-2d.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__tex-storage-and-subimage-3d.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__tex-storage-compressed-formats.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__tex-unpack-params.html] +skip-if = (os == 'mac' && debug) || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__misc__texel-fetch-undefined.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__misc__texture-npot.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-r11f_g11f_b10f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-r11f_g11f_b10f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-r16f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-r16f-red-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-r32f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-r8-red-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-r8ui-red_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rg16f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rg16f-rg-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rg32f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rg8-rg-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rg8ui-rg_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgb16f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgb16f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgb32f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgb565-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgb5_a1-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgb9_e5-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgb9_e5-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgba16f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgba16f-rgba-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgba32f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgba4-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgba8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-srgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-r11f_g11f_b10f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-r11f_g11f_b10f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-r16f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-r16f-red-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-r32f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-r8-red-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-r8ui-red_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rg16f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rg16f-rg-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rg32f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rg8-rg-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rg8ui-rg_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgb16f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgb16f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgb32f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgb565-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgb5_a1-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgb9_e5-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgb9_e5-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgba16f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgba16f-rgba-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgba32f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgba4-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgba8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-srgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__svg_image__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-float.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-half_float.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__video__tex-2d-r16f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__video__tex-2d-r16f-red-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__video__tex-2d-r32f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__video__tex-2d-r8-red-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__video__tex-2d-r8ui-red_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__video__tex-2d-rg16f-rg-float.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__video__tex-2d-rg16f-rg-half_float.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__video__tex-2d-rg32f-rg-float.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__video__tex-2d-rg8-rg-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__buffers__getBufferSubData.html] +[generated/test_2_conformance2__textures__video__tex-2d-rg8ui-rg_integer-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__buffers__uniform-buffers.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgb16f-rgb-float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__context__constants-and-properties-2.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgb16f-rgb-half_float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__context__context-attributes-depth-stencil-antialias-obeyed.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgb32f-rgb-float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__context__context-type-test-2.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgb565-rgb-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__context__methods-2.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__extensions__ext-color-buffer-float.html] -skip-if = (os == 'mac' && debug) || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__extensions__promoted-extensions-in-shaders.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgb5_a1-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__extensions__promoted-extensions.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__array-as-return-value.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgb8-rgb-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__array-assign-constructor.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__array-assign.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgb9_e5-rgb-float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__array-complex-indexing.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgb9_e5-rgb-half_float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__array-equality.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgba16f-rgba-float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__array-in-complex-expression.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgba16f-rgba-half_float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__array-length-side-effects.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgba32f-rgba-float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__attrib-location-length-limits.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgba4-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__compare-structs-containing-arrays.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__const-array-init.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgba8-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__forbidden-operators.html] +[generated/test_2_conformance2__textures__video__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__frag-depth.html] +[generated/test_2_conformance2__textures__video__tex-2d-srgb8-rgb-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__invalid-default-precision.html] +[generated/test_2_conformance2__textures__video__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__loops-with-side-effects.html] -skip-if = (os == 'win') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__misplaced-version-directive.html] +[generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__sampler-no-precision.html] +[generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-half_float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__sequence-operator-returns-non-constant.html] +[generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__shader-linking.html] +[generated/test_2_conformance2__textures__video__tex-3d-r16f-red-float.html] +fail-if = (os == 'mac') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__shader-with-1024-character-define.html] +[generated/test_2_conformance2__textures__video__tex-3d-r16f-red-half_float.html] +fail-if = (os == 'mac') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__shader-with-1024-character-identifier.frag.html] +[generated/test_2_conformance2__textures__video__tex-3d-r32f-red-float.html] +fail-if = (os == 'mac') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__shader-with-1025-character-define.html] +[generated/test_2_conformance2__textures__video__tex-3d-r8-red-unsigned_byte.html] +fail-if = (os == 'mac') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__shader-with-1025-character-identifier.frag.html] +[generated/test_2_conformance2__textures__video__tex-3d-r8ui-red_integer-unsigned_byte.html] +fail-if = (os == 'mac') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__short-circuiting-in-loop-condition.html] -skip-if = (os == 'win' && os_version == '6.1') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__texture-offset-out-of-range.html] +[generated/test_2_conformance2__textures__video__tex-3d-rg16f-rg-float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__uniform-location-length-limits.html] -skip-if = (os == 'win' && debug) || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__glsl3__vector-dynamic-indexing.html] -skip-if = (os == 'win') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__misc__expando-loss-2.html] +[generated/test_2_conformance2__textures__video__tex-3d-rg16f-rg-half_float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__misc__instanceof-test.html] +[generated/test_2_conformance2__textures__video__tex-3d-rg32f-rg-float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__misc__uninitialized-test-2.html] -skip-if = (os == 'mac') || (os == 'win') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__programs__active-built-in-attribs.html] +[generated/test_2_conformance2__textures__video__tex-3d-rg8-rg-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__programs__gl-get-frag-data-location.html] +[generated/test_2_conformance2__textures__video__tex-3d-rg8ui-rg_integer-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__query__occlusion-query.html] -skip-if = (os == 'win') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__query__query.html] -skip-if = (os == 'win') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__reading__read-pixels-from-fbo-test.html] -skip-if = (os == 'mac') || (os == 'win') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__reading__read-pixels-into-pixel-pack-buffer.html] +[generated/test_2_conformance2__textures__video__tex-3d-rgb16f-rgb-float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__reading__read-pixels-pack-parameters.html] +[generated/test_2_conformance2__textures__video__tex-3d-rgb16f-rgb-half_float.html] fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__renderbuffers__framebuffer-object-attachment.html] +[generated/test_2_conformance2__textures__video__tex-3d-rgb32f-rgb-float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__renderbuffers__framebuffer-test.html] +[generated/test_2_conformance2__textures__video__tex-3d-rgb565-rgb-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__renderbuffers__framebuffer-texture-layer.html] +[generated/test_2_conformance2__textures__video__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__renderbuffers__invalidate-framebuffer.html] +[generated/test_2_conformance2__textures__video__tex-3d-rgb5_a1-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__renderbuffers__multisampled-renderbuffer-initialization.html] +[generated/test_2_conformance2__textures__video__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__renderbuffers__readbuffer.html] +[generated/test_2_conformance2__textures__video__tex-3d-rgb8-rgb-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__rendering__draw-buffers.html] +[generated/test_2_conformance2__textures__video__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html] fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__rendering__element-index-uint.html] -fail-if = (os != 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgb9_e5-rgb-float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__rendering__framebuffer-completeness-unaffected.html] +[generated/test_2_conformance2__textures__video__tex-3d-rgb9_e5-rgb-half_float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__rendering__instanced-arrays.html] +[generated/test_2_conformance2__textures__video__tex-3d-rgba16f-rgba-float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__samplers__sampler-drawing-test.html] +[generated/test_2_conformance2__textures__video__tex-3d-rgba16f-rgba-half_float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__samplers__samplers.html] +[generated/test_2_conformance2__textures__video__tex-3d-rgba32f-rgba-float.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__state__gl-enum-tests.html] +[generated/test_2_conformance2__textures__video__tex-3d-rgba4-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__state__gl-get-calls.html] +[generated/test_2_conformance2__textures__video__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__state__gl-getstring.html] +[generated/test_2_conformance2__textures__video__tex-3d-rgba8-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) -[generated/test_2_conformance2__state__gl-object-get-calls.html] +[generated/test_2_conformance2__textures__video__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__video__tex-3d-srgb8-rgb-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__video__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r11f_g11f_b10f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r11f_g11f_b10f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r16f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r16f-red-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r32f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r8-red-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-r8ui-red_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg16f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg16f-rg-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg32f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg8-rg-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rg8ui-rg_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb16f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb16f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb32f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb565-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb5_a1-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba16f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba16f-rgba-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba32f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba4-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-srgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r11f_g11f_b10f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r11f_g11f_b10f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r16f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r16f-red-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r32f-red-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r8-red-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-r8ui-red_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg16f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg16f-rg-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg32f-rg-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg8-rg-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rg8ui-rg_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb16f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb16f-rgb-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb32f-rgb-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb565-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb5_a1-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba16f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba16f-rgba-half_float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba32f-rgba-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba4-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba8-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-srgb8-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__textures__webgl_canvas__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance2__transform_feedback__transform_feedback.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__transform_feedback__two-unreferenced-varyings.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance2__transform_feedback__unwritten-output-defaults-to-zero.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance2__vertex_arrays__vertex-array-object.html] fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) @@ -4624,7 +6113,6 @@ [generated/test_2_conformance__attribs__gl-vertexattribpointer-offsets.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__attribs__gl-vertexattribpointer.html] -fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__buffers__buffer-bind-test.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) @@ -4632,6 +6120,8 @@ skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__buffers__buffer-data-array-buffer-delete.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__buffers__buffer-uninitialized.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__buffers__element-array-buffer-delete-recreate.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__buffers__index-validation-copies-indices.html] @@ -4696,6 +6186,8 @@ skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__context__context-lost.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__context__context-no-alpha-fbo-with-alpha.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__context__context-release-upon-reload.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__context__context-release-with-workers.html] @@ -4720,12 +6212,17 @@ skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__extensions__webgl-compressed-texture-atc.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__extensions__webgl-compressed-texture-etc.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__extensions__webgl-compressed-texture-pvrtc.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__extensions__webgl-compressed-texture-s3tc-srgb.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__extensions__webgl-compressed-texture-s3tc.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__extensions__webgl-compressed-texture-size-limit.html] -skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +skip-if = (os == 'win') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__extensions__webgl-debug-renderer-info.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__extensions__webgl-debug-shaders.html] @@ -4742,6 +6239,8 @@ skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__glsl__bugs__array-of-struct-with-int-first-position.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__glsl__bugs__bool-type-cast-bug-int-float.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__glsl__bugs__compare-loop-index-to-uniform.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__glsl__bugs__complex-glsl-does-not-crash.html] @@ -4762,6 +6261,10 @@ skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__glsl__bugs__gl-fragcoord-multisampling-bug.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__glsl__bugs__global-invariant-does-not-leak-across-shaders.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__glsl__bugs__invariant-does-not-leak-across-shaders.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__glsl__bugs__logic-inside-block-without-braces.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__glsl__bugs__long-expressions-should-not-crash.html] @@ -4776,6 +6279,8 @@ skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__glsl__bugs__nested-loops-with-break-and-continue.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__glsl__bugs__nested-sequence-operator.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__glsl__bugs__pow-of-small-constant-in-user-defined-function.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__glsl__bugs__pow-with-constant-exponent-should-not-crash.html] @@ -5732,6 +7237,8 @@ skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__programs__invalid-UTF-16.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__programs__program-infolog.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__programs__program-test.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__programs__use-program-crash-with-discard-in-fragment-shader.html] @@ -5785,6 +7292,8 @@ skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__rendering__negative-one-index.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__rendering__out-of-bounds-index-buffers.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__rendering__point-no-attributes.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__rendering__point-size.html] @@ -5809,6 +7318,46 @@ skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__state__state-uneffected-after-compositing.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_short_5_6_5.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__image__tex-2d-rgb-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__image__tex-2d-rgba-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_short_5_6_5.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__textures__misc__copy-tex-image-2d-formats.html] skip-if = (os == 'mac') || (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__textures__misc__copy-tex-image-and-sub-image-2d.html] @@ -5880,15 +7429,40 @@ skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__textures__misc__texture-upload-size.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__textures__video__tex-2d-rgb-rgb-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__textures__video__tex-2d-rgb-rgb-unsigned_short_5_6_5.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__textures__video__tex-2d-rgba-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__textures__video__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html] +fail-if = (os == 'mac') || (os == 'win') skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__textures__video__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html] +fail-if = (os == 'mac') || (os == 'win') +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_byte.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html] +skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) +[generated/test_2_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__typedarrays__array-buffer-crash.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) @@ -5901,7 +7475,6 @@ [generated/test_2_conformance__typedarrays__data-view-crash.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__typedarrays__data-view-test.html] -fail-if = 1 skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) [generated/test_2_conformance__typedarrays__typed-arrays-in-workers.html] skip-if = (os == 'android' || os == 'linux' || (os == 'win' && os_version == '5.1')) @@ -5939,10 +7512,11 @@ [generated/test_conformance__attribs__gl-vertex-attrib.html] [generated/test_conformance__attribs__gl-vertexattribpointer-offsets.html] [generated/test_conformance__attribs__gl-vertexattribpointer.html] -fail-if = (os == 'mac') || (os == 'win') || (os == 'android') || (os == 'linux') +fail-if = (os == 'android') [generated/test_conformance__buffers__buffer-bind-test.html] [generated/test_conformance__buffers__buffer-data-and-buffer-sub-data.html] [generated/test_conformance__buffers__buffer-data-array-buffer-delete.html] +[generated/test_conformance__buffers__buffer-uninitialized.html] [generated/test_conformance__buffers__element-array-buffer-delete-recreate.html] [generated/test_conformance__buffers__index-validation-copies-indices.html] [generated/test_conformance__buffers__index-validation-crash-with-buffer-sub-data.html] @@ -5983,6 +7557,7 @@ [generated/test_conformance__context__context-hidden-alpha.html] [generated/test_conformance__context__context-lost-restored.html] [generated/test_conformance__context__context-lost.html] +[generated/test_conformance__context__context-no-alpha-fbo-with-alpha.html] [generated/test_conformance__context__context-release-upon-reload.html] skip-if = (os == 'android') [generated/test_conformance__context__context-release-with-workers.html] @@ -6011,12 +7586,12 @@ [generated/test_conformance__extensions__oes-texture-float-with-canvas.html] fail-if = (os == 'android') [generated/test_conformance__extensions__oes-texture-float-with-image-data.html] +skip-if = (os == 'win' && os_version == '6.1') fail-if = (os == 'android') [generated/test_conformance__extensions__oes-texture-float-with-image.html] fail-if = (os == 'android') [generated/test_conformance__extensions__oes-texture-float-with-video.html] -skip-if = (os == 'win' && os_version == '6.1') -fail-if = (os == 'android') +fail-if = (os == 'android') || (os == 'linux') || (os == 'win') || (os == 'mac') [generated/test_conformance__extensions__oes-texture-float.html] fail-if = (os == 'android') [generated/test_conformance__extensions__oes-texture-half-float-linear.html] @@ -6024,28 +7599,34 @@ [generated/test_conformance__extensions__oes-texture-half-float-with-canvas.html] fail-if = (os == 'android') [generated/test_conformance__extensions__oes-texture-half-float-with-image-data.html] +skip-if = (os == 'win' && os_version == '6.1') fail-if = (os == 'android') [generated/test_conformance__extensions__oes-texture-half-float-with-image.html] fail-if = (os == 'android') [generated/test_conformance__extensions__oes-texture-half-float-with-video.html] -skip-if = (os == 'win' && os_version == '6.1') -fail-if = (os == 'android') +fail-if = (os == 'mac') || (os == 'android') || (os == 'linux') || (os == 'win') [generated/test_conformance__extensions__oes-texture-half-float.html] fail-if = (os == 'mac') || (os == 'win') || (os == 'android') || (os == 'linux') [generated/test_conformance__extensions__oes-vertex-array-object-bufferData.html] [generated/test_conformance__extensions__oes-vertex-array-object.html] skip-if = (os == 'mac' && os_version == '10.6') +fail-if = (os == 'mac') || (os == 'linux') || (os == 'win') [generated/test_conformance__extensions__webgl-compressed-texture-atc.html] +[generated/test_conformance__extensions__webgl-compressed-texture-etc.html] [generated/test_conformance__extensions__webgl-compressed-texture-pvrtc.html] +[generated/test_conformance__extensions__webgl-compressed-texture-s3tc-srgb.html] [generated/test_conformance__extensions__webgl-compressed-texture-s3tc.html] [generated/test_conformance__extensions__webgl-compressed-texture-size-limit.html] skip-if = (os == 'win') [generated/test_conformance__extensions__webgl-debug-renderer-info.html] [generated/test_conformance__extensions__webgl-debug-shaders.html] [generated/test_conformance__extensions__webgl-depth-texture.html] +[generated/test_conformance__extensions__webgl-draw-buffers-framebuffer-unsupported.html] +fail-if = (os == 'mac') || (os == 'linux') [generated/test_conformance__extensions__webgl-draw-buffers-max-draw-buffers.html] [generated/test_conformance__extensions__webgl-draw-buffers.html] skip-if = (os == 'linux') +fail-if = (os == 'mac') || (os == 'win') [generated/test_conformance__extensions__webgl-shared-resources.html] [generated/test_conformance__glsl__bugs__angle-ambiguous-function-call.html] [generated/test_conformance__glsl__bugs__angle-constructor-invalid-parameters.html] @@ -6053,6 +7634,7 @@ [generated/test_conformance__glsl__bugs__angle-dx-variable-bug.html] [generated/test_conformance__glsl__bugs__array-of-struct-with-int-first-position.html] skip-if = (os == 'android') +[generated/test_conformance__glsl__bugs__bool-type-cast-bug-int-float.html] [generated/test_conformance__glsl__bugs__compare-loop-index-to-uniform.html] skip-if = (os == 'android') [generated/test_conformance__glsl__bugs__complex-glsl-does-not-crash.html] @@ -6072,6 +7654,8 @@ skip-if = (os == 'android') [generated/test_conformance__glsl__bugs__gl-fragcoord-multisampling-bug.html] skip-if = (os == 'android') +[generated/test_conformance__glsl__bugs__global-invariant-does-not-leak-across-shaders.html] +[generated/test_conformance__glsl__bugs__invariant-does-not-leak-across-shaders.html] [generated/test_conformance__glsl__bugs__logic-inside-block-without-braces.html] skip-if = (os == 'android') [generated/test_conformance__glsl__bugs__long-expressions-should-not-crash.html] @@ -6085,6 +7669,7 @@ skip-if = (os == 'android') [generated/test_conformance__glsl__bugs__nested-loops-with-break-and-continue.html] skip-if = (os == 'android') +[generated/test_conformance__glsl__bugs__nested-sequence-operator.html] [generated/test_conformance__glsl__bugs__pow-of-small-constant-in-user-defined-function.html] skip-if = (os == 'android') [generated/test_conformance__glsl__bugs__pow-with-constant-exponent-should-not-crash.html] @@ -6646,6 +8231,7 @@ [generated/test_conformance__programs__gl-getshadersource.html] [generated/test_conformance__programs__gl-shader-test.html] [generated/test_conformance__programs__invalid-UTF-16.html] +[generated/test_conformance__programs__program-infolog.html] [generated/test_conformance__programs__program-test.html] fail-if = (os == 'android' && android_version == '10') [generated/test_conformance__programs__use-program-crash-with-discard-in-fragment-shader.html] @@ -6658,6 +8244,8 @@ [generated/test_conformance__renderbuffers__framebuffer-state-restoration.html] [generated/test_conformance__renderbuffers__framebuffer-test.html] [generated/test_conformance__renderbuffers__renderbuffer-initialization.html] +[generated/test_conformance__rendering__clipping-wide-points.html] +fail-if = (os == 'linux') [generated/test_conformance__rendering__culling.html] [generated/test_conformance__rendering__default-texture-draw-bug.html] [generated/test_conformance__rendering__draw-arrays-out-of-bounds.html] @@ -6681,6 +8269,7 @@ [generated/test_conformance__rendering__multisample-corruption.html] skip-if = (os == 'mac') || (os == 'android') || (os == 'win') [generated/test_conformance__rendering__negative-one-index.html] +[generated/test_conformance__rendering__out-of-bounds-index-buffers.html] [generated/test_conformance__rendering__point-no-attributes.html] [generated/test_conformance__rendering__point-size.html] [generated/test_conformance__rendering__point-specific-shader-variables.html] @@ -6696,6 +8285,26 @@ [generated/test_conformance__state__gl-initial-state.html] [generated/test_conformance__state__gl-object-get-calls.html] [generated/test_conformance__state__state-uneffected-after-compositing.html] +[generated/test_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_byte.html] +[generated/test_conformance__textures__canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html] +[generated/test_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_byte.html] +[generated/test_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html] +[generated/test_conformance__textures__canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html] +[generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_byte.html] +[generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgb-rgb-unsigned_short_5_6_5.html] +[generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_byte.html] +[generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html] +[generated/test_conformance__textures__canvas_sub_rectangle__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html] +[generated/test_conformance__textures__image__tex-2d-rgb-rgb-unsigned_byte.html] +[generated/test_conformance__textures__image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html] +[generated/test_conformance__textures__image__tex-2d-rgba-rgba-unsigned_byte.html] +[generated/test_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html] +[generated/test_conformance__textures__image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html] +[generated/test_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_byte.html] +[generated/test_conformance__textures__image_data__tex-2d-rgb-rgb-unsigned_short_5_6_5.html] +[generated/test_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_byte.html] +[generated/test_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html] +[generated/test_conformance__textures__image_data__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html] [generated/test_conformance__textures__misc__compressed-tex-image.html] [generated/test_conformance__textures__misc__copy-tex-image-2d-formats.html] skip-if = (os == 'win' && os_version == '5.1') @@ -6755,23 +8364,34 @@ [generated/test_conformance__textures__misc__texture-upload-cube-maps.html] [generated/test_conformance__textures__misc__texture-upload-size.html] skip-if = (os == 'win') || (os == 'android') +[generated/test_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_byte.html] +[generated/test_conformance__textures__svg_image__tex-2d-rgb-rgb-unsigned_short_5_6_5.html] +[generated/test_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_byte.html] +[generated/test_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html] +[generated/test_conformance__textures__svg_image__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html] [generated/test_conformance__textures__video__tex-2d-rgb-rgb-unsigned_byte.html] -fail-if = (os == 'android') +fail-if = (os == 'android') || (os == 'linux') || (os == 'mac') || (os == 'win') [generated/test_conformance__textures__video__tex-2d-rgb-rgb-unsigned_short_5_6_5.html] -fail-if = (os == 'android') +fail-if = (os == 'android') || (os == 'linux') || (os == 'mac') || (os == 'win') [generated/test_conformance__textures__video__tex-2d-rgba-rgba-unsigned_byte.html] -fail-if = (os == 'android') +fail-if = (os == 'android') || (os == 'linux') || (os == 'mac') || (os == 'win') [generated/test_conformance__textures__video__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html] skip-if = (os == 'android') +fail-if = (os == 'linux') || (os == 'mac') || (os == 'win') [generated/test_conformance__textures__video__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html] skip-if = (os == 'android') +fail-if = (os == 'linux') || (os == 'linux') || (os == 'mac') || (os == 'win') +[generated/test_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_byte.html] +[generated/test_conformance__textures__webgl_canvas__tex-2d-rgb-rgb-unsigned_short_5_6_5.html] +[generated/test_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_byte.html] +[generated/test_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html] +[generated/test_conformance__textures__webgl_canvas__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html] [generated/test_conformance__typedarrays__array-buffer-crash.html] [generated/test_conformance__typedarrays__array-buffer-view-crash.html] [generated/test_conformance__typedarrays__array-large-array-tests.html] [generated/test_conformance__typedarrays__array-unit-tests.html] [generated/test_conformance__typedarrays__data-view-crash.html] [generated/test_conformance__typedarrays__data-view-test.html] -fail-if = 1 [generated/test_conformance__typedarrays__typed-arrays-in-workers.html] [generated/test_conformance__uniforms__gl-uniform-arrays.html] [generated/test_conformance__uniforms__gl-uniform-bool.html] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/mochitest-errata.ini firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/mochitest-errata.ini --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/test/webgl-conf/mochitest-errata.ini 2017-01-13 01:39:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/test/webgl-conf/mochitest-errata.ini 2017-01-16 01:42:32.000000000 +0000 @@ -33,13 +33,6 @@ [generated/test_..__always-fail.html] fail-if = 1 -[generated/test_conformance__typedarrays__data-view-test.html] -# Test is out-of-date with spec. -fail-if = 1 -[generated/test_2_conformance__typedarrays__data-view-test.html] -# Test is out-of-date with spec. -fail-if = 1 - #################### # Tests requesting non-local network connections. @@ -104,6 +97,7 @@ skip-if = (os == 'b2g') || (os == 'linux') || (os == 'android') [generated/test_conformance__extensions__webgl-draw-buffers.html] +fail-if = (os == 'mac') || (os == 'win') # Crashes skip-if = (os == 'linux') @@ -140,6 +134,7 @@ skip-if = (os == 'android' && debug) [generated/test_conformance__extensions__oes-vertex-array-object.html] +fail-if = (os == 'mac') || (os == 'linux') || (os == 'win') # 10.6 crash: # PROCESS-CRASH | dom/canvas/test/webgl-conf/generated/test_conformance__extensions__oes-vertex-array-object.html | application crashed [@ gleRunVertexSubmitImmediate + 0xf24] skip-if = (os == 'mac' && os_version == '10.6') @@ -147,20 +142,14 @@ # application crashed [@ mozilla::gl::GLContext::AfterGLCall] skip-if = (os == 'android') || (os == 'win') -[generated/test_2_conformance2__rendering__draw-buffers.html] -fail-if = (os == 'mac') || (os == 'win') [generated/test_2_conformance__textures__misc__tex-image-with-format-and-type.html] fail-if = (os == 'mac') -[generated/test_2_conformance__attribs__gl-vertexattribpointer.html] -fail-if = (os == 'mac') || (os == 'win') [generated/test_2_conformance2__vertex_arrays__vertex-array-object.html] fail-if = (os == 'mac') || (os == 'win') [generated/test_conformance__extensions__oes-texture-half-float.html] fail-if = (os == 'mac') || (os == 'win') || (os == 'android') || (os == 'linux') -[generated/test_2_conformance2__reading__read-pixels-pack-parameters.html] -fail-if = (os == 'mac') || (os == 'win') [generated/test_conformance__attribs__gl-vertexattribpointer.html] -fail-if = (os == 'mac') || (os == 'win') || (os == 'android') || (os == 'linux') +fail-if = (os == 'android') [generated/test_conformance__ogles__GL__biuDepthRange__biuDepthRange_001_to_002.html] fail-if = (os == 'android') || (os == 'linux') [generated/test_conformance__ogles__GL__gl_FragCoord__gl_FragCoord_001_to_003.html] @@ -196,6 +185,178 @@ skip-if = (os == 'linux') || (os == 'android') [generated/test_conformance__glsl__bugs__pow-of-small-constant-in-user-defined-function.html] skip-if = (os == 'android') +[generated/test_2_conformance2__textures__misc__tex-image-with-bad-args-from-dom-elements.html] +skip-if = (os == 'win') || (os == 'mac') +[generated/test_2_conformance2__textures__misc__tex-image-with-different-data-source.html] +# Bug 1324349 +skip-if = (os == 'mac' && debug) || (os == 'win' && debug) +fail-if = (os == 'mac') || (os == 'win') +[generated/test_conformance__textures__video__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html] +# TEST-UNEXPECTED-FAIL +fail-if = (os == 'linux') || (os == 'mac') || (os == 'win') +# timed out crash +skip-if = (os == 'android') +[generated/test_conformance__textures__video__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html] +# TEST-UNEXPECTED-FAIL +fail-if = (os == 'linux') || (os == 'linux') || (os == 'mac') || (os == 'win') +# timed out +skip-if = (os == 'android') +[generated/test_conformance__extensions__oes-texture-float-with-video.html] +fail-if = (os == 'android') || (os == 'linux') || (os == 'win') || (os == 'mac') +[generated/test_conformance__extensions__oes-texture-half-float-with-video.html] +fail-if = (os == 'mac') || (os == 'android') || (os == 'linux') || (os == 'win') +[generated/test_conformance__extensions__webgl-draw-buffers-framebuffer-unsupported.html] +fail-if = (os == 'mac') || (os == 'linux') +[generated/test_conformance__textures__video__tex-2d-rgb-rgb-unsigned_byte.html] +fail-if = (os == 'android') || (os == 'linux') || (os == 'mac') || (os == 'win') +[generated/test_conformance__textures__video__tex-2d-rgb-rgb-unsigned_short_5_6_5.html] +fail-if = (os == 'android') || (os == 'linux') || (os == 'mac') || (os == 'win') +[generated/test_conformance__textures__video__tex-2d-rgba-rgba-unsigned_byte.html] +fail-if = (os == 'android') || (os == 'linux') || (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__buffers__buffer-type-restrictions.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__glsl3__tricky-loop-conditions.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__misc__views-with-offsets.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__rendering__blitframebuffer-outside-readbuffer.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__rendering__clear-func-buffer-type-match.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__rendering__fs-color-type-mismatch-color-buffer-type.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__rendering__instanced-rendering-bug.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__misc__copy-texture-image.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__misc__integer-cubemap-specification-order-bug.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__misc__tex-srgb-mipmap.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-half_float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rg16f-rg-float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rg16f-rg-half_float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rg32f-rg-float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rg8-rg-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rg8ui-rg_integer-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgb16f-rgb-float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgb16f-rgb-half_float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgb32f-rgb-float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgb565-rgb-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgb565-rgb-unsigned_short_5_6_5.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgb5_a1-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgb8-rgb-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgb9_e5-rgb-float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgb9_e5-rgb-half_float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgba16f-rgba-float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgba16f-rgba-half_float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgba32f-rgba-float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgba4-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgba4-rgba-unsigned_short_4_4_4_4.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgba8-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-srgb8-rgb-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-2d-srgb8_alpha8-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-half_float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rg16f-rg-float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rg16f-rg-half_float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rg32f-rg-float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rg8-rg-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rg8ui-rg_integer-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgb16f-rgb-float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgb16f-rgb-half_float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgb32f-rgb-float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgb565-rgb-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgb5_a1-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgb8-rgb-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgb9_e5-rgb-float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgb9_e5-rgb-half_float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgba16f-rgba-float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgba16f-rgba-half_float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgba32f-rgba-float.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgba4-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgba8-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-srgb8-rgb-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance2__textures__video__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance__extensions__webgl-compressed-texture-etc.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance__textures__video__tex-2d-rgb-rgb-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance__textures__video__tex-2d-rgb-rgb-unsigned_short_5_6_5.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance__textures__video__tex-2d-rgba-rgba-unsigned_byte.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance__textures__video__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html] +fail-if = (os == 'mac') || (os == 'win') +[generated/test_2_conformance__textures__video__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html] +fail-if = (os == 'mac') || (os == 'win') ######################################################################## # "tst-linux{32,64}-spot-NNN" Slaves: # Android 2.3, B2G Emu, Linux, and Mulet. @@ -239,8 +400,6 @@ fail-if = (os == 'android') [generated/test_conformance__extensions__oes-texture-float-with-image-data.html] fail-if = (os == 'android') -[generated/test_conformance__extensions__oes-texture-float-with-video.html] -fail-if = (os == 'android') # Frequent but intermittent timeout on win7 skip-if = (os == 'win' && os_version == '6.1') [generated/test_conformance__extensions__oes-texture-half-float-linear.html] @@ -251,23 +410,9 @@ fail-if = (os == 'android') [generated/test_conformance__extensions__oes-texture-half-float-with-image-data.html] fail-if = (os == 'android') -[generated/test_conformance__extensions__oes-texture-half-float-with-video.html] -fail-if = (os == 'android') # Frequent but intermittent timeout on win7 skip-if = (os == 'win' && os_version == '6.1') -[generated/test_conformance__textures__video__tex-2d-rgb-rgb-unsigned_byte.html] -fail-if = (os == 'android') -[generated/test_conformance__textures__video__tex-2d-rgb-rgb-unsigned_short_5_6_5.html] -fail-if = (os == 'android') -[generated/test_conformance__textures__video__tex-2d-rgba-rgba-unsigned_byte.html] -fail-if = (os == 'android') -[generated/test_conformance__textures__video__tex-2d-rgba-rgba-unsigned_short_4_4_4_4.html] -# timed out crash -skip-if = (os == 'android') -[generated/test_conformance__textures__video__tex-2d-rgba-rgba-unsigned_short_5_5_5_1.html] -# timed out -skip-if = (os == 'android') [generated/test_conformance__canvas__buffer-offscreen-test.html] # Causes frequent *blues*: "DMError: Remote Device Error: unable to # connect to 127.0.0.1 after 5 attempts" on 'Android 2.3 Opt'. @@ -496,6 +641,8 @@ [generated/test_conformance__ogles__GL__sign__sign_001_to_006.html] # Crashes skip-if = (os == 'linux') +[generated/test_conformance__rendering__clipping-wide-points.html] +fail-if = (os == 'linux') ######################################################################## ######################################################################## @@ -545,6 +692,173 @@ fail-if = (os == 'mac') [generated/test_conformance__glsl__misc__shaders-with-invariance.html] fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__misc__tex-unpack-params.html] +skip-if = (os == 'mac' && debug) +fail-if = (os == 'mac') +[generated/test_2_conformance2__glsl3__valid-invariant.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__reading__format-r11f-g11f-b10f.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__rendering__blitframebuffer-filter-outofbounds.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__rendering__blitframebuffer-filter-srgb.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__rendering__framebuffer-unsupported.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-half_float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r16f-red-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r16f-red-half_float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r32f-red-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r8-red-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-r8ui-red_integer-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg16f-rg-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg16f-rg-half_float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg32f-rg-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg8-rg-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rg8ui-rg_integer-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb16f-rgb-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb16f-rgb-half_float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb32f-rgb-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb565-rgb-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb5_a1-rgba-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb8-rgb-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb9_e5-rgb-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgb9_e5-rgb-half_float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba16f-rgba-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba16f-rgba-half_float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba32f-rgba-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba4-rgba-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba8-rgba-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-srgb8-rgb-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__canvas_sub_rectangle__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-half_float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-r11f_g11f_b10f-rgb-unsigned_int_10f_11f_11f_rev.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-r16f-red-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-r16f-red-half_float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-r32f-red-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-r8-red-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-r8ui-red_integer-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rg16f-rg-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rg16f-rg-half_float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rg32f-rg-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rg8-rg-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rg8ui-rg_integer-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgb16f-rgb-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgb16f-rgb-half_float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgb32f-rgb-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgb565-rgb-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgb565-rgb-unsigned_short_5_6_5.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgb5_a1-rgba-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgb5_a1-rgba-unsigned_short_5_5_5_1.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgb8-rgb-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgb8ui-rgb_integer-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgb9_e5-rgb-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgb9_e5-rgb-half_float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgba16f-rgba-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgba16f-rgba-half_float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgba32f-rgba-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgba4-rgba-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgba4-rgba-unsigned_short_4_4_4_4.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgba8-rgba-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-rgba8ui-rgba_integer-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-srgb8-rgb-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image__tex-3d-srgb8_alpha8-rgba-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image_data__tex-2d-rg8ui-rg_integer-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image_data__tex-2d-rgb8ui-rgb_integer-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__image_data__tex-2d-rgba8ui-rgba_integer-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__misc__copy-texture-image-luma-format.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__misc__integer-cubemap-texture-sampling.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__misc__tex-mipmap-levels.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__video__tex-3d-r16f-red-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__video__tex-3d-r16f-red-half_float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__video__tex-3d-r32f-red-float.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__video__tex-3d-r8-red-unsigned_byte.html] +fail-if = (os == 'mac') +[generated/test_2_conformance2__textures__video__tex-3d-r8ui-red_integer-unsigned_byte.html] +fail-if = (os == 'mac') [generated/test_2_conformance2__extensions__ext-color-buffer-float.html] skip-if = (os == 'mac' && debug) @@ -650,6 +964,13 @@ [generated/test_2_conformance__textures__misc__tex-image-and-sub-image-2d-with-array-buffer-view.html] # Failure on win7 but got passed on win7 vm skip-if = (os == 'win' && os_version == '6.1') +[generated/test_2_conformance__extensions__webgl-compressed-texture-size-limit.html] +# Test timed out. +skip-if = (os == 'win') +[generated/test_2_conformance2__textures__misc__tex-input-validation.html] +skip-if = (os == 'win') +[generated/test_2_conformance2__buffers__get-buffer-sub-data.html] +skip-if = (os == 'win') #################### # failure on Windows diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/WebGLShader.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/WebGLShader.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/canvas/WebGLShader.cpp 2017-01-13 01:32:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/canvas/WebGLShader.cpp 2017-01-16 01:33:39.000000000 +0000 @@ -173,16 +173,6 @@ // 7-bit ASCII range, so we can skip the NS_IsAscii() check. const NS_LossyConvertUTF16toASCII cleanSource(sourceWithoutComments); - if (mContext->gl->WorkAroundDriverBugs()) { - const size_t maxSourceLength = 0x3ffff; - if (cleanSource.Length() > maxSourceLength) { - mContext->ErrorInvalidValue("shaderSource: Source has more than %d" - " characters. (Driver workaround)", - maxSourceLength); - return; - } - } - if (PR_GetEnv("MOZ_WEBGL_DUMP_SHADERS")) { printf_stderr("////////////////////////////////////////\n"); printf_stderr("// MOZ_WEBGL_DUMP_SHADERS:\n"); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/moz.build firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/moz.build --- firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/moz.build 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/moz.build 2017-01-16 01:42:34.000000000 +0000 @@ -0,0 +1,26 @@ +# -*- Mode: python; 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/. + +XPIDL_SOURCES += [ + 'nsICommandManager.idl', + 'nsICommandParams.idl', + 'nsIControllerCommand.idl', + 'nsIControllerCommandTable.idl', + 'nsIControllerContext.idl', + 'nsPICommandUpdater.idl', +] + +XPIDL_MODULE = 'commandhandler' + +UNIFIED_SOURCES += [ + 'nsBaseCommandController.cpp', + 'nsCommandGroup.cpp', + 'nsCommandManager.cpp', + 'nsCommandParams.cpp', + 'nsControllerCommandTable.cpp', +] + +FINAL_LIBRARY = 'xul' diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsBaseCommandController.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsBaseCommandController.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsBaseCommandController.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsBaseCommandController.cpp 2017-01-16 01:42:34.000000000 +0000 @@ -0,0 +1,184 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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 "nsString.h" +#include "nsIComponentManager.h" +#include "nsBaseCommandController.h" + +#include "nsString.h" +#include "nsWeakPtr.h" + +NS_IMPL_ADDREF(nsBaseCommandController) +NS_IMPL_RELEASE(nsBaseCommandController) + +NS_INTERFACE_MAP_BEGIN(nsBaseCommandController) + NS_INTERFACE_MAP_ENTRY(nsIController) + NS_INTERFACE_MAP_ENTRY(nsICommandController) + NS_INTERFACE_MAP_ENTRY(nsIControllerContext) + NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIControllerContext) +NS_INTERFACE_MAP_END + +nsBaseCommandController::nsBaseCommandController() + : mCommandContextRawPtr(nullptr) +{ +} + +nsBaseCommandController::~nsBaseCommandController() +{ +} + +NS_IMETHODIMP +nsBaseCommandController::Init(nsIControllerCommandTable* aCommandTable) +{ + nsresult rv = NS_OK; + + if (aCommandTable) { + mCommandTable = aCommandTable; + } else { + mCommandTable = + do_CreateInstance(NS_CONTROLLERCOMMANDTABLE_CONTRACTID, &rv); + } + + return rv; +} + +NS_IMETHODIMP +nsBaseCommandController::SetCommandContext(nsISupports* aCommandContext) +{ + mCommandContextWeakPtr = nullptr; + mCommandContextRawPtr = nullptr; + + if (aCommandContext) { + nsCOMPtr weak = do_QueryInterface(aCommandContext); + if (weak) { + nsresult rv = + weak->GetWeakReference(getter_AddRefs(mCommandContextWeakPtr)); + NS_ENSURE_SUCCESS(rv, rv); + } else { + mCommandContextRawPtr = aCommandContext; + } + } + + return NS_OK; +} + +NS_IMETHODIMP +nsBaseCommandController::GetInterface(const nsIID& aIID, void** aResult) +{ + NS_ENSURE_ARG_POINTER(aResult); + + if (NS_SUCCEEDED(QueryInterface(aIID, aResult))) { + return NS_OK; + } + + if (aIID.Equals(NS_GET_IID(nsIControllerCommandTable))) { + if (mCommandTable) { + return mCommandTable->QueryInterface(aIID, aResult); + } + return NS_ERROR_NOT_INITIALIZED; + } + + return NS_NOINTERFACE; +} + +/* ======================================================================= + * nsIController + * ======================================================================= */ + +NS_IMETHODIMP +nsBaseCommandController::IsCommandEnabled(const char* aCommand, bool* aResult) +{ + NS_ENSURE_ARG_POINTER(aCommand); + NS_ENSURE_ARG_POINTER(aResult); + NS_ENSURE_STATE(mCommandTable); + + nsISupports* context = mCommandContextRawPtr; + nsCOMPtr weak; + if (!context) { + weak = do_QueryReferent(mCommandContextWeakPtr); + context = weak; + } + return mCommandTable->IsCommandEnabled(aCommand, context, aResult); +} + +NS_IMETHODIMP +nsBaseCommandController::SupportsCommand(const char* aCommand, bool* aResult) +{ + NS_ENSURE_ARG_POINTER(aCommand); + NS_ENSURE_ARG_POINTER(aResult); + NS_ENSURE_STATE(mCommandTable); + + nsISupports* context = mCommandContextRawPtr; + nsCOMPtr weak; + if (!context) { + weak = do_QueryReferent(mCommandContextWeakPtr); + context = weak; + } + return mCommandTable->SupportsCommand(aCommand, context, aResult); +} + +NS_IMETHODIMP +nsBaseCommandController::DoCommand(const char* aCommand) +{ + NS_ENSURE_ARG_POINTER(aCommand); + NS_ENSURE_STATE(mCommandTable); + + nsISupports* context = mCommandContextRawPtr; + nsCOMPtr weak; + if (!context) { + weak = do_QueryReferent(mCommandContextWeakPtr); + context = weak; + } + return mCommandTable->DoCommand(aCommand, context); +} + +NS_IMETHODIMP +nsBaseCommandController::DoCommandWithParams(const char* aCommand, + nsICommandParams* aParams) +{ + NS_ENSURE_ARG_POINTER(aCommand); + NS_ENSURE_STATE(mCommandTable); + + nsISupports* context = mCommandContextRawPtr; + nsCOMPtr weak; + if (!context) { + weak = do_QueryReferent(mCommandContextWeakPtr); + context = weak; + } + return mCommandTable->DoCommandParams(aCommand, aParams, context); +} + +NS_IMETHODIMP +nsBaseCommandController::GetCommandStateWithParams(const char* aCommand, + nsICommandParams* aParams) +{ + NS_ENSURE_ARG_POINTER(aCommand); + NS_ENSURE_STATE(mCommandTable); + + nsISupports* context = mCommandContextRawPtr; + nsCOMPtr weak; + if (!context) { + weak = do_QueryReferent(mCommandContextWeakPtr); + context = weak; + } + return mCommandTable->GetCommandState(aCommand, aParams, context); +} + +NS_IMETHODIMP +nsBaseCommandController::OnEvent(const char* aEventName) +{ + NS_ENSURE_ARG_POINTER(aEventName); + return NS_OK; +} + +NS_IMETHODIMP +nsBaseCommandController::GetSupportedCommands(uint32_t* aCount, + char*** aCommands) +{ + NS_ENSURE_STATE(mCommandTable); + return mCommandTable->GetSupportedCommands(aCount, aCommands); +} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsBaseCommandController.h firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsBaseCommandController.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsBaseCommandController.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsBaseCommandController.h 2017-01-16 01:42:34.000000000 +0000 @@ -0,0 +1,49 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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/. */ + +#ifndef nsBaseCommandController_h__ +#define nsBaseCommandController_h__ + +#define NS_BASECOMMANDCONTROLLER_CID \ + { 0xbf88b48c, 0xfd8e, 0x40b4, { 0xba, 0x36, 0xc7, 0xc3, 0xad, 0x6d, 0x8a, 0xc9 } } +#define NS_BASECOMMANDCONTROLLER_CONTRACTID \ + "@mozilla.org/embedcomp/base-command-controller;1" + +#include "nsIController.h" +#include "nsIControllerContext.h" +#include "nsIControllerCommandTable.h" +#include "nsIInterfaceRequestor.h" +#include "nsIWeakReferenceUtils.h" + +// The base editor controller is used for both text widgets, and all other text +// and html editing +class nsBaseCommandController + : public nsIController + , public nsIControllerContext + , public nsIInterfaceRequestor + , public nsICommandController +{ +public: + nsBaseCommandController(); + + NS_DECL_ISUPPORTS + NS_DECL_NSICONTROLLER + NS_DECL_NSICOMMANDCONTROLLER + NS_DECL_NSICONTROLLERCONTEXT + NS_DECL_NSIINTERFACEREQUESTOR + +protected: + virtual ~nsBaseCommandController(); + +private: + nsWeakPtr mCommandContextWeakPtr; + nsISupports* mCommandContextRawPtr; + + // Our reference to the command manager + nsCOMPtr mCommandTable; +}; + +#endif /* nsBaseCommandController_h_ */ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsCommandGroup.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsCommandGroup.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsCommandGroup.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsCommandGroup.cpp 2017-01-16 01:42:34.000000000 +0000 @@ -0,0 +1,296 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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 "nsString.h" +#include "nsReadableUtils.h" +#include "nsTArray.h" +#include "nsISimpleEnumerator.h" +#include "nsXPCOM.h" +#include "nsSupportsPrimitives.h" +#include "nsIComponentManager.h" +#include "nsCommandGroup.h" +#include "nsIControllerCommand.h" +#include "nsCRT.h" + +class nsGroupsEnumerator : public nsISimpleEnumerator +{ +public: + explicit nsGroupsEnumerator( + nsControllerCommandGroup::GroupsHashtable& aInHashTable); + + NS_DECL_ISUPPORTS + NS_DECL_NSISIMPLEENUMERATOR + +protected: + virtual ~nsGroupsEnumerator(); + + nsresult Initialize(); + +protected: + nsControllerCommandGroup::GroupsHashtable& mHashTable; + int32_t mIndex; + const char** mGroupNames; // array of pointers to char16_t* in the hash table + bool mInitted; +}; + +/* Implementation file */ +NS_IMPL_ISUPPORTS(nsGroupsEnumerator, nsISimpleEnumerator) + +nsGroupsEnumerator::nsGroupsEnumerator( + nsControllerCommandGroup::GroupsHashtable& aInHashTable) + : mHashTable(aInHashTable) + , mIndex(-1) + , mGroupNames(nullptr) + , mInitted(false) +{ +} + +nsGroupsEnumerator::~nsGroupsEnumerator() +{ + delete[] mGroupNames; +} + +NS_IMETHODIMP +nsGroupsEnumerator::HasMoreElements(bool* aResult) +{ + nsresult rv = NS_OK; + + NS_ENSURE_ARG_POINTER(aResult); + + if (!mInitted) { + rv = Initialize(); + if (NS_FAILED(rv)) { + return rv; + } + } + + *aResult = (mIndex < static_cast(mHashTable.Count()) - 1); + return NS_OK; +} + +NS_IMETHODIMP +nsGroupsEnumerator::GetNext(nsISupports** aResult) +{ + nsresult rv = NS_OK; + + NS_ENSURE_ARG_POINTER(aResult); + + if (!mInitted) { + rv = Initialize(); + if (NS_FAILED(rv)) { + return rv; + } + } + + mIndex++; + if (mIndex >= static_cast(mHashTable.Count())) { + return NS_ERROR_FAILURE; + } + + const char* thisGroupName = mGroupNames[mIndex]; + + nsCOMPtr supportsString = + do_CreateInstance(NS_SUPPORTS_CSTRING_CONTRACTID, &rv); + if (NS_FAILED(rv)) { + return rv; + } + + supportsString->SetData(nsDependentCString(thisGroupName)); + return CallQueryInterface(supportsString, aResult); +} + +nsresult +nsGroupsEnumerator::Initialize() +{ + if (mInitted) { + return NS_OK; + } + + mGroupNames = new const char*[mHashTable.Count()]; + if (!mGroupNames) { + return NS_ERROR_OUT_OF_MEMORY; + } + + mIndex = 0; + for (auto iter = mHashTable.Iter(); !iter.Done(); iter.Next()) { + mGroupNames[mIndex] = iter.Key().Data(); + mIndex++; + } + + mIndex = -1; + mInitted = true; + return NS_OK; +} + +class nsNamedGroupEnumerator : public nsISimpleEnumerator +{ +public: + explicit nsNamedGroupEnumerator(nsTArray* aInArray); + + NS_DECL_ISUPPORTS + NS_DECL_NSISIMPLEENUMERATOR + +protected: + virtual ~nsNamedGroupEnumerator(); + + nsTArray* mGroupArray; + int32_t mIndex; +}; + +nsNamedGroupEnumerator::nsNamedGroupEnumerator(nsTArray* aInArray) + : mGroupArray(aInArray) + , mIndex(-1) +{ +} + +nsNamedGroupEnumerator::~nsNamedGroupEnumerator() +{ +} + +NS_IMPL_ISUPPORTS(nsNamedGroupEnumerator, nsISimpleEnumerator) + +NS_IMETHODIMP +nsNamedGroupEnumerator::HasMoreElements(bool* aResult) +{ + NS_ENSURE_ARG_POINTER(aResult); + + int32_t arrayLen = mGroupArray ? mGroupArray->Length() : 0; + *aResult = (mIndex < arrayLen - 1); + return NS_OK; +} + +NS_IMETHODIMP +nsNamedGroupEnumerator::GetNext(nsISupports** aResult) +{ + NS_ENSURE_ARG_POINTER(aResult); + + if (!mGroupArray) { + return NS_ERROR_FAILURE; + } + + mIndex++; + if (mIndex >= int32_t(mGroupArray->Length())) { + return NS_ERROR_FAILURE; + } + + const nsCString& thisGroupName = mGroupArray->ElementAt(mIndex); + + nsresult rv; + nsCOMPtr supportsString = + do_CreateInstance(NS_SUPPORTS_CSTRING_CONTRACTID, &rv); + if (NS_FAILED(rv)) { + return rv; + } + + supportsString->SetData(thisGroupName); + return CallQueryInterface(supportsString, aResult); +} + +NS_IMPL_ISUPPORTS(nsControllerCommandGroup, nsIControllerCommandGroup) + +nsControllerCommandGroup::nsControllerCommandGroup() +{ +} + +nsControllerCommandGroup::~nsControllerCommandGroup() +{ + ClearGroupsHash(); +} + +void +nsControllerCommandGroup::ClearGroupsHash() +{ + mGroupsHash.Clear(); +} + +NS_IMETHODIMP +nsControllerCommandGroup::AddCommandToGroup(const char* aCommand, + const char* aGroup) +{ + nsDependentCString groupKey(aGroup); + nsTArray* commandList = mGroupsHash.Get(groupKey); + if (!commandList) { + // make this list + commandList = new AutoTArray; + mGroupsHash.Put(groupKey, commandList); + } + +#ifdef DEBUG + nsCString* appended = +#endif + commandList->AppendElement(aCommand); + NS_ASSERTION(appended, "Append failed"); + + return NS_OK; +} + +NS_IMETHODIMP +nsControllerCommandGroup::RemoveCommandFromGroup(const char* aCommand, + const char* aGroup) +{ + nsDependentCString groupKey(aGroup); + nsTArray* commandList = mGroupsHash.Get(groupKey); + if (!commandList) { + return NS_OK; // no group + } + + uint32_t numEntries = commandList->Length(); + for (uint32_t i = 0; i < numEntries; i++) { + nsCString commandString = commandList->ElementAt(i); + if (nsDependentCString(aCommand) != commandString) { + commandList->RemoveElementAt(i); + break; + } + } + return NS_OK; +} + +NS_IMETHODIMP +nsControllerCommandGroup::IsCommandInGroup(const char* aCommand, + const char* aGroup, bool* aResult) +{ + NS_ENSURE_ARG_POINTER(aResult); + *aResult = false; + + nsDependentCString groupKey(aGroup); + nsTArray* commandList = mGroupsHash.Get(groupKey); + if (!commandList) { + return NS_OK; // no group + } + + uint32_t numEntries = commandList->Length(); + for (uint32_t i = 0; i < numEntries; i++) { + nsCString commandString = commandList->ElementAt(i); + if (nsDependentCString(aCommand) != commandString) { + *aResult = true; + break; + } + } + return NS_OK; +} + +NS_IMETHODIMP +nsControllerCommandGroup::GetGroupsEnumerator(nsISimpleEnumerator** aResult) +{ + RefPtr groupsEnum = new nsGroupsEnumerator(mGroupsHash); + + groupsEnum.forget(aResult); + return NS_OK; +} + +NS_IMETHODIMP +nsControllerCommandGroup::GetEnumeratorForGroup(const char* aGroup, + nsISimpleEnumerator** aResult) +{ + nsDependentCString groupKey(aGroup); + nsTArray* commandList = mGroupsHash.Get(groupKey); // may be null + + RefPtr theGroupEnum = + new nsNamedGroupEnumerator(commandList); + + theGroupEnum.forget(aResult); + return NS_OK; +} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsCommandGroup.h firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsCommandGroup.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsCommandGroup.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsCommandGroup.h 2017-01-16 01:42:34.000000000 +0000 @@ -0,0 +1,44 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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/. */ + +#ifndef nsCommandGroup_h__ +#define nsCommandGroup_h__ + +#include "nsIController.h" +#include "nsClassHashtable.h" +#include "nsHashKeys.h" + +// {ecd55a01-2780-11d5-a73c-ca641a6813bc} +#define NS_CONTROLLER_COMMAND_GROUP_CID \ + { 0xecd55a01, 0x2780, 0x11d5, { 0xa7, 0x3c, 0xca, 0x64, 0x1a, 0x68, 0x13, 0xbc } } + +#define NS_CONTROLLER_COMMAND_GROUP_CONTRACTID \ + "@mozilla.org/embedcomp/controller-command-group;1" + +class nsControllerCommandGroup : public nsIControllerCommandGroup +{ +public: + nsControllerCommandGroup(); + + NS_DECL_ISUPPORTS + NS_DECL_NSICONTROLLERCOMMANDGROUP + +public: + typedef nsClassHashtable> + GroupsHashtable; + +protected: + virtual ~nsControllerCommandGroup(); + + void ClearGroupsHash(); + +protected: + // Hash keyed on command group. This could be made more space-efficient, + // maybe with atoms. + GroupsHashtable mGroupsHash; +}; + +#endif // nsCommandGroup_h__ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsCommandManager.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsCommandManager.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsCommandManager.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsCommandManager.cpp 2017-01-16 01:42:34.000000000 +0000 @@ -0,0 +1,262 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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 "nsString.h" + +#include "nsIController.h" +#include "nsIControllers.h" +#include "nsIObserver.h" + +#include "nsIComponentManager.h" + +#include "nsServiceManagerUtils.h" +#include "nsIScriptSecurityManager.h" + +#include "nsContentUtils.h" +#include "nsIDOMWindow.h" +#include "nsPIDOMWindow.h" +#include "nsPIWindowRoot.h" +#include "nsIFocusManager.h" + +#include "nsCOMArray.h" + +#include "nsCommandManager.h" + +nsCommandManager::nsCommandManager() + : mWindow(nullptr) +{ +} + +nsCommandManager::~nsCommandManager() +{ +} + +NS_IMPL_CYCLE_COLLECTION_CLASS(nsCommandManager) + +NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsCommandManager) + tmp->mObserversTable.Clear(); +NS_IMPL_CYCLE_COLLECTION_UNLINK_END +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsCommandManager) + for (auto iter = tmp->mObserversTable.Iter(); !iter.Done(); iter.Next()) { + nsCommandManager::ObserverList* observers = iter.UserData(); + int32_t numItems = observers->Length(); + for (int32_t i = 0; i < numItems; ++i) { + cb.NoteXPCOMChild(observers->ElementAt(i)); + } + } +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END + +NS_IMPL_CYCLE_COLLECTING_ADDREF(nsCommandManager) +NS_IMPL_CYCLE_COLLECTING_RELEASE(nsCommandManager) + +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsCommandManager) + NS_INTERFACE_MAP_ENTRY(nsICommandManager) + NS_INTERFACE_MAP_ENTRY(nsPICommandUpdater) + NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsICommandManager) +NS_INTERFACE_MAP_END + +NS_IMETHODIMP +nsCommandManager::Init(mozIDOMWindowProxy* aWindow) +{ + NS_ENSURE_ARG_POINTER(aWindow); + + mWindow = aWindow; // weak ptr + return NS_OK; +} + +NS_IMETHODIMP +nsCommandManager::CommandStatusChanged(const char* aCommandName) +{ + ObserverList* commandObservers; + mObserversTable.Get(aCommandName, &commandObservers); + + if (commandObservers) { + // XXX Should we worry about observers removing themselves from Observe()? + int32_t i, numItems = commandObservers->Length(); + for (i = 0; i < numItems; ++i) { + nsCOMPtr observer = commandObservers->ElementAt(i); + // should we get the command state to pass here? This might be expensive. + observer->Observe(NS_ISUPPORTS_CAST(nsICommandManager*, this), + aCommandName, + u"command_status_changed"); + } + } + + return NS_OK; +} + +#if 0 +#pragma mark - +#endif + +NS_IMETHODIMP +nsCommandManager::AddCommandObserver(nsIObserver* aCommandObserver, + const char* aCommandToObserve) +{ + NS_ENSURE_ARG(aCommandObserver); + + // XXX todo: handle special cases of aCommandToObserve being null, or empty + + // for each command in the table, we make a list of observers for that command + ObserverList* commandObservers; + if (!mObserversTable.Get(aCommandToObserve, &commandObservers)) { + commandObservers = new ObserverList; + mObserversTable.Put(aCommandToObserve, commandObservers); + } + + // need to check that this command observer hasn't already been registered + int32_t existingIndex = commandObservers->IndexOf(aCommandObserver); + if (existingIndex == -1) { + commandObservers->AppendElement(aCommandObserver); + } else { + NS_WARNING("Registering command observer twice on the same command"); + } + + return NS_OK; +} + +NS_IMETHODIMP +nsCommandManager::RemoveCommandObserver(nsIObserver* aCommandObserver, + const char* aCommandObserved) +{ + NS_ENSURE_ARG(aCommandObserver); + + // XXX todo: handle special cases of aCommandToObserve being null, or empty + + ObserverList* commandObservers; + if (!mObserversTable.Get(aCommandObserved, &commandObservers)) { + return NS_ERROR_UNEXPECTED; + } + + commandObservers->RemoveElement(aCommandObserver); + + return NS_OK; +} + +NS_IMETHODIMP +nsCommandManager::IsCommandSupported(const char* aCommandName, + mozIDOMWindowProxy* aTargetWindow, + bool* aResult) +{ + NS_ENSURE_ARG_POINTER(aResult); + + nsCOMPtr controller; + GetControllerForCommand(aCommandName, aTargetWindow, + getter_AddRefs(controller)); + *aResult = (controller.get() != nullptr); + return NS_OK; +} + +NS_IMETHODIMP +nsCommandManager::IsCommandEnabled(const char* aCommandName, + mozIDOMWindowProxy* aTargetWindow, + bool* aResult) +{ + NS_ENSURE_ARG_POINTER(aResult); + + bool commandEnabled = false; + + nsCOMPtr controller; + GetControllerForCommand(aCommandName, aTargetWindow, + getter_AddRefs(controller)); + if (controller) { + controller->IsCommandEnabled(aCommandName, &commandEnabled); + } + *aResult = commandEnabled; + return NS_OK; +} + +NS_IMETHODIMP +nsCommandManager::GetCommandState(const char* aCommandName, + mozIDOMWindowProxy* aTargetWindow, + nsICommandParams* aCommandParams) +{ + nsCOMPtr controller; + nsAutoString tValue; + nsresult rv = GetControllerForCommand(aCommandName, aTargetWindow, + getter_AddRefs(controller)); + if (!controller) { + return NS_ERROR_FAILURE; + } + + nsCOMPtr commandController = + do_QueryInterface(controller); + if (commandController) { + rv = commandController->GetCommandStateWithParams(aCommandName, + aCommandParams); + } else { + rv = NS_ERROR_NOT_IMPLEMENTED; + } + return rv; +} + +NS_IMETHODIMP +nsCommandManager::DoCommand(const char* aCommandName, + nsICommandParams* aCommandParams, + mozIDOMWindowProxy* aTargetWindow) +{ + nsCOMPtr controller; + nsresult rv = GetControllerForCommand(aCommandName, aTargetWindow, + getter_AddRefs(controller)); + if (!controller) { + return NS_ERROR_FAILURE; + } + + nsCOMPtr commandController = + do_QueryInterface(controller); + if (commandController && aCommandParams) { + rv = commandController->DoCommandWithParams(aCommandName, aCommandParams); + } else { + rv = controller->DoCommand(aCommandName); + } + return rv; +} + +nsresult +nsCommandManager::GetControllerForCommand(const char* aCommand, + mozIDOMWindowProxy* aTargetWindow, + nsIController** aResult) +{ + nsresult rv = NS_ERROR_FAILURE; + *aResult = nullptr; + + // check if we're in content or chrome + // if we're not chrome we must have a target window or we bail + if (!nsContentUtils::LegacyIsCallerChromeOrNativeCode()) { + if (!aTargetWindow) { + return rv; + } + + // if a target window is specified, it must be the window we expect + if (aTargetWindow != mWindow) { + return NS_ERROR_FAILURE; + } + } + + if (auto* targetWindow = nsPIDOMWindowOuter::From(aTargetWindow)) { + // get the controller for this particular window + nsCOMPtr controllers; + rv = targetWindow->GetControllers(getter_AddRefs(controllers)); + if (NS_FAILED(rv)) { + return rv; + } + if (!controllers) { + return NS_ERROR_FAILURE; + } + + // dispatch the command + return controllers->GetControllerForCommand(aCommand, aResult); + } + + auto* window = nsPIDOMWindowOuter::From(mWindow); + NS_ENSURE_TRUE(window, NS_ERROR_FAILURE); + nsCOMPtr root = window->GetTopWindowRoot(); + NS_ENSURE_TRUE(root, NS_ERROR_FAILURE); + + // no target window; send command to focus controller + return root->GetControllerForCommand(aCommand, aResult); +} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsCommandManager.h firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsCommandManager.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsCommandManager.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsCommandManager.h 2017-01-16 01:42:34.000000000 +0000 @@ -0,0 +1,50 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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/. */ + +#ifndef nsCommandManager_h__ +#define nsCommandManager_h__ + +#include "nsString.h" +#include "nsClassHashtable.h" +#include "nsWeakReference.h" + +#include "nsICommandManager.h" +#include "nsPICommandUpdater.h" +#include "nsCycleCollectionParticipant.h" + +class nsIController; +template class nsCOMArray; + +class nsCommandManager + : public nsICommandManager + , public nsPICommandUpdater + , public nsSupportsWeakReference +{ +public: + typedef nsTArray > ObserverList; + + nsCommandManager(); + + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsCommandManager, nsICommandManager) + + NS_DECL_NSICOMMANDMANAGER + NS_DECL_NSPICOMMANDUPDATER + +protected: + virtual ~nsCommandManager(); + + nsresult GetControllerForCommand(const char* aCommand, + mozIDOMWindowProxy* aDirectedToThisWindow, + nsIController** aResult); + +protected: + nsClassHashtable mObserversTable; + + mozIDOMWindowProxy* mWindow; // weak ptr. The window should always outlive us +}; + +#endif // nsCommandManager_h__ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsCommandParams.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsCommandParams.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsCommandParams.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsCommandParams.cpp 2017-01-16 01:42:34.000000000 +0000 @@ -0,0 +1,264 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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 "xpcom-config.h" +#include +#include "nscore.h" +#include "nsCRT.h" + +#include "nsCommandParams.h" +#include "mozilla/HashFunctions.h" + +using namespace mozilla; + +const PLDHashTableOps nsCommandParams::sHashOps = +{ + HashKey, + HashMatchEntry, + HashMoveEntry, + HashClearEntry +}; + +NS_IMPL_ISUPPORTS(nsCommandParams, nsICommandParams) + +nsCommandParams::nsCommandParams() + : mValuesHash(&sHashOps, sizeof(HashEntry), 2) +{ +} + +nsCommandParams::~nsCommandParams() +{ +} + +NS_IMETHODIMP +nsCommandParams::GetValueType(const char* aName, int16_t* aRetVal) +{ + NS_ENSURE_ARG_POINTER(aRetVal); + + HashEntry* foundEntry = GetNamedEntry(aName); + if (foundEntry) { + *aRetVal = foundEntry->mEntryType; + return NS_OK; + } + *aRetVal = eNoType; + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsCommandParams::GetBooleanValue(const char* aName, bool* aRetVal) +{ + NS_ENSURE_ARG_POINTER(aRetVal); + + HashEntry* foundEntry = GetNamedEntry(aName); + if (foundEntry && foundEntry->mEntryType == eBooleanType) { + *aRetVal = foundEntry->mData.mBoolean; + return NS_OK; + } + *aRetVal = false; + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsCommandParams::GetLongValue(const char* aName, int32_t* aRetVal) +{ + NS_ENSURE_ARG_POINTER(aRetVal); + + HashEntry* foundEntry = GetNamedEntry(aName); + if (foundEntry && foundEntry->mEntryType == eLongType) { + *aRetVal = foundEntry->mData.mLong; + return NS_OK; + } + *aRetVal = false; + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsCommandParams::GetDoubleValue(const char* aName, double* aRetVal) +{ + NS_ENSURE_ARG_POINTER(aRetVal); + + HashEntry* foundEntry = GetNamedEntry(aName); + if (foundEntry && foundEntry->mEntryType == eDoubleType) { + *aRetVal = foundEntry->mData.mDouble; + return NS_OK; + } + *aRetVal = 0.0; + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsCommandParams::GetStringValue(const char* aName, nsAString& aRetVal) +{ + HashEntry* foundEntry = GetNamedEntry(aName); + if (foundEntry && foundEntry->mEntryType == eWStringType) { + NS_ASSERTION(foundEntry->mData.mString, "Null string"); + aRetVal.Assign(*foundEntry->mData.mString); + return NS_OK; + } + aRetVal.Truncate(); + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsCommandParams::GetCStringValue(const char* aName, char** aRetVal) +{ + NS_ENSURE_ARG_POINTER(aRetVal); + + HashEntry* foundEntry = GetNamedEntry(aName); + if (foundEntry && foundEntry->mEntryType == eStringType) { + NS_ASSERTION(foundEntry->mData.mCString, "Null string"); + *aRetVal = ToNewCString(*foundEntry->mData.mCString); + return NS_OK; + } + *aRetVal = nullptr; + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsCommandParams::GetISupportsValue(const char* aName, nsISupports** aRetVal) +{ + NS_ENSURE_ARG_POINTER(aRetVal); + + HashEntry* foundEntry = GetNamedEntry(aName); + if (foundEntry && foundEntry->mEntryType == eISupportsType) { + NS_IF_ADDREF(*aRetVal = foundEntry->mISupports.get()); + return NS_OK; + } + *aRetVal = nullptr; + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsCommandParams::SetBooleanValue(const char* aName, bool aValue) +{ + HashEntry* foundEntry = GetOrMakeEntry(aName, eBooleanType); + if (!foundEntry) { + return NS_ERROR_OUT_OF_MEMORY; + } + foundEntry->mData.mBoolean = aValue; + return NS_OK; +} + +NS_IMETHODIMP +nsCommandParams::SetLongValue(const char* aName, int32_t aValue) +{ + HashEntry* foundEntry = GetOrMakeEntry(aName, eLongType); + if (!foundEntry) { + return NS_ERROR_OUT_OF_MEMORY; + } + foundEntry->mData.mLong = aValue; + return NS_OK; +} + +NS_IMETHODIMP +nsCommandParams::SetDoubleValue(const char* aName, double aValue) +{ + HashEntry* foundEntry = GetOrMakeEntry(aName, eDoubleType); + if (!foundEntry) { + return NS_ERROR_OUT_OF_MEMORY; + } + foundEntry->mData.mDouble = aValue; + return NS_OK; +} + +NS_IMETHODIMP +nsCommandParams::SetStringValue(const char* aName, const nsAString& aValue) +{ + HashEntry* foundEntry = GetOrMakeEntry(aName, eWStringType); + if (!foundEntry) { + return NS_ERROR_OUT_OF_MEMORY; + } + foundEntry->mData.mString = new nsString(aValue); + return NS_OK; +} + +NS_IMETHODIMP +nsCommandParams::SetCStringValue(const char* aName, const char* aValue) +{ + HashEntry* foundEntry = GetOrMakeEntry(aName, eStringType); + if (!foundEntry) { + return NS_ERROR_OUT_OF_MEMORY; + } + foundEntry->mData.mCString = new nsCString(aValue); + return NS_OK; +} + +NS_IMETHODIMP +nsCommandParams::SetISupportsValue(const char* aName, nsISupports* aValue) +{ + HashEntry* foundEntry = GetOrMakeEntry(aName, eISupportsType); + if (!foundEntry) { + return NS_ERROR_OUT_OF_MEMORY; + } + foundEntry->mISupports = aValue; // addrefs + return NS_OK; +} + +NS_IMETHODIMP +nsCommandParams::RemoveValue(const char* aName) +{ + mValuesHash.Remove((void*)aName); + return NS_OK; +} + +nsCommandParams::HashEntry* +nsCommandParams::GetNamedEntry(const char* aName) +{ + return static_cast(mValuesHash.Search((void*)aName)); +} + +nsCommandParams::HashEntry* +nsCommandParams::GetOrMakeEntry(const char* aName, uint8_t aEntryType) +{ + auto foundEntry = static_cast(mValuesHash.Search((void*)aName)); + if (foundEntry) { // reuse existing entry + foundEntry->Reset(aEntryType); + return foundEntry; + } + + foundEntry = static_cast(mValuesHash.Add((void*)aName, fallible)); + if (!foundEntry) { + return nullptr; + } + + // Use placement new. Our ctor does not clobber keyHash, which is important. + new (foundEntry) HashEntry(aEntryType, aName); + return foundEntry; +} + +PLDHashNumber +nsCommandParams::HashKey(const void* aKey) +{ + return HashString((const char*)aKey); +} + +bool +nsCommandParams::HashMatchEntry(const PLDHashEntryHdr* aEntry, const void* aKey) +{ + const char* keyString = (const char*)aKey; + const HashEntry* thisEntry = static_cast(aEntry); + return thisEntry->mEntryName.Equals(keyString); +} + +void +nsCommandParams::HashMoveEntry(PLDHashTable* aTable, + const PLDHashEntryHdr* aFrom, + PLDHashEntryHdr* aTo) +{ + const HashEntry* fromEntry = static_cast(aFrom); + HashEntry* toEntry = static_cast(aTo); + + new (toEntry) HashEntry(*fromEntry); + + fromEntry->~HashEntry(); +} + +void +nsCommandParams::HashClearEntry(PLDHashTable* aTable, PLDHashEntryHdr* aEntry) +{ + HashEntry* thisEntry = static_cast(aEntry); + thisEntry->~HashEntry(); +} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsCommandParams.h firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsCommandParams.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsCommandParams.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsCommandParams.h 2017-01-16 01:42:34.000000000 +0000 @@ -0,0 +1,131 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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/. */ + +#ifndef nsCommandParams_h__ +#define nsCommandParams_h__ + +#include "nsString.h" +#include "nsICommandParams.h" +#include "nsCOMPtr.h" +#include "PLDHashTable.h" + +class nsCommandParams : public nsICommandParams +{ +public: + nsCommandParams(); + + NS_DECL_ISUPPORTS + NS_DECL_NSICOMMANDPARAMS + +protected: + virtual ~nsCommandParams(); + + struct HashEntry : public PLDHashEntryHdr + { + nsCString mEntryName; + + uint8_t mEntryType; + union + { + bool mBoolean; + int32_t mLong; + double mDouble; + nsString* mString; + nsCString* mCString; + } mData; + + nsCOMPtr mISupports; + + HashEntry(uint8_t aType, const char* aEntryName) + : mEntryName(aEntryName) + , mEntryType(aType) + { + Reset(mEntryType); + } + + HashEntry(const HashEntry& aRHS) + : mEntryType(aRHS.mEntryType) + { + Reset(mEntryType); + switch (mEntryType) { + case eBooleanType: + mData.mBoolean = aRHS.mData.mBoolean; + break; + case eLongType: + mData.mLong = aRHS.mData.mLong; + break; + case eDoubleType: + mData.mDouble = aRHS.mData.mDouble; + break; + case eWStringType: + NS_ASSERTION(aRHS.mData.mString, "Source entry has no string"); + mData.mString = new nsString(*aRHS.mData.mString); + break; + case eStringType: + NS_ASSERTION(aRHS.mData.mCString, "Source entry has no string"); + mData.mCString = new nsCString(*aRHS.mData.mCString); + break; + case eISupportsType: + mISupports = aRHS.mISupports.get(); + break; + default: + NS_ERROR("Unknown type"); + } + } + + ~HashEntry() { Reset(eNoType); } + + void Reset(uint8_t aNewType) + { + switch (mEntryType) { + case eNoType: + break; + case eBooleanType: + mData.mBoolean = false; + break; + case eLongType: + mData.mLong = 0; + break; + case eDoubleType: + mData.mDouble = 0.0; + break; + case eWStringType: + delete mData.mString; + mData.mString = nullptr; + break; + case eISupportsType: + mISupports = nullptr; + break; + case eStringType: + delete mData.mCString; + mData.mCString = nullptr; + break; + default: + NS_ERROR("Unknown type"); + } + mEntryType = aNewType; + } + }; + + HashEntry* GetNamedEntry(const char* aName); + HashEntry* GetOrMakeEntry(const char* aName, uint8_t aEntryType); + +protected: + static PLDHashNumber HashKey(const void* aKey); + + static bool HashMatchEntry(const PLDHashEntryHdr* aEntry, const void* aKey); + + static void HashMoveEntry(PLDHashTable* aTable, const PLDHashEntryHdr* aFrom, + PLDHashEntryHdr* aTo); + + static void HashClearEntry(PLDHashTable* aTable, PLDHashEntryHdr* aEntry); + + PLDHashTable mValuesHash; + + static const PLDHashTableOps sHashOps; +}; + +#endif // nsCommandParams_h__ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsControllerCommandTable.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsControllerCommandTable.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsControllerCommandTable.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsControllerCommandTable.cpp 2017-01-16 01:42:34.000000000 +0000 @@ -0,0 +1,209 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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 "nsString.h" +#include "nsIControllerCommand.h" +#include "nsControllerCommandTable.h" + +nsresult NS_NewControllerCommandTable(nsIControllerCommandTable** aResult); + +// this value is used to size the hash table. Just a sensible upper bound +#define NUM_COMMANDS_LENGTH 32 + +nsControllerCommandTable::nsControllerCommandTable() + : mCommandsTable(NUM_COMMANDS_LENGTH) + , mMutable(true) +{ +} + +nsControllerCommandTable::~nsControllerCommandTable() +{ +} + +NS_IMPL_ISUPPORTS(nsControllerCommandTable, nsIControllerCommandTable, + nsISupportsWeakReference) + +NS_IMETHODIMP +nsControllerCommandTable::MakeImmutable(void) +{ + mMutable = false; + return NS_OK; +} + +NS_IMETHODIMP +nsControllerCommandTable::RegisterCommand(const char* aCommandName, + nsIControllerCommand* aCommand) +{ + NS_ENSURE_TRUE(mMutable, NS_ERROR_FAILURE); + + mCommandsTable.Put(nsDependentCString(aCommandName), aCommand); + + return NS_OK; +} + +NS_IMETHODIMP +nsControllerCommandTable::UnregisterCommand(const char* aCommandName, + nsIControllerCommand* aCommand) +{ + NS_ENSURE_TRUE(mMutable, NS_ERROR_FAILURE); + + nsDependentCString commandKey(aCommandName); + if (!mCommandsTable.Get(commandKey, nullptr)) { + return NS_ERROR_FAILURE; + } + + mCommandsTable.Remove(commandKey); + return NS_OK; +} + +NS_IMETHODIMP +nsControllerCommandTable::FindCommandHandler(const char* aCommandName, + nsIControllerCommand** aResult) +{ + NS_ENSURE_ARG_POINTER(aResult); + + *aResult = nullptr; + + nsCOMPtr foundCommand; + mCommandsTable.Get(nsDependentCString(aCommandName), + getter_AddRefs(foundCommand)); + if (!foundCommand) { + return NS_ERROR_FAILURE; + } + + foundCommand.forget(aResult); + return NS_OK; +} + +NS_IMETHODIMP +nsControllerCommandTable::IsCommandEnabled(const char* aCommandName, + nsISupports* aCommandRefCon, + bool* aResult) +{ + NS_ENSURE_ARG_POINTER(aResult); + + *aResult = false; + + nsCOMPtr commandHandler; + FindCommandHandler(aCommandName, getter_AddRefs(commandHandler)); + if (!commandHandler) { + NS_WARNING("Controller command table asked about a command that it does " + "not handle"); + return NS_OK; + } + + return commandHandler->IsCommandEnabled(aCommandName, aCommandRefCon, + aResult); +} + +NS_IMETHODIMP +nsControllerCommandTable::UpdateCommandState(const char* aCommandName, + nsISupports* aCommandRefCon) +{ + nsCOMPtr commandHandler; + FindCommandHandler(aCommandName, getter_AddRefs(commandHandler)); + if (!commandHandler) { + NS_WARNING("Controller command table asked to update the state of a " + "command that it does not handle"); + return NS_OK; + } + + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +nsControllerCommandTable::SupportsCommand(const char* aCommandName, + nsISupports* aCommandRefCon, + bool* aResult) +{ + NS_ENSURE_ARG_POINTER(aResult); + + // XXX: need to check the readonly and disabled states + + *aResult = false; + + nsCOMPtr commandHandler; + FindCommandHandler(aCommandName, getter_AddRefs(commandHandler)); + + *aResult = (commandHandler.get() != nullptr); + return NS_OK; +} + +NS_IMETHODIMP +nsControllerCommandTable::DoCommand(const char* aCommandName, + nsISupports* aCommandRefCon) +{ + nsCOMPtr commandHandler; + FindCommandHandler(aCommandName, getter_AddRefs(commandHandler)); + if (!commandHandler) { + NS_WARNING("Controller command table asked to do a command that it does " + "not handle"); + return NS_OK; + } + + return commandHandler->DoCommand(aCommandName, aCommandRefCon); +} + +NS_IMETHODIMP +nsControllerCommandTable::DoCommandParams(const char* aCommandName, + nsICommandParams* aParams, + nsISupports* aCommandRefCon) +{ + nsCOMPtr commandHandler; + FindCommandHandler(aCommandName, getter_AddRefs(commandHandler)); + if (!commandHandler) { + NS_WARNING("Controller command table asked to do a command that it does " + "not handle"); + return NS_OK; + } + return commandHandler->DoCommandParams(aCommandName, aParams, aCommandRefCon); +} + +NS_IMETHODIMP +nsControllerCommandTable::GetCommandState(const char* aCommandName, + nsICommandParams* aParams, + nsISupports* aCommandRefCon) +{ + nsCOMPtr commandHandler; + FindCommandHandler(aCommandName, getter_AddRefs(commandHandler)); + if (!commandHandler) { + NS_WARNING("Controller command table asked to do a command that it does " + "not handle"); + return NS_OK; + } + return commandHandler->GetCommandStateParams(aCommandName, aParams, + aCommandRefCon); +} + +NS_IMETHODIMP +nsControllerCommandTable::GetSupportedCommands(uint32_t* aCount, + char*** aCommands) +{ + char** commands = + static_cast(moz_xmalloc(sizeof(char*) * mCommandsTable.Count())); + *aCount = mCommandsTable.Count(); + *aCommands = commands; + + for (auto iter = mCommandsTable.Iter(); !iter.Done(); iter.Next()) { + *commands = ToNewCString(iter.Key()); + commands++; + } + return NS_OK; +} + +nsresult +NS_NewControllerCommandTable(nsIControllerCommandTable** aResult) +{ + NS_PRECONDITION(aResult != nullptr, "null ptr"); + if (!aResult) { + return NS_ERROR_NULL_POINTER; + } + + nsControllerCommandTable* newCommandTable = new nsControllerCommandTable(); + NS_ADDREF(newCommandTable); + *aResult = newCommandTable; + return NS_OK; +} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsControllerCommandTable.h firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsControllerCommandTable.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsControllerCommandTable.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsControllerCommandTable.h 2017-01-16 01:42:34.000000000 +0000 @@ -0,0 +1,36 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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/. */ + +#ifndef nsControllerCommandTable_h_ +#define nsControllerCommandTable_h_ + +#include "nsIControllerCommandTable.h" +#include "nsWeakReference.h" +#include "nsInterfaceHashtable.h" + +class nsIControllerCommand; + +class nsControllerCommandTable final + : public nsIControllerCommandTable + , public nsSupportsWeakReference +{ +public: + nsControllerCommandTable(); + + NS_DECL_ISUPPORTS + NS_DECL_NSICONTROLLERCOMMANDTABLE + +protected: + virtual ~nsControllerCommandTable(); + + // Hash table of nsIControllerCommands, keyed by command name. + nsInterfaceHashtable mCommandsTable; + + // Are we mutable? + bool mMutable; +}; + +#endif // nsControllerCommandTable_h_ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsICommandManager.idl firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsICommandManager.idl --- firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsICommandManager.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsICommandManager.idl 2017-01-16 01:42:34.000000000 +0000 @@ -0,0 +1,118 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/. */ + +#include "nsISupports.idl" +#include "nsIObserver.idl" +#include "nsICommandParams.idl" + +interface mozIDOMWindowProxy; + +/* + * nsICommandManager is an interface used to executing user-level commands, + * and getting the state of available commands. + * + * Commands are identified by strings, which are documented elsewhere. + * In addition, the list of required and optional parameters for + * each command, that are passed in via the nsICommandParams, are + * also documented elsewhere. (Where? Need a good location for this). + */ + + +[scriptable, uuid(bb5a1730-d83b-4fa2-831b-35b9d5842e84)] +interface nsICommandManager : nsISupports +{ + /* + * Register an observer on the specified command. The observer's Observe + * method will get called when the state (enabled/disbaled, or toggled etc) + * of the command changes. + * + * You can register the same observer on multiple commmands by calling this + * multiple times. + */ + void addCommandObserver(in nsIObserver aCommandObserver, + in string aCommandToObserve); + + /* + * Stop an observer from observering the specified command. If the observer + * was also registered on ther commands, they will continue to be observed. + * + * Passing an empty string in 'aCommandObserved' will remove the observer + * from all commands. + */ + void removeCommandObserver(in nsIObserver aCommandObserver, + in string aCommandObserved); + + /* + * Ask the command manager if the specified command is supported. + * If aTargetWindow is null, the focused window is used. + * + */ + boolean isCommandSupported(in string aCommandName, + in mozIDOMWindowProxy aTargetWindow); + + /* + * Ask the command manager if the specified command is currently. + * enabled. + * If aTargetWindow is null, the focused window is used. + */ + boolean isCommandEnabled(in string aCommandName, + in mozIDOMWindowProxy aTargetWindow); + + /* + * Get the state of the specified commands. + * + * On input: aCommandParams filled in with values that the caller cares + * about, most of which are command-specific (see the command documentation + * for details). One boolean value, "enabled", applies to all commands, + * and, in return will be set to indicate whether the command is enabled + * (equivalent to calling isCommandEnabled). + * + * aCommandName is the name of the command that needs the state + * aTargetWindow is the source of command controller + * (null means use focus controller) + * On output: aCommandParams: values set by the caller filled in with + * state from the command. + */ + void getCommandState(in string aCommandName, + in mozIDOMWindowProxy aTargetWindow, + /* inout */ in nsICommandParams aCommandParams); + + /* + * Execute the specified command. + * The command will be executed in aTargetWindow if it is specified. + * If aTargetWindow is null, it will go to the focused window. + * + * param: aCommandParams, a list of name-value pairs of command parameters, + * may be null for parameter-less commands. + * + */ + void doCommand(in string aCommandName, + in nsICommandParams aCommandParams, + in mozIDOMWindowProxy aTargetWindow); + +}; + + +/* + +Arguments to observers "Observe" method are as follows: + + void Observe( in nsISupports aSubject, // The nsICommandManager calling this Observer + in string aTopic, // Name of the command + in wstring aDummy ); // unused + +*/ + +// {64edb481-0c04-11d5-a73c-e964b968b0bc} +%{C++ +#define NS_COMMAND_MANAGER_CID \ +{ 0x64edb481, 0x0c04, 0x11d5, { 0xa7, 0x3c, 0xe9, 0x64, 0xb9, 0x68, 0xb0, 0xbc } } + +#define NS_COMMAND_MANAGER_CONTRACTID \ + "@mozilla.org/embedcomp/command-manager;1" +%} + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsICommandParams.idl firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsICommandParams.idl --- firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsICommandParams.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsICommandParams.idl 2017-01-16 01:42:34.000000000 +0000 @@ -0,0 +1,85 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/. */ + +#include "nsISupports.idl" + +/* + * nsICommandParams is used to pass parameters to commands executed + * via nsICommandManager, and to get command state. + * + */ + +[scriptable, uuid(b1fdf3c4-74e3-4f7d-a14d-2b76bcf53482)] +interface nsICommandParams : nsISupports +{ + /* + * List of primitive types for parameter values. + */ + const short eNoType = 0; /* Only used for sanity checking */ + const short eBooleanType = 1; + const short eLongType = 2; + const short eDoubleType = 3; + const short eWStringType = 4; + const short eISupportsType = 5; + const short eStringType = 6; + + /* + * getValueType + * + * Get the type of a specified parameter + */ + short getValueType(in string name); + + /* + * get_Value + * + * Get the value of a specified parameter. Will return + * an error if the parameter does not exist, or if the value + * is of the wrong type (no coercion is performed for you). + * + * nsISupports values can contain any XPCOM interface, + * as documented for the command. It is permissible + * for it to contain nsICommandParams, but not *this* + * one (i.e. self-containing is not allowed). + */ + boolean getBooleanValue(in string name); + long getLongValue(in string name); + double getDoubleValue(in string name); + AString getStringValue(in string name); + string getCStringValue(in string name); + nsISupports getISupportsValue(in string name); + + /* + * set_Value + * + * Set the value of a specified parameter (thus creating + * an entry for it). + * + * nsISupports values can contain any XPCOM interface, + * as documented for the command. It is permissible + * for it to contain nsICommandParams, but not *this* + * one (i.e. self-containing is not allowed). + */ + void setBooleanValue(in string name, in boolean value); + void setLongValue(in string name, in long value); + void setDoubleValue(in string name, in double value); + void setStringValue(in string name, in AString value); + void setCStringValue(in string name, in string value); + void setISupportsValue(in string name, in nsISupports value); + + /* + * removeValue + * + * Remove the specified parameter from the list. + */ + void removeValue(in string name); +}; + +// {f7fa4581-238e-11d5-a73c-ab64fb68f2bc} +%{C++ +#define NS_COMMAND_PARAMS_CID { 0xf7fa4581, 0x238e, 0x11d5, { 0xa7, 0x3c, 0xab, 0x64, 0xfb, 0x68, 0xf2, 0xbc } } +#define NS_COMMAND_PARAMS_CONTRACTID "@mozilla.org/embedcomp/command-params;1" +%} + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsIControllerCommand.idl firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsIControllerCommand.idl --- firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsIControllerCommand.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsIControllerCommand.idl 2017-01-16 01:42:34.000000000 +0000 @@ -0,0 +1,51 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/. */ + +#include "nsISupports.idl" +#include "nsICommandParams.idl" + +/** + * nsIControllerCommand + * + * A generic command interface. You can register an nsIControllerCommand + * with the nsIControllerCommandTable. + */ + +[scriptable, uuid(0eae9a46-1dd2-11b2-aca0-9176f05fe9db)] +interface nsIControllerCommand : nsISupports +{ + + /** + * Returns true if the command is currently enabled. An nsIControllerCommand + * can implement more than one commands; say, a group of related commands + * (e.g. delete left/delete right). Because of this, the command name is + * passed to each method. + * + * @param aCommandName the name of the command for which we want the enabled + * state. + * @param aCommandContext a cookie held by the nsIControllerCommandTable, + * allowing the command to get some context information. + * The contents of this cookie are implementation-defined. + */ + boolean isCommandEnabled(in string aCommandName, in nsISupports aCommandContext); + + void getCommandStateParams(in string aCommandName, in nsICommandParams aParams, in nsISupports aCommandContext); + + /** + * Execute the name command. + * + * @param aCommandName the name of the command to execute. + * + * @param aCommandContext a cookie held by the nsIControllerCommandTable, + * allowing the command to get some context information. + * The contents of this cookie are implementation-defined. + */ + void doCommand(in string aCommandName, in nsISupports aCommandContext); + + void doCommandParams(in string aCommandName, in nsICommandParams aParams, in nsISupports aCommandContext); + +}; + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsIControllerCommandTable.idl firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsIControllerCommandTable.idl --- firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsIControllerCommandTable.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsIControllerCommandTable.idl 2017-01-16 01:42:34.000000000 +0000 @@ -0,0 +1,100 @@ +/* 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" +#include "nsIControllerCommand.idl" +#include "nsICommandParams.idl" + +/** + * nsIControllerCommandTable + * + * An interface via which a controller can maintain a series of commands, + * and efficiently dispatch commands to their respective handlers. + * + * Controllers that use an nsIControllerCommandTable should support + * nsIInterfaceRequestor, and be able to return an interface to their + * controller command table via getInterface(). + * + */ + +[scriptable, uuid(c847f90e-b8f3-49db-a4df-8867831f2800)] +interface nsIControllerCommandTable : nsISupports +{ + /** + * Make this command table immutable, so that commands cannot + * be registered or unregistered. Some command tables are made + * mutable after command registration so that they can be + * used as singletons. + */ + void makeImmutable(); + + /** + * Register and unregister commands with the command table. + * + * @param aCommandName the name of the command under which to register or + * unregister the given command handler. + * + * @param aCommand the handler for this command. + */ + void registerCommand(in string aCommandName, in nsIControllerCommand aCommand); + void unregisterCommand(in string aCommandName, in nsIControllerCommand aCommand); + + /** + * Find the command handler which has been registered to handle the named command. + * + * @param aCommandName the name of the command to find the handler for. + */ + nsIControllerCommand findCommandHandler(in string aCommandName); + + /** + * Get whether the named command is enabled. + * + * @param aCommandName the name of the command to test + * @param aCommandRefCon the command context data + */ + boolean isCommandEnabled(in string aCommandName, in nsISupports aCommandRefCon); + + /** + * Tell the command to update its state (if it is a state updating command) + * + * @param aCommandName the name of the command to update + * @param aCommandRefCon the command context data + */ + void updateCommandState(in string aCommandName, in nsISupports aCommandRefCon); + + /** + * Get whether the named command is supported. + * + * @param aCommandName the name of the command to test + * @param aCommandRefCon the command context data + */ + boolean supportsCommand(in string aCommandName, in nsISupports aCommandRefCon); + + /** + * Execute the named command. + * + * @param aCommandName the name of the command to execute + * @param aCommandRefCon the command context data + */ + void doCommand(in string aCommandName, in nsISupports aCommandRefCon); + + void doCommandParams(in string aCommandName, in nsICommandParams aParam, in nsISupports aCommandRefCon); + + void getCommandState(in string aCommandName, in nsICommandParams aParam, in nsISupports aCommandRefCon); + + void getSupportedCommands(out unsigned long count, + [array, size_is(count), retval] out string commands); +}; + + + +%{C++ +// {670ee5da-6ad5-11d7-9950-000393636592} +#define NS_CONTROLLERCOMMANDTABLE_CID \ + {0x670ee5da, 0x6ad5, 0x11d7, \ + { 0x99, 0x50, 0x00, 0x03, 0x93, 0x63, 0x65, 0x92 }} + +#define NS_CONTROLLERCOMMANDTABLE_CONTRACTID \ + "@mozilla.org/embedcomp/controller-command-table;1" +%} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsIControllerContext.idl firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsIControllerContext.idl --- firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsIControllerContext.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsIControllerContext.idl 2017-01-16 01:42:34.000000000 +0000 @@ -0,0 +1,35 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/. */ + +#include "nsISupports.idl" +#include "nsIControllerCommandTable.idl" + +[scriptable, uuid(47B82B60-A36F-4167-8072-6F421151ED50)] +interface nsIControllerContext : nsISupports +{ + + /** + * Init the controller, optionally passing a controller + * command table. + * + * @param aCommandTable a command table, used internally + * by this controller. May be null, in + * which case the controller will create + * a new, empty table. + */ + void init(in nsIControllerCommandTable aCommandTable); + + /** + * Set a context on this controller, which is passed + * to commands to give them some context when they execute. + * + * @param aCommandContext the context passed to commands. + * Note that this is *not* addreffed by the + * controller, and so needs to outlive it, + * or be nulled out. + */ + void setCommandContext(in nsISupports aCommandContext); + +}; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsPICommandUpdater.idl firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsPICommandUpdater.idl --- firefox-trunk-53.0~a1~hg20170113r329171/dom/commandhandler/nsPICommandUpdater.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/commandhandler/nsPICommandUpdater.idl 2017-01-16 01:42:34.000000000 +0000 @@ -0,0 +1,39 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/. */ + +#include "nsISupports.idl" + +interface mozIDOMWindowProxy; + +/* + The nsPICommandUpdater interface is used by modules that implement + commands, to tell the command manager that commands need updating. + This is a private interface; embedders should not use it. + + Command-implementing modules should get one of these by a QI + from an nsICommandManager. +*/ + +[scriptable, uuid(35e474ae-8016-4c34-9644-edc11f8b0ce1)] +interface nsPICommandUpdater : nsISupports +{ + + /* + * Init the command updater, passing an nsIDOMWindow which + * is the window that the command updater lives on. + * + */ + void init(in mozIDOMWindowProxy aWindow); + + /* + * Notify the command manager that the status of a command + * changed. It may have changed from enabled to disabled, + * or vice versa, or become toggled etc. + */ + void commandStatusChanged(in string aCommandName); + +}; + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/events/DataTransferItem.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/events/DataTransferItem.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/events/DataTransferItem.cpp 2017-01-13 01:40:16.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/events/DataTransferItem.cpp 2017-01-16 01:43:19.000000000 +0000 @@ -477,9 +477,13 @@ // source of the drag is in a child frame of the caller. In that case, // we only allow access to data of the same principal. During other events, // only allow access to the data with the same principal. + // + // We don't want to fail with an exception in this siutation, rather we want + // to just pretend as though the stored data is "nullptr". This is consistent + // with Chrome's behavior and is less surprising for web applications which + // don't expect execptions to be raised when performing certain operations. if (Principal() && checkItemPrincipal && !aPrincipal->Subsumes(Principal())) { - aRv.Throw(NS_ERROR_DOM_SECURITY_ERR); return nullptr; } @@ -494,13 +498,11 @@ if (pt) { nsIScriptContext* c = pt->GetContextForEventHandlers(&rv); if (NS_WARN_IF(NS_FAILED(rv) || !c)) { - aRv.Throw(NS_ERROR_DOM_SECURITY_ERR); return nullptr; } nsIGlobalObject* go = c->GetGlobalObject(); if (NS_WARN_IF(!go)) { - aRv.Throw(NS_ERROR_DOM_SECURITY_ERR); return nullptr; } @@ -509,7 +511,6 @@ nsIPrincipal* dataPrincipal = sp->GetPrincipal(); if (NS_WARN_IF(!dataPrincipal || !aPrincipal->Equals(dataPrincipal))) { - aRv.Throw(NS_ERROR_DOM_SECURITY_ERR); return nullptr; } } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/fetch/FetchDriver.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/fetch/FetchDriver.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/fetch/FetchDriver.cpp 2017-01-13 01:41:03.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/fetch/FetchDriver.cpp 2017-01-16 01:44:19.000000000 +0000 @@ -314,12 +314,22 @@ nsAutoCString contentType; ErrorResult result; mRequest->Headers()->GetFirst(NS_LITERAL_CSTRING("content-type"), contentType, result); - // This is an error because the Request constructor explicitly extracts and - // sets a content-type per spec. + // We don't actually expect "result" to have failed here: that only happens + // for invalid header names. But if for some reason it did, just propagate + // it out. if (result.Failed()) { return result.StealNSResult(); } + // Now contentType is the header that was set in mRequest->Headers(), or a + // void string if no header was set. +#ifdef DEBUG + bool hasContentTypeHeader = + mRequest->Headers()->Has(NS_LITERAL_CSTRING("content-type"), result); + MOZ_ASSERT(!result.Failed()); + MOZ_ASSERT_IF(!hasContentTypeHeader, contentType.IsVoid()); +#endif // DEBUG + nsCOMPtr bodyStream; mRequest->GetBody(getter_AddRefs(bodyStream)); if (bodyStream) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/html/crashtests/crashtests.list firefox-trunk-53.0~a1~hg20170115r329516/dom/html/crashtests/crashtests.list --- firefox-trunk-53.0~a1~hg20170113r329171/dom/html/crashtests/crashtests.list 2017-01-13 01:42:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/html/crashtests/crashtests.list 2017-01-16 01:45:19.000000000 +0000 @@ -17,7 +17,7 @@ load 423371-1.html load 448564.html load 451123-1.html -skip-if(stylo) load 453406-1.html # bug 1323654 +load 453406-1.html load 464197-1.html load 465466-1.xhtml load 468562-1.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/html/HTMLCanvasElement.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/html/HTMLCanvasElement.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/html/HTMLCanvasElement.cpp 2017-01-13 01:41:54.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/html/HTMLCanvasElement.cpp 2017-01-16 01:44:22.000000000 +0000 @@ -108,6 +108,8 @@ { MOZ_ASSERT(NS_IsMainThread()); + PROFILER_LABEL("HTMLCanvasElement", "FrameCapture", js::ProfileEntry::Category::OTHER); + if (!mOwningElement) { return; } @@ -126,18 +128,29 @@ return; } - RefPtr snapshot = mOwningElement->GetSurfaceSnapshot(nullptr); - if (!snapshot) { - return; - } - - RefPtr copy = CopySurface(snapshot); - if (!copy) { - return; + RefPtr snapshot; + { + PROFILER_LABEL("HTMLCanvasElement", "GetSnapshot", js::ProfileEntry::Category::OTHER); + snapshot = mOwningElement->GetSurfaceSnapshot(nullptr); + if (!snapshot) { + return; + } + } + + RefPtr copy; + { + PROFILER_LABEL("HTMLCanvasElement", "CopySnapshot", js::ProfileEntry::Category::OTHER); + copy = CopySurface(snapshot); + if (!copy) { + return; + } + } + + { + PROFILER_LABEL("HTMLCanvasElement", "SetFrame", js::ProfileEntry::Category::OTHER); + mOwningElement->SetFrameCapture(copy.forget()); + mOwningElement->MarkContextCleanForFrameCapture(); } - - mOwningElement->SetFrameCapture(copy.forget()); - mOwningElement->MarkContextCleanForFrameCapture(); } void DetachFromRefreshDriver() diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/html/HTMLMediaElement.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/html/HTMLMediaElement.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/html/HTMLMediaElement.cpp 2017-01-13 01:42:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/html/HTMLMediaElement.cpp 2017-01-16 01:44:59.000000000 +0000 @@ -4473,8 +4473,11 @@ HTMLMediaElement::GetCanPlay(const nsAString& aType, DecoderDoctorDiagnostics* aDiagnostics) { - MediaContentType contentType{aType}; - return DecoderTraits::CanHandleContentType(contentType, aDiagnostics); + Maybe contentType = MakeMediaContentType(aType); + if (!contentType) { + return CANPLAY_NO; + } + return DecoderTraits::CanHandleContentType(*contentType, aDiagnostics); } NS_IMETHODIMP diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/html/nsBrowserElement.h firefox-trunk-53.0~a1~hg20170115r329516/dom/html/nsBrowserElement.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/html/nsBrowserElement.h 2017-01-13 01:42:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/html/nsBrowserElement.h 2017-01-16 01:45:19.000000000 +0000 @@ -22,8 +22,8 @@ struct BrowserElementExecuteScriptOptions; class BrowserElementNextPaintEventCallback; class DOMRequest; -enum class BrowserFindCaseSensitivity: uint32_t; -enum class BrowserFindDirection: uint32_t; +enum class BrowserFindCaseSensitivity: uint8_t; +enum class BrowserFindDirection: uint8_t; } // namespace dom class ErrorResult; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/ipc/ContentChild.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/ipc/ContentChild.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/ipc/ContentChild.cpp 2017-01-13 01:45:53.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/ipc/ContentChild.cpp 2017-01-16 01:48:17.000000000 +0000 @@ -2447,7 +2447,10 @@ ContentChild::RecvInitServiceWorkers(const ServiceWorkerConfiguration& aConfig) { RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); + if (!swm) { + // browser shutdown began + return IPC_OK(); + } swm->LoadRegistrations(aConfig.serviceWorkerRegistrations()); return IPC_OK(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/ipc/moz.build firefox-trunk-53.0~a1~hg20170115r329516/dom/ipc/moz.build --- firefox-trunk-53.0~a1~hg20170113r329171/dom/ipc/moz.build 2017-01-13 01:46:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/ipc/moz.build 2017-01-16 01:48:20.000000000 +0000 @@ -126,7 +126,6 @@ '/dom/security', '/dom/storage', '/dom/workers', - '/embedding/components/printingui/ipc', '/extensions/cookie', '/extensions/spellcheck/src', '/gfx/2d', @@ -134,6 +133,7 @@ '/layout/base', '/media/webrtc', '/netwerk/base', + '/toolkit/components/printingui/ipc', '/toolkit/crashreporter', '/toolkit/xre', '/uriloader/exthandler', diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/ipc/TabChild.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/ipc/TabChild.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/ipc/TabChild.cpp 2017-01-13 01:46:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/ipc/TabChild.cpp 2017-01-16 01:48:19.000000000 +0000 @@ -388,13 +388,6 @@ , mNativeWindowHandle(0) #endif { - // In the general case having the TabParent tell us if APZ is enabled or not - // doesn't really work because the TabParent itself may not have a reference - // to the owning widget during initialization. Instead we assume that this - // TabChild corresponds to a widget type that would have APZ enabled, and just - // check the other conditions necessary for enabling APZ. - mAsyncPanZoomEnabled = gfxPlatform::AsyncPanZoomEnabled(); - nsWeakPtr weakPtrThis(do_GetWeakReference(static_cast(this))); // for capture by the lambda mSetAllowedTouchBehaviorCallback = [weakPtrThis](uint64_t aInputBlockId, const nsTArray& aFlags) @@ -431,6 +424,15 @@ } } +bool +TabChild::AsyncPanZoomEnabled() const +{ + // If we have received the CompositorOptions we can answer definitively. If + // not, return a best guess based on gfxPlaform values. + return mCompositorOptions ? mCompositorOptions->UseAPZ() + : gfxPlatform::AsyncPanZoomEnabled(); +} + NS_IMETHODIMP TabChild::Observe(nsISupports *aSubject, const char *aTopic, @@ -2502,6 +2504,10 @@ return; } + CompositorOptions options; + Unused << compositorChild->SendGetCompositorOptions(aLayersId, &options); + mCompositorOptions = Some(options); + ShadowLayerForwarder* lf = mPuppetWidget->GetLayerManager( nullptr, mTextureFactoryIdentifier.mParentBackend) @@ -2550,11 +2556,10 @@ void TabChild::InitAPZState() { - auto cbc = CompositorBridgeChild::Get(); - - if (!cbc->GetAPZEnabled(mLayersId)) { + if (!mCompositorOptions->UseAPZ()) { return; } + auto cbc = CompositorBridgeChild::Get(); // Initialize the ApzcTreeManager. This takes multiple casts because of ugly multiple inheritance. PAPZCTreeManagerChild* baseProtocol = cbc->SendPAPZCTreeManagerConstructor(mLayersId); @@ -2894,6 +2899,12 @@ RefPtr cb = CompositorBridgeChild::Get(); + // Refresh the compositor options since we may now be attached to a different + // compositor than we were previously. + CompositorOptions options; + Unused << cb->SendGetCompositorOptions(mLayersId, &options); + mCompositorOptions = Some(options); + bool success; nsTArray ignored; PLayerTransactionChild* shadowManager = diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/ipc/TabChild.h firefox-trunk-53.0~a1~hg20170115r329516/dom/ipc/TabChild.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/ipc/TabChild.h 2017-01-13 01:46:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/ipc/TabChild.h 2017-01-16 01:48:19.000000000 +0000 @@ -33,6 +33,7 @@ #include "mozilla/EventForwards.h" #include "mozilla/layers/CompositorTypes.h" #include "mozilla/layers/APZCCallbackHelper.h" +#include "mozilla/layers/CompositorOptions.h" #include "nsIWebBrowserChrome3.h" #include "mozilla/dom/ipc/IdType.h" #include "AudioChannelService.h" @@ -617,7 +618,7 @@ return mParentIsActive; } - bool AsyncPanZoomEnabled() const { return mAsyncPanZoomEnabled; } + bool AsyncPanZoomEnabled() const; virtual ScreenIntSize GetInnerSize() override; @@ -776,6 +777,10 @@ LayoutDeviceIntPoint mChromeDisp; TabId mUniqueId; + // Holds the compositor options for the compositor rendering this tab, + // once we find out which compositor that is. + Maybe mCompositorOptions; + friend class ContentChild; float mDPI; int32_t mRounding; @@ -785,7 +790,6 @@ bool mIPCOpen; bool mParentIsActive; - bool mAsyncPanZoomEnabled; CSSSize mUnscaledInnerSize; bool mDidSetRealShowInfo; bool mDidLoadURLInit; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/ipc/TabParent.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/ipc/TabParent.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/ipc/TabParent.cpp 2017-01-13 01:46:07.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/ipc/TabParent.cpp 2017-01-16 01:48:19.000000000 +0000 @@ -359,9 +359,11 @@ RemoveWindowListeners(); +#ifdef ACCESSIBILITY if (a11y::DocAccessibleParent* tabDoc = GetTopLevelDocAccessible()) { tabDoc->Destroy(); } +#endif // If this fails, it's most likely due to a content-process crash, // and auto-cleanup will kick in. Otherwise, the child side will diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/ADTSDecoder.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/ADTSDecoder.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/ADTSDecoder.cpp 2017-01-13 01:46:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/ADTSDecoder.cpp 2017-01-16 01:49:03.000000000 +0000 @@ -6,6 +6,7 @@ #include "ADTSDecoder.h" #include "ADTSDemuxer.h" +#include "MediaContentType.h" #include "MediaDecoderStateMachine.h" #include "MediaFormatReader.h" #include "PDMFactory.h" @@ -38,12 +39,15 @@ } /* static */ bool -ADTSDecoder::CanHandleMediaType(const nsACString& aType, - const nsAString& aCodecs) +ADTSDecoder::IsSupportedType(const MediaContentType& aContentType) { - if (aType.EqualsASCII("audio/aac") || aType.EqualsASCII("audio/aacp") || - aType.EqualsASCII("audio/x-aac")) { - return IsEnabled() && (aCodecs.IsEmpty() || aCodecs.EqualsASCII("aac")); + if (aContentType.Type() == MEDIAMIMETYPE("audio/aac") + || aContentType.Type() == MEDIAMIMETYPE("audio/aacp") + || aContentType.Type() == MEDIAMIMETYPE("audio/x-aac")) { + return + IsEnabled() + && (aContentType.ExtendedType().Codecs().IsEmpty() + || aContentType.ExtendedType().Codecs().AsString().EqualsASCII("aac")); } return false; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/ADTSDecoder.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/ADTSDecoder.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/ADTSDecoder.h 2017-01-13 01:46:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/ADTSDecoder.h 2017-01-16 01:49:03.000000000 +0000 @@ -11,7 +11,10 @@ namespace mozilla { -class ADTSDecoder : public MediaDecoder { +class MediaContentType; + +class ADTSDecoder : public MediaDecoder +{ public: // MediaDecoder interface. explicit ADTSDecoder(MediaDecoderOwner* aOwner) : MediaDecoder(aOwner) {} @@ -21,8 +24,7 @@ // Returns true if the ADTS backend is pref'ed on, and we're running on a // platform that is likely to have decoders for the format. static bool IsEnabled(); - static bool CanHandleMediaType(const nsACString& aType, - const nsAString& aCodecs); + static bool IsSupportedType(const MediaContentType& aContentType); }; } // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/android/AndroidMediaDecoder.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/android/AndroidMediaDecoder.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/android/AndroidMediaDecoder.cpp 2017-01-13 01:47:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/android/AndroidMediaDecoder.cpp 2017-01-16 01:49:40.000000000 +0000 @@ -11,7 +11,7 @@ namespace mozilla { AndroidMediaDecoder::AndroidMediaDecoder(MediaDecoderOwner* aOwner, - const nsACString& aType) + const MediaContentType& aType) : MediaDecoder(aOwner), mType(aType) { } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/android/AndroidMediaDecoder.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/android/AndroidMediaDecoder.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/android/AndroidMediaDecoder.h 2017-01-13 01:47:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/android/AndroidMediaDecoder.h 2017-01-16 01:49:40.000000000 +0000 @@ -8,14 +8,15 @@ #include "MediaDecoder.h" #include "AndroidMediaDecoder.h" +#include "MediaContentType.h" namespace mozilla { class AndroidMediaDecoder : public MediaDecoder { - nsCString mType; + MediaContentType mType; public: - AndroidMediaDecoder(MediaDecoderOwner* aOwner, const nsACString& aType); + AndroidMediaDecoder(MediaDecoderOwner* aOwner, const MediaContentType& aType); MediaDecoder* Clone(MediaDecoderOwner* aOwner) override { return new AndroidMediaDecoder(aOwner, mType); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/android/AndroidMediaPluginHost.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/android/AndroidMediaPluginHost.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/android/AndroidMediaPluginHost.cpp 2017-01-13 01:47:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/android/AndroidMediaPluginHost.cpp 2017-01-16 01:49:40.000000000 +0000 @@ -4,6 +4,7 @@ * 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 "mozilla/Preferences.h" +#include "MediaContentType.h" #include "MediaResource.h" #include "mozilla/dom/HTMLMediaElement.h" #include "mozilla/Services.h" @@ -226,23 +227,33 @@ MOZ_COUNT_DTOR(AndroidMediaPluginHost); } -bool AndroidMediaPluginHost::FindDecoder(const nsACString& aMimeType, const char* const** aCodecs) +bool AndroidMediaPluginHost::FindDecoder(const MediaContentType& aMimeType, + MediaCodecs* aCodecs) { const char *chars; - size_t len = NS_CStringGetData(aMimeType, &chars, nullptr); + size_t len = NS_CStringGetData(aMimeType.Type().AsString(), &chars, nullptr); for (size_t n = 0; n < mPlugins.Length(); ++n) { Manifest *plugin = mPlugins[n]; const char* const *codecs; if (plugin->CanDecode(chars, len, &codecs)) { - if (aCodecs) - *aCodecs = codecs; + if (aCodecs) { + nsString codecsString; + for (const char* const* codec = codecs; *codec; ++codec) { + if (codecsString.IsEmpty()) { + codecsString += ','; + } + codecsString.AppendASCII(*codec); + } + *aCodecs = MediaCodecs(codecsString); + } return true; } } return false; } -MPAPI::Decoder *AndroidMediaPluginHost::CreateDecoder(MediaResource *aResource, const nsACString& aMimeType) +MPAPI::Decoder *AndroidMediaPluginHost::CreateDecoder(MediaResource *aResource, + const MediaContentType& aMimeType) { NS_ENSURE_TRUE(aResource, nullptr); @@ -252,7 +263,7 @@ } const char *chars; - size_t len = NS_CStringGetData(aMimeType, &chars, nullptr); + size_t len = NS_CStringGetData(aMimeType.Type().AsString(), &chars, nullptr); for (size_t n = 0; n < mPlugins.Length(); ++n) { Manifest *plugin = mPlugins[n]; const char* const *codecs; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/android/AndroidMediaPluginHost.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/android/AndroidMediaPluginHost.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/android/AndroidMediaPluginHost.h 2017-01-13 01:47:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/android/AndroidMediaPluginHost.h 2017-01-16 01:49:40.000000000 +0000 @@ -13,6 +13,9 @@ namespace mozilla { +class MediaContentType; +class MediaCodecs; + class AndroidMediaPluginHost { RefPtr mResourceServer; nsTArray mPlugins; @@ -24,8 +27,8 @@ static void Shutdown(); - bool FindDecoder(const nsACString& aMimeType, const char* const** aCodecs); - MPAPI::Decoder *CreateDecoder(mozilla::MediaResource *aResource, const nsACString& aMimeType); + bool FindDecoder(const MediaContentType& aMimeType, MediaCodecs* aCodecs); + MPAPI::Decoder *CreateDecoder(mozilla::MediaResource *aResource, const MediaContentType& aMimeType); void DestroyDecoder(MPAPI::Decoder *aDecoder); }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/android/AndroidMediaReader.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/android/AndroidMediaReader.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/android/AndroidMediaReader.cpp 2017-01-13 01:47:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/android/AndroidMediaReader.cpp 2017-01-16 01:49:40.000000000 +0000 @@ -25,7 +25,7 @@ typedef mozilla::layers::PlanarYCbCrImage PlanarYCbCrImage; AndroidMediaReader::AndroidMediaReader(AbstractMediaDecoder *aDecoder, - const nsACString& aContentType) : + const MediaContentType& aContentType) : MediaDecoderReader(aDecoder), mType(aContentType), mPlugin(nullptr), @@ -330,7 +330,7 @@ mVideoSeekTimeUs = aTarget.GetTime().ToMicroseconds(); RefPtr self = this; - mSeekRequest.Begin(DecodeToFirstVideoData()->Then(OwnerThread(), __func__, [self] (MediaData* v) { + DecodeToFirstVideoData()->Then(OwnerThread(), __func__, [self] (MediaData* v) { self->mSeekRequest.Complete(); self->mAudioSeekTimeUs = v->mTime; self->mSeekPromise.Resolve(media::TimeUnit::FromMicroseconds(self->mAudioSeekTimeUs), __func__); @@ -338,7 +338,7 @@ self->mSeekRequest.Complete(); self->mAudioSeekTimeUs = aTarget.GetTime().ToMicroseconds(); self->mSeekPromise.Resolve(aTarget.GetTime(), __func__); - })); + })->Track(mSeekRequest); } else { mAudioSeekTimeUs = mVideoSeekTimeUs = aTarget.GetTime().ToMicroseconds(); mSeekPromise.Resolve(aTarget.GetTime(), __func__); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/android/AndroidMediaReader.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/android/AndroidMediaReader.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/android/AndroidMediaReader.h 2017-01-13 01:47:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/android/AndroidMediaReader.h 2017-01-16 01:49:40.000000000 +0000 @@ -6,16 +6,15 @@ #if !defined(AndroidMediaReader_h_) #define AndroidMediaReader_h_ -#include "mozilla/Attributes.h" -#include "MediaResource.h" -#include "MediaDecoderReader.h" #include "ImageContainer.h" +#include "MediaContentType.h" +#include "MediaDecoderReader.h" +#include "MediaResource.h" +#include "mozilla/Attributes.h" #include "mozilla/layers/SharedRGBImage.h" #include "MPAPI.h" -class nsACString; - namespace mozilla { class AbstractMediaDecoder; @@ -26,7 +25,7 @@ class AndroidMediaReader : public MediaDecoderReader { - nsCString mType; + MediaContentType mType; MPAPI::Decoder *mPlugin; bool mHasAudio; bool mHasVideo; @@ -39,7 +38,7 @@ MozPromiseRequestHolder mSeekRequest; public: AndroidMediaReader(AbstractMediaDecoder* aDecoder, - const nsACString& aContentType); + const MediaContentType& aContentType); nsresult ResetDecode(TrackSet aTracks = TrackSet(TrackInfo::kAudioTrack, TrackInfo::kVideoTrack)) override; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/DecoderTraits.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/DecoderTraits.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/DecoderTraits.cpp 2017-01-13 01:46:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/DecoderTraits.cpp 2017-01-16 01:49:04.000000000 +0000 @@ -7,7 +7,6 @@ #include "DecoderTraits.h" #include "MediaContentType.h" #include "MediaDecoder.h" -#include "nsCharSeparatedTokenizer.h" #include "nsMimeTypes.h" #include "mozilla/Preferences.h" #include "mozilla/Telemetry.h" @@ -51,155 +50,56 @@ namespace mozilla { -template static bool -CodecListContains(char const *const * aCodecs, const String& aCodec) +IsHttpLiveStreamingType(const MediaContentType& aType) { - for (int32_t i = 0; aCodecs[i]; ++i) { - if (aCodec.EqualsASCII(aCodecs[i])) - return true; - } - return false; -} - -static bool -IsOggSupportedType(const nsACString& aType, - const nsAString& aCodecs = EmptyString()) -{ - return OggDecoder::CanHandleMediaType(aType, aCodecs); -} - -static bool -IsOggTypeAndEnabled(const nsACString& aType) -{ - return IsOggSupportedType(aType); -} - -static bool -IsWebMSupportedType(const nsACString& aType, - const nsAString& aCodecs = EmptyString()) -{ - return WebMDecoder::CanHandleMediaType(aType, aCodecs); -} - -/* static */ bool -DecoderTraits::IsWebMTypeAndEnabled(const nsACString& aType) -{ - return IsWebMSupportedType(aType); -} - -/* static */ bool -DecoderTraits::IsWebMAudioType(const nsACString& aType) -{ - return aType.EqualsASCII("audio/webm"); -} - -static char const *const gHttpLiveStreamingTypes[] = { - // For m3u8. - // https://tools.ietf.org/html/draft-pantos-http-live-streaming-19#section-10 - "application/vnd.apple.mpegurl", - // Some sites serve these as the informal m3u type. - "application/x-mpegurl", - "audio/x-mpegurl", - nullptr -}; - -static bool -IsHttpLiveStreamingType(const nsACString& aType) -{ - return CodecListContains(gHttpLiveStreamingTypes, aType); + return // For m3u8. + // https://tools.ietf.org/html/draft-pantos-http-live-streaming-19#section-10 + aType.Type() == MEDIAMIMETYPE("application/vnd.apple.mpegurl") + // Some sites serve these as the informal m3u type. + || aType.Type() == MEDIAMIMETYPE("application/x-mpegurl") + || aType.Type() == MEDIAMIMETYPE("audio/x-mpegurl"); } #ifdef MOZ_ANDROID_OMX static bool -IsAndroidMediaType(const nsACString& aType) +IsAndroidMediaType(const MediaContentType& aType) { if (!MediaDecoder::IsAndroidMediaPluginEnabled()) { return false; } - static const char* supportedTypes[] = { - "audio/mpeg", "audio/mp4", "video/mp4", "video/x-m4v", nullptr - }; - return CodecListContains(supportedTypes, aType); -} -#endif - -#ifdef MOZ_DIRECTSHOW -static bool -IsDirectShowSupportedType(const nsACString& aType) -{ - return DirectShowDecoder::GetSupportedCodecs(aType, nullptr); -} -#endif - -#ifdef MOZ_FMP4 -static bool -IsMP4SupportedType(const MediaContentType& aParsedType, - DecoderDoctorDiagnostics* aDiagnostics) -{ - return MP4Decoder::CanHandleMediaType(aParsedType, aDiagnostics); -} -static bool -IsMP4SupportedType(const nsACString& aType, - DecoderDoctorDiagnostics* aDiagnostics) -{ - MediaContentType contentType{aType}; - return IsMP4SupportedType(contentType, aDiagnostics); + return aType.Type() == MEDIAMIMETYPE("audio/mpeg") + || aType.Type() == MEDIAMIMETYPE("audio/mp4") + || aType.Type() == MEDIAMIMETYPE("video/mp4") + || aType.Type() == MEDIAMIMETYPE("video/x-m4v"); } #endif /* static */ bool -DecoderTraits::IsMP4TypeAndEnabled(const nsACString& aType, - DecoderDoctorDiagnostics* aDiagnostics) +DecoderTraits::IsMP4SupportedType(const MediaContentType& aType, + DecoderDoctorDiagnostics* aDiagnostics) { #ifdef MOZ_FMP4 - return IsMP4SupportedType(aType, aDiagnostics); + return MP4Decoder::IsSupportedType(aType, aDiagnostics); #else return false; #endif } -static bool -IsMP3SupportedType(const nsACString& aType, - const nsAString& aCodecs = EmptyString()) -{ - return MP3Decoder::CanHandleMediaType(aType, aCodecs); -} - -static bool -IsAACSupportedType(const nsACString& aType, - const nsAString& aCodecs = EmptyString()) -{ - return ADTSDecoder::CanHandleMediaType(aType, aCodecs); -} - -static bool -IsWaveSupportedType(const nsACString& aType, - const nsAString& aCodecs = EmptyString()) -{ - return WaveDecoder::CanHandleMediaType(aType, aCodecs); -} - -static bool -IsFlacSupportedType(const nsACString& aType, - const nsAString& aCodecs = EmptyString()) -{ - return FlacDecoder::CanHandleMediaType(aType, aCodecs); -} - static CanPlayStatus CanHandleCodecsType(const MediaContentType& aType, DecoderDoctorDiagnostics* aDiagnostics) { - MOZ_ASSERT(aType.IsValid()); // We should have been given a codecs string, though it may be empty. - MOZ_ASSERT(aType.HaveCodecs()); + MOZ_ASSERT(aType.ExtendedType().HaveCodecs()); - char const* const* codecList = nullptr; - if (IsOggTypeAndEnabled(aType.GetMIMEType())) { - if (IsOggSupportedType(aType.GetMIMEType(), aType.GetCodecs())) { + // Content type with the the MIME type, no codecs. + const MediaContentType mimeType(aType.Type()); + + if (OggDecoder::IsSupportedType(mimeType)) { + if (OggDecoder::IsSupportedType(aType)) { return CANPLAY_YES; } else { // We can only reach this position if a particular codec was requested, @@ -207,8 +107,8 @@ return CANPLAY_NO; } } - if (IsWaveSupportedType(aType.GetMIMEType())) { - if (IsWaveSupportedType(aType.GetMIMEType(), aType.GetCodecs())) { + if (WaveDecoder::IsSupportedType(MediaContentType(mimeType))) { + if (WaveDecoder::IsSupportedType(aType)) { return CANPLAY_YES; } else { // We can only reach this position if a particular codec was requested, @@ -217,8 +117,8 @@ } } #if !defined(MOZ_OMX_WEBM_DECODER) - if (DecoderTraits::IsWebMTypeAndEnabled(aType.GetMIMEType())) { - if (IsWebMSupportedType(aType.GetMIMEType(), aType.GetCodecs())) { + if (WebMDecoder::IsSupportedType(mimeType)) { + if (WebMDecoder::IsSupportedType(aType)) { return CANPLAY_YES; } else { // We can only reach this position if a particular codec was requested, @@ -228,8 +128,9 @@ } #endif #ifdef MOZ_FMP4 - if (DecoderTraits::IsMP4TypeAndEnabled(aType.GetMIMEType(), aDiagnostics)) { - if (IsMP4SupportedType(aType, aDiagnostics)) { + if (MP4Decoder::IsSupportedType(mimeType, + /* DecoderDoctorDiagnostics* */ nullptr)) { + if (MP4Decoder::IsSupportedType(aType, aDiagnostics)) { return CANPLAY_YES; } else { // We can only reach this position if a particular codec was requested, @@ -238,42 +139,31 @@ } } #endif - if (IsMP3SupportedType(aType.GetMIMEType(), aType.GetCodecs())) { + if (MP3Decoder::IsSupportedType(aType)) { return CANPLAY_YES; } - if (IsAACSupportedType(aType.GetMIMEType(), aType.GetCodecs())) { + if (ADTSDecoder::IsSupportedType(aType)) { return CANPLAY_YES; } - if (IsFlacSupportedType(aType.GetMIMEType(), aType.GetCodecs())) { + if (FlacDecoder::IsSupportedType(aType)) { return CANPLAY_YES; } + + MediaCodecs supportedCodecs; #ifdef MOZ_DIRECTSHOW - DirectShowDecoder::GetSupportedCodecs(aType.GetMIMEType(), &codecList); + DirectShowDecoder::GetSupportedCodecs(aType, &supportedCodecs); #endif #ifdef MOZ_ANDROID_OMX if (MediaDecoder::IsAndroidMediaPluginEnabled()) { - EnsureAndroidMediaPluginHost()->FindDecoder(aType.GetMIMEType(), &codecList); + EnsureAndroidMediaPluginHost()->FindDecoder(aType, &supportedCodecs); } #endif - if (!codecList) { + if (supportedCodecs.IsEmpty()) { return CANPLAY_MAYBE; } - // See http://www.rfc-editor.org/rfc/rfc4281.txt for the description - // of the 'codecs' parameter - nsCharSeparatedTokenizer tokenizer(aType.GetCodecs(), ','); - bool expectMoreTokens = false; - while (tokenizer.hasMoreTokens()) { - const nsSubstring& token = tokenizer.nextToken(); - - if (!CodecListContains(codecList, token)) { - // Totally unsupported codec - return CANPLAY_NO; - } - expectMoreTokens = tokenizer.separatorAfterCurrentToken(); - } - if (expectMoreTokens) { - // Last codec name was empty + if (!supportedCodecs.ContainsAll(aType.ExtendedType().Codecs())) { + // At least one requested codec is not supported. return CANPLAY_NO; } @@ -287,47 +177,53 @@ { MOZ_ASSERT(NS_IsMainThread()); - if (IsHttpLiveStreamingType(aType.GetMIMEType())) { + if (IsHttpLiveStreamingType(aType)) { Telemetry::Accumulate(Telemetry::MEDIA_HLS_CANPLAY_REQUESTED, true); } - if (aType.HaveCodecs()) { + if (aType.ExtendedType().HaveCodecs()) { CanPlayStatus result = CanHandleCodecsType(aType, aDiagnostics); if (result == CANPLAY_NO || result == CANPLAY_YES) { return result; } } - if (IsOggTypeAndEnabled(aType.GetMIMEType())) { + + // Content type with just the MIME type/subtype, no codecs. + const MediaContentType mimeType(aType.Type()); + + if (OggDecoder::IsSupportedType(mimeType)) { return CANPLAY_MAYBE; } - if (IsWaveSupportedType(aType.GetMIMEType())) { + if (WaveDecoder::IsSupportedType(mimeType)) { return CANPLAY_MAYBE; } - if (DecoderTraits::IsMP4TypeAndEnabled(aType.GetMIMEType(), aDiagnostics)) { +#ifdef MOZ_FMP4 + if (MP4Decoder::IsSupportedType(mimeType, aDiagnostics)) { return CANPLAY_MAYBE; } +#endif #if !defined(MOZ_OMX_WEBM_DECODER) - if (DecoderTraits::IsWebMTypeAndEnabled(aType.GetMIMEType())) { + if (WebMDecoder::IsSupportedType(mimeType)) { return CANPLAY_MAYBE; } #endif - if (IsMP3SupportedType(aType.GetMIMEType())) { + if (MP3Decoder::IsSupportedType(mimeType)) { return CANPLAY_MAYBE; } - if (IsAACSupportedType(aType.GetMIMEType())) { + if (ADTSDecoder::IsSupportedType(mimeType)) { return CANPLAY_MAYBE; } - if (IsFlacSupportedType(aType.GetMIMEType())) { + if (FlacDecoder::IsSupportedType(mimeType)) { return CANPLAY_MAYBE; } #ifdef MOZ_DIRECTSHOW - if (DirectShowDecoder::GetSupportedCodecs(aType.GetMIMEType(), nullptr)) { + if (DirectShowDecoder::GetSupportedCodecs(mimeType, nullptr)) { return CANPLAY_MAYBE; } #endif #ifdef MOZ_ANDROID_OMX if (MediaDecoder::IsAndroidMediaPluginEnabled() && - EnsureAndroidMediaPluginHost()->FindDecoder(aType.GetMIMEType(), nullptr)) { + EnsureAndroidMediaPluginHost()->FindDecoder(mimeType, nullptr)) { return CANPLAY_MAYBE; } #endif @@ -339,10 +235,6 @@ DecoderTraits::CanHandleContentType(const MediaContentType& aContentType, DecoderDoctorDiagnostics* aDiagnostics) { - if (!aContentType.IsValid()) { - return CANPLAY_NO; - } - return CanHandleMediaType(aContentType, aDiagnostics); } @@ -350,7 +242,12 @@ bool DecoderTraits::ShouldHandleMediaType(const char* aMIMEType, DecoderDoctorDiagnostics* aDiagnostics) { - if (IsWaveSupportedType(nsDependentCString(aMIMEType))) { + Maybe contentType = MakeMediaContentType(aMIMEType); + if (!contentType) { + return false; + } + + if (WaveDecoder::IsSupportedType(*contentType)) { // We should not return true for Wave types, since there are some // Wave codecs actually in use in the wild that we don't support, and // we should allow those to be handled by plugins or helper apps. @@ -362,23 +259,21 @@ // If an external plugin which can handle quicktime video is available // (and not disabled), prefer it over native playback as there several // codecs found in the wild that we do not handle. - if (nsDependentCString(aMIMEType).EqualsASCII("video/quicktime")) { + if (contentType->Type() == MEDIAMIMETYPE("video/quicktime")) { RefPtr pluginHost = nsPluginHost::GetInst(); if (pluginHost && - pluginHost->HavePluginForType(nsDependentCString(aMIMEType))) { + pluginHost->HavePluginForType(contentType->Type().AsString())) { return false; } } - MediaContentType parsed{nsDependentCString(aMIMEType)}; - return CanHandleMediaType(parsed, aDiagnostics) - != CANPLAY_NO; + return CanHandleMediaType(*contentType, aDiagnostics) != CANPLAY_NO; } // Instantiates but does not initialize decoder. static already_AddRefed -InstantiateDecoder(const nsACString& aType, +InstantiateDecoder(const MediaContentType& aType, MediaDecoderOwner* aOwner, DecoderDoctorDiagnostics* aDiagnostics) { @@ -386,28 +281,28 @@ RefPtr decoder; #ifdef MOZ_FMP4 - if (IsMP4SupportedType(aType, aDiagnostics)) { + if (MP4Decoder::IsSupportedType(aType, aDiagnostics)) { decoder = new MP4Decoder(aOwner); return decoder.forget(); } #endif - if (IsMP3SupportedType(aType)) { + if (MP3Decoder::IsSupportedType(aType)) { decoder = new MP3Decoder(aOwner); return decoder.forget(); } - if (IsAACSupportedType(aType)) { + if (ADTSDecoder::IsSupportedType(aType)) { decoder = new ADTSDecoder(aOwner); return decoder.forget(); } - if (IsOggSupportedType(aType)) { + if (OggDecoder::IsSupportedType(aType)) { decoder = new OggDecoder(aOwner); return decoder.forget(); } - if (IsWaveSupportedType(aType)) { + if (WaveDecoder::IsSupportedType(aType)) { decoder = new WaveDecoder(aOwner); return decoder.forget(); } - if (IsFlacSupportedType(aType)) { + if (FlacDecoder::IsSupportedType(aType)) { decoder = new FlacDecoder(aOwner); return decoder.forget(); } @@ -419,7 +314,7 @@ } #endif - if (IsWebMSupportedType(aType)) { + if (WebMDecoder::IsSupportedType(aType)) { decoder = new WebMDecoder(aOwner); return decoder.forget(); } @@ -427,7 +322,7 @@ #ifdef MOZ_DIRECTSHOW // Note: DirectShow should come before WMF, so that we prefer DirectShow's // MP3 support over WMF's. - if (IsDirectShowSupportedType(aType)) { + if (DirectShowDecoder::GetSupportedCodecs(aType, nullptr)) { decoder = new DirectShowDecoder(aOwner); return decoder.forget(); } @@ -448,11 +343,17 @@ DecoderDoctorDiagnostics* aDiagnostics) { MOZ_ASSERT(NS_IsMainThread()); - return InstantiateDecoder(aType, aOwner, aDiagnostics); + Maybe type = MakeMediaContentType(aType); + if (!type) { + return nullptr; + } + return InstantiateDecoder(*type, aOwner, aDiagnostics); } /* static */ -MediaDecoderReader* DecoderTraits::CreateReader(const nsACString& aType, AbstractMediaDecoder* aDecoder) +MediaDecoderReader* +DecoderTraits::CreateReader(const MediaContentType& aType, + AbstractMediaDecoder* aDecoder) { MOZ_ASSERT(NS_IsMainThread()); MediaDecoderReader* decoderReader = nullptr; @@ -460,24 +361,26 @@ if (!aDecoder) { return decoderReader; } + #ifdef MOZ_FMP4 - if (IsMP4SupportedType(aType, /* DecoderDoctorDiagnostics* */ nullptr)) { + if (MP4Decoder::IsSupportedType(aType, + /* DecoderDoctorDiagnostics* */ nullptr)) { decoderReader = new MediaFormatReader(aDecoder, new MP4Demuxer(aDecoder->GetResource())); } else #endif - if (IsMP3SupportedType(aType)) { + if (MP3Decoder::IsSupportedType(aType)) { decoderReader = new MediaFormatReader(aDecoder, new mp3::MP3Demuxer(aDecoder->GetResource())); } else - if (IsAACSupportedType(aType)) { + if (ADTSDecoder::IsSupportedType(aType)) { decoderReader = new MediaFormatReader(aDecoder, new ADTSDemuxer(aDecoder->GetResource())); } else - if (IsWaveSupportedType(aType)) { + if (WaveDecoder::IsSupportedType(aType)) { decoderReader = new MediaFormatReader(aDecoder, new WAVDemuxer(aDecoder->GetResource())); } else - if (IsFlacSupportedType(aType)) { + if (FlacDecoder::IsSupportedType(aType)) { decoderReader = new MediaFormatReader(aDecoder, new FlacDemuxer(aDecoder->GetResource())); } else - if (IsOggSupportedType(aType)) { + if (OggDecoder::IsSupportedType(aType)) { decoderReader = new MediaFormatReader(aDecoder, new OggDemuxer(aDecoder->GetResource())); } else #ifdef MOZ_ANDROID_OMX @@ -486,12 +389,12 @@ decoderReader = new AndroidMediaReader(aDecoder, aType); } else #endif - if (IsWebMSupportedType(aType)) { + if (WebMDecoder::IsSupportedType(aType)) { decoderReader = new MediaFormatReader(aDecoder, new WebMDemuxer(aDecoder->GetResource())); } else #ifdef MOZ_DIRECTSHOW - if (IsDirectShowSupportedType(aType)) { + if (DirectShowDecoder::GetSupportedCodecs(aType, nullptr)) { decoderReader = new DirectShowReader(aDecoder); } else #endif @@ -511,20 +414,25 @@ return false; } + Maybe type = MakeMediaContentType(aType); + if (!type) { + return false; + } + return - IsOggSupportedType(aType) || - IsWebMSupportedType(aType) || + OggDecoder::IsSupportedType(*type) || + WebMDecoder::IsSupportedType(*type) || #ifdef MOZ_ANDROID_OMX - (MediaDecoder::IsAndroidMediaPluginEnabled() && IsAndroidMediaType(aType)) || + (MediaDecoder::IsAndroidMediaPluginEnabled() && IsAndroidMediaType(*type)) || #endif #ifdef MOZ_FMP4 - IsMP4SupportedType(aType, /* DecoderDoctorDiagnostics* */ nullptr) || + MP4Decoder::IsSupportedType(*type, /* DecoderDoctorDiagnostics* */ nullptr) || #endif - IsMP3SupportedType(aType) || - IsAACSupportedType(aType) || - IsFlacSupportedType(aType) || + MP3Decoder::IsSupportedType(*type) || + ADTSDecoder::IsSupportedType(*type) || + FlacDecoder::IsSupportedType(*type) || #ifdef MOZ_DIRECTSHOW - IsDirectShowSupportedType(aType) || + DirectShowDecoder::GetSupportedCodecs(*type, nullptr) || #endif false; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/DecoderTraits.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/DecoderTraits.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/DecoderTraits.h 2017-01-13 01:46:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/DecoderTraits.h 2017-01-16 01:49:04.000000000 +0000 @@ -48,7 +48,7 @@ // Create a reader for thew given MIME type aType. Returns null // if we were unable to create the reader. - static MediaDecoderReader* CreateReader(const nsACString& aType, + static MediaDecoderReader* CreateReader(const MediaContentType& aType, AbstractMediaDecoder* aDecoder); // Returns true if MIME type aType is supported in video documents, @@ -56,10 +56,10 @@ // vice versa. static bool IsSupportedInVideoDocument(const nsACString& aType); - static bool IsWebMTypeAndEnabled(const nsACString& aType); - static bool IsWebMAudioType(const nsACString& aType); - static bool IsMP4TypeAndEnabled(const nsACString& aType, - DecoderDoctorDiagnostics* aDiagnostics); + // Convenience function that returns false if MOZ_FMP4 is not defined, + // otherwise defers to MP4Decoder::IsSupportedType(). + static bool IsMP4SupportedType(const MediaContentType& aType, + DecoderDoctorDiagnostics* aDiagnostics); }; } // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/directshow/DirectShowDecoder.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/directshow/DirectShowDecoder.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/directshow/DirectShowDecoder.cpp 2017-01-13 01:47:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/directshow/DirectShowDecoder.cpp 2017-01-16 01:49:41.000000000 +0000 @@ -7,6 +7,7 @@ #include "DirectShowDecoder.h" #include "DirectShowReader.h" #include "DirectShowUtils.h" +#include "MediaContentType.h" #include "MediaDecoderStateMachine.h" #include "mozilla/Preferences.h" #include "mozilla/WindowsVersion.h" @@ -20,21 +21,17 @@ /* static */ bool -DirectShowDecoder::GetSupportedCodecs(const nsACString& aType, - char const *const ** aCodecList) +DirectShowDecoder::GetSupportedCodecs(const MediaContentType& aType, + MediaCodecs* aOutCodecs) { if (!IsEnabled()) { return false; } - static char const *const mp3AudioCodecs[] = { - "mp3", - nullptr - }; - if (aType.EqualsASCII("audio/mpeg") || - aType.EqualsASCII("audio/mp3")) { - if (aCodecList) { - *aCodecList = mp3AudioCodecs; + if (aType.Type() == MEDIAMIMETYPE("audio/mpeg") + || aType.Type() == MEDIAMIMETYPE("audio/mp3")) { + if (aOutCodecs) { + *aOutCodecs = MediaCodecs("mp3"); } return true; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/directshow/DirectShowDecoder.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/directshow/DirectShowDecoder.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/directshow/DirectShowDecoder.h 2017-01-13 01:47:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/directshow/DirectShowDecoder.h 2017-01-16 01:49:41.000000000 +0000 @@ -11,6 +11,9 @@ namespace mozilla { +class MediaCodecs; +class MediaContentType; + // Decoder that uses DirectShow to playback MP3 files only. class DirectShowDecoder : public MediaDecoder { @@ -33,8 +36,8 @@ // it is filled with a (static const) null-terminated list of strings // denoting the codecs we'll playback. Note that playback is strictly // limited to MP3 only. - static bool GetSupportedCodecs(const nsACString& aType, - char const *const ** aCodecList); + static bool GetSupportedCodecs(const MediaContentType& aType, + MediaCodecs* aOutCodecs); // Returns true if the DirectShow backend is preffed on. static bool IsEnabled(); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/eme/MediaKeySystemAccess.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/eme/MediaKeySystemAccess.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/eme/MediaKeySystemAccess.cpp 2017-01-13 01:47:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/eme/MediaKeySystemAccess.cpp 2017-01-16 01:49:41.000000000 +0000 @@ -7,8 +7,8 @@ #include "mozilla/dom/MediaKeySystemAccess.h" #include "mozilla/dom/MediaKeySystemAccessBinding.h" #include "mozilla/Preferences.h" +#include "MediaContentType.h" #include "MediaPrefs.h" -#include "nsContentTypeParser.h" #ifdef MOZ_FMP4 #include "MP4Decoder.h" #endif @@ -497,12 +497,12 @@ } CodecType -GetMajorType(const nsAString& aContentType) +GetMajorType(const MediaMIMEType& aMIMEType) { - if (CaseInsensitiveFindInReadable(NS_LITERAL_STRING("audio/"), aContentType)) { + if (aMIMEType.HasAudioMajorType()) { return Audio; } - if (CaseInsensitiveFindInReadable(NS_LITERAL_STRING("video/"), aContentType)) { + if (aMIMEType.HasVideoMajorType()) { return Video; } return Invalid; @@ -586,43 +586,44 @@ // For each requested media capability in requested media capabilities: for (const MediaKeySystemMediaCapability& capabilities : aRequestedCapabilities) { // Let content type be requested media capability's contentType member. - const nsString& contentType = capabilities.mContentType; + const nsString& contentTypeString = capabilities.mContentType; // Let robustness be requested media capability's robustness member. const nsString& robustness = capabilities.mRobustness; // If content type is the empty string, return null. - if (contentType.IsEmpty()) { + if (contentTypeString.IsEmpty()) { EME_LOG("MediaKeySystemConfiguration (label='%s') " "MediaKeySystemMediaCapability('%s','%s') rejected; " "audio or video capability has empty contentType.", NS_ConvertUTF16toUTF8(aPartialConfig.mLabel).get(), - NS_ConvertUTF16toUTF8(contentType).get(), + NS_ConvertUTF16toUTF8(contentTypeString).get(), NS_ConvertUTF16toUTF8(robustness).get()); return Sequence(); } // If content type is an invalid or unrecognized MIME type, continue // to the next iteration. - nsAutoString container; - nsTArray codecStrings; - if (!ParseMIMETypeString(contentType, container, codecStrings)) { + Maybe maybeContentType = + MakeMediaContentType(contentTypeString); + if (!maybeContentType) { EME_LOG("MediaKeySystemConfiguration (label='%s') " "MediaKeySystemMediaCapability('%s','%s') unsupported; " "failed to parse contentType as MIME type.", NS_ConvertUTF16toUTF8(aPartialConfig.mLabel).get(), - NS_ConvertUTF16toUTF8(contentType).get(), + NS_ConvertUTF16toUTF8(contentTypeString).get(), NS_ConvertUTF16toUTF8(robustness).get()); continue; } + const MediaContentType& contentType = *maybeContentType; bool invalid = false; nsTArray codecs; - for (const nsString& codecString : codecStrings) { - EMECodecString emeCodec = ToEMEAPICodecString(codecString); + for (const auto& codecString : contentType.ExtendedType().Codecs().Range()) { + EMECodecString emeCodec = ToEMEAPICodecString(nsString(codecString)); if (emeCodec.IsEmpty()) { invalid = true; EME_LOG("MediaKeySystemConfiguration (label='%s') " "MediaKeySystemMediaCapability('%s','%s') unsupported; " "'%s' is an invalid codec string.", NS_ConvertUTF16toUTF8(aPartialConfig.mLabel).get(), - NS_ConvertUTF16toUTF8(contentType).get(), + NS_ConvertUTF16toUTF8(contentTypeString).get(), NS_ConvertUTF16toUTF8(robustness).get(), NS_ConvertUTF16toUTF8(codecString).get()); break; @@ -638,24 +639,24 @@ // (Note: Per RFC 6838 [RFC6838], "Both top-level type and subtype names are // case-insensitive."'. We're using nsContentTypeParser and that is // case-insensitive and converts all its parameter outputs to lower case.) - NS_ConvertUTF16toUTF8 container_utf8(container); - const bool isMP4 = DecoderTraits::IsMP4TypeAndEnabled(container_utf8, aDiagnostics); + const bool isMP4 = + DecoderTraits::IsMP4SupportedType(contentType, aDiagnostics); if (isMP4 && !aKeySystem.mMP4.IsSupported()) { EME_LOG("MediaKeySystemConfiguration (label='%s') " "MediaKeySystemMediaCapability('%s','%s') unsupported; " "MP4 requested but unsupported.", NS_ConvertUTF16toUTF8(aPartialConfig.mLabel).get(), - NS_ConvertUTF16toUTF8(contentType).get(), + NS_ConvertUTF16toUTF8(contentTypeString).get(), NS_ConvertUTF16toUTF8(robustness).get()); continue; } - const bool isWebM = DecoderTraits::IsWebMTypeAndEnabled(container_utf8); + const bool isWebM = WebMDecoder::IsSupportedType(contentType); if (isWebM && !aKeySystem.mWebM.IsSupported()) { EME_LOG("MediaKeySystemConfiguration (label='%s') " "MediaKeySystemMediaCapability('%s','%s') unsupported; " "WebM requested but unsupported.", NS_ConvertUTF16toUTF8(aPartialConfig.mLabel).get(), - NS_ConvertUTF16toUTF8(contentType).get(), + NS_ConvertUTF16toUTF8(contentTypeString).get(), NS_ConvertUTF16toUTF8(robustness).get()); continue; } @@ -664,7 +665,7 @@ "MediaKeySystemMediaCapability('%s','%s') unsupported; " "Unsupported or unrecognized container requested.", NS_ConvertUTF16toUTF8(aPartialConfig.mLabel).get(), - NS_ConvertUTF16toUTF8(contentType).get(), + NS_ConvertUTF16toUTF8(contentTypeString).get(), NS_ConvertUTF16toUTF8(robustness).get()); continue; } @@ -673,7 +674,7 @@ // content type. // If the user agent does not recognize one or more parameters, continue to // the next iteration. - if (IsParameterUnrecognized(contentType)) { + if (IsParameterUnrecognized(contentTypeString)) { continue; } @@ -704,13 +705,13 @@ } // If content type is not strictly a audio/video type, continue to the next iteration. - const auto majorType = GetMajorType(container); + const auto majorType = GetMajorType(contentType.Type()); if (majorType == Invalid) { EME_LOG("MediaKeySystemConfiguration (label='%s') " "MediaKeySystemMediaCapability('%s','%s') unsupported; " "MIME type is not an audio or video MIME type.", NS_ConvertUTF16toUTF8(aPartialConfig.mLabel).get(), - NS_ConvertUTF16toUTF8(contentType).get(), + NS_ConvertUTF16toUTF8(contentTypeString).get(), NS_ConvertUTF16toUTF8(robustness).get()); continue; } @@ -720,7 +721,7 @@ "MIME type mixes audio codecs in video capabilities " "or video codecs in audio capabilities.", NS_ConvertUTF16toUTF8(aPartialConfig.mLabel).get(), - NS_ConvertUTF16toUTF8(contentType).get(), + NS_ConvertUTF16toUTF8(contentTypeString).get(), NS_ConvertUTF16toUTF8(robustness).get()); continue; } @@ -733,7 +734,7 @@ "MediaKeySystemMediaCapability('%s','%s') unsupported; " "unsupported robustness string.", NS_ConvertUTF16toUTF8(aPartialConfig.mLabel).get(), - NS_ConvertUTF16toUTF8(contentType).get(), + NS_ConvertUTF16toUTF8(contentTypeString).get(), NS_ConvertUTF16toUTF8(robustness).get()); continue; } @@ -742,7 +743,7 @@ "MediaKeySystemMediaCapability('%s','%s') unsupported; " "unsupported robustness string.", NS_ConvertUTF16toUTF8(aPartialConfig.mLabel).get(), - NS_ConvertUTF16toUTF8(contentType).get(), + NS_ConvertUTF16toUTF8(contentTypeString).get(), NS_ConvertUTF16toUTF8(robustness).get()); continue; } @@ -755,7 +756,7 @@ // restrictions... const auto& containerSupport = isMP4 ? aKeySystem.mMP4 : aKeySystem.mWebM; if (!CanDecryptAndDecode(aKeySystem.mKeySystem, - contentType, + contentTypeString, majorType, containerSupport, codecs, @@ -764,7 +765,7 @@ "MediaKeySystemMediaCapability('%s','%s') unsupported; " "codec unsupported by CDM requested.", NS_ConvertUTF16toUTF8(aPartialConfig.mLabel).get(), - NS_ConvertUTF16toUTF8(contentType).get(), + NS_ConvertUTF16toUTF8(contentTypeString).get(), NS_ConvertUTF16toUTF8(robustness).get()); continue; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/encoder/VP8TrackEncoder.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/encoder/VP8TrackEncoder.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/encoder/VP8TrackEncoder.cpp 2017-01-13 01:47:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/encoder/VP8TrackEncoder.cpp 2017-01-16 01:49:42.000000000 +0000 @@ -24,7 +24,6 @@ // Debug logging macro with object pointer and class name. #define DEFAULT_BITRATE_BPS 2500000 -#define DEFAULT_ENCODE_FRAMERATE 30 using namespace mozilla::gfx; using namespace mozilla::layers; @@ -56,9 +55,7 @@ VP8TrackEncoder::VP8TrackEncoder(TrackRate aTrackRate) : VideoTrackEncoder(aTrackRate) - , mEncodedFrameDuration(0) , mEncodedTimestamp(0) - , mRemainingTicks(0) , mVPXContext(new vpx_codec_ctx_t()) , mVPXImageWrapper(new vpx_image_t()) { @@ -87,8 +84,6 @@ ReentrantMonitorAutoEnter mon(mReentrantMonitor); - mEncodedFrameRate = DEFAULT_ENCODE_FRAMERATE; - mEncodedFrameDuration = mTrackRate / mEncodedFrameRate; mFrameWidth = aWidth; mFrameHeight = aHeight; mDisplayWidth = aDisplayWidth; @@ -147,7 +142,7 @@ config.kf_mode = VPX_KF_AUTO; // Ensure that we can output one I-frame per second. - config.kf_max_dist = mEncodedFrameRate; + config.kf_max_dist = 60; vpx_codec_flags_t flags = 0; flags |= VPX_CODEC_USE_OUTPUT_PARTITION; @@ -188,7 +183,6 @@ meta->mHeight = mFrameHeight; meta->mDisplayWidth = mDisplayWidth; meta->mDisplayHeight = mDisplayHeight; - meta->mEncodedFrameRate = mEncodedFrameRate; return meta.forget(); } @@ -473,8 +467,7 @@ StreamTime aProcessedDuration) { int64_t durationInUsec = - FramesToUsecs(aProcessedDuration + mEncodedFrameDuration, - mTrackRate).value(); + FramesToUsecs(aProcessedDuration, mTrackRate).value(); if (aTimeElapsed.ToMicroseconds() > (durationInUsec * SKIP_FRAME_RATIO)) { // The encoder is too slow. // We should skip next frame to consume the mSourceSegment. @@ -488,71 +481,20 @@ } } -StreamTime -VP8TrackEncoder::CalculateRemainingTicks(StreamTime aDurationCopied, - StreamTime aEncodedDuration) -{ - return mRemainingTicks + aEncodedDuration - aDurationCopied; -} - -// Try to extend the encodedDuration as long as possible if the target frame -// has a long duration. -StreamTime -VP8TrackEncoder::CalculateEncodedDuration(StreamTime aDurationCopied) -{ - StreamTime temp64 = aDurationCopied; - StreamTime encodedDuration = mEncodedFrameDuration; - temp64 -= mRemainingTicks; - while (temp64 > mEncodedFrameDuration) { - temp64 -= mEncodedFrameDuration; - encodedDuration += mEncodedFrameDuration; - } - return encodedDuration; -} - /** * Encoding flow in GetEncodedTrack(): * 1: Check the mInitialized state and the packet duration. * 2: Move the data from mRawSegment to mSourceSegment. * 3: Encode the video chunks in mSourceSegment in a for-loop. - * 3.1: Pick the video chunk by mRemainingTicks. - * 3.2: Calculate the encoding duration for the parameter of vpx_codec_encode(). - * The encoding duration is a multiple of mEncodedFrameDuration. - * 3.3: Setup the video chunk to mVPXImageWrapper by PrepareRawFrame(). - * 3.4: Send frame into vp8 encoder by vpx_codec_encode(). - * 3.5: Get the output frame from encoder by calling GetEncodedPartitions(). - * 3.6: Calculate the mRemainingTicks for next target frame. - * 3.7: Set the nextEncodeOperation for the next target frame. + * 3.1: The duration is taken straight from the video chunk's duration. + * 3.2: Setup the video chunk with mVPXImageWrapper by PrepareRawFrame(). + * 3.3: Pass frame to vp8 encoder by vpx_codec_encode(). + * 3.4: Get the encoded frame from encoder by GetEncodedPartitions(). + * 3.5: Set the nextEncodeOperation for the next target frame. * There is a heuristic: If the frame duration we have processed in * mSourceSegment is 100ms, means that we can't spend more than 100ms to * encode it. * 4. Remove the encoded chunks in mSourceSegment after for-loop. - * - * Ex1: Input frame rate is 100 => input frame duration is 10ms for each. - * mEncodedFrameRate is 30 => output frame duration is 33ms. - * In this case, the frame duration in mSourceSegment will be: - * 1st : 0~10ms - * 2nd : 10~20ms - * 3rd : 20~30ms - * 4th : 30~40ms - * ... - * The VP8 encoder will take the 1st and 4th frames to encode. At beginning - * mRemainingTicks is 0 for 1st frame, then the mRemainingTicks is set - * to 23 to pick the 4th frame. (mEncodedFrameDuration - 1st frame duration) - * - * Ex2: Input frame rate is 25 => frame duration is 40ms for each. - * mEncodedFrameRate is 30 => output frame duration is 33ms. - * In this case, the frame duration in mSourceSegment will be: - * 1st : 0~40ms - * 2nd : 40~80ms - * 3rd : 80~120ms - * 4th : 120~160ms - * ... - * Because the input frame duration is 40ms larger than 33ms, so the first - * encoded frame duration will be 66ms by calling CalculateEncodedDuration. - * And the mRemainingTicks will be set to 26 - * (CalculateRemainingTicks 0+66-40) in order to pick the next frame(2nd) - * in mSourceSegment. */ nsresult VP8TrackEncoder::GetEncodedTrack(EncodedFrameContainer& aData) @@ -567,8 +509,8 @@ // Wait if mEncoder is not initialized, or when not enough raw data, but is // not the end of stream nor is being canceled. while (!mCanceled && (!mInitialized || - (mRawSegment.GetDuration() + mSourceSegment.GetDuration() < - mEncodedFrameDuration && !mEndOfStream))) { + (mRawSegment.GetDuration() + mSourceSegment.GetDuration() == 0 && + !mEndOfStream))) { mon.Wait(); } if (mCanceled || mEncodingComplete) { @@ -578,75 +520,54 @@ EOS = mEndOfStream; } - VideoSegment::ChunkIterator iter(mSourceSegment); - StreamTime durationCopied = 0; StreamTime totalProcessedDuration = 0; TimeStamp timebase = TimeStamp::Now(); EncodeOperation nextEncodeOperation = ENCODE_NORMAL_FRAME; - for (; !iter.IsEnded(); iter.Next()) { + for (VideoSegment::ChunkIterator iter(mSourceSegment); + !iter.IsEnded(); iter.Next()) { VideoChunk &chunk = *iter; - // Accumulate chunk's duration to durationCopied until it reaches - // mRemainingTicks. - durationCopied += chunk.GetDuration(); - MOZ_ASSERT(mRemainingTicks <= mEncodedFrameDuration); - VP8LOG("durationCopied %lld mRemainingTicks %lld\n", - durationCopied, mRemainingTicks); - if (durationCopied >= mRemainingTicks) { - VP8LOG("nextEncodeOperation is %d\n",nextEncodeOperation); - // Calculate encodedDuration for this target frame. - StreamTime encodedDuration = CalculateEncodedDuration(durationCopied); - - // Encode frame. - if (nextEncodeOperation != SKIP_FRAME) { - nsresult rv = PrepareRawFrame(chunk); - NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); - - // Encode the data with VP8 encoder - int flags = (nextEncodeOperation == ENCODE_NORMAL_FRAME) ? - 0 : VPX_EFLAG_FORCE_KF; - if (vpx_codec_encode(mVPXContext, mVPXImageWrapper, mEncodedTimestamp, - (unsigned long)encodedDuration, flags, - VPX_DL_REALTIME)) { - return NS_ERROR_FAILURE; - } - // Get the encoded data from VP8 encoder. - GetEncodedPartitions(aData); - } else { - // SKIP_FRAME - // Extend the duration of the last encoded data in aData - // because this frame will be skip. - RefPtr last = nullptr; - last = aData.GetEncodedFrames().LastElement(); - if (last) { - last->SetDuration(last->GetDuration() + encodedDuration); - } + VP8LOG("nextEncodeOperation is %d for frame of duration %lld\n", + nextEncodeOperation, chunk.GetDuration()); + + // Encode frame. + if (nextEncodeOperation != SKIP_FRAME) { + nsresult rv = PrepareRawFrame(chunk); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + // Encode the data with VP8 encoder + int flags = (nextEncodeOperation == ENCODE_NORMAL_FRAME) ? + 0 : VPX_EFLAG_FORCE_KF; + if (vpx_codec_encode(mVPXContext, mVPXImageWrapper, mEncodedTimestamp, + (unsigned long)chunk.GetDuration(), flags, + VPX_DL_REALTIME)) { + return NS_ERROR_FAILURE; } - // Move forward the mEncodedTimestamp. - mEncodedTimestamp += encodedDuration; - totalProcessedDuration += durationCopied; - // Calculate mRemainingTicks for next target frame. - mRemainingTicks = CalculateRemainingTicks(durationCopied, - encodedDuration); - - // Check the remain data is enough for next target frame. - if (mSourceSegment.GetDuration() - totalProcessedDuration - >= mEncodedFrameDuration) { - TimeDuration elapsedTime = TimeStamp::Now() - timebase; - nextEncodeOperation = GetNextEncodeOperation(elapsedTime, - totalProcessedDuration); - // Reset durationCopied for next iteration. - durationCopied = 0; - } else { - // Process done, there is no enough data left for next iteration, - // break the for-loop. - break; + // Get the encoded data from VP8 encoder. + GetEncodedPartitions(aData); + } else { + // SKIP_FRAME + // Extend the duration of the last encoded data in aData + // because this frame will be skip. + NS_WARNING("MediaRecorder lagging behind. Skipping a frame."); + RefPtr last = aData.GetEncodedFrames().LastElement(); + if (last) { + last->SetDuration(last->GetDuration() + chunk.GetDuration()); } } + + // Move forward the mEncodedTimestamp. + mEncodedTimestamp += chunk.GetDuration(); + totalProcessedDuration += chunk.GetDuration(); + + // Check what to do next. + TimeDuration elapsedTime = TimeStamp::Now() - timebase; + nextEncodeOperation = GetNextEncodeOperation(elapsedTime, + totalProcessedDuration); } + // Remove the chunks we have processed. - mSourceSegment.RemoveLeading(totalProcessedDuration); - VP8LOG("RemoveLeading %lld\n",totalProcessedDuration); + mSourceSegment.Clear(); // End of stream, pull the rest frames in encoder. if (EOS) { @@ -657,7 +578,7 @@ do { if (vpx_codec_encode(mVPXContext, nullptr, mEncodedTimestamp, - mEncodedFrameDuration, 0, VPX_DL_REALTIME)) { + 0, 0, VPX_DL_REALTIME)) { return NS_ERROR_FAILURE; } } while(GetEncodedPartitions(aData)); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/encoder/VP8TrackEncoder.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/encoder/VP8TrackEncoder.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/encoder/VP8TrackEncoder.h 2017-01-13 01:47:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/encoder/VP8TrackEncoder.h 2017-01-16 01:49:42.000000000 +0000 @@ -16,10 +16,9 @@ typedef struct vpx_image vpx_image_t; /** - * VP8TrackEncoder implements VideoTrackEncoder by using libvpx library. - * We implement a realtime and fixed FPS encoder. In order to achieve that, - * there is a pick target frame and drop frame encoding policy implemented in - * GetEncodedTrack. + * VP8TrackEncoder implements VideoTrackEncoder by using the libvpx library. + * We implement a realtime and variable frame rate encoder. In order to achieve + * that, there is a frame-drop encoding policy implemented in GetEncodedTrack. */ class VP8TrackEncoder : public VideoTrackEncoder { @@ -41,13 +40,6 @@ int32_t aDisplayWidth, int32_t aDisplayHeight) final override; private: - // Calculate the target frame's encoded duration. - StreamTime CalculateEncodedDuration(StreamTime aDurationCopied); - - // Calculate the mRemainingTicks for next target frame. - StreamTime CalculateRemainingTicks(StreamTime aDurationCopied, - StreamTime aEncodedDuration); - // Get the EncodeOperation for next target frame. EncodeOperation GetNextEncodeOperation(TimeDuration aTimeElapsed, StreamTime aProcessedDuration); @@ -60,14 +52,8 @@ // Prepare the input data to the mVPXImageWrapper for encoding. nsresult PrepareRawFrame(VideoChunk &aChunk); - // Output frame rate. - uint32_t mEncodedFrameRate; - // Duration for the output frame, reciprocal to mEncodedFrameRate. - StreamTime mEncodedFrameDuration; // Encoded timestamp. StreamTime mEncodedTimestamp; - // Duration to the next encode frame. - StreamTime mRemainingTicks; // Muted frame, we only create it once. RefPtr mMuteFrame; @@ -77,9 +63,7 @@ /** * A local segment queue which takes the raw data out from mRawSegment in the - * call of GetEncodedTrack(). Since we implement the fixed FPS encoding - * policy, it needs to be global in order to store the leftover segments - * taken from mRawSegment. + * call of GetEncodedTrack(). */ VideoSegment mSourceSegment; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/flac/FlacDecoder.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/flac/FlacDecoder.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/flac/FlacDecoder.cpp 2017-01-13 01:47:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/flac/FlacDecoder.cpp 2017-01-16 01:49:42.000000000 +0000 @@ -6,6 +6,7 @@ #include "FlacDecoder.h" #include "FlacDemuxer.h" +#include "MediaContentType.h" #include "MediaDecoderStateMachine.h" #include "MediaFormatReader.h" #include "MediaPrefs.h" @@ -15,8 +16,9 @@ MediaDecoder* FlacDecoder::Clone(MediaDecoderOwner* aOwner) { - if (!IsEnabled()) + if (!IsEnabled()) { return nullptr; + } return new FlacDecoder(aOwner); } @@ -41,12 +43,12 @@ } /* static */ bool -FlacDecoder::CanHandleMediaType(const nsACString& aType, - const nsAString& aCodecs) +FlacDecoder::IsSupportedType(const MediaContentType& aContentType) { - return IsEnabled() && - (aType.EqualsASCII("audio/flac") || aType.EqualsASCII("audio/x-flac") || - aType.EqualsASCII("application/x-flac")); + return IsEnabled() + && (aContentType.Type() == MEDIAMIMETYPE("audio/flac") + || aContentType.Type() == MEDIAMIMETYPE("audio/x-flac") + || aContentType.Type() == MEDIAMIMETYPE("application/x-flac")); } } // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/flac/FlacDecoder.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/flac/FlacDecoder.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/flac/FlacDecoder.h 2017-01-13 01:47:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/flac/FlacDecoder.h 2017-01-16 01:49:42.000000000 +0000 @@ -11,7 +11,10 @@ namespace mozilla { -class FlacDecoder : public MediaDecoder { +class MediaContentType; + +class FlacDecoder : public MediaDecoder +{ public: // MediaDecoder interface. explicit FlacDecoder(MediaDecoderOwner* aOwner) : MediaDecoder(aOwner) {} @@ -21,8 +24,7 @@ // Returns true if the Flac backend is pref'ed on, and we're running on a // platform that is likely to have decoders for the format. static bool IsEnabled(); - static bool CanHandleMediaType(const nsACString& aType, - const nsAString& aCodecs); + static bool IsSupportedType(const MediaContentType& aContentType); }; } // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/fmp4/MP4Decoder.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/fmp4/MP4Decoder.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/fmp4/MP4Decoder.cpp 2017-01-13 01:47:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/fmp4/MP4Decoder.cpp 2017-01-16 01:49:42.000000000 +0000 @@ -67,8 +67,8 @@ /* static */ bool -MP4Decoder::CanHandleMediaType(const MediaContentType& aType, - DecoderDoctorDiagnostics* aDiagnostics) +MP4Decoder::IsSupportedType(const MediaContentType& aType, + DecoderDoctorDiagnostics* aDiagnostics) { if (!IsEnabled()) { return false; @@ -77,29 +77,29 @@ // Whitelist MP4 types, so they explicitly match what we encounter on // the web, as opposed to what we use internally (i.e. what our demuxers // etc output). - const bool isMP4Audio = aType.GetMIMEType().EqualsASCII("audio/mp4") || - aType.GetMIMEType().EqualsASCII("audio/x-m4a"); - const bool isMP4Video = + const bool isAudio = aType.Type() == MEDIAMIMETYPE("audio/mp4") + || aType.Type() == MEDIAMIMETYPE("audio/x-m4a"); + const bool isVideo = aType.Type() == MEDIAMIMETYPE("video/mp4") + || aType.Type() == MEDIAMIMETYPE("video/quicktime") // On B2G, treat 3GPP as MP4 when Gonk PDM is available. #ifdef MOZ_GONK_MEDIACODEC - aType.GetMIMEType().EqualsASCII(VIDEO_3GPP) || + || aType.Type() == MEDIAMIMETYPE(VIDEO_3GPP) #endif - aType.GetMIMEType().EqualsASCII("video/mp4") || - aType.GetMIMEType().EqualsASCII("video/quicktime") || - aType.GetMIMEType().EqualsASCII("video/x-m4v"); - if (!isMP4Audio && !isMP4Video) { + || aType.Type() == MEDIAMIMETYPE("video/x-m4v"); + + if (!isAudio && !isVideo) { return false; } nsTArray> trackInfos; - if (aType.GetCodecs().IsEmpty()) { + if (aType.ExtendedType().Codecs().IsEmpty()) { // No codecs specified. Assume H.264 - if (isMP4Audio) { + if (isAudio) { trackInfos.AppendElement( CreateTrackInfoWithMIMETypeAndContentTypeExtraParameters( NS_LITERAL_CSTRING("audio/mp4a-latm"), aType)); } else { - MOZ_ASSERT(isMP4Video); + MOZ_ASSERT(isVideo); trackInfos.AppendElement( CreateTrackInfoWithMIMETypeAndContentTypeExtraParameters( NS_LITERAL_CSTRING("video/avc"), aType)); @@ -107,11 +107,7 @@ } else { // Verify that all the codecs specified are ones that we expect that // we can play. - nsTArray codecs; - if (!ParseCodecsString(aType.GetCodecs(), codecs)) { - return false; - } - for (const nsString& codec : codecs) { + for (const auto& codec : aType.ExtendedType().Codecs().Range()) { if (IsAACCodecString(codec)) { trackInfos.AppendElement( CreateTrackInfoWithMIMETypeAndContentTypeExtraParameters( @@ -138,7 +134,7 @@ } // Note: Only accept H.264 in a video content type, not in an audio // content type. - if (IsWhitelistedH264Codec(codec) && isMP4Video) { + if (IsWhitelistedH264Codec(codec) && isVideo) { trackInfos.AppendElement( CreateTrackInfoWithMIMETypeAndContentTypeExtraParameters( NS_LITERAL_CSTRING("video/avc"), aType)); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/fmp4/MP4Decoder.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/fmp4/MP4Decoder.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/fmp4/MP4Decoder.h 2017-01-13 01:47:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/fmp4/MP4Decoder.h 2017-01-16 01:49:42.000000000 +0000 @@ -30,10 +30,11 @@ MediaDecoderStateMachine* CreateStateMachine() override; - // Returns true if aType is a type that we think we can render with the - // a MP4 platform decoder backend. - static bool CanHandleMediaType(const MediaContentType& aType, - DecoderDoctorDiagnostics* aDiagnostics); + // Returns true if aContentType is an MP4 type that we think we can render + // with the a platform decoder backend. + // If provided, codecs are checked for support. + static bool IsSupportedType(const MediaContentType& aContentType, + DecoderDoctorDiagnostics* aDiagnostics); // Return true if aMimeType is a one of the strings used by our demuxers to // identify H264. Does not parse general content type strings, i.e. white diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/gtest/moz.build firefox-trunk-53.0~a1~hg20170115r329516/dom/media/gtest/moz.build --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/gtest/moz.build 2017-01-13 01:47:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/gtest/moz.build 2017-01-16 01:50:20.000000000 +0000 @@ -17,6 +17,7 @@ 'TestIntervalSet.cpp', 'TestMediaDataDecoder.cpp', 'TestMediaEventSource.cpp', + 'TestMediaMIMETypes.cpp', 'TestMozPromise.cpp', 'TestMP3Demuxer.cpp', 'TestMP4Demuxer.cpp', diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/gtest/TestMediaDataDecoder.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/gtest/TestMediaDataDecoder.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/gtest/TestMediaDataDecoder.cpp 2017-01-13 01:47:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/gtest/TestMediaDataDecoder.cpp 2017-01-16 01:50:20.000000000 +0000 @@ -7,7 +7,10 @@ #include "Benchmark.h" #include "MockMediaResource.h" #include "DecoderTraits.h" +#include "MediaContentType.h" +#include "MP4Decoder.h" #include "MP4Demuxer.h" +#include "WebMDecoder.h" #include "WebMDemuxer.h" using namespace mozilla; @@ -42,8 +45,9 @@ TEST(MediaDataDecoder, H264) { - if (!DecoderTraits::IsMP4TypeAndEnabled(NS_LITERAL_CSTRING("video/mp4") - , /* DecoderDoctorDiagnostics* */ nullptr)) { + if (!DecoderTraits::IsMP4SupportedType( + MediaContentType(MEDIAMIMETYPE("video/mp4")), + /* DecoderDoctorDiagnostics* */ nullptr)) { EXPECT_TRUE(true); } else { RefPtr resource = @@ -58,7 +62,7 @@ TEST(MediaDataDecoder, VP9) { - if (!DecoderTraits::IsWebMTypeAndEnabled(NS_LITERAL_CSTRING("video/webm"))) { + if (!WebMDecoder::IsSupportedType(MediaContentType(MEDIAMIMETYPE("video/webm")))) { EXPECT_TRUE(true); } else { RefPtr resource = diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/gtest/TestMediaMIMETypes.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/gtest/TestMediaMIMETypes.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/gtest/TestMediaMIMETypes.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/gtest/TestMediaMIMETypes.cpp 2017-01-16 01:50:20.000000000 +0000 @@ -0,0 +1,237 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/. */ + +#include "gtest/gtest.h" +#include "MediaContentType.h" + +using namespace mozilla; + +TEST(MediaMIMETypes, DependentMIMEType) +{ + static const struct + { + const char* mString; + DependentMediaMIMEType mDependentMediaMIMEType; + } + tests[] = + { + { "audio/mp4", MEDIAMIMETYPE("audio/mp4") }, + { "video/mp4", MEDIAMIMETYPE("video/mp4") }, + { "application/x-mp4", MEDIAMIMETYPE("application/x-mp4") } + }; + for (const auto& test : tests) { + EXPECT_TRUE(test.mDependentMediaMIMEType.AsDependentString().EqualsASCII(test.mString)); + MediaMIMEType mimetype(test.mDependentMediaMIMEType); + EXPECT_TRUE(mimetype.AsString().Equals(test.mDependentMediaMIMEType.AsDependentString())); + EXPECT_EQ(mimetype, test.mDependentMediaMIMEType); + EXPECT_EQ(mimetype, MediaMIMEType(test.mDependentMediaMIMEType)); + } +} + +TEST(MediaMIMETypes, MakeMediaMIMEType_bad) +{ + static const char* tests[] = + { + "", + " ", + "/", + "audio", + "audio/", + "mp4", + "/mp4", + "a/b" + }; + + for (const auto& test : tests) { + Maybe type = MakeMediaMIMEType(test); + EXPECT_TRUE(type.isNothing()) + << "MakeMediaMIMEType(\"" << test << "\").isNothing()"; + } +} + +TEST(MediaMIMETypes, MediaMIMEType) +{ + static const struct + { + const char* mTypeString; + const char* mAsString; + bool mApplication; + bool mAudio; + bool mVideo; + bool mEqualsLiteralVideoSlashMp4; // tests `== "video/mp4"` + } tests[] = + { // in AsString app audio video ==v/mp4 + { "video/mp4", "video/mp4", false, false, true, true }, + { "video/mp4; codecs=0", "video/mp4", false, false, true, true }, + { "VIDEO/MP4", "video/mp4", false, false, true, true }, + { "audio/mp4", "audio/mp4", false, true, false, false }, + { "application/x", "application/x", true, false, false, false } + }; + + for (const auto& test : tests) { + Maybe type = MakeMediaMIMEType(test.mTypeString); + EXPECT_TRUE(type.isSome()) + << "MakeMediaMIMEType(\"" << test.mTypeString << "\").isSome()"; + EXPECT_TRUE(type->AsString().EqualsASCII(test.mAsString)) + << "MakeMediaMIMEType(\"" << test.mTypeString << "\")->AsString() == \"" << test.mAsString << "\""; + EXPECT_EQ(test.mApplication, type->HasApplicationMajorType()) + << "MakeMediaMIMEType(\"" << test.mTypeString << "\")->HasApplicationMajorType() == " << (test.mApplication ? "true" : "false"); + EXPECT_EQ(test.mAudio, type->HasAudioMajorType()) + << "MakeMediaMIMEType(\"" << test.mTypeString << "\")->HasAudioMajorType() == " << (test.mAudio ? "true" : "false"); + EXPECT_EQ(test.mVideo, type->HasVideoMajorType()) + << "MakeMediaMIMEType(\"" << test.mTypeString << "\")->HasVideoMajorType() == " << (test.mVideo ? "true" : "false"); + EXPECT_EQ(test.mEqualsLiteralVideoSlashMp4, *type == MEDIAMIMETYPE("video/mp4")) + << "*MakeMediaMIMEType(\"" << test.mTypeString << "\") == MEDIAMIMETYPE(\"video/mp4\")"; + } +} + +TEST(MediaMIMETypes, MediaCodecs) +{ + MediaCodecs empty(""); + EXPECT_TRUE(empty.IsEmpty()); + EXPECT_TRUE(empty.AsString().EqualsLiteral("")); + EXPECT_FALSE(empty.Contains(NS_LITERAL_STRING(""))); + EXPECT_FALSE(empty.Contains(NS_LITERAL_STRING("c1"))); + int iterations = 0; + for (const auto& codec : empty.Range()) { + ++iterations; + Unused << codec; + } + EXPECT_EQ(0, iterations); + + MediaCodecs space(" "); + EXPECT_FALSE(space.IsEmpty()); + EXPECT_TRUE(space.AsString().EqualsLiteral(" ")); + EXPECT_TRUE(space.Contains(NS_LITERAL_STRING(""))); + EXPECT_FALSE(space.Contains(NS_LITERAL_STRING("c1"))); + iterations = 0; + for (const auto& codec : space.Range()) { + ++iterations; + EXPECT_TRUE(codec.IsEmpty()); + } + EXPECT_EQ(1, iterations); + + MediaCodecs one(" c1 "); + EXPECT_FALSE(one.IsEmpty()); + EXPECT_TRUE(one.AsString().EqualsLiteral(" c1 ")); + EXPECT_FALSE(one.Contains(NS_LITERAL_STRING(""))); + EXPECT_TRUE(one.Contains(NS_LITERAL_STRING("c1"))); + iterations = 0; + for (const auto& codec : one.Range()) { + ++iterations; + EXPECT_TRUE(codec.EqualsLiteral("c1")); + } + EXPECT_EQ(1, iterations); + + MediaCodecs two(" c1 , c2 "); + EXPECT_FALSE(two.IsEmpty()); + EXPECT_TRUE(two.AsString().EqualsLiteral(" c1 , c2 ")); + EXPECT_FALSE(two.Contains(NS_LITERAL_STRING(""))); + EXPECT_TRUE(two.Contains(NS_LITERAL_STRING("c1"))); + EXPECT_TRUE(two.Contains(NS_LITERAL_STRING("c2"))); + iterations = 0; + for (const auto& codec : two.Range()) { + ++iterations; + char buffer[] = "c0"; + buffer[1] += iterations; + EXPECT_TRUE(codec.EqualsASCII(buffer)); + } + EXPECT_EQ(2, iterations); + + EXPECT_TRUE(two.ContainsAll(two)); + EXPECT_TRUE(two.ContainsAll(one)); + EXPECT_FALSE(one.ContainsAll(two)); +} + +TEST(MediaMIMETypes, MakeMediaExtendedMIMEType_bad) +{ + static const char* tests[] = + { + "", + " ", + "/", + "audio", + "audio/", + "mp4", + "/mp4", + "a/b" + }; + + for (const auto& test : tests) { + Maybe type = MakeMediaExtendedMIMEType(test); + EXPECT_TRUE(type.isNothing()) + << "MakeMediaExtendedMIMEType(\"" << test << "\").isNothing()"; + } +} + +TEST(MediaMIMETypes, MediaExtendedMIMEType) +{ + // Some generic tests first. + static const struct + { + const char* mTypeString; + const char* mTypeAsString; + bool mApplication; + bool mAudio; + bool mVideo; + bool mEqualsLiteralVideoSlashMp4; // tests `== "video/mp4"` + bool mHaveCodecs; + } tests[] = + { // in Type().AsString app audio video ==v/mp4 codecs + { "video/mp4", "video/mp4", false, false, true, true, false }, + { "video/mp4; codecs=0", "video/mp4", false, false, true, true, true }, + { "VIDEO/MP4", "video/mp4", false, false, true, true, false }, + { "audio/mp4", "audio/mp4", false, true, false, false, false }, + { "application/x", "application/x", true, false, false, false, false } + }; + + for (const auto& test : tests) { + Maybe type = MakeMediaExtendedMIMEType(test.mTypeString); + EXPECT_TRUE(type.isSome()) + << "MakeMediaExtendedMIMEType(\"" << test.mTypeString << "\").isSome()"; + EXPECT_TRUE(type->OriginalString().EqualsASCII(test.mTypeString)) + << "MakeMediaExtendedMIMEType(\"" << test.mTypeString << "\")->AsString() == \"" << test.mTypeAsString << "\""; + EXPECT_TRUE(type->Type().AsString().EqualsASCII(test.mTypeAsString)) + << "MakeMediaExtendedMIMEType(\"" << test.mTypeString << "\")->AsString() == \"" << test.mTypeAsString << "\""; + EXPECT_EQ(test.mApplication, type->Type().HasApplicationMajorType()) + << "MakeMediaExtendedMIMEType(\"" << test.mTypeString << "\")->Type().HasApplicationMajorType() == " << (test.mApplication ? "true" : "false"); + EXPECT_EQ(test.mAudio, type->Type().HasAudioMajorType()) + << "MakeMediaExtendedMIMEType(\"" << test.mTypeString << "\")->Type().HasAudioMajorType() == " << (test.mAudio ? "true" : "false"); + EXPECT_EQ(test.mVideo, type->Type().HasVideoMajorType()) + << "MakeMediaExtendedMIMEType(\"" << test.mTypeString << "\")->Type().HasVideoMajorType() == " << (test.mVideo ? "true" : "false"); + EXPECT_EQ(test.mEqualsLiteralVideoSlashMp4, type->Type() == MEDIAMIMETYPE("video/mp4")) + << "*MakeMediaExtendedMIMEType(\"" << test.mTypeString << "\")->Type() == MEDIAMIMETYPE(\"video/mp4\")"; + EXPECT_EQ(test.mHaveCodecs, type->HaveCodecs()) + << "MakeMediaExtendedMIMEType(\"" << test.mTypeString << "\")->HaveCodecs() == " << (test.mHaveCodecs ? "true" : "false"); + EXPECT_NE(test.mHaveCodecs, type->Codecs().IsEmpty()) + << "MakeMediaExtendedMIMEType(\"" << test.mTypeString << "\")->Codecs.IsEmpty() != " << (test.mHaveCodecs ? "true" : "false"); + EXPECT_FALSE(type->GetWidth()) + << "MakeMediaExtendedMIMEType(\"" << test.mTypeString << "\")->GetWidth()"; + EXPECT_FALSE(type->GetHeight()) + << "MakeMediaExtendedMIMEType(\"" << test.mTypeString << "\")->GetHeight()"; + EXPECT_FALSE(type->GetFramerate()) + << "MakeMediaExtendedMIMEType(\"" << test.mTypeString << "\")->GetFramerate()"; + EXPECT_FALSE(type->GetBitrate()) + << "MakeMediaExtendedMIMEType(\"" << test.mTypeString << "\")->GetBitrate()"; + } + + // Test all extra parameters. + Maybe type = + MakeMediaExtendedMIMEType( + "video/mp4; codecs=\"a,b\"; width=1024; Height=768; FrameRate=60; BITRATE=100000"); + EXPECT_TRUE(type->HaveCodecs()); + EXPECT_FALSE(type->Codecs().IsEmpty()); + EXPECT_TRUE(type->Codecs().AsString().EqualsASCII("a,b")); + EXPECT_TRUE(type->Codecs().Contains(NS_LITERAL_STRING("a"))); + EXPECT_TRUE(type->Codecs().Contains(NS_LITERAL_STRING("b"))); + EXPECT_TRUE(!!type->GetWidth()); + EXPECT_EQ(1024, *type->GetWidth()); + EXPECT_TRUE(!!type->GetHeight()); + EXPECT_EQ(768, *type->GetHeight()); + EXPECT_TRUE(!!type->GetFramerate()); + EXPECT_EQ(60, *type->GetFramerate()); + EXPECT_TRUE(!!type->GetBitrate()); + EXPECT_EQ(100000, *type->GetBitrate()); +} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/gtest/TestMozPromise.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/gtest/TestMozPromise.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/gtest/TestMozPromise.cpp 2017-01-13 01:47:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/gtest/TestMozPromise.cpp 2017-01-16 01:50:20.000000000 +0000 @@ -280,7 +280,7 @@ } // We will hit the assertion if we don't disconnect the leaf Request // in the promise chain. - holder.Begin(p->Then(queue, __func__, [] () {}, [] () {})); + p->Then(queue, __func__, [] () {}, [] () {})->Track(holder); }); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/gtest/TestVideoUtils.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/gtest/TestVideoUtils.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/gtest/TestVideoUtils.cpp 2017-01-13 01:47:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/gtest/TestVideoUtils.cpp 2017-01-16 01:50:20.000000000 +0000 @@ -9,23 +9,45 @@ using namespace mozilla; +TEST(MediaMIMETypes, IsMediaMIMEType) +{ + EXPECT_TRUE(IsMediaMIMEType("audio/mp4")); + EXPECT_TRUE(IsMediaMIMEType("video/mp4")); + EXPECT_TRUE(IsMediaMIMEType("application/x-mp4")); + + EXPECT_TRUE(IsMediaMIMEType("audio/m")); + EXPECT_FALSE(IsMediaMIMEType("audio/")); + + EXPECT_FALSE(IsMediaMIMEType("vide/mp4")); + EXPECT_FALSE(IsMediaMIMEType("videos/mp4")); + + // Expect lowercase only. + EXPECT_FALSE(IsMediaMIMEType("Video/mp4")); +} + TEST(StringListRange, MakeStringListRange) { static const struct { const char* mList; - const char* mExpected; + const char* mExpectedSkipEmpties; + const char* mExpectedProcessAll; + const char* mExpectedProcessEmpties; } tests[] = - { - { "", "" }, - { " ", "" }, - { ",", "" }, - { " , ", "" }, - { "a", "a|" }, - { " a ", "a|" }, - { "aa,bb", "aa|bb|" }, - { " a a , b b ", "a a|b b|" }, - { " , ,a 1,, ,b 2,", "a 1|b 2|" } + { // string skip all empties + { "", "", "|", "" }, + { " ", "", "|", "|" }, + { ",", "", "||", "||" }, + { " , ", "", "||", "||" }, + { "a", "a|", "a|", "a|" }, + { " a ", "a|", "a|", "a|" }, + { "a,", "a|", "a||", "a||" }, + { "a, ", "a|", "a||", "a||" }, + { ",a", "a|", "|a|", "|a|" }, + { " ,a", "a|", "|a|", "|a|" }, + { "aa,bb", "aa|bb|", "aa|bb|", "aa|bb|" }, + { " a a , b b ", "a a|b b|", "a a|b b|", "a a|b b|" }, + { " , ,a 1,, ,b 2,", "a 1|b 2|", "||a 1|||b 2||", "||a 1|||b 2||" } }; for (const auto& test : tests) { @@ -35,7 +57,23 @@ out += item; out += "|"; } - EXPECT_STREQ(test.mExpected, out.Data()); + EXPECT_STREQ(test.mExpectedSkipEmpties, out.Data()); + out.SetLength(0); + + for (const auto& item : + MakeStringListRange(list)) { + out += item; + out += "|"; + } + EXPECT_STREQ(test.mExpectedProcessAll, out.Data()); + out.SetLength(0); + + for (const auto& item : + MakeStringListRange(list)) { + out += item; + out += "|"; + } + EXPECT_STREQ(test.mExpectedProcessEmpties, out.Data()); } } @@ -45,36 +83,49 @@ { const char* mList; const char* mItemToSearch; - bool mExpected; + bool mExpectedSkipEmpties; + bool mExpectedProcessAll; + bool mExpectedProcessEmpties; } tests[] = - { - { "", "", false }, - { "", "a", false }, - { " ", "a", false }, - { ",", "a", false }, - { " , ", "", false }, - { " , ", "a", false }, - { "a", "a", true }, - { "a", "b", false }, - { " a ", "a", true }, - { "aa,bb", "aa", true }, - { "aa,bb", "bb", true }, - { "aa,bb", "cc", false }, - { "aa,bb", " aa ", false }, - { " a a , b b ", "a a", true }, - { " , ,a 1,, ,b 2,", "a 1", true }, - { " , ,a 1,, ,b 2,", "b 2", true }, - { " , ,a 1,, ,b 2,", "", false }, - { " , ,a 1,, ,b 2,", " ", false }, - { " , ,a 1,, ,b 2,", "A 1", false }, - { " , ,A 1,, ,b 2,", "a 1", false } + { // haystack needle skip all empties + { "", "", false, true, false }, + { " ", "", false, true, true }, + { "", "a", false, false, false }, + { " ", "a", false, false, false }, + { ",", "a", false, false, false }, + { " , ", "", false, true, true }, + { " , ", "a", false, false, false }, + { "a", "a", true, true, true }, + { "a", "b", false, false, false }, + { " a ", "a", true, true, true }, + { "aa,bb", "aa", true, true, true }, + { "aa,bb", "bb", true, true, true }, + { "aa,bb", "cc", false, false, false }, + { "aa,bb", " aa ", false, false, false }, + { " a a , b b ", "a a", true, true, true }, + { " , ,a 1,, ,b 2,", "a 1", true, true, true }, + { " , ,a 1,, ,b 2,", "b 2", true, true, true }, + { " , ,a 1,, ,b 2,", "", false, true, true }, + { " , ,a 1,, ,b 2,", " ", false, false, false }, + { " , ,a 1,, ,b 2,", "A 1", false, false, false }, + { " , ,A 1,, ,b 2,", "a 1", false, false, false } }; for (const auto& test : tests) { nsCString list(test.mList); nsCString itemToSearch(test.mItemToSearch); - EXPECT_EQ(test.mExpected, StringListContains(list, itemToSearch)) + EXPECT_EQ(test.mExpectedSkipEmpties, StringListContains(list, itemToSearch)) + << "trying to find \"" << itemToSearch.Data() + << "\" in \"" << list.Data() << "\" (skipping empties)"; + EXPECT_EQ(test.mExpectedProcessAll, + StringListContains + (list, itemToSearch)) + << "trying to find \"" << itemToSearch.Data() + << "\" in \"" << list.Data() << "\" (processing everything)"; + EXPECT_EQ(test.mExpectedProcessEmpties, + StringListContains + (list, itemToSearch)) << "trying to find \"" << itemToSearch.Data() - << "\" in \"" << list.Data() << "\""; + << "\" in \"" << list.Data() << "\" (processing empties)"; } } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaContentType.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaContentType.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaContentType.cpp 2017-01-13 01:46:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaContentType.cpp 2017-01-16 01:49:04.000000000 +0000 @@ -10,51 +10,35 @@ namespace mozilla { -MediaContentType::MediaContentType(const nsAString& aType) +size_t +MediaContentType::SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const { - Populate(aType); + return mExtendedMIMEType.SizeOfExcludingThis(aMallocSizeOf); } -MediaContentType::MediaContentType(const nsACString& aType) +Maybe +MakeMediaContentType(const nsAString& aType) { - NS_ConvertUTF8toUTF16 typeUTF16(aType); - Populate(typeUTF16); + Maybe mime = MakeMediaExtendedMIMEType(aType); + if (mime) { + return Some(MediaContentType(Move(*mime))); + } + return Nothing(); } -static int32_t -GetParameterAsNumber(const nsContentTypeParser& aParser, - const char* aParameter, - const int32_t aErrorReturn) +Maybe +MakeMediaContentType(const nsACString& aType) { - nsAutoString parameterString; - nsresult rv = aParser.GetParameter(aParameter, parameterString); - if (NS_FAILED_impl(rv)) { - return aErrorReturn; - } - int32_t number = parameterString.ToInteger(&rv); - if (MOZ_UNLIKELY(NS_FAILED_impl(rv))) { - return aErrorReturn; - } - return number; + return MakeMediaContentType(NS_ConvertUTF8toUTF16(aType)); } -void -MediaContentType::Populate(const nsAString& aType) +Maybe +MakeMediaContentType(const char* aType) { - nsContentTypeParser parser(aType); - nsAutoString mime; - nsresult rv = parser.GetType(mime); - if (NS_SUCCEEDED(rv)) { - mMIMEType = NS_ConvertUTF16toUTF8(mime); + if (!aType) { + return Nothing(); } - - rv = parser.GetParameter("codecs", mCodecs); - mHaveCodecs = NS_SUCCEEDED(rv); - - mWidth = GetParameterAsNumber(parser, "width", -1); - mHeight = GetParameterAsNumber(parser, "height", -1); - mFramerate = GetParameterAsNumber(parser, "framerate", -1); - mBitrate = GetParameterAsNumber(parser, "bitrate", -1); + return MakeMediaContentType(nsDependentCString(aType)); } } // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaContentType.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaContentType.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaContentType.h 2017-01-13 01:46:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaContentType.h 2017-01-16 01:49:04.000000000 +0000 @@ -7,54 +7,48 @@ #ifndef MediaContentType_h_ #define MediaContentType_h_ +#include "MediaMIMETypes.h" #include "mozilla/Maybe.h" #include "nsString.h" namespace mozilla { -// Structure containing pre-parsed content type parameters, e.g.: -// MIME type, optional codecs, etc. +// Class containing media type information for containers. class MediaContentType { public: - // Parse UTF16 string to extract parameters. - explicit MediaContentType(const nsAString& aType); - // Parse UTF8 string to extract parameters. - explicit MediaContentType(const nsACString& aType); - - bool IsValid() const { return !GetMIMEType().IsEmpty(); } - - // MIME type. Empty if construction arguments could not be parsed. - const nsACString& GetMIMEType() const { return mMIMEType; } - - // Was there an explicit 'codecs' parameter provided? - bool HaveCodecs() const { return mHaveCodecs; } - // Codecs. May be empty if not provided or explicitly provided as empty. - const nsAString& GetCodecs() const { return mCodecs; } - - // Sizes and rates. - Maybe GetWidth() const { return GetMaybeNumber(mWidth); } - Maybe GetHeight() const { return GetMaybeNumber(mHeight); } - Maybe GetFramerate() const { return GetMaybeNumber(mFramerate); } - Maybe GetBitrate() const { return GetMaybeNumber(mBitrate); } - -private: - void Populate(const nsAString& aType); - - Maybe GetMaybeNumber(int32_t aNumber) const + explicit MediaContentType(const MediaMIMEType& aType) + : mExtendedMIMEType(aType) + {} + explicit MediaContentType(MediaMIMEType&& aType) + : mExtendedMIMEType(Move(aType)) + {} + explicit MediaContentType(const MediaExtendedMIMEType& aType) + : mExtendedMIMEType(aType) + { + } + explicit MediaContentType(MediaExtendedMIMEType&& aType) + : mExtendedMIMEType(Move(aType)) { - return (aNumber < 0) ? Maybe(Nothing()) : Some(int32_t(aNumber)); } - nsCString mMIMEType; // UTF8 MIME type. Empty if parsing failed. - bool mHaveCodecs; // If false, mCodecs must be empty. - nsString mCodecs; - int32_t mWidth; // -1 if not provided. - int32_t mHeight; // -1 if not provided. - int32_t mFramerate; // -1 if not provided. - int32_t mBitrate; // -1 if not provided. + const MediaMIMEType& Type() const { return mExtendedMIMEType.Type(); } + const MediaExtendedMIMEType& ExtendedType() const { return mExtendedMIMEType; } + + // Original string. Note that "type/subtype" may not be lowercase, + // use Type().AsString() instead to get the normalized "type/subtype". + const nsACString& OriginalString() const { return mExtendedMIMEType.OriginalString(); } + + size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const; + +private: + MediaExtendedMIMEType mExtendedMIMEType; }; +Maybe MakeMediaContentType(const nsAString& aType); +Maybe MakeMediaContentType(const nsACString& aType); +Maybe MakeMediaContentType(const char* aType); + } // namespace mozilla #endif // MediaContentType_h_ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaDecoder.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaDecoder.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaDecoder.cpp 2017-01-13 01:46:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaDecoder.cpp 2017-01-16 01:49:04.000000000 +0000 @@ -752,10 +752,10 @@ DiscardOngoingSeekIfExists(); mSeekDOMPromise = aPromise; - mSeekRequest.Begin( - mDecoderStateMachine->InvokeSeek(aTarget) - ->Then(AbstractThread::MainThread(), __func__, this, - &MediaDecoder::OnSeekResolved, &MediaDecoder::OnSeekRejected)); + mDecoderStateMachine->InvokeSeek(aTarget) + ->Then(AbstractThread::MainThread(), __func__, this, + &MediaDecoder::OnSeekResolved, &MediaDecoder::OnSeekRejected) + ->Track(mSeekRequest); } double diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaDecoderStateMachine.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaDecoderStateMachine.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaDecoderStateMachine.cpp 2017-01-13 01:46:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaDecoderStateMachine.cpp 2017-01-16 01:49:26.000000000 +0000 @@ -340,14 +340,15 @@ // We disconnect mMetadataRequest in Exit() so it is fine to capture // a raw pointer here. - mMetadataRequest.Begin(Reader()->ReadMetadata() + Reader()->ReadMetadata() ->Then(OwnerThread(), __func__, [this] (MetadataHolder* aMetadata) { OnMetadataRead(aMetadata); }, [this] (const MediaResult& aError) { OnMetadataNotRead(aError); - })); + }) + ->Track(mMetadataRequest); } void Exit() override @@ -1108,14 +1109,15 @@ void DemuxerSeek() { // Request the demuxer to perform seek. - mSeekRequest.Begin(Reader()->Seek(mSeekJob.mTarget.ref()) + Reader()->Seek(mSeekJob.mTarget.ref()) ->Then(OwnerThread(), __func__, [this] (const media::TimeUnit& aUnit) { OnSeekResolved(aUnit); }, [this] (const SeekRejectValue& aReject) { OnSeekRejected(aReject); - })); + }) + ->Track(mSeekRequest); } void DoSeek() override @@ -1191,20 +1193,18 @@ MOZ_ASSERT(!mMaster->IsWaitingVideoData()); // Fire 'waiting' to notify the player that we are waiting for data. mMaster->UpdateNextFrameStatus(MediaDecoderOwner::NEXT_FRAME_UNAVAILABLE_SEEKING); - mWaitRequest.Begin( - Reader()->WaitForData(aReject.mType)->Then( - OwnerThread(), __func__, - [this] (MediaData::Type aType) { - SLOG("OnSeekRejected wait promise resolved"); - mWaitRequest.Complete(); - DemuxerSeek(); - }, - [this] (const WaitForDataRejectValue& aRejection) { - SLOG("OnSeekRejected wait promise rejected"); - mWaitRequest.Complete(); - mMaster->DecodeError(NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA); - }) - ); + Reader()->WaitForData(aReject.mType)->Then( + OwnerThread(), __func__, + [this] (MediaData::Type aType) { + SLOG("OnSeekRejected wait promise resolved"); + mWaitRequest.Complete(); + DemuxerSeek(); + }, + [this] (const WaitForDataRejectValue& aRejection) { + SLOG("OnSeekRejected wait promise rejected"); + mWaitRequest.Complete(); + mMaster->DecodeError(NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA); + })->Track(mWaitRequest); return; } @@ -2086,7 +2086,7 @@ HandleVideoSuspendTimeout(); } - if (mMaster->CheckIfDecodeComplete()) { + if (!mMaster->IsVideoDecoding() && !mMaster->IsAudioDecoding()) { SetState(); return; } @@ -2126,7 +2126,7 @@ DecodingState::HandleEndOfAudio() { AudioQueue().Finish(); - if (mMaster->CheckIfDecodeComplete()) { + if (!mMaster->IsVideoDecoding()) { SetState(); } else { MaybeStopPrerolling(); @@ -2138,7 +2138,7 @@ DecodingState::HandleEndOfVideo() { VideoQueue().Finish(); - if (mMaster->CheckIfDecodeComplete()) { + if (!mMaster->IsAudioDecoding()) { SetState(); } else { MaybeStopPrerolling(); @@ -2382,7 +2382,7 @@ BufferingState::HandleEndOfAudio() { AudioQueue().Finish(); - if (mMaster->CheckIfDecodeComplete()) { + if (!mMaster->IsVideoDecoding()) { SetState(); } else { // Check if we can exit buffering. @@ -2395,7 +2395,7 @@ BufferingState::HandleEndOfVideo() { VideoQueue().Finish(); - if (mMaster->CheckIfDecodeComplete()) { + if (!mMaster->IsAudioDecoding()) { SetState(); } else { // Check if we can exit buffering. @@ -2699,17 +2699,6 @@ return HasVideo() && !VideoQueue().IsFinished(); } -bool -MediaDecoderStateMachine::CheckIfDecodeComplete() -{ - MOZ_ASSERT(OnTaskQueue()); - // DecodeComplete is possible only after decoding first frames. - MOZ_ASSERT(mSentFirstFrameLoadedEvent); - MOZ_ASSERT(mState == DECODER_STATE_DECODING || - mState == DECODER_STATE_BUFFERING); - return !IsVideoDecoding() && !IsAudioDecoding(); -} - bool MediaDecoderStateMachine::IsPlaying() const { MOZ_ASSERT(OnTaskQueue()); @@ -2739,10 +2728,11 @@ mMediaSink = CreateMediaSink(mAudioCaptured); - mCDMProxyPromise.Begin(aDecoder->RequestCDMProxy()->Then( + aDecoder->RequestCDMProxy()->Then( OwnerThread(), __func__, this, &MediaDecoderStateMachine::OnCDMProxyReady, - &MediaDecoderStateMachine::OnCDMProxyNotReady)); + &MediaDecoderStateMachine::OnCDMProxyNotReady) + ->Track(mCDMProxyPromise); nsresult rv = mReader->Init(); NS_ENSURE_SUCCESS(rv, rv); @@ -3019,35 +3009,33 @@ SAMPLE_LOG("Queueing audio task - queued=%i, decoder-queued=%o", AudioQueue().GetSize(), mReader->SizeOfAudioQueueInFrames()); - mAudioDataRequest.Begin( - mReader->RequestAudioData()->Then( - OwnerThread(), __func__, - [this] (MediaData* aAudio) { - MOZ_ASSERT(aAudio); - mAudioDataRequest.Complete(); - // audio->GetEndTime() is not always mono-increasing in chained ogg. - mDecodedAudioEndTime = std::max(aAudio->GetEndTime(), mDecodedAudioEndTime); - SAMPLE_LOG("OnAudioDecoded [%lld,%lld]", aAudio->mTime, aAudio->GetEndTime()); - mStateObj->HandleAudioDecoded(aAudio); - }, - [this] (const MediaResult& aError) { - SAMPLE_LOG("OnAudioNotDecoded aError=%u", aError.Code()); - mAudioDataRequest.Complete(); - switch (aError.Code()) { - case NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA: - mStateObj->HandleWaitingForAudio(); - break; - case NS_ERROR_DOM_MEDIA_CANCELED: - mStateObj->HandleAudioCanceled(); - break; - case NS_ERROR_DOM_MEDIA_END_OF_STREAM: - mStateObj->HandleEndOfAudio(); - break; - default: - DecodeError(aError); - } - }) - ); + mReader->RequestAudioData()->Then( + OwnerThread(), __func__, + [this] (MediaData* aAudio) { + MOZ_ASSERT(aAudio); + mAudioDataRequest.Complete(); + // audio->GetEndTime() is not always mono-increasing in chained ogg. + mDecodedAudioEndTime = std::max(aAudio->GetEndTime(), mDecodedAudioEndTime); + SAMPLE_LOG("OnAudioDecoded [%lld,%lld]", aAudio->mTime, aAudio->GetEndTime()); + mStateObj->HandleAudioDecoded(aAudio); + }, + [this] (const MediaResult& aError) { + SAMPLE_LOG("OnAudioNotDecoded aError=%u", aError.Code()); + mAudioDataRequest.Complete(); + switch (aError.Code()) { + case NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA: + mStateObj->HandleWaitingForAudio(); + break; + case NS_ERROR_DOM_MEDIA_CANCELED: + mStateObj->HandleAudioCanceled(); + break; + case NS_ERROR_DOM_MEDIA_END_OF_STREAM: + mStateObj->HandleEndOfAudio(); + break; + default: + DecodeError(aError); + } + })->Track(mAudioDataRequest); } void @@ -3063,35 +3051,33 @@ aCurrentTime.ToMicroseconds()); TimeStamp videoDecodeStartTime = TimeStamp::Now(); - mVideoDataRequest.Begin( - mReader->RequestVideoData(aSkipToNextKeyframe, aCurrentTime)->Then( - OwnerThread(), __func__, - [this, videoDecodeStartTime] (MediaData* aVideo) { - MOZ_ASSERT(aVideo); - mVideoDataRequest.Complete(); - // Handle abnormal or negative timestamps. - mDecodedVideoEndTime = std::max(mDecodedVideoEndTime, aVideo->GetEndTime()); - SAMPLE_LOG("OnVideoDecoded [%lld,%lld]", aVideo->mTime, aVideo->GetEndTime()); - mStateObj->HandleVideoDecoded(aVideo, videoDecodeStartTime); - }, - [this] (const MediaResult& aError) { - SAMPLE_LOG("OnVideoNotDecoded aError=%u", aError.Code()); - mVideoDataRequest.Complete(); - switch (aError.Code()) { - case NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA: - mStateObj->HandleWaitingForVideo(); - break; - case NS_ERROR_DOM_MEDIA_CANCELED: - mStateObj->HandleVideoCanceled(); - break; - case NS_ERROR_DOM_MEDIA_END_OF_STREAM: - mStateObj->HandleEndOfVideo(); - break; - default: - DecodeError(aError); - } - }) - ); + mReader->RequestVideoData(aSkipToNextKeyframe, aCurrentTime)->Then( + OwnerThread(), __func__, + [this, videoDecodeStartTime] (MediaData* aVideo) { + MOZ_ASSERT(aVideo); + mVideoDataRequest.Complete(); + // Handle abnormal or negative timestamps. + mDecodedVideoEndTime = std::max(mDecodedVideoEndTime, aVideo->GetEndTime()); + SAMPLE_LOG("OnVideoDecoded [%lld,%lld]", aVideo->mTime, aVideo->GetEndTime()); + mStateObj->HandleVideoDecoded(aVideo, videoDecodeStartTime); + }, + [this] (const MediaResult& aError) { + SAMPLE_LOG("OnVideoNotDecoded aError=%u", aError.Code()); + mVideoDataRequest.Complete(); + switch (aError.Code()) { + case NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA: + mStateObj->HandleWaitingForVideo(); + break; + case NS_ERROR_DOM_MEDIA_CANCELED: + mStateObj->HandleVideoCanceled(); + break; + case NS_ERROR_DOM_MEDIA_END_OF_STREAM: + mStateObj->HandleEndOfVideo(); + break; + default: + DecodeError(aError); + } + })->Track(mVideoDataRequest); } void @@ -3100,33 +3086,29 @@ MOZ_ASSERT(OnTaskQueue()); MOZ_ASSERT(aType == MediaData::AUDIO_DATA || aType == MediaData::VIDEO_DATA); if (aType == MediaData::AUDIO_DATA) { - mAudioWaitRequest.Begin( - mReader->WaitForData(MediaData::AUDIO_DATA)->Then( - OwnerThread(), __func__, - [this] (MediaData::Type aType) { - mAudioWaitRequest.Complete(); - MOZ_ASSERT(aType == MediaData::AUDIO_DATA); - mStateObj->HandleAudioWaited(aType); - }, - [this] (const WaitForDataRejectValue& aRejection) { - mAudioWaitRequest.Complete(); - DecodeError(NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA); - }) - ); + mReader->WaitForData(MediaData::AUDIO_DATA)->Then( + OwnerThread(), __func__, + [this] (MediaData::Type aType) { + mAudioWaitRequest.Complete(); + MOZ_ASSERT(aType == MediaData::AUDIO_DATA); + mStateObj->HandleAudioWaited(aType); + }, + [this] (const WaitForDataRejectValue& aRejection) { + mAudioWaitRequest.Complete(); + DecodeError(NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA); + })->Track(mAudioWaitRequest); } else { - mVideoWaitRequest.Begin( - mReader->WaitForData(MediaData::VIDEO_DATA)->Then( - OwnerThread(), __func__, - [this] (MediaData::Type aType) { - mVideoWaitRequest.Complete(); - MOZ_ASSERT(aType == MediaData::VIDEO_DATA); - mStateObj->HandleVideoWaited(aType); - }, - [this] (const WaitForDataRejectValue& aRejection) { - mVideoWaitRequest.Complete(); - DecodeError(NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA); - }) - ); + mReader->WaitForData(MediaData::VIDEO_DATA)->Then( + OwnerThread(), __func__, + [this] (MediaData::Type aType) { + mVideoWaitRequest.Complete(); + MOZ_ASSERT(aType == MediaData::VIDEO_DATA); + mStateObj->HandleVideoWaited(aType); + }, + [this] (const WaitForDataRejectValue& aRejection) { + mVideoWaitRequest.Complete(); + DecodeError(NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA); + })->Track(mVideoWaitRequest); } } @@ -3142,16 +3124,18 @@ auto audioPromise = mMediaSink->OnEnded(TrackInfo::kAudioTrack); if (audioPromise) { - mMediaSinkAudioPromise.Begin(audioPromise->Then( + audioPromise->Then( OwnerThread(), __func__, this, &MediaDecoderStateMachine::OnMediaSinkAudioComplete, - &MediaDecoderStateMachine::OnMediaSinkAudioError)); + &MediaDecoderStateMachine::OnMediaSinkAudioError) + ->Track(mMediaSinkAudioPromise); } if (videoPromise) { - mMediaSinkVideoPromise.Begin(videoPromise->Then( + videoPromise->Then( OwnerThread(), __func__, this, &MediaDecoderStateMachine::OnMediaSinkVideoComplete, - &MediaDecoderStateMachine::OnMediaSinkVideoError)); + &MediaDecoderStateMachine::OnMediaSinkVideoError) + ->Track(mMediaSinkVideoPromise); } } } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaDecoderStateMachine.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaDecoderStateMachine.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaDecoderStateMachine.h 2017-01-13 01:46:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaDecoderStateMachine.h 2017-01-16 01:49:26.000000000 +0000 @@ -443,9 +443,6 @@ void FinishDecodeFirstFrame(); - // Queries our state to see whether the decode has finished for all streams. - bool CheckIfDecodeComplete(); - // Performs one "cycle" of the state machine. void RunStateMachine(); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaFormatReader.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaFormatReader.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaFormatReader.cpp 2017-01-13 01:46:11.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaFormatReader.cpp 2017-01-16 01:49:27.000000000 +0000 @@ -290,7 +290,7 @@ switch (data.mStage) { case Stage::None: { MOZ_ASSERT(!data.mToken); - data.mTokenPromise.Begin(DecoderAllocPolicy::Instance(aTrack).Alloc()->Then( + DecoderAllocPolicy::Instance(aTrack).Alloc()->Then( mOwner->OwnerThread(), __func__, [this, &data, aTrack] (Token* aToken) { data.mTokenPromise.Complete(); @@ -301,7 +301,7 @@ [&data] () { data.mTokenPromise.Complete(); data.mStage = Stage::None; - })); + })->Track(data.mTokenPromise); data.mStage = Stage::WaitForToken; break; } @@ -409,7 +409,7 @@ auto& ownerData = mOwner->GetDecoderData(aTrack); auto& data = aTrack == TrackInfo::kAudioTrack ? mAudio : mVideo; - data.mInitPromise.Begin(data.mDecoder->Init()->Then( + data.mDecoder->Init()->Then( mOwner->OwnerThread(), __func__, [this, &data, &ownerData] (TrackType aTrack) { data.mInitPromise.Complete(); @@ -426,7 +426,7 @@ data.mDecoder->Shutdown(); data.mDecoder = nullptr; mOwner->NotifyError(aTrack, aError); - })); + })->Track(data.mInitPromise); } // DemuxerProxy ensures that the original main demuxer is only ever accessed @@ -977,10 +977,11 @@ RefPtr p = mMetadataPromise.Ensure(__func__); - mDemuxerInitRequest.Begin(mDemuxer->Init() - ->Then(OwnerThread(), __func__, this, - &MediaFormatReader::OnDemuxerInitDone, - &MediaFormatReader::OnDemuxerInitFailed)); + mDemuxer->Init() + ->Then(OwnerThread(), __func__, this, + &MediaFormatReader::OnDemuxerInitDone, + &MediaFormatReader::OnDemuxerInitFailed) + ->Track(mDemuxerInitRequest); return p; } @@ -1277,9 +1278,10 @@ }); } - mVideo.mDemuxRequest.Begin(p->Then(OwnerThread(), __func__, this, - &MediaFormatReader::OnVideoDemuxCompleted, - &MediaFormatReader::OnVideoDemuxFailed)); + p->Then(OwnerThread(), __func__, this, + &MediaFormatReader::OnVideoDemuxCompleted, + &MediaFormatReader::OnVideoDemuxFailed) + ->Track(mVideo.mDemuxRequest); } void @@ -1343,9 +1345,10 @@ }); } - mAudio.mDemuxRequest.Begin(p->Then(OwnerThread(), __func__, this, - &MediaFormatReader::OnAudioDemuxCompleted, - &MediaFormatReader::OnAudioDemuxFailed)); + p->Then(OwnerThread(), __func__, this, + &MediaFormatReader::OnAudioDemuxCompleted, + &MediaFormatReader::OnAudioDemuxFailed) + ->Track(mAudio.mDemuxRequest); } void @@ -1705,37 +1708,38 @@ decoder.ResetDemuxer(); decoder.mTimeThreshold = Some(aTarget); RefPtr self = this; - decoder.mSeekRequest.Begin(decoder.mTrackDemuxer->Seek(decoder.mTimeThreshold.ref().Time()) - ->Then(OwnerThread(), __func__, - [self, aTrack] (media::TimeUnit aTime) { - auto& decoder = self->GetDecoderData(aTrack); - decoder.mSeekRequest.Complete(); - MOZ_ASSERT(decoder.mTimeThreshold, - "Seek promise must be disconnected when timethreshold is reset"); - decoder.mTimeThreshold.ref().mHasSeeked = true; - self->SetVideoDecodeThreshold(); - self->ScheduleUpdate(aTrack); - }, - [self, aTrack] (const MediaResult& aError) { - auto& decoder = self->GetDecoderData(aTrack); - decoder.mSeekRequest.Complete(); - switch (aError.Code()) { - case NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA: - self->NotifyWaitingForData(aTrack); - break; - case NS_ERROR_DOM_MEDIA_END_OF_STREAM: - decoder.mTimeThreshold.reset(); - self->NotifyEndOfStream(aTrack); - break; - case NS_ERROR_DOM_MEDIA_CANCELED: - decoder.mTimeThreshold.reset(); - break; - default: - decoder.mTimeThreshold.reset(); - self->NotifyError(aTrack, aError); - break; - } - })); + decoder.mTrackDemuxer->Seek(decoder.mTimeThreshold.ref().Time()) + ->Then(OwnerThread(), __func__, + [self, aTrack] (media::TimeUnit aTime) { + auto& decoder = self->GetDecoderData(aTrack); + decoder.mSeekRequest.Complete(); + MOZ_ASSERT(decoder.mTimeThreshold, + "Seek promise must be disconnected when timethreshold is reset"); + decoder.mTimeThreshold.ref().mHasSeeked = true; + self->SetVideoDecodeThreshold(); + self->ScheduleUpdate(aTrack); + }, + [self, aTrack] (const MediaResult& aError) { + auto& decoder = self->GetDecoderData(aTrack); + decoder.mSeekRequest.Complete(); + switch (aError.Code()) { + case NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA: + self->NotifyWaitingForData(aTrack); + break; + case NS_ERROR_DOM_MEDIA_END_OF_STREAM: + decoder.mTimeThreshold.reset(); + self->NotifyEndOfStream(aTrack); + break; + case NS_ERROR_DOM_MEDIA_CANCELED: + decoder.mTimeThreshold.reset(); + break; + default: + decoder.mTimeThreshold.reset(); + self->NotifyError(aTrack, aError); + break; + } + }) + ->Track(decoder.mSeekRequest); } void @@ -2197,10 +2201,11 @@ // decoder threshold to the value of currentTime. DropDecodedSamples(TrackInfo::kVideoTrack); - mSkipRequest.Begin(mVideo.mTrackDemuxer->SkipToNextRandomAccessPoint(aTimeThreshold) - ->Then(OwnerThread(), __func__, this, - &MediaFormatReader::OnVideoSkipCompleted, - &MediaFormatReader::OnVideoSkipFailed)); + mVideo.mTrackDemuxer->SkipToNextRandomAccessPoint(aTimeThreshold) + ->Then(OwnerThread(), __func__, this, + &MediaFormatReader::OnVideoSkipCompleted, + &MediaFormatReader::OnVideoSkipFailed) + ->Track(mSkipRequest); return; } @@ -2408,10 +2413,11 @@ MOZ_ASSERT(mPendingSeekTime.isSome()); LOGV("Seeking video to %lld", mPendingSeekTime.ref().ToMicroseconds()); media::TimeUnit seekTime = mPendingSeekTime.ref(); - mVideo.mSeekRequest.Begin(mVideo.mTrackDemuxer->Seek(seekTime) - ->Then(OwnerThread(), __func__, this, - &MediaFormatReader::OnVideoSeekCompleted, - &MediaFormatReader::OnVideoSeekFailed)); + mVideo.mTrackDemuxer->Seek(seekTime) + ->Then(OwnerThread(), __func__, this, + &MediaFormatReader::OnVideoSeekCompleted, + &MediaFormatReader::OnVideoSeekFailed) + ->Track(mVideo.mSeekRequest); } void @@ -2490,10 +2496,11 @@ MOZ_ASSERT(mPendingSeekTime.isSome()); LOGV("Seeking audio to %lld", mPendingSeekTime.ref().ToMicroseconds()); media::TimeUnit seekTime = mPendingSeekTime.ref(); - mAudio.mSeekRequest.Begin(mAudio.mTrackDemuxer->Seek(seekTime) - ->Then(OwnerThread(), __func__, this, - &MediaFormatReader::OnAudioSeekCompleted, - &MediaFormatReader::OnAudioSeekFailed)); + mAudio.mTrackDemuxer->Seek(seekTime) + ->Then(OwnerThread(), __func__, this, + &MediaFormatReader::OnAudioSeekCompleted, + &MediaFormatReader::OnAudioSeekFailed) + ->Track(mAudio.mSeekRequest); } void @@ -2564,14 +2571,15 @@ } RefPtr self = this; - mNotifyDataArrivedPromise.Begin(mDemuxer->NotifyDataArrived()->Then( - OwnerThread(), __func__, - [self]() { - self->mNotifyDataArrivedPromise.Complete(); - self->UpdateBuffered(); - self->NotifyTrackDemuxers(); - }, - [self]() { self->mNotifyDataArrivedPromise.Complete(); })); + mDemuxer->NotifyDataArrived() + ->Then(OwnerThread(), __func__, + [self]() { + self->mNotifyDataArrivedPromise.Complete(); + self->UpdateBuffered(); + self->NotifyTrackDemuxers(); + }, + [self]() { self->mNotifyDataArrivedPromise.Complete(); }) + ->Track(mNotifyDataArrivedPromise); } void diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaMIMETypes.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaMIMETypes.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaMIMETypes.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaMIMETypes.cpp 2017-01-16 01:49:27.000000000 +0000 @@ -0,0 +1,219 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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 "MediaMIMETypes.h" + +#include "nsContentTypeParser.h" + +namespace mozilla { + +template +static bool +StartsWith(const nsACString& string, const char (&prefix)[N]) +{ + if (N - 1 > string.Length()) { + return false; + } + return memcmp(string.Data(), prefix, N - 1) == 0; +} + +bool +MediaMIMEType::HasApplicationMajorType() const +{ + return StartsWith(mMIMEType, "application/"); +} + +bool +MediaMIMEType::HasAudioMajorType() const +{ + return StartsWith(mMIMEType, "audio/"); +} + +bool +MediaMIMEType::HasVideoMajorType() const +{ + return StartsWith(mMIMEType, "video/"); +} + +size_t +MediaMIMEType::SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const +{ + return mMIMEType.SizeOfExcludingThisIfUnshared(aMallocSizeOf); +} + +MediaMIMEType::MediaMIMEType(const nsACString& aType) + : mMIMEType(aType) +{ +} + +Maybe +MakeMediaMIMEType(const nsAString& aType) +{ + MOZ_ASSERT(NS_IsMainThread()); + + nsContentTypeParser parser(aType); + nsAutoString mime; + nsresult rv = parser.GetType(mime); + if (!NS_SUCCEEDED(rv) || mime.IsEmpty()) { + return Nothing(); + } + + NS_ConvertUTF16toUTF8 mime8{mime}; + if (!IsMediaMIMEType(mime8)) { + return Nothing(); + } + + return Some(MediaMIMEType(mime8)); +} + +Maybe +MakeMediaMIMEType(const nsACString& aType) +{ + return MakeMediaMIMEType(NS_ConvertUTF8toUTF16(aType)); +} + +Maybe +MakeMediaMIMEType(const char* aType) +{ + if (!aType) { + return Nothing(); + } + return MakeMediaMIMEType(nsDependentCString(aType)); +} + +bool +MediaCodecs::Contains(const nsAString& aCodec) const +{ + for (const auto& myCodec : Range()) { + if (myCodec == aCodec) { + return true; + } + } + return false; +} + +bool +MediaCodecs::ContainsAll(const MediaCodecs& aCodecs) const +{ + const auto& codecsToTest = aCodecs.Range(); + for (const auto& codecToTest : codecsToTest) { + if (!Contains(codecToTest)) { + return false; + } + } + return true; +} + +size_t +MediaCodecs::SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const +{ + return mCodecs.SizeOfExcludingThisIfUnshared(aMallocSizeOf); +} + + +static int32_t +GetParameterAsNumber(const nsContentTypeParser& aParser, + const char* aParameter, + const int32_t aErrorReturn) +{ + nsAutoString parameterString; + nsresult rv = aParser.GetParameter(aParameter, parameterString); + if (NS_FAILED_impl(rv)) { + return aErrorReturn; + } + int32_t number = parameterString.ToInteger(&rv); + if (MOZ_UNLIKELY(NS_FAILED_impl(rv))) { + return aErrorReturn; + } + return number; +} + +MediaExtendedMIMEType::MediaExtendedMIMEType(const nsACString& aOriginalString, + const nsACString& aMIMEType, + bool aHaveCodecs, + const nsAString& aCodecs, + int32_t aWidth, int32_t aHeight, + int32_t aFramerate, int32_t aBitrate) + : mOriginalString(aOriginalString) + , mMIMEType(aMIMEType) + , mHaveCodecs(aHaveCodecs) + , mCodecs(aCodecs) + , mWidth(aWidth) + , mHeight(aHeight) + , mFramerate(aFramerate) + , mBitrate(aBitrate) +{ +} + +MediaExtendedMIMEType::MediaExtendedMIMEType(const MediaMIMEType& aType) + : mOriginalString(aType.AsString()) + , mMIMEType(aType) +{ +} + +MediaExtendedMIMEType::MediaExtendedMIMEType(MediaMIMEType&& aType) + : mOriginalString(aType.AsString()) + , mMIMEType(Move(aType)) +{ +} + +Maybe +MakeMediaExtendedMIMEType(const nsAString& aType) +{ + MOZ_ASSERT(NS_IsMainThread()); + + nsContentTypeParser parser(aType); + nsAutoString mime; + nsresult rv = parser.GetType(mime); + if (!NS_SUCCEEDED(rv) || mime.IsEmpty()) { + return Nothing(); + } + + NS_ConvertUTF16toUTF8 mime8{mime}; + if (!IsMediaMIMEType(mime8)) { + return Nothing(); + } + + nsAutoString codecs; + rv = parser.GetParameter("codecs", codecs); + bool haveCodecs = NS_SUCCEEDED(rv); + + int32_t width = GetParameterAsNumber(parser, "width", -1); + int32_t height = GetParameterAsNumber(parser, "height", -1); + int32_t framerate = GetParameterAsNumber(parser, "framerate", -1); + int32_t bitrate = GetParameterAsNumber(parser, "bitrate", -1); + + return Some(MediaExtendedMIMEType(NS_ConvertUTF16toUTF8(aType), + mime8, + haveCodecs, codecs, + width, height, + framerate, bitrate)); +} + +size_t +MediaExtendedMIMEType::SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const +{ + return mOriginalString.SizeOfExcludingThisIfUnshared(aMallocSizeOf) + + mMIMEType.SizeOfExcludingThis(aMallocSizeOf) + + mCodecs.SizeOfExcludingThis(aMallocSizeOf); +} + +Maybe +MakeMediaExtendedMIMEType(const nsACString& aType) +{ + return MakeMediaExtendedMIMEType(NS_ConvertUTF8toUTF16(aType)); +} + +Maybe +MakeMediaExtendedMIMEType(const char* aType) +{ + if (!aType) { + return Nothing(); + } + return MakeMediaExtendedMIMEType(nsDependentCString(aType)); +} + +} // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaMIMETypes.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaMIMETypes.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaMIMETypes.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaMIMETypes.h 2017-01-16 01:49:27.000000000 +0000 @@ -0,0 +1,205 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:set ts=2 sw=2 sts=2 et cindent: */ +/* 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/. */ + +#ifndef MediaMIMETypes_h_ +#define MediaMIMETypes_h_ + +#include "mozilla/Maybe.h" +#include "nsString.h" +#include "VideoUtils.h" + +namespace mozilla { + +// Class containing pointing at a media MIME "type/subtype" string literal. +// See IsMediaMIMEType for restrictions. +// Mainly used to help construct a MediaMIMEType through the statically-checked +// MEDIAMIMETYPE macro, or to compare a MediaMIMEType to a literal. +class DependentMediaMIMEType +{ +public: + // Construction from a literal. Checked in debug builds. + // Use MEDIAMIMETYPE macro instead, for static checking. + template + explicit DependentMediaMIMEType(const char (&aType)[N]) + : mMIMEType(aType, N - 1) + { + MOZ_ASSERT(IsMediaMIMEType(aType, N - 1), "Invalid media MIME type"); + } + + // MIME "type/subtype". + const nsDependentCString& AsDependentString() const { return mMIMEType; } + +private: + nsDependentCString mMIMEType; +}; + +// Instantiate a DependentMediaMIMEType from a literal. Statically checked. +#define MEDIAMIMETYPE(LIT) \ + static_cast( \ + []() { \ + static_assert(IsMediaMIMEType(LIT), "Invalid media MIME type"); \ + return DependentMediaMIMEType(LIT); \ + }()) + +// Class containing only pre-parsed lowercase media MIME type/subtype. +class MediaMIMEType +{ +public: + // Construction from a DependentMediaMIMEType, with its inherent checks. + // Implicit so MEDIAMIMETYPE can be used wherever a MediaMIMEType is expected. + MOZ_IMPLICIT MediaMIMEType(const DependentMediaMIMEType& aType) + : mMIMEType(aType.AsDependentString()) + {} + + // MIME "type/subtype", always lowercase. + const nsACString& AsString() const { return mMIMEType; } + + // Comparison with DependentMediaMIMEType. + // Useful to compare to MEDIAMIMETYPE literals. + bool operator==(const DependentMediaMIMEType& aOther) const + { + return mMIMEType.Equals(aOther.AsDependentString()); + } + bool operator!=(const DependentMediaMIMEType& aOther) const + { + return !mMIMEType.Equals(aOther.AsDependentString()); + } + + bool operator==(const MediaMIMEType& aOther) const + { + return mMIMEType.Equals(aOther.mMIMEType); + } + bool operator!=(const MediaMIMEType& aOther) const + { + return !mMIMEType.Equals(aOther.mMIMEType); + } + + // True if type starts with "application/". + bool HasApplicationMajorType() const; + // True if type starts with "audio/". + // Note that some audio content could be stored in a "video/..." container! + bool HasAudioMajorType() const; + // True if type starts with "video/". + // Note that this does not guarantee 100% that the content is actually video! + // (e.g., "video/webm" could contain a vorbis audio track.) + bool HasVideoMajorType() const; + + size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const; + +private: + friend Maybe MakeMediaMIMEType(const nsAString& aType); + friend class MediaExtendedMIMEType; + explicit MediaMIMEType(const nsACString& aType); + + nsCString mMIMEType; // UTF8 MIME "type/subtype". +}; + +Maybe MakeMediaMIMEType(const nsAString& aType); +Maybe MakeMediaMIMEType(const nsACString& aType); +Maybe MakeMediaMIMEType(const char* aType); + + +// A list of codecs attached to a MediaExtendedMIMEType. +class MediaCodecs +{ +public: + MediaCodecs() {} + // Construction from a comma-separated list of codecs. Unchecked. + explicit MediaCodecs(const nsAString& aCodecs) + : mCodecs(aCodecs) + {} + // Construction from a literal comma-separated list of codecs. Unchecked. + template + explicit MediaCodecs(const char (&aCodecs)[N]) + : mCodecs(NS_ConvertUTF8toUTF16(aCodecs, N - 1)) + {} + + bool IsEmpty() const { return mCodecs.IsEmpty(); } + const nsAString& AsString() const { return mCodecs; } + + using RangeType = + const StringListRange; + + // Produces a range object with begin()&end(), can be used in range-for loops. + // This will iterate through all codecs, even empty ones (except if the + // original list was an empty string). Iterators dereference to + // 'const nsDependentString', valid for as long as this MediaCodecs object. + RangeType Range() const + { + return RangeType(mCodecs); + }; + + bool Contains(const nsAString& aCodec) const; + bool ContainsAll(const MediaCodecs& aCodecs) const; + + size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const; + +private: + // UTF16 comma-separated list of codecs. + // See http://www.rfc-editor.org/rfc/rfc4281.txt for the description + // of the 'codecs' parameter. + nsString mCodecs; +}; + + +// Class containing pre-parsed media MIME type parameters, e.g.: +// MIME type/subtype, optional codecs, etc. +class MediaExtendedMIMEType +{ +public: + explicit MediaExtendedMIMEType(const MediaMIMEType& aType); + explicit MediaExtendedMIMEType(MediaMIMEType&& aType); + + // MIME "type/subtype". + const MediaMIMEType& Type() const { return mMIMEType; } + + // Was there an explicit 'codecs' parameter provided? + bool HaveCodecs() const { return mHaveCodecs; } + // Codecs. May be empty if not provided or explicitly provided as empty. + const MediaCodecs& Codecs() const { return mCodecs; } + + // Sizes and rates. + Maybe GetWidth() const { return GetMaybeNumber(mWidth); } + Maybe GetHeight() const { return GetMaybeNumber(mHeight); } + Maybe GetFramerate() const { return GetMaybeNumber(mFramerate); } + Maybe GetBitrate() const { return GetMaybeNumber(mBitrate); } + + // Original string. Note that "type/subtype" may not be lowercase, + // use Type().AsString() instead to get the normalized "type/subtype". + const nsACString& OriginalString() const { return mOriginalString; } + + size_t SizeOfExcludingThis(mozilla::MallocSizeOf aMallocSizeOf) const; + +private: + friend Maybe MakeMediaExtendedMIMEType(const nsAString& aType); + MediaExtendedMIMEType(const nsACString& aOriginalString, + const nsACString& aMIMEType, + bool aHaveCodecs, const nsAString& aCodecs, + int32_t aWidth, int32_t aHeight, + int32_t aFramerate, int32_t aBitrate); + + Maybe GetMaybeNumber(int32_t aNumber) const + { + return (aNumber < 0) ? Maybe(Nothing()) : Some(int32_t(aNumber)); + } + + nsCString mOriginalString; // Original full string. + MediaMIMEType mMIMEType; // MIME type/subtype. + bool mHaveCodecs = false; // If false, mCodecs must be empty. + MediaCodecs mCodecs; + int32_t mWidth = -1; // -1 if not provided. + int32_t mHeight = -1; // -1 if not provided. + int32_t mFramerate = -1; // -1 if not provided. + int32_t mBitrate = -1; // -1 if not provided. +}; + +Maybe MakeMediaExtendedMIMEType(const nsAString& aType); +Maybe MakeMediaExtendedMIMEType(const nsACString& aType); +Maybe MakeMediaExtendedMIMEType(const char* aType); + +} // namespace mozilla + +#endif // MediaMIMETypes_h_ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/mediasink/AudioSinkWrapper.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/mediasink/AudioSinkWrapper.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/mediasink/AudioSinkWrapper.cpp 2017-01-13 01:47:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/mediasink/AudioSinkWrapper.cpp 2017-01-16 01:50:21.000000000 +0000 @@ -193,10 +193,11 @@ mAudioSink = mCreator->Create(); mEndPromise = mAudioSink->Init(mParams); - mAudioSinkPromise.Begin(mEndPromise->Then( + mEndPromise->Then( mOwnerThread.get(), __func__, this, &AudioSinkWrapper::OnAudioEnded, - &AudioSinkWrapper::OnAudioEnded)); + &AudioSinkWrapper::OnAudioEnded + )->Track(mAudioSinkPromise); } } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/mediasink/VideoSink.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/mediasink/VideoSink.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/mediasink/VideoSink.cpp 2017-01-13 01:47:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/mediasink/VideoSink.cpp 2017-01-16 01:50:21.000000000 +0000 @@ -185,7 +185,7 @@ RefPtr p = mAudioSink->OnEnded(TrackInfo::kVideoTrack); if (p) { RefPtr self = this; - mVideoSinkEndRequest.Begin(p->Then(mOwnerThread, __func__, + p->Then(mOwnerThread, __func__, [self] () { self->mVideoSinkEndRequest.Complete(); self->TryUpdateRenderedVideoFrames(); @@ -197,7 +197,8 @@ self->mVideoSinkEndRequest.Complete(); self->TryUpdateRenderedVideoFrames(); self->MaybeResolveEndPromise(); - })); + }) + ->Track(mVideoSinkEndRequest); } ConnectListener(); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/mediasource/MediaSource.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/mediasource/MediaSource.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/mediasource/MediaSource.cpp 2017-01-13 01:47:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/mediasource/MediaSource.cpp 2017-01-16 01:50:21.000000000 +0000 @@ -72,8 +72,8 @@ IsWebMForced(DecoderDoctorDiagnostics* aDiagnostics) { bool mp4supported = - DecoderTraits::IsMP4TypeAndEnabled(NS_LITERAL_CSTRING("video/mp4"), - aDiagnostics); + DecoderTraits::IsMP4SupportedType(MediaContentType(MEDIAMIMETYPE("video/mp4")), + aDiagnostics); bool hwsupported = gfx::gfxVars::CanUseHardwareVideoDecoding(); #ifdef MOZ_WIDGET_ANDROID return !mp4supported || !hwsupported || VP9Benchmark::IsVP9DecodeFast() || @@ -93,33 +93,34 @@ return NS_ERROR_DOM_TYPE_ERR; } - MediaContentType contentType{aType}; - if (!contentType.IsValid()) { - return NS_ERROR_DOM_TYPE_ERR; + Maybe contentType = MakeMediaContentType(aType); + if (!contentType) { + return NS_ERROR_DOM_NOT_SUPPORTED_ERR; } - if (DecoderTraits::CanHandleContentType(contentType, aDiagnostics) + if (DecoderTraits::CanHandleContentType(*contentType, aDiagnostics) == CANPLAY_NO) { return NS_ERROR_DOM_NOT_SUPPORTED_ERR; } // Now we know that this media type could be played. // MediaSource imposes extra restrictions, and some prefs. - const nsACString& mimeType = contentType.GetMIMEType(); - if (mimeType.EqualsASCII("video/mp4") || mimeType.EqualsASCII("audio/mp4")) { + const MediaMIMEType& mimeType = contentType->Type(); + if (mimeType == MEDIAMIMETYPE("video/mp4") || + mimeType == MEDIAMIMETYPE("audio/mp4")) { if (!Preferences::GetBool("media.mediasource.mp4.enabled", false)) { return NS_ERROR_DOM_NOT_SUPPORTED_ERR; } return NS_OK; } - if (mimeType.EqualsASCII("video/webm")) { + if (mimeType == MEDIAMIMETYPE("video/webm")) { if (!(Preferences::GetBool("media.mediasource.webm.enabled", false) || IsWebMForced(aDiagnostics))) { return NS_ERROR_DOM_NOT_SUPPORTED_ERR; } return NS_OK; } - if (mimeType.EqualsASCII("audio/webm")) { + if (mimeType == MEDIAMIMETYPE("audio/webm")) { if (!(Preferences::GetBool("media.mediasource.webm.enabled", false) || Preferences::GetBool("media.mediasource.webm.audio.enabled", true))) { return NS_ERROR_DOM_NOT_SUPPORTED_ERR; @@ -237,12 +238,12 @@ aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); return nullptr; } - MediaContentType contentType{aType}; - if (!contentType.IsValid()) { + Maybe contentType = MakeMediaContentType(aType); + if (!contentType) { aRv.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR); return nullptr; } - const nsACString& mimeType = contentType.GetMIMEType(); + const nsACString& mimeType = contentType->Type().AsString(); RefPtr sourceBuffer = new SourceBuffer(this, mimeType); if (!sourceBuffer) { aRv.Throw(NS_ERROR_FAILURE); // XXX need a better error here diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/mediasource/SourceBuffer.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/mediasource/SourceBuffer.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/mediasource/SourceBuffer.cpp 2017-01-13 01:47:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/mediasource/SourceBuffer.cpp 2017-01-16 01:50:22.000000000 +0000 @@ -258,7 +258,6 @@ StartUpdating(); RefPtr self = this; - mPendingRemoval.Begin( mTrackBuffersManager->RangeRemoval(TimeUnit::FromSeconds(aStart), TimeUnit::FromSeconds(aEnd)) ->Then(AbstractThread::MainThread(), __func__, @@ -266,7 +265,8 @@ self->mPendingRemoval.Complete(); self->StopUpdating(); }, - []() { MOZ_ASSERT(false); })); + []() { MOZ_ASSERT(false); }) + ->Track(mPendingRemoval); } void @@ -415,10 +415,11 @@ } StartUpdating(); - mPendingAppend.Begin(mTrackBuffersManager->AppendData(data, mCurrentAttributes) - ->Then(AbstractThread::MainThread(), __func__, this, - &SourceBuffer::AppendDataCompletedWithSuccess, - &SourceBuffer::AppendDataErrored)); + mTrackBuffersManager->AppendData(data, mCurrentAttributes) + ->Then(AbstractThread::MainThread(), __func__, this, + &SourceBuffer::AppendDataCompletedWithSuccess, + &SourceBuffer::AppendDataErrored) + ->Track(mPendingAppend); } void diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/mediasource/TrackBuffersManager.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/mediasource/TrackBuffersManager.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/mediasource/TrackBuffersManager.cpp 2017-01-13 01:47:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/mediasource/TrackBuffersManager.cpp 2017-01-16 01:50:22.000000000 +0000 @@ -733,20 +733,21 @@ // 3. If the input buffer contains one or more complete coded frames, then run the coded frame processing algorithm. RefPtr self = this; - mProcessingRequest.Begin(CodedFrameProcessing() - ->Then(GetTaskQueue(), __func__, - [self] (bool aNeedMoreData) { - self->mProcessingRequest.Complete(); - if (aNeedMoreData) { - self->NeedMoreData(); - } else { - self->ScheduleSegmentParserLoop(); - } - }, - [self] (const MediaResult& aRejectValue) { - self->mProcessingRequest.Complete(); - self->RejectAppend(aRejectValue, __func__); - })); + CodedFrameProcessing() + ->Then(GetTaskQueue(), __func__, + [self] (bool aNeedMoreData) { + self->mProcessingRequest.Complete(); + if (aNeedMoreData) { + self->NeedMoreData(); + } else { + self->ScheduleSegmentParserLoop(); + } + }, + [self] (const MediaResult& aRejectValue) { + self->mProcessingRequest.Complete(); + self->RejectAppend(aRejectValue, __func__); + }) + ->Track(mProcessingRequest); return; } } @@ -842,11 +843,12 @@ RejectAppend(NS_ERROR_FAILURE, __func__); return; } - mDemuxerInitRequest.Begin(mInputDemuxer->Init() - ->Then(GetTaskQueue(), __func__, - this, - &TrackBuffersManager::OnDemuxerResetDone, - &TrackBuffersManager::OnDemuxerInitFailed)); + mInputDemuxer->Init() + ->Then(GetTaskQueue(), __func__, + this, + &TrackBuffersManager::OnDemuxerResetDone, + &TrackBuffersManager::OnDemuxerInitFailed) + ->Track(mDemuxerInitRequest); } void @@ -916,11 +918,12 @@ RejectAppend(NS_ERROR_DOM_NOT_SUPPORTED_ERR, __func__); return; } - mDemuxerInitRequest.Begin(mInputDemuxer->Init() - ->Then(GetTaskQueue(), __func__, - this, - &TrackBuffersManager::OnDemuxerInitDone, - &TrackBuffersManager::OnDemuxerInitFailed)); + mInputDemuxer->Init() + ->Then(GetTaskQueue(), __func__, + this, + &TrackBuffersManager::OnDemuxerInitDone, + &TrackBuffersManager::OnDemuxerInitFailed) + ->Track(mDemuxerInitRequest); } void @@ -1200,10 +1203,11 @@ DoDemuxAudio(); return; } - mVideoTracks.mDemuxRequest.Begin(mVideoTracks.mDemuxer->GetSamples(-1) - ->Then(GetTaskQueue(), __func__, this, - &TrackBuffersManager::OnVideoDemuxCompleted, - &TrackBuffersManager::OnVideoDemuxFailed)); + mVideoTracks.mDemuxer->GetSamples(-1) + ->Then(GetTaskQueue(), __func__, this, + &TrackBuffersManager::OnVideoDemuxCompleted, + &TrackBuffersManager::OnVideoDemuxFailed) + ->Track(mVideoTracks.mDemuxRequest); } void @@ -1224,10 +1228,11 @@ CompleteCodedFrameProcessing(); return; } - mAudioTracks.mDemuxRequest.Begin(mAudioTracks.mDemuxer->GetSamples(-1) - ->Then(GetTaskQueue(), __func__, this, - &TrackBuffersManager::OnAudioDemuxCompleted, - &TrackBuffersManager::OnAudioDemuxFailed)); + mAudioTracks.mDemuxer->GetSamples(-1) + ->Then(GetTaskQueue(), __func__, this, + &TrackBuffersManager::OnAudioDemuxCompleted, + &TrackBuffersManager::OnAudioDemuxFailed) + ->Track(mAudioTracks.mDemuxRequest); } void diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaStreamGraph.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaStreamGraph.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaStreamGraph.cpp 2017-01-13 01:47:03.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaStreamGraph.cpp 2017-01-16 01:49:28.000000000 +0000 @@ -1256,6 +1256,8 @@ // been woken up right after having been to sleep. MOZ_ASSERT(aEndBlockingDecisions >= mStateComputedTime); + UpdateStreamOrder(); + bool ensureNextIteration = false; // Grab pending stream input and compute blocking time @@ -1406,22 +1408,7 @@ // Process graph message from the main thread for this iteration. RunMessagesInQueue(); - UpdateStreamOrder(); - - bool switchingFromSystemClockDriver = false; - { - MonitorAutoLock mon(mMonitor); - switchingFromSystemClockDriver = CurrentDriver()->AsSystemClockDriver() && CurrentDriver()->Switching(); - } - GraphTime stateEnd = std::min(aStateEnd, mEndTime); - - // See Bug 1228226 - If we're switching from the SystemClockDriver, we - // don't want time to advance until after the switch. - if (switchingFromSystemClockDriver) { - stateEnd = mProcessedTime; - } - UpdateGraph(stateEnd); mStateComputedTime = stateEnd; @@ -1730,6 +1717,10 @@ RefPtr driver = CurrentDriver(); MonitorAutoUnlock unlock(mMonitor); driver->Start(); + // It's not safe to Shutdown() a thread from StableState, and + // releasing this may shutdown a SystemClockDriver thread. + // Proxy the release to outside of StableState. + NS_ReleaseOnMainThread(driver.forget(), true); // always proxy } } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaStreamListener.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaStreamListener.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaStreamListener.h 2017-01-13 01:47:03.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaStreamListener.h 2017-01-16 01:49:28.000000000 +0000 @@ -9,6 +9,8 @@ #include "StreamTracks.h" +#include "MediaStreamGraph.h" + namespace mozilla { class AudioSegment; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaTimer.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaTimer.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MediaTimer.h 2017-01-13 01:47:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MediaTimer.h 2017-01-16 01:49:28.000000000 +0000 @@ -145,10 +145,11 @@ } Reset(); mTarget = aTarget; - mRequest.Begin(mMediaTimer->WaitUntil(mTarget, __func__)->Then( + mMediaTimer->WaitUntil(mTarget, __func__)->Then( mTargetThread, __func__, Forward(aResolver), - Forward(aRejector))); + Forward(aRejector)) + ->Track(mRequest); } void CompleteRequest() diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/moz.build firefox-trunk-53.0~a1~hg20170115r329516/dom/media/moz.build --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/moz.build 2017-01-13 01:47:53.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/moz.build 2017-01-16 01:50:42.000000000 +0000 @@ -111,6 +111,7 @@ 'MediaFormatReader.h', 'MediaInfo.h', 'MediaMetadataManager.h', + 'MediaMIMETypes.h', 'MediaPrefs.h', 'MediaQueue.h', 'MediaRecorder.h', @@ -218,6 +219,7 @@ 'MediaFormatReader.cpp', 'MediaInfo.cpp', 'MediaManager.cpp', + 'MediaMIMETypes.cpp', 'MediaPrefs.cpp', 'MediaRecorder.cpp', 'MediaResource.cpp', diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MP3Decoder.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MP3Decoder.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MP3Decoder.cpp 2017-01-13 01:46:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MP3Decoder.cpp 2017-01-16 01:49:04.000000000 +0000 @@ -6,6 +6,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "MP3Decoder.h" +#include "MediaContentType.h" #include "MediaDecoderStateMachine.h" #include "MediaFormatReader.h" #include "MP3Demuxer.h" @@ -37,12 +38,14 @@ } /* static */ -bool MP3Decoder::CanHandleMediaType(const nsACString& aType, - const nsAString& aCodecs) +bool MP3Decoder::IsSupportedType(const MediaContentType& aContentType) { - if (aType.EqualsASCII("audio/mp3") || aType.EqualsASCII("audio/mpeg")) { - return IsEnabled() && - (aCodecs.IsEmpty() || aCodecs.EqualsASCII("mp3")); + if (aContentType.Type() == MEDIAMIMETYPE("audio/mp3") + || aContentType.Type() == MEDIAMIMETYPE("audio/mpeg")) { + return + IsEnabled() + && (aContentType.ExtendedType().Codecs().IsEmpty() + || aContentType.ExtendedType().Codecs().AsString().EqualsASCII("mp3")); } return false; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MP3Decoder.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MP3Decoder.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/MP3Decoder.h 2017-01-13 01:46:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/MP3Decoder.h 2017-01-16 01:49:04.000000000 +0000 @@ -10,7 +10,10 @@ namespace mozilla { -class MP3Decoder : public MediaDecoder { +class MediaContentType; + +class MP3Decoder : public MediaDecoder +{ public: // MediaDecoder interface. explicit MP3Decoder(MediaDecoderOwner* aOwner) : MediaDecoder(aOwner) {} @@ -20,8 +23,7 @@ // Returns true if the MP3 backend is preffed on, and we're running on a // platform that is likely to have decoders for the format. static bool IsEnabled(); - static bool CanHandleMediaType(const nsACString& aType, - const nsAString& aCodecs); + static bool IsSupportedType(const MediaContentType& aContentType); }; } // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/ogg/OggDecoder.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/ogg/OggDecoder.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/ogg/OggDecoder.cpp 2017-01-13 01:47:54.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/ogg/OggDecoder.cpp 2017-01-16 01:50:42.000000000 +0000 @@ -5,6 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "MediaPrefs.h" +#include "MediaContentType.h" #include "MediaDecoderStateMachine.h" #include "MediaFormatReader.h" #include "OggDemuxer.h" @@ -25,41 +26,28 @@ /* static */ bool -OggDecoder::IsEnabled() +OggDecoder::IsSupportedType(const MediaContentType& aContentType) { - return MediaPrefs::OggEnabled(); -} - -/* static */ -bool -OggDecoder::CanHandleMediaType(const nsACString& aMIMETypeExcludingCodecs, - const nsAString& aCodecs) -{ - if (!IsEnabled()) { + if (!MediaPrefs::OggEnabled()) { return false; } - const bool isOggAudio = aMIMETypeExcludingCodecs.EqualsASCII("audio/ogg"); - const bool isOggVideo = - aMIMETypeExcludingCodecs.EqualsASCII("video/ogg") || - aMIMETypeExcludingCodecs.EqualsASCII("application/ogg"); - - if (!isOggAudio && !isOggVideo) { + if (aContentType.Type() != MEDIAMIMETYPE("audio/ogg") && + aContentType.Type() != MEDIAMIMETYPE("video/ogg") && + aContentType.Type() != MEDIAMIMETYPE("application/ogg")) { return false; } - nsTArray codecMimes; - if (aCodecs.IsEmpty()) { + const bool isOggVideo = (aContentType.Type() != MEDIAMIMETYPE("audio/ogg")); + + const MediaCodecs& codecs = aContentType.ExtendedType().Codecs(); + if (codecs.IsEmpty()) { // WebM guarantees that the only codecs it contained are vp8, vp9, opus or vorbis. return true; } // Verify that all the codecs specified are ones that we expect that // we can play. - nsTArray codecs; - if (!ParseCodecsString(aCodecs, codecs)) { - return false; - } - for (const nsString& codec : codecs) { + for (const auto& codec : codecs.Range()) { if ((IsOpusEnabled() && codec.EqualsLiteral("opus")) || codec.EqualsLiteral("vorbis") || (MediaPrefs::FlacInOgg() && codec.EqualsLiteral("flac"))) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/ogg/OggDecoder.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/ogg/OggDecoder.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/ogg/OggDecoder.h 2017-01-13 01:47:54.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/ogg/OggDecoder.h 2017-01-16 01:50:42.000000000 +0000 @@ -10,6 +10,8 @@ namespace mozilla { +class MediaContentType; + class OggDecoder : public MediaDecoder { public: @@ -37,13 +39,10 @@ return mShutdownBit; } - // Returns true if aMIMEType is a type that we think we can render with the - // a platform decoder backend. If aCodecs is non emtpy, it is filled - // with a comma-delimited list of codecs to check support for. - static bool CanHandleMediaType(const nsACString& aMIMETypeExcludingCodecs, - const nsAString& aCodecs); - - static bool IsEnabled(); + // Returns true if aContentType is an Ogg type that we think we can render + // with an enabled platform decoder backend. + // If provided, codecs are checked for support. + static bool IsSupportedType(const MediaContentType& aContentType); protected: void ShutdownBitChanged() override diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp 2017-01-13 01:48:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp 2017-01-16 01:50:43.000000000 +0000 @@ -60,10 +60,11 @@ writer->mCrypto.mSessionIds); mDecrypts.Put(aSample, new DecryptPromiseRequestHolder()); - mDecrypts.Get(aSample)->Begin(mProxy->Decrypt(aSample)->Then( + mProxy->Decrypt(aSample)->Then( mTaskQueue, __func__, this, &EMEDecryptor::Decrypted, - &EMEDecryptor::Decrypted)); + &EMEDecryptor::Decrypted) + ->Track(*mDecrypts.Get(aSample)); return; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/platforms/wrappers/FuzzingWrapper.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/platforms/wrappers/FuzzingWrapper.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/platforms/wrappers/FuzzingWrapper.cpp 2017-01-13 01:48:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/platforms/wrappers/FuzzingWrapper.cpp 2017-01-16 01:51:34.000000000 +0000 @@ -242,23 +242,23 @@ return; } RefPtr self = this; - mDelayedOutputRequest.Begin( - mDelayedOutputTimer->WaitUntil( - mPreviousOutput + mFrameOutputMinimumInterval, - __func__) - ->Then(mTaskQueue, __func__, - [self] () -> void { - if (self->mDelayedOutputRequest.Exists()) { - self->mDelayedOutputRequest.Complete(); - self->OutputDelayedFrame(); - } - }, - [self] () -> void { - if (self->mDelayedOutputRequest.Exists()) { - self->mDelayedOutputRequest.Complete(); - self->ClearDelayedOutput(); - } - })); + mDelayedOutputTimer->WaitUntil( + mPreviousOutput + mFrameOutputMinimumInterval, + __func__) + ->Then(mTaskQueue, __func__, + [self] () -> void { + if (self->mDelayedOutputRequest.Exists()) { + self->mDelayedOutputRequest.Complete(); + self->OutputDelayedFrame(); + } + }, + [self] () -> void { + if (self->mDelayedOutputRequest.Exists()) { + self->mDelayedOutputRequest.Complete(); + self->ClearDelayedOutput(); + } + }) + ->Track(mDelayedOutputRequest); } void diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/platforms/wrappers/H264Converter.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/platforms/wrappers/H264Converter.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/platforms/wrappers/H264Converter.cpp 2017-01-13 01:48:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/platforms/wrappers/H264Converter.cpp 2017-01-16 01:51:34.000000000 +0000 @@ -231,10 +231,11 @@ // Queue the incoming sample. mMediaRawSamples.AppendElement(aSample); - mInitPromiseRequest.Begin(mDecoder->Init() + mDecoder->Init() ->Then(AbstractThread::GetCurrent()->AsTaskQueue(), __func__, this, &H264Converter::OnDecoderInitDone, - &H264Converter::OnDecoderInitFailed)); + &H264Converter::OnDecoderInitFailed) + ->Track(mInitPromiseRequest); return NS_ERROR_NOT_INITIALIZED; } return rv; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/VideoUtils.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/VideoUtils.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/VideoUtils.cpp 2017-01-13 01:47:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/VideoUtils.cpp 2017-01-16 01:49:31.000000000 +0000 @@ -510,11 +510,11 @@ if (trackInfo) { VideoInfo* videoInfo = trackInfo->GetAsVideoInfo(); if (videoInfo) { - Maybe maybeWidth = aContentType.GetWidth(); + Maybe maybeWidth = aContentType.ExtendedType().GetWidth(); if (maybeWidth && *maybeWidth > 0) { videoInfo->mImage.width = *maybeWidth; } - Maybe maybeHeight = aContentType.GetHeight(); + Maybe maybeHeight = aContentType.ExtendedType().GetHeight(); if (maybeHeight && *maybeHeight > 0) { videoInfo->mImage.height = *maybeHeight; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/VideoUtils.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/VideoUtils.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/VideoUtils.h 2017-01-13 01:47:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/VideoUtils.h 2017-01-16 01:49:31.000000000 +0000 @@ -362,14 +362,98 @@ const nsACString& aCodecMIMEType, const MediaContentType& aContentType); -template +namespace detail { + +// aString should start with aMajor + '/'. +constexpr bool +StartsWithMIMETypeMajor(const char* aString, + const char* aMajor, size_t aMajorRemaining) +{ + return (aMajorRemaining == 0 && *aString == '/') + || (*aString == *aMajor + && StartsWithMIMETypeMajor(aString + 1, + aMajor + 1, aMajorRemaining - 1)); +} + +// aString should only contain [a-z0-9\-\.] and a final '\0'. +constexpr bool +EndsWithMIMESubtype(const char* aString, size_t aRemaining) +{ + return aRemaining == 0 + || (((*aString >= 'a' && *aString <= 'z') + || (*aString >= '0' && *aString <= '9') + || *aString == '-' + || *aString == '.') + && EndsWithMIMESubtype(aString + 1, aRemaining - 1)); +} + +// Simple MIME-type literal string checker with a given (major) type. +// Only accepts "{aMajor}/[a-z0-9\-\.]+". +template +constexpr bool +IsMIMETypeWithMajor(const char* aString, size_t aLength, + const char (&aMajor)[MajorLengthPlus1]) +{ + return aLength > MajorLengthPlus1 // Major + '/' + at least 1 char + && StartsWithMIMETypeMajor(aString, aMajor, MajorLengthPlus1 - 1) + && EndsWithMIMESubtype(aString + MajorLengthPlus1, + aLength - MajorLengthPlus1); +} + +} // namespace detail + +// Simple MIME-type string checker. +// Only accepts lowercase "{application,audio,video}/[a-z0-9\-\.]+". +// Add more if necessary. +constexpr bool +IsMediaMIMEType(const char* aString, size_t aLength) +{ + return detail::IsMIMETypeWithMajor(aString, aLength, "application") + || detail::IsMIMETypeWithMajor(aString, aLength, "audio") + || detail::IsMIMETypeWithMajor(aString, aLength, "video"); +} + +// Simple MIME-type string literal checker. +// Only accepts lowercase "{application,audio,video}/[a-z0-9\-\.]+". +// Add more if necessary. +template +constexpr bool +IsMediaMIMEType(const char (&aString)[LengthPlus1]) +{ + return IsMediaMIMEType(aString, LengthPlus1 - 1); +} + +// Simple MIME-type string checker. +// Only accepts lowercase "{application,audio,video}/[a-z0-9\-\.]+". +// Add more if necessary. +inline bool +IsMediaMIMEType(const nsACString& aString) +{ + return IsMediaMIMEType(aString.Data(), aString.Length()); +} + +enum class StringListRangeEmptyItems +{ + // Skip all empty items (empty string will process nothing) + // E.g.: "a,,b" -> ["a", "b"], "" -> nothing + Skip, + // Process all, except if string is empty + // E.g.: "a,,b" -> ["a", "", "b"], "" -> nothing + ProcessEmptyItems, + // Process all, including 1 empty item in an empty string + // E.g.: "a,,b" -> ["a", "", "b"], "" -> [""] + ProcessAll +}; + +template class StringListRange { typedef typename String::char_type CharType; typedef const CharType* Pointer; public: - // Iterator into range, trims items and skips empty items. + // Iterator into range, trims items and optionally skips empty items. class Iterator { public: @@ -382,6 +466,8 @@ SearchItemAt(mComma + 1); return *this; } + // DereferencedType should be 'const nsDependent[C]String' pointing into + // mList (which is 'const ns[C]String&'). typedef decltype(Substring(Pointer(), Pointer())) DereferencedType; DereferencedType operator*() { @@ -399,12 +485,21 @@ // First, skip leading whitespace. for (Pointer p = start; ; ++p) { if (p >= mRangeEnd) { - mStart = mEnd = mComma = mRangeEnd; + if (p > mRangeEnd + + (empties != StringListRangeEmptyItems::Skip ? 1 : 0)) { + p = mRangeEnd + + (empties != StringListRangeEmptyItems::Skip ? 1 : 0); + } + mStart = mEnd = mComma = p; return; } auto c = *p; if (c == CharType(',')) { - // Comma -> Empty item -> Skip. + // Comma -> Empty item -> Skip or process? + if (empties != StringListRangeEmptyItems::Skip) { + mStart = mEnd = mComma = p; + return; + } } else if (c != CharType(' ')) { mStart = p; break; @@ -444,30 +539,37 @@ }; explicit StringListRange(const String& aList) : mList(aList) {} - Iterator begin() + Iterator begin() const { - return Iterator(mList.Data(), mList.Length()); + return Iterator(mList.Data() + + ((empties == StringListRangeEmptyItems::ProcessEmptyItems + && mList.Length() == 0) ? 1 : 0), + mList.Length()); } - Iterator end() + Iterator end() const { - return Iterator(mList.Data() + mList.Length(), 0); + return Iterator(mList.Data() + mList.Length() + + (empties != StringListRangeEmptyItems::Skip ? 1 : 0), + 0); } private: const String& mList; }; -template -StringListRange +template +StringListRange MakeStringListRange(const String& aList) { - return StringListRange(aList); + return StringListRange(aList); } -template +template static bool StringListContains(const ListString& aList, const ItemString& aItem) { - for (const auto& listItem : MakeStringListRange(aList)) { + for (const auto& listItem : MakeStringListRange(aList)) { if (listItem.Equals(aItem)) { return true; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/wave/WaveDecoder.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/wave/WaveDecoder.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/wave/WaveDecoder.cpp 2017-01-13 01:51:18.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/wave/WaveDecoder.cpp 2017-01-16 01:53:43.000000000 +0000 @@ -5,6 +5,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "WaveDemuxer.h" +#include "MediaContentType.h" #include "MediaDecoderStateMachine.h" #include "WaveDecoder.h" #include "MediaFormatReader.h" @@ -25,18 +26,20 @@ this, new MediaFormatReader(this, new WAVDemuxer(GetResource()))); } -/* static */ -bool -WaveDecoder::CanHandleMediaType(const nsACString& aType, - const nsAString& aCodecs) +/* static */ bool +WaveDecoder::IsSupportedType(const MediaContentType& aContentType) { if (!IsWaveEnabled()) { return false; } - if (aType.EqualsASCII("audio/wave") || aType.EqualsASCII("audio/x-wav") || - aType.EqualsASCII("audio/wav") || aType.EqualsASCII("audio/x-pn-wav")) { - return (aCodecs.IsEmpty() || aCodecs.EqualsASCII("1") || - aCodecs.EqualsASCII("6") || aCodecs.EqualsASCII("7")); + if (aContentType.Type() == MEDIAMIMETYPE("audio/wave") + || aContentType.Type() == MEDIAMIMETYPE("audio/x-wav") + || aContentType.Type() == MEDIAMIMETYPE("audio/wav") + || aContentType.Type() == MEDIAMIMETYPE("audio/x-pn-wav")) { + return (aContentType.ExtendedType().Codecs().IsEmpty() + || aContentType.ExtendedType().Codecs().AsString().EqualsASCII("1") + || aContentType.ExtendedType().Codecs().AsString().EqualsASCII("6") + || aContentType.ExtendedType().Codecs().AsString().EqualsASCII("7")); } return false; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/wave/WaveDecoder.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/wave/WaveDecoder.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/wave/WaveDecoder.h 2017-01-13 01:51:18.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/wave/WaveDecoder.h 2017-01-16 01:53:43.000000000 +0000 @@ -10,15 +10,19 @@ namespace mozilla { -class WaveDecoder : public MediaDecoder { +class MediaContentType; + +class WaveDecoder : public MediaDecoder +{ public: // MediaDecoder interface. explicit WaveDecoder(MediaDecoderOwner* aOwner) : MediaDecoder(aOwner) {} MediaDecoder* Clone(MediaDecoderOwner* aOwner) override; MediaDecoderStateMachine* CreateStateMachine() override; - static bool CanHandleMediaType(const nsACString& aType, - const nsAString& aCodecs); + // Returns true if the Wave backend is pref'ed on, and we're running on a + // platform that is likely to have decoders for the format. + static bool IsSupportedType(const MediaContentType& aContentType); }; } // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webaudio/AudioContext.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webaudio/AudioContext.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webaudio/AudioContext.h 2017-01-13 01:51:18.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webaudio/AudioContext.h 2017-01-16 01:53:56.000000000 +0000 @@ -42,7 +42,7 @@ namespace dom { -enum class AudioContextState : uint32_t; +enum class AudioContextState : uint8_t; class AnalyserNode; class AudioBuffer; class AudioBufferSourceNode; @@ -71,7 +71,7 @@ class PeriodicWave; struct PeriodicWaveConstraints; class Promise; -enum class OscillatorType : uint32_t; +enum class OscillatorType : uint8_t; // This is addrefed by the OscillatorNodeEngine on the main thread // and then used from the MSG thread. diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webaudio/AudioNodeStream.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webaudio/AudioNodeStream.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webaudio/AudioNodeStream.cpp 2017-01-13 01:51:19.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webaudio/AudioNodeStream.cpp 2017-01-16 01:53:57.000000000 +0000 @@ -350,11 +350,6 @@ ChannelCountMode aChannelCountMode, ChannelInterpretation aChannelInterpretation) { - // Make sure that we're not clobbering any significant bits by fitting these - // values in 16 bits. - MOZ_ASSERT(int(aChannelCountMode) < INT16_MAX); - MOZ_ASSERT(int(aChannelInterpretation) < INT16_MAX); - mNumberOfInputChannels = aNumberOfChannels; mChannelCountMode = aChannelCountMode; mChannelInterpretation = aChannelInterpretation; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webaudio/MediaBufferDecoder.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webaudio/MediaBufferDecoder.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webaudio/MediaBufferDecoder.cpp 2017-01-13 01:51:19.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webaudio/MediaBufferDecoder.cpp 2017-01-16 01:53:58.000000000 +0000 @@ -18,6 +18,7 @@ #include "DecoderTraits.h" #include "AudioContext.h" #include "AudioBuffer.h" +#include "MediaContentType.h" #include "nsContentUtils.h" #include "nsIScriptObjectPrincipal.h" #include "nsIScriptError.h" @@ -98,7 +99,7 @@ class MediaDecodeTask final : public Runnable { public: - MediaDecodeTask(const char* aContentType, uint8_t* aBuffer, + MediaDecodeTask(const MediaContentType& aContentType, uint8_t* aBuffer, uint32_t aLength, WebAudioDecodeJob& aDecodeJob) : mContentType(aContentType) @@ -152,7 +153,7 @@ } private: - nsCString mContentType; + MediaContentType mContentType; uint8_t* mBuffer; uint32_t mLength; WebAudioDecodeJob& mDecodeJob; @@ -215,7 +216,7 @@ RefPtr resource = new BufferMediaResource(static_cast (mBuffer), - mLength, principal, mContentType); + mLength, principal, mContentType.Type().AsString()); MOZ_ASSERT(!mBufferDecoder); mBufferDecoder = new BufferDecoder(resource, @@ -295,7 +296,8 @@ if (!mMediaInfo.mAudio.GetAsAudioInfo()->mMimeType.IsEmpty()) { codec = nsPrintfCString("webaudio; %s", mMediaInfo.mAudio.GetAsAudioInfo()->mMimeType.get()); } else { - codec = nsPrintfCString("webaudio;resource; %s", mContentType.get()); + codec = nsPrintfCString("webaudio;resource; %s", + mContentType.Type().AsString().Data()); } nsCOMPtr task = NS_NewRunnableFunction([codec]() -> void { @@ -501,10 +503,12 @@ AsyncDecodeWebAudio(const char* aContentType, uint8_t* aBuffer, uint32_t aLength, WebAudioDecodeJob& aDecodeJob) { + Maybe contentType = MakeMediaContentType(aContentType); // Do not attempt to decode the media if we were not successful at sniffing // the content type. if (!*aContentType || - strcmp(aContentType, APPLICATION_OCTET_STREAM) == 0) { + strcmp(aContentType, APPLICATION_OCTET_STREAM) == 0 || + !contentType) { nsCOMPtr event = new ReportResultTask(aDecodeJob, &WebAudioDecodeJob::OnFailure, @@ -515,7 +519,7 @@ } RefPtr task = - new MediaDecodeTask(aContentType, aBuffer, aLength, aDecodeJob); + new MediaDecodeTask(*contentType, aBuffer, aLength, aDecodeJob); if (!task->CreateReader()) { nsCOMPtr event = new ReportResultTask(aDecodeJob, diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webm/EbmlComposer.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webm/EbmlComposer.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webm/EbmlComposer.cpp 2017-01-13 01:51:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webm/EbmlComposer.cpp 2017-01-16 01:54:24.000000000 +0000 @@ -46,7 +46,7 @@ if (mWidth > 0 && mHeight > 0) { writeVideoTrack(&ebml, 0x1, 0, "V_VP8", mWidth, mHeight, - mDisplayWidth, mDisplayHeight, mFrameRate); + mDisplayWidth, mDisplayHeight); } // Audio if (mCodecPrivateData.Length() > 0) { @@ -176,19 +176,16 @@ void EbmlComposer::SetVideoConfig(uint32_t aWidth, uint32_t aHeight, - uint32_t aDisplayWidth, uint32_t aDisplayHeight, - float aFrameRate) + uint32_t aDisplayWidth, uint32_t aDisplayHeight) { MOZ_ASSERT(aWidth > 0, "Width should > 0"); MOZ_ASSERT(aHeight > 0, "Height should > 0"); MOZ_ASSERT(aDisplayWidth > 0, "DisplayWidth should > 0"); MOZ_ASSERT(aDisplayHeight > 0, "DisplayHeight should > 0"); - MOZ_ASSERT(aFrameRate > 0, "FrameRate should > 0"); mWidth = aWidth; mHeight = aHeight; mDisplayWidth = aDisplayWidth; mDisplayHeight = aDisplayHeight; - mFrameRate = aFrameRate; } void @@ -228,7 +225,6 @@ , mClusterTimecode(0) , mWidth(0) , mHeight(0) - , mFrameRate(0) , mSampleFreq(0) , mChannels(0) {} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webm/EbmlComposer.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webm/EbmlComposer.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webm/EbmlComposer.h 2017-01-13 01:51:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webm/EbmlComposer.h 2017-01-16 01:54:24.000000000 +0000 @@ -19,8 +19,8 @@ /* * Assign the parameter which header required. */ - void SetVideoConfig(uint32_t aWidth, uint32_t aHeight, uint32_t aDisplayWidth, - uint32_t aDisplayHeight, float aFrameRate); + void SetVideoConfig(uint32_t aWidth, uint32_t aHeight, + uint32_t aDisplayWidth, uint32_t aDisplayHeight); void SetAudioConfig(uint32_t aSampleFreq, uint32_t aChannels); /* @@ -78,7 +78,6 @@ int mHeight; int mDisplayWidth; int mDisplayHeight; - float mFrameRate; // Audio configuration float mSampleFreq; int mChannels; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webm/WebMDecoder.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webm/WebMDecoder.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webm/WebMDecoder.cpp 2017-01-13 01:51:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webm/WebMDecoder.cpp 2017-01-16 01:54:24.000000000 +0000 @@ -5,11 +5,11 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "mozilla/Preferences.h" +#include "MediaContentType.h" #include "MediaDecoderStateMachine.h" #include "WebMDemuxer.h" #include "WebMDecoder.h" #include "VideoUtils.h" -#include "nsContentTypeParser.h" namespace mozilla { @@ -22,47 +22,33 @@ /* static */ bool -WebMDecoder::IsEnabled() +WebMDecoder::IsSupportedType(const MediaContentType& aContentType) { - return Preferences::GetBool("media.webm.enabled"); -} - -/* static */ -bool -WebMDecoder::CanHandleMediaType(const nsACString& aMIMETypeExcludingCodecs, - const nsAString& aCodecs) -{ - if (!IsEnabled()) { + if (!Preferences::GetBool("media.webm.enabled")) { return false; } - const bool isWebMAudio = aMIMETypeExcludingCodecs.EqualsASCII("audio/webm"); - const bool isWebMVideo = aMIMETypeExcludingCodecs.EqualsASCII("video/webm"); - if (!isWebMAudio && !isWebMVideo) { + bool isVideo = aContentType.Type() == MEDIAMIMETYPE("video/webm"); + if (aContentType.Type() != MEDIAMIMETYPE("audio/webm") && !isVideo) { return false; } - nsTArray codecMimes; - if (aCodecs.IsEmpty()) { + const MediaCodecs& codecs = aContentType.ExtendedType().Codecs(); + if (codecs.IsEmpty()) { // WebM guarantees that the only codecs it contained are vp8, vp9, opus or vorbis. return true; } // Verify that all the codecs specified are ones that we expect that // we can play. - nsTArray codecs; - if (!ParseCodecsString(aCodecs, codecs)) { - return false; - } - for (const nsString& codec : codecs) { + for (const auto& codec : codecs.Range()) { if (codec.EqualsLiteral("opus") || codec.EqualsLiteral("vorbis")) { continue; } // Note: Only accept VP8/VP9 in a video content type, not in an audio // content type. - if (isWebMVideo && + if (isVideo && (codec.EqualsLiteral("vp8") || codec.EqualsLiteral("vp8.0") || codec.EqualsLiteral("vp9") || codec.EqualsLiteral("vp9.0"))) { - continue; } // Some unsupported codec. @@ -71,22 +57,6 @@ return true; } -/* static */ bool -WebMDecoder::CanHandleMediaType(const nsAString& aContentType) -{ - nsContentTypeParser parser(aContentType); - nsAutoString mimeType; - nsresult rv = parser.GetType(mimeType); - if (NS_FAILED(rv)) { - return false; - } - nsString codecs; - parser.GetParameter("codecs", codecs); - - return CanHandleMediaType(NS_ConvertUTF16toUTF8(mimeType), - codecs); -} - void WebMDecoder::GetMozDebugReaderData(nsAString& aString) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webm/WebMDecoder.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webm/WebMDecoder.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webm/WebMDecoder.h 2017-01-13 01:51:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webm/WebMDecoder.h 2017-01-16 01:54:24.000000000 +0000 @@ -11,6 +11,8 @@ namespace mozilla { +class MediaContentType; + class WebMDecoder : public MediaDecoder { public: @@ -23,17 +25,10 @@ } MediaDecoderStateMachine* CreateStateMachine() override; - // Returns true if the WebM backend is preffed on. - static bool IsEnabled(); - - // Returns true if aMIMEType is a type that we think we can render with the - // a WebM platform decoder backend. If aCodecs is non emtpy, it is filled - // with a comma-delimited list of codecs to check support for. Notes in - // out params whether the codecs string contains Opus/Vorbis or VP8/VP9. - static bool CanHandleMediaType(const nsACString& aMIMETypeExcludingCodecs, - const nsAString& aCodecs); - - static bool CanHandleMediaType(const nsAString& aContentType); + // Returns true if aContentType is a WebM type that we think we can render + // with an enabled platform decoder backend. + // If provided, codecs are checked for support. + static bool IsSupportedType(const MediaContentType& aContentType); void GetMozDebugReaderData(nsAString& aString) override; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webm/WebMWriter.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webm/WebMWriter.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webm/WebMWriter.cpp 2017-01-13 01:51:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webm/WebMWriter.cpp 2017-01-16 01:54:24.000000000 +0000 @@ -57,8 +57,7 @@ VP8Metadata* meta = static_cast(aMetadata); MOZ_ASSERT(meta, "Cannot find vp8 encoder metadata"); mEbmlComposer->SetVideoConfig(meta->mWidth, meta->mHeight, - meta->mDisplayWidth, meta->mDisplayHeight, - meta->mEncodedFrameRate); + meta->mDisplayWidth, meta->mDisplayHeight); mMetadataRequiredFlag = mMetadataRequiredFlag & ~ContainerWriter::CREATE_VIDEO_TRACK; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webm/WebMWriter.h firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webm/WebMWriter.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/media/webm/WebMWriter.h 2017-01-13 01:51:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/media/webm/WebMWriter.h 2017-01-16 01:54:24.000000000 +0000 @@ -31,7 +31,6 @@ int32_t mHeight; int32_t mDisplayWidth; int32_t mDisplayHeight; - int32_t mEncodedFrameRate; MetadataKind GetKind() const override { return METADATA_VP8; } }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/moz.build firefox-trunk-53.0~a1~hg20170115r329516/dom/moz.build --- firefox-trunk-53.0~a1~hg20170113r329171/dom/moz.build 2017-01-13 01:52:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/moz.build 2017-01-16 01:54:28.000000000 +0000 @@ -43,6 +43,7 @@ 'browser-element', 'cache', 'canvas', + 'commandhandler', 'crypto', 'devicestorage', 'encoding', @@ -96,6 +97,7 @@ 'u2f', 'console', 'performance', + 'webbrowserpersist', 'xhr', 'worklet', ] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/notification/Notification.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/notification/Notification.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/notification/Notification.cpp 2017-01-13 01:52:12.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/notification/Notification.cpp 2017-01-16 01:55:02.000000000 +0000 @@ -2558,6 +2558,12 @@ } RefPtr swm = ServiceWorkerManager::GetInstance(); + if (!swm) { + // browser shutdown began + mRv = NS_ERROR_FAILURE; + return true; + } + RefPtr registration = swm->GetRegistration(principal, mScope); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/tests/browser/browser_cancel_keydown_keypress_event.js firefox-trunk-53.0~a1~hg20170115r329516/dom/tests/browser/browser_cancel_keydown_keypress_event.js --- firefox-trunk-53.0~a1~hg20170113r329171/dom/tests/browser/browser_cancel_keydown_keypress_event.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/tests/browser/browser_cancel_keydown_keypress_event.js 2017-01-16 01:56:41.000000000 +0000 @@ -0,0 +1,41 @@ +const URL = + "https://example.com/browser/dom/tests/browser/prevent_return_key.html"; + +// Wait for alert dialog and dismiss it immediately. +function awaitAndCloseAlertDialog() { + return new Promise(resolve => { + function onDialogShown(node) { + Services.obs.removeObserver(onDialogShown, "tabmodal-dialog-loaded"); + let button = node.ui.button0; + button.click(); + resolve(); + } + Services.obs.addObserver(onDialogShown, "tabmodal-dialog-loaded"); + }); +} + +add_task(function* () { + let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, URL); + let browser = tab.linkedBrowser; + + // Focus and enter random text on input. + yield ContentTask.spawn(browser, null, function* () { + let input = content.document.getElementById("input"); + input.focus(); + input.value = "abcd"; + }); + + // Send return key (cross process) to submit the form implicitly. + let dialogShown = awaitAndCloseAlertDialog(); + EventUtils.synthesizeKey("VK_RETURN", {}); + yield dialogShown; + + // Check that the form should not have been submitted. + yield ContentTask.spawn(browser, null, function* () { + let result = content.document.getElementById("result").innerHTML; + info("submit result: " + result); + is(result, "not submitted", "form should not have submitted"); + }); + + gBrowser.removeCurrentTab(); +}); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/tests/browser/browser.ini firefox-trunk-53.0~a1~hg20170115r329516/dom/tests/browser/browser.ini --- firefox-trunk-53.0~a1~hg20170113r329171/dom/tests/browser/browser.ini 2017-01-13 01:53:36.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/tests/browser/browser.ini 2017-01-16 01:56:41.000000000 +0000 @@ -21,6 +21,9 @@ [browser_bug1004814.js] [browser_bug1008941_dismissGeolocationHanger.js] [browser_bug1238427.js] +[browser_cancel_keydown_keypress_event.js] +support-files = + prevent_return_key.html [browser_ConsoleAPI_originAttributes.js] [browser_ConsoleAPITests.js] skip-if = e10s diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/tests/browser/prevent_return_key.html firefox-trunk-53.0~a1~hg20170115r329516/dom/tests/browser/prevent_return_key.html --- firefox-trunk-53.0~a1~hg20170113r329171/dom/tests/browser/prevent_return_key.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/tests/browser/prevent_return_key.html 2017-01-16 01:56:41.000000000 +0000 @@ -0,0 +1,36 @@ + + + + + Prevent return key should not submit form + + + + +
    + + +
    +

    not submitted

    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/moz.build firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/moz.build --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/moz.build 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/moz.build 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,49 @@ +# -*- Mode: python; 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/. + +XPIDL_SOURCES += [ + 'nsCWebBrowserPersist.idl', + 'nsIWebBrowserPersist.idl', + 'nsIWebBrowserPersistable.idl', + 'nsIWebBrowserPersistDocument.idl', +] + +XPIDL_MODULE = 'webbrowserpersist' + +IPDL_SOURCES += [ + 'PWebBrowserPersistDocument.ipdl', + 'PWebBrowserPersistResources.ipdl', + 'PWebBrowserPersistSerialize.ipdl', +] + +SOURCES += [ + 'nsWebBrowserPersist.cpp', + 'WebBrowserPersistDocumentChild.cpp', + 'WebBrowserPersistDocumentParent.cpp', + 'WebBrowserPersistLocalDocument.cpp', + 'WebBrowserPersistRemoteDocument.cpp', + 'WebBrowserPersistResourcesChild.cpp', + 'WebBrowserPersistResourcesParent.cpp', + 'WebBrowserPersistSerializeChild.cpp', + 'WebBrowserPersistSerializeParent.cpp', +] + +EXPORTS.mozilla += [ + 'WebBrowserPersistDocumentChild.h', + 'WebBrowserPersistDocumentParent.h', + 'WebBrowserPersistLocalDocument.h', +] + +include('/ipc/chromium/chromium-config.mozbuild') + +FINAL_LIBRARY = 'xul' +LOCAL_INCLUDES += [ + '/dom/base', + '/dom/html', +] + +if CONFIG['GNU_CXX']: + CXXFLAGS += ['-Wno-error=shadow'] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/nsCWebBrowserPersist.idl firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/nsCWebBrowserPersist.idl --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/nsCWebBrowserPersist.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/nsCWebBrowserPersist.idl 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,15 @@ +/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 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/. */ + +#include "nsIWebBrowserPersist.idl" + +%{ C++ +// {7E677795-C582-4cd1-9E8D-8271B3474D2A} +#define NS_WEBBROWSERPERSIST_CID \ +{ 0x7e677795, 0xc582, 0x4cd1, { 0x9e, 0x8d, 0x82, 0x71, 0xb3, 0x47, 0x4d, 0x2a } } +#define NS_WEBBROWSERPERSIST_CONTRACTID \ +"@mozilla.org/embedding/browser/nsWebBrowserPersist;1" +%} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/nsIWebBrowserPersistable.idl firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/nsIWebBrowserPersistable.idl --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/nsIWebBrowserPersistable.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/nsIWebBrowserPersistable.idl 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,41 @@ +/* -*- Mode: IDL; indent-tabs-mode: nil; c-basic-offset: 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/. */ + +#include "nsISupports.idl" + +interface nsIWebBrowserPersistDocumentReceiver; + +/** + * Interface for objects which represent a document that can be + * serialized with nsIWebBrowserPersist. This interface is + * asynchronous because the actual document can be in another process + * (e.g., if this object is an nsFrameLoader for an out-of-process + * frame). + * + * Warning: this is currently implemented only by nsFrameLoader, and + * may change in the future to become more frame-loader-specific or be + * merged into nsIFrameLoader. See bug 1101100 comment #34. + * + * @see nsIWebBrowserPersistDocumentReceiver + * @see nsIWebBrowserPersistDocument + * @see nsIWebBrowserPersist + * + * @param aOuterWindowID + * The outer window ID of the subframe we'd like to persist. + * If set at 0, nsIWebBrowserPersistable will attempt to persist + * the top-level document. If the outer window ID is for a subframe + * that does not exist, or is not held beneath the nsIWebBrowserPersistable, + * aRecv's onError method will be called with NS_ERROR_NO_CONTENT. + * @param aRecv + * The nsIWebBrowserPersistDocumentReceiver is a callback that + * will be fired once the document is ready for persisting. + */ +[scriptable, uuid(f4c3fa8e-83e9-49f8-ac6f-951fc7541fe4)] +interface nsIWebBrowserPersistable : nsISupports +{ + void startPersistence(in unsigned long long aOuterWindowID, + in nsIWebBrowserPersistDocumentReceiver aRecv); +}; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/nsIWebBrowserPersistDocument.idl firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/nsIWebBrowserPersistDocument.idl --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/nsIWebBrowserPersistDocument.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/nsIWebBrowserPersistDocument.idl 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,197 @@ +/* -*- Mode: IDL; indent-tabs-mode: nil; c-basic-offset: 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/. */ + +#include "nsISupports.idl" + +interface nsIDOMDocument; +interface nsIInputStream; +interface nsIOutputStream; +interface nsITabParent; +interface nsIWebBrowserPersistResourceVisitor; +interface nsIWebBrowserPersistWriteCompletion; + +/** + * Interface for the URI-mapping information that can be supplied when + * serializing the DOM of an nsIWebBrowserPersistDocument. + * + * @see nsIWebBrowserPersistDocument + */ +[scriptable, uuid(d52e8b93-2771-45e8-a5b0-6e12b667046b)] +interface nsIWebBrowserPersistURIMap : nsISupports +{ + /** + * The number of URI mappings. + */ + readonly attribute unsigned long numMappedURIs; + + /** + * Obtain the URI mapping at the given index, which must be less than + * numMappedURIs, as a pair of URI spec strings. + */ + void getURIMapping(in unsigned long aIndex, + out AUTF8String aMapFrom, + out AUTF8String aMapTo); + + /** + * The spec of the base URI that the document will have after it is + * serialized. + */ + readonly attribute AUTF8String targetBaseURI; +}; + +/** + * Interface representing a document that can be serialized with + * nsIWebBrowserPersist; it may or may not be in this process. Some + * information is exposed as attributes, which may or may not reflect + * changes made to the underlying document; most of these are + * self-explanatory from their names and types. + */ +[scriptable, uuid(74aa4918-5d15-46b6-9ccf-74f9696d721d)] +interface nsIWebBrowserPersistDocument : nsISupports +{ + readonly attribute boolean isPrivate; + readonly attribute AUTF8String documentURI; + readonly attribute AUTF8String baseURI; + readonly attribute ACString contentType; + readonly attribute ACString characterSet; + readonly attribute AString title; + readonly attribute AString referrer; + readonly attribute AString contentDisposition; + readonly attribute nsIInputStream postData; + + /** + * The cache key. Unlike in nsISHEntry, where it's wrapped in an + * nsISupportsPRUint32, this is just the integer. + */ + readonly attribute unsigned long cacheKey; + + /** + * This attribute is set by nsIWebBrowserPersist implementations to + * propagate persist flags that apply to the DOM traversal and + * serialization (rather than to managing file I/O). + */ + attribute unsigned long persistFlags; + + /** + * Walk the DOM searching for external resources needed to render it. + * The visitor callbacks may be called either before or after + * readResources returns. + * + * @see nsIWebBrowserPersistResourceVisitor + */ + void readResources(in nsIWebBrowserPersistResourceVisitor aVisitor); + + /** + * Serialize the document's DOM. + * + * @param aStream The output stream to write the document to. + * + * @param aURIMap Optional; specifies URI rewriting to perform on + * external references (as read by readResources). + * If given, also causes relative hyperlinks to be + * converted to absolute in the written text. + * + * @param aRequestedContentType + * The desired MIME type to save the document as; + * optional and defaults to the document's type. + * (If no encoder exists for that type, "text/html" + * is used instead.) + * + * @param aEncoderFlags Flags to pass to the encoder. + * + * @param aWrapColumn Desired text width, ignored if wrapping is not + * specified by the encoding flags, or if 0. + * + * @param aCompletion Callback invoked when writing is complete. + * It may be called either before or after writeContent + * returns. + * + * @see nsIDocumentEncoder + */ + void writeContent(in nsIOutputStream aStream, + in nsIWebBrowserPersistURIMap aURIMap, + in ACString aRequestedContentType, + in unsigned long aEncoderFlags, + in unsigned long aWrapColumn, + in nsIWebBrowserPersistWriteCompletion aCompletion); +}; + +/** + * Asynchronous visitor that receives external resources linked by an + * nsIWebBrowserPersistDocument and which are needed to render the + * document. + */ +[scriptable, uuid(8ce37706-b7d3-481a-be68-54f174fc0d0a)] +interface nsIWebBrowserPersistResourceVisitor : nsISupports +{ + /** + * Indicates a resource that is not a document; e.g., an image, script, + * or stylesheet. + * + * @param aDocument The document containing the reference. + * @param aURI The absolute URI spec for the referenced resource. + */ + void visitResource(in nsIWebBrowserPersistDocument aDocument, + in AUTF8String aURI); + /** + * Indicates a subdocument resource; e.g., a frame or iframe. + * + * @param aDocument The document containing the reference. + * @param aSubDocument The referenced document. + */ + void visitDocument(in nsIWebBrowserPersistDocument aDocument, + in nsIWebBrowserPersistDocument aSubDocument); + + /** + * Indicates that the document traversal is complete. + * + * @param aDocument The document that was being traversed. + * @param aStatus Indicates whether the traversal encountered an error. + */ + void endVisit(in nsIWebBrowserPersistDocument aDocument, + in nsresult aStatus); +}; + +/** + * Asynchronous callback for when nsIWebBrowserPersistDocument is finished + * serializing the document's DOM. + */ +[scriptable, function, uuid(a07e6892-38ae-4207-8340-7fa6ec446ed6)] +interface nsIWebBrowserPersistWriteCompletion : nsISupports +{ + /** + * Indicates that serialization is finished. + * + * @param aDocument The document that was being serialized. + * + * @param aStream The stream that was being written to. If it + * needs to be closed, the callback must do that; + * the serialization process leaves it open. + * + * @param aContentType The content type with which the document was + * actually serialized; this may be useful to set + * metadata on the result, or if uploading it. + * + * @param aStatus Indicates whether serialization encountered an error. + */ + void onFinish(in nsIWebBrowserPersistDocument aDocument, + in nsIOutputStream aStream, + in ACString aContentType, + in nsresult aStatus); +}; + +/** + * Asynchronous callback for creating a persistable document from some + * other object. + * + * @see nsIWebBrowserPersistable. + */ +[scriptable, uuid(321e3174-594f-4036-b7be-791b821bd376)] +interface nsIWebBrowserPersistDocumentReceiver : nsISupports +{ + void onDocumentReady(in nsIWebBrowserPersistDocument aDocument); + void onError(in nsresult aFailure); +}; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/nsIWebBrowserPersist.idl firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/nsIWebBrowserPersist.idl --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/nsIWebBrowserPersist.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/nsIWebBrowserPersist.idl 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,286 @@ +/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 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/. */ + +#include "nsICancelable.idl" + +interface nsIURI; +interface nsIInputStream; +interface nsIDOMDocument; +interface nsIWebProgressListener; +interface nsIFile; +interface nsIChannel; +interface nsILoadContext; + +/** + * Interface for persisting DOM documents and URIs to local or remote storage. + */ +[scriptable, uuid(8cd752a4-60b1-42c3-a819-65c7a1138a28)] +interface nsIWebBrowserPersist : nsICancelable +{ + /** No special persistence behaviour. */ + const unsigned long PERSIST_FLAGS_NONE = 0; + /** Use cached data if present (skipping validation), else load from network */ + const unsigned long PERSIST_FLAGS_FROM_CACHE = 1; + /** Bypass the cached data. */ + const unsigned long PERSIST_FLAGS_BYPASS_CACHE = 2; + /** Ignore any redirected data (usually adverts). */ + const unsigned long PERSIST_FLAGS_IGNORE_REDIRECTED_DATA = 4; + /** Ignore IFRAME content (usually adverts). */ + const unsigned long PERSIST_FLAGS_IGNORE_IFRAMES = 8; + /** Do not run the incoming data through a content converter e.g. to decompress it */ + const unsigned long PERSIST_FLAGS_NO_CONVERSION = 16; + /** Replace existing files on the disk (use with due diligence!) */ + const unsigned long PERSIST_FLAGS_REPLACE_EXISTING_FILES = 32; + /** Don't modify or add base tags */ + const unsigned long PERSIST_FLAGS_NO_BASE_TAG_MODIFICATIONS = 64; + /** Make changes to original dom rather than cloning nodes */ + const unsigned long PERSIST_FLAGS_FIXUP_ORIGINAL_DOM = 128; + /** Fix links relative to destination location (not origin) */ + const unsigned long PERSIST_FLAGS_FIXUP_LINKS_TO_DESTINATION = 256; + /** Don't make any adjustments to links */ + const unsigned long PERSIST_FLAGS_DONT_FIXUP_LINKS = 512; + /** Force serialization of output (one file at a time; not concurrent) */ + const unsigned long PERSIST_FLAGS_SERIALIZE_OUTPUT = 1024; + /** Don't make any adjustments to filenames */ + const unsigned long PERSIST_FLAGS_DONT_CHANGE_FILENAMES = 2048; + /** Fail on broken inline links */ + const unsigned long PERSIST_FLAGS_FAIL_ON_BROKEN_LINKS = 4096; + /** + * Automatically cleanup after a failed or cancelled operation, deleting all + * created files and directories. This flag does nothing for failed upload + * operations to remote servers. + */ + const unsigned long PERSIST_FLAGS_CLEANUP_ON_FAILURE = 8192; + /** + * Let the WebBrowserPersist decide whether the incoming data is encoded + * and whether it needs to go through a content converter e.g. to + * decompress it. + */ + const unsigned long PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION = 16384; + /** + * Append the downloaded data to the target file. + * This can only be used when persisting to a local file. + */ + const unsigned long PERSIST_FLAGS_APPEND_TO_FILE = 32768; + + /** + * Force relevant cookies to be sent with this load even if normally they + * wouldn't be. + */ + const unsigned long PERSIST_FLAGS_FORCE_ALLOW_COOKIES = 65536; + + /** + * Flags governing how data is fetched and saved from the network. + * It is best to set this value explicitly unless you are prepared + * to accept the default values. + */ + attribute unsigned long persistFlags; + + /** Persister is ready to save data */ + const unsigned long PERSIST_STATE_READY = 1; + /** Persister is saving data */ + const unsigned long PERSIST_STATE_SAVING = 2; + /** Persister has finished saving data */ + const unsigned long PERSIST_STATE_FINISHED = 3; + + /** + * Current state of the persister object. + */ + readonly attribute unsigned long currentState; + + /** + * Value indicating the success or failure of the persist + * operation. + * + * @throws NS_BINDING_ABORTED Operation cancelled. + * @throws NS_ERROR_FAILURE Non-specific failure. + */ + readonly attribute nsresult result; + + /** + * Callback listener for progress notifications. The object that the + * embbedder supplies may also implement nsIInterfaceRequestor and be + * prepared to return nsIAuthPrompt or other interfaces that may be required + * to download data. + * + * @see nsIAuthPrompt + * @see nsIInterfaceRequestor + */ + attribute nsIWebProgressListener progressListener; + + /** + * Save the specified URI to file. + * + * @param aURI URI to save to file. Some implementations of this interface + * may also support nullptr to imply the currently + * loaded URI. + * @param aCacheKey An object representing the URI in the cache or + * nullptr. This can be a necko cache key, + * an nsIWebPageDescriptor, or the currentDescriptor of an + * nsIWebPageDescriptor. + * @param aReferrer The referrer URI to pass with an HTTP request or + * nullptr. + * @param aReferrerPolicy The referrer policy for when and what to send via + * HTTP Referer header. Ignored if aReferrer is + * nullptr. Taken from REFERRER_POLICY + * constants in nsIHttpChannel. + * @param aPostData Post data to pass with an HTTP request or + * nullptr. + * @param aExtraHeaders Additional headers to supply with an HTTP request + * or nullptr. + * @param aFile Target file. This may be a nsIFile object or an + * nsIURI object with a file scheme or a scheme that + * supports uploading (e.g. ftp). + * @param aPrivacyContext A context from which the privacy status of this + * save operation can be determined. Must only be null + * in situations in which no such context is available + * (eg. the operation has no logical association with any + * window or document) + * + * @see nsIFile + * @see nsIURI + * @see nsIInputStream + * + * @throws NS_ERROR_INVALID_ARG One or more arguments was invalid. + */ + void saveURI(in nsIURI aURI, in nsISupports aCacheKey, + in nsIURI aReferrer, in unsigned long aReferrerPolicy, + in nsIInputStream aPostData, + in string aExtraHeaders, in nsISupports aFile, + in nsILoadContext aPrivacyContext); + + /** + * @param aIsPrivate Treat the save operation as private (ie. with + * regards to networking operations and persistence + * of intermediate data, etc.) + * @see saveURI for all other parameter descriptions + */ + void savePrivacyAwareURI(in nsIURI aURI, in nsISupports aCacheKey, + in nsIURI aReferrer, in unsigned long aReferrerPolicy, + in nsIInputStream aPostData, + in string aExtraHeaders, in nsISupports aFile, + in boolean aIsPrivate); + + /** + * Save a channel to a file. It must not be opened yet. + * @see saveURI + */ + void saveChannel(in nsIChannel aChannel, in nsISupports aFile); + + /** Output only the current selection as opposed to the whole document. */ + const unsigned long ENCODE_FLAGS_SELECTION_ONLY = 1; + /** + * For plaintext output. Convert html to plaintext that looks like the html. + * Implies wrap (except inside <pre>), since html wraps. + * HTML output: always do prettyprinting, ignoring existing formatting. + */ + const unsigned long ENCODE_FLAGS_FORMATTED = 2; + /** + * Output without formatting or wrapping the content. This flag + * may be used to preserve the original formatting as much as possible. + */ + const unsigned long ENCODE_FLAGS_RAW = 4; + /** Output only the body section, no HTML tags. */ + const unsigned long ENCODE_FLAGS_BODY_ONLY = 8; + /** Wrap even if when not doing formatted output (e.g. for text fields). */ + const unsigned long ENCODE_FLAGS_PREFORMATTED = 16; + /** Wrap documents at the specified column. */ + const unsigned long ENCODE_FLAGS_WRAP = 32; + /** + * For plaintext output. Output for format flowed (RFC 2646). This is used + * when converting to text for mail sending. This differs just slightly + * but in an important way from normal formatted, and that is that + * lines are space stuffed. This can't (correctly) be done later. + */ + const unsigned long ENCODE_FLAGS_FORMAT_FLOWED = 64; + /** Convert links to absolute links where possible. */ + const unsigned long ENCODE_FLAGS_ABSOLUTE_LINKS = 128; + + /** + * Attempt to encode entities standardized at W3C (HTML, MathML, etc). + * This is a catch-all flag for documents with mixed contents. Beware of + * interoperability issues. See below for other flags which might likely + * do what you want. + */ + const unsigned long ENCODE_FLAGS_ENCODE_W3C_ENTITIES = 256; + + /** + * Output with carriage return line breaks. May also be combined with + * ENCODE_FLAGS_LF_LINEBREAKS and if neither is specified, the platform + * default format is used. + */ + const unsigned long ENCODE_FLAGS_CR_LINEBREAKS = 512; + /** + * Output with linefeed line breaks. May also be combined with + * ENCODE_FLAGS_CR_LINEBREAKS and if neither is specified, the platform + * default format is used. + */ + const unsigned long ENCODE_FLAGS_LF_LINEBREAKS = 1024; + /** For plaintext output. Output the content of noscript elements. */ + const unsigned long ENCODE_FLAGS_NOSCRIPT_CONTENT = 2048; + /** For plaintext output. Output the content of noframes elements. */ + const unsigned long ENCODE_FLAGS_NOFRAMES_CONTENT = 4096; + + /** + * Encode basic entities, e.g. output   instead of character code 0xa0. + * The basic set is just   & < > " for interoperability + * with older products that don't support α and friends. + */ + const unsigned long ENCODE_FLAGS_ENCODE_BASIC_ENTITIES = 8192; + /** + * Encode Latin1 entities. This includes the basic set and + * accented letters between 128 and 255. + */ + const unsigned long ENCODE_FLAGS_ENCODE_LATIN1_ENTITIES = 16384; + /** + * Encode HTML4 entities. This includes the basic set, accented + * letters, greek letters and certain special markup symbols. + */ + const unsigned long ENCODE_FLAGS_ENCODE_HTML_ENTITIES = 32768; + + /** + * Save the specified DOM document to file and optionally all linked files + * (e.g. images, CSS, JS & subframes). Do not call this method until the + * document has finished loading! + * + * @param aDocument Document to save to file. Some implementations of + * this interface may also support nullptr + * to imply the currently loaded document. Can be an + * nsIWebBrowserPersistDocument or nsIDOMDocument. + * @param aFile Target local file. This may be a nsIFile object or an + * nsIURI object with a file scheme or a scheme that + * supports uploading (e.g. ftp). + * @param aDataPath Path to directory where URIs linked to the document + * are saved or nullptr if no linked URIs should be saved. + * This may be a nsIFile object or an nsIURI object + * with a file scheme. + * @param aOutputContentType The desired MIME type format to save the + * document and all subdocuments into or nullptr to use + * the default behaviour. + * @param aEncodingFlags Flags to pass to the encoder. + * @param aWrapColumn For text documents, indicates the desired width to + * wrap text at. Parameter is ignored if wrapping is not + * specified by the encoding flags. + * + * @see nsIWebBrowserPersistDocument + * @see nsIWebBrowserPersistable + * @see nsIFile + * @see nsIURI + * + * @throws NS_ERROR_INVALID_ARG One or more arguments was invalid. + */ + void saveDocument(in nsISupports aDocument, + in nsISupports aFile, in nsISupports aDataPath, + in string aOutputContentType, in unsigned long aEncodingFlags, + in unsigned long aWrapColumn); + + /** + * Cancels the current operation. The caller is responsible for cleaning up + * partially written files or directories. This has the same effect as calling + * cancel with an argument of NS_BINDING_ABORTED. + */ + void cancelSave(); +}; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/nsWebBrowserPersist.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/nsWebBrowserPersist.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/nsWebBrowserPersist.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/nsWebBrowserPersist.cpp 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,2812 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * 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 "mozilla/ArrayUtils.h" + +#include "nspr.h" + +#include "nsIFileStreams.h" // New Necko file streams +#include + +#include "nsAutoPtr.h" +#include "nsNetCID.h" +#include "nsNetUtil.h" +#include "nsIInterfaceRequestorUtils.h" +#include "nsIPrivateBrowsingChannel.h" +#include "nsComponentManagerUtils.h" +#include "nsIComponentRegistrar.h" +#include "nsIStorageStream.h" +#include "nsISeekableStream.h" +#include "nsIHttpChannel.h" +#include "nsIHttpChannelInternal.h" +#include "nsIEncodedChannel.h" +#include "nsIUploadChannel.h" +#include "nsICacheInfoChannel.h" +#include "nsIFileChannel.h" +#include "nsEscape.h" +#include "nsUnicharUtils.h" +#include "nsIStringEnumerator.h" +#include "nsCRT.h" +#include "nsContentCID.h" +#include "nsStreamUtils.h" + +#include "nsCExternalHandlerService.h" + +#include "nsIURL.h" +#include "nsIFileURL.h" +#include "nsIWebProgressListener.h" +#include "nsIAuthPrompt.h" +#include "nsIPrompt.h" +#include "nsISHEntry.h" +#include "nsIWebPageDescriptor.h" +#include "nsIFormControl.h" +#include "nsContentUtils.h" + +#include "nsIImageLoadingContent.h" + +#include "ftpCore.h" +#include "nsITransport.h" +#include "nsISocketTransport.h" +#include "nsIStringBundle.h" +#include "nsIProtocolHandler.h" + +#include "nsIWebBrowserPersistable.h" +#include "nsWebBrowserPersist.h" +#include "WebBrowserPersistLocalDocument.h" + +#include "nsIContent.h" +#include "nsIMIMEInfo.h" +#include "mozilla/dom/HTMLInputElement.h" +#include "mozilla/dom/HTMLSharedElement.h" +#include "mozilla/dom/HTMLSharedObjectElement.h" + +using namespace mozilla; +using namespace mozilla::dom; + +// Buffer file writes in 32kb chunks +#define BUFFERED_OUTPUT_SIZE (1024 * 32) + +struct nsWebBrowserPersist::WalkData +{ + nsCOMPtr mDocument; + nsCOMPtr mFile; + nsCOMPtr mDataPath; +}; + +// Information about a DOM document +struct nsWebBrowserPersist::DocData +{ + nsCOMPtr mBaseURI; + nsCOMPtr mDocument; + nsCOMPtr mFile; + nsCString mCharset; +}; + +// Information about a URI +struct nsWebBrowserPersist::URIData +{ + bool mNeedsPersisting; + bool mSaved; + bool mIsSubFrame; + bool mDataPathIsRelative; + bool mNeedsFixup; + nsString mFilename; + nsString mSubFrameExt; + nsCOMPtr mFile; + nsCOMPtr mDataPath; + nsCOMPtr mRelativeDocumentURI; + nsCString mRelativePathToData; + nsCString mCharset; + + nsresult GetLocalURI(nsIURI *targetBaseURI, nsCString& aSpecOut); +}; + +// Information about the output stream +struct nsWebBrowserPersist::OutputData +{ + nsCOMPtr mFile; + nsCOMPtr mOriginalLocation; + nsCOMPtr mStream; + int64_t mSelfProgress; + int64_t mSelfProgressMax; + bool mCalcFileExt; + + OutputData(nsIURI *aFile, nsIURI *aOriginalLocation, bool aCalcFileExt) : + mFile(aFile), + mOriginalLocation(aOriginalLocation), + mSelfProgress(0), + mSelfProgressMax(10000), + mCalcFileExt(aCalcFileExt) + { + } + ~OutputData() + { + if (mStream) + { + mStream->Close(); + } + } +}; + +struct nsWebBrowserPersist::UploadData +{ + nsCOMPtr mFile; + int64_t mSelfProgress; + int64_t mSelfProgressMax; + + explicit UploadData(nsIURI *aFile) : + mFile(aFile), + mSelfProgress(0), + mSelfProgressMax(10000) + { + } +}; + +struct nsWebBrowserPersist::CleanupData +{ + nsCOMPtr mFile; + // Snapshot of what the file actually is at the time of creation so that if + // it transmutes into something else later on it can be ignored. For example, + // catch files that turn into dirs or vice versa. + bool mIsDirectory; +}; + +class nsWebBrowserPersist::OnWalk final + : public nsIWebBrowserPersistResourceVisitor +{ +public: + OnWalk(nsWebBrowserPersist* aParent, nsIURI* aFile, nsIFile* aDataPath) + : mParent(aParent) + , mFile(aFile) + , mDataPath(aDataPath) + { } + + NS_DECL_NSIWEBBROWSERPERSISTRESOURCEVISITOR + NS_DECL_ISUPPORTS +private: + RefPtr mParent; + nsCOMPtr mFile; + nsCOMPtr mDataPath; + + virtual ~OnWalk() = default; +}; + +NS_IMPL_ISUPPORTS(nsWebBrowserPersist::OnWalk, + nsIWebBrowserPersistResourceVisitor) + +class nsWebBrowserPersist::OnWrite final + : public nsIWebBrowserPersistWriteCompletion +{ +public: + OnWrite(nsWebBrowserPersist* aParent, + nsIURI* aFile, + nsIFile* aLocalFile) + : mParent(aParent) + , mFile(aFile) + , mLocalFile(aLocalFile) + { } + + NS_DECL_NSIWEBBROWSERPERSISTWRITECOMPLETION + NS_DECL_ISUPPORTS +private: + RefPtr mParent; + nsCOMPtr mFile; + nsCOMPtr mLocalFile; + + virtual ~OnWrite() = default; +}; + +NS_IMPL_ISUPPORTS(nsWebBrowserPersist::OnWrite, + nsIWebBrowserPersistWriteCompletion) + +class nsWebBrowserPersist::FlatURIMap final + : public nsIWebBrowserPersistURIMap +{ +public: + explicit FlatURIMap(const nsACString& aTargetBase) + : mTargetBase(aTargetBase) { } + + void Add(const nsACString& aMapFrom, const nsACString& aMapTo) { + mMapFrom.AppendElement(aMapFrom); + mMapTo.AppendElement(aMapTo); + } + + NS_DECL_NSIWEBBROWSERPERSISTURIMAP + NS_DECL_ISUPPORTS + +private: + nsTArray mMapFrom; + nsTArray mMapTo; + nsCString mTargetBase; + + virtual ~FlatURIMap() = default; +}; + +NS_IMPL_ISUPPORTS(nsWebBrowserPersist::FlatURIMap, nsIWebBrowserPersistURIMap) + +NS_IMETHODIMP +nsWebBrowserPersist::FlatURIMap::GetNumMappedURIs(uint32_t* aNum) +{ + MOZ_ASSERT(mMapFrom.Length() == mMapTo.Length()); + *aNum = mMapTo.Length(); + return NS_OK; +} + +NS_IMETHODIMP +nsWebBrowserPersist::FlatURIMap::GetTargetBaseURI(nsACString& aTargetBase) +{ + aTargetBase = mTargetBase; + return NS_OK; +} + +NS_IMETHODIMP +nsWebBrowserPersist::FlatURIMap::GetURIMapping(uint32_t aIndex, + nsACString& aMapFrom, + nsACString& aMapTo) +{ + MOZ_ASSERT(mMapFrom.Length() == mMapTo.Length()); + if (aIndex >= mMapTo.Length()) { + return NS_ERROR_INVALID_ARG; + } + aMapFrom = mMapFrom[aIndex]; + aMapTo = mMapTo[aIndex]; + return NS_OK; +} + + +// Maximum file length constant. The max file name length is +// volume / server dependent but it is difficult to obtain +// that information. Instead this constant is a reasonable value that +// modern systems should able to cope with. +const uint32_t kDefaultMaxFilenameLength = 64; + +// Default flags for persistence +const uint32_t kDefaultPersistFlags = + nsIWebBrowserPersist::PERSIST_FLAGS_NO_CONVERSION | + nsIWebBrowserPersist::PERSIST_FLAGS_REPLACE_EXISTING_FILES; + +// String bundle where error messages come from +const char *kWebBrowserPersistStringBundle = + "chrome://global/locale/nsWebBrowserPersist.properties"; + +nsWebBrowserPersist::nsWebBrowserPersist() : + mCurrentDataPathIsRelative(false), + mCurrentThingsToPersist(0), + mFirstAndOnlyUse(true), + mSavingDocument(false), + mCancel(false), + mCompleted(false), + mStartSaving(false), + mReplaceExisting(true), + mSerializingOutput(false), + mIsPrivate(false), + mPersistFlags(kDefaultPersistFlags), + mPersistResult(NS_OK), + mTotalCurrentProgress(0), + mTotalMaxProgress(0), + mWrapColumn(72), + mEncodingFlags(0) +{ +} + +nsWebBrowserPersist::~nsWebBrowserPersist() +{ + Cleanup(); +} + +//***************************************************************************** +// nsWebBrowserPersist::nsISupports +//***************************************************************************** + +NS_IMPL_ADDREF(nsWebBrowserPersist) +NS_IMPL_RELEASE(nsWebBrowserPersist) + +NS_INTERFACE_MAP_BEGIN(nsWebBrowserPersist) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIWebBrowserPersist) + NS_INTERFACE_MAP_ENTRY(nsIWebBrowserPersist) + NS_INTERFACE_MAP_ENTRY(nsICancelable) + NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor) + NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference) + NS_INTERFACE_MAP_ENTRY(nsIStreamListener) + NS_INTERFACE_MAP_ENTRY(nsIRequestObserver) + NS_INTERFACE_MAP_ENTRY(nsIProgressEventSink) +NS_INTERFACE_MAP_END + + +//***************************************************************************** +// nsWebBrowserPersist::nsIInterfaceRequestor +//***************************************************************************** + +NS_IMETHODIMP nsWebBrowserPersist::GetInterface(const nsIID & aIID, void **aIFace) +{ + NS_ENSURE_ARG_POINTER(aIFace); + + *aIFace = nullptr; + + nsresult rv = QueryInterface(aIID, aIFace); + if (NS_SUCCEEDED(rv)) + { + return rv; + } + + if (mProgressListener && (aIID.Equals(NS_GET_IID(nsIAuthPrompt)) + || aIID.Equals(NS_GET_IID(nsIPrompt)))) + { + mProgressListener->QueryInterface(aIID, aIFace); + if (*aIFace) + return NS_OK; + } + + nsCOMPtr req = do_QueryInterface(mProgressListener); + if (req) + { + return req->GetInterface(aIID, aIFace); + } + + return NS_ERROR_NO_INTERFACE; +} + + +//***************************************************************************** +// nsWebBrowserPersist::nsIWebBrowserPersist +//***************************************************************************** + +NS_IMETHODIMP nsWebBrowserPersist::GetPersistFlags(uint32_t *aPersistFlags) +{ + NS_ENSURE_ARG_POINTER(aPersistFlags); + *aPersistFlags = mPersistFlags; + return NS_OK; +} +NS_IMETHODIMP nsWebBrowserPersist::SetPersistFlags(uint32_t aPersistFlags) +{ + mPersistFlags = aPersistFlags; + mReplaceExisting = (mPersistFlags & PERSIST_FLAGS_REPLACE_EXISTING_FILES) ? true : false; + mSerializingOutput = (mPersistFlags & PERSIST_FLAGS_SERIALIZE_OUTPUT) ? true : false; + return NS_OK; +} + +NS_IMETHODIMP nsWebBrowserPersist::GetCurrentState(uint32_t *aCurrentState) +{ + NS_ENSURE_ARG_POINTER(aCurrentState); + if (mCompleted) + { + *aCurrentState = PERSIST_STATE_FINISHED; + } + else if (mFirstAndOnlyUse) + { + *aCurrentState = PERSIST_STATE_SAVING; + } + else + { + *aCurrentState = PERSIST_STATE_READY; + } + return NS_OK; +} + +NS_IMETHODIMP nsWebBrowserPersist::GetResult(nsresult *aResult) +{ + NS_ENSURE_ARG_POINTER(aResult); + *aResult = mPersistResult; + return NS_OK; +} + +NS_IMETHODIMP nsWebBrowserPersist::GetProgressListener( + nsIWebProgressListener * *aProgressListener) +{ + NS_ENSURE_ARG_POINTER(aProgressListener); + *aProgressListener = mProgressListener; + NS_IF_ADDREF(*aProgressListener); + return NS_OK; +} + +NS_IMETHODIMP nsWebBrowserPersist::SetProgressListener( + nsIWebProgressListener * aProgressListener) +{ + mProgressListener = aProgressListener; + mProgressListener2 = do_QueryInterface(aProgressListener); + mEventSink = do_GetInterface(aProgressListener); + return NS_OK; +} + +NS_IMETHODIMP nsWebBrowserPersist::SaveURI( + nsIURI *aURI, nsISupports *aCacheKey, + nsIURI *aReferrer, uint32_t aReferrerPolicy, + nsIInputStream *aPostData, const char *aExtraHeaders, + nsISupports *aFile, nsILoadContext* aPrivacyContext) +{ + return SavePrivacyAwareURI(aURI, aCacheKey, aReferrer, aReferrerPolicy, + aPostData, aExtraHeaders, aFile, + aPrivacyContext && aPrivacyContext->UsePrivateBrowsing()); +} + +NS_IMETHODIMP nsWebBrowserPersist::SavePrivacyAwareURI( + nsIURI *aURI, nsISupports *aCacheKey, + nsIURI *aReferrer, uint32_t aReferrerPolicy, + nsIInputStream *aPostData, const char *aExtraHeaders, + nsISupports *aFile, bool aIsPrivate) +{ + NS_ENSURE_TRUE(mFirstAndOnlyUse, NS_ERROR_FAILURE); + mFirstAndOnlyUse = false; // Stop people from reusing this object! + + nsCOMPtr fileAsURI; + nsresult rv; + rv = GetValidURIFromObject(aFile, getter_AddRefs(fileAsURI)); + NS_ENSURE_SUCCESS(rv, NS_ERROR_INVALID_ARG); + + // SaveURI doesn't like broken uris. + mPersistFlags |= PERSIST_FLAGS_FAIL_ON_BROKEN_LINKS; + rv = SaveURIInternal(aURI, aCacheKey, aReferrer, aReferrerPolicy, + aPostData, aExtraHeaders, fileAsURI, false, aIsPrivate); + return NS_FAILED(rv) ? rv : NS_OK; +} + +NS_IMETHODIMP nsWebBrowserPersist::SaveChannel( + nsIChannel *aChannel, nsISupports *aFile) +{ + NS_ENSURE_TRUE(mFirstAndOnlyUse, NS_ERROR_FAILURE); + mFirstAndOnlyUse = false; // Stop people from reusing this object! + + nsCOMPtr fileAsURI; + nsresult rv; + rv = GetValidURIFromObject(aFile, getter_AddRefs(fileAsURI)); + NS_ENSURE_SUCCESS(rv, NS_ERROR_INVALID_ARG); + + rv = aChannel->GetURI(getter_AddRefs(mURI)); + NS_ENSURE_SUCCESS(rv, rv); + + // SaveURI doesn't like broken uris. + mPersistFlags |= PERSIST_FLAGS_FAIL_ON_BROKEN_LINKS; + rv = SaveChannelInternal(aChannel, fileAsURI, false); + return NS_FAILED(rv) ? rv : NS_OK; +} + + +NS_IMETHODIMP nsWebBrowserPersist::SaveDocument( + nsISupports *aDocument, nsISupports *aFile, nsISupports *aDataPath, + const char *aOutputContentType, uint32_t aEncodingFlags, uint32_t aWrapColumn) +{ + NS_ENSURE_TRUE(mFirstAndOnlyUse, NS_ERROR_FAILURE); + mFirstAndOnlyUse = false; // Stop people from reusing this object! + + // We need a STATE_IS_NETWORK start/stop pair to bracket the + // notification callbacks. For a whole document we generate those + // here and in EndDownload(), but for the single-request methods + // that's done in On{Start,Stop}Request instead. + mSavingDocument = true; + + NS_ENSURE_ARG_POINTER(aDocument); + NS_ENSURE_ARG_POINTER(aFile); + + nsCOMPtr fileAsURI; + nsCOMPtr datapathAsURI; + nsresult rv; + + rv = GetValidURIFromObject(aFile, getter_AddRefs(fileAsURI)); + NS_ENSURE_SUCCESS(rv, NS_ERROR_INVALID_ARG); + if (aDataPath) + { + rv = GetValidURIFromObject(aDataPath, getter_AddRefs(datapathAsURI)); + NS_ENSURE_SUCCESS(rv, NS_ERROR_INVALID_ARG); + } + + mWrapColumn = aWrapColumn; + mEncodingFlags = aEncodingFlags; + + if (aOutputContentType) + { + mContentType.AssignASCII(aOutputContentType); + } + + // State start notification + if (mProgressListener) { + mProgressListener->OnStateChange(nullptr, nullptr, + nsIWebProgressListener::STATE_START + | nsIWebProgressListener::STATE_IS_NETWORK, NS_OK); + } + + nsCOMPtr doc = do_QueryInterface(aDocument); + if (!doc) { + nsCOMPtr localDoc = do_QueryInterface(aDocument); + if (localDoc) { + doc = new mozilla::WebBrowserPersistLocalDocument(localDoc); + } else { + rv = NS_ERROR_NO_INTERFACE; + } + } + if (doc) { + rv = SaveDocumentInternal(doc, fileAsURI, datapathAsURI); + } + if (NS_FAILED(rv)) { + SendErrorStatusChange(true, rv, nullptr, mURI); + EndDownload(rv); + } + return rv; +} + +NS_IMETHODIMP nsWebBrowserPersist::Cancel(nsresult aReason) +{ + mCancel = true; + EndDownload(aReason); + return NS_OK; +} + + +NS_IMETHODIMP nsWebBrowserPersist::CancelSave() +{ + return Cancel(NS_BINDING_ABORTED); +} + + +nsresult +nsWebBrowserPersist::StartUpload(nsIStorageStream *storStream, + nsIURI *aDestinationURI, const nsACString &aContentType) +{ + // setup the upload channel if the destination is not local + nsCOMPtr inputstream; + nsresult rv = storStream->NewInputStream(0, getter_AddRefs(inputstream)); + NS_ENSURE_TRUE(inputstream, NS_ERROR_FAILURE); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + return StartUpload(inputstream, aDestinationURI, aContentType); +} + +nsresult +nsWebBrowserPersist::StartUpload(nsIInputStream *aInputStream, + nsIURI *aDestinationURI, const nsACString &aContentType) +{ + nsCOMPtr destChannel; + CreateChannelFromURI(aDestinationURI, getter_AddRefs(destChannel)); + nsCOMPtr uploadChannel(do_QueryInterface(destChannel)); + NS_ENSURE_TRUE(uploadChannel, NS_ERROR_FAILURE); + + // Set the upload stream + // NOTE: ALL data must be available in "inputstream" + nsresult rv = uploadChannel->SetUploadStream(aInputStream, aContentType, -1); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + rv = destChannel->AsyncOpen2(this); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + // add this to the upload list + nsCOMPtr keyPtr = do_QueryInterface(destChannel); + mUploadList.Put(keyPtr, new UploadData(aDestinationURI)); + + return NS_OK; +} + +void +nsWebBrowserPersist::SerializeNextFile() +{ + nsresult rv = NS_OK; + MOZ_ASSERT(mWalkStack.Length() == 0); + + // First, handle gathered URIs. + // Count how many URIs in the URI map require persisting + uint32_t urisToPersist = 0; + if (mURIMap.Count() > 0) { + // This is potentially O(n^2), when taking into account the + // number of times this method is called. If it becomes a + // bottleneck, the count of not-yet-persisted URIs could be + // maintained separately. + for (auto iter = mURIMap.Iter(); !iter.Done(); iter.Next()) { + URIData *data = iter.UserData(); + if (data->mNeedsPersisting && !data->mSaved) { + urisToPersist++; + } + } + } + + if (urisToPersist > 0) { + // Persist each file in the uri map. The document(s) + // will be saved after the last one of these is saved. + for (auto iter = mURIMap.Iter(); !iter.Done(); iter.Next()) { + URIData *data = iter.UserData(); + + if (!data->mNeedsPersisting || data->mSaved) { + continue; + } + + nsresult rv; + + // Create a URI from the key. + nsCOMPtr uri; + rv = NS_NewURI(getter_AddRefs(uri), iter.Key(), + data->mCharset.get()); + if (NS_WARN_IF(NS_FAILED(rv))) { + break; + } + + // Make a URI to save the data to. + nsCOMPtr fileAsURI; + rv = data->mDataPath->Clone(getter_AddRefs(fileAsURI)); + if (NS_WARN_IF(NS_FAILED(rv))) { + break; + } + rv = AppendPathToURI(fileAsURI, data->mFilename); + if (NS_WARN_IF(NS_FAILED(rv))) { + break; + } + + // The Referrer Policy doesn't matter here since the referrer is + // nullptr. + rv = SaveURIInternal(uri, nullptr, nullptr, + mozilla::net::RP_Unset, nullptr, nullptr, + fileAsURI, true, mIsPrivate); + // If SaveURIInternal fails, then it will have called EndDownload, + // which means that |data| is no longer valid memory. We MUST bail. + if (NS_WARN_IF(NS_FAILED(rv))) { + break; + } + + if (rv == NS_OK) { + // Store the actual object because once it's persisted this + // will be fixed up with the right file extension. + data->mFile = fileAsURI; + data->mSaved = true; + } else { + data->mNeedsFixup = false; + } + + if (mSerializingOutput) { + break; + } + } + } + + // If there are downloads happening, wait until they're done; the + // OnStopRequest handler will call this method again. + if (mOutputMap.Count() > 0) { + return; + } + + // If serializing, also wait until last upload is done. + if (mSerializingOutput && mUploadList.Count() > 0) { + return; + } + + // If there are also no more documents, then we're done. + if (mDocList.Length() == 0) { + // ...or not quite done, if there are still uploads. + if (mUploadList.Count() > 0) { + return; + } + // Finish and clean things up. Defer this because the caller + // may have been expecting to use the listeners that that + // method will clear. + NS_DispatchToCurrentThread(NewRunnableMethod(this, + &nsWebBrowserPersist::FinishDownload)); + return; + } + + // There are no URIs to save, so just save the next document. + mStartSaving = true; + mozilla::UniquePtr docData(mDocList.ElementAt(0)); + mDocList.RemoveElementAt(0); // O(n^2) but probably doesn't matter. + MOZ_ASSERT(docData); + if (!docData) { + EndDownload(NS_ERROR_FAILURE); + return; + } + + mCurrentBaseURI = docData->mBaseURI; + mCurrentCharset = docData->mCharset; + mTargetBaseURI = docData->mFile; + + // Save the document, fixing it up with the new URIs as we do + + nsAutoCString targetBaseSpec; + if (mTargetBaseURI) { + rv = mTargetBaseURI->GetSpec(targetBaseSpec); + if (NS_FAILED(rv)) { + SendErrorStatusChange(true, rv, nullptr, nullptr); + EndDownload(rv); + return; + } + } + + // mFlatURIMap must be rebuilt each time through SerializeNextFile, as + // mTargetBaseURI is used to create the relative URLs and will be different + // with each serialized document. + RefPtr flatMap = new FlatURIMap(targetBaseSpec); + for (auto iter = mURIMap.Iter(); !iter.Done(); iter.Next()) { + nsAutoCString mapTo; + nsresult rv = iter.UserData()->GetLocalURI(mTargetBaseURI, mapTo); + if (NS_SUCCEEDED(rv) || !mapTo.IsVoid()) { + flatMap->Add(iter.Key(), mapTo); + } + } + mFlatURIMap = flatMap.forget(); + + nsCOMPtr localFile; + GetLocalFileFromURI(docData->mFile, getter_AddRefs(localFile)); + if (localFile) { + // if we're not replacing an existing file but the file + // exists, something is wrong + bool fileExists = false; + rv = localFile->Exists(&fileExists); + if (NS_SUCCEEDED(rv) && !mReplaceExisting && fileExists) { + rv = NS_ERROR_FILE_ALREADY_EXISTS; + } + if (NS_FAILED(rv)) { + SendErrorStatusChange(false, rv, nullptr, docData->mFile); + EndDownload(rv); + return; + } + } + nsCOMPtr outputStream; + rv = MakeOutputStream(docData->mFile, getter_AddRefs(outputStream)); + if (NS_SUCCEEDED(rv) && !outputStream) { + rv = NS_ERROR_FAILURE; + } + if (NS_FAILED(rv)) { + SendErrorStatusChange(false, rv, nullptr, docData->mFile); + EndDownload(rv); + return; + } + + RefPtr finish = new OnWrite(this, docData->mFile, localFile); + rv = docData->mDocument->WriteContent(outputStream, + mFlatURIMap, + NS_ConvertUTF16toUTF8(mContentType), + mEncodingFlags, + mWrapColumn, + finish); + if (NS_FAILED(rv)) { + SendErrorStatusChange(false, rv, nullptr, docData->mFile); + EndDownload(rv); + } +} + +NS_IMETHODIMP +nsWebBrowserPersist::OnWrite::OnFinish(nsIWebBrowserPersistDocument* aDoc, + nsIOutputStream *aStream, + const nsACString& aContentType, + nsresult aStatus) +{ + nsresult rv = aStatus; + + if (NS_FAILED(rv)) { + mParent->SendErrorStatusChange(false, rv, nullptr, mFile); + mParent->EndDownload(rv); + return NS_OK; + } + if (!mLocalFile) { + nsCOMPtr storStream(do_QueryInterface(aStream)); + if (storStream) { + aStream->Close(); + rv = mParent->StartUpload(storStream, mFile, aContentType); + if (NS_FAILED(rv)) { + mParent->SendErrorStatusChange(false, rv, nullptr, mFile); + mParent->EndDownload(rv); + } + // Either we failed and we're done, or we're uploading and + // the OnStopRequest callback is responsible for the next + // SerializeNextFile(). + return NS_OK; + } + } + NS_DispatchToCurrentThread(NewRunnableMethod(mParent, + &nsWebBrowserPersist::SerializeNextFile)); + return NS_OK; +} + +//***************************************************************************** +// nsWebBrowserPersist::nsIRequestObserver +//***************************************************************************** + +NS_IMETHODIMP nsWebBrowserPersist::OnStartRequest( + nsIRequest* request, nsISupports *ctxt) +{ + if (mProgressListener) + { + uint32_t stateFlags = nsIWebProgressListener::STATE_START | + nsIWebProgressListener::STATE_IS_REQUEST; + if (!mSavingDocument) { + stateFlags |= nsIWebProgressListener::STATE_IS_NETWORK; + } + mProgressListener->OnStateChange(nullptr, request, stateFlags, NS_OK); + } + + nsCOMPtr channel = do_QueryInterface(request); + NS_ENSURE_TRUE(channel, NS_ERROR_FAILURE); + + nsCOMPtr keyPtr = do_QueryInterface(request); + OutputData *data = mOutputMap.Get(keyPtr); + + // NOTE: This code uses the channel as a hash key so it will not + // recognize redirected channels because the key is not the same. + // When that happens we remove and add the data entry to use the + // new channel as the hash key. + if (!data) + { + UploadData *upData = mUploadList.Get(keyPtr); + if (!upData) + { + // Redirect? Try and fixup the output table + nsresult rv = FixRedirectedChannelEntry(channel); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + // Should be able to find the data after fixup unless redirects + // are disabled. + data = mOutputMap.Get(keyPtr); + if (!data) + { + return NS_ERROR_FAILURE; + } + } + } + + if (data && data->mFile) + { + // If PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION is set in mPersistFlags, + // try to determine whether this channel needs to apply Content-Encoding + // conversions. + NS_ASSERTION(!((mPersistFlags & PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION) && + (mPersistFlags & PERSIST_FLAGS_NO_CONVERSION)), + "Conflict in persist flags: both AUTODETECT and NO_CONVERSION set"); + if (mPersistFlags & PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION) + SetApplyConversionIfNeeded(channel); + + if (data->mCalcFileExt && !(mPersistFlags & PERSIST_FLAGS_DONT_CHANGE_FILENAMES)) + { + // this is the first point at which the server can tell us the mimetype + CalculateAndAppendFileExt(data->mFile, channel, data->mOriginalLocation); + + // now make filename conformant and unique + CalculateUniqueFilename(data->mFile); + } + + // compare uris and bail before we add to output map if they are equal + bool isEqual = false; + if (NS_SUCCEEDED(data->mFile->Equals(data->mOriginalLocation, &isEqual)) + && isEqual) + { + // remove from output map + mOutputMap.Remove(keyPtr); + + // cancel; we don't need to know any more + // stop request will get called + request->Cancel(NS_BINDING_ABORTED); + } + } + + return NS_OK; +} + +NS_IMETHODIMP nsWebBrowserPersist::OnStopRequest( + nsIRequest* request, nsISupports *ctxt, nsresult status) +{ + nsCOMPtr keyPtr = do_QueryInterface(request); + OutputData *data = mOutputMap.Get(keyPtr); + if (data) { + if (NS_SUCCEEDED(mPersistResult) && NS_FAILED(status)) { + SendErrorStatusChange(true, status, request, data->mFile); + } + + // This will automatically close the output stream + mOutputMap.Remove(keyPtr); + } else { + // if we didn't find the data in mOutputMap, try mUploadList + UploadData *upData = mUploadList.Get(keyPtr); + if (upData) { + mUploadList.Remove(keyPtr); + } + } + + // Do more work. + SerializeNextFile(); + + if (mProgressListener) { + uint32_t stateFlags = nsIWebProgressListener::STATE_STOP | + nsIWebProgressListener::STATE_IS_REQUEST; + if (!mSavingDocument) { + stateFlags |= nsIWebProgressListener::STATE_IS_NETWORK; + } + mProgressListener->OnStateChange(nullptr, request, stateFlags, status); + } + + return NS_OK; +} + +//***************************************************************************** +// nsWebBrowserPersist::nsIStreamListener +//***************************************************************************** + +NS_IMETHODIMP +nsWebBrowserPersist::OnDataAvailable( + nsIRequest* request, nsISupports *aContext, nsIInputStream *aIStream, + uint64_t aOffset, uint32_t aLength) +{ + bool cancel = mCancel; + if (!cancel) + { + nsresult rv = NS_OK; + uint32_t bytesRemaining = aLength; + + nsCOMPtr channel = do_QueryInterface(request); + NS_ENSURE_TRUE(channel, NS_ERROR_FAILURE); + + nsCOMPtr keyPtr = do_QueryInterface(request); + OutputData *data = mOutputMap.Get(keyPtr); + if (!data) { + // might be uploadData; consume necko's buffer and bail... + uint32_t n; + return aIStream->ReadSegments(NS_DiscardSegment, nullptr, aLength, &n); + } + + bool readError = true; + + // Make the output stream + if (!data->mStream) + { + rv = MakeOutputStream(data->mFile, getter_AddRefs(data->mStream)); + if (NS_FAILED(rv)) + { + readError = false; + cancel = true; + } + } + + // Read data from the input and write to the output + char buffer[8192]; + uint32_t bytesRead; + while (!cancel && bytesRemaining) + { + readError = true; + rv = aIStream->Read(buffer, + std::min(uint32_t(sizeof(buffer)), bytesRemaining), + &bytesRead); + if (NS_SUCCEEDED(rv)) + { + readError = false; + // Write out the data until something goes wrong, or, it is + // all written. We loop because for some errors (e.g., disk + // full), we get NS_OK with some bytes written, then an error. + // So, we want to write again in that case to get the actual + // error code. + const char *bufPtr = buffer; // Where to write from. + while (NS_SUCCEEDED(rv) && bytesRead) + { + uint32_t bytesWritten = 0; + rv = data->mStream->Write(bufPtr, bytesRead, &bytesWritten); + if (NS_SUCCEEDED(rv)) + { + bytesRead -= bytesWritten; + bufPtr += bytesWritten; + bytesRemaining -= bytesWritten; + // Force an error if (for some reason) we get NS_OK but + // no bytes written. + if (!bytesWritten) + { + rv = NS_ERROR_FAILURE; + cancel = true; + } + } + else + { + // Disaster - can't write out the bytes - disk full / permission? + cancel = true; + } + } + } + else + { + // Disaster - can't read the bytes - broken link / file error? + cancel = true; + } + } + + int64_t channelContentLength = -1; + if (!cancel && + NS_SUCCEEDED(channel->GetContentLength(&channelContentLength))) + { + // if we get -1 at this point, we didn't get content-length header + // assume that we got all of the data and push what we have; + // that's the best we can do now + if ((-1 == channelContentLength) || + ((channelContentLength - (aOffset + aLength)) == 0)) + { + NS_WARNING_ASSERTION( + channelContentLength != -1, + "nsWebBrowserPersist::OnDataAvailable() no content length " + "header, pushing what we have"); + // we're done with this pass; see if we need to do upload + nsAutoCString contentType; + channel->GetContentType(contentType); + // if we don't have the right type of output stream then it's a local file + nsCOMPtr storStream(do_QueryInterface(data->mStream)); + if (storStream) + { + data->mStream->Close(); + data->mStream = nullptr; // null out stream so we don't close it later + rv = StartUpload(storStream, data->mFile, contentType); + if (NS_FAILED(rv)) + { + readError = false; + cancel = true; + } + } + } + } + + // Notify listener if an error occurred. + if (cancel) + { + SendErrorStatusChange(readError, rv, + readError ? request : nullptr, data->mFile); + } + } + + // Cancel reading? + if (cancel) + { + EndDownload(NS_BINDING_ABORTED); + } + + return NS_OK; +} + + +//***************************************************************************** +// nsWebBrowserPersist::nsIProgressEventSink +//***************************************************************************** + +NS_IMETHODIMP nsWebBrowserPersist::OnProgress( + nsIRequest *request, nsISupports *ctxt, int64_t aProgress, + int64_t aProgressMax) +{ + if (!mProgressListener) + { + return NS_OK; + } + + // Store the progress of this request + nsCOMPtr keyPtr = do_QueryInterface(request); + OutputData *data = mOutputMap.Get(keyPtr); + if (data) + { + data->mSelfProgress = aProgress; + data->mSelfProgressMax = aProgressMax; + } + else + { + UploadData *upData = mUploadList.Get(keyPtr); + if (upData) + { + upData->mSelfProgress = aProgress; + upData->mSelfProgressMax = aProgressMax; + } + } + + // Notify listener of total progress + CalcTotalProgress(); + if (mProgressListener2) + { + mProgressListener2->OnProgressChange64(nullptr, request, aProgress, + aProgressMax, mTotalCurrentProgress, mTotalMaxProgress); + } + else + { + // have to truncate 64-bit to 32bit + mProgressListener->OnProgressChange(nullptr, request, uint64_t(aProgress), + uint64_t(aProgressMax), mTotalCurrentProgress, mTotalMaxProgress); + } + + // If our progress listener implements nsIProgressEventSink, + // forward the notification + if (mEventSink) + { + mEventSink->OnProgress(request, ctxt, aProgress, aProgressMax); + } + + return NS_OK; +} + +NS_IMETHODIMP nsWebBrowserPersist::OnStatus( + nsIRequest *request, nsISupports *ctxt, nsresult status, + const char16_t *statusArg) +{ + if (mProgressListener) + { + // We need to filter out non-error error codes. + // Is the only NS_SUCCEEDED value NS_OK? + switch ( status ) + { + case NS_NET_STATUS_RESOLVING_HOST: + case NS_NET_STATUS_RESOLVED_HOST: + case NS_NET_STATUS_BEGIN_FTP_TRANSACTION: + case NS_NET_STATUS_END_FTP_TRANSACTION: + case NS_NET_STATUS_CONNECTING_TO: + case NS_NET_STATUS_CONNECTED_TO: + case NS_NET_STATUS_SENDING_TO: + case NS_NET_STATUS_RECEIVING_FROM: + case NS_NET_STATUS_WAITING_FOR: + case NS_NET_STATUS_READING: + case NS_NET_STATUS_WRITING: + break; + + default: + // Pass other notifications (for legitimate errors) along. + mProgressListener->OnStatusChange(nullptr, request, status, statusArg); + break; + } + + } + + // If our progress listener implements nsIProgressEventSink, + // forward the notification + if (mEventSink) + { + mEventSink->OnStatus(request, ctxt, status, statusArg); + } + + return NS_OK; +} + + +//***************************************************************************** +// nsWebBrowserPersist private methods +//***************************************************************************** + +// Convert error info into proper message text and send OnStatusChange notification +// to the web progress listener. +nsresult nsWebBrowserPersist::SendErrorStatusChange( + bool aIsReadError, nsresult aResult, nsIRequest *aRequest, nsIURI *aURI) +{ + NS_ENSURE_ARG_POINTER(aURI); + + if (!mProgressListener) + { + // Do nothing + return NS_OK; + } + + // Get the file path or spec from the supplied URI + nsCOMPtr file; + GetLocalFileFromURI(aURI, getter_AddRefs(file)); + nsAutoString path; + nsresult rv; + if (file) + { + file->GetPath(path); + } + else + { + nsAutoCString fileurl; + rv = aURI->GetSpec(fileurl); + NS_ENSURE_SUCCESS(rv, rv); + AppendUTF8toUTF16(fileurl, path); + } + + nsAutoString msgId; + switch(aResult) + { + case NS_ERROR_FILE_NAME_TOO_LONG: + // File name too long. + msgId.AssignLiteral("fileNameTooLongError"); + break; + case NS_ERROR_FILE_ALREADY_EXISTS: + // File exists with same name as directory. + msgId.AssignLiteral("fileAlreadyExistsError"); + break; + case NS_ERROR_FILE_DISK_FULL: + case NS_ERROR_FILE_NO_DEVICE_SPACE: + // Out of space on target volume. + msgId.AssignLiteral("diskFull"); + break; + + case NS_ERROR_FILE_READ_ONLY: + // Attempt to write to read/only file. + msgId.AssignLiteral("readOnly"); + break; + + case NS_ERROR_FILE_ACCESS_DENIED: + // Attempt to write without sufficient permissions. + msgId.AssignLiteral("accessError"); + break; + + default: + // Generic read/write error message. + if (aIsReadError) + msgId.AssignLiteral("readError"); + else + msgId.AssignLiteral("writeError"); + break; + } + // Get properties file bundle and extract status string. + nsCOMPtr s = do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv); + NS_ENSURE_TRUE(NS_SUCCEEDED(rv) && s, NS_ERROR_FAILURE); + + nsCOMPtr bundle; + rv = s->CreateBundle(kWebBrowserPersistStringBundle, getter_AddRefs(bundle)); + NS_ENSURE_TRUE(NS_SUCCEEDED(rv) && bundle, NS_ERROR_FAILURE); + + nsXPIDLString msgText; + const char16_t *strings[1]; + strings[0] = path.get(); + rv = bundle->FormatStringFromName(msgId.get(), strings, 1, getter_Copies(msgText)); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + mProgressListener->OnStatusChange(nullptr, aRequest, aResult, msgText); + + return NS_OK; +} + +nsresult nsWebBrowserPersist::GetValidURIFromObject(nsISupports *aObject, nsIURI **aURI) const +{ + NS_ENSURE_ARG_POINTER(aObject); + NS_ENSURE_ARG_POINTER(aURI); + + nsCOMPtr objAsFile = do_QueryInterface(aObject); + if (objAsFile) + { + return NS_NewFileURI(aURI, objAsFile); + } + nsCOMPtr objAsURI = do_QueryInterface(aObject); + if (objAsURI) + { + *aURI = objAsURI; + NS_ADDREF(*aURI); + return NS_OK; + } + + return NS_ERROR_FAILURE; +} + +/* static */ nsresult +nsWebBrowserPersist::GetLocalFileFromURI(nsIURI *aURI, nsIFile **aLocalFile) +{ + nsresult rv; + + nsCOMPtr fileURL = do_QueryInterface(aURI, &rv); + if (NS_FAILED(rv)) + return rv; + + nsCOMPtr file; + rv = fileURL->GetFile(getter_AddRefs(file)); + if (NS_FAILED(rv)) { + return rv; + } + + file.forget(aLocalFile); + return NS_OK; +} + +/* static */ nsresult +nsWebBrowserPersist::AppendPathToURI(nsIURI *aURI, const nsAString & aPath) +{ + NS_ENSURE_ARG_POINTER(aURI); + + nsAutoCString newPath; + nsresult rv = aURI->GetPath(newPath); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + // Append a forward slash if necessary + int32_t len = newPath.Length(); + if (len > 0 && newPath.CharAt(len - 1) != '/') + { + newPath.Append('/'); + } + + // Store the path back on the URI + AppendUTF16toUTF8(aPath, newPath); + aURI->SetPath(newPath); + + return NS_OK; +} + +nsresult nsWebBrowserPersist::SaveURIInternal( + nsIURI *aURI, nsISupports *aCacheKey, nsIURI *aReferrer, + uint32_t aReferrerPolicy, nsIInputStream *aPostData, + const char *aExtraHeaders, nsIURI *aFile, + bool aCalcFileExt, bool aIsPrivate) +{ + NS_ENSURE_ARG_POINTER(aURI); + NS_ENSURE_ARG_POINTER(aFile); + + nsresult rv = NS_OK; + + mURI = aURI; + + nsLoadFlags loadFlags = nsIRequest::LOAD_NORMAL; + if (mPersistFlags & PERSIST_FLAGS_BYPASS_CACHE) + { + loadFlags |= nsIRequest::LOAD_BYPASS_CACHE; + } + else if (mPersistFlags & PERSIST_FLAGS_FROM_CACHE) + { + loadFlags |= nsIRequest::LOAD_FROM_CACHE; + } + + // Extract the cache key + nsCOMPtr cacheKey; + if (aCacheKey) + { + // Test if the cache key is actually a web page descriptor (docshell) + // or session history entry. + nsCOMPtr shEntry = do_QueryInterface(aCacheKey); + if (!shEntry) + { + nsCOMPtr webPageDescriptor = + do_QueryInterface(aCacheKey); + if (webPageDescriptor) + { + nsCOMPtr currentDescriptor; + webPageDescriptor->GetCurrentDescriptor(getter_AddRefs(currentDescriptor)); + shEntry = do_QueryInterface(currentDescriptor); + } + } + + if (shEntry) + { + shEntry->GetCacheKey(getter_AddRefs(cacheKey)); + } + else + { + // Assume a plain cache key + cacheKey = aCacheKey; + } + } + + // Open a channel to the URI + nsCOMPtr inputChannel; + rv = NS_NewChannel(getter_AddRefs(inputChannel), + aURI, + nsContentUtils::GetSystemPrincipal(), + nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_IS_NULL, + nsIContentPolicy::TYPE_OTHER, + nullptr, // aLoadGroup + static_cast(this), + loadFlags); + + nsCOMPtr pbChannel = do_QueryInterface(inputChannel); + if (pbChannel) + { + pbChannel->SetPrivate(aIsPrivate); + } + + if (NS_FAILED(rv) || inputChannel == nullptr) + { + EndDownload(NS_ERROR_FAILURE); + return NS_ERROR_FAILURE; + } + + // Disable content conversion + if (mPersistFlags & PERSIST_FLAGS_NO_CONVERSION) + { + nsCOMPtr encodedChannel(do_QueryInterface(inputChannel)); + if (encodedChannel) + { + encodedChannel->SetApplyConversion(false); + } + } + + if (mPersistFlags & PERSIST_FLAGS_FORCE_ALLOW_COOKIES) + { + nsCOMPtr httpChannelInternal = + do_QueryInterface(inputChannel); + if (httpChannelInternal) + httpChannelInternal->SetThirdPartyFlags(nsIHttpChannelInternal::THIRD_PARTY_FORCE_ALLOW); + } + + // Set the referrer, post data and headers if any + nsCOMPtr httpChannel(do_QueryInterface(inputChannel)); + if (httpChannel) + { + // Referrer + if (aReferrer) + { + httpChannel->SetReferrerWithPolicy(aReferrer, aReferrerPolicy); + } + + // Post data + if (aPostData) + { + nsCOMPtr stream(do_QueryInterface(aPostData)); + if (stream) + { + // Rewind the postdata stream + stream->Seek(nsISeekableStream::NS_SEEK_SET, 0); + nsCOMPtr uploadChannel(do_QueryInterface(httpChannel)); + NS_ASSERTION(uploadChannel, "http must support nsIUploadChannel"); + // Attach the postdata to the http channel + uploadChannel->SetUploadStream(aPostData, EmptyCString(), -1); + } + } + + // Cache key + nsCOMPtr cacheChannel(do_QueryInterface(httpChannel)); + if (cacheChannel && cacheKey) + { + cacheChannel->SetCacheKey(cacheKey); + } + + // Headers + if (aExtraHeaders) + { + nsAutoCString oneHeader; + nsAutoCString headerName; + nsAutoCString headerValue; + int32_t crlf = 0; + int32_t colon = 0; + const char *kWhitespace = "\b\t\r\n "; + nsAutoCString extraHeaders(aExtraHeaders); + while (true) + { + crlf = extraHeaders.Find("\r\n", true); + if (crlf == -1) + break; + extraHeaders.Mid(oneHeader, 0, crlf); + extraHeaders.Cut(0, crlf + 2); + colon = oneHeader.Find(":"); + if (colon == -1) + break; // Should have a colon + oneHeader.Left(headerName, colon); + colon++; + oneHeader.Mid(headerValue, colon, oneHeader.Length() - colon); + headerName.Trim(kWhitespace); + headerValue.Trim(kWhitespace); + // Add the header (merging if required) + rv = httpChannel->SetRequestHeader(headerName, headerValue, true); + if (NS_FAILED(rv)) + { + EndDownload(NS_ERROR_FAILURE); + return NS_ERROR_FAILURE; + } + } + } + } + return SaveChannelInternal(inputChannel, aFile, aCalcFileExt); +} + +nsresult nsWebBrowserPersist::SaveChannelInternal( + nsIChannel *aChannel, nsIURI *aFile, bool aCalcFileExt) +{ + NS_ENSURE_ARG_POINTER(aChannel); + NS_ENSURE_ARG_POINTER(aFile); + + // The default behaviour of SaveChannelInternal is to download the source + // into a storage stream and upload that to the target. MakeOutputStream + // special-cases a file target and creates a file output stream directly. + // We want to special-case a file source and create a file input stream, + // but we don't need to do this in the case of a file target. + nsCOMPtr fc(do_QueryInterface(aChannel)); + nsCOMPtr fu(do_QueryInterface(aFile)); + + if (fc && !fu) { + nsCOMPtr fileInputStream, bufferedInputStream; + nsresult rv = NS_MaybeOpenChannelUsingOpen2(aChannel, + getter_AddRefs(fileInputStream)); + NS_ENSURE_SUCCESS(rv, rv); + rv = NS_NewBufferedInputStream(getter_AddRefs(bufferedInputStream), + fileInputStream, BUFFERED_OUTPUT_SIZE); + NS_ENSURE_SUCCESS(rv, rv); + nsAutoCString contentType; + aChannel->GetContentType(contentType); + return StartUpload(bufferedInputStream, aFile, contentType); + } + + // Read from the input channel + nsresult rv = NS_MaybeOpenChannelUsingAsyncOpen2(aChannel, this); + if (rv == NS_ERROR_NO_CONTENT) + { + // Assume this is a protocol such as mailto: which does not feed out + // data and just ignore it. + return NS_SUCCESS_DONT_FIXUP; + } + + if (NS_FAILED(rv)) + { + // Opening failed, but do we care? + if (mPersistFlags & PERSIST_FLAGS_FAIL_ON_BROKEN_LINKS) + { + SendErrorStatusChange(true, rv, aChannel, aFile); + EndDownload(NS_ERROR_FAILURE); + return NS_ERROR_FAILURE; + } + return NS_SUCCESS_DONT_FIXUP; + } + + // Add the output transport to the output map with the channel as the key + nsCOMPtr keyPtr = do_QueryInterface(aChannel); + mOutputMap.Put(keyPtr, new OutputData(aFile, mURI, aCalcFileExt)); + + return NS_OK; +} + +nsresult +nsWebBrowserPersist::GetExtensionForContentType(const char16_t *aContentType, char16_t **aExt) +{ + NS_ENSURE_ARG_POINTER(aContentType); + NS_ENSURE_ARG_POINTER(aExt); + + *aExt = nullptr; + + nsresult rv; + if (!mMIMEService) + { + mMIMEService = do_GetService(NS_MIMESERVICE_CONTRACTID, &rv); + NS_ENSURE_TRUE(mMIMEService, NS_ERROR_FAILURE); + } + + nsAutoCString contentType; + contentType.AssignWithConversion(aContentType); + nsAutoCString ext; + rv = mMIMEService->GetPrimaryExtension(contentType, EmptyCString(), ext); + if (NS_SUCCEEDED(rv)) + { + *aExt = UTF8ToNewUnicode(ext); + NS_ENSURE_TRUE(*aExt, NS_ERROR_OUT_OF_MEMORY); + return NS_OK; + } + + return NS_ERROR_FAILURE; +} + +nsresult +nsWebBrowserPersist::SaveDocumentDeferred(mozilla::UniquePtr&& aData) +{ + nsresult rv = + SaveDocumentInternal(aData->mDocument, aData->mFile, aData->mDataPath); + if (NS_FAILED(rv)) { + SendErrorStatusChange(true, rv, nullptr, mURI); + EndDownload(rv); + } + return rv; +} + +nsresult nsWebBrowserPersist::SaveDocumentInternal( + nsIWebBrowserPersistDocument *aDocument, nsIURI *aFile, nsIURI *aDataPath) +{ + mURI = nullptr; + NS_ENSURE_ARG_POINTER(aDocument); + NS_ENSURE_ARG_POINTER(aFile); + + nsresult rv = aDocument->SetPersistFlags(mPersistFlags); + NS_ENSURE_SUCCESS(rv, rv); + + rv = aDocument->GetIsPrivate(&mIsPrivate); + NS_ENSURE_SUCCESS(rv, rv); + + // See if we can get the local file representation of this URI + nsCOMPtr localFile; + rv = GetLocalFileFromURI(aFile, getter_AddRefs(localFile)); + + nsCOMPtr localDataPath; + if (NS_SUCCEEDED(rv) && aDataPath) + { + // See if we can get the local file representation of this URI + rv = GetLocalFileFromURI(aDataPath, getter_AddRefs(localDataPath)); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + } + + // Persist the main document + rv = aDocument->GetCharacterSet(mCurrentCharset); + NS_ENSURE_SUCCESS(rv, rv); + nsAutoCString uriSpec; + rv = aDocument->GetDocumentURI(uriSpec); + NS_ENSURE_SUCCESS(rv, rv); + rv = NS_NewURI(getter_AddRefs(mURI), uriSpec, mCurrentCharset.get()); + NS_ENSURE_SUCCESS(rv, rv); + rv = aDocument->GetBaseURI(uriSpec); + NS_ENSURE_SUCCESS(rv, rv); + rv = NS_NewURI(getter_AddRefs(mCurrentBaseURI), uriSpec, + mCurrentCharset.get()); + NS_ENSURE_SUCCESS(rv, rv); + + // Does the caller want to fixup the referenced URIs and save those too? + if (aDataPath) + { + // Basic steps are these. + // + // 1. Iterate through the document (and subdocuments) building a list + // of unique URIs. + // 2. For each URI create an OutputData entry and open a channel to save + // it. As each URI is saved, discover the mime type and fix up the + // local filename with the correct extension. + // 3. Store the document in a list and wait for URI persistence to finish + // 4. After URI persistence completes save the list of documents, + // fixing it up as it goes out to file. + + mCurrentDataPathIsRelative = false; + mCurrentDataPath = aDataPath; + mCurrentRelativePathToData = ""; + mCurrentThingsToPersist = 0; + mTargetBaseURI = aFile; + + // Determine if the specified data path is relative to the + // specified file, (e.g. c:\docs\htmldata is relative to + // c:\docs\myfile.htm, but not to d:\foo\data. + + // Starting with the data dir work back through its parents + // checking if one of them matches the base directory. + + if (localDataPath && localFile) + { + nsCOMPtr baseDir; + localFile->GetParent(getter_AddRefs(baseDir)); + + nsAutoCString relativePathToData; + nsCOMPtr dataDirParent; + dataDirParent = localDataPath; + while (dataDirParent) + { + bool sameDir = false; + dataDirParent->Equals(baseDir, &sameDir); + if (sameDir) + { + mCurrentRelativePathToData = relativePathToData; + mCurrentDataPathIsRelative = true; + break; + } + + nsAutoString dirName; + dataDirParent->GetLeafName(dirName); + + nsAutoCString newRelativePathToData; + newRelativePathToData = NS_ConvertUTF16toUTF8(dirName) + + NS_LITERAL_CSTRING("/") + + relativePathToData; + relativePathToData = newRelativePathToData; + + nsCOMPtr newDataDirParent; + rv = dataDirParent->GetParent(getter_AddRefs(newDataDirParent)); + dataDirParent = newDataDirParent; + } + } + else + { + // generate a relative path if possible + nsCOMPtr pathToBaseURL(do_QueryInterface(aFile)); + if (pathToBaseURL) + { + nsAutoCString relativePath; // nsACString + if (NS_SUCCEEDED(pathToBaseURL->GetRelativeSpec(aDataPath, relativePath))) + { + mCurrentDataPathIsRelative = true; + mCurrentRelativePathToData = relativePath; + } + } + } + + // Store the document in a list so when URI persistence is done and the + // filenames of saved URIs are known, the documents can be fixed up and + // saved + + auto *docData = new DocData; + docData->mBaseURI = mCurrentBaseURI; + docData->mCharset = mCurrentCharset; + docData->mDocument = aDocument; + docData->mFile = aFile; + mDocList.AppendElement(docData); + + // Walk the DOM gathering a list of externally referenced URIs in the uri map + nsCOMPtr visit = + new OnWalk(this, aFile, localDataPath); + return aDocument->ReadResources(visit); + } + else + { + auto *docData = new DocData; + docData->mBaseURI = mCurrentBaseURI; + docData->mCharset = mCurrentCharset; + docData->mDocument = aDocument; + docData->mFile = aFile; + mDocList.AppendElement(docData); + + // Not walking DOMs, so go directly to serialization. + SerializeNextFile(); + return NS_OK; + } +} + +NS_IMETHODIMP +nsWebBrowserPersist::OnWalk::VisitResource(nsIWebBrowserPersistDocument* aDoc, + const nsACString& aURI) +{ + return mParent->StoreURI(nsAutoCString(aURI).get()); +} + +NS_IMETHODIMP +nsWebBrowserPersist::OnWalk::VisitDocument(nsIWebBrowserPersistDocument* aDoc, + nsIWebBrowserPersistDocument* aSubDoc) +{ + URIData* data = nullptr; + nsAutoCString uriSpec; + nsresult rv = aSubDoc->GetDocumentURI(uriSpec); + NS_ENSURE_SUCCESS(rv, rv); + rv = mParent->StoreURI(uriSpec.get(), false, &data); + NS_ENSURE_SUCCESS(rv, rv); + if (!data) { + // If the URI scheme isn't persistable, then don't persist. + return NS_OK; + } + data->mIsSubFrame = true; + return mParent->SaveSubframeContent(aSubDoc, uriSpec, data); +} + + +NS_IMETHODIMP +nsWebBrowserPersist::OnWalk::EndVisit(nsIWebBrowserPersistDocument* aDoc, + nsresult aStatus) +{ + if (NS_FAILED(aStatus)) { + mParent->SendErrorStatusChange(true, aStatus, nullptr, mFile); + mParent->EndDownload(aStatus); + return aStatus; + } + mParent->FinishSaveDocumentInternal(mFile, mDataPath); + return NS_OK; +} + +void +nsWebBrowserPersist::FinishSaveDocumentInternal(nsIURI* aFile, + nsIFile* aDataPath) +{ + // If there are things to persist, create a directory to hold them + if (mCurrentThingsToPersist > 0) { + if (aDataPath) { + bool exists = false; + bool haveDir = false; + + aDataPath->Exists(&exists); + if (exists) { + aDataPath->IsDirectory(&haveDir); + } + if (!haveDir) { + nsresult rv = + aDataPath->Create(nsIFile::DIRECTORY_TYPE, 0755); + if (NS_SUCCEEDED(rv)) { + haveDir = true; + } else { + SendErrorStatusChange(false, rv, nullptr, aFile); + } + } + if (!haveDir) { + EndDownload(NS_ERROR_FAILURE); + return; + } + if (mPersistFlags & PERSIST_FLAGS_CLEANUP_ON_FAILURE) { + // Add to list of things to delete later if all goes wrong + auto *cleanupData = new CleanupData; + cleanupData->mFile = aDataPath; + cleanupData->mIsDirectory = true; + mCleanupList.AppendElement(cleanupData); + } + } + } + + if (mWalkStack.Length() > 0) { + mozilla::UniquePtr toWalk; + mWalkStack.LastElement().swap(toWalk); + mWalkStack.TruncateLength(mWalkStack.Length() - 1); + // Bounce this off the event loop to avoid stack overflow. + typedef StoreCopyPassByRRef WalkStorage; + auto saveMethod = &nsWebBrowserPersist::SaveDocumentDeferred; + nsCOMPtr saveLater = + NewRunnableMethod(this, saveMethod, + mozilla::Move(toWalk)); + NS_DispatchToCurrentThread(saveLater); + } else { + // Done walking DOMs; on to the serialization phase. + SerializeNextFile(); + } +} + +void nsWebBrowserPersist::Cleanup() +{ + mURIMap.Clear(); + for (auto iter = mOutputMap.Iter(); !iter.Done(); iter.Next()) { + nsCOMPtr channel = do_QueryInterface(iter.Key()); + if (channel) { + channel->Cancel(NS_BINDING_ABORTED); + } + } + mOutputMap.Clear(); + + for (auto iter = mUploadList.Iter(); !iter.Done(); iter.Next()) { + nsCOMPtr channel = do_QueryInterface(iter.Key()); + if (channel) { + channel->Cancel(NS_BINDING_ABORTED); + } + } + mUploadList.Clear(); + + uint32_t i; + for (i = 0; i < mDocList.Length(); i++) { + DocData *docData = mDocList.ElementAt(i); + delete docData; + } + mDocList.Clear(); + + for (i = 0; i < mCleanupList.Length(); i++) { + CleanupData *cleanupData = mCleanupList.ElementAt(i); + delete cleanupData; + } + mCleanupList.Clear(); + + mFilenameList.Clear(); +} + +void nsWebBrowserPersist::CleanupLocalFiles() +{ + // Two passes, the first pass cleans up files, the second pass tests + // for and then deletes empty directories. Directories that are not + // empty after the first pass must contain files from something else + // and are not deleted. + int pass; + for (pass = 0; pass < 2; pass++) + { + uint32_t i; + for (i = 0; i < mCleanupList.Length(); i++) + { + CleanupData *cleanupData = mCleanupList.ElementAt(i); + nsCOMPtr file = cleanupData->mFile; + + // Test if the dir / file exists (something in an earlier loop + // may have already removed it) + bool exists = false; + file->Exists(&exists); + if (!exists) + continue; + + // Test if the file has changed in between creation and deletion + // in some way that means it should be ignored + bool isDirectory = false; + file->IsDirectory(&isDirectory); + if (isDirectory != cleanupData->mIsDirectory) + continue; // A file has become a dir or vice versa ! + + if (pass == 0 && !isDirectory) + { + file->Remove(false); + } + else if (pass == 1 && isDirectory) // Directory + { + // Directories are more complicated. Enumerate through + // children looking for files. Any files created by the + // persist object would have been deleted by the first + // pass so if there are any there at this stage, the dir + // cannot be deleted because it has someone else's files + // in it. Empty child dirs are deleted but they must be + // recursed through to ensure they are actually empty. + + bool isEmptyDirectory = true; + nsCOMArray dirStack; + int32_t stackSize = 0; + + // Push the top level enum onto the stack + nsCOMPtr pos; + if (NS_SUCCEEDED(file->GetDirectoryEntries(getter_AddRefs(pos)))) + dirStack.AppendObject(pos); + + while (isEmptyDirectory && (stackSize = dirStack.Count())) + { + // Pop the last element + nsCOMPtr curPos; + curPos = dirStack[stackSize-1]; + dirStack.RemoveObjectAt(stackSize - 1); + + // Test if the enumerator has any more files in it + bool hasMoreElements = false; + curPos->HasMoreElements(&hasMoreElements); + if (!hasMoreElements) + { + continue; + } + + // Child files automatically make this code drop out, + // while child dirs keep the loop going. + nsCOMPtr child; + curPos->GetNext(getter_AddRefs(child)); + NS_ASSERTION(child, "No child element, but hasMoreElements says otherwise"); + if (!child) + continue; + nsCOMPtr childAsFile = do_QueryInterface(child); + NS_ASSERTION(childAsFile, "This should be a file but isn't"); + + bool childIsSymlink = false; + childAsFile->IsSymlink(&childIsSymlink); + bool childIsDir = false; + childAsFile->IsDirectory(&childIsDir); + if (!childIsDir || childIsSymlink) + { + // Some kind of file or symlink which means dir + // is not empty so just drop out. + isEmptyDirectory = false; + break; + } + // Push parent enumerator followed by child enumerator + nsCOMPtr childPos; + childAsFile->GetDirectoryEntries(getter_AddRefs(childPos)); + dirStack.AppendObject(curPos); + if (childPos) + dirStack.AppendObject(childPos); + + } + dirStack.Clear(); + + // If after all that walking the dir is deemed empty, delete it + if (isEmptyDirectory) + { + file->Remove(true); + } + } + } + } +} + +nsresult +nsWebBrowserPersist::CalculateUniqueFilename(nsIURI *aURI) +{ + nsCOMPtr url(do_QueryInterface(aURI)); + NS_ENSURE_TRUE(url, NS_ERROR_FAILURE); + + bool nameHasChanged = false; + nsresult rv; + + // Get the old filename + nsAutoCString filename; + rv = url->GetFileName(filename); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + nsAutoCString directory; + rv = url->GetDirectory(directory); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + // Split the filename into a base and an extension. + // e.g. "foo.html" becomes "foo" & ".html" + // + // The nsIURL methods GetFileBaseName & GetFileExtension don't + // preserve the dot whereas this code does to save some effort + // later when everything is put back together. + int32_t lastDot = filename.RFind("."); + nsAutoCString base; + nsAutoCString ext; + if (lastDot >= 0) + { + filename.Mid(base, 0, lastDot); + filename.Mid(ext, lastDot, filename.Length() - lastDot); // includes dot + } + else + { + // filename contains no dot + base = filename; + } + + // Test if the filename is longer than allowed by the OS + int32_t needToChop = filename.Length() - kDefaultMaxFilenameLength; + if (needToChop > 0) + { + // Truncate the base first and then the ext if necessary + if (base.Length() > (uint32_t) needToChop) + { + base.Truncate(base.Length() - needToChop); + } + else + { + needToChop -= base.Length() - 1; + base.Truncate(1); + if (ext.Length() > (uint32_t) needToChop) + { + ext.Truncate(ext.Length() - needToChop); + } + else + { + ext.Truncate(0); + } + // If kDefaultMaxFilenameLength were 1 we'd be in trouble here, + // but that won't happen because it will be set to a sensible + // value. + } + + filename.Assign(base); + filename.Append(ext); + nameHasChanged = true; + } + + // Ensure the filename is unique + // Create a filename if it's empty, or if the filename / datapath is + // already taken by another URI and create an alternate name. + + if (base.IsEmpty() || !mFilenameList.IsEmpty()) + { + nsAutoCString tmpPath; + nsAutoCString tmpBase; + uint32_t duplicateCounter = 1; + while (true) + { + // Make a file name, + // Foo become foo_001, foo_002, etc. + // Empty files become _001, _002 etc. + + if (base.IsEmpty() || duplicateCounter > 1) + { + char * tmp = PR_smprintf("_%03d", duplicateCounter); + NS_ENSURE_TRUE(tmp, NS_ERROR_OUT_OF_MEMORY); + if (filename.Length() < kDefaultMaxFilenameLength - 4) + { + tmpBase = base; + } + else + { + base.Mid(tmpBase, 0, base.Length() - 4); + } + tmpBase.Append(tmp); + PR_smprintf_free(tmp); + } + else + { + tmpBase = base; + } + + tmpPath.Assign(directory); + tmpPath.Append(tmpBase); + tmpPath.Append(ext); + + // Test if the name is a duplicate + if (!mFilenameList.Contains(tmpPath)) + { + if (!base.Equals(tmpBase)) + { + filename.Assign(tmpBase); + filename.Append(ext); + nameHasChanged = true; + } + break; + } + duplicateCounter++; + } + } + + // Add name to list of those already used + nsAutoCString newFilepath(directory); + newFilepath.Append(filename); + mFilenameList.AppendElement(newFilepath); + + // Update the uri accordingly if the filename actually changed + if (nameHasChanged) + { + // Final sanity test + if (filename.Length() > kDefaultMaxFilenameLength) + { + NS_WARNING("Filename wasn't truncated less than the max file length - how can that be?"); + return NS_ERROR_FAILURE; + } + + nsCOMPtr localFile; + GetLocalFileFromURI(aURI, getter_AddRefs(localFile)); + + if (localFile) + { + nsAutoString filenameAsUnichar; + filenameAsUnichar.AssignWithConversion(filename.get()); + localFile->SetLeafName(filenameAsUnichar); + + // Resync the URI with the file after the extension has been appended + nsresult rv; + nsCOMPtr fileURL = do_QueryInterface(aURI, &rv); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + fileURL->SetFile(localFile); // this should recalculate uri + } + else + { + url->SetFileName(filename); + } + } + + return NS_OK; +} + + +nsresult +nsWebBrowserPersist::MakeFilenameFromURI(nsIURI *aURI, nsString &aFilename) +{ + // Try to get filename from the URI. + nsAutoString fileName; + + // Get a suggested file name from the URL but strip it of characters + // likely to cause the name to be illegal. + + nsCOMPtr url(do_QueryInterface(aURI)); + if (url) + { + nsAutoCString nameFromURL; + url->GetFileName(nameFromURL); + if (mPersistFlags & PERSIST_FLAGS_DONT_CHANGE_FILENAMES) + { + fileName.AssignWithConversion(NS_UnescapeURL(nameFromURL).BeginReading()); + aFilename = fileName; + return NS_OK; + } + if (!nameFromURL.IsEmpty()) + { + // Unescape the file name (GetFileName escapes it) + NS_UnescapeURL(nameFromURL); + uint32_t nameLength = 0; + const char *p = nameFromURL.get(); + for (;*p && *p != ';' && *p != '?' && *p != '#' && *p != '.' + ;p++) + { + if (nsCRT::IsAsciiAlpha(*p) || nsCRT::IsAsciiDigit(*p) + || *p == '.' || *p == '-' || *p == '_' || (*p == ' ')) + { + fileName.Append(char16_t(*p)); + if (++nameLength == kDefaultMaxFilenameLength) + { + // Note: + // There is no point going any further since it will be + // truncated in CalculateUniqueFilename anyway. + // More importantly, certain implementations of + // nsIFile (e.g. the Mac impl) might truncate + // names in undesirable ways, such as truncating from + // the middle, inserting ellipsis and so on. + break; + } + } + } + } + } + + // Empty filenames can confuse the local file object later + // when it attempts to set the leaf name in CalculateUniqueFilename + // for duplicates and ends up replacing the parent dir. To avoid + // the problem, all filenames are made at least one character long. + if (fileName.IsEmpty()) + { + fileName.Append(char16_t('a')); // 'a' is for arbitrary + } + + aFilename = fileName; + return NS_OK; +} + + +nsresult +nsWebBrowserPersist::CalculateAndAppendFileExt(nsIURI *aURI, nsIChannel *aChannel, nsIURI *aOriginalURIWithExtension) +{ + nsresult rv; + + if (!mMIMEService) + { + mMIMEService = do_GetService(NS_MIMESERVICE_CONTRACTID, &rv); + NS_ENSURE_TRUE(mMIMEService, NS_ERROR_FAILURE); + } + + nsAutoCString contentType; + + // Get the content type from the channel + aChannel->GetContentType(contentType); + + // Get the content type from the MIME service + if (contentType.IsEmpty()) + { + nsCOMPtr uri; + aChannel->GetOriginalURI(getter_AddRefs(uri)); + mMIMEService->GetTypeFromURI(uri, contentType); + } + + // Append the extension onto the file + if (!contentType.IsEmpty()) + { + nsCOMPtr mimeInfo; + mMIMEService->GetFromTypeAndExtension( + contentType, EmptyCString(), getter_AddRefs(mimeInfo)); + + nsCOMPtr localFile; + GetLocalFileFromURI(aURI, getter_AddRefs(localFile)); + + if (mimeInfo) + { + nsCOMPtr url(do_QueryInterface(aURI)); + NS_ENSURE_TRUE(url, NS_ERROR_FAILURE); + + nsAutoCString newFileName; + url->GetFileName(newFileName); + + // Test if the current extension is current for the mime type + bool hasExtension = false; + int32_t ext = newFileName.RFind("."); + if (ext != -1) + { + mimeInfo->ExtensionExists(Substring(newFileName, ext + 1), &hasExtension); + } + + // Append the mime file extension + nsAutoCString fileExt; + if (!hasExtension) + { + // Test if previous extension is acceptable + nsCOMPtr oldurl(do_QueryInterface(aOriginalURIWithExtension)); + NS_ENSURE_TRUE(oldurl, NS_ERROR_FAILURE); + oldurl->GetFileExtension(fileExt); + bool useOldExt = false; + if (!fileExt.IsEmpty()) + { + mimeInfo->ExtensionExists(fileExt, &useOldExt); + } + + // can't use old extension so use primary extension + if (!useOldExt) + { + mimeInfo->GetPrimaryExtension(fileExt); + } + + if (!fileExt.IsEmpty()) + { + uint32_t newLength = newFileName.Length() + fileExt.Length() + 1; + if (newLength > kDefaultMaxFilenameLength) + { + if (fileExt.Length() > kDefaultMaxFilenameLength/2) + fileExt.Truncate(kDefaultMaxFilenameLength/2); + + uint32_t diff = kDefaultMaxFilenameLength - 1 - + fileExt.Length(); + if (newFileName.Length() > diff) + newFileName.Truncate(diff); + } + newFileName.Append('.'); + newFileName.Append(fileExt); + } + + if (localFile) + { + localFile->SetLeafName(NS_ConvertUTF8toUTF16(newFileName)); + + // Resync the URI with the file after the extension has been appended + nsCOMPtr fileURL = do_QueryInterface(aURI, &rv); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + fileURL->SetFile(localFile); // this should recalculate uri + } + else + { + url->SetFileName(newFileName); + } + } + + } + } + + return NS_OK; +} + +nsresult +nsWebBrowserPersist::MakeOutputStream( + nsIURI *aURI, nsIOutputStream **aOutputStream) +{ + nsresult rv; + + nsCOMPtr localFile; + GetLocalFileFromURI(aURI, getter_AddRefs(localFile)); + if (localFile) + rv = MakeOutputStreamFromFile(localFile, aOutputStream); + else + rv = MakeOutputStreamFromURI(aURI, aOutputStream); + + return rv; +} + +nsresult +nsWebBrowserPersist::MakeOutputStreamFromFile( + nsIFile *aFile, nsIOutputStream **aOutputStream) +{ + nsresult rv = NS_OK; + + nsCOMPtr fileOutputStream = + do_CreateInstance(NS_LOCALFILEOUTPUTSTREAM_CONTRACTID, &rv); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + // XXX brade: get the right flags here! + int32_t ioFlags = -1; + if (mPersistFlags & nsIWebBrowserPersist::PERSIST_FLAGS_APPEND_TO_FILE) + ioFlags = PR_APPEND | PR_CREATE_FILE | PR_WRONLY; + rv = fileOutputStream->Init(aFile, ioFlags, -1, 0); + NS_ENSURE_SUCCESS(rv, rv); + + *aOutputStream = NS_BufferOutputStream(fileOutputStream, + BUFFERED_OUTPUT_SIZE).take(); + + if (mPersistFlags & PERSIST_FLAGS_CLEANUP_ON_FAILURE) + { + // Add to cleanup list in event of failure + auto *cleanupData = new CleanupData; + if (!cleanupData) { + NS_RELEASE(*aOutputStream); + return NS_ERROR_OUT_OF_MEMORY; + } + cleanupData->mFile = aFile; + cleanupData->mIsDirectory = false; + mCleanupList.AppendElement(cleanupData); + } + + return NS_OK; +} + +nsresult +nsWebBrowserPersist::MakeOutputStreamFromURI( + nsIURI *aURI, nsIOutputStream **aOutputStream) +{ + uint32_t segsize = 8192; + uint32_t maxsize = uint32_t(-1); + nsCOMPtr storStream; + nsresult rv = NS_NewStorageStream(segsize, maxsize, getter_AddRefs(storStream)); + NS_ENSURE_SUCCESS(rv, rv); + + NS_ENSURE_SUCCESS(CallQueryInterface(storStream, aOutputStream), NS_ERROR_FAILURE); + return NS_OK; +} + +void +nsWebBrowserPersist::FinishDownload() +{ + EndDownload(NS_OK); +} + +void +nsWebBrowserPersist::EndDownload(nsresult aResult) +{ + // Store the error code in the result if it is an error + if (NS_SUCCEEDED(mPersistResult) && NS_FAILED(aResult)) + { + mPersistResult = aResult; + } + + // mCompleted needs to be set before issuing the stop notification. + // (Bug 1224437) + mCompleted = true; + // State stop notification + if (mProgressListener) { + mProgressListener->OnStateChange(nullptr, nullptr, + nsIWebProgressListener::STATE_STOP + | nsIWebProgressListener::STATE_IS_NETWORK, mPersistResult); + } + + // Do file cleanup if required + if (NS_FAILED(aResult) && (mPersistFlags & PERSIST_FLAGS_CLEANUP_ON_FAILURE)) + { + CleanupLocalFiles(); + } + + // Cleanup the channels + Cleanup(); + + mProgressListener = nullptr; + mProgressListener2 = nullptr; + mEventSink = nullptr; +} + +nsresult +nsWebBrowserPersist::FixRedirectedChannelEntry(nsIChannel *aNewChannel) +{ + NS_ENSURE_ARG_POINTER(aNewChannel); + + // Iterate through existing open channels looking for one with a URI + // matching the one specified. + nsCOMPtr originalURI; + aNewChannel->GetOriginalURI(getter_AddRefs(originalURI)); + nsISupports* matchingKey = nullptr; + for (auto iter = mOutputMap.Iter(); !iter.Done(); iter.Next()) { + nsISupports* key = iter.Key(); + nsCOMPtr thisChannel = do_QueryInterface(key); + nsCOMPtr thisURI; + + thisChannel->GetOriginalURI(getter_AddRefs(thisURI)); + + // Compare this channel's URI to the one passed in. + bool matchingURI = false; + thisURI->Equals(originalURI, &matchingURI); + if (matchingURI) { + matchingKey = key; + break; + } + } + + if (matchingKey) { + // If a match was found, remove the data entry with the old channel + // key and re-add it with the new channel key. + nsAutoPtr outputData; + mOutputMap.RemoveAndForget(matchingKey, outputData); + NS_ENSURE_TRUE(outputData, NS_ERROR_FAILURE); + + // Store data again with new channel unless told to ignore redirects. + if (!(mPersistFlags & PERSIST_FLAGS_IGNORE_REDIRECTED_DATA)) { + nsCOMPtr keyPtr = do_QueryInterface(aNewChannel); + mOutputMap.Put(keyPtr, outputData.forget()); + } + } + + return NS_OK; +} + +void +nsWebBrowserPersist::CalcTotalProgress() +{ + mTotalCurrentProgress = 0; + mTotalMaxProgress = 0; + + if (mOutputMap.Count() > 0) { + // Total up the progress of each output stream + for (auto iter = mOutputMap.Iter(); !iter.Done(); iter.Next()) { + // Only count toward total progress if destination file is local. + OutputData* data = iter.UserData(); + nsCOMPtr fileURL = do_QueryInterface(data->mFile); + if (fileURL) { + mTotalCurrentProgress += data->mSelfProgress; + mTotalMaxProgress += data->mSelfProgressMax; + } + } + } + + if (mUploadList.Count() > 0) { + // Total up the progress of each upload + for (auto iter = mUploadList.Iter(); !iter.Done(); iter.Next()) { + UploadData* data = iter.UserData(); + if (data) { + mTotalCurrentProgress += data->mSelfProgress; + mTotalMaxProgress += data->mSelfProgressMax; + } + } + } + + // XXX this code seems pretty bogus and pointless + if (mTotalCurrentProgress == 0 && mTotalMaxProgress == 0) + { + // No output streams so we must be complete + mTotalCurrentProgress = 10000; + mTotalMaxProgress = 10000; + } +} + +nsresult +nsWebBrowserPersist::StoreURI( + const char *aURI, bool aNeedsPersisting, URIData **aData) +{ + NS_ENSURE_ARG_POINTER(aURI); + + nsCOMPtr uri; + nsresult rv = NS_NewURI(getter_AddRefs(uri), + nsDependentCString(aURI), + mCurrentCharset.get(), + mCurrentBaseURI); + NS_ENSURE_SUCCESS(rv, rv); + + return StoreURI(uri, aNeedsPersisting, aData); +} + +nsresult +nsWebBrowserPersist::StoreURI( + nsIURI *aURI, bool aNeedsPersisting, URIData **aData) +{ + NS_ENSURE_ARG_POINTER(aURI); + if (aData) + { + *aData = nullptr; + } + + // Test if this URI should be persisted. By default + // we should assume the URI is persistable. + bool doNotPersistURI; + nsresult rv = NS_URIChainHasFlags(aURI, + nsIProtocolHandler::URI_NON_PERSISTABLE, + &doNotPersistURI); + if (NS_FAILED(rv)) + { + doNotPersistURI = false; + } + + if (doNotPersistURI) + { + return NS_OK; + } + + URIData *data = nullptr; + MakeAndStoreLocalFilenameInURIMap(aURI, aNeedsPersisting, &data); + if (aData) + { + *aData = data; + } + + return NS_OK; +} + +nsresult +nsWebBrowserPersist::URIData::GetLocalURI(nsIURI *targetBaseURI, nsCString& aSpecOut) +{ + aSpecOut.SetIsVoid(true); + if (!mNeedsFixup) { + return NS_OK; + } + nsresult rv; + nsCOMPtr fileAsURI; + if (mFile) { + rv = mFile->Clone(getter_AddRefs(fileAsURI)); + NS_ENSURE_SUCCESS(rv, rv); + } else { + rv = mDataPath->Clone(getter_AddRefs(fileAsURI)); + NS_ENSURE_SUCCESS(rv, rv); + rv = AppendPathToURI(fileAsURI, mFilename); + NS_ENSURE_SUCCESS(rv, rv); + } + + // remove username/password if present + fileAsURI->SetUserPass(EmptyCString()); + + // reset node attribute + // Use relative or absolute links + if (mDataPathIsRelative) { + bool isEqual = false; + if (NS_SUCCEEDED(mRelativeDocumentURI->Equals(targetBaseURI, &isEqual)) && isEqual) { + nsCOMPtr url(do_QueryInterface(fileAsURI)); + if (!url) { + return NS_ERROR_FAILURE; + } + + nsAutoCString filename; + url->GetFileName(filename); + + nsAutoCString rawPathURL(mRelativePathToData); + rawPathURL.Append(filename); + + nsAutoCString buf; + aSpecOut = NS_EscapeURL(rawPathURL, esc_FilePath, buf); + } else { + nsAutoCString rawPathURL; + + nsCOMPtr dataFile; + rv = GetLocalFileFromURI(mFile, getter_AddRefs(dataFile)); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr docFile; + rv = GetLocalFileFromURI(targetBaseURI, getter_AddRefs(docFile)); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr parentDir; + rv = docFile->GetParent(getter_AddRefs(parentDir)); + NS_ENSURE_SUCCESS(rv, rv); + + rv = dataFile->GetRelativePath(parentDir, rawPathURL); + NS_ENSURE_SUCCESS(rv, rv); + + nsAutoCString buf; + aSpecOut = NS_EscapeURL(rawPathURL, esc_FilePath, buf); + } + } else { + fileAsURI->GetSpec(aSpecOut); + } + if (mIsSubFrame) { + AppendUTF16toUTF8(mSubFrameExt, aSpecOut); + } + + return NS_OK; +} + +bool +nsWebBrowserPersist::DocumentEncoderExists(const char *aContentType) +{ + // Check if there is an encoder for the desired content type. + nsAutoCString contractID(NS_DOC_ENCODER_CONTRACTID_BASE); + contractID.Append(aContentType); + + nsCOMPtr registrar; + NS_GetComponentRegistrar(getter_AddRefs(registrar)); + if (registrar) + { + bool result; + nsresult rv = registrar->IsContractIDRegistered(contractID.get(), + &result); + if (NS_SUCCEEDED(rv) && result) + { + return true; + } + } + return false; +} + +nsresult +nsWebBrowserPersist::SaveSubframeContent( + nsIWebBrowserPersistDocument *aFrameContent, + const nsCString& aURISpec, + URIData *aData) +{ + NS_ENSURE_ARG_POINTER(aData); + + // Extract the content type for the frame's contents. + nsAutoCString contentType; + nsresult rv = aFrameContent->GetContentType(contentType); + NS_ENSURE_SUCCESS(rv, rv); + + nsXPIDLString ext; + GetExtensionForContentType(NS_ConvertASCIItoUTF16(contentType).get(), + getter_Copies(ext)); + + // We must always have an extension so we will try to re-assign + // the original extension if GetExtensionForContentType fails. + if (ext.IsEmpty()) { + nsCOMPtr docURI; + rv = NS_NewURI(getter_AddRefs(docURI), aURISpec, mCurrentCharset.get()); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr url(do_QueryInterface(docURI, &rv)); + nsAutoCString extension; + if (NS_SUCCEEDED(rv)) { + url->GetFileExtension(extension); + } else { + extension.AssignLiteral("htm"); + } + aData->mSubFrameExt.Assign(char16_t('.')); + AppendUTF8toUTF16(extension, aData->mSubFrameExt); + } else { + aData->mSubFrameExt.Assign(char16_t('.')); + aData->mSubFrameExt.Append(ext); + } + + nsString filenameWithExt = aData->mFilename; + filenameWithExt.Append(aData->mSubFrameExt); + + // Work out the path for the subframe + nsCOMPtr frameURI; + rv = mCurrentDataPath->Clone(getter_AddRefs(frameURI)); + NS_ENSURE_SUCCESS(rv, rv); + rv = AppendPathToURI(frameURI, filenameWithExt); + NS_ENSURE_SUCCESS(rv, rv); + + // Work out the path for the subframe data + nsCOMPtr frameDataURI; + rv = mCurrentDataPath->Clone(getter_AddRefs(frameDataURI)); + NS_ENSURE_SUCCESS(rv, rv); + nsAutoString newFrameDataPath(aData->mFilename); + + // Append _data + newFrameDataPath.AppendLiteral("_data"); + rv = AppendPathToURI(frameDataURI, newFrameDataPath); + NS_ENSURE_SUCCESS(rv, rv); + + // Make frame document & data path conformant and unique + rv = CalculateUniqueFilename(frameURI); + NS_ENSURE_SUCCESS(rv, rv); + rv = CalculateUniqueFilename(frameDataURI); + NS_ENSURE_SUCCESS(rv, rv); + + mCurrentThingsToPersist++; + + // We shouldn't use SaveDocumentInternal for the contents + // of frames that are not documents, e.g. images. + if (DocumentEncoderExists(contentType.get())) { + auto toWalk = mozilla::MakeUnique(); + toWalk->mDocument = aFrameContent; + toWalk->mFile = frameURI; + toWalk->mDataPath = frameDataURI; + mWalkStack.AppendElement(mozilla::Move(toWalk)); + } else { + rv = StoreURI(aURISpec.get()); + } + NS_ENSURE_SUCCESS(rv, rv); + + // Store the updated uri to the frame + aData->mFile = frameURI; + aData->mSubFrameExt.Truncate(); // we already put this in frameURI + + return NS_OK; +} + +nsresult +nsWebBrowserPersist::CreateChannelFromURI(nsIURI *aURI, nsIChannel **aChannel) +{ + nsresult rv = NS_OK; + *aChannel = nullptr; + + rv = NS_NewChannel(aChannel, + aURI, + nsContentUtils::GetSystemPrincipal(), + nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_IS_NULL, + nsIContentPolicy::TYPE_OTHER); + NS_ENSURE_SUCCESS(rv, rv); + NS_ENSURE_ARG_POINTER(*aChannel); + + rv = (*aChannel)->SetNotificationCallbacks(static_cast(this)); + NS_ENSURE_SUCCESS(rv, rv); + return NS_OK; +} + + +// we store the current location as the key (absolutized version of domnode's attribute's value) +nsresult +nsWebBrowserPersist::MakeAndStoreLocalFilenameInURIMap( + nsIURI *aURI, bool aNeedsPersisting, URIData **aData) +{ + NS_ENSURE_ARG_POINTER(aURI); + + nsAutoCString spec; + nsresult rv = aURI->GetSpec(spec); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + // Create a sensibly named filename for the URI and store in the URI map + URIData *data; + if (mURIMap.Contains(spec)) + { + data = mURIMap.Get(spec); + if (aNeedsPersisting) + { + data->mNeedsPersisting = true; + } + if (aData) + { + *aData = data; + } + return NS_OK; + } + + // Create a unique file name for the uri + nsString filename; + rv = MakeFilenameFromURI(aURI, filename); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + // Store the file name + data = new URIData; + NS_ENSURE_TRUE(data, NS_ERROR_OUT_OF_MEMORY); + + data->mNeedsPersisting = aNeedsPersisting; + data->mNeedsFixup = true; + data->mFilename = filename; + data->mSaved = false; + data->mIsSubFrame = false; + data->mDataPath = mCurrentDataPath; + data->mDataPathIsRelative = mCurrentDataPathIsRelative; + data->mRelativePathToData = mCurrentRelativePathToData; + data->mRelativeDocumentURI = mTargetBaseURI; + data->mCharset = mCurrentCharset; + + if (aNeedsPersisting) + mCurrentThingsToPersist++; + + mURIMap.Put(spec, data); + if (aData) + { + *aData = data; + } + + return NS_OK; +} + +// Decide if we need to apply conversion to the passed channel. +void nsWebBrowserPersist::SetApplyConversionIfNeeded(nsIChannel *aChannel) +{ + nsresult rv = NS_OK; + nsCOMPtr encChannel = do_QueryInterface(aChannel, &rv); + if (NS_FAILED(rv)) + return; + + // Set the default conversion preference: + encChannel->SetApplyConversion(false); + + nsCOMPtr thisURI; + aChannel->GetURI(getter_AddRefs(thisURI)); + nsCOMPtr sourceURL(do_QueryInterface(thisURI)); + if (!sourceURL) + return; + nsAutoCString extension; + sourceURL->GetFileExtension(extension); + + nsCOMPtr encEnum; + encChannel->GetContentEncodings(getter_AddRefs(encEnum)); + if (!encEnum) + return; + nsCOMPtr helperAppService = + do_GetService(NS_EXTERNALHELPERAPPSERVICE_CONTRACTID, &rv); + if (NS_FAILED(rv)) + return; + bool hasMore; + rv = encEnum->HasMore(&hasMore); + if (NS_SUCCEEDED(rv) && hasMore) + { + nsAutoCString encType; + rv = encEnum->GetNext(encType); + if (NS_SUCCEEDED(rv)) + { + bool applyConversion = false; + rv = helperAppService->ApplyDecodingForExtension(extension, encType, + &applyConversion); + if (NS_SUCCEEDED(rv)) + encChannel->SetApplyConversion(applyConversion); + } + } +} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/nsWebBrowserPersist.h firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/nsWebBrowserPersist.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/nsWebBrowserPersist.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/nsWebBrowserPersist.h 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,181 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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/. */ + +#ifndef nsWebBrowserPersist_h__ +#define nsWebBrowserPersist_h__ + +#include "nsCOMPtr.h" +#include "nsWeakReference.h" + +#include "nsIInterfaceRequestor.h" +#include "nsIMIMEService.h" +#include "nsIStreamListener.h" +#include "nsIOutputStream.h" +#include "nsIInputStream.h" +#include "nsIChannel.h" +#include "nsIDocumentEncoder.h" +#include "nsITransport.h" +#include "nsIProgressEventSink.h" +#include "nsIFile.h" +#include "nsIWebProgressListener2.h" +#include "nsIWebBrowserPersistDocument.h" + +#include "mozilla/UniquePtr.h" +#include "nsClassHashtable.h" +#include "nsHashKeys.h" +#include "nsTArray.h" + +#include "nsCWebBrowserPersist.h" + +class nsIStorageStream; +class nsIWebBrowserPersistDocument; + +class nsWebBrowserPersist final : public nsIInterfaceRequestor, + public nsIWebBrowserPersist, + public nsIStreamListener, + public nsIProgressEventSink, + public nsSupportsWeakReference +{ + friend class nsEncoderNodeFixup; + +// Public members +public: + nsWebBrowserPersist(); + + NS_DECL_ISUPPORTS + NS_DECL_NSIINTERFACEREQUESTOR + NS_DECL_NSICANCELABLE + NS_DECL_NSIWEBBROWSERPERSIST + NS_DECL_NSIREQUESTOBSERVER + NS_DECL_NSISTREAMLISTENER + NS_DECL_NSIPROGRESSEVENTSINK + +// Private members +private: + virtual ~nsWebBrowserPersist(); + nsresult SaveURIInternal( + nsIURI *aURI, nsISupports *aCacheKey, nsIURI *aReferrer, + uint32_t aReferrerPolicy, nsIInputStream *aPostData, + const char *aExtraHeaders, nsIURI *aFile, + bool aCalcFileExt, bool aIsPrivate); + nsresult SaveChannelInternal( + nsIChannel *aChannel, nsIURI *aFile, bool aCalcFileExt); + nsresult SaveDocumentInternal( + nsIWebBrowserPersistDocument *aDocument, + nsIURI *aFile, + nsIURI *aDataPath); + nsresult SaveDocuments(); + void FinishSaveDocumentInternal(nsIURI* aFile, nsIFile* aDataPath); + nsresult GetExtensionForContentType( + const char16_t *aContentType, char16_t **aExt); + + struct CleanupData; + struct DocData; + struct OutputData; + struct UploadData; + struct URIData; + struct WalkData; + struct URIFixupData; + + class OnWalk; + class OnWrite; + class FlatURIMap; + friend class OnWalk; + friend class OnWrite; + + nsresult SaveDocumentDeferred(mozilla::UniquePtr&& aData); + void Cleanup(); + void CleanupLocalFiles(); + nsresult GetValidURIFromObject(nsISupports *aObject, nsIURI **aURI) const; + static nsresult GetLocalFileFromURI(nsIURI *aURI, nsIFile **aLocalFile); + static nsresult AppendPathToURI(nsIURI *aURI, const nsAString & aPath); + nsresult MakeAndStoreLocalFilenameInURIMap( + nsIURI *aURI, bool aNeedsPersisting, URIData **aData); + nsresult MakeOutputStream( + nsIURI *aFile, nsIOutputStream **aOutputStream); + nsresult MakeOutputStreamFromFile( + nsIFile *aFile, nsIOutputStream **aOutputStream); + nsresult MakeOutputStreamFromURI(nsIURI *aURI, nsIOutputStream **aOutStream); + nsresult CreateChannelFromURI(nsIURI *aURI, nsIChannel **aChannel); + nsresult StartUpload(nsIStorageStream *aOutStream, nsIURI *aDestinationURI, + const nsACString &aContentType); + nsresult StartUpload(nsIInputStream *aInputStream, nsIURI *aDestinationURI, + const nsACString &aContentType); + nsresult CalculateAndAppendFileExt(nsIURI *aURI, nsIChannel *aChannel, + nsIURI *aOriginalURIWithExtension); + nsresult CalculateUniqueFilename(nsIURI *aURI); + nsresult MakeFilenameFromURI( + nsIURI *aURI, nsString &aFilename); + nsresult StoreURI( + const char *aURI, + bool aNeedsPersisting = true, + URIData **aData = nullptr); + nsresult StoreURI( + nsIURI *aURI, + bool aNeedsPersisting = true, + URIData **aData = nullptr); + bool DocumentEncoderExists(const char *aContentType); + + nsresult SaveSubframeContent( + nsIWebBrowserPersistDocument *aFrameContent, + const nsCString& aURISpec, + URIData *aData); + nsresult SendErrorStatusChange( + bool aIsReadError, nsresult aResult, nsIRequest *aRequest, nsIURI *aURI); + + nsresult FixRedirectedChannelEntry(nsIChannel *aNewChannel); + + void EndDownload(nsresult aResult); + void FinishDownload(); + void SerializeNextFile(); + void CalcTotalProgress(); + + void SetApplyConversionIfNeeded(nsIChannel *aChannel); + + nsCOMPtr mCurrentDataPath; + bool mCurrentDataPathIsRelative; + nsCString mCurrentRelativePathToData; + nsCOMPtr mCurrentBaseURI; + nsCString mCurrentCharset; + nsCOMPtr mTargetBaseURI; + uint32_t mCurrentThingsToPersist; + + nsCOMPtr mMIMEService; + nsCOMPtr mURI; + nsCOMPtr mProgressListener; + /** + * Progress listener for 64-bit values; this is the same object as + * mProgressListener, but is a member to avoid having to qi it for each + * progress notification. + */ + nsCOMPtr mProgressListener2; + nsCOMPtr mEventSink; + nsClassHashtable mOutputMap; + nsClassHashtable mUploadList; + nsClassHashtable mURIMap; + nsCOMPtr mFlatURIMap; + nsTArray> mWalkStack; + nsTArray mDocList; + nsTArray mCleanupList; + nsTArray mFilenameList; + bool mFirstAndOnlyUse; + bool mSavingDocument; + bool mCancel; + bool mCompleted; + bool mStartSaving; + bool mReplaceExisting; + bool mSerializingOutput; + bool mIsPrivate; + uint32_t mPersistFlags; + nsresult mPersistResult; + int64_t mTotalCurrentProgress; + int64_t mTotalMaxProgress; + int16_t mWrapColumn; + uint32_t mEncodingFlags; + nsString mContentType; +}; + +#endif diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/PWebBrowserPersistDocument.ipdl firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/PWebBrowserPersistDocument.ipdl --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/PWebBrowserPersistDocument.ipdl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/PWebBrowserPersistDocument.ipdl 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,92 @@ +/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 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/. */ + +include protocol PContent; +include protocol PWebBrowserPersistResources; +include protocol PWebBrowserPersistSerialize; + +include InputStreamParams; + +namespace mozilla { + +// nsIWebBrowserPersistDocument has attributes which can be read +// synchronously. To avoid using sync IPC for them, the actor sends +// this structure from the child to the parent before the parent actor +// is exposed to XPCOM. +struct WebBrowserPersistDocumentAttrs { + bool isPrivate; + nsCString documentURI; + nsCString baseURI; + nsCString contentType; + nsCString characterSet; + nsString title; + nsString referrer; + nsString contentDisposition; + uint32_t cacheKey; + uint32_t persistFlags; +}; + +// IPDL doesn't have tuples, so this gives the pair of strings from +// nsIWebBrowserPersistURIMap::getURIMapping a name. +struct WebBrowserPersistURIMapEntry { + nsCString mapFrom; + nsCString mapTo; +}; + +// nsIWebBrowserPersistURIMap is just copied over IPC as one of these, +// not proxied, to simplify the protocol. +struct WebBrowserPersistURIMap { + WebBrowserPersistURIMapEntry[] mapURIs; + nsCString targetBaseURI; +}; + +// This remotes nsIWebBrowserPersistDocument and its visitors. The +// lifecycle is a little complicated: the initial document is +// constructed parent->child, but subdocuments are constructed +// child->parent and then passed back. Subdocuments aren't subactors, +// because that would impose a lifetime relationship that doesn't +// exist in the XPIDL; instead they're all managed by the enclosing +// PContent. +protocol PWebBrowserPersistDocument { + manager PContent; + manages PWebBrowserPersistResources; + manages PWebBrowserPersistSerialize; + +parent: + // The actor isn't exposed to XPCOM until after it gets one of these + // two messages; see also the state transition rules. The message + // is either a response to the constructor (if it was parent->child) + // or sent after it (if it was child->parent). + async Attributes(WebBrowserPersistDocumentAttrs aAttrs, + OptionalInputStreamParams postData, + FileDescriptor[] postFiles); + async InitFailure(nsresult aStatus); + +child: + async SetPersistFlags(uint32_t aNewFlags); + async PWebBrowserPersistResources(); + async PWebBrowserPersistSerialize(WebBrowserPersistURIMap aMap, + nsCString aRequestedContentType, + uint32_t aEncoderFlags, + uint32_t aWrapColumn); + async __delete__(); + +/* +state START: + recv Attributes goto MAIN; + recv InitFailure goto FAILED; + +state MAIN: + send SetPersistFlags goto MAIN; + send PWebBrowserPersistResources goto MAIN; + send PWebBrowserPersistSerialize goto MAIN; + send __delete__; + +state FAILED: + send __delete__; +*/ +}; + +} // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/PWebBrowserPersistResources.ipdl firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/PWebBrowserPersistResources.ipdl --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/PWebBrowserPersistResources.ipdl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/PWebBrowserPersistResources.ipdl 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,26 @@ +/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 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/. */ + +include protocol PWebBrowserPersistDocument; + +namespace mozilla { + +// == nsIWebBrowserPersistResourceVisitor +protocol PWebBrowserPersistResources { + manager PWebBrowserPersistDocument; + +parent: + async VisitResource(nsCString aURI); + + // The actor sent here is in the START state; the parent-side + // receiver will have to wait for it to enter the MAIN state + // before exposing it with a visitDocument call. + async VisitDocument(PWebBrowserPersistDocument aSubDocument); + + // This reflects the endVisit method. + async __delete__(nsresult aStatus); +}; + +} // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/PWebBrowserPersistSerialize.ipdl firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/PWebBrowserPersistSerialize.ipdl --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/PWebBrowserPersistSerialize.ipdl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/PWebBrowserPersistSerialize.ipdl 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,29 @@ +/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 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/. */ + +include protocol PWebBrowserPersistDocument; + +namespace mozilla { + +// This actor represents both an nsIWebBrowserPersistWriteCompletion +// and the nsIOutputStream passed with it to the writeContent method. +protocol PWebBrowserPersistSerialize { + manager PWebBrowserPersistDocument; + +parent: + // This sends the data with no flow control, so the parent could + // wind up buffering an arbitrarily large amount of data... but + // it's a serialized DOM that's already in memory as DOM nodes, so + // this is at worst just a constant-factor increase in memory usage. + // Also, Chromium does the same thing; see + // content::RenderViewImpl::didSerializeDataForFrame. + async WriteData(uint8_t[] aData); + + // This is the onFinish method. + async __delete__(nsCString aContentType, + nsresult aStatus); +}; + +} // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistDocumentChild.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistDocumentChild.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistDocumentChild.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistDocumentChild.cpp 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,157 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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 "WebBrowserPersistDocumentChild.h" + +#include "mozilla/ipc/InputStreamUtils.h" +#include "nsIDocument.h" +#include "nsIInputStream.h" +#include "WebBrowserPersistLocalDocument.h" +#include "WebBrowserPersistResourcesChild.h" +#include "WebBrowserPersistSerializeChild.h" + +namespace mozilla { + +WebBrowserPersistDocumentChild::WebBrowserPersistDocumentChild() +{ +} + +WebBrowserPersistDocumentChild::~WebBrowserPersistDocumentChild() = default; + +void +WebBrowserPersistDocumentChild::Start(nsIDocument* aDocument) +{ + RefPtr doc; + if (aDocument) { + doc = new WebBrowserPersistLocalDocument(aDocument); + } + Start(doc); +} + +void +WebBrowserPersistDocumentChild::Start(nsIWebBrowserPersistDocument* aDocument) +{ + MOZ_ASSERT(!mDocument); + if (!aDocument) { + SendInitFailure(NS_ERROR_FAILURE); + return; + } + + WebBrowserPersistDocumentAttrs attrs; + nsCOMPtr postDataStream; + OptionalInputStreamParams postData; + nsTArray postFiles; +#define ENSURE(e) do { \ + nsresult rv = (e); \ + if (NS_FAILED(rv)) { \ + SendInitFailure(rv); \ + return; \ + } \ + } while(0) + ENSURE(aDocument->GetIsPrivate(&(attrs.isPrivate()))); + ENSURE(aDocument->GetDocumentURI(attrs.documentURI())); + ENSURE(aDocument->GetBaseURI(attrs.baseURI())); + ENSURE(aDocument->GetContentType(attrs.contentType())); + ENSURE(aDocument->GetCharacterSet(attrs.characterSet())); + ENSURE(aDocument->GetTitle(attrs.title())); + ENSURE(aDocument->GetReferrer(attrs.referrer())); + ENSURE(aDocument->GetContentDisposition(attrs.contentDisposition())); + ENSURE(aDocument->GetCacheKey(&(attrs.cacheKey()))); + ENSURE(aDocument->GetPersistFlags(&(attrs.persistFlags()))); + ENSURE(aDocument->GetPostData(getter_AddRefs(postDataStream))); + ipc::SerializeInputStream(postDataStream, + postData, + postFiles); +#undef ENSURE + mDocument = aDocument; + SendAttributes(attrs, postData, postFiles); +} + +mozilla::ipc::IPCResult +WebBrowserPersistDocumentChild::RecvSetPersistFlags(const uint32_t& aNewFlags) +{ + mDocument->SetPersistFlags(aNewFlags); + return IPC_OK(); +} + +PWebBrowserPersistResourcesChild* +WebBrowserPersistDocumentChild::AllocPWebBrowserPersistResourcesChild() +{ + auto* actor = new WebBrowserPersistResourcesChild(); + NS_ADDREF(actor); + return actor; +} + +mozilla::ipc::IPCResult +WebBrowserPersistDocumentChild::RecvPWebBrowserPersistResourcesConstructor(PWebBrowserPersistResourcesChild* aActor) +{ + RefPtr visitor = + static_cast(aActor); + nsresult rv = mDocument->ReadResources(visitor); + if (NS_FAILED(rv)) { + // This is a sync failure on the child side but an async + // failure on the parent side -- it already got NS_OK from + // ReadResources, so the error has to be reported via the + // visitor instead. + visitor->EndVisit(mDocument, rv); + } + return IPC_OK(); +} + +bool +WebBrowserPersistDocumentChild::DeallocPWebBrowserPersistResourcesChild(PWebBrowserPersistResourcesChild* aActor) +{ + auto* castActor = + static_cast(aActor); + NS_RELEASE(castActor); + return true; +} + +PWebBrowserPersistSerializeChild* +WebBrowserPersistDocumentChild::AllocPWebBrowserPersistSerializeChild( + const WebBrowserPersistURIMap& aMap, + const nsCString& aRequestedContentType, + const uint32_t& aEncoderFlags, + const uint32_t& aWrapColumn) +{ + auto* actor = new WebBrowserPersistSerializeChild(aMap); + NS_ADDREF(actor); + return actor; +} + +mozilla::ipc::IPCResult +WebBrowserPersistDocumentChild::RecvPWebBrowserPersistSerializeConstructor( + PWebBrowserPersistSerializeChild* aActor, + const WebBrowserPersistURIMap& aMap, + const nsCString& aRequestedContentType, + const uint32_t& aEncoderFlags, + const uint32_t& aWrapColumn) +{ + auto* castActor = + static_cast(aActor); + // This actor performs the roles of: completion, URI map, and output stream. + nsresult rv = mDocument->WriteContent(castActor, + castActor, + aRequestedContentType, + aEncoderFlags, + aWrapColumn, + castActor); + if (NS_FAILED(rv)) { + castActor->OnFinish(mDocument, castActor, aRequestedContentType, rv); + } + return IPC_OK(); +} + +bool +WebBrowserPersistDocumentChild::DeallocPWebBrowserPersistSerializeChild(PWebBrowserPersistSerializeChild* aActor) +{ + auto* castActor = + static_cast(aActor); + NS_RELEASE(castActor); + return true; +} + +} // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistDocumentChild.h firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistDocumentChild.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistDocumentChild.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistDocumentChild.h 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,62 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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/. */ + +#ifndef WebBrowserPersistDocumentChild_h__ +#define WebBrowserPersistDocumentChild_h__ + +#include "mozilla/PWebBrowserPersistDocumentChild.h" +#include "nsCOMPtr.h" +#include "nsIWebBrowserPersistDocument.h" + +class nsIDocument; + +namespace mozilla { + +class WebBrowserPersistDocumentChild final + : public PWebBrowserPersistDocumentChild +{ +public: + WebBrowserPersistDocumentChild(); + ~WebBrowserPersistDocumentChild(); + + // This sends either Attributes or InitFailure and thereby causes + // the actor to leave the START state. + void Start(nsIWebBrowserPersistDocument* aDocument); + void Start(nsIDocument* aDocument); + + virtual mozilla::ipc::IPCResult + RecvSetPersistFlags(const uint32_t& aNewFlags) override; + + virtual PWebBrowserPersistResourcesChild* + AllocPWebBrowserPersistResourcesChild() override; + virtual mozilla::ipc::IPCResult + RecvPWebBrowserPersistResourcesConstructor(PWebBrowserPersistResourcesChild* aActor) override; + virtual bool + DeallocPWebBrowserPersistResourcesChild(PWebBrowserPersistResourcesChild* aActor) override; + + virtual PWebBrowserPersistSerializeChild* + AllocPWebBrowserPersistSerializeChild( + const WebBrowserPersistURIMap& aMap, + const nsCString& aRequestedContentType, + const uint32_t& aEncoderFlags, + const uint32_t& aWrapColumn) override; + virtual mozilla::ipc::IPCResult + RecvPWebBrowserPersistSerializeConstructor( + PWebBrowserPersistSerializeChild* aActor, + const WebBrowserPersistURIMap& aMap, + const nsCString& aRequestedContentType, + const uint32_t& aEncoderFlags, + const uint32_t& aWrapColumn) override; + virtual bool + DeallocPWebBrowserPersistSerializeChild(PWebBrowserPersistSerializeChild* aActor) override; + +private: + nsCOMPtr mDocument; +}; + +} // namespace mozilla + +#endif // WebBrowserPersistDocumentChild_h__ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistDocumentParent.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistDocumentParent.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistDocumentParent.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistDocumentParent.cpp 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,130 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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 "WebBrowserPersistDocumentParent.h" + +#include "mozilla/ipc/InputStreamUtils.h" +#include "mozilla/dom/PContentParent.h" +#include "nsIInputStream.h" +#include "nsThreadUtils.h" +#include "WebBrowserPersistResourcesParent.h" +#include "WebBrowserPersistSerializeParent.h" +#include "WebBrowserPersistRemoteDocument.h" + +namespace mozilla { + +WebBrowserPersistDocumentParent::WebBrowserPersistDocumentParent() +: mReflection(nullptr) +{ +} + +void +WebBrowserPersistDocumentParent::SetOnReady(nsIWebBrowserPersistDocumentReceiver* aOnReady) +{ + MOZ_ASSERT(aOnReady); + MOZ_ASSERT(!mOnReady); + MOZ_ASSERT(!mReflection); + mOnReady = aOnReady; +} + +void +WebBrowserPersistDocumentParent::ActorDestroy(ActorDestroyReason aWhy) +{ + if (mReflection) { + mReflection->ActorDestroy(); + mReflection = nullptr; + } + if (mOnReady) { + // Bug 1202887: If this is part of a subtree destruction, then + // anything which could cause another actor in that subtree to + // be Send__delete__()ed will cause use-after-free -- such as + // dropping the last reference to another document's + // WebBrowserPersistRemoteDocument. To avoid that, defer the + // callback until after the entire subtree is destroyed. + nsCOMPtr errorLater = NewRunnableMethod + (mOnReady, &nsIWebBrowserPersistDocumentReceiver::OnError, + NS_ERROR_FAILURE); + NS_DispatchToCurrentThread(errorLater); + mOnReady = nullptr; + } +} + +WebBrowserPersistDocumentParent::~WebBrowserPersistDocumentParent() +{ + MOZ_RELEASE_ASSERT(!mReflection); + MOZ_ASSERT(!mOnReady); +} + +mozilla::ipc::IPCResult +WebBrowserPersistDocumentParent::RecvAttributes(const Attrs& aAttrs, + const OptionalInputStreamParams& aPostData, + nsTArray&& aPostFiles) +{ + // Deserialize the postData unconditionally so that fds aren't leaked. + nsCOMPtr postData = + ipc::DeserializeInputStream(aPostData, aPostFiles); + if (!mOnReady || mReflection) { + return IPC_FAIL_NO_REASON(this); + } + mReflection = new WebBrowserPersistRemoteDocument(this, aAttrs, postData); + RefPtr reflection = mReflection; + mOnReady->OnDocumentReady(reflection); + mOnReady = nullptr; + return IPC_OK(); +} + +mozilla::ipc::IPCResult +WebBrowserPersistDocumentParent::RecvInitFailure(const nsresult& aFailure) +{ + if (!mOnReady || mReflection) { + return IPC_FAIL_NO_REASON(this); + } + mOnReady->OnError(aFailure); + mOnReady = nullptr; + // Warning: Send__delete__ deallocates this object. + IProtocol* mgr = Manager(); + if (!Send__delete__(this)) { + return IPC_FAIL_NO_REASON(mgr); + } + return IPC_OK(); +} + +PWebBrowserPersistResourcesParent* +WebBrowserPersistDocumentParent::AllocPWebBrowserPersistResourcesParent() +{ + MOZ_CRASH("Don't use this; construct the actor directly and AddRef."); + return nullptr; +} + +bool +WebBrowserPersistDocumentParent::DeallocPWebBrowserPersistResourcesParent(PWebBrowserPersistResourcesParent* aActor) +{ + // Turn the ref held by IPC back into an nsRefPtr. + RefPtr actor = + already_AddRefed( + static_cast(aActor)); + return true; +} + +PWebBrowserPersistSerializeParent* +WebBrowserPersistDocumentParent::AllocPWebBrowserPersistSerializeParent( + const WebBrowserPersistURIMap& aMap, + const nsCString& aRequestedContentType, + const uint32_t& aEncoderFlags, + const uint32_t& aWrapColumn) +{ + MOZ_CRASH("Don't use this; construct the actor directly."); + return nullptr; +} + +bool +WebBrowserPersistDocumentParent::DeallocPWebBrowserPersistSerializeParent(PWebBrowserPersistSerializeParent* aActor) +{ + delete aActor; + return true; +} + +} // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistDocumentParent.h firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistDocumentParent.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistDocumentParent.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistDocumentParent.h 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,79 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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/. */ + +#ifndef WebBrowserPersistDocumentParent_h__ +#define WebBrowserPersistDocumentParent_h__ + +#include "mozilla/Maybe.h" +#include "mozilla/PWebBrowserPersistDocumentParent.h" +#include "nsCOMPtr.h" +#include "nsIWebBrowserPersistDocument.h" + +// This class is the IPC half of the glue between the +// nsIWebBrowserPersistDocument interface and a remote document. When +// (and if) it receives the Attributes message it constructs an +// WebBrowserPersistRemoteDocument and releases it into the XPCOM +// universe; otherwise, it invokes the document receiver's error +// callback. +// +// This object's lifetime is the normal IPC lifetime; on destruction, +// it calls its XPCOM reflection (if it exists yet) to remove that +// reference. Normal deletion occurs when the XPCOM object is being +// destroyed or after an InitFailure is received and handled. +// +// See also: TabParent::StartPersistence. + +namespace mozilla { + +class WebBrowserPersistRemoteDocument; + +class WebBrowserPersistDocumentParent final + : public PWebBrowserPersistDocumentParent +{ +public: + WebBrowserPersistDocumentParent(); + virtual ~WebBrowserPersistDocumentParent(); + + // Set a callback to be invoked when the actor leaves the START + // state. This method must be called exactly once while the actor + // is still in the START state (or is unconstructed). + void SetOnReady(nsIWebBrowserPersistDocumentReceiver* aOnReady); + + using Attrs = WebBrowserPersistDocumentAttrs; + + // IPDL methods: + virtual mozilla::ipc::IPCResult + RecvAttributes(const Attrs& aAttrs, + const OptionalInputStreamParams& aPostData, + nsTArray&& aPostFiles) override; + virtual mozilla::ipc::IPCResult + RecvInitFailure(const nsresult& aFailure) override; + + virtual PWebBrowserPersistResourcesParent* + AllocPWebBrowserPersistResourcesParent() override; + virtual bool + DeallocPWebBrowserPersistResourcesParent(PWebBrowserPersistResourcesParent* aActor) override; + + virtual PWebBrowserPersistSerializeParent* + AllocPWebBrowserPersistSerializeParent( + const WebBrowserPersistURIMap& aMap, + const nsCString& aRequestedContentType, + const uint32_t& aEncoderFlags, + const uint32_t& aWrapColumn) override; + virtual bool + DeallocPWebBrowserPersistSerializeParent(PWebBrowserPersistSerializeParent* aActor) override; + + virtual void + ActorDestroy(ActorDestroyReason aWhy) override; +private: + // This is reset to nullptr when the callback is invoked. + nsCOMPtr mOnReady; + WebBrowserPersistRemoteDocument* mReflection; +}; + +} // namespace mozilla + +#endif // WebBrowserPersistDocumentParent_h__ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistLocalDocument.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistLocalDocument.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistLocalDocument.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistLocalDocument.cpp 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,1475 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * 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 "WebBrowserPersistLocalDocument.h" +#include "WebBrowserPersistDocumentParent.h" + +#include "mozilla/dom/HTMLInputElement.h" +#include "mozilla/dom/HTMLSharedElement.h" +#include "mozilla/dom/HTMLSharedObjectElement.h" +#include "mozilla/dom/TabParent.h" +#include "nsComponentManagerUtils.h" +#include "nsContentUtils.h" +#include "nsContentCID.h" +#include "nsCycleCollectionParticipant.h" +#include "nsFrameLoader.h" +#include "nsIComponentRegistrar.h" +#include "nsIContent.h" +#include "nsIDOMAttr.h" +#include "nsIDOMComment.h" +#include "nsIDOMDocument.h" +#include "nsIDOMHTMLAnchorElement.h" +#include "nsIDOMHTMLAppletElement.h" +#include "nsIDOMHTMLAreaElement.h" +#include "nsIDOMHTMLBaseElement.h" +#include "nsIDOMHTMLCollection.h" +#include "nsIDOMHTMLDocument.h" +#include "nsIDOMHTMLEmbedElement.h" +#include "nsIDOMHTMLFrameElement.h" +#include "nsIDOMHTMLIFrameElement.h" +#include "nsIDOMHTMLImageElement.h" +#include "nsIDOMHTMLInputElement.h" +#include "nsIDOMHTMLLinkElement.h" +#include "nsIDOMHTMLMediaElement.h" +#include "nsIDOMHTMLObjectElement.h" +#include "nsIDOMHTMLOptionElement.h" +#include "nsIDOMHTMLScriptElement.h" +#include "nsIDOMHTMLSourceElement.h" +#include "nsIDOMHTMLTextAreaElement.h" +#include "nsIDOMMozNamedAttrMap.h" +#include "nsIDOMNode.h" +#include "nsIDOMNodeFilter.h" +#include "nsIDOMNodeList.h" +#include "nsIDOMProcessingInstruction.h" +#include "nsIDOMTreeWalker.h" +#include "nsIDOMWindowUtils.h" +#include "nsIDocShell.h" +#include "nsIDocument.h" +#include "nsIDocumentEncoder.h" +#include "nsILoadContext.h" +#include "nsIProtocolHandler.h" +#include "nsISHEntry.h" +#include "nsISupportsPrimitives.h" +#include "nsITabParent.h" +#include "nsIWebBrowserPersist.h" +#include "nsIWebNavigation.h" +#include "nsIWebPageDescriptor.h" +#include "nsNetUtil.h" + +namespace mozilla { + +NS_IMPL_CYCLE_COLLECTING_ADDREF(WebBrowserPersistLocalDocument) +NS_IMPL_CYCLE_COLLECTING_RELEASE(WebBrowserPersistLocalDocument) + +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(WebBrowserPersistLocalDocument) + NS_INTERFACE_MAP_ENTRY(nsIWebBrowserPersistDocument) + NS_INTERFACE_MAP_ENTRY(nsISupports) +NS_INTERFACE_MAP_END + +NS_IMPL_CYCLE_COLLECTION(WebBrowserPersistLocalDocument, mDocument) + + +WebBrowserPersistLocalDocument::WebBrowserPersistLocalDocument(nsIDocument* aDocument) +: mDocument(aDocument) +, mPersistFlags(0) +{ + MOZ_ASSERT(mDocument); +} + +WebBrowserPersistLocalDocument::~WebBrowserPersistLocalDocument() = default; + +NS_IMETHODIMP +WebBrowserPersistLocalDocument::SetPersistFlags(uint32_t aFlags) +{ + mPersistFlags = aFlags; + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistLocalDocument::GetPersistFlags(uint32_t* aFlags) +{ + *aFlags = mPersistFlags; + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistLocalDocument::GetIsPrivate(bool* aIsPrivate) +{ + nsCOMPtr privacyContext = mDocument->GetLoadContext(); + *aIsPrivate = privacyContext && privacyContext->UsePrivateBrowsing(); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistLocalDocument::GetDocumentURI(nsACString& aURISpec) +{ + nsCOMPtr uri = mDocument->GetDocumentURI(); + if (!uri) { + return NS_ERROR_UNEXPECTED; + } + return uri->GetSpec(aURISpec); +} + +NS_IMETHODIMP +WebBrowserPersistLocalDocument::GetBaseURI(nsACString& aURISpec) +{ + nsCOMPtr uri = GetBaseURI(); + if (!uri) { + return NS_ERROR_UNEXPECTED; + } + return uri->GetSpec(aURISpec); +} + +NS_IMETHODIMP +WebBrowserPersistLocalDocument::GetContentType(nsACString& aContentType) +{ + nsAutoString utf16Type; + nsresult rv; + + rv = mDocument->GetContentType(utf16Type); + NS_ENSURE_SUCCESS(rv, rv); + aContentType = NS_ConvertUTF16toUTF8(utf16Type); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistLocalDocument::GetCharacterSet(nsACString& aCharSet) +{ + aCharSet = GetCharacterSet(); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistLocalDocument::GetTitle(nsAString& aTitle) +{ + nsAutoString titleBuffer; + mDocument->GetTitle(titleBuffer); + aTitle = titleBuffer; + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistLocalDocument::GetReferrer(nsAString& aReferrer) +{ + mDocument->GetReferrer(aReferrer); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistLocalDocument::GetContentDisposition(nsAString& aCD) +{ + nsCOMPtr window = mDocument->GetDefaultView(); + if (NS_WARN_IF(!window)) { + aCD.SetIsVoid(true); + return NS_OK; + } + nsCOMPtr utils = do_GetInterface(window); + if (NS_WARN_IF(!utils)) { + aCD.SetIsVoid(true); + return NS_OK; + } + nsresult rv = utils->GetDocumentMetadata( + NS_LITERAL_STRING("content-disposition"), aCD); + if (NS_WARN_IF(NS_FAILED(rv))) { + aCD.SetIsVoid(true); + } + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistLocalDocument::GetCacheKey(uint32_t* aKey) +{ + nsCOMPtr history = GetHistory(); + if (!history) { + *aKey = 0; + return NS_OK; + } + nsCOMPtr abstractKey; + nsresult rv = history->GetCacheKey(getter_AddRefs(abstractKey)); + if (NS_WARN_IF(NS_FAILED(rv)) || !abstractKey) { + *aKey = 0; + return NS_OK; + } + nsCOMPtr u32 = do_QueryInterface(abstractKey); + if (NS_WARN_IF(!u32)) { + *aKey = 0; + return NS_OK; + } + return u32->GetData(aKey); +} + +NS_IMETHODIMP +WebBrowserPersistLocalDocument::GetPostData(nsIInputStream** aStream) +{ + nsCOMPtr history = GetHistory(); + if (!history) { + *aStream = nullptr; + return NS_OK; + } + return history->GetPostData(aStream); +} + +already_AddRefed +WebBrowserPersistLocalDocument::GetHistory() +{ + nsCOMPtr window = mDocument->GetDefaultView(); + if (NS_WARN_IF(!window)) { + return nullptr; + } + nsCOMPtr webNav = do_GetInterface(window); + if (NS_WARN_IF(!webNav)) { + return nullptr; + } + nsCOMPtr desc = do_QueryInterface(webNav); + if (NS_WARN_IF(!desc)) { + return nullptr; + } + nsCOMPtr curDesc; + nsresult rv = desc->GetCurrentDescriptor(getter_AddRefs(curDesc)); + // This can fail if, e.g., the document is a Print Preview. + if (NS_FAILED(rv) || NS_WARN_IF(!curDesc)) { + return nullptr; + } + nsCOMPtr history = do_QueryInterface(curDesc); + return history.forget(); +} + +const nsCString& +WebBrowserPersistLocalDocument::GetCharacterSet() const +{ + return mDocument->GetDocumentCharacterSet(); +} + +uint32_t +WebBrowserPersistLocalDocument::GetPersistFlags() const +{ + return mPersistFlags; +} + + +already_AddRefed +WebBrowserPersistLocalDocument::GetBaseURI() const +{ + return mDocument->GetBaseURI(); +} + + +namespace { + +// Helper class for ReadResources(). +class ResourceReader final : public nsIWebBrowserPersistDocumentReceiver { +public: + ResourceReader(WebBrowserPersistLocalDocument* aParent, + nsIWebBrowserPersistResourceVisitor* aVisitor); + nsresult OnWalkDOMNode(nsIDOMNode* aNode); + + // This is called both to indicate the end of the document walk + // and when a subdocument is (maybe asynchronously) sent to the + // visitor. The call to EndVisit needs to happen after both of + // those have finished. + void DocumentDone(nsresult aStatus); + + NS_DECL_NSIWEBBROWSERPERSISTDOCUMENTRECEIVER + NS_DECL_ISUPPORTS + +private: + RefPtr mParent; + nsCOMPtr mVisitor; + nsCOMPtr mCurrentBaseURI; + uint32_t mPersistFlags; + + // The number of DocumentDone calls after which EndVisit will be + // called on the visitor. Counts the main document if it's still + // being walked and any outstanding asynchronous subdocument + // StartPersistence calls. + size_t mOutstandingDocuments; + // Collects the status parameters to DocumentDone calls. + nsresult mEndStatus; + + nsresult OnWalkURI(const nsACString& aURISpec); + nsresult OnWalkURI(nsIURI* aURI); + nsresult OnWalkAttribute(nsIDOMNode* aNode, + const char* aAttribute, + const char* aNamespaceURI = ""); + nsresult OnWalkSubframe(nsIDOMNode* aNode); + + bool IsFlagSet(uint32_t aFlag) const { + return mParent->GetPersistFlags() & aFlag; + } + + ~ResourceReader(); + + using IWBP = nsIWebBrowserPersist; +}; + +NS_IMPL_ISUPPORTS(ResourceReader, nsIWebBrowserPersistDocumentReceiver) + +ResourceReader::ResourceReader(WebBrowserPersistLocalDocument* aParent, + nsIWebBrowserPersistResourceVisitor* aVisitor) +: mParent(aParent) +, mVisitor(aVisitor) +, mCurrentBaseURI(aParent->GetBaseURI()) +, mPersistFlags(aParent->GetPersistFlags()) +, mOutstandingDocuments(1) +, mEndStatus(NS_OK) +{ + MOZ_ASSERT(mCurrentBaseURI); +} + +ResourceReader::~ResourceReader() +{ + MOZ_ASSERT(mOutstandingDocuments == 0); +} + +void +ResourceReader::DocumentDone(nsresult aStatus) +{ + MOZ_ASSERT(mOutstandingDocuments > 0); + if (NS_SUCCEEDED(mEndStatus)) { + mEndStatus = aStatus; + } + if (--mOutstandingDocuments == 0) { + mVisitor->EndVisit(mParent, mEndStatus); + } +} + +nsresult +ResourceReader::OnWalkSubframe(nsIDOMNode* aNode) +{ + nsCOMPtr loaderOwner = do_QueryInterface(aNode); + NS_ENSURE_STATE(loaderOwner); + RefPtr loader = loaderOwner->GetFrameLoader(); + NS_ENSURE_STATE(loader); + + ++mOutstandingDocuments; + // Pass in 0 as the outer window ID so that we start + // persisting the root of this subframe, and not some other + // subframe child of this subframe. + nsresult rv = loader->StartPersistence(0, this); + if (NS_FAILED(rv)) { + if (rv == NS_ERROR_NO_CONTENT) { + // Just ignore frames with no content document. + rv = NS_OK; + } + // StartPersistence won't eventually call this if it failed, + // so this does so (to keep mOutstandingDocuments correct). + DocumentDone(rv); + } + return rv; +} + +NS_IMETHODIMP +ResourceReader::OnDocumentReady(nsIWebBrowserPersistDocument* aDocument) +{ + mVisitor->VisitDocument(mParent, aDocument); + DocumentDone(NS_OK); + return NS_OK; +} + +NS_IMETHODIMP +ResourceReader::OnError(nsresult aFailure) +{ + DocumentDone(aFailure); + return NS_OK; +} + +nsresult +ResourceReader::OnWalkURI(nsIURI* aURI) +{ + // Test if this URI should be persisted. By default + // we should assume the URI is persistable. + bool doNotPersistURI; + nsresult rv = NS_URIChainHasFlags(aURI, + nsIProtocolHandler::URI_NON_PERSISTABLE, + &doNotPersistURI); + if (NS_SUCCEEDED(rv) && doNotPersistURI) { + return NS_OK; + } + + nsAutoCString stringURI; + rv = aURI->GetSpec(stringURI); + NS_ENSURE_SUCCESS(rv, rv); + return mVisitor->VisitResource(mParent, stringURI); +} + +nsresult +ResourceReader::OnWalkURI(const nsACString& aURISpec) +{ + nsresult rv; + nsCOMPtr uri; + + rv = NS_NewURI(getter_AddRefs(uri), + aURISpec, + mParent->GetCharacterSet().get(), + mCurrentBaseURI); + NS_ENSURE_SUCCESS(rv, rv); + return OnWalkURI(uri); +} + +static nsresult +ExtractAttribute(nsIDOMNode* aNode, + const char* aAttribute, + const char* aNamespaceURI, + nsCString& aValue) +{ + nsCOMPtr element = do_QueryInterface(aNode); + MOZ_ASSERT(element); + + // Find the named URI attribute on the (element) node and store + // a reference to the URI that maps onto a local file name + + nsCOMPtr attrMap; + nsresult rv = element->GetAttributes(getter_AddRefs(attrMap)); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + NS_ConvertASCIItoUTF16 namespaceURI(aNamespaceURI); + NS_ConvertASCIItoUTF16 attribute(aAttribute); + nsCOMPtr attr; + rv = attrMap->GetNamedItemNS(namespaceURI, attribute, getter_AddRefs(attr)); + NS_ENSURE_SUCCESS(rv, rv); + if (attr) { + nsAutoString value; + rv = attr->GetValue(value); + NS_ENSURE_SUCCESS(rv, rv); + aValue = NS_ConvertUTF16toUTF8(value); + } else { + aValue.Truncate(); + } + return NS_OK; +} + +nsresult +ResourceReader::OnWalkAttribute(nsIDOMNode* aNode, + const char* aAttribute, + const char* aNamespaceURI) +{ + nsAutoCString uriSpec; + nsresult rv = ExtractAttribute(aNode, aAttribute, aNamespaceURI, uriSpec); + NS_ENSURE_SUCCESS(rv, rv); + if (uriSpec.IsEmpty()) { + return NS_OK; + } + return OnWalkURI(uriSpec); +} + +static nsresult +GetXMLStyleSheetLink(nsIDOMProcessingInstruction *aPI, nsAString &aHref) +{ + nsresult rv; + nsAutoString data; + rv = aPI->GetData(data); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + nsContentUtils::GetPseudoAttributeValue(data, nsGkAtoms::href, aHref); + return NS_OK; +} + +nsresult +ResourceReader::OnWalkDOMNode(nsIDOMNode* aNode) +{ + nsresult rv; + + // Fixup xml-stylesheet processing instructions + nsCOMPtr nodeAsPI = do_QueryInterface(aNode); + if (nodeAsPI) { + nsAutoString target; + rv = nodeAsPI->GetTarget(target); + NS_ENSURE_SUCCESS(rv, rv); + if (target.EqualsLiteral("xml-stylesheet")) { + nsAutoString href; + GetXMLStyleSheetLink(nodeAsPI, href); + if (!href.IsEmpty()) { + return OnWalkURI(NS_ConvertUTF16toUTF8(href)); + } + } + return NS_OK; + } + + nsCOMPtr content = do_QueryInterface(aNode); + if (!content) { + return NS_OK; + } + + // Test the node to see if it's an image, frame, iframe, css, js + nsCOMPtr nodeAsImage = do_QueryInterface(aNode); + if (nodeAsImage) { + return OnWalkAttribute(aNode, "src"); + } + + if (content->IsSVGElement(nsGkAtoms::img)) { + return OnWalkAttribute(aNode, "href", "http://www.w3.org/1999/xlink"); + } + + nsCOMPtr nodeAsMedia = do_QueryInterface(aNode); + if (nodeAsMedia) { + return OnWalkAttribute(aNode, "src"); + } + nsCOMPtr nodeAsSource = do_QueryInterface(aNode); + if (nodeAsSource) { + return OnWalkAttribute(aNode, "src"); + } + + if (content->IsHTMLElement(nsGkAtoms::body)) { + return OnWalkAttribute(aNode, "background"); + } + + if (content->IsHTMLElement(nsGkAtoms::table)) { + return OnWalkAttribute(aNode, "background"); + } + + if (content->IsHTMLElement(nsGkAtoms::tr)) { + return OnWalkAttribute(aNode, "background"); + } + + if (content->IsAnyOfHTMLElements(nsGkAtoms::td, nsGkAtoms::th)) { + return OnWalkAttribute(aNode, "background"); + } + + nsCOMPtr nodeAsScript = do_QueryInterface(aNode); + if (nodeAsScript) { + return OnWalkAttribute(aNode, "src"); + } + + if (content->IsSVGElement(nsGkAtoms::script)) { + return OnWalkAttribute(aNode, "href", "http://www.w3.org/1999/xlink"); + } + + nsCOMPtr nodeAsEmbed = do_QueryInterface(aNode); + if (nodeAsEmbed) { + return OnWalkAttribute(aNode, "src"); + } + + nsCOMPtr nodeAsObject = do_QueryInterface(aNode); + if (nodeAsObject) { + return OnWalkAttribute(aNode, "data"); + } + + nsCOMPtr nodeAsApplet = do_QueryInterface(aNode); + if (nodeAsApplet) { + // For an applet, relative URIs are resolved relative to the + // codebase (which is resolved relative to the base URI). + nsCOMPtr oldBase = mCurrentBaseURI; + nsAutoString codebase; + rv = nodeAsApplet->GetCodeBase(codebase); + NS_ENSURE_SUCCESS(rv, rv); + if (!codebase.IsEmpty()) { + nsCOMPtr baseURI; + rv = NS_NewURI(getter_AddRefs(baseURI), codebase, + mParent->GetCharacterSet().get(), mCurrentBaseURI); + NS_ENSURE_SUCCESS(rv, rv); + if (baseURI) { + mCurrentBaseURI = baseURI; + // Must restore this before returning (or ENSURE'ing). + } + } + + // We only store 'code' locally if there is no 'archive', + // otherwise we assume the archive file(s) contains it (bug 430283). + nsAutoCString archiveAttr; + rv = ExtractAttribute(aNode, "archive", "", archiveAttr); + if (NS_SUCCEEDED(rv)) { + if (!archiveAttr.IsEmpty()) { + rv = OnWalkURI(archiveAttr); + } else { + rv = OnWalkAttribute(aNode, "core"); + } + } + + // restore the base URI we really want to have + mCurrentBaseURI = oldBase; + return rv; + } + + nsCOMPtr nodeAsLink = do_QueryInterface(aNode); + if (nodeAsLink) { + // Test if the link has a rel value indicating it to be a stylesheet + nsAutoString linkRel; + if (NS_SUCCEEDED(nodeAsLink->GetRel(linkRel)) && !linkRel.IsEmpty()) { + nsReadingIterator start; + nsReadingIterator end; + nsReadingIterator current; + + linkRel.BeginReading(start); + linkRel.EndReading(end); + + // Walk through space delimited string looking for "stylesheet" + for (current = start; current != end; ++current) { + // Ignore whitespace + if (nsCRT::IsAsciiSpace(*current)) { + continue; + } + + // Grab the next space delimited word + nsReadingIterator startWord = current; + do { + ++current; + } while (current != end && !nsCRT::IsAsciiSpace(*current)); + + // Store the link for fix up if it says "stylesheet" + if (Substring(startWord, current) + .LowerCaseEqualsLiteral("stylesheet")) { + OnWalkAttribute(aNode, "href"); + return NS_OK; + } + if (current == end) { + break; + } + } + } + return NS_OK; + } + + nsCOMPtr nodeAsFrame = do_QueryInterface(aNode); + if (nodeAsFrame) { + return OnWalkSubframe(aNode); + } + + nsCOMPtr nodeAsIFrame = do_QueryInterface(aNode); + if (nodeAsIFrame && !(mPersistFlags & + IWBP::PERSIST_FLAGS_IGNORE_IFRAMES)) { + return OnWalkSubframe(aNode); + } + + nsCOMPtr nodeAsInput = do_QueryInterface(aNode); + if (nodeAsInput) { + return OnWalkAttribute(aNode, "src"); + } + + return NS_OK; +} + +// Helper class for node rewriting in writeContent(). +class PersistNodeFixup final : public nsIDocumentEncoderNodeFixup { +public: + PersistNodeFixup(WebBrowserPersistLocalDocument* aParent, + nsIWebBrowserPersistURIMap* aMap, + nsIURI* aTargetURI); + + NS_DECL_ISUPPORTS + NS_DECL_NSIDOCUMENTENCODERNODEFIXUP +private: + virtual ~PersistNodeFixup() = default; + RefPtr mParent; + nsClassHashtable mMap; + nsCOMPtr mCurrentBaseURI; + nsCOMPtr mTargetBaseURI; + + bool IsFlagSet(uint32_t aFlag) const { + return mParent->GetPersistFlags() & aFlag; + } + + nsresult GetNodeToFixup(nsIDOMNode* aNodeIn, nsIDOMNode** aNodeOut); + nsresult FixupURI(nsAString& aURI); + nsresult FixupAttribute(nsIDOMNode* aNode, + const char* aAttribute, + const char* aNamespaceURI = ""); + nsresult FixupAnchor(nsIDOMNode* aNode); + nsresult FixupXMLStyleSheetLink(nsIDOMProcessingInstruction* aPI, + const nsAString& aHref); + + using IWBP = nsIWebBrowserPersist; +}; + +NS_IMPL_ISUPPORTS(PersistNodeFixup, nsIDocumentEncoderNodeFixup) + +PersistNodeFixup::PersistNodeFixup(WebBrowserPersistLocalDocument* aParent, + nsIWebBrowserPersistURIMap* aMap, + nsIURI* aTargetURI) +: mParent(aParent) +, mCurrentBaseURI(aParent->GetBaseURI()) +, mTargetBaseURI(aTargetURI) +{ + if (aMap) { + uint32_t mapSize; + nsresult rv = aMap->GetNumMappedURIs(&mapSize); + MOZ_ASSERT(NS_SUCCEEDED(rv)); + NS_ENSURE_SUCCESS_VOID(rv); + for (uint32_t i = 0; i < mapSize; ++i) { + nsAutoCString urlFrom; + auto* urlTo = new nsCString(); + + rv = aMap->GetURIMapping(i, urlFrom, *urlTo); + MOZ_ASSERT(NS_SUCCEEDED(rv)); + if (NS_SUCCEEDED(rv)) { + mMap.Put(urlFrom, urlTo); + } + } + } +} + +nsresult +PersistNodeFixup::GetNodeToFixup(nsIDOMNode *aNodeIn, nsIDOMNode **aNodeOut) +{ + // Avoid mixups in FixupNode that could leak objects; this goes + // against the usual out parameter convention, but it's a private + // method so shouldn't be a problem. + MOZ_ASSERT(!*aNodeOut); + + if (!IsFlagSet(IWBP::PERSIST_FLAGS_FIXUP_ORIGINAL_DOM)) { + nsresult rv = aNodeIn->CloneNode(false, 1, aNodeOut); + NS_ENSURE_SUCCESS(rv, rv); + } else { + NS_ADDREF(*aNodeOut = aNodeIn); + } + nsCOMPtr element(do_QueryInterface(*aNodeOut)); + if (element) { + // Make sure this is not XHTML + nsAutoString namespaceURI; + element->GetNamespaceURI(namespaceURI); + if (namespaceURI.IsEmpty()) { + // This is a tag-soup node. It may have a _base_href attribute + // stuck on it by the parser, but since we're fixing up all URIs + // relative to the overall document base that will screw us up. + // Just remove the _base_href. + element->RemoveAttribute(NS_LITERAL_STRING("_base_href")); + } + } + return NS_OK; +} + +nsresult +PersistNodeFixup::FixupURI(nsAString &aURI) +{ + // get the current location of the file (absolutized) + nsCOMPtr uri; + nsresult rv = NS_NewURI(getter_AddRefs(uri), aURI, + mParent->GetCharacterSet().get(), mCurrentBaseURI); + NS_ENSURE_SUCCESS(rv, rv); + nsAutoCString spec; + rv = uri->GetSpec(spec); + NS_ENSURE_SUCCESS(rv, rv); + + const nsCString* replacement = mMap.Get(spec); + if (!replacement) { + // Note that most callers ignore this "failure". + return NS_ERROR_FAILURE; + } + if (!replacement->IsEmpty()) { + aURI = NS_ConvertUTF8toUTF16(*replacement); + } + return NS_OK; +} + +nsresult +PersistNodeFixup::FixupAttribute(nsIDOMNode* aNode, + const char* aAttribute, + const char* aNamespaceURI) +{ + nsCOMPtr element = do_QueryInterface(aNode); + MOZ_ASSERT(element); + + nsCOMPtr attrMap; + nsresult rv = element->GetAttributes(getter_AddRefs(attrMap)); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + NS_ConvertASCIItoUTF16 attribute(aAttribute); + NS_ConvertASCIItoUTF16 namespaceURI(aNamespaceURI); + nsCOMPtr attr; + rv = attrMap->GetNamedItemNS(namespaceURI, attribute, getter_AddRefs(attr)); + if (attr) { + nsString uri; + attr->GetValue(uri); + rv = FixupURI(uri); + if (NS_SUCCEEDED(rv)) { + attr->SetValue(uri); + } + } + + return rv; +} + +nsresult +PersistNodeFixup::FixupAnchor(nsIDOMNode *aNode) +{ + if (IsFlagSet(IWBP::PERSIST_FLAGS_DONT_FIXUP_LINKS)) { + return NS_OK; + } + + nsCOMPtr element = do_QueryInterface(aNode); + MOZ_ASSERT(element); + + nsCOMPtr attrMap; + nsresult rv = element->GetAttributes(getter_AddRefs(attrMap)); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + // Make all anchor links absolute so they point off onto the Internet + nsString attribute(NS_LITERAL_STRING("href")); + nsCOMPtr attr; + rv = attrMap->GetNamedItem(attribute, getter_AddRefs(attr)); + if (attr) { + nsString oldValue; + attr->GetValue(oldValue); + NS_ConvertUTF16toUTF8 oldCValue(oldValue); + + // Skip empty values and self-referencing bookmarks + if (oldCValue.IsEmpty() || oldCValue.CharAt(0) == '#') { + return NS_OK; + } + + // if saving file to same location, we don't need to do any fixup + bool isEqual; + if (mTargetBaseURI && + NS_SUCCEEDED(mCurrentBaseURI->Equals(mTargetBaseURI, &isEqual)) && + isEqual) { + return NS_OK; + } + + nsCOMPtr relativeURI; + relativeURI = IsFlagSet(IWBP::PERSIST_FLAGS_FIXUP_LINKS_TO_DESTINATION) + ? mTargetBaseURI : mCurrentBaseURI; + // Make a new URI to replace the current one + nsCOMPtr newURI; + rv = NS_NewURI(getter_AddRefs(newURI), oldCValue, + mParent->GetCharacterSet().get(), relativeURI); + if (NS_SUCCEEDED(rv) && newURI) { + newURI->SetUserPass(EmptyCString()); + nsAutoCString uriSpec; + rv = newURI->GetSpec(uriSpec); + NS_ENSURE_SUCCESS(rv, rv); + attr->SetValue(NS_ConvertUTF8toUTF16(uriSpec)); + } + } + + return NS_OK; +} + +static void +AppendXMLAttr(const nsAString& key, const nsAString& aValue, nsAString& aBuffer) +{ + if (!aBuffer.IsEmpty()) { + aBuffer.Append(' '); + } + aBuffer.Append(key); + aBuffer.AppendLiteral(R"(=")"); + for (size_t i = 0; i < aValue.Length(); ++i) { + switch (aValue[i]) { + case '&': + aBuffer.AppendLiteral("&"); + break; + case '<': + aBuffer.AppendLiteral("<"); + break; + case '>': + aBuffer.AppendLiteral(">"); + break; + case '"': + aBuffer.AppendLiteral("""); + break; + default: + aBuffer.Append(aValue[i]); + break; + } + } + aBuffer.Append('"'); +} + +nsresult +PersistNodeFixup::FixupXMLStyleSheetLink(nsIDOMProcessingInstruction* aPI, + const nsAString& aHref) +{ + NS_ENSURE_ARG_POINTER(aPI); + nsresult rv = NS_OK; + + nsAutoString data; + rv = aPI->GetData(data); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + nsAutoString href; + nsContentUtils::GetPseudoAttributeValue(data, + nsGkAtoms::href, + href); + + // Construct and set a new data value for the xml-stylesheet + if (!aHref.IsEmpty() && !href.IsEmpty()) + { + nsAutoString alternate; + nsAutoString charset; + nsAutoString title; + nsAutoString type; + nsAutoString media; + + nsContentUtils::GetPseudoAttributeValue(data, + nsGkAtoms::alternate, + alternate); + nsContentUtils::GetPseudoAttributeValue(data, + nsGkAtoms::charset, + charset); + nsContentUtils::GetPseudoAttributeValue(data, + nsGkAtoms::title, + title); + nsContentUtils::GetPseudoAttributeValue(data, + nsGkAtoms::type, + type); + nsContentUtils::GetPseudoAttributeValue(data, + nsGkAtoms::media, + media); + + nsAutoString newData; + AppendXMLAttr(NS_LITERAL_STRING("href"), aHref, newData); + if (!title.IsEmpty()) { + AppendXMLAttr(NS_LITERAL_STRING("title"), title, newData); + } + if (!media.IsEmpty()) { + AppendXMLAttr(NS_LITERAL_STRING("media"), media, newData); + } + if (!type.IsEmpty()) { + AppendXMLAttr(NS_LITERAL_STRING("type"), type, newData); + } + if (!charset.IsEmpty()) { + AppendXMLAttr(NS_LITERAL_STRING("charset"), charset, newData); + } + if (!alternate.IsEmpty()) { + AppendXMLAttr(NS_LITERAL_STRING("alternate"), alternate, newData); + } + aPI->SetData(newData); + } + + return rv; +} + +NS_IMETHODIMP +PersistNodeFixup::FixupNode(nsIDOMNode *aNodeIn, + bool *aSerializeCloneKids, + nsIDOMNode **aNodeOut) +{ + *aNodeOut = nullptr; + *aSerializeCloneKids = false; + + uint16_t type; + nsresult rv = aNodeIn->GetNodeType(&type); + NS_ENSURE_SUCCESS(rv, rv); + if (type != nsIDOMNode::ELEMENT_NODE && + type != nsIDOMNode::PROCESSING_INSTRUCTION_NODE) { + return NS_OK; + } + + // Fixup xml-stylesheet processing instructions + nsCOMPtr nodeAsPI = do_QueryInterface(aNodeIn); + if (nodeAsPI) { + nsAutoString target; + nodeAsPI->GetTarget(target); + if (target.EqualsLiteral("xml-stylesheet")) + { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + nsCOMPtr outNode = + do_QueryInterface(*aNodeOut); + nsAutoString href; + GetXMLStyleSheetLink(nodeAsPI, href); + if (!href.IsEmpty()) { + FixupURI(href); + FixupXMLStyleSheetLink(outNode, href); + } + } + } + return NS_OK; + } + + // BASE elements are replaced by a comment so relative links are not hosed. + if (!IsFlagSet(IWBP::PERSIST_FLAGS_NO_BASE_TAG_MODIFICATIONS)) { + nsCOMPtr nodeAsBase = do_QueryInterface(aNodeIn); + if (nodeAsBase) { + nsCOMPtr ownerDocument; + auto* base = static_cast(nodeAsBase.get()); + base->GetOwnerDocument(getter_AddRefs(ownerDocument)); + if (ownerDocument) { + nsAutoString href; + base->GetHref(href); // Doesn't matter if this fails + nsCOMPtr comment; + nsAutoString commentText; + commentText.AssignLiteral(" base "); + if (!href.IsEmpty()) { + commentText += NS_LITERAL_STRING("href=\"") + href + + NS_LITERAL_STRING("\" "); + } + rv = ownerDocument->CreateComment(commentText, + getter_AddRefs(comment)); + if (comment) { + return CallQueryInterface(comment, aNodeOut); + } + } + return NS_OK; + } + } + + nsCOMPtr content = do_QueryInterface(aNodeIn); + if (!content) { + return NS_OK; + } + + // Fix up href and file links in the elements + nsCOMPtr nodeAsAnchor = do_QueryInterface(aNodeIn); + if (nodeAsAnchor) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + FixupAnchor(*aNodeOut); + } + return rv; + } + + nsCOMPtr nodeAsArea = do_QueryInterface(aNodeIn); + if (nodeAsArea) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + FixupAnchor(*aNodeOut); + } + return rv; + } + + if (content->IsHTMLElement(nsGkAtoms::body)) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + FixupAttribute(*aNodeOut, "background"); + } + return rv; + } + + if (content->IsHTMLElement(nsGkAtoms::table)) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + FixupAttribute(*aNodeOut, "background"); + } + return rv; + } + + if (content->IsHTMLElement(nsGkAtoms::tr)) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + FixupAttribute(*aNodeOut, "background"); + } + return rv; + } + + if (content->IsAnyOfHTMLElements(nsGkAtoms::td, nsGkAtoms::th)) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + FixupAttribute(*aNodeOut, "background"); + } + return rv; + } + + nsCOMPtr nodeAsImage = do_QueryInterface(aNodeIn); + if (nodeAsImage) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + // Disable image loads + nsCOMPtr imgCon = + do_QueryInterface(*aNodeOut); + if (imgCon) { + imgCon->SetLoadingEnabled(false); + } + FixupAnchor(*aNodeOut); + FixupAttribute(*aNodeOut, "src"); + } + return rv; + } + + nsCOMPtr nodeAsMedia = do_QueryInterface(aNodeIn); + if (nodeAsMedia) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + FixupAttribute(*aNodeOut, "src"); + } + return rv; + } + + nsCOMPtr nodeAsSource = do_QueryInterface(aNodeIn); + if (nodeAsSource) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + FixupAttribute(*aNodeOut, "src"); + } + return rv; + } + + if (content->IsSVGElement(nsGkAtoms::img)) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + // Disable image loads + nsCOMPtr imgCon = + do_QueryInterface(*aNodeOut); + if (imgCon) + imgCon->SetLoadingEnabled(false); + + // FixupAnchor(*aNodeOut); // XXXjwatt: is this line needed? + FixupAttribute(*aNodeOut, "href", "http://www.w3.org/1999/xlink"); + } + return rv; + } + + nsCOMPtr nodeAsScript = do_QueryInterface(aNodeIn); + if (nodeAsScript) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + FixupAttribute(*aNodeOut, "src"); + } + return rv; + } + + if (content->IsSVGElement(nsGkAtoms::script)) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + FixupAttribute(*aNodeOut, "href", "http://www.w3.org/1999/xlink"); + } + return rv; + } + + nsCOMPtr nodeAsEmbed = do_QueryInterface(aNodeIn); + if (nodeAsEmbed) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + FixupAttribute(*aNodeOut, "src"); + } + return rv; + } + + nsCOMPtr nodeAsObject = do_QueryInterface(aNodeIn); + if (nodeAsObject) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + FixupAttribute(*aNodeOut, "data"); + } + return rv; + } + + nsCOMPtr nodeAsApplet = do_QueryInterface(aNodeIn); + if (nodeAsApplet) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + nsCOMPtr newApplet = + do_QueryInterface(*aNodeOut); + // For an applet, relative URIs are resolved relative to the + // codebase (which is resolved relative to the base URI). + nsCOMPtr oldBase = mCurrentBaseURI; + nsAutoString codebase; + nodeAsApplet->GetCodeBase(codebase); + if (!codebase.IsEmpty()) { + nsCOMPtr baseURI; + NS_NewURI(getter_AddRefs(baseURI), codebase, + mParent->GetCharacterSet().get(), mCurrentBaseURI); + if (baseURI) { + mCurrentBaseURI = baseURI; + } + } + // Unset the codebase too, since we'll correctly relativize the + // code and archive paths. + static_cast(newApplet.get())-> + RemoveAttribute(NS_LITERAL_STRING("codebase")); + FixupAttribute(*aNodeOut, "code"); + FixupAttribute(*aNodeOut, "archive"); + // restore the base URI we really want to have + mCurrentBaseURI = oldBase; + } + return rv; + } + + nsCOMPtr nodeAsLink = do_QueryInterface(aNodeIn); + if (nodeAsLink) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + // First see if the link represents linked content + rv = FixupAttribute(*aNodeOut, "href"); + if (NS_FAILED(rv)) { + // Perhaps this link is actually an anchor to related content + FixupAnchor(*aNodeOut); + } + // TODO if "type" attribute == "text/css" + // fixup stylesheet + } + return rv; + } + + nsCOMPtr nodeAsFrame = do_QueryInterface(aNodeIn); + if (nodeAsFrame) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + FixupAttribute(*aNodeOut, "src"); + } + return rv; + } + + nsCOMPtr nodeAsIFrame = do_QueryInterface(aNodeIn); + if (nodeAsIFrame) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + FixupAttribute(*aNodeOut, "src"); + } + return rv; + } + + RefPtr nodeAsInput = + dom::HTMLInputElement::FromContentOrNull(content); + if (nodeAsInput) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + // Disable image loads + nsCOMPtr imgCon = + do_QueryInterface(*aNodeOut); + if (imgCon) { + imgCon->SetLoadingEnabled(false); + } + + FixupAttribute(*aNodeOut, "src"); + + nsAutoString valueStr; + NS_NAMED_LITERAL_STRING(valueAttr, "value"); + // Update element node attributes with user-entered form state + nsCOMPtr content = do_QueryInterface(*aNodeOut); + RefPtr outElt = + dom::HTMLInputElement::FromContentOrNull(content); + nsCOMPtr formControl = do_QueryInterface(*aNodeOut); + switch (formControl->GetType()) { + case NS_FORM_INPUT_EMAIL: + case NS_FORM_INPUT_SEARCH: + case NS_FORM_INPUT_TEXT: + case NS_FORM_INPUT_TEL: + case NS_FORM_INPUT_URL: + case NS_FORM_INPUT_NUMBER: + case NS_FORM_INPUT_RANGE: + case NS_FORM_INPUT_DATE: + case NS_FORM_INPUT_TIME: + case NS_FORM_INPUT_COLOR: + nodeAsInput->GetValue(valueStr, dom::CallerType::System); + // Avoid superfluous value="" serialization + if (valueStr.IsEmpty()) + outElt->RemoveAttribute(valueAttr); + else + outElt->SetAttribute(valueAttr, valueStr); + break; + case NS_FORM_INPUT_CHECKBOX: + case NS_FORM_INPUT_RADIO: + { + bool checked = nodeAsInput->Checked(); + outElt->SetDefaultChecked(checked); + } + break; + default: + break; + } + } + return rv; + } + + nsCOMPtr nodeAsTextArea = do_QueryInterface(aNodeIn); + if (nodeAsTextArea) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + // Tell the document encoder to serialize the text child we create below + *aSerializeCloneKids = true; + + nsAutoString valueStr; + nodeAsTextArea->GetValue(valueStr); + + (*aNodeOut)->SetTextContent(valueStr); + } + return rv; + } + + nsCOMPtr nodeAsOption = do_QueryInterface(aNodeIn); + if (nodeAsOption) { + rv = GetNodeToFixup(aNodeIn, aNodeOut); + if (NS_SUCCEEDED(rv) && *aNodeOut) { + nsCOMPtr outElt = do_QueryInterface(*aNodeOut); + bool selected; + nodeAsOption->GetSelected(&selected); + outElt->SetDefaultSelected(selected); + } + return rv; + } + + return NS_OK; +} + +} // unnamed namespace + +NS_IMETHODIMP +WebBrowserPersistLocalDocument::ReadResources(nsIWebBrowserPersistResourceVisitor* aVisitor) +{ + nsresult rv = NS_OK; + nsCOMPtr visitor = aVisitor; + + nsCOMPtr docAsNode = do_QueryInterface(mDocument); + NS_ENSURE_TRUE(docAsNode, NS_ERROR_FAILURE); + + nsCOMPtr walker; + nsCOMPtr oldStyleDoc = do_QueryInterface(mDocument); + MOZ_ASSERT(oldStyleDoc); + rv = oldStyleDoc->CreateTreeWalker(docAsNode, + nsIDOMNodeFilter::SHOW_ELEMENT | + nsIDOMNodeFilter::SHOW_DOCUMENT | + nsIDOMNodeFilter::SHOW_PROCESSING_INSTRUCTION, + nullptr, 1, getter_AddRefs(walker)); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + MOZ_ASSERT(walker); + + RefPtr reader = new ResourceReader(this, aVisitor); + nsCOMPtr currentNode; + walker->GetCurrentNode(getter_AddRefs(currentNode)); + while (currentNode) { + rv = reader->OnWalkDOMNode(currentNode); + if (NS_WARN_IF(NS_FAILED(rv))) { + break; + } + rv = walker->NextNode(getter_AddRefs(currentNode)); + if (NS_WARN_IF(NS_FAILED(rv))) { + break; + } + } + reader->DocumentDone(rv); + // If NS_FAILED(rv), it was / will be reported by an EndVisit call + // via DocumentDone. This method must return a failure if and + // only if visitor won't be invoked. + return NS_OK; +} + +static uint32_t +ConvertEncoderFlags(uint32_t aEncoderFlags) +{ + uint32_t encoderFlags = 0; + + if (aEncoderFlags & nsIWebBrowserPersist::ENCODE_FLAGS_SELECTION_ONLY) + encoderFlags |= nsIDocumentEncoder::OutputSelectionOnly; + if (aEncoderFlags & nsIWebBrowserPersist::ENCODE_FLAGS_FORMATTED) + encoderFlags |= nsIDocumentEncoder::OutputFormatted; + if (aEncoderFlags & nsIWebBrowserPersist::ENCODE_FLAGS_RAW) + encoderFlags |= nsIDocumentEncoder::OutputRaw; + if (aEncoderFlags & nsIWebBrowserPersist::ENCODE_FLAGS_BODY_ONLY) + encoderFlags |= nsIDocumentEncoder::OutputBodyOnly; + if (aEncoderFlags & nsIWebBrowserPersist::ENCODE_FLAGS_PREFORMATTED) + encoderFlags |= nsIDocumentEncoder::OutputPreformatted; + if (aEncoderFlags & nsIWebBrowserPersist::ENCODE_FLAGS_WRAP) + encoderFlags |= nsIDocumentEncoder::OutputWrap; + if (aEncoderFlags & nsIWebBrowserPersist::ENCODE_FLAGS_FORMAT_FLOWED) + encoderFlags |= nsIDocumentEncoder::OutputFormatFlowed; + if (aEncoderFlags & nsIWebBrowserPersist::ENCODE_FLAGS_ABSOLUTE_LINKS) + encoderFlags |= nsIDocumentEncoder::OutputAbsoluteLinks; + if (aEncoderFlags & nsIWebBrowserPersist::ENCODE_FLAGS_ENCODE_BASIC_ENTITIES) + encoderFlags |= nsIDocumentEncoder::OutputEncodeBasicEntities; + if (aEncoderFlags & nsIWebBrowserPersist::ENCODE_FLAGS_ENCODE_LATIN1_ENTITIES) + encoderFlags |= nsIDocumentEncoder::OutputEncodeLatin1Entities; + if (aEncoderFlags & nsIWebBrowserPersist::ENCODE_FLAGS_ENCODE_HTML_ENTITIES) + encoderFlags |= nsIDocumentEncoder::OutputEncodeHTMLEntities; + if (aEncoderFlags & nsIWebBrowserPersist::ENCODE_FLAGS_ENCODE_W3C_ENTITIES) + encoderFlags |= nsIDocumentEncoder::OutputEncodeW3CEntities; + if (aEncoderFlags & nsIWebBrowserPersist::ENCODE_FLAGS_CR_LINEBREAKS) + encoderFlags |= nsIDocumentEncoder::OutputCRLineBreak; + if (aEncoderFlags & nsIWebBrowserPersist::ENCODE_FLAGS_LF_LINEBREAKS) + encoderFlags |= nsIDocumentEncoder::OutputLFLineBreak; + if (aEncoderFlags & nsIWebBrowserPersist::ENCODE_FLAGS_NOSCRIPT_CONTENT) + encoderFlags |= nsIDocumentEncoder::OutputNoScriptContent; + if (aEncoderFlags & nsIWebBrowserPersist::ENCODE_FLAGS_NOFRAMES_CONTENT) + encoderFlags |= nsIDocumentEncoder::OutputNoFramesContent; + + return encoderFlags; +} + +static bool +ContentTypeEncoderExists(const nsACString& aType) +{ + nsAutoCString contractID(NS_DOC_ENCODER_CONTRACTID_BASE); + contractID.Append(aType); + + nsCOMPtr registrar; + nsresult rv = NS_GetComponentRegistrar(getter_AddRefs(registrar)); + MOZ_ASSERT(NS_SUCCEEDED(rv)); + if (NS_SUCCEEDED(rv) && registrar) { + bool result; + rv = registrar->IsContractIDRegistered(contractID.get(), &result); + MOZ_ASSERT(NS_SUCCEEDED(rv)); + return NS_SUCCEEDED(rv) && result; + } + return false; +} + +void +WebBrowserPersistLocalDocument::DecideContentType(nsACString& aContentType) +{ + if (aContentType.IsEmpty()) { + if (NS_WARN_IF(NS_FAILED(GetContentType(aContentType)))) { + aContentType.Truncate(); + } + } + if (!aContentType.IsEmpty() && + !ContentTypeEncoderExists(aContentType)) { + aContentType.Truncate(); + } + if (aContentType.IsEmpty()) { + aContentType.AssignLiteral("text/html"); + } +} + +nsresult +WebBrowserPersistLocalDocument::GetDocEncoder(const nsACString& aContentType, + uint32_t aEncoderFlags, + nsIDocumentEncoder** aEncoder) +{ + nsresult rv; + nsAutoCString contractID(NS_DOC_ENCODER_CONTRACTID_BASE); + contractID.Append(aContentType); + nsCOMPtr encoder = + do_CreateInstance(contractID.get(), &rv); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + rv = encoder->NativeInit(mDocument, + NS_ConvertASCIItoUTF16(aContentType), + ConvertEncoderFlags(aEncoderFlags)); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + nsAutoCString charSet; + rv = GetCharacterSet(charSet); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + rv = encoder->SetCharset(charSet); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + encoder.forget(aEncoder); + return NS_OK; +} + + +NS_IMETHODIMP +WebBrowserPersistLocalDocument::WriteContent( + nsIOutputStream* aStream, + nsIWebBrowserPersistURIMap* aMap, + const nsACString& aRequestedContentType, + uint32_t aEncoderFlags, + uint32_t aWrapColumn, + nsIWebBrowserPersistWriteCompletion* aCompletion) +{ + NS_ENSURE_ARG_POINTER(aStream); + NS_ENSURE_ARG_POINTER(aCompletion); + nsAutoCString contentType(aRequestedContentType); + DecideContentType(contentType); + + nsCOMPtr encoder; + nsresult rv = GetDocEncoder(contentType, aEncoderFlags, + getter_AddRefs(encoder)); + NS_ENSURE_SUCCESS(rv, rv); + + if (aWrapColumn != 0 && (aEncoderFlags + & nsIWebBrowserPersist::ENCODE_FLAGS_WRAP)) { + encoder->SetWrapColumn(aWrapColumn); + } + + nsCOMPtr targetURI; + if (aMap) { + nsAutoCString targetURISpec; + rv = aMap->GetTargetBaseURI(targetURISpec); + if (NS_SUCCEEDED(rv) && !targetURISpec.IsEmpty()) { + rv = NS_NewURI(getter_AddRefs(targetURI), targetURISpec, + /* charset: */ nullptr, /* base: */ nullptr); + NS_ENSURE_SUCCESS(rv, NS_ERROR_UNEXPECTED); + } else if (mPersistFlags & nsIWebBrowserPersist::PERSIST_FLAGS_FIXUP_LINKS_TO_DESTINATION) { + return NS_ERROR_UNEXPECTED; + } + } + rv = encoder->SetNodeFixup(new PersistNodeFixup(this, aMap, targetURI)); + NS_ENSURE_SUCCESS(rv, NS_ERROR_FAILURE); + + rv = encoder->EncodeToStream(aStream); + aCompletion->OnFinish(this, aStream, contentType, rv); + return NS_OK; +} + +} // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistLocalDocument.h firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistLocalDocument.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistLocalDocument.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistLocalDocument.h 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,51 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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/. */ + +#ifndef WebBrowserPersistLocalDocument_h__ +#define WebBrowserPersistLocalDocument_h__ + +#include "nsCOMPtr.h" +#include "nsCycleCollectionParticipant.h" +#include "nsIDocument.h" +#include "nsIURI.h" +#include "nsIWebBrowserPersistDocument.h" + +class nsIDocumentEncoder; +class nsISHEntry; + +namespace mozilla { + +class WebBrowserPersistLocalDocument final + : public nsIWebBrowserPersistDocument +{ +public: + explicit WebBrowserPersistLocalDocument(nsIDocument* aDocument); + + const nsCString& GetCharacterSet() const; + uint32_t GetPersistFlags() const; + already_AddRefed GetBaseURI() const; + + NS_DECL_CYCLE_COLLECTING_ISUPPORTS + NS_DECL_NSIWEBBROWSERPERSISTDOCUMENT + + NS_DECL_CYCLE_COLLECTION_CLASS(WebBrowserPersistLocalDocument) + +private: + nsCOMPtr mDocument; + uint32_t mPersistFlags; + + void DecideContentType(nsACString& aContentType); + nsresult GetDocEncoder(const nsACString& aContentType, + uint32_t aEncoderFlags, + nsIDocumentEncoder** aEncoder); + already_AddRefed GetHistory(); + + virtual ~WebBrowserPersistLocalDocument(); +}; + +} // namespace mozilla + +#endif // WebBrowserPersistLocalDocument_h__ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistRemoteDocument.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistRemoteDocument.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistRemoteDocument.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistRemoteDocument.cpp 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,186 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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 "WebBrowserPersistRemoteDocument.h" +#include "WebBrowserPersistDocumentParent.h" +#include "WebBrowserPersistResourcesParent.h" +#include "WebBrowserPersistSerializeParent.h" +#include "mozilla/Unused.h" + +namespace mozilla { + +NS_IMPL_ISUPPORTS(WebBrowserPersistRemoteDocument, + nsIWebBrowserPersistDocument) + +WebBrowserPersistRemoteDocument +::WebBrowserPersistRemoteDocument(WebBrowserPersistDocumentParent* aActor, + const Attrs& aAttrs, + nsIInputStream* aPostData) +: mActor(aActor) +, mAttrs(aAttrs) +, mPostData(aPostData) +{ +} + +WebBrowserPersistRemoteDocument::~WebBrowserPersistRemoteDocument() +{ + if (mActor) { + Unused << mActor->Send__delete__(mActor); + // That will call mActor->ActorDestroy, which calls this->ActorDestroy + // (whether or not the IPC send succeeds). + } + MOZ_ASSERT(!mActor); +} + +void +WebBrowserPersistRemoteDocument::ActorDestroy(void) +{ + mActor = nullptr; +} + +NS_IMETHODIMP +WebBrowserPersistRemoteDocument::GetIsPrivate(bool* aIsPrivate) +{ + *aIsPrivate = mAttrs.isPrivate(); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistRemoteDocument::GetDocumentURI(nsACString& aURISpec) +{ + aURISpec = mAttrs.documentURI(); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistRemoteDocument::GetBaseURI(nsACString& aURISpec) +{ + aURISpec = mAttrs.baseURI(); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistRemoteDocument::GetContentType(nsACString& aContentType) +{ + aContentType = mAttrs.contentType(); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistRemoteDocument::GetCharacterSet(nsACString& aCharSet) +{ + aCharSet = mAttrs.characterSet(); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistRemoteDocument::GetTitle(nsAString& aTitle) +{ + aTitle = mAttrs.title(); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistRemoteDocument::GetReferrer(nsAString& aReferrer) +{ + aReferrer = mAttrs.referrer(); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistRemoteDocument::GetContentDisposition(nsAString& aDisp) +{ + aDisp = mAttrs.contentDisposition(); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistRemoteDocument::GetCacheKey(uint32_t* aCacheKey) +{ + *aCacheKey = mAttrs.cacheKey(); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistRemoteDocument::GetPersistFlags(uint32_t* aFlags) +{ + *aFlags = mAttrs.persistFlags(); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistRemoteDocument::SetPersistFlags(uint32_t aFlags) +{ + if (!mActor) { + return NS_ERROR_FAILURE; + } + if (!mActor->SendSetPersistFlags(aFlags)) { + return NS_ERROR_FAILURE; + } + mAttrs.persistFlags() = aFlags; + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistRemoteDocument::GetPostData(nsIInputStream** aStream) +{ + nsCOMPtr stream = mPostData; + stream.forget(aStream); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistRemoteDocument::ReadResources(nsIWebBrowserPersistResourceVisitor* aVisitor) +{ + if (!mActor) { + return NS_ERROR_FAILURE; + } + RefPtr subActor = + new WebBrowserPersistResourcesParent(this, aVisitor); + return mActor->SendPWebBrowserPersistResourcesConstructor( + subActor.forget().take()) + ? NS_OK : NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +WebBrowserPersistRemoteDocument::WriteContent( + nsIOutputStream* aStream, + nsIWebBrowserPersistURIMap* aMap, + const nsACString& aRequestedContentType, + uint32_t aEncoderFlags, + uint32_t aWrapColumn, + nsIWebBrowserPersistWriteCompletion* aCompletion) +{ + if (!mActor) { + return NS_ERROR_FAILURE; + } + + nsresult rv; + WebBrowserPersistURIMap map; + uint32_t numMappedURIs; + if (aMap) { + rv = aMap->GetTargetBaseURI(map.targetBaseURI()); + NS_ENSURE_SUCCESS(rv, rv); + rv = aMap->GetNumMappedURIs(&numMappedURIs); + NS_ENSURE_SUCCESS(rv, rv); + for (uint32_t i = 0; i < numMappedURIs; ++i) { + WebBrowserPersistURIMapEntry& nextEntry = + *(map.mapURIs().AppendElement()); + rv = aMap->GetURIMapping(i, nextEntry.mapFrom(), nextEntry.mapTo()); + NS_ENSURE_SUCCESS(rv, rv); + } + } + + auto* subActor = new WebBrowserPersistSerializeParent(this, + aStream, + aCompletion); + nsCString requestedContentType(aRequestedContentType); // Sigh. + return mActor->SendPWebBrowserPersistSerializeConstructor( + subActor, map, requestedContentType, aEncoderFlags, aWrapColumn) + ? NS_OK : NS_ERROR_FAILURE; +} + +} // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistRemoteDocument.h firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistRemoteDocument.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistRemoteDocument.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistRemoteDocument.h 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,55 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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/. */ + +#ifndef WebBrowserPersistRemoteDocument_h__ +#define WebBrowserPersistRemoteDocument_h__ + +#include "mozilla/Maybe.h" +#include "mozilla/PWebBrowserPersistDocumentParent.h" +#include "nsCOMPtr.h" +#include "nsIWebBrowserPersistDocument.h" +#include "nsIInputStream.h" + +// This class is the XPCOM half of the glue between the +// nsIWebBrowserPersistDocument interface and a remote document; it is +// created by WebBrowserPersistDocumentParent when (and if) it +// receives the information needed to populate the interface's +// properties. +// +// This object has a normal refcounted lifetime. The corresponding +// IPC actor holds a weak reference to this class; when the last +// strong reference is released, it sends an IPC delete message and +// thereby removes that reference. + +namespace mozilla { + +class WebBrowserPersistDocumentParent; + +class WebBrowserPersistRemoteDocument final + : public nsIWebBrowserPersistDocument +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_NSIWEBBROWSERPERSISTDOCUMENT + +private: + using Attrs = WebBrowserPersistDocumentAttrs; + WebBrowserPersistDocumentParent* mActor; + Attrs mAttrs; + nsCOMPtr mPostData; + + friend class WebBrowserPersistDocumentParent; + WebBrowserPersistRemoteDocument(WebBrowserPersistDocumentParent* aActor, + const Attrs& aAttrs, + nsIInputStream* aPostData); + ~WebBrowserPersistRemoteDocument(); + + void ActorDestroy(void); +}; + +} // namespace mozilla + +#endif // WebBrowserPersistRemoteDocument_h__ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistResourcesChild.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistResourcesChild.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistResourcesChild.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistResourcesChild.cpp 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,71 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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 "WebBrowserPersistResourcesChild.h" + +#include "WebBrowserPersistDocumentChild.h" +#include "mozilla/dom/ContentChild.h" + +namespace mozilla { + +NS_IMPL_ISUPPORTS(WebBrowserPersistResourcesChild, + nsIWebBrowserPersistResourceVisitor) + +WebBrowserPersistResourcesChild::WebBrowserPersistResourcesChild() +{ +} + +WebBrowserPersistResourcesChild::~WebBrowserPersistResourcesChild() = default; + +NS_IMETHODIMP +WebBrowserPersistResourcesChild::VisitResource(nsIWebBrowserPersistDocument *aDocument, + const nsACString& aURI) +{ + nsCString copiedURI(aURI); // Yay, XPIDL/IPDL mismatch. + SendVisitResource(copiedURI); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistResourcesChild::VisitDocument(nsIWebBrowserPersistDocument* aDocument, + nsIWebBrowserPersistDocument* aSubDocument) +{ + auto* subActor = new WebBrowserPersistDocumentChild(); + // As a consequence of how PWebBrowserPersistDocumentConstructor + // can be sent by both the parent and the child, we must pass the + // aBrowser and outerWindowID arguments here, but the values are + // ignored by the parent. In particular, the TabChild in which + // persistence started does not necessarily exist at this point; + // see bug 1203602. + if (!Manager()->Manager() + ->SendPWebBrowserPersistDocumentConstructor(subActor, nullptr, 0)) { + // NOTE: subActor is freed at this point. + return NS_ERROR_FAILURE; + } + // ...but here, IPC won't free subActor until after this returns + // to the event loop. + + // The order of these two messages will be preserved, because + // they're the same toplevel protocol and priority. + // + // With this ordering, it's always the transition out of START + // state that causes a document's parent actor to be exposed to + // XPCOM (for both parent->child and child->parent construction), + // which simplifies the lifetime management. + SendVisitDocument(subActor); + subActor->Start(aSubDocument); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistResourcesChild::EndVisit(nsIWebBrowserPersistDocument *aDocument, + nsresult aStatus) +{ + Send__delete__(this, aStatus); + return NS_OK; +} + +} // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistResourcesChild.h firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistResourcesChild.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistResourcesChild.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistResourcesChild.h 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,31 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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/. */ + +#ifndef WebBrowserPersistResourcesChild_h__ +#define WebBrowserPersistResourcesChild_h__ + +#include "mozilla/PWebBrowserPersistResourcesChild.h" + +#include "nsIWebBrowserPersistDocument.h" + +namespace mozilla { + +class WebBrowserPersistResourcesChild final + : public PWebBrowserPersistResourcesChild + , public nsIWebBrowserPersistResourceVisitor +{ +public: + WebBrowserPersistResourcesChild(); + + NS_DECL_NSIWEBBROWSERPERSISTRESOURCEVISITOR + NS_DECL_ISUPPORTS +private: + virtual ~WebBrowserPersistResourcesChild(); +}; + +} // namespace mozilla + +#endif // WebBrowserPersistDocumentChild_h__ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistResourcesParent.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistResourcesParent.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistResourcesParent.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistResourcesParent.cpp 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,85 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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 "WebBrowserPersistResourcesParent.h" + +#include "nsThreadUtils.h" + +namespace mozilla { + +NS_IMPL_ISUPPORTS(WebBrowserPersistResourcesParent, + nsIWebBrowserPersistDocumentReceiver) + +WebBrowserPersistResourcesParent::WebBrowserPersistResourcesParent( + nsIWebBrowserPersistDocument* aDocument, + nsIWebBrowserPersistResourceVisitor* aVisitor) +: mDocument(aDocument) +, mVisitor(aVisitor) +{ + MOZ_ASSERT(aDocument); + MOZ_ASSERT(aVisitor); +} + +WebBrowserPersistResourcesParent::~WebBrowserPersistResourcesParent() = default; + +void +WebBrowserPersistResourcesParent::ActorDestroy(ActorDestroyReason aWhy) +{ + if (aWhy != Deletion && mVisitor) { + // See comment in WebBrowserPersistDocumentParent::ActorDestroy + // (or bug 1202887) for why this is deferred. + nsCOMPtr errorLater = NewRunnableMethod + , nsresult> + (mVisitor, &nsIWebBrowserPersistResourceVisitor::EndVisit, + mDocument, NS_ERROR_FAILURE); + NS_DispatchToCurrentThread(errorLater); + } + mVisitor = nullptr; +} + +mozilla::ipc::IPCResult +WebBrowserPersistResourcesParent::Recv__delete__(const nsresult& aStatus) +{ + mVisitor->EndVisit(mDocument, aStatus); + mVisitor = nullptr; + return IPC_OK(); +} + +mozilla::ipc::IPCResult +WebBrowserPersistResourcesParent::RecvVisitResource(const nsCString& aURI) +{ + mVisitor->VisitResource(mDocument, aURI); + return IPC_OK(); +} + +mozilla::ipc::IPCResult +WebBrowserPersistResourcesParent::RecvVisitDocument(PWebBrowserPersistDocumentParent* aSubDocument) +{ + // Don't expose the subdocument to the visitor until it's ready + // (until the actor isn't in START state). + static_cast(aSubDocument) + ->SetOnReady(this); + return IPC_OK(); +} + +NS_IMETHODIMP +WebBrowserPersistResourcesParent::OnDocumentReady(nsIWebBrowserPersistDocument* aSubDocument) +{ + if (!mVisitor) { + return NS_ERROR_FAILURE; + } + mVisitor->VisitDocument(mDocument, aSubDocument); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistResourcesParent::OnError(nsresult aFailure) +{ + // Nothing useful to do but ignore the failed document. + return NS_OK; +} + +} // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistResourcesParent.h firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistResourcesParent.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistResourcesParent.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistResourcesParent.h 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,54 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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/. */ + +#ifndef WebBrowserPersistResourcesParent_h__ +#define WebBrowserPersistResourcesParent_h__ + +#include "mozilla/PWebBrowserPersistResourcesParent.h" + +#include "WebBrowserPersistDocumentParent.h" +#include "nsCOMPtr.h" +#include "nsIWebBrowserPersistDocument.h" + +namespace mozilla { + +class WebBrowserPersistResourcesParent final + : public PWebBrowserPersistResourcesParent + , public nsIWebBrowserPersistDocumentReceiver +{ +public: + WebBrowserPersistResourcesParent(nsIWebBrowserPersistDocument* aDocument, + nsIWebBrowserPersistResourceVisitor* aVisitor); + + virtual mozilla::ipc::IPCResult + RecvVisitResource(const nsCString& aURI) override; + + virtual mozilla::ipc::IPCResult + RecvVisitDocument(PWebBrowserPersistDocumentParent* aSubDocument) override; + + virtual mozilla::ipc::IPCResult + Recv__delete__(const nsresult& aStatus) override; + + virtual void + ActorDestroy(ActorDestroyReason aWhy) override; + + NS_DECL_NSIWEBBROWSERPERSISTDOCUMENTRECEIVER + NS_DECL_ISUPPORTS + +private: + // Note: even if the XPIDL didn't need mDocument for visitor + // callbacks, this object still needs to hold a strong reference + // to it to defer actor subtree deletion until after the + // visitation is finished. + nsCOMPtr mDocument; + nsCOMPtr mVisitor; + + virtual ~WebBrowserPersistResourcesParent(); +}; + +} // namespace mozilla + +#endif // WebBrowserPersistResourcesParent_h__ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistSerializeChild.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistSerializeChild.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistSerializeChild.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistSerializeChild.cpp 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,141 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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 "WebBrowserPersistSerializeChild.h" + +#include + +#include "nsThreadUtils.h" +#include "ipc/IPCMessageUtils.h" + +namespace mozilla { + +NS_IMPL_ISUPPORTS(WebBrowserPersistSerializeChild, + nsIWebBrowserPersistWriteCompletion, + nsIWebBrowserPersistURIMap, + nsIOutputStream) + +WebBrowserPersistSerializeChild::WebBrowserPersistSerializeChild(const WebBrowserPersistURIMap& aMap) +: mMap(aMap) +{ +} + +WebBrowserPersistSerializeChild::~WebBrowserPersistSerializeChild() = default; + +NS_IMETHODIMP +WebBrowserPersistSerializeChild::OnFinish(nsIWebBrowserPersistDocument* aDocument, + nsIOutputStream* aStream, + const nsACString& aContentType, + nsresult aStatus) +{ + MOZ_ASSERT(aStream == this); + nsCString contentType(aContentType); + Send__delete__(this, contentType, aStatus); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistSerializeChild::GetNumMappedURIs(uint32_t* aNum) +{ + *aNum = static_cast(mMap.mapURIs().Length()); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistSerializeChild::GetURIMapping(uint32_t aIndex, + nsACString& aMapFrom, + nsACString& aMapTo) +{ + if (aIndex >= mMap.mapURIs().Length()) { + return NS_ERROR_INVALID_ARG; + } + aMapFrom = mMap.mapURIs()[aIndex].mapFrom(); + aMapTo = mMap.mapURIs()[aIndex].mapTo(); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistSerializeChild::GetTargetBaseURI(nsACString& aURI) +{ + aURI = mMap.targetBaseURI(); + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistSerializeChild::Close() +{ + NS_WARNING("WebBrowserPersistSerializeChild::Close()"); + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +WebBrowserPersistSerializeChild::Flush() +{ + NS_WARNING("WebBrowserPersistSerializeChild::Flush()"); + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +WebBrowserPersistSerializeChild::Write(const char* aBuf, uint32_t aCount, + uint32_t* aWritten) +{ + // Normally an nsIOutputStream would have to be thread-safe, but + // nsDocumentEncoder currently doesn't call this off the main + // thread (which also means it's difficult to test the + // thread-safety code this class doesn't yet have). + // + // This is *not* an NS_ERROR_NOT_IMPLEMENTED, because at this + // point we've probably already misused the non-thread-safe + // refcounting. + MOZ_RELEASE_ASSERT(NS_IsMainThread(), "Fix this class to be thread-safe."); + + // Work around bug 1181433 by sending multiple messages if + // necessary to write the entire aCount bytes, even though + // nsIOutputStream.idl says we're allowed to do a short write. + const char* buf = aBuf; + uint32_t count = aCount; + *aWritten = 0; + while (count > 0) { + uint32_t toWrite = std::min(IPC::MAX_MESSAGE_SIZE, count); + nsTArray arrayBuf; + // It would be nice if this extra copy could be avoided. + arrayBuf.AppendElements(buf, toWrite); + SendWriteData(Move(arrayBuf)); + *aWritten += toWrite; + buf += toWrite; + count -= toWrite; + } + return NS_OK; +} + +NS_IMETHODIMP +WebBrowserPersistSerializeChild::WriteFrom(nsIInputStream* aFrom, + uint32_t aCount, + uint32_t* aWritten) +{ + NS_WARNING("WebBrowserPersistSerializeChild::WriteFrom()"); + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +WebBrowserPersistSerializeChild::WriteSegments(nsReadSegmentFun aFun, + void* aCtx, + uint32_t aCount, + uint32_t* aWritten) +{ + NS_WARNING("WebBrowserPersistSerializeChild::WriteSegments()"); + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +WebBrowserPersistSerializeChild::IsNonBlocking(bool* aNonBlocking) +{ + // Writes will never fail with NS_BASE_STREAM_WOULD_BLOCK, so: + *aNonBlocking = false; + return NS_OK; +} + +} // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistSerializeChild.h firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistSerializeChild.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistSerializeChild.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistSerializeChild.h 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,39 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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/. */ + +#ifndef WebBrowserPersistSerializeChild_h__ +#define WebBrowserPersistSerializeChild_h__ + +#include "mozilla/PWebBrowserPersistSerializeChild.h" + +#include "mozilla/PWebBrowserPersistDocument.h" +#include "nsIWebBrowserPersistDocument.h" +#include "nsIOutputStream.h" + +namespace mozilla { + +class WebBrowserPersistSerializeChild final + : public PWebBrowserPersistSerializeChild + , public nsIWebBrowserPersistWriteCompletion + , public nsIWebBrowserPersistURIMap + , public nsIOutputStream +{ +public: + explicit WebBrowserPersistSerializeChild(const WebBrowserPersistURIMap& aMap); + + NS_DECL_NSIWEBBROWSERPERSISTWRITECOMPLETION + NS_DECL_NSIWEBBROWSERPERSISTURIMAP + NS_DECL_NSIOUTPUTSTREAM + NS_DECL_ISUPPORTS +private: + WebBrowserPersistURIMap mMap; + + virtual ~WebBrowserPersistSerializeChild(); +}; + +} // namespace mozilla + +#endif // WebBrowserPersistSerializeChild_h__ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistSerializeParent.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistSerializeParent.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistSerializeParent.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistSerializeParent.cpp 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,88 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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 "WebBrowserPersistSerializeParent.h" + +#include "nsReadableUtils.h" +#include "nsThreadUtils.h" + +namespace mozilla { + +WebBrowserPersistSerializeParent::WebBrowserPersistSerializeParent( + nsIWebBrowserPersistDocument* aDocument, + nsIOutputStream* aStream, + nsIWebBrowserPersistWriteCompletion* aFinish) +: mDocument(aDocument) +, mStream(aStream) +, mFinish(aFinish) +, mOutputError(NS_OK) +{ + MOZ_ASSERT(aDocument); + MOZ_ASSERT(aStream); + MOZ_ASSERT(aFinish); +} + +WebBrowserPersistSerializeParent::~WebBrowserPersistSerializeParent() = default; + +mozilla::ipc::IPCResult +WebBrowserPersistSerializeParent::RecvWriteData(nsTArray&& aData) +{ + if (NS_FAILED(mOutputError)) { + return IPC_OK(); + } + + uint32_t written = 0; + static_assert(sizeof(char) == sizeof(uint8_t), + "char must be (at least?) 8 bits"); + const char* data = reinterpret_cast(aData.Elements()); + // nsIOutputStream::Write is allowed to return short writes. + while (written < aData.Length()) { + uint32_t writeReturn; + nsresult rv = mStream->Write(data + written, + aData.Length() - written, + &writeReturn); + if (NS_FAILED(rv)) { + mOutputError = rv; + return IPC_OK(); + } + written += writeReturn; + } + return IPC_OK(); +} + +mozilla::ipc::IPCResult +WebBrowserPersistSerializeParent::Recv__delete__(const nsCString& aContentType, + const nsresult& aStatus) +{ + if (NS_SUCCEEDED(mOutputError)) { + mOutputError = aStatus; + } + mFinish->OnFinish(mDocument, + mStream, + aContentType, + mOutputError); + mFinish = nullptr; + return IPC_OK(); +} + +void +WebBrowserPersistSerializeParent::ActorDestroy(ActorDestroyReason aWhy) +{ + if (mFinish) { + MOZ_ASSERT(aWhy != Deletion); + // See comment in WebBrowserPersistDocumentParent::ActorDestroy + // (or bug 1202887) for why this is deferred. + nsCOMPtr errorLater = NewRunnableMethod + , nsCOMPtr, + nsCString, nsresult> + (mFinish, &nsIWebBrowserPersistWriteCompletion::OnFinish, + mDocument, mStream, EmptyCString(), NS_ERROR_FAILURE); + NS_DispatchToCurrentThread(errorLater); + mFinish = nullptr; + } +} + +} // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistSerializeParent.h firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistSerializeParent.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webbrowserpersist/WebBrowserPersistSerializeParent.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webbrowserpersist/WebBrowserPersistSerializeParent.h 2017-01-16 01:57:30.000000000 +0000 @@ -0,0 +1,49 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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/. */ + +#ifndef WebBrowserPersistSerializeParent_h__ +#define WebBrowserPersistSerializeParent_h__ + +#include "mozilla/PWebBrowserPersistSerializeParent.h" + +#include "nsCOMPtr.h" +#include "nsIOutputStream.h" +#include "nsIWebBrowserPersistDocument.h" + +namespace mozilla { + +class WebBrowserPersistSerializeParent + : public PWebBrowserPersistSerializeParent +{ +public: + WebBrowserPersistSerializeParent( + nsIWebBrowserPersistDocument* aDocument, + nsIOutputStream* aStream, + nsIWebBrowserPersistWriteCompletion* aFinish); + virtual ~WebBrowserPersistSerializeParent(); + + virtual mozilla::ipc::IPCResult + RecvWriteData(nsTArray&& aData) override; + + virtual mozilla::ipc::IPCResult + Recv__delete__(const nsCString& aContentType, + const nsresult& aStatus) override; + + virtual void + ActorDestroy(ActorDestroyReason aWhy) override; + +private: + // See also ...ReadParent::mDocument for the other reason this + // strong reference needs to be here. + nsCOMPtr mDocument; + nsCOMPtr mStream; + nsCOMPtr mFinish; + nsresult mOutputError; +}; + +} // namespace mozilla + +#endif // WebBrowserPersistSerializeParent_h__ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webidl/Document.webidl firefox-trunk-53.0~a1~hg20170115r329516/dom/webidl/Document.webidl --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webidl/Document.webidl 2017-01-13 01:54:34.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webidl/Document.webidl 2017-01-16 01:57:38.000000000 +0000 @@ -152,9 +152,6 @@ // Gecko extensions? attribute EventHandler onwheel; - attribute EventHandler oncopy; - attribute EventHandler oncut; - attribute EventHandler onpaste; attribute EventHandler onbeforescriptexecute; attribute EventHandler onafterscriptexecute; @@ -445,6 +442,7 @@ Document implements XPathEvaluator; Document implements GlobalEventHandlers; +Document implements DocumentAndElementEventHandlers; Document implements TouchEventHandlers; Document implements ParentNode; Document implements OnErrorEventHandlerForNodes; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webidl/EventHandler.webidl firefox-trunk-53.0~a1~hg20170115r329516/dom/webidl/EventHandler.webidl --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webidl/EventHandler.webidl 2017-01-13 01:54:34.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webidl/EventHandler.webidl 2017-01-16 01:57:38.000000000 +0000 @@ -161,6 +161,13 @@ attribute EventHandler onunload; }; +[NoInterfaceObject] +interface DocumentAndElementEventHandlers { + attribute EventHandler oncopy; + attribute EventHandler oncut; + attribute EventHandler onpaste; +}; + // The spec has |attribute OnErrorEventHandler onerror;| on // GlobalEventHandlers, and calls the handler differently depending on // whether an ErrorEvent was fired. We don't do that, and until we do we'll diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webidl/HTMLElement.webidl firefox-trunk-53.0~a1~hg20170115r329516/dom/webidl/HTMLElement.webidl --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webidl/HTMLElement.webidl 2017-01-13 01:54:35.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webidl/HTMLElement.webidl 2017-01-16 01:57:39.000000000 +0000 @@ -66,11 +66,6 @@ // styling [PutForwards=cssText, Constant] readonly attribute CSSStyleDeclaration style; - - // Mozilla specific stuff - attribute EventHandler oncopy; - attribute EventHandler oncut; - attribute EventHandler onpaste; }; // http://dev.w3.org/csswg/cssom-view/#extensions-to-the-htmlelement-interface @@ -103,6 +98,7 @@ }; HTMLElement implements GlobalEventHandlers; +HTMLElement implements DocumentAndElementEventHandlers; HTMLElement implements TouchEventHandlers; HTMLElement implements OnErrorEventHandlerForNodes; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/webidl/SVGElement.webidl firefox-trunk-53.0~a1~hg20170115r329516/dom/webidl/SVGElement.webidl --- firefox-trunk-53.0~a1~hg20170113r329171/dom/webidl/SVGElement.webidl 2017-01-13 01:54:47.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/webidl/SVGElement.webidl 2017-01-16 01:57:41.000000000 +0000 @@ -22,10 +22,6 @@ readonly attribute SVGSVGElement? ownerSVGElement; readonly attribute SVGElement? viewportElement; - attribute EventHandler oncopy; - attribute EventHandler oncut; - attribute EventHandler onpaste; - [SetterThrows, Pure] attribute long tabIndex; [Throws] void focus(); @@ -33,5 +29,6 @@ }; SVGElement implements GlobalEventHandlers; +SVGElement implements DocumentAndElementEventHandlers; SVGElement implements TouchEventHandlers; SVGElement implements OnErrorEventHandlerForNodes; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerClients.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerClients.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerClients.cpp 2017-01-13 01:54:49.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerClients.cpp 2017-01-16 01:57:49.000000000 +0000 @@ -131,10 +131,16 @@ WorkerPrivate* workerPrivate = mPromiseProxy->GetWorkerPrivate(); MOZ_ASSERT(workerPrivate); - RefPtr swm = ServiceWorkerManager::GetInstance(); + UniquePtr result; ErrorResult rv; - UniquePtr result = swm->GetClient(workerPrivate->GetPrincipal(), - mClientId, rv); + + RefPtr swm = ServiceWorkerManager::GetInstance(); + if (!swm) { + rv = NS_ERROR_FAILURE; + } else { + result = swm->GetClient(workerPrivate->GetPrincipal(), mClientId, rv); + } + RefPtr r = new ResolvePromiseWorkerRunnable(mPromiseProxy->GetWorkerPrivate(), mPromiseProxy, Move(result), @@ -210,11 +216,12 @@ return NS_OK; } - RefPtr swm = ServiceWorkerManager::GetInstance(); nsTArray result; - - swm->GetAllClients(mPromiseProxy->GetWorkerPrivate()->GetPrincipal(), mScope, - mIncludeUncontrolled, result); + RefPtr swm = ServiceWorkerManager::GetInstance(); + if (swm) { + swm->GetAllClients(mPromiseProxy->GetWorkerPrivate()->GetPrincipal(), + mScope, mIncludeUncontrolled, result); + } RefPtr r = new ResolvePromiseWorkerRunnable(mPromiseProxy->GetWorkerPrivate(), mPromiseProxy, result); @@ -288,11 +295,15 @@ WorkerPrivate* workerPrivate = mPromiseProxy->GetWorkerPrivate(); MOZ_ASSERT(workerPrivate); + nsresult rv = NS_OK; RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); - - nsresult rv = swm->ClaimClients(workerPrivate->GetPrincipal(), - mScope, mServiceWorkerID); + if (!swm) { + // browser shutdown + rv = NS_ERROR_FAILURE; + } else { + rv = swm->ClaimClients(workerPrivate->GetPrincipal(), mScope, + mServiceWorkerID); + } RefPtr r = new ResolveClaimRunnable(workerPrivate, mPromiseProxy, rv); @@ -536,7 +547,10 @@ } RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); + if (!swm) { + // browser shutdown + return NS_ERROR_FAILURE; + } nsCOMPtr principal = workerPrivate->GetPrincipal(); MOZ_ASSERT(principal); @@ -572,7 +586,10 @@ MOZ_ASSERT(workerPrivate); RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); + if (!swm) { + // browser shutdown + return NS_ERROR_FAILURE; + } nsCOMPtr principal = workerPrivate->GetPrincipal(); MOZ_ASSERT(principal); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerEvents.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerEvents.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerEvents.cpp 2017-01-13 01:54:49.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerEvents.cpp 2017-01-16 01:57:49.000000000 +0000 @@ -874,6 +874,10 @@ { AssertIsOnMainThread(); RefPtr swm = ServiceWorkerManager::GetInstance(); + if (!swm) { + // browser shutdown + return; + } // TODO: Make the error message a localized string. (bug 1222720) nsString message; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerJob.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerJob.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerJob.cpp 2017-01-13 01:54:49.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerJob.cpp 2017-01-16 01:57:49.000000000 +0000 @@ -101,7 +101,12 @@ // before proceeding. We should always be able to get a ServiceWorkerManager, // however, since Start() should not be called during shutdown. RefPtr swm = ServiceWorkerManager::GetInstance(); + if (!swm) { + // browser shutdown + return; + } if (!swm->HasBackgroundActor()) { + // waiting to initialize swm->AppendPendingOperation(runnable); return; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerManagerChild.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerManagerChild.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerManagerChild.cpp 2017-01-13 01:54:49.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerManagerChild.cpp 2017-01-16 01:57:49.000000000 +0000 @@ -24,9 +24,10 @@ } RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); + if (swm) { + swm->LoadRegistration(aData); + } - swm->LoadRegistration(aData); return IPC_OK(); } @@ -40,9 +41,10 @@ } RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); + if (swm) { + swm->SoftUpdate(aOriginAttributes, NS_ConvertUTF16toUTF8(aScope)); + } - swm->SoftUpdate(aOriginAttributes, NS_ConvertUTF16toUTF8(aScope)); return IPC_OK(); } @@ -55,7 +57,10 @@ } RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); + if (!swm) { + // browser shutdown + return IPC_OK(); + } nsCOMPtr principal = PrincipalInfoToPrincipal(aPrincipalInfo); if (NS_WARN_IF(!principal)) { @@ -75,9 +80,10 @@ } RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); + if (swm) { + swm->Remove(aHost); + } - swm->Remove(aHost); return IPC_OK(); } @@ -89,9 +95,10 @@ } RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); + if (swm) { + swm->RemoveAll(); + } - swm->RemoveAll(); return IPC_OK(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerManager.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerManager.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerManager.cpp 2017-01-13 01:54:49.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerManager.cpp 2017-01-16 01:57:49.000000000 +0000 @@ -36,6 +36,7 @@ #include "mozilla/Telemetry.h" #include "mozilla/dom/BindingUtils.h" #include "mozilla/dom/ContentParent.h" +#include "mozilla/dom/ContentChild.h" #include "mozilla/dom/DOMError.h" #include "mozilla/dom/ErrorEvent.h" #include "mozilla/dom/Headers.h" @@ -246,7 +247,7 @@ } void -ServiceWorkerManager::Init() +ServiceWorkerManager::Init(ServiceWorkerRegistrar* aRegistrar) { nsCOMPtr obs = mozilla::services::GetObserverService(); if (obs) { @@ -256,11 +257,10 @@ } if (XRE_IsParentProcess()) { - RefPtr swr = ServiceWorkerRegistrar::Get(); - MOZ_ASSERT(swr); + MOZ_DIAGNOSTIC_ASSERT(aRegistrar); nsTArray data; - swr->GetRegistrations(data); + aRegistrar->GetRegistrations(data); LoadRegistrations(data); if (obs) { @@ -275,6 +275,56 @@ } } +void +ServiceWorkerManager::MaybeStartShutdown() +{ + MOZ_ASSERT(NS_IsMainThread()); + + if (mShuttingDown) { + return; + } + + mShuttingDown = true; + + for (auto it1 = mRegistrationInfos.Iter(); !it1.Done(); it1.Next()) { + for (auto it2 = it1.UserData()->mUpdateTimers.Iter(); !it2.Done(); it2.Next()) { + nsCOMPtr timer = it2.UserData(); + timer->Cancel(); + } + it1.UserData()->mUpdateTimers.Clear(); + + for (auto it2 = it1.UserData()->mJobQueues.Iter(); !it2.Done(); it2.Next()) { + RefPtr queue = it2.UserData(); + queue->CancelAll(); + } + it1.UserData()->mJobQueues.Clear(); + } + + nsCOMPtr obs = mozilla::services::GetObserverService(); + if (obs) { + obs->RemoveObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID); + + if (XRE_IsParentProcess()) { + obs->RemoveObserver(this, PURGE_SESSION_HISTORY); + obs->RemoveObserver(this, PURGE_DOMAIN_DATA); + obs->RemoveObserver(this, CLEAR_ORIGIN_DATA); + } + } + + mPendingOperations.Clear(); + + if (!mActor) { + return; + } + + mActor->ManagerShuttingDown(); + + RefPtr runnable = new TeardownRunnable(mActor); + nsresult rv = NS_DispatchToMainThread(runnable); + Unused << NS_WARN_IF(NS_FAILED(rv)); + mActor = nullptr; +} + class ServiceWorkerResolveWindowPromiseOnRegisterCallback final : public ServiceWorkerJob::Callback { RefPtr mWindow; @@ -332,9 +382,10 @@ AssertIsOnMainThread(); RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); + if (swm) { + swm->PropagateSoftUpdate(mOriginAttributes, mScope); + } - swm->PropagateSoftUpdate(mOriginAttributes, mScope); return NS_OK; } @@ -364,11 +415,8 @@ AssertIsOnMainThread(); RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); - - nsresult rv = swm->PropagateUnregister(mPrincipal, mCallback, mScope); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; + if (swm) { + swm->PropagateUnregister(mPrincipal, mCallback, mScope); } return NS_OK; @@ -394,9 +442,10 @@ AssertIsOnMainThread(); RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); + if (swm) { + swm->Remove(mHost); + } - swm->Remove(mHost); return NS_OK; } @@ -418,9 +467,10 @@ AssertIsOnMainThread(); RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); + if (swm) { + swm->PropagateRemove(mHost); + } - swm->PropagateRemove(mHost); return NS_OK; } @@ -442,9 +492,10 @@ AssertIsOnMainThread(); RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); + if (swm) { + swm->PropagateRemoveAll(); + } - swm->PropagateRemoveAll(); return NS_OK; } @@ -628,6 +679,17 @@ AssertIsOnMainThread(); Telemetry::Accumulate(Telemetry::SERVICE_WORKER_REGISTRATIONS, 1); + ContentChild* contentChild = ContentChild::GetSingleton(); + if (contentChild && + contentChild->GetRemoteType().EqualsLiteral(FILE_REMOTE_TYPE)) { + nsString message(NS_LITERAL_STRING("ServiceWorker registered by document " + "embedded in a file:/// URI. This may " + "result in unexpected behavior.")); + ReportToAllClients(cleanedScope, message, EmptyString(), + EmptyString(), 0, 0, nsIScriptError::warningFlag); + Telemetry::Accumulate(Telemetry::FILE_EMBEDDED_SERVICEWORKERS, 1); + } + promise.forget(aPromise); return NS_OK; } @@ -659,6 +721,10 @@ Run() override { RefPtr swm = ServiceWorkerManager::GetInstance(); + if (!swm) { + mPromise->MaybeReject(NS_ERROR_UNEXPECTED); + return NS_OK; + } nsIDocument* doc = mWindow->GetExtantDoc(); if (!doc) { @@ -783,6 +849,10 @@ Run() override { RefPtr swm = ServiceWorkerManager::GetInstance(); + if (!swm) { + mPromise->MaybeReject(NS_ERROR_UNEXPECTED); + return NS_OK; + } nsIDocument* doc = mWindow->GetExtantDoc(); if (!doc) { @@ -883,6 +953,10 @@ Run() override { RefPtr swm = ServiceWorkerManager::GetInstance(); + if (!swm) { + mPromise->MaybeReject(NS_ERROR_UNEXPECTED); + return NS_OK; + } nsIDocument* doc = mWindow->GetExtantDoc(); if (!doc) { @@ -1345,12 +1419,23 @@ // this can resurrect the ServiceWorkerManager pretty late during shutdown. static bool firstTime = true; if (firstTime) { + RefPtr swr; + + // Don't create the ServiceWorkerManager until the ServiceWorkerRegistrar is + // initialized. + if (XRE_IsParentProcess()) { + swr = ServiceWorkerRegistrar::Get(); + if (!swr) { + return nullptr; + } + } + firstTime = false; AssertIsOnMainThread(); gInstance = new ServiceWorkerManager(); - gInstance->Init(); + gInstance->Init(swr); ClearOnShutdown(&gInstance); } RefPtr copy = gInstance.get(); @@ -1728,7 +1813,8 @@ void ServiceWorkerManager::ActorFailed() { - MOZ_CRASH("Failed to create a PBackgroundChild actor!"); + MOZ_DIAGNOSTIC_ASSERT(!mActor); + MaybeStartShutdown(); } void @@ -1738,12 +1824,16 @@ MOZ_ASSERT(!mActor); if (mShuttingDown) { - mPendingOperations.Clear(); + MOZ_DIAGNOSTIC_ASSERT(mPendingOperations.IsEmpty()); return; } PServiceWorkerManagerChild* actor = aActor->SendPServiceWorkerManagerConstructor(); + if (!actor) { + ActorFailed(); + return; + } mActor = static_cast(actor); @@ -1771,7 +1861,10 @@ return; } - MOZ_ASSERT(mActor); + MOZ_DIAGNOSTIC_ASSERT(mActor); + if (!mActor) { + return; + } ServiceWorkerRegistrationData data; nsresult rv = PopulateRegistrationData(aPrincipal, aRegistration, data); @@ -1890,7 +1983,10 @@ MOZ_ASSERT(aInfo->mPrincipal); RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); + if (!swm) { + // browser shutdown + return; + } nsAutoCString scopeKey; nsresult rv = swm->PrincipalToScopeKey(aInfo->mPrincipal, scopeKey); @@ -1941,9 +2037,8 @@ MOZ_ASSERT(aData); RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); - if (!swm->mRegistrationInfos.Get(aScopeKey, aData)) { + if (!swm || !swm->mRegistrationInfos.Get(aScopeKey, aData)) { return false; } @@ -1963,7 +2058,9 @@ const nsACString& aScope) { RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); + if (!swm) { + return false; + } nsAutoCString scopeKey; nsresult rv = PrincipalToScopeKey(aPrincipal, scopeKey); @@ -1983,7 +2080,9 @@ ServiceWorkerManager::RemoveScopeAndRegistration(ServiceWorkerRegistrationInfo* aRegistration) { RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); + if (!swm) { + return; + } nsAutoCString scopeKey; nsresult rv = swm->PrincipalToScopeKey(aRegistration->mPrincipal, scopeKey); @@ -3276,7 +3375,6 @@ return; } - RefPtr swm = ServiceWorkerManager::GetInstance(); for (auto it1 = mRegistrationInfos.Iter(); !it1.Done(); it1.Next()) { ServiceWorkerManager::RegistrationDataPerPrincipal* data = it1.UserData(); for (auto it2 = data->mInfos.Iter(); !it2.Done(); it2.Next()) { @@ -3286,7 +3384,7 @@ nullptr, nullptr); // This way subdomains are also cleared. if (NS_SUCCEEDED(rv) && HasRootDomain(scopeURI, aHost)) { - swm->ForceUnregister(data, reg); + ForceUnregister(data, reg); } } } @@ -3311,12 +3409,11 @@ { AssertIsOnMainThread(); - RefPtr swm = ServiceWorkerManager::GetInstance(); for (auto it1 = mRegistrationInfos.Iter(); !it1.Done(); it1.Next()) { ServiceWorkerManager::RegistrationDataPerPrincipal* data = it1.UserData(); for (auto it2 = data->mInfos.Iter(); !it2.Done(); it2.Next()) { ServiceWorkerRegistrationInfo* reg = it2.UserData(); - swm->ForceUnregister(data, reg); + ForceUnregister(data, reg); } } } @@ -3361,8 +3458,7 @@ continue; } - RefPtr swm = ServiceWorkerManager::GetInstance(); - swm->ForceUnregister(data, reg); + ForceUnregister(data, reg); } } } @@ -3543,43 +3639,7 @@ } if (strcmp(aTopic, NS_XPCOM_SHUTDOWN_OBSERVER_ID) == 0) { - mShuttingDown = true; - - for (auto it1 = mRegistrationInfos.Iter(); !it1.Done(); it1.Next()) { - for (auto it2 = it1.UserData()->mUpdateTimers.Iter(); !it2.Done(); it2.Next()) { - nsCOMPtr timer = it2.UserData(); - timer->Cancel(); - } - it1.UserData()->mUpdateTimers.Clear(); - - for (auto it2 = it1.UserData()->mJobQueues.Iter(); !it2.Done(); it2.Next()) { - RefPtr queue = it2.UserData(); - queue->CancelAll(); - } - it1.UserData()->mJobQueues.Clear(); - } - - nsCOMPtr obs = mozilla::services::GetObserverService(); - if (obs) { - obs->RemoveObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID); - - if (XRE_IsParentProcess()) { - obs->RemoveObserver(this, PURGE_SESSION_HISTORY); - obs->RemoveObserver(this, PURGE_DOMAIN_DATA); - obs->RemoveObserver(this, CLEAR_ORIGIN_DATA); - } - } - - if (mActor) { - mActor->ManagerShuttingDown(); - - RefPtr runnable = new TeardownRunnable(mActor); - nsresult rv = NS_DispatchToMainThread(runnable); - Unused << NS_WARN_IF(NS_FAILED(rv)); - mActor = nullptr; - } else { - mPendingOperations.Clear(); - } + MaybeStartShutdown(); return NS_OK; } @@ -3707,7 +3767,9 @@ ~InterceptionReleaseHandle() { RefPtr swm = ServiceWorkerManager::GetInstance(); - swm->RemoveNavigationInterception(mScope, mChannel); + if (swm) { + swm->RemoveNavigationInterception(mScope, mChannel); + } } public: diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerManager.h firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerManager.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerManager.h 2017-01-13 01:54:49.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerManager.h 2017-01-16 01:57:49.000000000 +0000 @@ -41,6 +41,7 @@ namespace dom { +class ServiceWorkerRegistrar; class ServiceWorkerRegistrationListener; namespace workers { @@ -328,7 +329,10 @@ ~ServiceWorkerManager(); void - Init(); + Init(ServiceWorkerRegistrar* aRegistrar); + + void + MaybeStartShutdown(); already_AddRefed GetOrCreateJobQueue(const nsACString& aOriginSuffix, diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerManagerParent.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerManagerParent.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerManagerParent.cpp 2017-01-13 01:54:49.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerManagerParent.cpp 2017-01-16 01:57:49.000000000 +0000 @@ -44,7 +44,12 @@ RefPtr service = dom::ServiceWorkerRegistrar::Get(); - MOZ_ASSERT(service); + + // Shutdown during the process of trying to update the registrar. Give + // up on this modification. + if (!service) { + return NS_OK; + } service->RegisterServiceWorker(mData); @@ -84,7 +89,12 @@ RefPtr service = dom::ServiceWorkerRegistrar::Get(); - MOZ_ASSERT(service); + + // Shutdown during the process of trying to update the registrar. Give + // up on this modification. + if (!service) { + return NS_OK; + } service->UnregisterServiceWorker(mPrincipalInfo, NS_ConvertUTF16toUTF8(mScope)); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerPrivate.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerPrivate.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerPrivate.cpp 2017-01-13 01:54:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerPrivate.cpp 2017-01-16 01:57:49.000000000 +0000 @@ -1702,13 +1702,11 @@ { AssertIsOnMainThread(); - if (NS_WARN_IF(!mInfo)) { + RefPtr swm = ServiceWorkerManager::GetInstance(); + if (NS_WARN_IF(!mInfo || !swm)) { return NS_ERROR_FAILURE; } - RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); - RefPtr registration = swm->GetRegistration(mInfo->GetPrincipal(), mInfo->Scope()); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerRegisterJob.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerRegisterJob.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerRegisterJob.cpp 2017-01-13 01:54:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerRegisterJob.cpp 2017-01-16 01:57:49.000000000 +0000 @@ -27,12 +27,12 @@ { AssertIsOnMainThread(); - if (Canceled()) { + RefPtr swm = ServiceWorkerManager::GetInstance(); + if (Canceled() || !swm) { FailUpdateJob(NS_ERROR_DOM_ABORT_ERR); return; } - RefPtr swm = ServiceWorkerManager::GetInstance(); RefPtr registration = swm->GetRegistration(mPrincipal, mScope); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerRegistration.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerRegistration.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerRegistration.cpp 2017-01-13 01:54:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerRegistration.cpp 2017-01-16 01:57:49.000000000 +0000 @@ -366,7 +366,10 @@ MOZ_ASSERT(aCallback); RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); + if (!swm) { + // browser shutdown + return; + } swm->Update(aPrincipal, NS_ConvertUTF16toUTF8(aScope), aCallback); } @@ -920,19 +923,13 @@ GetPushManager(JSContext* aCx, ErrorResult& aRv) override; private: - enum Reason - { - RegistrationIsGoingAway = 0, - WorkerIsGoingAway, - }; - ~ServiceWorkerRegistrationWorkerThread(); void InitListener(); void - ReleaseListener(Reason aReason); + ReleaseListener(); WorkerPrivate* mWorkerPrivate; RefPtr mListener; @@ -1073,7 +1070,7 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(ServiceWorkerRegistrationWorkerThread, ServiceWorkerRegistration) NS_IMPL_CYCLE_COLLECTION_UNLINK(mPushManager) - tmp->ReleaseListener(RegistrationIsGoingAway); + tmp->ReleaseListener(); NS_IMPL_CYCLE_COLLECTION_UNLINK_END ServiceWorkerRegistrationWorkerThread::ServiceWorkerRegistrationWorkerThread(WorkerPrivate* aWorkerPrivate, @@ -1086,7 +1083,7 @@ ServiceWorkerRegistrationWorkerThread::~ServiceWorkerRegistrationWorkerThread() { - ReleaseListener(RegistrationIsGoingAway); + ReleaseListener(); MOZ_ASSERT(!mListener); } @@ -1175,22 +1172,6 @@ return promise.forget(); } -class StartListeningRunnable final : public Runnable -{ - RefPtr mListener; -public: - explicit StartListeningRunnable(WorkerListener* aListener) - : mListener(aListener) - {} - - NS_IMETHOD - Run() override - { - mListener->StartListeningForEvents(); - return NS_OK; - } -}; - void ServiceWorkerRegistrationWorkerThread::InitListener() { @@ -1206,48 +1187,13 @@ return; } - RefPtr r = - new StartListeningRunnable(mListener); + nsCOMPtr r = + NewRunnableMethod(mListener, &WorkerListener::StartListeningForEvents); MOZ_ALWAYS_SUCCEEDS(worker->DispatchToMainThread(r.forget())); } -class AsyncStopListeningRunnable final : public Runnable -{ - RefPtr mListener; -public: - explicit AsyncStopListeningRunnable(WorkerListener* aListener) - : mListener(aListener) - {} - - NS_IMETHOD - Run() override - { - mListener->StopListeningForEvents(); - return NS_OK; - } -}; - -class SyncStopListeningRunnable final : public WorkerMainThreadRunnable -{ - RefPtr mListener; -public: - SyncStopListeningRunnable(WorkerPrivate* aWorkerPrivate, - WorkerListener* aListener) - : WorkerMainThreadRunnable(aWorkerPrivate, - NS_LITERAL_CSTRING("ServiceWorkerRegistration :: StopListening")) - , mListener(aListener) - {} - - bool - MainThreadRun() override - { - mListener->StopListeningForEvents(); - return true; - } -}; - void -ServiceWorkerRegistrationWorkerThread::ReleaseListener(Reason aReason) +ServiceWorkerRegistrationWorkerThread::ReleaseListener() { if (!mListener) { return; @@ -1263,23 +1209,10 @@ mListener->ClearRegistration(); - if (aReason == RegistrationIsGoingAway) { - RefPtr r = - new AsyncStopListeningRunnable(mListener); - MOZ_ALWAYS_SUCCEEDS(mWorkerPrivate->DispatchToMainThread(r.forget())); - } else if (aReason == WorkerIsGoingAway) { - RefPtr r = - new SyncStopListeningRunnable(mWorkerPrivate, mListener); - ErrorResult rv; - r->Dispatch(Killing, rv); - if (rv.Failed()) { - NS_ERROR("Failed to dispatch stop listening runnable!"); - // And now what? - rv.SuppressException(); - } - } else { - MOZ_CRASH("Bad reason"); - } + nsCOMPtr r = + NewRunnableMethod(mListener, &WorkerListener::StopListeningForEvents); + MOZ_ALWAYS_SUCCEEDS(mWorkerPrivate->DispatchToMainThread(r.forget())); + mListener = nullptr; mWorkerPrivate = nullptr; } @@ -1287,7 +1220,7 @@ bool ServiceWorkerRegistrationWorkerThread::Notify(Status aStatus) { - ReleaseListener(WorkerIsGoingAway); + ReleaseListener(); return true; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerRegistrationInfo.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerRegistrationInfo.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerRegistrationInfo.cpp 2017-01-13 01:54:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerRegistrationInfo.cpp 2017-01-16 01:57:49.000000000 +0000 @@ -238,12 +238,17 @@ return; } + RefPtr swm = ServiceWorkerManager::GetInstance(); + if (!swm) { + // browser shutdown began during async activation step + return; + } + TransitionWaitingToActive(); // FIXME(nsm): Unlink appcache if there is one. // "Queue a task to fire a simple event named controllerchange..." - RefPtr swm = ServiceWorkerManager::GetInstance(); nsCOMPtr controllerChangeRunnable = NewRunnableMethod>( swm, &ServiceWorkerManager::FireControllerChange, this); @@ -279,6 +284,10 @@ // Activation never fails, so aSuccess is ignored. mActiveWorker->UpdateState(ServiceWorkerState::Activated); RefPtr swm = ServiceWorkerManager::GetInstance(); + if (!swm) { + // browser shutdown started during async activation completion step + return; + } swm->StoreRegistration(mPrincipal, this); } @@ -314,6 +323,11 @@ { AssertIsOnMainThread(); RefPtr swm = ServiceWorkerManager::GetInstance(); + if (!swm) { + // browser shutdown started during this async step + return; + } + if (aTransition == Invalidate) { swm->InvalidateServiceWorkerRegistrationWorker(this, aWorker); } else { @@ -495,6 +509,10 @@ mWaitingWorker->UpdateState(ServiceWorkerState::Installed); RefPtr swm = ServiceWorkerManager::GetInstance(); + if (!swm) { + // browser shutdown began + return; + } swm->StoreRegistration(mPrincipal, this); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerUnregisterJob.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerUnregisterJob.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerUnregisterJob.cpp 2017-01-13 01:54:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerUnregisterJob.cpp 2017-01-16 01:57:49.000000000 +0000 @@ -99,7 +99,8 @@ { AssertIsOnMainThread(); - if (Canceled()) { + RefPtr swm = ServiceWorkerManager::GetInstance(); + if (Canceled() || !swm) { Finish(NS_ERROR_DOM_ABORT_ERR); return; } @@ -109,8 +110,6 @@ // registration->update() method directly since we don't have that // client information available here. - RefPtr swm = ServiceWorkerManager::GetInstance(); - // "Let registration be the result of running [[Get Registration]] // algorithm passing scope as the argument." RefPtr registration = diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerUpdateJob.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerUpdateJob.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerUpdateJob.cpp 2017-01-13 01:54:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerUpdateJob.cpp 2017-01-16 01:57:49.000000000 +0000 @@ -247,7 +247,8 @@ AssertIsOnMainThread(); MOZ_ASSERT(GetType() == Type::Update); - if (Canceled()) { + RefPtr swm = ServiceWorkerManager::GetInstance(); + if (Canceled() || !swm) { FailUpdateJob(NS_ERROR_DOM_ABORT_ERR); return; } @@ -256,7 +257,6 @@ // // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#update-algorithm - RefPtr swm = ServiceWorkerManager::GetInstance(); RefPtr registration = swm->GetRegistration(mPrincipal, mScope); @@ -348,7 +348,8 @@ { AssertIsOnMainThread(); - if (NS_WARN_IF(Canceled())) { + RefPtr swm = ServiceWorkerManager::GetInstance(); + if (NS_WARN_IF(Canceled() || !swm)) { FailUpdateJob(NS_ERROR_DOM_ABORT_ERR); return; } @@ -413,7 +414,6 @@ "ServiceWorkerScopePathMismatch", params, message); NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), "Failed to format localized string"); - RefPtr swm = ServiceWorkerManager::GetInstance(); swm->ReportToAllClients(mScope, message, EmptyString(), @@ -462,7 +462,8 @@ { AssertIsOnMainThread(); - if (Canceled()) { + RefPtr swm = ServiceWorkerManager::GetInstance(); + if (Canceled() || !swm) { FailUpdateJob(NS_ERROR_DOM_ABORT_ERR); return; } @@ -480,14 +481,15 @@ return; } - Install(); + Install(swm); } void -ServiceWorkerUpdateJob::Install() +ServiceWorkerUpdateJob::Install(ServiceWorkerManager* aSWM) { AssertIsOnMainThread(); - MOZ_ASSERT(!Canceled()); + MOZ_DIAGNOSTIC_ASSERT(!Canceled()); + MOZ_DIAGNOSTIC_ASSERT(aSWM); MOZ_ASSERT(!mRegistration->GetInstalling()); @@ -503,12 +505,10 @@ // The job promise cannot be rejected after this point, but the job can // still fail; e.g. if the install event handler throws, etc. - RefPtr swm = ServiceWorkerManager::GetInstance(); - // fire the updatefound event nsCOMPtr upr = NewRunnableMethod>( - swm, + aSWM, &ServiceWorkerManager::FireUpdateFoundOnServiceWorkerRegistrations, mRegistration); NS_DispatchToMainThread(upr); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerUpdateJob.h firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerUpdateJob.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/ServiceWorkerUpdateJob.h 2017-01-13 01:54:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/ServiceWorkerUpdateJob.h 2017-01-16 01:57:49.000000000 +0000 @@ -13,6 +13,8 @@ namespace dom { namespace workers { +class ServiceWorkerManager; + // A job class that performs the Update and Install algorithms from the // service worker spec. This class is designed to be inherited and customized // as a different job type. This is necessary because the register job @@ -93,7 +95,7 @@ // Utility method corresponding to the spec Install algorithm. void - Install(); + Install(ServiceWorkerManager* aSWM); // Utility method called after the install event is handled. void diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/WorkerPrivate.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/WorkerPrivate.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/WorkerPrivate.cpp 2017-01-13 01:54:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/WorkerPrivate.cpp 2017-01-16 01:57:49.000000000 +0000 @@ -1126,13 +1126,14 @@ // the ServiceWorkerManager to report on any controlled documents. if (aWorkerPrivate->IsServiceWorker()) { RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); - swm->HandleError(aCx, aWorkerPrivate->GetPrincipal(), - aWorkerPrivate->WorkerName(), - aWorkerPrivate->ScriptURL(), - mMessage, - mFilename, mLine, mLineNumber, - mColumnNumber, mFlags, mExnType); + if (swm) { + swm->HandleError(aCx, aWorkerPrivate->GetPrincipal(), + aWorkerPrivate->WorkerName(), + aWorkerPrivate->ScriptURL(), + mMessage, + mFilename, mLine, mLineNumber, + mColumnNumber, mFlags, mExnType); + } return true; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/WorkerScope.cpp firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/WorkerScope.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/WorkerScope.cpp 2017-01-13 01:54:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/WorkerScope.cpp 2017-01-16 01:57:49.000000000 +0000 @@ -749,8 +749,6 @@ Run() override { AssertIsOnMainThread(); - RefPtr swm = ServiceWorkerManager::GetInstance(); - MOZ_ASSERT(swm); MutexAutoLock lock(mPromiseProxy->Lock()); if (mPromiseProxy->CleanedUp()) { @@ -758,8 +756,13 @@ } WorkerPrivate* workerPrivate = mPromiseProxy->GetWorkerPrivate(); - swm->SetSkipWaitingFlag(workerPrivate->GetPrincipal(), mScope, - workerPrivate->ServiceWorkerID()); + MOZ_DIAGNOSTIC_ASSERT(workerPrivate); + + RefPtr swm = ServiceWorkerManager::GetInstance(); + if (swm) { + swm->SetSkipWaitingFlag(workerPrivate->GetPrincipal(), mScope, + workerPrivate->ServiceWorkerID()); + } RefPtr runnable = new SkipWaitingResultRunnable(workerPrivate, mPromiseProxy); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/WorkerScope.h firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/WorkerScope.h --- firefox-trunk-53.0~a1~hg20170113r329171/dom/workers/WorkerScope.h 2017-01-13 01:54:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/dom/workers/WorkerScope.h 2017-01-16 01:57:49.000000000 +0000 @@ -23,7 +23,7 @@ class Crypto; class Function; class IDBFactory; -enum class ImageBitmapFormat : uint32_t; +enum class ImageBitmapFormat : uint8_t; class Performance; class Promise; class RequestOrUSVString; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/editor/libeditor/crashtests/crashtests.list firefox-trunk-53.0~a1~hg20170115r329516/editor/libeditor/crashtests/crashtests.list --- firefox-trunk-53.0~a1~hg20170113r329171/editor/libeditor/crashtests/crashtests.list 2017-01-13 01:55:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/editor/libeditor/crashtests/crashtests.list 2017-01-16 01:58:08.000000000 +0000 @@ -25,7 +25,7 @@ load 475132-1.xhtml load 499844-1.html load 503709-1.xhtml -skip-if(stylo) load 513375-1.xhtml # bug 1323654 +load 513375-1.xhtml load 535632-1.xhtml load 574558-1.xhtml load 580151-1.xhtml diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/editor/moz.build firefox-trunk-53.0~a1~hg20170115r329516/editor/moz.build --- firefox-trunk-53.0~a1~hg20170113r329171/editor/moz.build 2017-01-13 01:55:30.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/editor/moz.build 2017-01-16 01:58:24.000000000 +0000 @@ -42,3 +42,6 @@ EXTRA_JS_MODULES += [ 'AsyncSpellCheckTestHelper.jsm', ] + +with Files('**'): + BUG_COMPONENT = ('Core', 'Editor') diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/build/moz.build firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/build/moz.build --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/build/moz.build 2017-01-13 01:55:31.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/build/moz.build 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -# -*- Mode: python; 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/. - -SOURCES += [ - 'nsWebBrowserModule.cpp', -] - -FINAL_LIBRARY = 'xul' -LOCAL_INCLUDES += [ - '..', -] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/build/nsWebBrowserModule.cpp firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/build/nsWebBrowserModule.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/build/nsWebBrowserModule.cpp 2017-01-13 01:55:31.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/build/nsWebBrowserModule.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* 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 "mozilla/ModuleUtils.h" -#include "nsIServiceManager.h" -#include "nsXPIDLString.h" - -#include "nsEmbedCID.h" - -#include "nsWebBrowser.h" -#include "nsCommandHandler.h" -#include "nsWebBrowserContentPolicy.h" - -// Factory Constructors - -NS_GENERIC_FACTORY_CONSTRUCTOR(nsWebBrowser) -NS_GENERIC_FACTORY_CONSTRUCTOR(nsWebBrowserContentPolicy) -NS_GENERIC_FACTORY_CONSTRUCTOR(nsCommandHandler) - -NS_DEFINE_NAMED_CID(NS_WEBBROWSER_CID); -NS_DEFINE_NAMED_CID(NS_COMMANDHANDLER_CID); -NS_DEFINE_NAMED_CID(NS_WEBBROWSERCONTENTPOLICY_CID); - -static const mozilla::Module::CIDEntry kWebBrowserCIDs[] = { - { &kNS_WEBBROWSER_CID, false, nullptr, nsWebBrowserConstructor }, - { &kNS_COMMANDHANDLER_CID, false, nullptr, nsCommandHandlerConstructor }, - { &kNS_WEBBROWSERCONTENTPOLICY_CID, false, nullptr, nsWebBrowserContentPolicyConstructor }, - { nullptr } -}; - -static const mozilla::Module::ContractIDEntry kWebBrowserContracts[] = { - { NS_WEBBROWSER_CONTRACTID, &kNS_WEBBROWSER_CID }, - { NS_COMMANDHANDLER_CONTRACTID, &kNS_COMMANDHANDLER_CID }, - { NS_WEBBROWSERCONTENTPOLICY_CONTRACTID, &kNS_WEBBROWSERCONTENTPOLICY_CID }, - { nullptr } -}; - -static const mozilla::Module::CategoryEntry kWebBrowserCategories[] = { - { "content-policy", NS_WEBBROWSERCONTENTPOLICY_CONTRACTID, NS_WEBBROWSERCONTENTPOLICY_CONTRACTID }, - { nullptr } -}; - -static const mozilla::Module kWebBrowserModule = { - mozilla::Module::kVersion, - kWebBrowserCIDs, - kWebBrowserContracts, - kWebBrowserCategories -}; - -NSMODULE_DEFN(Browser_Embedding_Module) = &kWebBrowserModule; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/moz.build firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/moz.build --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/moz.build 2017-01-13 01:55:31.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/moz.build 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ -# -*- Mode: python; 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 += ['build'] - -XPIDL_SOURCES += [ - 'nsCWebBrowser.idl', - 'nsICommandHandler.idl', - 'nsIContextMenuListener.idl', - 'nsIContextMenuListener2.idl', - 'nsIEmbeddingSiteWindow.idl', - 'nsITooltipListener.idl', - 'nsITooltipTextProvider.idl', - 'nsIWebBrowser.idl', - 'nsIWebBrowserChrome.idl', - 'nsIWebBrowserChrome2.idl', - 'nsIWebBrowserChrome3.idl', - 'nsIWebBrowserChromeFocus.idl', - 'nsIWebBrowserFocus.idl', - 'nsIWebBrowserSetup.idl', - 'nsIWebBrowserStream.idl', -] - -if CONFIG['NS_PRINTING']: - XPIDL_SOURCES += [ - 'nsIPrintingPromptService.idl', - 'nsIWebBrowserPrint.idl', - ] - -XPIDL_MODULE = 'webBrowser_core' - -EXPORTS += [ - 'nsCTooltipTextProvider.h', -] - -UNIFIED_SOURCES += [ - 'nsCommandHandler.cpp', - 'nsContextMenuInfo.cpp', - 'nsDocShellTreeOwner.cpp', - 'nsEmbedStream.cpp', - 'nsWebBrowser.cpp', - 'nsWebBrowserContentPolicy.cpp', -] - -FINAL_LIBRARY = 'xul' -LOCAL_INCLUDES += [ - '/docshell/base', - '/dom/base', - '/dom/svg', - '/layout/style', -] - -if CONFIG['GNU_CXX']: - CXXFLAGS += ['-Wno-error=shadow'] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsCommandHandler.cpp firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsCommandHandler.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsCommandHandler.cpp 2017-01-13 01:55:31.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsCommandHandler.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,139 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* 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 "nsCommandHandler.h" -#include "nsWebBrowser.h" -#include "nsDocShellTreeOwner.h" - -#include "nsMemory.h" -#include "nsPIDOMWindow.h" - -nsCommandHandler::nsCommandHandler() - : mWindow(nullptr) -{ -} - -nsCommandHandler::~nsCommandHandler() -{ -} - -nsresult -nsCommandHandler::GetCommandHandler(nsICommandHandler** aCommandHandler) -{ - NS_ENSURE_ARG_POINTER(aCommandHandler); - - *aCommandHandler = nullptr; - if (!mWindow) { - return NS_ERROR_FAILURE; - } - - // Get the document tree owner - - nsCOMPtr docShellAsTreeItem = - do_QueryInterface(mWindow->GetDocShell()); - nsIDocShellTreeOwner* treeOwner = nullptr; - docShellAsTreeItem->GetTreeOwner(&treeOwner); - - // Make sure the tree owner is an an nsDocShellTreeOwner object - // by QI'ing for a hidden interface. If it doesn't have the interface - // then it's not safe to do the casting. - - nsCOMPtr realTreeOwner(do_QueryInterface(treeOwner)); - if (realTreeOwner) { - nsDocShellTreeOwner* tree = static_cast(treeOwner); - if (tree->mTreeOwner) { - nsresult rv; - rv = tree->mTreeOwner->QueryInterface(NS_GET_IID(nsICommandHandler), - (void**)aCommandHandler); - NS_RELEASE(treeOwner); - return rv; - } - - NS_RELEASE(treeOwner); - } - - *aCommandHandler = nullptr; - - return NS_OK; -} - -NS_IMPL_ADDREF(nsCommandHandler) -NS_IMPL_RELEASE(nsCommandHandler) - -NS_INTERFACE_MAP_BEGIN(nsCommandHandler) - NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsICommandHandler) - NS_INTERFACE_MAP_ENTRY(nsICommandHandlerInit) - NS_INTERFACE_MAP_ENTRY(nsICommandHandler) -NS_INTERFACE_MAP_END - -/////////////////////////////////////////////////////////////////////////////// -// nsICommandHandlerInit implementation - -NS_IMETHODIMP -nsCommandHandler::GetWindow(mozIDOMWindowProxy** aWindow) -{ - *aWindow = nullptr; - return NS_OK; -} - -NS_IMETHODIMP -nsCommandHandler::SetWindow(mozIDOMWindowProxy* aWindow) -{ - if (!aWindow) { - return NS_ERROR_FAILURE; - } - mWindow = nsPIDOMWindowOuter::From(aWindow); - return NS_OK; -} - -/////////////////////////////////////////////////////////////////////////////// -// nsICommandHandler implementation - -NS_IMETHODIMP -nsCommandHandler::Exec(const char* aCommand, const char* aStatus, - char** aResult) -{ - NS_ENSURE_ARG_POINTER(aCommand); - NS_ENSURE_ARG_POINTER(aResult); - - nsCOMPtr commandHandler; - GetCommandHandler(getter_AddRefs(commandHandler)); - - // Call the client's command handler to deal with this command - if (commandHandler) { - *aResult = nullptr; - return commandHandler->Exec(aCommand, aStatus, aResult); - } - - // Return an empty string - const char szEmpty[] = ""; - *aResult = (char*)nsMemory::Clone(szEmpty, sizeof(szEmpty)); - - return NS_OK; -} - -NS_IMETHODIMP -nsCommandHandler::Query(const char* aCommand, const char* aStatus, - char** aResult) -{ - NS_ENSURE_ARG_POINTER(aCommand); - NS_ENSURE_ARG_POINTER(aResult); - - nsCOMPtr commandHandler; - GetCommandHandler(getter_AddRefs(commandHandler)); - - // Call the client's command handler to deal with this command - if (commandHandler) { - *aResult = nullptr; - return commandHandler->Query(aCommand, aStatus, aResult); - } - - // Return an empty string - const char szEmpty[] = ""; - *aResult = (char*)nsMemory::Clone(szEmpty, sizeof(szEmpty)); - - return NS_OK; -} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsCommandHandler.h firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsCommandHandler.h --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsCommandHandler.h 2017-01-13 01:55:31.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsCommandHandler.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* 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/. */ - -#ifndef NSCOMMANDHANDLER_H -#define NSCOMMANDHANDLER_H - -#include "nsISupports.h" -#include "nsICommandHandler.h" - -class nsPIDOMWindowOuter; - -class nsCommandHandler - : public nsICommandHandlerInit - , public nsICommandHandler -{ -public: - nsCommandHandler(); - - NS_DECL_ISUPPORTS - NS_DECL_NSICOMMANDHANDLERINIT - NS_DECL_NSICOMMANDHANDLER - -protected: - virtual ~nsCommandHandler(); - -private: - nsresult GetCommandHandler(nsICommandHandler** aCommandHandler); - - nsPIDOMWindowOuter* mWindow; -}; - -#endif diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsContextMenuInfo.cpp firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsContextMenuInfo.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsContextMenuInfo.cpp 2017-01-13 01:55:31.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsContextMenuInfo.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,326 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* 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 "nsContextMenuInfo.h" - -#include "nsIImageLoadingContent.h" -#include "imgLoader.h" -#include "nsIDOMDocument.h" -#include "nsIDOMHTMLDocument.h" -#include "nsIDOMHTMLElement.h" -#include "nsIDOMHTMLHtmlElement.h" -#include "nsIDOMHTMLAnchorElement.h" -#include "nsIDOMHTMLImageElement.h" -#include "nsIDOMHTMLAreaElement.h" -#include "nsIDOMHTMLLinkElement.h" -#include "nsIDOMWindow.h" -#include "nsICSSDeclaration.h" -#include "nsIDOMCSSValue.h" -#include "nsIDOMCSSPrimitiveValue.h" -#include "nsNetUtil.h" -#include "nsUnicharUtils.h" -#include "nsIDocument.h" -#include "nsIPrincipal.h" -#include "nsIContentSecurityPolicy.h" -#include "nsIContentPolicy.h" -#include "imgRequestProxy.h" - -using mozilla::dom::Element; -using mozilla::ErrorResult; - -NS_IMPL_ISUPPORTS(nsContextMenuInfo, nsIContextMenuInfo) - -nsContextMenuInfo::nsContextMenuInfo() -{ -} - -nsContextMenuInfo::~nsContextMenuInfo() -{ -} - -NS_IMETHODIMP -nsContextMenuInfo::GetMouseEvent(nsIDOMEvent** aEvent) -{ - NS_ENSURE_ARG_POINTER(aEvent); - NS_IF_ADDREF(*aEvent = mMouseEvent); - return NS_OK; -} - -NS_IMETHODIMP -nsContextMenuInfo::GetTargetNode(nsIDOMNode** aNode) -{ - NS_ENSURE_ARG_POINTER(aNode); - NS_IF_ADDREF(*aNode = mDOMNode); - return NS_OK; -} - -NS_IMETHODIMP -nsContextMenuInfo::GetAssociatedLink(nsAString& aHRef) -{ - NS_ENSURE_STATE(mAssociatedLink); - aHRef.Truncate(0); - - nsCOMPtr content(do_QueryInterface(mAssociatedLink)); - nsAutoString localName; - if (content) { - content->GetLocalName(localName); - } - - nsCOMPtr linkContent; - ToLowerCase(localName); - if (localName.EqualsLiteral("a") || - localName.EqualsLiteral("area") || - localName.EqualsLiteral("link")) { - bool hasAttr; - content->HasAttribute(NS_LITERAL_STRING("href"), &hasAttr); - if (hasAttr) { - linkContent = content; - nsCOMPtr anchor(do_QueryInterface(linkContent)); - if (anchor) { - anchor->GetHref(aHRef); - } else { - nsCOMPtr area(do_QueryInterface(linkContent)); - if (area) { - area->GetHref(aHRef); - } else { - nsCOMPtr link(do_QueryInterface(linkContent)); - if (link) { - link->GetHref(aHRef); - } - } - } - } - } else { - nsCOMPtr curr; - mAssociatedLink->GetParentNode(getter_AddRefs(curr)); - while (curr) { - content = do_QueryInterface(curr); - if (!content) { - break; - } - content->GetLocalName(localName); - ToLowerCase(localName); - if (localName.EqualsLiteral("a")) { - bool hasAttr; - content->HasAttribute(NS_LITERAL_STRING("href"), &hasAttr); - if (hasAttr) { - linkContent = content; - nsCOMPtr anchor( - do_QueryInterface(linkContent)); - if (anchor) { - anchor->GetHref(aHRef); - } - } else { - linkContent = nullptr; // Links can't be nested. - } - break; - } - - nsCOMPtr temp = curr; - temp->GetParentNode(getter_AddRefs(curr)); - } - } - - return NS_OK; -} - -NS_IMETHODIMP -nsContextMenuInfo::GetImageContainer(imgIContainer** aImageContainer) -{ - NS_ENSURE_ARG_POINTER(aImageContainer); - NS_ENSURE_STATE(mDOMNode); - - nsCOMPtr request; - GetImageRequest(mDOMNode, getter_AddRefs(request)); - if (request) { - return request->GetImage(aImageContainer); - } - - return NS_ERROR_FAILURE; -} - -NS_IMETHODIMP -nsContextMenuInfo::GetImageSrc(nsIURI** aURI) -{ - NS_ENSURE_ARG_POINTER(aURI); - NS_ENSURE_STATE(mDOMNode); - - nsCOMPtr content(do_QueryInterface(mDOMNode)); - NS_ENSURE_TRUE(content, NS_ERROR_FAILURE); - return content->GetCurrentURI(aURI); -} - -NS_IMETHODIMP -nsContextMenuInfo::GetBackgroundImageContainer(imgIContainer** aImageContainer) -{ - NS_ENSURE_ARG_POINTER(aImageContainer); - NS_ENSURE_STATE(mDOMNode); - - RefPtr request; - GetBackgroundImageRequest(mDOMNode, getter_AddRefs(request)); - if (request) { - return request->GetImage(aImageContainer); - } - - return NS_ERROR_FAILURE; -} - -NS_IMETHODIMP -nsContextMenuInfo::GetBackgroundImageSrc(nsIURI** aURI) -{ - NS_ENSURE_ARG_POINTER(aURI); - NS_ENSURE_STATE(mDOMNode); - - RefPtr request; - GetBackgroundImageRequest(mDOMNode, getter_AddRefs(request)); - if (request) { - return request->GetURI(aURI); - } - - return NS_ERROR_FAILURE; -} - -nsresult -nsContextMenuInfo::GetImageRequest(nsIDOMNode* aDOMNode, imgIRequest** aRequest) -{ - NS_ENSURE_ARG(aDOMNode); - NS_ENSURE_ARG_POINTER(aRequest); - - // Get content - nsCOMPtr content(do_QueryInterface(aDOMNode)); - NS_ENSURE_TRUE(content, NS_ERROR_FAILURE); - - return content->GetRequest(nsIImageLoadingContent::CURRENT_REQUEST, aRequest); -} - -bool -nsContextMenuInfo::HasBackgroundImage(nsIDOMNode* aDOMNode) -{ - NS_ENSURE_TRUE(aDOMNode, false); - - RefPtr request; - GetBackgroundImageRequest(aDOMNode, getter_AddRefs(request)); - - return (request != nullptr); -} - -nsresult -nsContextMenuInfo::GetBackgroundImageRequest(nsIDOMNode* aDOMNode, - imgRequestProxy** aRequest) -{ - - NS_ENSURE_ARG(aDOMNode); - NS_ENSURE_ARG_POINTER(aRequest); - - nsCOMPtr domNode = aDOMNode; - - // special case for the element: if it has no background-image - // we'll defer to - nsCOMPtr htmlElement = do_QueryInterface(domNode); - if (htmlElement) { - nsCOMPtr element = do_QueryInterface(domNode); - nsAutoString nameSpace; - element->GetNamespaceURI(nameSpace); - if (nameSpace.IsEmpty()) { - nsresult rv = GetBackgroundImageRequestInternal(domNode, aRequest); - if (NS_SUCCEEDED(rv) && *aRequest) { - return NS_OK; - } - - // no background-image found - nsCOMPtr document; - domNode->GetOwnerDocument(getter_AddRefs(document)); - nsCOMPtr htmlDocument(do_QueryInterface(document)); - NS_ENSURE_TRUE(htmlDocument, NS_ERROR_FAILURE); - - nsCOMPtr body; - htmlDocument->GetBody(getter_AddRefs(body)); - domNode = do_QueryInterface(body); - NS_ENSURE_TRUE(domNode, NS_ERROR_FAILURE); - } - } - return GetBackgroundImageRequestInternal(domNode, aRequest); -} - -nsresult -nsContextMenuInfo::GetBackgroundImageRequestInternal(nsIDOMNode* aDOMNode, - imgRequestProxy** aRequest) -{ - NS_ENSURE_ARG_POINTER(aDOMNode); - - nsCOMPtr domNode = aDOMNode; - nsCOMPtr parentNode; - - nsCOMPtr document; - domNode->GetOwnerDocument(getter_AddRefs(document)); - NS_ENSURE_TRUE(document, NS_ERROR_FAILURE); - - nsCOMPtr window; - document->GetDefaultView(getter_AddRefs(window)); - NS_ENSURE_TRUE(window, NS_ERROR_FAILURE); - - auto* piWindow = nsPIDOMWindowOuter::From(window); - nsPIDOMWindowInner* innerWindow = piWindow->GetCurrentInnerWindow(); - MOZ_ASSERT(innerWindow); - - nsCOMPtr primitiveValue; - nsAutoString bgStringValue; - - nsCOMPtr doc(do_QueryInterface(document)); - nsCOMPtr principal = doc ? doc->NodePrincipal() : nullptr; - - while (true) { - nsCOMPtr domElement(do_QueryInterface(domNode)); - // bail for the parent node of the root element or null argument - if (!domElement) { - break; - } - - ErrorResult dummy; - nsCOMPtr computedStyle = - innerWindow->GetComputedStyle(*domElement, EmptyString(), dummy); - dummy.SuppressException(); - if (computedStyle) { - nsCOMPtr cssValue; - computedStyle->GetPropertyCSSValue(NS_LITERAL_STRING("background-image"), - getter_AddRefs(cssValue)); - primitiveValue = do_QueryInterface(cssValue); - if (primitiveValue) { - primitiveValue->GetStringValue(bgStringValue); - if (!bgStringValue.EqualsLiteral("none")) { - nsCOMPtr bgUri; - NS_NewURI(getter_AddRefs(bgUri), bgStringValue); - NS_ENSURE_TRUE(bgUri, NS_ERROR_FAILURE); - - imgLoader* il = imgLoader::NormalLoader(); - NS_ENSURE_TRUE(il, NS_ERROR_FAILURE); - - return il->LoadImage(bgUri, nullptr, nullptr, - doc->GetReferrerPolicy(), principal, nullptr, - nullptr, nullptr, nullptr, nsIRequest::LOAD_NORMAL, - nullptr, nsIContentPolicy::TYPE_INTERNAL_IMAGE, - EmptyString(), aRequest); - } - } - - // bail if we encounter non-transparent background-color - computedStyle->GetPropertyCSSValue(NS_LITERAL_STRING("background-color"), - getter_AddRefs(cssValue)); - primitiveValue = do_QueryInterface(cssValue); - if (primitiveValue) { - primitiveValue->GetStringValue(bgStringValue); - if (!bgStringValue.EqualsLiteral("transparent")) { - return NS_ERROR_FAILURE; - } - } - } - - domNode->GetParentNode(getter_AddRefs(parentNode)); - domNode = parentNode; - } - - return NS_ERROR_FAILURE; -} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsContextMenuInfo.h firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsContextMenuInfo.h --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsContextMenuInfo.h 2017-01-13 01:55:31.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsContextMenuInfo.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,54 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* 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/. */ - -#ifndef nsContextMenuInfo_h__ -#define nsContextMenuInfo_h__ - -#include "nsCOMPtr.h" -#include "nsIContextMenuListener2.h" -#include "nsIDOMNode.h" -#include "nsIDOMEvent.h" -#include "imgIContainer.h" -#include "imgIRequest.h" - -class ChromeContextMenuListener; -class imgRequestProxy; - -// Helper class for implementors of nsIContextMenuListener2 -class nsContextMenuInfo : public nsIContextMenuInfo -{ - friend class ChromeContextMenuListener; - -public: - nsContextMenuInfo(); - - NS_DECL_ISUPPORTS - NS_DECL_NSICONTEXTMENUINFO - -private: - virtual ~nsContextMenuInfo(); - - void SetMouseEvent(nsIDOMEvent* aEvent) { mMouseEvent = aEvent; } - void SetDOMNode(nsIDOMNode* aNode) { mDOMNode = aNode; } - void SetAssociatedLink(nsIDOMNode* aLink) { mAssociatedLink = aLink; } - - nsresult GetImageRequest(nsIDOMNode* aDOMNode, imgIRequest** aRequest); - - bool HasBackgroundImage(nsIDOMNode* aDOMNode); - - nsresult GetBackgroundImageRequest(nsIDOMNode* aDOMNode, - imgRequestProxy** aRequest); - - nsresult GetBackgroundImageRequestInternal(nsIDOMNode* aDOMNode, - imgRequestProxy** aRequest); - -private: - nsCOMPtr mMouseEvent; - nsCOMPtr mDOMNode; - nsCOMPtr mAssociatedLink; -}; - -#endif // nsContextMenuInfo_h__ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsCTooltipTextProvider.h firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsCTooltipTextProvider.h --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsCTooltipTextProvider.h 2017-01-13 01:55:31.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsCTooltipTextProvider.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* 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/. */ - -#ifndef NSCTOOLTIPTEXTPROVIDER_H -#define NSCTOOLTIPTEXTPROVIDER_H - -#include "nsITooltipTextProvider.h" - -#define NS_TOOLTIPTEXTPROVIDER_CONTRACTID \ - "@mozilla.org/embedcomp/tooltiptextprovider;1" -#define NS_DEFAULTTOOLTIPTEXTPROVIDER_CONTRACTID \ - "@mozilla.org/embedcomp/default-tooltiptextprovider;1" - -#endif diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsCWebBrowser.idl firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsCWebBrowser.idl --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsCWebBrowser.idl 2017-01-13 01:55:31.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsCWebBrowser.idl 1970-01-01 00:00:00.000000000 +0000 @@ -1,34 +0,0 @@ -/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 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/. */ - -#include "nsIWebBrowser.idl" -#include "nsIBaseWindow.idl" -#include "nsIScrollable.idl" -#include "nsITextScroll.idl" - -/* -nsCWebBrowser implements: -------------------------- -nsIWebBrowser -nsIDocShellTreeItem -nsIWebNavigation -nsIWebProgress -nsIBaseWindow -nsIScrollable -nsITextScroll -nsIInterfaceRequestor - - -Outwardly communicates with: ----------------------------- -nsIWebBrowserChrome -nsIBaseWindow -nsIInterfaceRequestor -*/ - -%{ C++ -#include "nsEmbedCID.h" -%} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsDocShellTreeOwner.cpp firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsDocShellTreeOwner.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsDocShellTreeOwner.cpp 2017-01-13 01:55:31.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsDocShellTreeOwner.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,1671 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* 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/. */ - -// Local Includes -#include "nsDocShellTreeOwner.h" -#include "nsWebBrowser.h" - -// Helper Classes -#include "nsStyleCoord.h" -#include "nsSize.h" -#include "mozilla/ReflowInput.h" -#include "nsIServiceManager.h" -#include "nsComponentManagerUtils.h" -#include "nsXPIDLString.h" -#include "nsIAtom.h" -#include "nsReadableUtils.h" -#include "nsUnicharUtils.h" -#include "nsISimpleEnumerator.h" -#include "mozilla/LookAndFeel.h" - -// Interfaces needed to be included -#include "nsPresContext.h" -#include "nsIContextMenuListener.h" -#include "nsIContextMenuListener2.h" -#include "nsITooltipListener.h" -#include "nsIDOMNode.h" -#include "nsIDOMNodeList.h" -#include "nsIDOMDocument.h" -#include "nsIDOMDocumentType.h" -#include "nsIDOMElement.h" -#include "Link.h" -#include "mozilla/dom/Element.h" -#include "mozilla/dom/SVGTitleElement.h" -#include "nsIDOMEvent.h" -#include "nsIDOMFileList.h" -#include "nsIDOMMouseEvent.h" -#include "nsIFormControl.h" -#include "nsIDOMHTMLInputElement.h" -#include "nsIDOMHTMLTextAreaElement.h" -#include "nsIDOMHTMLHtmlElement.h" -#include "nsIDOMHTMLAppletElement.h" -#include "nsIDOMHTMLObjectElement.h" -#include "nsIDOMHTMLEmbedElement.h" -#include "nsIDOMHTMLDocument.h" -#include "nsIImageLoadingContent.h" -#include "nsIWebNavigation.h" -#include "nsIDOMHTMLElement.h" -#include "nsIPresShell.h" -#include "nsIStringBundle.h" -#include "nsPIDOMWindow.h" -#include "nsPIWindowRoot.h" -#include "nsIDOMWindowCollection.h" -#include "nsIWindowWatcher.h" -#include "nsPIWindowWatcher.h" -#include "nsIPrompt.h" -#include "nsITabParent.h" -#include "nsITabChild.h" -#include "nsRect.h" -#include "nsIWebBrowserChromeFocus.h" -#include "nsIContent.h" -#include "imgIContainer.h" -#include "nsContextMenuInfo.h" -#include "nsPresContext.h" -#include "nsViewManager.h" -#include "nsView.h" -#include "nsIDOMDragEvent.h" -#include "nsIConstraintValidation.h" -#include "mozilla/Attributes.h" -#include "mozilla/EventListenerManager.h" -#include "mozilla/dom/Event.h" // for nsIDOMEvent::InternalDOMEvent() -#include "mozilla/dom/File.h" // for input type=file -#include "mozilla/dom/FileList.h" // for input type=file - -using namespace mozilla; -using namespace mozilla::dom; - -// A helper routine that navigates the tricky path from a |nsWebBrowser| to -// a |EventTarget| via the window root and chrome event handler. -static nsresult -GetDOMEventTarget(nsWebBrowser* aInBrowser, EventTarget** aTarget) -{ - if (!aInBrowser) { - return NS_ERROR_INVALID_POINTER; - } - - nsCOMPtr domWindow; - aInBrowser->GetContentDOMWindow(getter_AddRefs(domWindow)); - if (!domWindow) { - return NS_ERROR_FAILURE; - } - - auto* outerWindow = nsPIDOMWindowOuter::From(domWindow); - nsPIDOMWindowOuter* rootWindow = outerWindow->GetPrivateRoot(); - NS_ENSURE_TRUE(rootWindow, NS_ERROR_FAILURE); - nsCOMPtr target = rootWindow->GetChromeEventHandler(); - NS_ENSURE_TRUE(target, NS_ERROR_FAILURE); - target.forget(aTarget); - - return NS_OK; -} - -nsDocShellTreeOwner::nsDocShellTreeOwner() - : mWebBrowser(nullptr) - , mTreeOwner(nullptr) - , mPrimaryContentShell(nullptr) - , mWebBrowserChrome(nullptr) - , mOwnerWin(nullptr) - , mOwnerRequestor(nullptr) -{ -} - -nsDocShellTreeOwner::~nsDocShellTreeOwner() -{ - RemoveChromeListeners(); -} - -NS_IMPL_ADDREF(nsDocShellTreeOwner) -NS_IMPL_RELEASE(nsDocShellTreeOwner) - -NS_INTERFACE_MAP_BEGIN(nsDocShellTreeOwner) - NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDocShellTreeOwner) - NS_INTERFACE_MAP_ENTRY(nsIDocShellTreeOwner) - NS_INTERFACE_MAP_ENTRY(nsIBaseWindow) - NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor) - NS_INTERFACE_MAP_ENTRY(nsIWebProgressListener) - NS_INTERFACE_MAP_ENTRY(nsIDOMEventListener) - NS_INTERFACE_MAP_ENTRY(nsICDocShellTreeOwner) - NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference) -NS_INTERFACE_MAP_END - -//***************************************************************************** -// nsDocShellTreeOwner::nsIInterfaceRequestor -//***************************************************************************** - -NS_IMETHODIMP -nsDocShellTreeOwner::GetInterface(const nsIID& aIID, void** aSink) -{ - NS_ENSURE_ARG_POINTER(aSink); - - if (NS_SUCCEEDED(QueryInterface(aIID, aSink))) { - return NS_OK; - } - - if (aIID.Equals(NS_GET_IID(nsIWebBrowserChromeFocus))) { - if (mWebBrowserChromeWeak != nullptr) { - return mWebBrowserChromeWeak->QueryReferent(aIID, aSink); - } - return mOwnerWin->QueryInterface(aIID, aSink); - } - - if (aIID.Equals(NS_GET_IID(nsIPrompt))) { - nsCOMPtr prompt; - EnsurePrompter(); - prompt = mPrompter; - if (prompt) { - prompt.forget(aSink); - return NS_OK; - } - return NS_NOINTERFACE; - } - - if (aIID.Equals(NS_GET_IID(nsIAuthPrompt))) { - nsCOMPtr prompt; - EnsureAuthPrompter(); - prompt = mAuthPrompter; - if (prompt) { - prompt.forget(aSink); - return NS_OK; - } - return NS_NOINTERFACE; - } - - nsCOMPtr req = GetOwnerRequestor(); - if (req) { - return req->GetInterface(aIID, aSink); - } - - return NS_NOINTERFACE; -} - -//***************************************************************************** -// nsDocShellTreeOwner::nsIDocShellTreeOwner -//***************************************************************************** - -void -nsDocShellTreeOwner::EnsurePrompter() -{ - if (mPrompter) { - return; - } - - nsCOMPtr wwatch(do_GetService(NS_WINDOWWATCHER_CONTRACTID)); - if (wwatch && mWebBrowser) { - nsCOMPtr domWindow; - mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow)); - if (domWindow) { - wwatch->GetNewPrompter(domWindow, getter_AddRefs(mPrompter)); - } - } -} - -void -nsDocShellTreeOwner::EnsureAuthPrompter() -{ - if (mAuthPrompter) { - return; - } - - nsCOMPtr wwatch(do_GetService(NS_WINDOWWATCHER_CONTRACTID)); - if (wwatch && mWebBrowser) { - nsCOMPtr domWindow; - mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow)); - if (domWindow) { - wwatch->GetNewAuthPrompter(domWindow, getter_AddRefs(mAuthPrompter)); - } - } -} - -void -nsDocShellTreeOwner::AddToWatcher() -{ - if (mWebBrowser) { - nsCOMPtr domWindow; - mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow)); - if (domWindow) { - nsCOMPtr wwatch( - do_GetService(NS_WINDOWWATCHER_CONTRACTID)); - if (wwatch) { - nsCOMPtr webBrowserChrome = GetWebBrowserChrome(); - if (webBrowserChrome) { - wwatch->AddWindow(domWindow, webBrowserChrome); - } - } - } - } -} - -void -nsDocShellTreeOwner::RemoveFromWatcher() -{ - if (mWebBrowser) { - nsCOMPtr domWindow; - mWebBrowser->GetContentDOMWindow(getter_AddRefs(domWindow)); - if (domWindow) { - nsCOMPtr wwatch( - do_GetService(NS_WINDOWWATCHER_CONTRACTID)); - if (wwatch) { - wwatch->RemoveWindow(domWindow); - } - } - } -} - -void -nsDocShellTreeOwner::EnsureContentTreeOwner() -{ - if (mContentTreeOwner) { - return; - } - - mContentTreeOwner = new nsDocShellTreeOwner(); - nsCOMPtr browserChrome = GetWebBrowserChrome(); - if (browserChrome) { - mContentTreeOwner->SetWebBrowserChrome(browserChrome); - } - - if (mWebBrowser) { - mContentTreeOwner->WebBrowser(mWebBrowser); - } -} - -NS_IMETHODIMP -nsDocShellTreeOwner::ContentShellAdded(nsIDocShellTreeItem* aContentShell, - bool aPrimary) -{ - if (mTreeOwner) - return mTreeOwner->ContentShellAdded(aContentShell, aPrimary); - - EnsureContentTreeOwner(); - aContentShell->SetTreeOwner(mContentTreeOwner); - - if (aPrimary) { - mPrimaryContentShell = aContentShell; - mPrimaryTabParent = nullptr; - } - return NS_OK; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::ContentShellRemoved(nsIDocShellTreeItem* aContentShell) -{ - if (mTreeOwner) { - return mTreeOwner->ContentShellRemoved(aContentShell); - } - - if (mPrimaryContentShell == aContentShell) { - mPrimaryContentShell = nullptr; - } - - return NS_OK; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetPrimaryContentShell(nsIDocShellTreeItem** aShell) -{ - NS_ENSURE_ARG_POINTER(aShell); - - if (mTreeOwner) { - return mTreeOwner->GetPrimaryContentShell(aShell); - } - - nsCOMPtr shell; - if (!mPrimaryTabParent) { - shell = - mPrimaryContentShell ? mPrimaryContentShell : mWebBrowser->mDocShell; - } - shell.forget(aShell); - - return NS_OK; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::TabParentAdded(nsITabParent* aTab, bool aPrimary) -{ - if (mTreeOwner) { - return mTreeOwner->TabParentAdded(aTab, aPrimary); - } - - if (aPrimary) { - mPrimaryTabParent = aTab; - mPrimaryContentShell = nullptr; - } else if (mPrimaryTabParent == aTab) { - mPrimaryTabParent = nullptr; - } - - return NS_OK; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::TabParentRemoved(nsITabParent* aTab) -{ - if (mTreeOwner) { - return mTreeOwner->TabParentRemoved(aTab); - } - - if (aTab == mPrimaryTabParent) { - mPrimaryTabParent = nullptr; - } - - return NS_OK; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetPrimaryTabParent(nsITabParent** aTab) -{ - if (mTreeOwner) { - return mTreeOwner->GetPrimaryTabParent(aTab); - } - - nsCOMPtr tab = mPrimaryTabParent; - tab.forget(aTab); - return NS_OK; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetPrimaryContentSize(int32_t* aWidth, - int32_t* aHeight) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::SetPrimaryContentSize(int32_t aWidth, - int32_t aHeight) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetRootShellSize(int32_t* aWidth, - int32_t* aHeight) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::SetRootShellSize(int32_t aWidth, - int32_t aHeight) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::SizeShellTo(nsIDocShellTreeItem* aShellItem, - int32_t aCX, int32_t aCY) -{ - nsCOMPtr webBrowserChrome = GetWebBrowserChrome(); - - NS_ENSURE_STATE(mTreeOwner || webBrowserChrome); - - if (mTreeOwner) { - return mTreeOwner->SizeShellTo(aShellItem, aCX, aCY); - } - - if (aShellItem == mWebBrowser->mDocShell) { - nsCOMPtr tabChild = do_QueryInterface(webBrowserChrome); - if (tabChild) { - // The XUL window to resize is in the parent process, but there we - // won't be able to get aShellItem to do the hack in nsXULWindow::SizeShellTo, - // so let's send the width and height of aShellItem too. - nsCOMPtr shellAsWin(do_QueryInterface(aShellItem)); - NS_ENSURE_TRUE(shellAsWin, NS_ERROR_FAILURE); - - int32_t width = 0; - int32_t height = 0; - shellAsWin->GetSize(&width, &height); - return tabChild->RemoteSizeShellTo(aCX, aCY, width, height); - } - return webBrowserChrome->SizeBrowserTo(aCX, aCY); - } - - nsCOMPtr webNav(do_QueryInterface(aShellItem)); - NS_ENSURE_TRUE(webNav, NS_ERROR_FAILURE); - - nsCOMPtr domDocument; - webNav->GetDocument(getter_AddRefs(domDocument)); - NS_ENSURE_TRUE(domDocument, NS_ERROR_FAILURE); - - nsCOMPtr domElement; - domDocument->GetDocumentElement(getter_AddRefs(domElement)); - NS_ENSURE_TRUE(domElement, NS_ERROR_FAILURE); - - // Set the preferred Size - //XXX - NS_ERROR("Implement this"); - /* - Set the preferred size on the aShellItem. - */ - - RefPtr presContext; - mWebBrowser->mDocShell->GetPresContext(getter_AddRefs(presContext)); - NS_ENSURE_TRUE(presContext, NS_ERROR_FAILURE); - - nsIPresShell* presShell = presContext->GetPresShell(); - NS_ENSURE_TRUE(presShell, NS_ERROR_FAILURE); - - NS_ENSURE_SUCCESS( - presShell->ResizeReflow(NS_UNCONSTRAINEDSIZE, NS_UNCONSTRAINEDSIZE), - NS_ERROR_FAILURE); - - nsRect shellArea = presContext->GetVisibleArea(); - - int32_t browserCX = presContext->AppUnitsToDevPixels(shellArea.width); - int32_t browserCY = presContext->AppUnitsToDevPixels(shellArea.height); - - return webBrowserChrome->SizeBrowserTo(browserCX, browserCY); -} - -NS_IMETHODIMP -nsDocShellTreeOwner::SetPersistence(bool aPersistPosition, - bool aPersistSize, - bool aPersistSizeMode) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetPersistence(bool* aPersistPosition, - bool* aPersistSize, - bool* aPersistSizeMode) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetTabCount(uint32_t* aResult) -{ - if (mTreeOwner) { - return mTreeOwner->GetTabCount(aResult); - } - - *aResult = 0; - return NS_OK; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetHasPrimaryContent(bool* aResult) -{ - *aResult = mPrimaryTabParent || mPrimaryContentShell; - return NS_OK; -} - -//***************************************************************************** -// nsDocShellTreeOwner::nsIBaseWindow -//***************************************************************************** - -NS_IMETHODIMP -nsDocShellTreeOwner::InitWindow(nativeWindow aParentNativeWindow, - nsIWidget* aParentWidget, int32_t aX, - int32_t aY, int32_t aCX, int32_t aCY) -{ - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::Create() -{ - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::Destroy() -{ - nsCOMPtr webBrowserChrome = GetWebBrowserChrome(); - if (webBrowserChrome) { - return webBrowserChrome->DestroyBrowserWindow(); - } - - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetUnscaledDevicePixelsPerCSSPixel(double* aScale) -{ - if (mWebBrowser) { - return mWebBrowser->GetUnscaledDevicePixelsPerCSSPixel(aScale); - } - - *aScale = 1.0; - return NS_OK; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetDevicePixelsPerDesktopPixel(double* aScale) -{ - if (mWebBrowser) { - return mWebBrowser->GetDevicePixelsPerDesktopPixel(aScale); - } - - *aScale = 1.0; - return NS_OK; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::SetPositionDesktopPix(int32_t aX, int32_t aY) -{ - if (mWebBrowser) { - nsresult rv = mWebBrowser->SetPositionDesktopPix(aX, aY); - NS_ENSURE_SUCCESS(rv, rv); - } - - double scale = 1.0; - GetDevicePixelsPerDesktopPixel(&scale); - return SetPosition(NSToIntRound(aX * scale), NSToIntRound(aY * scale)); -} - -NS_IMETHODIMP -nsDocShellTreeOwner::SetPosition(int32_t aX, int32_t aY) -{ - nsCOMPtr ownerWin = GetOwnerWin(); - if (ownerWin) { - return ownerWin->SetDimensions(nsIEmbeddingSiteWindow::DIM_FLAGS_POSITION, - aX, aY, 0, 0); - } - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetPosition(int32_t* aX, int32_t* aY) -{ - nsCOMPtr ownerWin = GetOwnerWin(); - if (ownerWin) { - return ownerWin->GetDimensions(nsIEmbeddingSiteWindow::DIM_FLAGS_POSITION, - aX, aY, nullptr, nullptr); - } - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::SetSize(int32_t aCX, int32_t aCY, bool aRepaint) -{ - nsCOMPtr ownerWin = GetOwnerWin(); - if (ownerWin) { - return ownerWin->SetDimensions(nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_OUTER, - 0, 0, aCX, aCY); - } - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetSize(int32_t* aCX, int32_t* aCY) -{ - nsCOMPtr ownerWin = GetOwnerWin(); - if (ownerWin) { - return ownerWin->GetDimensions(nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_OUTER, - nullptr, nullptr, aCX, aCY); - } - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::SetPositionAndSize(int32_t aX, int32_t aY, int32_t aCX, - int32_t aCY, uint32_t aFlags) -{ - nsCOMPtr ownerWin = GetOwnerWin(); - if (ownerWin) { - return ownerWin->SetDimensions( - nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_OUTER | - nsIEmbeddingSiteWindow::DIM_FLAGS_POSITION, - aX, aY, aCX, aCY); - } - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetPositionAndSize(int32_t* aX, int32_t* aY, int32_t* aCX, - int32_t* aCY) -{ - nsCOMPtr ownerWin = GetOwnerWin(); - if (ownerWin) { - return ownerWin->GetDimensions( - nsIEmbeddingSiteWindow::DIM_FLAGS_SIZE_OUTER | - nsIEmbeddingSiteWindow::DIM_FLAGS_POSITION, - aX, aY, aCX, aCY); - } - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::Repaint(bool aForce) -{ - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetParentWidget(nsIWidget** aParentWidget) -{ - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::SetParentWidget(nsIWidget* aParentWidget) -{ - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetParentNativeWindow(nativeWindow* aParentNativeWindow) -{ - nsCOMPtr ownerWin = GetOwnerWin(); - if (ownerWin) { - return ownerWin->GetSiteWindow(aParentNativeWindow); - } - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::SetParentNativeWindow(nativeWindow aParentNativeWindow) -{ - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetNativeHandle(nsAString& aNativeHandle) -{ - // the nativeHandle should be accessed from nsIXULWindow - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetVisibility(bool* aVisibility) -{ - nsCOMPtr ownerWin = GetOwnerWin(); - if (ownerWin) { - return ownerWin->GetVisibility(aVisibility); - } - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::SetVisibility(bool aVisibility) -{ - nsCOMPtr ownerWin = GetOwnerWin(); - if (ownerWin) { - return ownerWin->SetVisibility(aVisibility); - } - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetEnabled(bool* aEnabled) -{ - NS_ENSURE_ARG_POINTER(aEnabled); - *aEnabled = true; - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::SetEnabled(bool aEnabled) -{ - return NS_ERROR_NOT_IMPLEMENTED; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetMainWidget(nsIWidget** aMainWidget) -{ - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::SetFocus() -{ - nsCOMPtr ownerWin = GetOwnerWin(); - if (ownerWin) { - return ownerWin->SetFocus(); - } - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::GetTitle(char16_t** aTitle) -{ - nsCOMPtr ownerWin = GetOwnerWin(); - if (ownerWin) { - return ownerWin->GetTitle(aTitle); - } - return NS_ERROR_NULL_POINTER; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::SetTitle(const char16_t* aTitle) -{ - nsCOMPtr ownerWin = GetOwnerWin(); - if (ownerWin) { - return ownerWin->SetTitle(aTitle); - } - return NS_ERROR_NULL_POINTER; -} - -//***************************************************************************** -// nsDocShellTreeOwner::nsIWebProgressListener -//***************************************************************************** - -NS_IMETHODIMP -nsDocShellTreeOwner::OnProgressChange(nsIWebProgress* aProgress, - nsIRequest* aRequest, - int32_t aCurSelfProgress, - int32_t aMaxSelfProgress, - int32_t aCurTotalProgress, - int32_t aMaxTotalProgress) -{ - // In the absence of DOM document creation event, this method is the - // most convenient place to install the mouse listener on the - // DOM document. - return AddChromeListeners(); -} - -NS_IMETHODIMP -nsDocShellTreeOwner::OnStateChange(nsIWebProgress* aProgress, - nsIRequest* aRequest, - uint32_t aProgressStateFlags, - nsresult aStatus) -{ - return NS_OK; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::OnLocationChange(nsIWebProgress* aWebProgress, - nsIRequest* aRequest, - nsIURI* aURI, - uint32_t aFlags) -{ - return NS_OK; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::OnStatusChange(nsIWebProgress* aWebProgress, - nsIRequest* aRequest, - nsresult aStatus, - const char16_t* aMessage) -{ - return NS_OK; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::OnSecurityChange(nsIWebProgress* aWebProgress, - nsIRequest* aRequest, - uint32_t aState) -{ - return NS_OK; -} - -//***************************************************************************** -// nsDocShellTreeOwner: Accessors -//***************************************************************************** - -void -nsDocShellTreeOwner::WebBrowser(nsWebBrowser* aWebBrowser) -{ - if (!aWebBrowser) { - RemoveChromeListeners(); - } - if (aWebBrowser != mWebBrowser) { - mPrompter = nullptr; - mAuthPrompter = nullptr; - } - - mWebBrowser = aWebBrowser; - - if (mContentTreeOwner) { - mContentTreeOwner->WebBrowser(aWebBrowser); - if (!aWebBrowser) { - mContentTreeOwner = nullptr; - } - } -} - -nsWebBrowser* -nsDocShellTreeOwner::WebBrowser() -{ - return mWebBrowser; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::SetTreeOwner(nsIDocShellTreeOwner* aTreeOwner) -{ - if (aTreeOwner) { - nsCOMPtr webBrowserChrome(do_GetInterface(aTreeOwner)); - NS_ENSURE_TRUE(webBrowserChrome, NS_ERROR_INVALID_ARG); - NS_ENSURE_SUCCESS(SetWebBrowserChrome(webBrowserChrome), - NS_ERROR_INVALID_ARG); - mTreeOwner = aTreeOwner; - } else { - mTreeOwner = nullptr; - nsCOMPtr webBrowserChrome = GetWebBrowserChrome(); - if (!webBrowserChrome) { - NS_ENSURE_SUCCESS(SetWebBrowserChrome(nullptr), NS_ERROR_FAILURE); - } - } - - return NS_OK; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::SetWebBrowserChrome(nsIWebBrowserChrome* aWebBrowserChrome) -{ - if (!aWebBrowserChrome) { - mWebBrowserChrome = nullptr; - mOwnerWin = nullptr; - mOwnerRequestor = nullptr; - mWebBrowserChromeWeak = nullptr; - } else { - nsCOMPtr supportsweak = - do_QueryInterface(aWebBrowserChrome); - if (supportsweak) { - supportsweak->GetWeakReference(getter_AddRefs(mWebBrowserChromeWeak)); - } else { - nsCOMPtr ownerWin( - do_QueryInterface(aWebBrowserChrome)); - nsCOMPtr requestor( - do_QueryInterface(aWebBrowserChrome)); - - // it's ok for ownerWin or requestor to be null. - mWebBrowserChrome = aWebBrowserChrome; - mOwnerWin = ownerWin; - mOwnerRequestor = requestor; - } - } - - if (mContentTreeOwner) { - mContentTreeOwner->SetWebBrowserChrome(aWebBrowserChrome); - } - - return NS_OK; -} - -// Hook up things to the chrome like context menus and tooltips, if the chrome -// has implemented the right interfaces. -NS_IMETHODIMP -nsDocShellTreeOwner::AddChromeListeners() -{ - nsresult rv = NS_OK; - - nsCOMPtr webBrowserChrome = GetWebBrowserChrome(); - if (!webBrowserChrome) { - return NS_ERROR_FAILURE; - } - - // install tooltips - if (!mChromeTooltipListener) { - nsCOMPtr tooltipListener( - do_QueryInterface(webBrowserChrome)); - if (tooltipListener) { - mChromeTooltipListener = new ChromeTooltipListener(mWebBrowser, - webBrowserChrome); - rv = mChromeTooltipListener->AddChromeListeners(); - } - } - - // install context menus - if (!mChromeContextMenuListener) { - nsCOMPtr contextListener2( - do_QueryInterface(webBrowserChrome)); - nsCOMPtr contextListener( - do_QueryInterface(webBrowserChrome)); - if (contextListener2 || contextListener) { - mChromeContextMenuListener = - new ChromeContextMenuListener(mWebBrowser, webBrowserChrome); - rv = mChromeContextMenuListener->AddChromeListeners(); - } - } - - // register dragover and drop event listeners with the listener manager - nsCOMPtr target; - GetDOMEventTarget(mWebBrowser, getter_AddRefs(target)); - - EventListenerManager* elmP = target->GetOrCreateListenerManager(); - if (elmP) { - elmP->AddEventListenerByType(this, NS_LITERAL_STRING("dragover"), - TrustedEventsAtSystemGroupBubble()); - elmP->AddEventListenerByType(this, NS_LITERAL_STRING("drop"), - TrustedEventsAtSystemGroupBubble()); - } - - return rv; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::RemoveChromeListeners() -{ - if (mChromeTooltipListener) { - mChromeTooltipListener->RemoveChromeListeners(); - mChromeTooltipListener = nullptr; - } - if (mChromeContextMenuListener) { - mChromeContextMenuListener->RemoveChromeListeners(); - mChromeContextMenuListener = nullptr; - } - - nsCOMPtr piTarget; - GetDOMEventTarget(mWebBrowser, getter_AddRefs(piTarget)); - if (!piTarget) { - return NS_OK; - } - - EventListenerManager* elmP = piTarget->GetOrCreateListenerManager(); - if (elmP) { - elmP->RemoveEventListenerByType(this, NS_LITERAL_STRING("dragover"), - TrustedEventsAtSystemGroupBubble()); - elmP->RemoveEventListenerByType(this, NS_LITERAL_STRING("drop"), - TrustedEventsAtSystemGroupBubble()); - } - - return NS_OK; -} - -NS_IMETHODIMP -nsDocShellTreeOwner::HandleEvent(nsIDOMEvent* aEvent) -{ - nsCOMPtr dragEvent = do_QueryInterface(aEvent); - NS_ENSURE_TRUE(dragEvent, NS_ERROR_INVALID_ARG); - - bool defaultPrevented; - aEvent->GetDefaultPrevented(&defaultPrevented); - if (defaultPrevented) { - return NS_OK; - } - - nsCOMPtr handler = - do_GetService("@mozilla.org/content/dropped-link-handler;1"); - if (handler) { - nsAutoString eventType; - aEvent->GetType(eventType); - if (eventType.EqualsLiteral("dragover")) { - bool canDropLink = false; - handler->CanDropLink(dragEvent, false, &canDropLink); - if (canDropLink) { - aEvent->PreventDefault(); - } - } else if (eventType.EqualsLiteral("drop")) { - nsIWebNavigation* webnav = static_cast(mWebBrowser); - - uint32_t linksCount; - nsIDroppedLinkItem** links; - if (webnav && - NS_SUCCEEDED(handler->DropLinks(dragEvent, true, &linksCount, &links))) { - if (linksCount >= 1) { - nsCOMPtr webBrowserChrome = GetWebBrowserChrome(); - if (webBrowserChrome) { - nsCOMPtr tabChild = do_QueryInterface(webBrowserChrome); - if (tabChild) { - nsresult rv = tabChild->RemoteDropLinks(linksCount, links); - for (uint32_t i = 0; i < linksCount; i++) { - NS_RELEASE(links[i]); - } - free(links); - return rv; - } - } - nsAutoString url; - if (NS_SUCCEEDED(links[0]->GetUrl(url))) { - if (!url.IsEmpty()) { - webnav->LoadURI(url.get(), 0, nullptr, nullptr, nullptr); - } - } - - for (uint32_t i = 0; i < linksCount; i++) { - NS_RELEASE(links[i]); - } - free(links); - } - } else { - aEvent->StopPropagation(); - aEvent->PreventDefault(); - } - } - } - - return NS_OK; -} - -already_AddRefed -nsDocShellTreeOwner::GetWebBrowserChrome() -{ - nsCOMPtr chrome; - if (mWebBrowserChromeWeak) { - chrome = do_QueryReferent(mWebBrowserChromeWeak); - } else if (mWebBrowserChrome) { - chrome = mWebBrowserChrome; - } - return chrome.forget(); -} - -already_AddRefed -nsDocShellTreeOwner::GetOwnerWin() -{ - nsCOMPtr win; - if (mWebBrowserChromeWeak) { - win = do_QueryReferent(mWebBrowserChromeWeak); - } else if (mOwnerWin) { - win = mOwnerWin; - } - return win.forget(); -} - -already_AddRefed -nsDocShellTreeOwner::GetOwnerRequestor() -{ - nsCOMPtr req; - if (mWebBrowserChromeWeak) { - req = do_QueryReferent(mWebBrowserChromeWeak); - } else if (mOwnerRequestor) { - req = mOwnerRequestor; - } - return req.forget(); -} - -NS_IMPL_ISUPPORTS(ChromeTooltipListener, nsIDOMEventListener) - -ChromeTooltipListener::ChromeTooltipListener(nsWebBrowser* aInBrowser, - nsIWebBrowserChrome* aInChrome) - : mWebBrowser(aInBrowser) - , mWebBrowserChrome(aInChrome) - , mTooltipListenerInstalled(false) - , mMouseClientX(0) - , mMouseClientY(0) - , mMouseScreenX(0) - , mMouseScreenY(0) - , mShowingTooltip(false) - , mTooltipShownOnce(false) -{ - mTooltipTextProvider = do_GetService(NS_TOOLTIPTEXTPROVIDER_CONTRACTID); - if (!mTooltipTextProvider) { - mTooltipTextProvider = do_GetService(NS_DEFAULTTOOLTIPTEXTPROVIDER_CONTRACTID); - } -} - -ChromeTooltipListener::~ChromeTooltipListener() -{ -} - -// Hook up things to the chrome like context menus and tooltips, if the chrome -// has implemented the right interfaces. -NS_IMETHODIMP -ChromeTooltipListener::AddChromeListeners() -{ - if (!mEventTarget) { - GetDOMEventTarget(mWebBrowser, getter_AddRefs(mEventTarget)); - } - - // Register the appropriate events for tooltips, but only if - // the embedding chrome cares. - nsresult rv = NS_OK; - nsCOMPtr tooltipListener( - do_QueryInterface(mWebBrowserChrome)); - if (tooltipListener && !mTooltipListenerInstalled) { - rv = AddTooltipListener(); - if (NS_FAILED(rv)) { - return rv; - } - } - - return rv; -} - -// Subscribe to the events that will allow us to track tooltips. We need "mouse" -// for mouseExit, "mouse motion" for mouseMove, and "key" for keyDown. As we -// add the listeners, keep track of how many succeed so we can clean up -// correctly in Release(). -NS_IMETHODIMP -ChromeTooltipListener::AddTooltipListener() -{ - if (mEventTarget) { - nsresult rv = NS_OK; - rv = mEventTarget->AddSystemEventListener(NS_LITERAL_STRING("keydown"), - this, false, false); - NS_ENSURE_SUCCESS(rv, rv); - rv = mEventTarget->AddSystemEventListener(NS_LITERAL_STRING("mousedown"), - this, false, false); - NS_ENSURE_SUCCESS(rv, rv); - rv = mEventTarget->AddSystemEventListener(NS_LITERAL_STRING("mouseout"), - this, false, false); - NS_ENSURE_SUCCESS(rv, rv); - rv = mEventTarget->AddSystemEventListener(NS_LITERAL_STRING("mousemove"), - this, false, false); - NS_ENSURE_SUCCESS(rv, rv); - - mTooltipListenerInstalled = true; - } - - return NS_OK; -} - -// Unsubscribe from the various things we've hooked up to the window root. -NS_IMETHODIMP -ChromeTooltipListener::RemoveChromeListeners() -{ - HideTooltip(); - - if (mTooltipListenerInstalled) { - RemoveTooltipListener(); - } - - mEventTarget = nullptr; - - // it really doesn't matter if these fail... - return NS_OK; -} - -// Unsubscribe from all the various tooltip events that we were listening to. -NS_IMETHODIMP -ChromeTooltipListener::RemoveTooltipListener() -{ - if (mEventTarget) { - nsresult rv = NS_OK; - rv = mEventTarget->RemoveSystemEventListener(NS_LITERAL_STRING("keydown"), - this, false); - NS_ENSURE_SUCCESS(rv, rv); - rv = mEventTarget->RemoveSystemEventListener(NS_LITERAL_STRING("mousedown"), - this, false); - NS_ENSURE_SUCCESS(rv, rv); - rv = mEventTarget->RemoveSystemEventListener(NS_LITERAL_STRING("mouseout"), - this, false); - NS_ENSURE_SUCCESS(rv, rv); - rv = mEventTarget->RemoveSystemEventListener(NS_LITERAL_STRING("mousemove"), - this, false); - NS_ENSURE_SUCCESS(rv, rv); - - mTooltipListenerInstalled = false; - } - - return NS_OK; -} - -NS_IMETHODIMP -ChromeTooltipListener::HandleEvent(nsIDOMEvent* aEvent) -{ - nsAutoString eventType; - aEvent->GetType(eventType); - - if (eventType.EqualsLiteral("keydown") || - eventType.EqualsLiteral("mousedown")) { - return HideTooltip(); - } else if (eventType.EqualsLiteral("mouseout")) { - // Reset flag so that tooltip will display on the next MouseMove - mTooltipShownOnce = false; - return HideTooltip(); - } else if (eventType.EqualsLiteral("mousemove")) { - return MouseMove(aEvent); - } - - NS_ERROR("Unexpected event type"); - return NS_OK; -} - -// If we're a tooltip, fire off a timer to see if a tooltip should be shown. If -// the timer fires, we cache the node in |mPossibleTooltipNode|. -nsresult -ChromeTooltipListener::MouseMove(nsIDOMEvent* aMouseEvent) -{ - nsCOMPtr mouseEvent(do_QueryInterface(aMouseEvent)); - if (!mouseEvent) { - return NS_OK; - } - - // stash the coordinates of the event so that we can still get back to it from - // within the timer callback. On win32, we'll get a MouseMove event even when - // a popup goes away -- even when the mouse doesn't change position! To get - // around this, we make sure the mouse has really moved before proceeding. - int32_t newMouseX, newMouseY; - mouseEvent->GetClientX(&newMouseX); - mouseEvent->GetClientY(&newMouseY); - if (mMouseClientX == newMouseX && mMouseClientY == newMouseY) { - return NS_OK; - } - - // Filter out minor mouse movements. - if (mShowingTooltip && - (abs(mMouseClientX - newMouseX) <= kTooltipMouseMoveTolerance) && - (abs(mMouseClientY - newMouseY) <= kTooltipMouseMoveTolerance)) { - return NS_OK; - } - - mMouseClientX = newMouseX; - mMouseClientY = newMouseY; - mouseEvent->GetScreenX(&mMouseScreenX); - mouseEvent->GetScreenY(&mMouseScreenY); - - if (mTooltipTimer) { - mTooltipTimer->Cancel(); - } - - if (!mShowingTooltip && !mTooltipShownOnce) { - mTooltipTimer = do_CreateInstance("@mozilla.org/timer;1"); - if (mTooltipTimer) { - nsCOMPtr eventTarget = - aMouseEvent->InternalDOMEvent()->GetTarget(); - if (eventTarget) { - mPossibleTooltipNode = do_QueryInterface(eventTarget); - } - if (mPossibleTooltipNode) { - nsresult rv = mTooltipTimer->InitWithFuncCallback( - sTooltipCallback, this, - LookAndFeel::GetInt(LookAndFeel::eIntID_TooltipDelay, 500), - nsITimer::TYPE_ONE_SHOT); - if (NS_FAILED(rv)) { - mPossibleTooltipNode = nullptr; - } - } - } else { - NS_WARNING("Could not create a timer for tooltip tracking"); - } - } else { - mTooltipShownOnce = true; - return HideTooltip(); - } - - return NS_OK; -} - -// Tell the registered chrome that they should show the tooltip. -NS_IMETHODIMP -ChromeTooltipListener::ShowTooltip(int32_t aInXCoords, int32_t aInYCoords, - const nsAString& aInTipText, - const nsAString& aTipDir) -{ - nsresult rv = NS_OK; - - // do the work to call the client - nsCOMPtr tooltipListener( - do_QueryInterface(mWebBrowserChrome)); - if (tooltipListener) { - rv = tooltipListener->OnShowTooltip(aInXCoords, aInYCoords, - PromiseFlatString(aInTipText).get(), - PromiseFlatString(aTipDir).get()); - if (NS_SUCCEEDED(rv)) { - mShowingTooltip = true; - } - } - - return rv; -} - -// Tell the registered chrome that they should rollup the tooltip -// NOTE: This routine is safe to call even if the popup is already closed. -NS_IMETHODIMP -ChromeTooltipListener::HideTooltip() -{ - nsresult rv = NS_OK; - - // shut down the relevant timers - if (mTooltipTimer) { - mTooltipTimer->Cancel(); - mTooltipTimer = nullptr; - // release tooltip target - mPossibleTooltipNode = nullptr; - } - - // if we're showing the tip, tell the chrome to hide it - if (mShowingTooltip) { - nsCOMPtr tooltipListener( - do_QueryInterface(mWebBrowserChrome)); - if (tooltipListener) { - rv = tooltipListener->OnHideTooltip(); - if (NS_SUCCEEDED(rv)) { - mShowingTooltip = false; - } - } - } - - return rv; -} - -// A timer callback, fired when the mouse has hovered inside of a frame for the -// appropriate amount of time. Getting to this point means that we should show -// the tooltip, but only after we determine there is an appropriate TITLE -// element. -// -// This relies on certain things being cached into the |aChromeTooltipListener| -// object passed to us by the timer: -// -- the x/y coordinates of the mouse (mMouseClientY, mMouseClientX) -// -- the dom node the user hovered over (mPossibleTooltipNode) -void -ChromeTooltipListener::sTooltipCallback(nsITimer* aTimer, - void* aChromeTooltipListener) -{ - auto self = static_cast(aChromeTooltipListener); - if (self && self->mPossibleTooltipNode) { - // The actual coordinates we want to put the tooltip at are relative to the - // toplevel docshell of our mWebBrowser. We know what the screen - // coordinates of the mouse event were, which means we just need the screen - // coordinates of the docshell. Unfortunately, there is no good way to - // find those short of groveling for the presentation in that docshell and - // finding the screen coords of its toplevel widget... - nsCOMPtr docShell = - do_GetInterface(static_cast(self->mWebBrowser)); - nsCOMPtr shell; - if (docShell) { - shell = docShell->GetPresShell(); - } - - nsIWidget* widget = nullptr; - if (shell) { - nsViewManager* vm = shell->GetViewManager(); - if (vm) { - nsView* view = vm->GetRootView(); - if (view) { - nsPoint offset; - widget = view->GetNearestWidget(&offset); - } - } - } - - if (!widget) { - // release tooltip target if there is one, NO MATTER WHAT - self->mPossibleTooltipNode = nullptr; - return; - } - - // if there is text associated with the node, show the tip and fire - // off a timer to auto-hide it. - - nsXPIDLString tooltipText; - nsXPIDLString directionText; - if (self->mTooltipTextProvider) { - bool textFound = false; - - self->mTooltipTextProvider->GetNodeText( - self->mPossibleTooltipNode, getter_Copies(tooltipText), - getter_Copies(directionText), &textFound); - - if (textFound) { - nsString tipText(tooltipText); - nsString dirText(directionText); - LayoutDeviceIntPoint screenDot = widget->WidgetToScreenOffset(); - double scaleFactor = 1.0; - if (shell->GetPresContext()) { - nsDeviceContext* dc = shell->GetPresContext()->DeviceContext(); - scaleFactor = double(nsPresContext::AppUnitsPerCSSPixel()) / - dc->AppUnitsPerDevPixelAtUnitFullZoom(); - } - // ShowTooltip expects widget-relative position. - self->ShowTooltip(self->mMouseScreenX - screenDot.x / scaleFactor, - self->mMouseScreenY - screenDot.y / scaleFactor, - tipText, dirText); - } - } - - // release tooltip target if there is one, NO MATTER WHAT - self->mPossibleTooltipNode = nullptr; - } -} - -NS_IMPL_ISUPPORTS(ChromeContextMenuListener, nsIDOMEventListener) - -ChromeContextMenuListener::ChromeContextMenuListener( - nsWebBrowser* aInBrowser, - nsIWebBrowserChrome* aInChrome) - : mContextMenuListenerInstalled(false) - , mWebBrowser(aInBrowser) - , mWebBrowserChrome(aInChrome) -{ -} - -ChromeContextMenuListener::~ChromeContextMenuListener() -{ -} - -// Subscribe to the events that will allow us to track context menus. Bascially, -// this is just the context-menu DOM event. -NS_IMETHODIMP -ChromeContextMenuListener::AddContextMenuListener() -{ - if (mEventTarget) { - nsresult rv = mEventTarget->AddEventListener( - NS_LITERAL_STRING("contextmenu"), this, false, false); - NS_ENSURE_SUCCESS(rv, rv); - - mContextMenuListenerInstalled = true; - } - - return NS_OK; -} - -// Unsubscribe from all the various context menu events that we were listening -// to. -NS_IMETHODIMP -ChromeContextMenuListener::RemoveContextMenuListener() -{ - if (mEventTarget) { - nsresult rv = mEventTarget->RemoveEventListener( - NS_LITERAL_STRING("contextmenu"), this, false); - NS_ENSURE_SUCCESS(rv, rv); - - mContextMenuListenerInstalled = false; - } - - return NS_OK; -} - -// Hook up things to the chrome like context menus and tooltips, if the chrome -// has implemented the right interfaces. -NS_IMETHODIMP -ChromeContextMenuListener::AddChromeListeners() -{ - if (!mEventTarget) { - GetDOMEventTarget(mWebBrowser, getter_AddRefs(mEventTarget)); - } - - // Register the appropriate events for context menus, but only if - // the embedding chrome cares. - nsresult rv = NS_OK; - - nsCOMPtr contextListener2( - do_QueryInterface(mWebBrowserChrome)); - nsCOMPtr contextListener( - do_QueryInterface(mWebBrowserChrome)); - if ((contextListener || contextListener2) && !mContextMenuListenerInstalled) { - rv = AddContextMenuListener(); - } - - return rv; -} - -// Unsubscribe from the various things we've hooked up to the window root. -NS_IMETHODIMP -ChromeContextMenuListener::RemoveChromeListeners() -{ - if (mContextMenuListenerInstalled) { - RemoveContextMenuListener(); - } - - mEventTarget = nullptr; - - // it really doesn't matter if these fail... - return NS_OK; -} - -// We're on call to show the context menu. Dig around in the DOM to find the -// type of object we're dealing with and notify the front end chrome. -NS_IMETHODIMP -ChromeContextMenuListener::HandleEvent(nsIDOMEvent* aMouseEvent) -{ - nsCOMPtr mouseEvent = do_QueryInterface(aMouseEvent); - NS_ENSURE_TRUE(mouseEvent, NS_ERROR_UNEXPECTED); - - bool isDefaultPrevented = false; - aMouseEvent->GetDefaultPrevented(&isDefaultPrevented); - if (isDefaultPrevented) { - return NS_OK; - } - - nsCOMPtr targetNode = - aMouseEvent->InternalDOMEvent()->GetTarget(); - if (!targetNode) { - return NS_ERROR_NULL_POINTER; - } - - nsCOMPtr targetDOMnode; - nsCOMPtr node = do_QueryInterface(targetNode); - if (!node) { - return NS_OK; - } - - // Stop the context menu event going to other windows (bug 78396) - aMouseEvent->PreventDefault(); - - // If the listener is a nsIContextMenuListener2, create the info object - nsCOMPtr menuListener2( - do_QueryInterface(mWebBrowserChrome)); - nsContextMenuInfo* menuInfoImpl = nullptr; - nsCOMPtr menuInfo; - if (menuListener2) { - menuInfoImpl = new nsContextMenuInfo; - menuInfo = menuInfoImpl; - } - - uint32_t flags = nsIContextMenuListener::CONTEXT_NONE; - uint32_t flags2 = nsIContextMenuListener2::CONTEXT_NONE; - - // XXX test for selected text - - uint16_t nodeType; - nsresult res = node->GetNodeType(&nodeType); - NS_ENSURE_SUCCESS(res, res); - - // First, checks for nodes that never have children. - if (nodeType == nsIDOMNode::ELEMENT_NODE) { - nsCOMPtr content(do_QueryInterface(node)); - if (content) { - nsCOMPtr imgUri; - content->GetCurrentURI(getter_AddRefs(imgUri)); - if (imgUri) { - flags |= nsIContextMenuListener::CONTEXT_IMAGE; - flags2 |= nsIContextMenuListener2::CONTEXT_IMAGE; - targetDOMnode = node; - } - } - - nsCOMPtr formControl(do_QueryInterface(node)); - if (formControl) { - if (formControl->GetType() == NS_FORM_TEXTAREA) { - flags |= nsIContextMenuListener::CONTEXT_TEXT; - flags2 |= nsIContextMenuListener2::CONTEXT_TEXT; - targetDOMnode = node; - } else { - nsCOMPtr inputElement( - do_QueryInterface(formControl)); - if (inputElement) { - flags |= nsIContextMenuListener::CONTEXT_INPUT; - flags2 |= nsIContextMenuListener2::CONTEXT_INPUT; - - if (menuListener2) { - if (formControl->IsSingleLineTextControl(false)) { - flags2 |= nsIContextMenuListener2::CONTEXT_TEXT; - } - } - - targetDOMnode = node; - } - } - } - - // always consume events for plugins and Java who may throw their - // own context menus but not for image objects. Document objects - // will never be targets or ancestors of targets, so that's OK. - nsCOMPtr objectElement; - if (!(flags & nsIContextMenuListener::CONTEXT_IMAGE)) { - objectElement = do_QueryInterface(node); - } - nsCOMPtr embedElement(do_QueryInterface(node)); - nsCOMPtr appletElement(do_QueryInterface(node)); - - if (objectElement || embedElement || appletElement) { - return NS_OK; - } - } - - // Bubble out, looking for items of interest - do { - uint16_t nodeType; - res = node->GetNodeType(&nodeType); - NS_ENSURE_SUCCESS(res, res); - - if (nodeType == nsIDOMNode::ELEMENT_NODE) { - - // Test if the element has an associated link - nsCOMPtr element(do_QueryInterface(node)); - - bool hasAttr = false; - res = element->HasAttribute(NS_LITERAL_STRING("href"), &hasAttr); - - if (NS_SUCCEEDED(res) && hasAttr) { - flags |= nsIContextMenuListener::CONTEXT_LINK; - flags2 |= nsIContextMenuListener2::CONTEXT_LINK; - if (!targetDOMnode) { - targetDOMnode = node; - } - if (menuInfoImpl) { - menuInfoImpl->SetAssociatedLink(node); - } - break; // exit do-while - } - } - - // walk-up-the-tree - nsCOMPtr parentNode; - node->GetParentNode(getter_AddRefs(parentNode)); - node = parentNode; - } while (node); - - if (!flags && !flags2) { - // We found nothing of interest so far, check if we - // have at least an html document. - nsCOMPtr document; - node = do_QueryInterface(targetNode); - node->GetOwnerDocument(getter_AddRefs(document)); - nsCOMPtr htmlDocument(do_QueryInterface(document)); - if (htmlDocument) { - flags |= nsIContextMenuListener::CONTEXT_DOCUMENT; - flags2 |= nsIContextMenuListener2::CONTEXT_DOCUMENT; - targetDOMnode = node; - if (!(flags & nsIContextMenuListener::CONTEXT_IMAGE)) { - // check if this is a background image that the user was trying to click - // on and if the listener is ready for that (only - // nsIContextMenuListener2 and up) - if (menuInfoImpl && menuInfoImpl->HasBackgroundImage(targetDOMnode)) { - flags2 |= nsIContextMenuListener2::CONTEXT_BACKGROUND_IMAGE; - // For the embedder to get the correct background image - // targetDOMnode must point to the original node. - targetDOMnode = do_QueryInterface(targetNode); - } - } - } - } - - // we need to cache the event target into the focus controller's popupNode - // so we can get at it later from command code, etc.: - - // get the dom window - nsCOMPtr win; - res = mWebBrowser->GetContentDOMWindow(getter_AddRefs(win)); - NS_ENSURE_SUCCESS(res, res); - NS_ENSURE_TRUE(win, NS_ERROR_FAILURE); - - auto* window = nsPIDOMWindowOuter::From(win); - nsCOMPtr root = window->GetTopWindowRoot(); - NS_ENSURE_TRUE(root, NS_ERROR_FAILURE); - if (root) { - // set the window root's popup node to the event target - root->SetPopupNode(targetDOMnode); - } - - // Tell the listener all about the event - if (menuListener2) { - menuInfoImpl->SetMouseEvent(aMouseEvent); - menuInfoImpl->SetDOMNode(targetDOMnode); - menuListener2->OnShowContextMenu(flags2, menuInfo); - } else { - nsCOMPtr menuListener( - do_QueryInterface(mWebBrowserChrome)); - if (menuListener) { - menuListener->OnShowContextMenu(flags, aMouseEvent, targetDOMnode); - } - } - - return NS_OK; -} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsDocShellTreeOwner.h firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsDocShellTreeOwner.h --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsDocShellTreeOwner.h 2017-01-13 01:55:31.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsDocShellTreeOwner.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,246 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* 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/. */ - -#ifndef nsDocShellTreeOwner_h__ -#define nsDocShellTreeOwner_h__ - -// Helper Classes -#include "nsCOMPtr.h" -#include "nsString.h" - -// Interfaces Needed -#include "nsIBaseWindow.h" -#include "nsIDocShellTreeOwner.h" -#include "nsIInterfaceRequestor.h" -#include "nsIInterfaceRequestorUtils.h" -#include "nsIWebBrowserChrome.h" -#include "nsIDOMEventListener.h" -#include "nsIEmbeddingSiteWindow.h" -#include "nsIWebProgressListener.h" -#include "nsWeakReference.h" -#include "nsITimer.h" -#include "nsIPrompt.h" -#include "nsIAuthPrompt.h" -#include "nsITooltipListener.h" -#include "nsITooltipTextProvider.h" -#include "nsCTooltipTextProvider.h" -#include "nsIDroppedLinkHandler.h" -#include "nsCommandHandler.h" - -namespace mozilla { -namespace dom { -class EventTarget; -} // namespace dom -} // namespace mozilla - -class nsWebBrowser; -class ChromeTooltipListener; -class ChromeContextMenuListener; - -// {6D10C180-6888-11d4-952B-0020183BF181} -#define NS_ICDOCSHELLTREEOWNER_IID \ - { 0x6d10c180, 0x6888, 0x11d4, { 0x95, 0x2b, 0x0, 0x20, 0x18, 0x3b, 0xf1, 0x81 } } - -// This is a fake 'hidden' interface that nsDocShellTreeOwner implements. -// Classes such as nsCommandHandler can QI for this interface to be sure that -// they're dealing with a valid nsDocShellTreeOwner and not some other object -// that implements nsIDocShellTreeOwner. -class nsICDocShellTreeOwner : public nsISupports -{ -public: - NS_DECLARE_STATIC_IID_ACCESSOR(NS_ICDOCSHELLTREEOWNER_IID) -}; - -NS_DEFINE_STATIC_IID_ACCESSOR(nsICDocShellTreeOwner, NS_ICDOCSHELLTREEOWNER_IID) - -class nsDocShellTreeOwner final : public nsIDocShellTreeOwner, - public nsIBaseWindow, - public nsIInterfaceRequestor, - public nsIWebProgressListener, - public nsIDOMEventListener, - public nsICDocShellTreeOwner, - public nsSupportsWeakReference -{ - friend class nsWebBrowser; - friend class nsCommandHandler; - -public: - NS_DECL_ISUPPORTS - - NS_DECL_NSIBASEWINDOW - NS_DECL_NSIDOCSHELLTREEOWNER - NS_DECL_NSIDOMEVENTLISTENER - NS_DECL_NSIINTERFACEREQUESTOR - NS_DECL_NSIWEBPROGRESSLISTENER - -protected: - nsDocShellTreeOwner(); - virtual ~nsDocShellTreeOwner(); - - void WebBrowser(nsWebBrowser* aWebBrowser); - - nsWebBrowser* WebBrowser(); - NS_IMETHOD SetTreeOwner(nsIDocShellTreeOwner* aTreeOwner); - NS_IMETHOD SetWebBrowserChrome(nsIWebBrowserChrome* aWebBrowserChrome); - - NS_IMETHOD AddChromeListeners(); - NS_IMETHOD RemoveChromeListeners(); - - nsresult FindItemWithNameAcrossWindows( - const char16_t* aName, - nsIDocShellTreeItem* aRequestor, nsIDocShellTreeItem* aOriginalRequestor, - nsIDocShellTreeItem** aFoundItem); - - void EnsurePrompter(); - void EnsureAuthPrompter(); - - void AddToWatcher(); - void RemoveFromWatcher(); - - void EnsureContentTreeOwner(); - - // These helper functions return the correct instances of the requested - // interfaces. If the object passed to SetWebBrowserChrome() implements - // nsISupportsWeakReference, then these functions call QueryReferent on - // that object. Otherwise, they return an addrefed pointer. If the - // WebBrowserChrome object doesn't exist, they return nullptr. - already_AddRefed GetWebBrowserChrome(); - already_AddRefed GetOwnerWin(); - already_AddRefed GetOwnerRequestor(); - -protected: - // Weak References - nsWebBrowser* mWebBrowser; - nsIDocShellTreeOwner* mTreeOwner; - nsIDocShellTreeItem* mPrimaryContentShell; - - nsIWebBrowserChrome* mWebBrowserChrome; - nsIEmbeddingSiteWindow* mOwnerWin; - nsIInterfaceRequestor* mOwnerRequestor; - - nsWeakPtr mWebBrowserChromeWeak; // nsIWebBrowserChrome - - // the objects that listen for chrome events like context menus and tooltips. - // They are separate objects to avoid circular references between |this| - // and the DOM. - RefPtr mChromeTooltipListener; - RefPtr mChromeContextMenuListener; - - RefPtr mContentTreeOwner; - - nsCOMPtr mPrompter; - nsCOMPtr mAuthPrompter; - nsCOMPtr mPrimaryTabParent; -}; - - -// The class that listens to the chrome events and tells the embedding chrome to -// show tooltips, as appropriate. Handles registering itself with the DOM with -// AddChromeListeners() and removing itself with RemoveChromeListeners(). -class ChromeTooltipListener final : public nsIDOMEventListener -{ -protected: - virtual ~ChromeTooltipListener(); - -public: - NS_DECL_ISUPPORTS - - ChromeTooltipListener(nsWebBrowser* aInBrowser, nsIWebBrowserChrome* aInChrome); - - NS_IMETHOD HandleEvent(nsIDOMEvent* aEvent) override; - NS_IMETHOD MouseMove(nsIDOMEvent* aMouseEvent); - - // Add/remove the relevant listeners, based on what interfaces the embedding - // chrome implements. - NS_IMETHOD AddChromeListeners(); - NS_IMETHOD RemoveChromeListeners(); - -private: - // various delays for tooltips - enum - { - kTooltipAutoHideTime = 5000, // ms - kTooltipMouseMoveTolerance = 7 // pixel tolerance for mousemove event - }; - - NS_IMETHOD AddTooltipListener(); - NS_IMETHOD RemoveTooltipListener(); - - NS_IMETHOD ShowTooltip(int32_t aInXCoords, int32_t aInYCoords, - const nsAString& aInTipText, - const nsAString& aDirText); - NS_IMETHOD HideTooltip(); - - nsWebBrowser* mWebBrowser; - nsCOMPtr mEventTarget; - nsCOMPtr mTooltipTextProvider; - - // This must be a strong ref in order to make sure we can hide the tooltip if - // the window goes away while we're displaying one. If we don't hold a strong - // ref, the chrome might have been disposed of before we get a chance to tell - // it, and no one would ever tell us of that fact. - nsCOMPtr mWebBrowserChrome; - - bool mTooltipListenerInstalled; - - nsCOMPtr mTooltipTimer; - static void sTooltipCallback(nsITimer* aTimer, void* aListener); - - // Mouse coordinates for last mousemove event we saw - int32_t mMouseClientX; - int32_t mMouseClientY; - - // Mouse coordinates for tooltip event - int32_t mMouseScreenX; - int32_t mMouseScreenY; - - bool mShowingTooltip; - bool mTooltipShownOnce; - - // The node hovered over that fired the timer. This may turn into the node - // that triggered the tooltip, but only if the timer ever gets around to - // firing. This is a strong reference, because the tooltip content can be - // destroyed while we're waiting for the tooltip to pup up, and we need to - // detect that. It's set only when the tooltip timer is created and launched. - // The timer must either fire or be cancelled (or possibly released?), and we - // release this reference in each of those cases. So we don't leak. - nsCOMPtr mPossibleTooltipNode; -}; - -// The class that listens to the chrome events and tells the embedding chrome to -// show context menus, as appropriate. Handles registering itself with the DOM -// with AddChromeListeners() and removing itself with RemoveChromeListeners(). -class ChromeContextMenuListener : public nsIDOMEventListener -{ -protected: - virtual ~ChromeContextMenuListener(); - -public: - NS_DECL_ISUPPORTS - - ChromeContextMenuListener(nsWebBrowser* aInBrowser, - nsIWebBrowserChrome* aInChrome); - - // nsIDOMContextMenuListener - NS_IMETHOD HandleEvent(nsIDOMEvent* aEvent) override; - - // Add/remove the relevant listeners, based on what interfaces - // the embedding chrome implements. - NS_IMETHOD AddChromeListeners(); - NS_IMETHOD RemoveChromeListeners(); - -private: - NS_IMETHOD AddContextMenuListener(); - NS_IMETHOD RemoveContextMenuListener(); - - bool mContextMenuListenerInstalled; - - nsWebBrowser* mWebBrowser; - nsCOMPtr mEventTarget; - nsCOMPtr mWebBrowserChrome; -}; - -#endif /* nsDocShellTreeOwner_h__ */ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsEmbedStream.cpp firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsEmbedStream.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsEmbedStream.cpp 2017-01-13 01:55:32.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsEmbedStream.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,101 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* 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 "nsIAsyncInputStream.h" -#include "nsIAsyncOutputStream.h" -#include "nsIDocShell.h" -#include "nsIInterfaceRequestorUtils.h" -#include "nsIPipe.h" - -#include "nsEmbedStream.h" -#include "nsError.h" -#include "nsString.h" - -NS_IMPL_ISUPPORTS0(nsEmbedStream) - -nsEmbedStream::nsEmbedStream() -{ - mOwner = nullptr; -} - -nsEmbedStream::~nsEmbedStream() -{ -} - -void -nsEmbedStream::InitOwner(nsIWebBrowser* aOwner) -{ - mOwner = aOwner; -} - -nsresult -nsEmbedStream::Init(void) -{ - return NS_OK; -} - -nsresult -nsEmbedStream::OpenStream(nsIURI* aBaseURI, const nsACString& aContentType) -{ - nsresult rv; - NS_ENSURE_ARG_POINTER(aBaseURI); - NS_ENSURE_TRUE(IsASCII(aContentType), NS_ERROR_INVALID_ARG); - - // if we're already doing a stream, return an error - if (mOutputStream) { - return NS_ERROR_IN_PROGRESS; - } - - nsCOMPtr inputStream; - nsCOMPtr outputStream; - rv = NS_NewPipe2(getter_AddRefs(inputStream), getter_AddRefs(outputStream), - true, false, 0, UINT32_MAX); - if (NS_FAILED(rv)) { - return rv; - } - - nsCOMPtr docShell = do_GetInterface(mOwner); - rv = docShell->LoadStream(inputStream, aBaseURI, aContentType, - EmptyCString(), nullptr); - if (NS_FAILED(rv)) { - return rv; - } - - mOutputStream = outputStream; - return rv; -} - -nsresult -nsEmbedStream::AppendToStream(const uint8_t* aData, uint32_t aLen) -{ - nsresult rv; - NS_ENSURE_STATE(mOutputStream); - - uint32_t bytesWritten = 0; - rv = mOutputStream->Write(reinterpret_cast(aData), - aLen, &bytesWritten); - if (NS_FAILED(rv)) { - return rv; - } - - NS_ASSERTION(bytesWritten == aLen, - "underlying buffer couldn't handle the write"); - return rv; -} - -nsresult -nsEmbedStream::CloseStream(void) -{ - nsresult rv = NS_OK; - - // NS_ENSURE_STATE returns NS_ERROR_UNEXPECTED if the condition isn't - // satisfied; this is exactly what we want to return. - NS_ENSURE_STATE(mOutputStream); - mOutputStream->Close(); - mOutputStream = nullptr; - - return rv; -} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsEmbedStream.h firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsEmbedStream.h --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsEmbedStream.h 2017-01-13 01:55:32.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsEmbedStream.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* 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/. */ - -#ifndef nsEmbedStream_h__ -#define nsEmbedStream_h__ - -#include "nsCOMPtr.h" -#include "nsIOutputStream.h" -#include "nsIURI.h" -#include "nsIWebBrowser.h" - -class nsEmbedStream : public nsISupports -{ -public: - nsEmbedStream(); - - void InitOwner(nsIWebBrowser* aOwner); - nsresult Init(void); - - nsresult OpenStream(nsIURI* aBaseURI, const nsACString& aContentType); - nsresult AppendToStream(const uint8_t* aData, uint32_t aLen); - nsresult CloseStream(void); - - NS_DECL_ISUPPORTS - -protected: - virtual ~nsEmbedStream(); - -private: - nsIWebBrowser* mOwner; - nsCOMPtr mOutputStream; -}; - -#endif // nsEmbedStream_h__ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsICommandHandler.idl firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsICommandHandler.idl --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsICommandHandler.idl 2017-01-13 01:55:32.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsICommandHandler.idl 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* 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" - -interface mozIDOMWindowProxy; - -[scriptable, uuid(08aed3cc-69f7-47ba-a110-f2efa8a6d7ea)] -interface nsICommandHandlerInit : nsISupports -{ - attribute mozIDOMWindowProxy window; -}; - -[scriptable, uuid(34A4FCF0-66FC-11d4-9528-0020183BF181)] -interface nsICommandHandler : nsISupports -{ - /* - * Execute the specified command with the specified parameters and return - * the result to the caller. The format of the command, parameters and - * the result are determined by the acutal implementation. - */ - string exec(in string aCommand, in string aParameters); - /* - * Query the status of the specified command with the specified parameters - * and return the result to the caller. The format of the command, - * parameters and the result are determined by the implementation. - */ - string query(in string aCommand, in string aParameters); -}; - -%{ C++ -// {3A449110-66FD-11d4-9528-0020183BF181} - -#define NS_COMMANDHANDLER_CID \ -{ 0x3a449110, 0x66fd, 0x11d4, { 0x95, 0x28, 0x0, 0x20, 0x18, 0x3b, 0xf1, 0x81 } } -#define NS_COMMANDHANDLER_CONTRACTID \ -"@mozilla.org/embedding/browser/nsCommandHandler;1" -%} - diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsIContextMenuListener2.idl firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsIContextMenuListener2.idl --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/browser/nsIContextMenuListener2.idl 2017-01-13 01:55:32.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/browser/nsIContextMenuListener2.idl 1970-01-01 00:00:00.000000000 +0000 @@ -1,121 +0,0 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/. */ - -#include "nsISupports.idl" - -interface nsIDOMEvent; -interface nsIDOMNode; -interface imgIContainer; -interface nsIURI; -interface nsIContextMenuInfo; - -/* THIS IS A PUBLIC EMBEDDING API */ - -/** - * nsIContextMenuListener2 - * - * This is an extended version of nsIContextMenuListener - * It provides a helper class, nsIContextMenuInfo, to allow access to - * background images as well as various utilities. - * - * @see nsIContextMenuListener - * @see nsIContextMenuInfo - */ - -[scriptable, uuid(7fb719b3-d804-4964-9596-77cf924ee314)] -interface nsIContextMenuListener2 : nsISupports -{ - /** Flag. No context. */ - const unsigned long CONTEXT_NONE = 0; - /** Flag. Context is a link element. */ - const unsigned long CONTEXT_LINK = 1; - /** Flag. Context is an image element. */ - const unsigned long CONTEXT_IMAGE = 2; - /** Flag. Context is the whole document. */ - const unsigned long CONTEXT_DOCUMENT = 4; - /** Flag. Context is a text area element. */ - const unsigned long CONTEXT_TEXT = 8; - /** Flag. Context is an input element. */ - const unsigned long CONTEXT_INPUT = 16; - /** Flag. Context is a background image. */ - const unsigned long CONTEXT_BACKGROUND_IMAGE = 32; - - /** - * Called when the browser receives a context menu event (e.g. user is right-mouse - * clicking somewhere on the document). The combination of flags, along with the - * attributes of aUtils, indicate where and what was clicked on. - * - * The following table describes what context flags and node combinations are - * possible. - * - * aContextFlags aUtils.targetNode - * - * CONTEXT_LINK - * CONTEXT_IMAGE - * CONTEXT_IMAGE | CONTEXT_LINK with as an ancestor - * CONTEXT_INPUT - * CONTEXT_INPUT | CONTEXT_IMAGE with type=image - * CONTEXT_TEXT
    - prefilled:
    - Should be saved checked
    - Initiallly checked
    - - - - diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/bug449141_page.html firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/bug449141_page.html --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/bug449141_page.html 2017-01-13 01:55:33.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/bug449141_page.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ - - - - - Nested iframe for bug 449141 - - - - - - - diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/chrome.ini firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/chrome.ini --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/chrome.ini 2017-01-13 01:55:33.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/chrome.ini 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -[DEFAULT] -support-files = - 320x240.ogv - bug449141_page.html - bug1170334_iframe.xml - bug1170334_style.css - -[test_bug449141.html] -skip-if = toolkit == 'android' -[test_bug1170334_wbp_xmlstyle.html] -[test_bug1192654.html] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/mochitest.ini firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/mochitest.ini --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/mochitest.ini 2017-01-13 01:55:33.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/mochitest.ini 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ -[DEFAULT] -support-files = - bug293834_form.html - -[test_bug293834.html] -skip-if = (toolkit == "cocoa" && e10s) # bug 1252223 -[test_bug499115.html] -[test_nsFind.html] -[test_private_window_from_content.html] -# Next two tests are disabled in e10s because of bug 989501. -[test_window_open_position_constraint.html] -skip-if = toolkit == 'android' -[test_window_open_units.html] -skip-if = toolkit == 'android' diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/moz.build firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/moz.build --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/moz.build 2017-01-13 01:55:33.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/moz.build 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -# -*- Mode: python; 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'] -MOCHITEST_CHROME_MANIFESTS += ['chrome.ini'] -BROWSER_CHROME_MANIFESTS += ['browser.ini'] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_bug1170334_wbp_xmlstyle.html firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_bug1170334_wbp_xmlstyle.html --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_bug1170334_wbp_xmlstyle.html 2017-01-13 01:55:33.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_bug1170334_wbp_xmlstyle.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ - - - - - Test for Bug 1170334 (nsWebBrowserPersist vs. XML stylesheets) - - - - -
    Mozilla Bug 1170334 -

    -
    
    -
    - -
    -
    -
    -
    - - diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_bug1192654.html firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_bug1192654.html --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_bug1192654.html 2017-01-13 01:55:33.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_bug1192654.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,78 +0,0 @@ - - - - - Test for Bug 1192654 (nsWebBrowser vs. nonpersistable subdocuments) - - - - -Mozilla Bug 1192654 -

    -
    
    -
    - - -
    -
    -
    -
    - - diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_bug293834.html firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_bug293834.html --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_bug293834.html 2017-01-13 01:55:33.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_bug293834.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,137 +0,0 @@ - - - - - Test for Bug 293834 - - - - -Mozilla Bug 293834 -

    - -

    -
    
    -
    -
    -
    -
    - - diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_bug449141.html firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_bug449141.html --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_bug449141.html 2017-01-13 01:55:33.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_bug449141.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,101 +0,0 @@ - - - - - Test for Bug 449141 - - - - -Mozilla Bug 449141 -

    - -

    -
    
    -
    -
    -
    -
    - - diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_bug499115.html firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_bug499115.html --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_bug499115.html 2017-01-13 01:55:33.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_bug499115.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,66 +0,0 @@ - - - - - - - Test for Bug 499115 - - - - - Mozilla Bug 499115 -

    - -
    -    
    -  
    - - diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_nsFind.html firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_nsFind.html --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_nsFind.html 2017-01-13 01:55:33.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_nsFind.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,241 +0,0 @@ - - - - - - Test for nsFind::Find() - - - - -Mozilla Bug 450048 -

    This is the text to search in­to

    -

    "straight" and “curly” and ‘didn't’ and 'doesn’t'

    - -
    -
    -
    - - diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_private_window_from_content.html firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_private_window_from_content.html --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_private_window_from_content.html 2017-01-13 01:55:33.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_private_window_from_content.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ - - - diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_window_open_position_constraint.html firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_window_open_position_constraint.html --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_window_open_position_constraint.html 2017-01-13 01:55:33.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_window_open_position_constraint.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ - - - - Test for Bug 978847 - - - - -Mozilla Bug 978847 -

    - -
    -
    -
    - - diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_window_open_units.html firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_window_open_units.html --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/test/test_window_open_units.html 2017-01-13 01:55:33.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/test/test_window_open_units.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ - - - - Test for Bug 594140 - - - - - -Mozilla Bug 594140 -

    - -
    -
    -
    - - diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/tests/unit/test_wwauthpromptfactory.js firefox-trunk-53.0~a1~hg20170115r329516/embedding/tests/unit/test_wwauthpromptfactory.js --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/tests/unit/test_wwauthpromptfactory.js 2017-01-13 01:55:33.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/tests/unit/test_wwauthpromptfactory.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -var Cc = Components.classes; -var Ci = Components.interfaces; - -var authPromptRequestReceived; - -const tPFCID = Components.ID("{749e62f4-60ae-4569-a8a2-de78b649660f}"); -const tPFContract = "@mozilla.org/passwordmanager/authpromptfactory;1"; - -/* - * TestPromptFactory - * - * Implements nsIPromptFactory - */ -var TestPromptFactory = { - QueryInterface: function tPF_qi(iid) { - if (iid.equals(Ci.nsISupports) || - iid.equals(Ci.nsIFactory) || - iid.equals(Ci.nsIPromptFactory)) - return this; - throw Components.results.NS_ERROR_NO_INTERFACE; - }, - - createInstance: function tPF_ci(outer, iid) { - if (outer) - throw Components.results.NS_ERROR_NO_AGGREGATION; - return this.QueryInterface(iid); - }, - - lockFactory: function tPF_lockf(lock) { - throw Components.results.NS_ERROR_NOT_IMPLEMENTED; - }, - - getPrompt : function tPF_getPrompt(aWindow, aIID) { - if (aIID.equals(Ci.nsIAuthPrompt) || - aIID.equals(Ci.nsIAuthPrompt2)) { - authPromptRequestReceived = true; - return {}; - } - - throw Components.results.NS_ERROR_NO_INTERFACE; - } -}; // end of TestPromptFactory implementation - -/* - * The tests - */ -function run_test() { - Components.manager.nsIComponentRegistrar.registerFactory(tPFCID, - "TestPromptFactory", tPFContract, TestPromptFactory); - - // Make sure that getting both nsIAuthPrompt and nsIAuthPrompt2 works - // (these should work independently of whether the application has - // nsIPromptService2) - var ww = Cc["@mozilla.org/embedcomp/window-watcher;1"].getService(); - - authPromptRequestReceived = false; - - do_check_neq(ww.nsIPromptFactory.getPrompt(null, Ci.nsIAuthPrompt), null); - - do_check_true(authPromptRequestReceived); - - authPromptRequestReceived = false; - - do_check_neq(ww.nsIPromptFactory.getPrompt(null, Ci.nsIAuthPrompt2), null); - - do_check_true(authPromptRequestReceived); -} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/tests/unit/test_wwpromptfactory.js firefox-trunk-53.0~a1~hg20170115r329516/embedding/tests/unit/test_wwpromptfactory.js --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/tests/unit/test_wwpromptfactory.js 2017-01-13 01:55:33.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/tests/unit/test_wwpromptfactory.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -function run_test() { - // Make sure that getting both nsIAuthPrompt and nsIAuthPrompt2 works - // (these should work independently of whether the application has - // nsIPromptService2) - var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"] - .getService(); - - var prompt; - - prompt = ww.nsIWindowWatcher.getNewPrompter(null); - do_check_neq(prompt, null); - prompt = ww.nsIWindowWatcher.getNewAuthPrompter(null); - do_check_neq(prompt, null); - - prompt = ww.nsIPromptFactory.getPrompt(null, - Components.interfaces.nsIPrompt); - do_check_neq(prompt, null); - prompt = ww.nsIPromptFactory.getPrompt(null, - Components.interfaces.nsIAuthPrompt); - do_check_neq(prompt, null); - prompt = ww.nsIPromptFactory.getPrompt(null, - Components.interfaces.nsIAuthPrompt2); - do_check_neq(prompt, null); -} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/embedding/tests/unit/xpcshell.ini firefox-trunk-53.0~a1~hg20170115r329516/embedding/tests/unit/xpcshell.ini --- firefox-trunk-53.0~a1~hg20170113r329171/embedding/tests/unit/xpcshell.ini 2017-01-13 01:55:33.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/embedding/tests/unit/xpcshell.ini 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -[DEFAULT] -head = -tail = - -[test_wwauthpromptfactory.js] -[test_wwpromptfactory.js] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/.eslintignore firefox-trunk-53.0~a1~hg20170115r329516/.eslintignore --- firefox-trunk-53.0~a1~hg20170113r329171/.eslintignore 2017-01-13 00:55:51.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/.eslintignore 2017-01-16 00:52:15.000000000 +0000 @@ -184,6 +184,12 @@ # Uses `#filter substitution` services/sync/modules/constants.js +# Third party services +services/sync/tps/extensions/mozmill/resource/stdlib/json2.js +services/common/kinto-http-client.js +services/common/kinto-offline-client.js +services/sync/tps/extensions/mozmill + # toolkit/ exclusions # Not part of the default build diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/extensions/spellcheck/hunspell/src/README.mozilla firefox-trunk-53.0~a1~hg20170115r329516/extensions/spellcheck/hunspell/src/README.mozilla --- firefox-trunk-53.0~a1~hg20170113r329171/extensions/spellcheck/hunspell/src/README.mozilla 2017-01-13 01:55:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/extensions/spellcheck/hunspell/src/README.mozilla 2017-01-16 01:58:34.000000000 +0000 @@ -1,2 +1,2 @@ -Hunspell Version: 1.5.4 +Hunspell Version: 1.6.0 Additional Patches: See patches directory. diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/CompositorOptions.h firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/CompositorOptions.h --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/CompositorOptions.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/CompositorOptions.h 2017-01-16 00:56:48.000000000 +0000 @@ -0,0 +1,55 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=99: */ +/* 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/. */ +#ifndef _include_mozilla_gfx_ipc_CompositorOptions_h_ +#define _include_mozilla_gfx_ipc_CompositorOptions_h_ + +namespace IPC { +template struct ParamTraits; +} // namespace IPC + +namespace mozilla { +namespace layers { + +/** + * This class holds options that are "per compositor" - that is, these options + * affect a particular CompositorBridgeParent and all the content that it + * renders. + * + * This class is intended to be created by a platform widget (but NOT + * PuppetWidget) and passed to the graphics code during initialization of the + * top level compositor associated with that widget. The options are immutable + * after creation. The CompositorBridgeParent holds the canonical version of + * the options, but they may be accessed by other parts of the code as needed, + * and are accessible to content processes over PCompositorBridge as well. + */ +class CompositorOptions +{ +public: + // This constructor needed for IPDL purposes, don't use it anywhere else. + CompositorOptions() + : mUseAPZ(false) + { + } + + explicit CompositorOptions(bool aUseAPZ) + : mUseAPZ(aUseAPZ) + { + } + + bool UseAPZ() const { return mUseAPZ; } + + friend struct IPC::ParamTraits; + +private: + bool mUseAPZ; + + // Make sure to add new fields to the ParamTraits implementation +}; + +} // namespace layers +} // namespace mozilla + +#endif // _include_mozilla_gfx_ipc_CompositorOptions_h_ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/GfxMessageUtils.h firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/GfxMessageUtils.h --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/GfxMessageUtils.h 2017-01-13 00:58:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/GfxMessageUtils.h 2017-01-16 00:56:49.000000000 +0000 @@ -20,6 +20,7 @@ #include "ipc/IPCMessageUtils.h" #include "mozilla/gfx/Matrix.h" #include "mozilla/layers/AsyncDragMetrics.h" +#include "mozilla/layers/CompositorOptions.h" #include "mozilla/layers/CompositorTypes.h" #include "mozilla/layers/GeckoContentController.h" #include "mozilla/layers/LayersTypes.h" @@ -1318,6 +1319,20 @@ } }; +template <> +struct ParamTraits +{ + typedef mozilla::layers::CompositorOptions paramType; + + static void Write(Message* aMsg, const paramType& aParam) { + WriteParam(aMsg, aParam.mUseAPZ); + } + + static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) { + return ReadParam(aMsg, aIter, &aResult->mUseAPZ); + } +}; + } /* namespace IPC */ #endif /* __GFXMESSAGEUTILS_H__ */ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/GPUParent.cpp firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/GPUParent.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/GPUParent.cpp 2017-01-13 00:58:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/GPUParent.cpp 2017-01-16 00:56:49.000000000 +0000 @@ -288,11 +288,12 @@ GPUParent::RecvNewWidgetCompositor(Endpoint&& aEndpoint, const CSSToLayoutDeviceScale& aScale, const TimeDuration& aVsyncRate, + const CompositorOptions& aOptions, const bool& aUseExternalSurfaceSize, const IntSize& aSurfaceSize) { RefPtr cbp = - new CompositorBridgeParent(aScale, aVsyncRate, aUseExternalSurfaceSize, aSurfaceSize); + new CompositorBridgeParent(aScale, aVsyncRate, aOptions, aUseExternalSurfaceSize, aSurfaceSize); MessageLoop* loop = CompositorThreadHolder::Loop(); loop->PostTask(NewRunnableFunction(OpenParent, cbp, Move(aEndpoint))); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/GPUParent.h firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/GPUParent.h --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/GPUParent.h 2017-01-13 00:58:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/GPUParent.h 2017-01-16 00:56:49.000000000 +0000 @@ -42,6 +42,7 @@ Endpoint&& aEndpoint, const CSSToLayoutDeviceScale& aScale, const TimeDuration& aVsyncRate, + const CompositorOptions& aOptions, const bool& aUseExternalSurface, const IntSize& aSurfaceSize) override; mozilla::ipc::IPCResult RecvNewContentCompositorBridge(Endpoint&& aEndpoint) override; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/GPUProcessManager.cpp firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/GPUProcessManager.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/GPUProcessManager.cpp 2017-01-13 00:58:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/GPUProcessManager.cpp 2017-01-16 00:56:49.000000000 +0000 @@ -12,6 +12,7 @@ #include "mozilla/layers/APZCTreeManager.h" #include "mozilla/layers/APZCTreeManagerChild.h" #include "mozilla/layers/CompositorBridgeParent.h" +#include "mozilla/layers/CompositorOptions.h" #include "mozilla/layers/ImageBridgeChild.h" #include "mozilla/layers/ImageBridgeParent.h" #include "mozilla/layers/InProcessCompositorSession.h" @@ -487,7 +488,7 @@ GPUProcessManager::CreateTopLevelCompositor(nsBaseWidget* aWidget, LayerManager* aLayerManager, CSSToLayoutDeviceScale aScale, - bool aUseAPZ, + const CompositorOptions& aOptions, bool aUseExternalSurfaceSize, const gfx::IntSize& aSurfaceSize) { @@ -503,7 +504,7 @@ aLayerManager, layerTreeId, aScale, - aUseAPZ, + aOptions, aUseExternalSurfaceSize, aSurfaceSize); if (session) { @@ -519,7 +520,7 @@ aLayerManager, layerTreeId, aScale, - aUseAPZ, + aOptions, aUseExternalSurfaceSize, aSurfaceSize); } @@ -529,7 +530,7 @@ LayerManager* aLayerManager, const uint64_t& aRootLayerTreeId, CSSToLayoutDeviceScale aScale, - bool aUseAPZ, + const CompositorOptions& aOptions, bool aUseExternalSurfaceSize, const gfx::IntSize& aSurfaceSize) { @@ -566,6 +567,7 @@ Move(parentPipe), aScale, vsyncRate, + aOptions, aUseExternalSurfaceSize, aSurfaceSize); if (!ok) { @@ -585,7 +587,7 @@ } RefPtr apz = nullptr; - if (aUseAPZ) { + if (aOptions.UseAPZ()) { PAPZCTreeManagerChild* papz = child->SendPAPZCTreeManagerConstructor(0); if (!papz) { return nullptr; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/GPUProcessManager.h firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/GPUProcessManager.h --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/GPUProcessManager.h 2017-01-13 00:58:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/GPUProcessManager.h 2017-01-16 00:56:49.000000000 +0000 @@ -24,6 +24,7 @@ namespace mozilla { namespace layers { class IAPZCTreeManager; +class CompositorOptions; class CompositorSession; class CompositorUpdateObserver; class PCompositorBridgeChild; @@ -56,6 +57,7 @@ { friend class layers::RemoteCompositorSession; + typedef layers::CompositorOptions CompositorOptions; typedef layers::CompositorSession CompositorSession; typedef layers::CompositorUpdateObserver CompositorUpdateObserver; typedef layers::IAPZCTreeManager IAPZCTreeManager; @@ -83,7 +85,7 @@ nsBaseWidget* aWidget, LayerManager* aLayerManager, CSSToLayoutDeviceScale aScale, - bool aUseAPZ, + const CompositorOptions& aOptions, bool aUseExternalSurfaceSize, const gfx::IntSize& aSurfaceSize); @@ -197,7 +199,7 @@ LayerManager* aLayerManager, const uint64_t& aRootLayerTreeId, CSSToLayoutDeviceScale aScale, - bool aUseAPZ, + const CompositorOptions& aOptions, bool aUseExternalSurfaceSize, const gfx::IntSize& aSurfaceSize); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/InProcessCompositorSession.cpp firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/InProcessCompositorSession.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/InProcessCompositorSession.cpp 2017-01-13 00:58:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/InProcessCompositorSession.cpp 2017-01-16 00:56:49.000000000 +0000 @@ -27,17 +27,17 @@ LayerManager* aLayerManager, const uint64_t& aRootLayerTreeId, CSSToLayoutDeviceScale aScale, - bool aUseAPZ, + const CompositorOptions& aOptions, bool aUseExternalSurfaceSize, const gfx::IntSize& aSurfaceSize) { CompositorWidgetInitData initData; aWidget->GetCompositorWidgetInitData(&initData); - RefPtr widget = CompositorWidget::CreateLocal(initData, aWidget); + RefPtr widget = CompositorWidget::CreateLocal(initData, aOptions, aWidget); RefPtr child = new CompositorBridgeChild(aLayerManager); RefPtr parent = - child->InitSameProcess(widget, aRootLayerTreeId, aScale, aUseAPZ, aUseExternalSurfaceSize, aSurfaceSize); + child->InitSameProcess(widget, aRootLayerTreeId, aScale, aOptions, aUseExternalSurfaceSize, aSurfaceSize); return new InProcessCompositorSession(widget, child, parent); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/InProcessCompositorSession.h firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/InProcessCompositorSession.h --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/InProcessCompositorSession.h 2017-01-13 00:58:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/InProcessCompositorSession.h 2017-01-16 00:56:49.000000000 +0000 @@ -13,6 +13,8 @@ namespace mozilla { namespace layers { +class CompositorOptions; + // A CompositorSession where both the child and parent CompositorBridge reside // in the same process. class InProcessCompositorSession final : public CompositorSession @@ -23,7 +25,7 @@ LayerManager* aLayerManager, const uint64_t& aRootLayerTreeId, CSSToLayoutDeviceScale aScale, - bool aUseAPZ, + const CompositorOptions& aOptions, bool aUseExternalSurfaceSize, const gfx::IntSize& aSurfaceSize); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/moz.build firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/moz.build --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/moz.build 2017-01-13 00:58:11.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/moz.build 2017-01-16 00:56:54.000000000 +0000 @@ -23,6 +23,7 @@ ] EXPORTS.mozilla.layers += [ + 'CompositorOptions.h', 'CompositorSession.h', 'InProcessCompositorSession.h', 'RemoteCompositorSession.h', diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/PGPU.ipdl firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/PGPU.ipdl --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/ipc/PGPU.ipdl 2017-01-13 00:58:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/ipc/PGPU.ipdl 2017-01-16 00:56:49.000000000 +0000 @@ -14,6 +14,7 @@ using mozilla::TimeDuration from "mozilla/TimeStamp.h"; using mozilla::CSSToLayoutDeviceScale from "Units.h"; using mozilla::gfx::IntSize from "mozilla/gfx/2D.h"; +using mozilla::layers::CompositorOptions from "mozilla/layers/CompositorOptions.h"; using mozilla::Telemetry::Accumulation from "mozilla/TelemetryComms.h"; using mozilla::Telemetry::KeyedAccumulation from "mozilla/TelemetryComms.h"; @@ -58,6 +59,7 @@ async NewWidgetCompositor(Endpoint endpoint, CSSToLayoutDeviceScale scale, TimeDuration vsyncRate, + CompositorOptions options, bool useExternalSurface, IntSize surfaceSize); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/composite/ContainerLayerComposite.h firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/composite/ContainerLayerComposite.h --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/composite/ContainerLayerComposite.h 2017-01-13 00:59:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/composite/ContainerLayerComposite.h 2017-01-16 00:58:09.000000000 +0000 @@ -70,11 +70,6 @@ LayerComposite::SetLayerManager(aManager); mManager = aManager; mLastIntermediateSurface = nullptr; - - for (Layer* l = GetFirstChild(); l; l = l->GetNextSibling()) { - HostLayer* child = l->AsHostLayer(); - child->SetLayerManager(aManager); - } } virtual void Destroy() override; @@ -167,6 +162,13 @@ /** LayerOGL implementation */ Layer* GetLayer() override { return this; } + virtual void SetLayerManager(HostLayerManager* aManager) override + { + LayerComposite::SetLayerManager(aManager); + mManager = aManager; + mLastIntermediateSurface = nullptr; + } + void Destroy() override; LayerComposite* GetFirstChildComposite() override; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/composite/LayerManagerComposite.cpp firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/composite/LayerManagerComposite.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/composite/LayerManagerComposite.cpp 2017-01-13 00:59:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/composite/LayerManagerComposite.cpp 2017-01-16 00:58:09.000000000 +0000 @@ -1409,7 +1409,7 @@ LayerManagerComposite::AsyncPanZoomEnabled() const { if (CompositorBridgeParent* bridge = mCompositor->GetCompositorBridgeParent()) { - return bridge->AsyncPanZoomEnabled(); + return bridge->GetOptions().UseAPZ(); } return false; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ImageContainer.cpp firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ImageContainer.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ImageContainer.cpp 2017-01-13 00:58:11.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ImageContainer.cpp 2017-01-16 00:56:55.000000000 +0000 @@ -97,6 +97,32 @@ mRecycledBufferSize = 0; } +ImageContainerListener::ImageContainerListener(ImageContainer* aImageContainer) + : mLock("mozilla.layers.ImageContainerListener.mLock") + , mImageContainer(aImageContainer) +{ +} + +ImageContainerListener::~ImageContainerListener() +{ +} + +void +ImageContainerListener::NotifyComposite(const ImageCompositeNotification& aNotification) +{ + MutexAutoLock lock(mLock); + if (mImageContainer) { + mImageContainer->NotifyComposite(aNotification); + } +} + +void +ImageContainerListener::ClearImageContainer() +{ + MutexAutoLock lock(mLock); + mImageContainer = nullptr; +} + void ImageContainer::EnsureImageClient(bool aCreate) { @@ -111,6 +137,7 @@ mImageClient = imageBridge->CreateImageClient(CompositableType::IMAGE, this); if (mImageClient) { mAsyncContainerID = mImageClient->GetAsyncID(); + mNotifyCompositeListener = new ImageContainerListener(this); } } } @@ -146,6 +173,9 @@ ImageContainer::~ImageContainer() { + if (mNotifyCompositeListener) { + mNotifyCompositeListener->ClearImageContainer(); + } if (mAsyncContainerID) { if (RefPtr imageBridge = ImageBridgeChild::GetSingleton()) { imageBridge->ForgetImageContainer(mAsyncContainerID); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ImageContainer.h firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ImageContainer.h --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ImageContainer.h 2017-01-13 00:58:11.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ImageContainer.h 2017-01-16 00:56:55.000000000 +0000 @@ -145,6 +145,7 @@ class ImageClient; class ImageCompositeNotification; +class ImageContainer; class ImageContainerChild; class PImageContainerChild; class SharedPlanarYCbCrImage; @@ -323,6 +324,24 @@ const gfx::IntSize& aScaleHint, BufferRecycleBin *aRecycleBin); }; + +// Used to notify ImageContainer::NotifyComposite() +class ImageContainerListener final { + NS_INLINE_DECL_THREADSAFE_REFCOUNTING(ImageContainerListener) + +public: + explicit ImageContainerListener(ImageContainer* aImageContainer); + + void NotifyComposite(const ImageCompositeNotification& aNotification); + void ClearImageContainer(); +private: + typedef mozilla::Mutex Mutex; + + ~ImageContainerListener(); + + Mutex mLock; + ImageContainer* mImageContainer; +}; /** * A class that manages Images for an ImageLayer. The only reason @@ -566,6 +585,11 @@ PImageContainerChild* GetPImageContainerChild(); + ImageContainerListener* GetImageContainerListener() + { + return mNotifyCompositeListener; + } + /** * Main thread only. */ @@ -632,6 +656,8 @@ // mFrameIDsNotYetComposited ProducerID mCurrentProducerID; + RefPtr mNotifyCompositeListener; + static mozilla::Atomic sGenerationCounter; }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/CompositorBridgeChild.cpp firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/CompositorBridgeChild.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/CompositorBridgeChild.cpp 2017-01-13 01:00:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/CompositorBridgeChild.cpp 2017-01-16 00:58:26.000000000 +0000 @@ -234,7 +234,7 @@ CompositorBridgeChild::InitSameProcess(widget::CompositorWidget* aWidget, const uint64_t& aLayerTreeId, CSSToLayoutDeviceScale aScale, - bool aUseAPZ, + const CompositorOptions& aOptions, bool aUseExternalSurface, const gfx::IntSize& aSurfaceSize) { @@ -242,7 +242,7 @@ gfxPlatform::GetPlatform()->GetHardwareVsync()->GetGlobalDisplay().GetVsyncRate(); mCompositorBridgeParent = - new CompositorBridgeParent(aScale, vsyncRate, aUseExternalSurface, aSurfaceSize); + new CompositorBridgeParent(aScale, vsyncRate, aOptions, aUseExternalSurface, aSurfaceSize); bool ok = Open(mCompositorBridgeParent->GetIPCChannel(), CompositorThreadHolder::Loop(), @@ -250,7 +250,7 @@ MOZ_RELEASE_ASSERT(ok); InitIPDL(); - mCompositorBridgeParent->InitSameProcess(aWidget, aLayerTreeId, aUseAPZ); + mCompositorBridgeParent->InitSameProcess(aWidget, aLayerTreeId); return mCompositorBridgeParent; } @@ -1088,14 +1088,6 @@ #endif } -bool -CompositorBridgeChild::GetAPZEnabled(uint64_t aLayerTreeId) -{ - bool result = false; - Unused << SendAsyncPanZoomEnabled(aLayerTreeId, &result); - return result; -} - PAPZCTreeManagerChild* CompositorBridgeChild::AllocPAPZCTreeManagerChild(const uint64_t& aLayersId) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/CompositorBridgeChild.h firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/CompositorBridgeChild.h --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/CompositorBridgeChild.h 2017-01-13 01:00:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/CompositorBridgeChild.h 2017-01-16 00:58:26.000000000 +0000 @@ -38,6 +38,7 @@ class APZCTreeManagerChild; class ClientLayerManager; class CompositorBridgeParent; +class CompositorOptions; class TextureClient; class TextureClientPool; struct FrameMetrics; @@ -80,7 +81,7 @@ widget::CompositorWidget* aWidget, const uint64_t& aLayerTreeId, CSSToLayoutDeviceScale aScale, - bool aUseAPZ, + const CompositorOptions& aOptions, bool aUseExternalSurface, const gfx::IntSize& aSurfaceSize); @@ -220,8 +221,6 @@ PCompositorWidgetChild* AllocPCompositorWidgetChild(const CompositorWidgetInitData& aInitData) override; bool DeallocPCompositorWidgetChild(PCompositorWidgetChild* aActor) override; - bool GetAPZEnabled(uint64_t aLayerTreeId); - PAPZCTreeManagerChild* AllocPAPZCTreeManagerChild(const uint64_t& aLayersId) override; bool DeallocPAPZCTreeManagerChild(PAPZCTreeManagerChild* aActor) override; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/CompositorBridgeParent.cpp firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/CompositorBridgeParent.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/CompositorBridgeParent.cpp 2017-01-13 01:00:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/CompositorBridgeParent.cpp 2017-01-16 00:58:26.000000000 +0000 @@ -289,6 +289,7 @@ CompositorBridgeParent::CompositorBridgeParent(CSSToLayoutDeviceScale aScale, const TimeDuration& aVsyncRate, + const CompositorOptions& aOptions, bool aUseExternalSurfaceSize, const gfx::IntSize& aSurfaceSize) : mWidget(nullptr) @@ -299,6 +300,7 @@ , mPaused(false) , mUseExternalSurfaceSize(aUseExternalSurfaceSize) , mEGLSurfaceSize(aSurfaceSize) + , mOptions(aOptions) , mPauseCompositionMonitor("PauseCompositionMonitor") , mResumeCompositionMonitor("ResumeCompositionMonitor") , mResetCompositorMonitor("ResetCompositorMonitor") @@ -320,12 +322,11 @@ void CompositorBridgeParent::InitSameProcess(widget::CompositorWidget* aWidget, - const uint64_t& aLayerTreeId, - bool aUseAPZ) + const uint64_t& aLayerTreeId) { mWidget = aWidget; mRootLayerTreeID = aLayerTreeId; - if (aUseAPZ) { + if (mOptions.UseAPZ()) { mApzcTreeManager = new APZCTreeManager(); } @@ -1046,6 +1047,9 @@ PAPZCTreeManagerParent* CompositorBridgeParent::AllocPAPZCTreeManagerParent(const uint64_t& aLayersId) { + // We should only ever get this if APZ is enabled in this compositor. + MOZ_ASSERT(mOptions.UseAPZ()); + // The main process should pass in 0 because we assume mRootLayerTreeID MOZ_ASSERT(aLayersId == 0); @@ -1098,11 +1102,12 @@ } mozilla::ipc::IPCResult -CompositorBridgeParent::RecvAsyncPanZoomEnabled(const uint64_t& aLayersId, bool* aHasAPZ) +CompositorBridgeParent::RecvGetCompositorOptions(const uint64_t& aLayersId, + CompositorOptions* aOptions) { // The main process should pass in 0 because we assume mRootLayerTreeID MOZ_ASSERT(aLayersId == 0); - *aHasAPZ = AsyncPanZoomEnabled(); + *aOptions = mOptions; return IPC_OK(); } @@ -1521,10 +1526,7 @@ MonitorAutoLock lock(*sIndirectLayerTreesLock); NotifyChildCreated(child); if (sIndirectLayerTrees[child].mLayerTree) { - sIndirectLayerTrees[child].mLayerTree->mLayerManager = mLayerManager; - } - if (sIndirectLayerTrees[child].mRoot) { - sIndirectLayerTrees[child].mRoot->AsHostLayer()->SetLayerManager(static_cast(mLayerManager.get())); + sIndirectLayerTrees[child].mLayerTree->SetLayerManager(mLayerManager); } parent = sIndirectLayerTrees[child].mApzcTreeManagerParent; } @@ -1651,7 +1653,7 @@ } widget::CompositorWidgetParent* widget = - new widget::CompositorWidgetParent(aInitData); + new widget::CompositorWidgetParent(aInitData, mOptions); widget->AddRef(); // Sending the constructor acts as initialization as well. diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/CompositorBridgeParent.h firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/CompositorBridgeParent.h --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/CompositorBridgeParent.h 2017-01-13 01:00:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/CompositorBridgeParent.h 2017-01-16 00:58:26.000000000 +0000 @@ -28,6 +28,7 @@ #include "mozilla/ipc/ProtocolUtils.h" #include "mozilla/ipc/SharedMemory.h" #include "mozilla/layers/CompositorController.h" +#include "mozilla/layers/CompositorOptions.h" #include "mozilla/layers/CompositorVsyncSchedulerOwner.h" #include "mozilla/layers/GeckoContentController.h" #include "mozilla/layers/ISurfaceAllocator.h" // for ShmemAllocator @@ -155,6 +156,7 @@ explicit CompositorBridgeParent(CSSToLayoutDeviceScale aScale, const TimeDuration& aVsyncRate, + const CompositorOptions& aOptions, bool aUseExternalSurfaceSize, const gfx::IntSize& aSurfaceSize); @@ -162,8 +164,7 @@ // IPC channel is active and RecvWillStop/ActorDestroy must be called to // free the compositor. void InitSameProcess(widget::CompositorWidget* aWidget, - const uint64_t& aLayerTreeId, - bool aUseAPZ); + const uint64_t& aLayerTreeId); // Must only be called by GPUParent. After invoking this, the IPC channel // is active and RecvWillStop/ActorDestroy must be called to free the @@ -431,12 +432,13 @@ PAPZParent* AllocPAPZParent(const uint64_t& aLayersId) override; bool DeallocPAPZParent(PAPZParent* aActor) override; - mozilla::ipc::IPCResult RecvAsyncPanZoomEnabled(const uint64_t& aLayersId, bool* aHasAPZ) override; + mozilla::ipc::IPCResult RecvGetCompositorOptions(const uint64_t& aLayersId, + CompositorOptions* aOptions) override; RefPtr GetAPZCTreeManager(); - bool AsyncPanZoomEnabled() const { - return !!mApzcTreeManager; + CompositorOptions GetOptions() const { + return mOptions; } private: @@ -549,6 +551,8 @@ bool mUseExternalSurfaceSize; gfx::IntSize mEGLSurfaceSize; + CompositorOptions mOptions; + mozilla::Monitor mPauseCompositionMonitor; mozilla::Monitor mResumeCompositionMonitor; mozilla::Monitor mResetCompositorMonitor; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/CrossProcessCompositorBridgeParent.cpp firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/CrossProcessCompositorBridgeParent.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/CrossProcessCompositorBridgeParent.cpp 2017-01-13 01:00:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/CrossProcessCompositorBridgeParent.cpp 2017-01-16 00:58:26.000000000 +0000 @@ -15,6 +15,7 @@ #include "mozilla/layers/APZCTreeManagerParent.h" // for APZCTreeManagerParent #include "mozilla/layers/APZThreadUtils.h" // for APZCTreeManager #include "mozilla/layers/AsyncCompositionManager.h" +#include "mozilla/layers/CompositorOptions.h" #include "mozilla/layers/CompositorThread.h" #include "mozilla/layers/LayerManagerComposite.h" #include "mozilla/layers/LayerTreeOwnerTracker.h" @@ -109,18 +110,21 @@ } mozilla::ipc::IPCResult -CrossProcessCompositorBridgeParent::RecvAsyncPanZoomEnabled(const uint64_t& aLayersId, bool* aHasAPZ) +CrossProcessCompositorBridgeParent::RecvGetCompositorOptions(const uint64_t& aLayersId, + CompositorOptions* aOptions) { // Check to see if this child process has access to this layer tree. if (!LayerTreeOwnerTracker::Get()->IsMapped(aLayersId, OtherPid())) { - NS_ERROR("Unexpected layers id in RecvAsyncPanZoomEnabled; dropping message..."); + NS_ERROR("Unexpected layers id in RecvGetCompositorOptions; dropping message..."); return IPC_FAIL_NO_REASON(this); } MonitorAutoLock lock(*sIndirectLayerTreesLock); CompositorBridgeParent::LayerTreeState& state = sIndirectLayerTrees[aLayersId]; - *aHasAPZ = state.mParent ? state.mParent->AsyncPanZoomEnabled() : false; + if (state.mParent) { + *aOptions = state.mParent->GetOptions(); + } return IPC_OK(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/CrossProcessCompositorBridgeParent.h firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/CrossProcessCompositorBridgeParent.h --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/CrossProcessCompositorBridgeParent.h 2017-01-13 01:00:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/CrossProcessCompositorBridgeParent.h 2017-01-16 00:58:26.000000000 +0000 @@ -13,6 +13,8 @@ namespace mozilla { namespace layers { +class CompositorOptions; + /** * This class handles layer updates pushed directly from child processes to * the compositor thread. It's associated with a CompositorBridgeParent on the @@ -137,7 +139,7 @@ return false; } - virtual mozilla::ipc::IPCResult RecvAsyncPanZoomEnabled(const uint64_t& aLayersId, bool* aHasAPZ) override; + virtual mozilla::ipc::IPCResult RecvGetCompositorOptions(const uint64_t& aLayersId, CompositorOptions* aOptions) override; virtual PAPZCTreeManagerParent* AllocPAPZCTreeManagerParent(const uint64_t& aLayersId) override; virtual bool DeallocPAPZCTreeManagerParent(PAPZCTreeManagerParent* aActor) override; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/ImageBridgeChild.cpp firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/ImageBridgeChild.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/ImageBridgeChild.cpp 2017-01-13 01:00:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/ImageBridgeChild.cpp 2017-01-16 00:58:26.000000000 +0000 @@ -1105,13 +1105,17 @@ ImageBridgeChild::RecvDidComposite(InfallibleTArray&& aNotifications) { for (auto& n : aNotifications) { - RefPtr imageContainer; + RefPtr listener; { MutexAutoLock lock(mContainerMapLock); + ImageContainer* imageContainer; imageContainer = mImageContainers.Get(n.asyncCompositableID()); + if (imageContainer) { + listener = imageContainer->GetImageContainerListener(); + } } - if (imageContainer) { - imageContainer->NotifyComposite(n); + if (listener) { + listener->NotifyComposite(n); } } return IPC_OK(); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/LayerTransactionParent.cpp firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/LayerTransactionParent.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/LayerTransactionParent.cpp 2017-01-13 01:00:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/LayerTransactionParent.cpp 2017-01-16 00:58:27.000000000 +0000 @@ -70,6 +70,16 @@ { } +void +LayerTransactionParent::SetLayerManager(HostLayerManager* aLayerManager) +{ + mLayerManager = aLayerManager; + for (auto iter = mLayerMap.Iter(); !iter.Done(); iter.Next()) { + auto layer = iter.Data(); + layer->AsHostLayer()->SetLayerManager(aLayerManager); + } +} + mozilla::ipc::IPCResult LayerTransactionParent::RecvShutdown() { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/LayerTransactionParent.h firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/LayerTransactionParent.h --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/LayerTransactionParent.h 2017-01-13 01:00:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/LayerTransactionParent.h 2017-01-16 00:58:27.000000000 +0000 @@ -58,6 +58,8 @@ HostLayerManager* layer_manager() const { return mLayerManager; } + void SetLayerManager(HostLayerManager* aLayerManager); + uint64_t GetId() const { return mId; } Layer* GetRoot() const { return mRoot; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/PCompositorBridge.ipdl firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/PCompositorBridge.ipdl --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/PCompositorBridge.ipdl 2017-01-13 01:00:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/PCompositorBridge.ipdl 2017-01-16 00:58:27.000000000 +0000 @@ -33,6 +33,7 @@ using class mozilla::TimeStamp from "mozilla/TimeStamp.h"; using class mozilla::layers::FrameUniformityData from "mozilla/layers/FrameUniformityData.h"; using mozilla::layers::TextureFlags from "mozilla/layers/CompositorTypes.h"; +using mozilla::layers::CompositorOptions from "mozilla/layers/CompositorOptions.h"; namespace mozilla { namespace layers { @@ -128,8 +129,8 @@ sync Reset(LayersBackend[] aBackendHints, uint64_t aSeqNo) returns (bool aResult, TextureFactoryIdentifier aOutIdentifier); - // Returns whether this Compositor has APZ enabled or not. - sync AsyncPanZoomEnabled(uint64_t layersId) returns (bool aHasAPZ); + // Returns the CompositorOptions for this compositor. + sync GetCompositorOptions(uint64_t layersId) returns (CompositorOptions aOptions); // Must be called after Initialize(), and only succeeds if AsyncPanZoomEnabled() is true. async PAPZ(uint64_t layersId); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/ShadowLayers.cpp firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/ShadowLayers.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/layers/ipc/ShadowLayers.cpp 2017-01-13 01:00:10.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/layers/ipc/ShadowLayers.cpp 2017-01-16 00:58:27.000000000 +0000 @@ -51,7 +51,7 @@ class ClientTiledLayerBuffer; typedef nsTArray BufferArray; -typedef std::vector EditVector; +typedef nsTArray EditVector; typedef nsTHashtable> ShadowableLayerSet; typedef nsTArray OpDestroyVector; @@ -87,7 +87,7 @@ void AddEdit(const Edit& aEdit) { MOZ_ASSERT(!Finished(), "forgot BeginTransaction?"); - mCset.push_back(aEdit); + mCset.AppendElement(aEdit); } void AddEdit(const CompositableOperation& aEdit) { @@ -107,12 +107,12 @@ void AddNoSwapPaint(const Edit& aPaint) { MOZ_ASSERT(!Finished(), "forgot BeginTransaction?"); - mPaints.push_back(aPaint); + mPaints.AppendElement(aPaint); } void AddNoSwapPaint(const CompositableOperation& aPaint) { MOZ_ASSERT(!Finished(), "forgot BeginTransaction?"); - mPaints.push_back(Edit(aPaint)); + mPaints.AppendElement(Edit(aPaint)); } void AddMutant(ShadowableLayer* aLayer) { @@ -121,8 +121,8 @@ } void End() { - mCset.clear(); - mPaints.clear(); + mCset.Clear(); + mPaints.Clear(); mMutants.Clear(); mDestroyedActors.Clear(); mOpen = false; @@ -131,7 +131,7 @@ } bool Empty() const { - return mCset.empty() && mPaints.empty() && mMutants.IsEmpty() + return mCset.IsEmpty() && mPaints.IsEmpty() && mMutants.IsEmpty() && mDestroyedActors.IsEmpty(); } bool RotationChanged() const { @@ -603,7 +603,7 @@ return true; } - if (!mTxn->mPaints.empty()) { + if (!mTxn->mPaints.IsEmpty()) { // With some platforms, telling the drawing backend that there will be no more // drawing for this frame helps with preventing command queues from spanning // across multiple frames. @@ -694,24 +694,22 @@ mTxn->AddEdit(OpSetLayerAttributes(Shadow(shadow), attrs)); } - size_t nCsets = mTxn->mCset.size() + mTxn->mPaints.size(); - if (nCsets == 0 && !mTxn->RotationChanged()) { + if (mTxn->mCset.IsEmpty() && + mTxn->mPaints.IsEmpty() && + !mTxn->RotationChanged()) + { return true; } - auto& cset = info.cset(); - cset.SetCapacity(nCsets); - if (!mTxn->mCset.empty()) { - cset.AppendElements(&mTxn->mCset.front(), mTxn->mCset.size()); - } // Paints after non-paint ops, including attribute changes. See // above. - if (!mTxn->mPaints.empty()) { - cset.AppendElements(&mTxn->mPaints.front(), mTxn->mPaints.size()); + if (!mTxn->mPaints.IsEmpty()) { + mTxn->mCset.AppendElements(mTxn->mPaints); } mWindowOverlayChanged = false; + info.cset() = Move(mTxn->mCset); info.toDestroy() = mTxn->mDestroyedActors; info.fwdTransactionId() = GetFwdTransactionId(); info.id() = aId; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/skia/skia/src/core/SkScan_Path.cpp firefox-trunk-53.0~a1~hg20170115r329516/gfx/skia/skia/src/core/SkScan_Path.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/skia/skia/src/core/SkScan_Path.cpp 2017-01-13 01:02:12.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/skia/skia/src/core/SkScan_Path.cpp 2017-01-16 01:00:11.000000000 +0000 @@ -603,6 +603,19 @@ return (int)floorXX - (xx == floorXX); } +#ifdef SK_RASTERIZE_EVEN_ROUNDING +/** + * Variant of SkDScalarRoundToInt that allows offseting the input by a small fraction + * while trying to preserve intermediate double-precision (rather than directly adding + * the bias to the input at lower single-precision). + */ +static inline int round_biased_to_int(SkScalar x, SkScalar bias) { + double xx = x; + xx += 0.5 + bias; + return (int)floor(xx); +} +#endif + /** * Variant of SkRect::round() that explicitly performs the rounding step (i.e. floor(x + 0.5)) * using double instead of SkScalar (float). It does this by calling SkDScalarRoundToInt(), @@ -620,11 +633,28 @@ * SkASSERT(0 == iright); // <--- fails * iright = SkDScalarRoundToInt(right); * SkASSERT(0 == iright); // <--- succeeds + * + * + * If using SK_RASTERIZE_EVEN_ROUNDING, we need to ensure that bottom and right account for + * edges bounded by this rect being rounded to FDot6 format before being later rounded to an + * integer. For example, a value like 0.499 can be below 0.5, but round to 0.5 as FDot6, which + * would finally round to the integer 1, instead of just rounding to 0. + * + * To handle this, a small bias of half an FDot6 increment is added before actually rounding to + * an integer value. This simulates the rounding of SkScalarRoundToFDot6 without incurring the + * range loss of converting to FDot6 format first, preserving the integer range for the SkIRect. + * Thus, bottom and right are rounded in this manner (biased up), ensuring the rect is large enough. + * Top and left can round as normal since they will round (biased down) to values less or equal + * to the desired rect origin. */ static void round_asymmetric_to_int(const SkRect& src, SkIRect* dst) { SkASSERT(dst); dst->set(round_down_to_int(src.fLeft), round_down_to_int(src.fTop), +#ifdef SK_RASTERIZE_EVEN_ROUNDING + round_biased_to_int(src.fRight, 0.5f / SK_FDot6One), round_biased_to_int(src.fBottom, 0.5f / SK_FDot6One)); +#else SkDScalarRoundToInt(src.fRight), SkDScalarRoundToInt(src.fBottom)); +#endif } void SkScan::FillPath(const SkPath& path, const SkRegion& origClip, diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/tests/crashtests/crashtests.list firefox-trunk-53.0~a1~hg20170115r329516/gfx/tests/crashtests/crashtests.list --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/tests/crashtests/crashtests.list 2017-01-13 01:04:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/tests/crashtests/crashtests.list 2017-01-16 01:02:56.000000000 +0000 @@ -90,7 +90,7 @@ load 593526.xul load 594654-1.xhtml load 595042-1.html -skip-if(stylo) load 595727-1.html # bug 1323671 +load 595727-1.html load 624198.xhtml load 633322-1.html load 633453-1.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/tests/gtest/TestCompositor.cpp firefox-trunk-53.0~a1~hg20170115r329516/gfx/tests/gtest/TestCompositor.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/tests/gtest/TestCompositor.cpp 2017-01-13 01:04:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/tests/gtest/TestCompositor.cpp 2017-01-16 01:02:56.000000000 +0000 @@ -153,7 +153,8 @@ auto backend = aBackends[i]; RefPtr widget = new MockWidget(); - RefPtr proxy = new widget::InProcessCompositorWidget(widget); + CompositorOptions options; + RefPtr proxy = new widget::InProcessCompositorWidget(options, widget); RefPtr compositor = CreateTestCompositor(backend, proxy); RefPtr layerManager = new LayerManagerComposite(compositor); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/thebes/gfxFcPlatformFontList.cpp firefox-trunk-53.0~a1~hg20170115r329516/gfx/thebes/gfxFcPlatformFontList.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/thebes/gfxFcPlatformFontList.cpp 2017-01-13 01:04:38.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/thebes/gfxFcPlatformFontList.cpp 2017-01-16 01:03:39.000000000 +0000 @@ -644,6 +644,7 @@ cairo_scaled_font_t* gfxFontconfigFontEntry::CreateScaledFont(FcPattern* aRenderPattern, + gfxFloat aAdjustedSize, const gfxFontStyle *aStyle, bool aNeedsBold) { @@ -681,11 +682,7 @@ cairo_matrix_t sizeMatrix; cairo_matrix_t identityMatrix; - double adjustedSize = aStyle->size; - if (aStyle->sizeAdjust >= 0.0) { - adjustedSize = aStyle->GetAdjustedSize(GetAspect()); - } - cairo_matrix_init_scale(&sizeMatrix, adjustedSize, adjustedSize); + cairo_matrix_init_scale(&sizeMatrix, aAdjustedSize, aAdjustedSize); cairo_matrix_init_identity(&identityMatrix); if (needsOblique) { @@ -809,10 +806,16 @@ return nullptr; } + double adjustedSize = aFontStyle->size; + if (aFontStyle->sizeAdjust >= 0.0) { + adjustedSize = aFontStyle->GetAdjustedSize(GetAspect()); + } + cairo_scaled_font_t* scaledFont = - CreateScaledFont(renderPattern, aFontStyle, aNeedsBold); + CreateScaledFont(renderPattern, adjustedSize, aFontStyle, aNeedsBold); gfxFont* newFont = - new gfxFontconfigFont(scaledFont, renderPattern, this, aFontStyle, aNeedsBold); + new gfxFontconfigFont(scaledFont, renderPattern, adjustedSize, + this, aFontStyle, aNeedsBold); cairo_scaled_font_destroy(scaledFont); return newFont; @@ -925,11 +928,13 @@ gfxFontconfigFont::gfxFontconfigFont(cairo_scaled_font_t *aScaledFont, FcPattern *aPattern, + gfxFloat aAdjustedSize, gfxFontEntry *aFontEntry, const gfxFontStyle *aFontStyle, bool aNeedsBold) : gfxFontconfigFontBase(aScaledFont, aPattern, aFontEntry, aFontStyle) { + mAdjustedSize = aAdjustedSize; } gfxFontconfigFont::~gfxFontconfigFont() diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/thebes/gfxFcPlatformFontList.h firefox-trunk-53.0~a1~hg20170115r329516/gfx/thebes/gfxFcPlatformFontList.h --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/thebes/gfxFcPlatformFontList.h 2017-01-13 01:04:38.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/thebes/gfxFcPlatformFontList.h 2017-01-16 01:03:39.000000000 +0000 @@ -133,6 +133,7 @@ // helper method for creating cairo font from pattern cairo_scaled_font_t* CreateScaledFont(FcPattern* aRenderPattern, + gfxFloat aAdjustedSize, const gfxFontStyle *aStyle, bool aNeedsBold); @@ -199,6 +200,7 @@ public: gfxFontconfigFont(cairo_scaled_font_t *aScaledFont, FcPattern *aPattern, + gfxFloat aAdjustedSize, gfxFontEntry *aFontEntry, const gfxFontStyle *aFontStyle, bool aNeedsBold); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/gfx/vr/gfxVR.h firefox-trunk-53.0~a1~hg20170115r329516/gfx/vr/gfxVR.h --- firefox-trunk-53.0~a1~hg20170113r329171/gfx/vr/gfxVR.h 2017-01-13 01:05:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/gfx/vr/gfxVR.h 2017-01-16 01:04:33.000000000 +0000 @@ -21,8 +21,8 @@ class PTextureParent; } namespace dom { -enum class GamepadMappingType : uint32_t; -enum class GamepadHand : uint32_t; +enum class GamepadMappingType : uint8_t; +enum class GamepadHand : uint8_t; struct GamepadPoseState; } namespace gfx { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/ipc/chromium/src/base/message_pump_default.cc firefox-trunk-53.0~a1~hg20170115r329516/ipc/chromium/src/base/message_pump_default.cc --- firefox-trunk-53.0~a1~hg20170113r329171/ipc/chromium/src/base/message_pump_default.cc 2017-01-13 01:14:31.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/ipc/chromium/src/base/message_pump_default.cc 2017-01-16 01:14:18.000000000 +0000 @@ -58,7 +58,7 @@ PROFILER_LABEL("MessagePump", "Wait", js::ProfileEntry::Category::OTHER); { - GeckoProfilerSleepRAII profiler_sleep; + mozilla::GeckoProfilerSleepRAII profiler_sleep; event_.Wait(); } } else { @@ -68,7 +68,7 @@ PROFILER_LABEL("MessagePump", "Wait", js::ProfileEntry::Category::OTHER); { - GeckoProfilerSleepRAII profiler_sleep; + mozilla::GeckoProfilerSleepRAII profiler_sleep; event_.TimedWait(delay); } } else { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/ipc/chromium/src/base/process_util_win.cc firefox-trunk-53.0~a1~hg20170115r329516/ipc/chromium/src/base/process_util_win.cc --- firefox-trunk-53.0~a1~hg20170113r329171/ipc/chromium/src/base/process_util_win.cc 2017-01-13 01:14:32.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/ipc/chromium/src/base/process_util_win.cc 2017-01-16 01:14:18.000000000 +0000 @@ -19,9 +19,6 @@ #include "base/win_util.h" #include -#include "prenv.h" - -#include "mozilla/WindowsVersion.h" namespace { @@ -280,13 +277,11 @@ // We want to inherit the std handles so dump() statements and assertion // messages in the child process can be seen - but we *do not* want to // blindly have all handles inherited. Vista and later has a technique - // where only specified handles are inherited - so we use this technique if - // we can. If that technique isn't available (or it fails), we just don't - // inherit anything. This can cause us a problem for Windows XP testing, - // because we sometimes need the handles to get inherited for test logging to - // work. So we also inherit when a specific environment variable is set. + // where only specified handles are inherited - so we use this technique. + // If that fails we just don't inherit anything. DWORD dwCreationFlags = 0; BOOL bInheritHandles = FALSE; + // We use a STARTUPINFOEX, but if we can't do the thread attribute thing, we // just pass the size of a STARTUPINFO. STARTUPINFOEX startup_info_ex; @@ -302,40 +297,29 @@ HANDLE handlesToInherit[2]; int handleCount = 0; - // Don't even bother trying pre-Vista... - if (mozilla::IsVistaOrLater()) { - // setup our handle array first - if we end up with no handles that can - // be inherited we can avoid trying to do the ThreadAttributeList dance... - HANDLE stdOut = ::GetStdHandle(STD_OUTPUT_HANDLE); - HANDLE stdErr = ::GetStdHandle(STD_ERROR_HANDLE); - - if (IsInheritableHandle(stdOut)) - handlesToInherit[handleCount++] = stdOut; - if (stdErr != stdOut && IsInheritableHandle(stdErr)) - handlesToInherit[handleCount++] = stdErr; - - if (handleCount) { - lpAttributeList = CreateThreadAttributeList(handlesToInherit, handleCount); - if (lpAttributeList) { - // it's safe to inherit handles, so arrange for that... - startup_info.cb = sizeof(startup_info_ex); - startup_info.dwFlags |= STARTF_USESTDHANDLES; - startup_info.hStdOutput = stdOut; - startup_info.hStdError = stdErr; - startup_info.hStdInput = INVALID_HANDLE_VALUE; - startup_info_ex.lpAttributeList = lpAttributeList; - dwCreationFlags |= EXTENDED_STARTUPINFO_PRESENT; - bInheritHandles = TRUE; - } + // setup our handle array first - if we end up with no handles that can + // be inherited we can avoid trying to do the ThreadAttributeList dance... + HANDLE stdOut = ::GetStdHandle(STD_OUTPUT_HANDLE); + HANDLE stdErr = ::GetStdHandle(STD_ERROR_HANDLE); + + if (IsInheritableHandle(stdOut)) + handlesToInherit[handleCount++] = stdOut; + if (stdErr != stdOut && IsInheritableHandle(stdErr)) + handlesToInherit[handleCount++] = stdErr; + + if (handleCount) { + lpAttributeList = CreateThreadAttributeList(handlesToInherit, handleCount); + if (lpAttributeList) { + // it's safe to inherit handles, so arrange for that... + startup_info.cb = sizeof(startup_info_ex); + startup_info.dwFlags |= STARTF_USESTDHANDLES; + startup_info.hStdOutput = stdOut; + startup_info.hStdError = stdErr; + startup_info.hStdInput = INVALID_HANDLE_VALUE; + startup_info_ex.lpAttributeList = lpAttributeList; + dwCreationFlags |= EXTENDED_STARTUPINFO_PRESENT; + bInheritHandles = TRUE; } - } else if (PR_GetEnv("MOZ_WIN_INHERIT_STD_HANDLES_PRE_VISTA")) { - // Even if we can't limit what gets inherited, we sometimes want to inherit - // stdout/err for testing purposes. - startup_info.dwFlags |= STARTF_USESTDHANDLES; - startup_info.hStdOutput = ::GetStdHandle(STD_OUTPUT_HANDLE); - startup_info.hStdError = ::GetStdHandle(STD_ERROR_HANDLE); - startup_info.hStdInput = INVALID_HANDLE_VALUE; - bInheritHandles = TRUE; } PROCESS_INFORMATION process_info; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/ipc/glue/WindowsMessageLoop.cpp firefox-trunk-53.0~a1~hg20170115r329516/ipc/glue/WindowsMessageLoop.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/ipc/glue/WindowsMessageLoop.cpp 2017-01-13 01:15:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/ipc/glue/WindowsMessageLoop.cpp 2017-01-16 01:15:10.000000000 +0000 @@ -19,7 +19,6 @@ #include "mozilla/ArrayUtils.h" #include "mozilla/ipc/ProtocolUtils.h" #include "mozilla/PaintTracker.h" -#include "mozilla/WindowsVersion.h" using namespace mozilla; using namespace mozilla::ipc; @@ -1022,7 +1021,7 @@ MOZ_ASSERT(gUIThreadId, "InitUIThread was not called!"); #if defined(ACCESSIBILITY) - if (IsVistaOrLater() && (mFlags & REQUIRE_A11Y_REENTRY)) { + if ((mFlags & REQUIRE_A11Y_REENTRY)) { MOZ_ASSERT(!(mFlags & REQUIRE_DEFERRED_MESSAGE_PROTECTION)); return WaitForSyncNotifyWithA11yReentry(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/ipc/mscom/MainThreadRuntime.cpp firefox-trunk-53.0~a1~hg20170115r329516/ipc/mscom/MainThreadRuntime.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/ipc/mscom/MainThreadRuntime.cpp 2017-01-13 01:16:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/ipc/mscom/MainThreadRuntime.cpp 2017-01-16 01:15:36.000000000 +0000 @@ -10,7 +10,6 @@ #include "mozilla/Assertions.h" #include "mozilla/RefPtr.h" #include "mozilla/UniquePtr.h" -#include "mozilla/WindowsVersion.h" #include "nsDebug.h" #include "nsWindowsHelpers.h" @@ -44,13 +43,6 @@ return; } - // Windows XP doesn't support setting of the COM exception policy, so we'll - // just stop here in that case. - if (!IsVistaOrLater()) { - mInitResult = S_OK; - return; - } - // We are required to initialize security in order to configure global options. mInitResult = InitializeSecurity(); MOZ_ASSERT(SUCCEEDED(mInitResult)); @@ -67,12 +59,8 @@ return; } - // Windows 7 has a policy that is even more strict. We should use that one - // whenever possible. - ULONG_PTR exceptionSetting = IsWin7OrLater() ? - COMGLB_EXCEPTION_DONOT_HANDLE_ANY : - COMGLB_EXCEPTION_DONOT_HANDLE; - mInitResult = globalOpts->Set(COMGLB_EXCEPTION_HANDLING, exceptionSetting); + mInitResult = globalOpts->Set(COMGLB_EXCEPTION_HANDLING, + COMGLB_EXCEPTION_DONOT_HANDLE_ANY); MOZ_ASSERT(SUCCEEDED(mInitResult)); } @@ -177,4 +165,3 @@ } // namespace mscom } // namespace mozilla - diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/ipc/JavaScriptParent.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/ipc/JavaScriptParent.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/ipc/JavaScriptParent.cpp 2017-01-13 01:16:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/ipc/JavaScriptParent.cpp 2017-01-16 01:16:08.000000000 +0000 @@ -165,7 +165,7 @@ JSObject* JavaScriptParent::scopeForTargetObjects() { - // CPWOWs from the child need to point into the parent's unprivileged junk + // CPOWs from the child need to point into the parent's unprivileged junk // scope so that a compromised child cannot compromise the parent. In // practice, this means that a child process can only (a) hold parent // objects alive and (b) invoke them if they are callable. diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/ipc/JavaScriptShared.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/ipc/JavaScriptShared.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/ipc/JavaScriptShared.cpp 2017-01-13 01:16:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/ipc/JavaScriptShared.cpp 2017-01-16 01:16:08.000000000 +0000 @@ -33,10 +33,10 @@ } void -IdToObjectMap::trace(JSTracer* trc, uint64_t minimimId) +IdToObjectMap::trace(JSTracer* trc, uint64_t minimumId) { for (Table::Range r(table_.all()); !r.empty(); r.popFront()) { - if (r.front().key().serialNumber() >= minimimId) + if (r.front().key().serialNumber() >= minimumId) JS::TraceEdge(trc, &r.front().value(), "ipc-object"); } } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/builtin/Array.js firefox-trunk-53.0~a1~hg20170115r329516/js/src/builtin/Array.js --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/builtin/Array.js 2017-01-13 01:16:28.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/builtin/Array.js 2017-01-16 01:16:19.000000000 +0000 @@ -809,54 +809,32 @@ // Steps 5.a-c. var A = IsConstructor(C) ? new C() : []; - // Step 5.c. - var iterator = GetIterator(items, usingIterator); - // Step 5.d. var k = 0; - // Step 5.e. - // These steps cannot be implemented using a for-of loop. - // See . - while (true) { + // Step 5.c, 5.e. + var iteratorWrapper = { [std_iterator]() { return GetIterator(items, usingIterator); } }; + for (var nextValue of allowContentIter(iteratorWrapper)) { // Step 5.e.i. // Disabled for performance reason. We won't hit this case on // normal array, since _DefineDataProperty will throw before it. // We could hit this when |A| is a proxy and it ignores // |_DefineDataProperty|, but it happens only after too long loop. /* - if (k >= 0x1fffffffffffff) { - IteratorCloseThrow(iterator); + if (k >= 0x1fffffffffffff) ThrowTypeError(JSMSG_TOO_LONG_ARRAY); - } */ - // Step 5.e.iii. - var next = callContentFunction(iterator.next, iterator); - if (!IsObject(next)) - ThrowTypeError(JSMSG_NEXT_RETURNED_PRIMITIVE); - - // Step 5.e.iv. - if (next.done) { - A.length = k; - return A; - } - - // Steps 5.e.v. - var nextValue = next.value; - // Steps 5.e.vi-vii. - try { - var mappedValue = mapping ? callContentFunction(mapfn, thisArg, nextValue, k) : nextValue; + var mappedValue = mapping ? callContentFunction(mapfn, thisArg, nextValue, k) : nextValue; - // Steps 5.e.ii (reordered), 5.e.viii. - _DefineDataProperty(A, k++, mappedValue); - } catch (e) { - // Steps 5.e.vi.2, 5.e.ix. - IteratorCloseThrow(iterator); - throw e; - } + // Steps 5.e.ii (reordered), 5.e.viii. + _DefineDataProperty(A, k++, mappedValue); } + + // Step 5.e.iv. + A.length = k; + return A; } // Step 7. diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/builtin/Classes.js firefox-trunk-53.0~a1~hg20170115r329516/js/src/builtin/Classes.js --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/builtin/Classes.js 2017-01-13 01:16:28.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/builtin/Classes.js 2017-01-16 01:16:19.000000000 +0000 @@ -5,7 +5,7 @@ var DefaultDerivedClassConstructor = class extends null { constructor(...args) { - super(...allowContentSpread(args)); + super(...allowContentIter(args)); } }; MakeDefaultConstructor(DefaultDerivedClassConstructor); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/builtin/Map.js firefox-trunk-53.0~a1~hg20170115r329516/js/src/builtin/Map.js --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/builtin/Map.js 2017-01-13 01:16:29.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/builtin/Map.js 2017-01-16 01:16:20.000000000 +0000 @@ -14,44 +14,14 @@ if (!IsCallable(adder)) ThrowTypeError(JSMSG_NOT_FUNCTION, typeof adder); - // Step 6.c. - var iterFn = iterable[std_iterator]; - if (!IsCallable(iterFn)) - ThrowTypeError(JSMSG_NOT_ITERABLE, DecompileArg(0, iterable)); - - var iter = callContentFunction(iterFn, iterable); - if (!IsObject(iter)) - ThrowTypeError(JSMSG_NOT_NONNULL_OBJECT, typeof iter); - - // Step 7 (not applicable). - - // Step 8. - while (true) { - // Step 8.a. - var next = callContentFunction(iter.next, iter); - if (!IsObject(next)) - ThrowTypeError(JSMSG_NOT_NONNULL_OBJECT, typeof next); - - // Step 8.b. - if (next.done) - return; - - // Step 8.c. - var nextItem = next.value; - + // Steps 6.c-8. + for (var nextItem of allowContentIter(iterable)) { // Step 8.d. - if (!IsObject(nextItem)) { - IteratorCloseThrow(iter); + if (!IsObject(nextItem)) ThrowTypeError(JSMSG_INVALID_MAP_ITERABLE, "Map"); - } // Steps 8.e-j. - try { - callContentFunction(adder, map, nextItem[0], nextItem[1]); - } catch (e) { - IteratorCloseThrow(iter); - throw e; - } + callContentFunction(adder, map, nextItem[0], nextItem[1]); } } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/builtin/Set.js firefox-trunk-53.0~a1~hg20170115r329516/js/src/builtin/Set.js --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/builtin/Set.js 2017-01-13 01:16:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/builtin/Set.js 2017-01-16 01:16:25.000000000 +0000 @@ -14,39 +14,9 @@ if (!IsCallable(adder)) ThrowTypeError(JSMSG_NOT_FUNCTION, typeof adder); - // Step 6.c. - var iterFn = iterable[std_iterator]; - if (!IsCallable(iterFn)) - ThrowTypeError(JSMSG_NOT_ITERABLE, DecompileArg(0, iterable)); - - var iter = callContentFunction(iterFn, iterable); - if (!IsObject(iter)) - ThrowTypeError(JSMSG_NOT_NONNULL_OBJECT, typeof iter); - - // Step 7 (not applicable). - - // Step 8. - while (true) { - // Step 8.a. - var next = callContentFunction(iter.next, iter); - if (!IsObject(next)) - ThrowTypeError(JSMSG_NOT_NONNULL_OBJECT, typeof next); - - // Step 8.b. - if (next.done) - return; - - // Step 8.c. - var nextValue = next.value; - - // Steps 8.d-e. - try { - callContentFunction(adder, set, nextValue); - } catch (e) { - IteratorCloseThrow(iter); - throw e; - } - } + // Steps 6.c-8. + for (var nextValue of allowContentIter(iterable)) + callContentFunction(adder, set, nextValue); } /* ES6 20121122 draft 15.16.4.6. */ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/builtin/TypedArray.js firefox-trunk-53.0~a1~hg20170115r329516/js/src/builtin/TypedArray.js --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/builtin/TypedArray.js 2017-01-13 01:16:53.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/builtin/TypedArray.js 2017-01-16 01:16:29.000000000 +0000 @@ -1437,7 +1437,7 @@ // 22.2.2.1.1 IterableToList, step 4.a. var next = callContentFunction(iterator.next, iterator); if (!IsObject(next)) - ThrowTypeError(JSMSG_NEXT_RETURNED_PRIMITIVE); + ThrowTypeError(JSMSG_ITER_METHOD_RETURNED_PRIMITIVE, "next"); // 22.2.2.1.1 IterableToList, step 4.b. if (next.done) @@ -1564,7 +1564,7 @@ // Step 4.a. var next = callContentFunction(iterator.next, iterator); if (!IsObject(next)) - ThrowTypeError(JSMSG_NEXT_RETURNED_PRIMITIVE); + ThrowTypeError(JSMSG_ITER_METHOD_RETURNED_PRIMITIVE, "next"); // Step 4.b. if (next.done) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/builtin/Utilities.js firefox-trunk-53.0~a1~hg20170115r329516/js/src/builtin/Utilities.js --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/builtin/Utilities.js 2017-01-13 01:16:53.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/builtin/Utilities.js 2017-01-16 01:16:29.000000000 +0000 @@ -154,29 +154,6 @@ return iterator; } -// ES2017 draft rev 7.4.6. -// When completion.[[Type]] is throw. -function IteratorCloseThrow(iter) { - // Steps 1-2 (implicit) - - // Step 3. - var returnMethod = GetMethod(iter, "return"); - - // Step 4 (done in caller). - if (returnMethod === undefined) - return; - - try { - // Step 5. - callContentFunction(returnMethod, iter); - } catch (e) { - } - - // Step 6 (done in caller). - - // Steps 7-9 (skipped). -} - var _builtinCtorsCache = {__proto__: null}; function GetBuiltinConstructor(builtinName) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/builtin/WeakMap.js firefox-trunk-53.0~a1~hg20170115r329516/js/src/builtin/WeakMap.js --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/builtin/WeakMap.js 2017-01-13 01:16:53.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/builtin/WeakMap.js 2017-01-16 01:16:29.000000000 +0000 @@ -14,43 +14,13 @@ if (!IsCallable(adder)) ThrowTypeError(JSMSG_NOT_FUNCTION, typeof adder); - // Step 6.c. - var iterFn = iterable[std_iterator]; - if (!IsCallable(iterFn)) - ThrowTypeError(JSMSG_NOT_ITERABLE, DecompileArg(0, iterable)); - - var iter = callContentFunction(iterFn, iterable); - if (!IsObject(iter)) - ThrowTypeError(JSMSG_NOT_NONNULL_OBJECT, typeof iter); - - // Step 7 (not applicable). - - // Step 8. - while (true) { - // Step 8.a. - var next = callContentFunction(iter.next, iter); - if (!IsObject(next)) - ThrowTypeError(JSMSG_NOT_NONNULL_OBJECT, typeof next); - - // Step 8.b. - if (next.done) - return; - - // Step 8.c. - var nextItem = next.value; - + // Steps 6.c-8. + for (var nextItem of allowContentIter(iterable)) { // Step 8.d. - if (!IsObject(nextItem)) { - IteratorCloseThrow(iter); + if (!IsObject(nextItem)) ThrowTypeError(JSMSG_INVALID_MAP_ITERABLE, "WeakMap"); - } // Steps 8.e-j. - try { - callContentFunction(adder, map, nextItem[0], nextItem[1]); - } catch (e) { - IteratorCloseThrow(iter); - throw e; - } + callContentFunction(adder, map, nextItem[0], nextItem[1]); } } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/builtin/WeakSet.js firefox-trunk-53.0~a1~hg20170115r329516/js/src/builtin/WeakSet.js --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/builtin/WeakSet.js 2017-01-13 01:16:53.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/builtin/WeakSet.js 2017-01-16 01:16:30.000000000 +0000 @@ -14,39 +14,9 @@ if (!IsCallable(adder)) ThrowTypeError(JSMSG_NOT_FUNCTION, typeof adder); - // Step 6.c. - var iterFn = iterable[std_iterator]; - if (!IsCallable(iterFn)) - ThrowTypeError(JSMSG_NOT_ITERABLE, DecompileArg(0, iterable)); - - var iter = callContentFunction(iterFn, iterable); - if (!IsObject(iter)) - ThrowTypeError(JSMSG_NOT_NONNULL_OBJECT, typeof iter); - - // Step 7 (not applicable). - - // Step 8. - while (true) { - // Step 8.a. - var next = callContentFunction(iter.next, iter); - if (!IsObject(next)) - ThrowTypeError(JSMSG_NOT_NONNULL_OBJECT, typeof next); - - // Step 8.b. - if (next.done) - return; - - // Step 8.c. - var nextValue = next.value; - - // Steps 8.d-e. - try { - callContentFunction(adder, set, nextValue); - } catch (e) { - IteratorCloseThrow(iter); - throw e; - } - } + // Steps 6.c-8. + for (var nextValue of allowContentIter(iterable)) + callContentFunction(adder, set, nextValue); } // 23.4.3.1 diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/frontend/BytecodeEmitter.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/src/frontend/BytecodeEmitter.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/frontend/BytecodeEmitter.cpp 2017-01-13 01:17:35.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/frontend/BytecodeEmitter.cpp 2017-01-16 01:17:18.000000000 +0000 @@ -58,6 +58,7 @@ class BreakableControl; class LabelControl; class LoopControl; +class ForOfLoopControl; class TryFinallyControl; static bool @@ -152,6 +153,13 @@ template <> bool +BytecodeEmitter::NestableControl::is() const +{ + return kind_ == StatementKind::ForOfLoop; +} + +template <> +bool BytecodeEmitter::NestableControl::is() const { return kind_ == StatementKind::Try || kind_ == StatementKind::Finally; @@ -270,6 +278,64 @@ } }; +class ForOfLoopControl : public LoopControl +{ + // The stack depth of the iterator. + int32_t iterDepth_; + + // for-of loops, when throwing from non-iterator code (i.e. from the body + // or from evaluating the LHS of the loop condition), need to call + // IteratorClose. If IteratorClose itself throws, we must not re-call + // IteratorClose. Since non-local jumps like break and return call + // IteratorClose, whenever a non-local jump is emitted, we must terminate + // the current JSTRY_ITERCLOSE note to skip the non-local jump code, then + // start a new one. + // + // Visually, + // + // for (x of y) { + // ... instantiate ForOfLoopControl + // ... + <-- iterCloseTryStart_ points to right before + // ... assignment to loop variable + // ... ^ + // ... | + // if (...) v + // + call finishIterCloseTryNote before |break| + // above range is noted with JSTRY_ITERCLOSE + // + // break; <-- break and IteratorClose are not inside + // JSTRY_ITERCLOSE note + // + // call startNewIterCloseTryNote after |break| + // + <-- next iterCloseTryStart_ points here + // ... | + // ... ~ + // } + ptrdiff_t iterCloseTryStart_; + + public: + ForOfLoopControl(BytecodeEmitter* bce, int32_t iterDepth) + : LoopControl(bce, StatementKind::ForOfLoop), + iterDepth_(iterDepth), + iterCloseTryStart_(-1) + { + MOZ_ASSERT(bce->stackDepth >= iterDepth); + } + + MOZ_MUST_USE bool finishIterCloseTryNote(BytecodeEmitter* bce) { + ptrdiff_t end = bce->offset(); + MOZ_ASSERT(end >= iterCloseTryStart_); + if (end != iterCloseTryStart_) + return bce->tryNoteList.append(JSTRY_ITERCLOSE, iterDepth_, iterCloseTryStart_, end); + return true; + } + + void startNewIterCloseTryNote(BytecodeEmitter* bce) { + MOZ_ASSERT(bce->offset() > iterCloseTryStart_); + iterCloseTryStart_ = bce->offset(); + } +}; + class TryFinallyControl : public BytecodeEmitter::NestableControl { bool emittingSubroutine_; @@ -1503,6 +1569,156 @@ return true; } +class MOZ_STACK_CLASS IfThenElseEmitter +{ + BytecodeEmitter* bce_; + JumpList jumpAroundThen_; + JumpList jumpsAroundElse_; + unsigned noteIndex_; + int32_t thenDepth_; +#ifdef DEBUG + int32_t pushed_; + bool calculatedPushed_; +#endif + enum State { + Start, + If, + Cond, + IfElse, + Else, + End + }; + State state_; + + public: + explicit IfThenElseEmitter(BytecodeEmitter* bce) + : bce_(bce), + noteIndex_(-1), + thenDepth_(0), +#ifdef DEBUG + pushed_(0), + calculatedPushed_(false), +#endif + state_(Start) + {} + + ~IfThenElseEmitter() + {} + + private: + bool emitIf(State nextState) { + MOZ_ASSERT(state_ == Start || state_ == Else); + MOZ_ASSERT(nextState == If || nextState == IfElse || nextState == Cond); + + // Clear jumpAroundThen_ offset that points previous JSOP_IFEQ. + if (state_ == Else) + jumpAroundThen_ = JumpList(); + + // Emit an annotated branch-if-false around the then part. + SrcNoteType type = nextState == If ? SRC_IF : nextState == IfElse ? SRC_IF_ELSE : SRC_COND; + if (!bce_->newSrcNote(type, ¬eIndex_)) + return false; + if (!bce_->emitJump(JSOP_IFEQ, &jumpAroundThen_)) + return false; + + // To restore stack depth in else part, save depth of the then part. +#ifdef DEBUG + // If DEBUG, this is also necessary to calculate |pushed_|. + thenDepth_ = bce_->stackDepth; +#else + if (nextState == IfElse || nextState == Cond) + thenDepth_ = bce_->stackDepth; +#endif + state_ = nextState; + return true; + } + + public: + bool emitIf() { + return emitIf(If); + } + + bool emitCond() { + return emitIf(Cond); + } + + bool emitIfElse() { + return emitIf(IfElse); + } + + bool emitElse() { + MOZ_ASSERT(state_ == IfElse || state_ == Cond); + + calculateOrCheckPushed(); + + // Emit a jump from the end of our then part around the else part. The + // patchJumpsToTarget call at the bottom of this function will fix up + // the offset with jumpsAroundElse value. + if (!bce_->emitJump(JSOP_GOTO, &jumpsAroundElse_)) + return false; + + // Ensure the branch-if-false comes here, then emit the else. + if (!bce_->emitJumpTargetAndPatch(jumpAroundThen_)) + return false; + + // Annotate SRC_IF_ELSE or SRC_COND with the offset from branch to + // jump, for IonMonkey's benefit. We can't just "back up" from the pc + // of the else clause, because we don't know whether an extended + // jump was required to leap from the end of the then clause over + // the else clause. + if (!bce_->setSrcNoteOffset(noteIndex_, 0, + jumpsAroundElse_.offset - jumpAroundThen_.offset)) + { + return false; + } + + // Restore stack depth of the then part. + bce_->stackDepth = thenDepth_; + state_ = Else; + return true; + } + + bool emitEnd() { + MOZ_ASSERT(state_ == If || state_ == Else); + + calculateOrCheckPushed(); + + if (state_ == If) { + // No else part, fixup the branch-if-false to come here. + if (!bce_->emitJumpTargetAndPatch(jumpAroundThen_)) + return false; + } + + // Patch all the jumps around else parts. + if (!bce_->emitJumpTargetAndPatch(jumpsAroundElse_)) + return false; + + state_ = End; + return true; + } + + void calculateOrCheckPushed() { +#ifdef DEBUG + if (!calculatedPushed_) { + pushed_ = bce_->stackDepth - thenDepth_; + calculatedPushed_ = true; + } else { + MOZ_ASSERT(pushed_ == bce_->stackDepth - thenDepth_); + } +#endif + } + +#ifdef DEBUG + int32_t pushed() const { + return pushed_; + } + + int32_t popped() const { + return -pushed_; + } +#endif +}; + BytecodeEmitter::BytecodeEmitter(BytecodeEmitter* parent, Parser* parser, SharedContext* sc, HandleScript script, Handle lazyScript, @@ -2019,22 +2235,43 @@ namespace { -class NonLocalExitControl { +class NonLocalExitControl +{ + public: + enum Kind + { + // IteratorClose is handled especially inside the exception unwinder. + Throw, + + // A 'continue' statement does not call IteratorClose for the loop it + // is continuing, i.e. excluding the target loop. + Continue, + + // A 'break' or 'return' statement does call IteratorClose for the + // loop it is breaking out of or returning from, i.e. including the + // target loop. + Break, + Return + }; + + private: BytecodeEmitter* bce_; const uint32_t savedScopeNoteIndex_; const int savedDepth_; uint32_t openScopeNoteIndex_; + Kind kind_; NonLocalExitControl(const NonLocalExitControl&) = delete; MOZ_MUST_USE bool leaveScope(BytecodeEmitter::EmitterScope* scope); public: - explicit NonLocalExitControl(BytecodeEmitter* bce) + NonLocalExitControl(BytecodeEmitter* bce, Kind kind) : bce_(bce), savedScopeNoteIndex_(bce->scopeNoteList.length()), savedDepth_(bce->stackDepth), - openScopeNoteIndex_(bce->innermostEmitterScope->noteIndex()) + openScopeNoteIndex_(bce->innermostEmitterScope->noteIndex()), + kind_(kind) { } ~NonLocalExitControl() { @@ -2081,6 +2318,14 @@ EmitterScope* es = bce_->innermostEmitterScope; int npops = 0; + bool hasForOfLoopsWithIteratorClose = false; + + // IteratorClose is handled specially in the exception unwinder. For + // 'continue', 'break', and 'return' statements, emit IteratorClose + // bytecode inline. 'continue' statements do not call IteratorClose for + // the loop they are continuing. + bool emitIteratorClose = kind_ == Continue || kind_ == Break || kind_ == Return; + bool emitIteratorCloseAtTarget = emitIteratorClose && kind_ != Continue; auto flushPops = [&npops](BytecodeEmitter* bce) { if (npops && !bce->flushPops(&npops)) @@ -2120,15 +2365,29 @@ } case StatementKind::ForOfLoop: - npops += 2; + // The iterator and the current value are on the stack. + // + if (emitIteratorClose) { + hasForOfLoopsWithIteratorClose = true; + if (!control->as().finishIterCloseTryNote(bce_)) + return false; + if (!bce_->emit1(JSOP_POP)) // ... ITER + return false; + if (!bce_->emitIteratorClose()) // ... + return false; + } else { + if (!bce_->emit1(JSOP_POP)) // ... ITER + return false; + if (!bce_->emit1(JSOP_POP)) // ... + return false; + } break; case StatementKind::ForInLoop: - /* The iterator and the current value are on the stack. */ - npops += 1; - if (!flushPops(bce_)) + // The iterator and the current value are on the stack. + if (!bce_->emit1(JSOP_POP)) // ... ITER return false; - if (!bce_->emit1(JSOP_ENDITER)) + if (!bce_->emit1(JSOP_ENDITER)) // ... return false; break; @@ -2137,13 +2396,45 @@ } } + if (target && target->is() && emitIteratorCloseAtTarget) { + hasForOfLoopsWithIteratorClose = true; + if (!target->as().finishIterCloseTryNote(bce_)) + return false; + + // The iterator and the current value are on the stack. At the level + // of the target block, there's bytecode after the loop that will pop + // the iterator and the value, so duplicate the iterator and call + // IteratorClose. + if (!bce_->emitDupAt(1)) // ... ITER RESULT ITER + return false; + if (!bce_->emitIteratorClose()) // ... ITER RESULT + return false; + } + EmitterScope* targetEmitterScope = target ? target->emitterScope() : bce_->varEmitterScope; for (; es != targetEmitterScope; es = es->enclosingInFrame()) { if (!leaveScope(es)) return false; } - return flushPops(bce_); + if (!flushPops(bce_)) + return false; + + // See comment in ForOfLoopControl. + if (hasForOfLoopsWithIteratorClose) { + for (NestableControl* control = bce_->innermostNestableControl; + control != target; + control = control->enclosing()) + { + if (control->is()) + control->as().startNewIterCloseTryNote(bce_); + } + + if (target && target->is() && emitIteratorCloseAtTarget) + target->as().startNewIterCloseTryNote(bce_); + } + + return true; } } // anonymous namespace @@ -2151,7 +2442,9 @@ bool BytecodeEmitter::emitGoto(NestableControl* target, JumpList* jumplist, SrcNoteType noteType) { - NonLocalExitControl nle(this); + NonLocalExitControl nle(this, noteType == SRC_CONTINUE + ? NonLocalExitControl::Continue + : NonLocalExitControl::Break); if (!nle.prepareForNonLocalJump(target)) return false; @@ -4538,56 +4831,202 @@ } bool -BytecodeEmitter::emitDefault(ParseNode* defaultExpr, ParseNode* pattern) +BytecodeEmitter::emitIteratorClose(Maybe yieldStarTryStart, bool allowSelfHosted) { - if (!emit1(JSOP_DUP)) // VALUE VALUE - return false; - if (!emit1(JSOP_UNDEFINED)) // VALUE VALUE UNDEFINED - return false; - if (!emit1(JSOP_STRICTEQ)) // VALUE EQL? + MOZ_ASSERT(allowSelfHosted || emitterMode != BytecodeEmitter::SelfHosting, + ".close() on iterators is prohibited in self-hosted code because it " + "can run user-modifiable iteration code"); + + // Generate inline logic corresponding to IteratorClose (ES 7.4.6). + // + // Callers need to ensure that the iterator object is at the top of the + // stack. + + if (!emit1(JSOP_DUP)) // ... ITER ITER return false; - // Emit source note to enable ion compilation. - if (!newSrcNote(SRC_IF)) + + // Step 3. + // + // Get the "return" method. + if (!emitAtomOp(cx->names().return_, JSOP_CALLPROP)) // ... ITER RET return false; - JumpList jump; - if (!emitJump(JSOP_IFEQ, &jump)) // VALUE + + // Step 4. + // + // Do nothing if "return" is null or undefined. + IfThenElseEmitter ifReturnMethodIsDefined(this); + if (!emit1(JSOP_DUP)) // ... ITER RET RET return false; - if (!emit1(JSOP_POP)) // . + if (!emit1(JSOP_UNDEFINED)) // ... ITER RET RET UNDEFINED return false; - if (!emitInitializerInBranch(defaultExpr, pattern)) // DEFAULTVALUE + if (!emit1(JSOP_NE)) // ... ITER RET ?NEQL return false; - if (!emitJumpTargetAndPatch(jump)) + if (!ifReturnMethodIsDefined.emitIfElse()) return false; - return true; -} - -bool -BytecodeEmitter::setOrEmitSetFunName(ParseNode* maybeFun, HandleAtom name, - FunctionPrefixKind prefixKind) -{ - if (maybeFun->isKind(PNK_FUNCTION)) { - // Function doesn't have 'name' property at this point. - // Set function's name at compile time. - RootedFunction fun(cx, maybeFun->pn_funbox->function()); - // Single node can be emitted multiple times if it appears in - // array destructuring default. If function already has a name, - // just return. - if (fun->hasCompileTimeName()) { -#ifdef DEBUG - RootedAtom funName(cx, NameToFunctionName(cx, name, prefixKind)); - if (!funName) - return false; - MOZ_ASSERT(funName == maybeFun->pn_funbox->function()->compileTimeName()); -#endif - return true; - } + // Steps 5, 8. + // + // Call "return" if it is not undefined or null, and check that it returns + // an Object. + if (!emit1(JSOP_SWAP)) // ... RET ITER + return false; - RootedAtom funName(cx, NameToFunctionName(cx, name, prefixKind)); - if (!funName) + // ES 14.4.13, yield * AssignmentExpression, step 5.c + // + // When emitting iterator.return() for yield* forced return, we need to + // pass the argument passed to Generator.prototype.return to the return + // method. + if (yieldStarTryStart) { + IfThenElseEmitter ifGeneratorClosing(this); + if (!emitDupAt(2)) // ... FTYPE FVALUE RET ITER FVALUE return false; - fun->setCompileTimeName(name); - return true; + if (!emit1(JSOP_ISGENCLOSING)) // ... FTYPE FVALUE RET ITER FVALUE CLOSING + return false; + if (!emit1(JSOP_SWAP)) // ... FTYPE FVALUE RET ITER CLOSING FVALUE + return false; + if (!emit1(JSOP_POP)) // ... FTYPE FVALUE RET ITER CLOSING + return false; + if (!ifGeneratorClosing.emitIfElse()) // ... FTYPE FVALUE RET ITER + return false; + + if (!emit1(JSOP_GETRVAL)) // ... FTYPE FVALUE RET ITER RVAL + return false; + if (!emitAtomOp(cx->names().value, JSOP_GETPROP)) // ... FTYPE FVALUE RET ITER VALUE + return false; + if (!emitCall(JSOP_CALL, 1)) // ... FTYPE FVALUE RESULT + return false; + checkTypeSet(JSOP_CALL); + if (!emitCheckIsObj(CheckIsObjectKind::IteratorReturn)) // ... FTYPE FVALUE RESULT + return false; + + IfThenElseEmitter ifReturnDone(this); + if (!emit1(JSOP_DUP)) // ITER OLDRESULT FTYPE FVALUE RESULT RESULT + return false; + if (!emitAtomOp(cx->names().done, JSOP_GETPROP)) // ITER OLDRESULT FTYPE FVALUE RESULT DONE + return false; + if (!ifReturnDone.emitIfElse()) // ITER OLDRESULT FTYPE FVALUE RESULT + return false; + if (!emitAtomOp(cx->names().value, JSOP_GETPROP)) // ITER OLDRESULT FTYPE FVALUE VALUE + return false; + if (!emitPrepareIteratorResult()) // ITER OLDRESULT FTYPE FVALUE VALUE RESULT + return false; + if (!emit1(JSOP_SWAP)) // ITER OLDRESULT FTYPE FVALUE RESULT VALUE + return false; + if (!emitFinishIteratorResult(true)) // ITER OLDRESULT FTYPE FVALUE RESULT + return false; + if (!emit1(JSOP_DUP)) // ITER OLDRESULT FTYPE FVALUE RESULT RESULT + return false; + if (!emit1(JSOP_SETRVAL)) // ITER OLDRESULT FTYPE FVALUE RESULT + return false; + if (!ifReturnDone.emitElse()) // ITER OLDRESULT FTYPE FVALUE RESULT + return false; + int32_t savedDepth = this->stackDepth; + if (!emit2(JSOP_UNPICK, 3)) // ITER RESULT OLDRESULT FTYPE FVALUE + return false; + if (!emitUint16Operand(JSOP_POPN, 3)) // ITER RESULT + return false; + JumpList beq; + JumpTarget breakTarget{ -1 }; + if (!emitBackwardJump(JSOP_GOTO, *yieldStarTryStart, &beq, &breakTarget)) // ITER RESULT + return false; + this->stackDepth = savedDepth; + if (!ifReturnDone.emitEnd()) + return false; + + if (!ifGeneratorClosing.emitElse()) // ... FTYPE FVALUE RET ITER + return false; + if (!emitCall(JSOP_CALL, 0)) // ... FTYPE FVALUE RESULT + return false; + checkTypeSet(JSOP_CALL); + if (!emitCheckIsObj(CheckIsObjectKind::IteratorReturn)) // ... FTYPE FVALUE RESULT + return false; + + if (!ifGeneratorClosing.emitEnd()) + return false; + } else { + if (!emitCall(JSOP_CALL, 0)) // ... RESULT + return false; + checkTypeSet(JSOP_CALL); + if (!emitCheckIsObj(CheckIsObjectKind::IteratorReturn)) // ... RESULT + return false; + } + + if (!ifReturnMethodIsDefined.emitElse()) + return false; + if (!emit1(JSOP_POP)) // ... ITER + return false; + if (!ifReturnMethodIsDefined.emitEnd()) + return false; + + return emit1(JSOP_POP); // ... +} + +template +bool +BytecodeEmitter::wrapWithDestructuringIteratorCloseTryNote(int32_t iterDepth, InnerEmitter emitter) +{ + MOZ_ASSERT(this->stackDepth >= iterDepth); + + ptrdiff_t start = offset(); + if (!emitter(this)) + return false; + ptrdiff_t end = offset(); + if (start != end) + return tryNoteList.append(JSTRY_DESTRUCTURING_ITERCLOSE, iterDepth, start, end); + return true; +} + +bool +BytecodeEmitter::emitDefault(ParseNode* defaultExpr, ParseNode* pattern) +{ + if (!emit1(JSOP_DUP)) // VALUE VALUE + return false; + if (!emit1(JSOP_UNDEFINED)) // VALUE VALUE UNDEFINED + return false; + if (!emit1(JSOP_STRICTEQ)) // VALUE EQL? + return false; + // Emit source note to enable ion compilation. + if (!newSrcNote(SRC_IF)) + return false; + JumpList jump; + if (!emitJump(JSOP_IFEQ, &jump)) // VALUE + return false; + if (!emit1(JSOP_POP)) // . + return false; + if (!emitInitializerInBranch(defaultExpr, pattern)) // DEFAULTVALUE + return false; + if (!emitJumpTargetAndPatch(jump)) + return false; + return true; +} + +bool +BytecodeEmitter::setOrEmitSetFunName(ParseNode* maybeFun, HandleAtom name, + FunctionPrefixKind prefixKind) +{ + if (maybeFun->isKind(PNK_FUNCTION)) { + // Function doesn't have 'name' property at this point. + // Set function's name at compile time. + RootedFunction fun(cx, maybeFun->pn_funbox->function()); + + // Single node can be emitted multiple times if it appears in + // array destructuring default. If function already has a name, + // just return. + if (fun->hasCompileTimeName()) { +#ifdef DEBUG + RootedAtom funName(cx, NameToFunctionName(cx, name, prefixKind)); + if (!funName) + return false; + MOZ_ASSERT(funName == maybeFun->pn_funbox->function()->compileTimeName()); +#endif + return true; + } + + RootedAtom funName(cx, NameToFunctionName(cx, name, prefixKind)); + if (!funName) + return false; + fun->setCompileTimeName(name); + return true; } uint32_t nameIndex; @@ -4625,156 +5064,6 @@ return emitInitializer(initializer, pattern); } -class MOZ_STACK_CLASS IfThenElseEmitter -{ - BytecodeEmitter* bce_; - JumpList jumpAroundThen_; - JumpList jumpsAroundElse_; - unsigned noteIndex_; - int32_t thenDepth_; -#ifdef DEBUG - int32_t pushed_; - bool calculatedPushed_; -#endif - enum State { - Start, - If, - Cond, - IfElse, - Else, - End - }; - State state_; - - public: - explicit IfThenElseEmitter(BytecodeEmitter* bce) - : bce_(bce), - noteIndex_(-1), - thenDepth_(0), -#ifdef DEBUG - pushed_(0), - calculatedPushed_(false), -#endif - state_(Start) - {} - - ~IfThenElseEmitter() - {} - - private: - bool emitIf(State nextState) { - MOZ_ASSERT(state_ == Start || state_ == Else); - MOZ_ASSERT(nextState == If || nextState == IfElse || nextState == Cond); - - // Clear jumpAroundThen_ offset that points previous JSOP_IFEQ. - if (state_ == Else) - jumpAroundThen_ = JumpList(); - - // Emit an annotated branch-if-false around the then part. - SrcNoteType type = nextState == If ? SRC_IF : nextState == IfElse ? SRC_IF_ELSE : SRC_COND; - if (!bce_->newSrcNote(type, ¬eIndex_)) - return false; - if (!bce_->emitJump(JSOP_IFEQ, &jumpAroundThen_)) - return false; - - // To restore stack depth in else part, save depth of the then part. -#ifdef DEBUG - // If DEBUG, this is also necessary to calculate |pushed_|. - thenDepth_ = bce_->stackDepth; -#else - if (nextState == IfElse || nextState == Cond) - thenDepth_ = bce_->stackDepth; -#endif - state_ = nextState; - return true; - } - - public: - bool emitIf() { - return emitIf(If); - } - - bool emitCond() { - return emitIf(Cond); - } - - bool emitIfElse() { - return emitIf(IfElse); - } - - bool emitElse() { - MOZ_ASSERT(state_ == IfElse || state_ == Cond); - - calculateOrCheckPushed(); - - // Emit a jump from the end of our then part around the else part. The - // patchJumpsToTarget call at the bottom of this function will fix up - // the offset with jumpsAroundElse value. - if (!bce_->emitJump(JSOP_GOTO, &jumpsAroundElse_)) - return false; - - // Ensure the branch-if-false comes here, then emit the else. - if (!bce_->emitJumpTargetAndPatch(jumpAroundThen_)) - return false; - - // Annotate SRC_IF_ELSE or SRC_COND with the offset from branch to - // jump, for IonMonkey's benefit. We can't just "back up" from the pc - // of the else clause, because we don't know whether an extended - // jump was required to leap from the end of the then clause over - // the else clause. - if (!bce_->setSrcNoteOffset(noteIndex_, 0, - jumpsAroundElse_.offset - jumpAroundThen_.offset)) - { - return false; - } - - // Restore stack depth of the then part. - bce_->stackDepth = thenDepth_; - state_ = Else; - return true; - } - - bool emitEnd() { - MOZ_ASSERT(state_ == If || state_ == Else); - - calculateOrCheckPushed(); - - if (state_ == If) { - // No else part, fixup the branch-if-false to come here. - if (!bce_->emitJumpTargetAndPatch(jumpAroundThen_)) - return false; - } - - // Patch all the jumps around else parts. - if (!bce_->emitJumpTargetAndPatch(jumpsAroundElse_)) - return false; - - state_ = End; - return true; - } - - void calculateOrCheckPushed() { -#ifdef DEBUG - if (!calculatedPushed_) { - pushed_ = bce_->stackDepth - thenDepth_; - calculatedPushed_ = true; - } else { - MOZ_ASSERT(pushed_ == bce_->stackDepth - thenDepth_); - } -#endif - } - -#ifdef DEBUG - int32_t pushed() const { - return pushed_; - } - - int32_t popped() const { - return -pushed_; - } -#endif -}; - bool BytecodeEmitter::emitDestructuringOpsArray(ParseNode* pattern, DestructuringFlavor flav) { @@ -4784,6 +5073,9 @@ // Here's pseudo code for |let [a, b, , c=y, ...d] = x;| // + // Lines that are annotated "covered by trynote" mean that upon throwing + // an exception, IteratorClose is called on iter only if done is false. + // // let x, y; // let a, b, c, d; // let iter, lref, result, done, value; // stack values @@ -4791,7 +5083,7 @@ // iter = x[Symbol.iterator](); // // // ==== emitted by loop for a ==== - // lref = GetReference(a); + // lref = GetReference(a); // covered by trynote // // result = iter.next(); // done = result.done; @@ -4801,10 +5093,10 @@ // else // value = result.value; // - // SetOrInitialize(lref, value); + // SetOrInitialize(lref, value); // covered by trynote // // // ==== emitted by loop for b ==== - // lref = GetReference(b); + // lref = GetReference(b); // covered by trynote // // if (done) { // value = undefined; @@ -4817,7 +5109,7 @@ // value = result.value; // } // - // SetOrInitialize(lref, value); + // SetOrInitialize(lref, value); // covered by trynote // // // ==== emitted by loop for elision ==== // if (done) { @@ -4832,7 +5124,7 @@ // } // // // ==== emitted by loop for c ==== - // lref = GetReference(c); + // lref = GetReference(c); // covered by trynote // // if (done) { // value = undefined; @@ -4846,19 +5138,23 @@ // } // // if (value === undefined) - // value = y; + // value = y; // covered by trynote // - // SetOrInitialize(lref, value); + // SetOrInitialize(lref, value); // covered by trynote // // // ==== emitted by loop for d ==== - // lref = GetReference(d); + // lref = GetReference(d); // covered by trynote // // if (done) // value = []; // else // value = [...iter]; // - // SetOrInitialize(lref, value); + // SetOrInitialize(lref, value); // covered by trynote + // + // // === emitted after loop === + // if (!done) + // IteratorClose(iter); // Use an iterator to destructure the RHS, instead of index lookup. We // must leave the *original* value on the stack. @@ -4867,25 +5163,61 @@ if (!emitIterator()) // ... OBJ ITER return false; + // For an empty pattern [], call IteratorClose unconditionally. Nothing + // else needs to be done. + if (!pattern->pn_head) + return emitIteratorClose(); // ... OBJ + + // Push an initial FALSE value for DONE. + if (!emit1(JSOP_FALSE)) // ... OBJ ITER FALSE + return false; + + // JSTRY_DESTRUCTURING_ITERCLOSE expects the iterator and the done value + // to be the second to top and the top of the stack, respectively. + // IteratorClose is called upon exception only if done is false. + int32_t tryNoteDepth = stackDepth; + for (ParseNode* member = pattern->pn_head; member; member = member->pn_next) { - bool isHead = member == pattern->pn_head; - bool hasNext = !!member->pn_next; + bool isFirst = member == pattern->pn_head; + DebugOnly hasNext = !!member->pn_next; - if (member->isKind(PNK_SPREAD)) { - size_t emitted = 0; - if (!emitDestructuringLHSRef(member, &emitted)) // ... OBJ ITER ?DONE *LREF + size_t emitted = 0; + + // Spec requires LHS reference to be evaluated first. + ParseNode* lhsPattern = member; + if (lhsPattern->isKind(PNK_ASSIGN)) + lhsPattern = lhsPattern->pn_left; + + bool isElision = lhsPattern->isKind(PNK_ELISION); + if (!isElision) { + auto emitLHSRef = [lhsPattern, &emitted](BytecodeEmitter* bce) { + return bce->emitDestructuringLHSRef(lhsPattern, &emitted); // ... OBJ ITER DONE *LREF + }; + if (!wrapWithDestructuringIteratorCloseTryNote(tryNoteDepth, emitLHSRef)) return false; + } + // Pick the DONE value to the top of the stack. + if (emitted) { + if (!emit2(JSOP_PICK, emitted)) // ... OBJ ITER *LREF DONE + return false; + } + + if (isFirst) { + // If this element is the first, DONE is always FALSE, so pop it. + // + // Non-first elements should emit if-else depending on the + // member pattern, below. + if (!emit1(JSOP_POP)) // ... OBJ ITER *LREF + return false; + } + + if (member->isKind(PNK_SPREAD)) { IfThenElseEmitter ifThenElse(this); - if (!isHead) { + if (!isFirst) { // If spread is not the first element of the pattern, // iterator can already be completed. - // ... OBJ ITER DONE *LREF - if (emitted) { - if (!emit2(JSOP_PICK, emitted)) // ... OBJ ITER *LREF DONE - return false; - } - + // ... OBJ ITER *LREF DONE if (!ifThenElse.emitIfElse()) // ... OBJ ITER *LREF return false; @@ -4908,13 +5240,22 @@ if (!emit1(JSOP_POP)) // ... OBJ ITER *LREF ARRAY return false; - if (!isHead) { + if (!isFirst) { if (!ifThenElse.emitEnd()) return false; MOZ_ASSERT(ifThenElse.pushed() == 1); } - if (!emitSetOrInitializeDestructuring(member, flav)) // ... OBJ ITER + // At this point the iterator is done. Unpick a TRUE value for DONE above ITER. + if (!emit1(JSOP_TRUE)) // ... OBJ ITER *LREF ARRAY TRUE + return false; + if (!emit2(JSOP_UNPICK, emitted + 1)) // ... OBJ ITER TRUE *LREF ARRAY + return false; + + auto emitAssignment = [member, flav](BytecodeEmitter* bce) { + return bce->emitSetOrInitializeDestructuring(member, flav); // ... OBJ ITER TRUE + }; + if (!wrapWithDestructuringIteratorCloseTryNote(tryNoteDepth, emitAssignment)) return false; MOZ_ASSERT(!hasNext); @@ -4922,63 +5263,30 @@ } ParseNode* pndefault = nullptr; - ParseNode* subpattern = member; - if (subpattern->isKind(PNK_ASSIGN)) { - pndefault = subpattern->pn_right; - subpattern = subpattern->pn_left; - } + if (member->isKind(PNK_ASSIGN)) + pndefault = member->pn_right; - bool isElision = subpattern->isKind(PNK_ELISION); - - MOZ_ASSERT(!subpattern->isKind(PNK_SPREAD)); - - size_t emitted = 0; - if (!isElision) { - if (!emitDestructuringLHSRef(subpattern, &emitted)) // ... OBJ ITER ?DONE *LREF - return false; - } + MOZ_ASSERT(!member->isKind(PNK_SPREAD)); IfThenElseEmitter ifAlreadyDone(this); - if (!isHead) { - // If this element is not the first element of the pattern, - // iterator can already be completed. - // ... OBJ ITER DONE *LREF - if (emitted) { - if (hasNext) { - if (!emitDupAt(emitted)) // ... OBJ ITER DONE *LREF DONE - return false; - } else { - if (!emit2(JSOP_PICK, emitted)) // ... OBJ ITER *LREF DONE - return false; - } - } else { - if (hasNext) { - // The position of LREF in the following stack comment - // isn't accurate for the operation, but it's equivalent - // since LREF is nothing - if (!emit1(JSOP_DUP)) // ... OBJ ITER DONE *LREF DONE - return false; - } - } - if (!ifAlreadyDone.emitIfElse()) // ... OBJ ITER ?DONE *LREF + if (!isFirst) { + // ... OBJ ITER *LREF DONE + if (!ifAlreadyDone.emitIfElse()) // ... OBJ ITER *LREF return false; - if (!emit1(JSOP_UNDEFINED)) // ... OBJ ITER ?DONE *LREF UNDEF + if (!emit1(JSOP_UNDEFINED)) // ... OBJ ITER *LREF UNDEF return false; - if (!emit1(JSOP_NOP_DESTRUCTURING)) // ... OBJ ITER ?DONE *LREF UNDEF + if (!emit1(JSOP_NOP_DESTRUCTURING)) // ... OBJ ITER *LREF UNDEF return false; - if (!ifAlreadyDone.emitElse()) // ... OBJ ITER ?DONE *LREF + // The iterator is done. Unpick a TRUE value for DONE above ITER. + if (!emit1(JSOP_TRUE)) // ... OBJ ITER *LREF UNDEF TRUE + return false; + if (!emit2(JSOP_UNPICK, emitted + 1)) // ... OBJ ITER TRUE *LREF UNDEF return false; - if (hasNext) { - if (emitted) { - if (!emit2(JSOP_PICK, emitted)) // ... OBJ ITER *LREF DONE - return false; - } - if (!emit1(JSOP_POP)) // ... OBJ ITER *LREF - return false; - } + if (!ifAlreadyDone.emitElse()) // ... OBJ ITER *LREF + return false; } if (emitted) { @@ -4995,59 +5303,74 @@ if (!emitAtomOp(cx->names().done, JSOP_GETPROP)) // ... OBJ ITER *LREF RESULT DONE return false; - if (hasNext) { - if (!emit1(JSOP_DUP)) // ... OBJ ITER *LREF RESULT DONE DONE - return false; - if (!emit2(JSOP_UNPICK, emitted + 2)) // ... OBJ ITER DONE *LREF RESULT DONE - return false; - } + if (!emit1(JSOP_DUP)) // ... OBJ ITER *LREF RESULT DONE DONE + return false; + if (!emit2(JSOP_UNPICK, emitted + 2)) // ... OBJ ITER DONE *LREF RESULT DONE + return false; IfThenElseEmitter ifDone(this); - if (!ifDone.emitIfElse()) // ... OBJ ITER ?DONE *LREF RESULT + if (!ifDone.emitIfElse()) // ... OBJ ITER DONE *LREF RESULT return false; - if (!emit1(JSOP_POP)) // ... OBJ ITER ?DONE *LREF + if (!emit1(JSOP_POP)) // ... OBJ ITER DONE *LREF return false; - if (!emit1(JSOP_UNDEFINED)) // ... OBJ ITER ?DONE *LREF UNDEF + if (!emit1(JSOP_UNDEFINED)) // ... OBJ ITER DONE *LREF UNDEF return false; - if (!emit1(JSOP_NOP_DESTRUCTURING)) // ... OBJ ITER ?DONE *LREF UNDEF + if (!emit1(JSOP_NOP_DESTRUCTURING)) // ... OBJ ITER DONE *LREF UNDEF return false; - if (!ifDone.emitElse()) // ... OBJ ITER ?DONE *LREF RESULT + if (!ifDone.emitElse()) // ... OBJ ITER DONE *LREF RESULT return false; - if (!emitAtomOp(cx->names().value, JSOP_GETPROP)) // ... OBJ ITER ?DONE *LREF VALUE + if (!emitAtomOp(cx->names().value, JSOP_GETPROP)) // ... OBJ ITER DONE *LREF VALUE return false; if (!ifDone.emitEnd()) return false; MOZ_ASSERT(ifDone.pushed() == 0); - if (!isHead) { + if (!isFirst) { if (!ifAlreadyDone.emitEnd()) return false; - MOZ_ASSERT(ifAlreadyDone.pushed() == 1); + MOZ_ASSERT(ifAlreadyDone.pushed() == 2); } if (pndefault) { - if (!emitDefault(pndefault, subpattern)) // ... OBJ ITER ?DONE *LREF VALUE + auto emitDefault = [pndefault, lhsPattern](BytecodeEmitter* bce) { + return bce->emitDefault(pndefault, lhsPattern); // ... OBJ ITER DONE *LREF VALUE + }; + + if (!wrapWithDestructuringIteratorCloseTryNote(tryNoteDepth, emitDefault)) return false; } if (!isElision) { - if (!emitSetOrInitializeDestructuring(subpattern, - flav)) // ... OBJ ITER ?DONE - { + auto emitAssignment = [lhsPattern, flav](BytecodeEmitter* bce) { + return bce->emitSetOrInitializeDestructuring(lhsPattern, flav); // ... OBJ ITER DONE + }; + + if (!wrapWithDestructuringIteratorCloseTryNote(tryNoteDepth, emitAssignment)) return false; - } } else { - if (!emit1(JSOP_POP)) // ... OBJ ITER ?DONE + if (!emit1(JSOP_POP)) // ... OBJ ITER DONE return false; } } + // The last DONE value is on top of the stack. If not DONE, call + // IteratorClose. + // ... OBJ ITER DONE + IfThenElseEmitter ifDone(this); + if (!ifDone.emitIfElse()) // ... OBJ ITER + return false; if (!emit1(JSOP_POP)) // ... OBJ return false; + if (!ifDone.emitElse()) // ... OBJ ITER + return false; + if (!emitIteratorClose()) // ... OBJ + return false; + if (!ifDone.emitEnd()) + return false; return true; } @@ -5718,7 +6041,7 @@ return false; { - NonLocalExitControl nle(this); + NonLocalExitControl nle(this, NonLocalExitControl::Throw); // Move exception back to cx->exception to prepare for // the next catch. @@ -6311,12 +6634,14 @@ if (!emitIterator()) // ITER return false; + int32_t iterDepth = stackDepth; + // For-of loops have both the iterator and the value on the stack. Push // undefined to balance the stack. if (!emit1(JSOP_UNDEFINED)) // ITER RESULT return false; - LoopControl loopInfo(this, StatementKind::ForOfLoop); + ForOfLoopControl loopInfo(this, iterDepth); // Annotate so IonMonkey can find the loop-closing jump. unsigned noteIndex; @@ -6362,18 +6687,23 @@ #endif // Emit code to assign result.value to the iteration variable. + // + // Note that ES 13.7.5.13, step 5.c says getting result.value does not + // call IteratorClose, so start JSTRY_ITERCLOSE after the GETPROP. if (!emit1(JSOP_DUP)) // ITER RESULT RESULT return false; if (!emitAtomOp(cx->names().value, JSOP_GETPROP)) // ITER RESULT VALUE return false; + loopInfo.startNewIterCloseTryNote(this); + if (!emitInitializeForInOrOfTarget(forOfHead)) // ITER RESULT VALUE return false; if (!emit1(JSOP_POP)) // ITER RESULT return false; - MOZ_ASSERT(this->stackDepth == loopDepth, + MOZ_ASSERT(stackDepth == loopDepth, "the stack must be balanced around the initializing " "operation"); @@ -6382,6 +6712,9 @@ if (!emitTree(forBody)) // ITER RESULT return false; + if (!loopInfo.finishIterCloseTryNote(this)) + return false; + // Set offset for continues. loopInfo.continueTarget = { offset() }; @@ -6393,7 +6726,17 @@ if (!emit1(JSOP_DUP)) // ITER ITER return false; - if (!emitIteratorNext(forOfHead)) // ITER RESULT + // Certain builtins (e.g. Array.from) are implemented in self-hosting + // as for-of loops. + bool allowSelfHostedIter = false; + if (emitterMode == BytecodeEmitter::SelfHosting && + forHeadExpr->isKind(PNK_CALL) && + forHeadExpr->pn_head->name() == cx->names().allowContentIter) + { + allowSelfHostedIter = true; + } + + if (!emitIteratorNext(forOfHead, allowSelfHostedIter)) // ITER RESULT return false; if (!emit1(JSOP_DUP)) // ITER RESULT RESULT return false; @@ -7617,7 +7960,7 @@ return false; } - NonLocalExitControl nle(this); + NonLocalExitControl nle(this, NonLocalExitControl::Return); if (!nle.prepareForNonLocalJumpToOutermost()) return false; @@ -7732,61 +8075,77 @@ // Catch location. stackDepth = uint32_t(depth); // ITER RESULT - if (!emit1(JSOP_POP)) // ITER + if (!emit1(JSOP_EXCEPTION)) // ITER RESULT EXCEPTION return false; - // THROW? = 'throw' in ITER - if (!emit1(JSOP_EXCEPTION)) // ITER EXCEPTION + if (!emitDupAt(2)) // ITER RESULT EXCEPTION ITER return false; - if (!emit1(JSOP_SWAP)) // EXCEPTION ITER + if (!emit1(JSOP_DUP)) // ITER RESULT EXCEPTION ITER ITER return false; - if (!emit1(JSOP_DUP)) // EXCEPTION ITER ITER + if (!emitAtomOp(cx->names().throw_, JSOP_CALLPROP)) // ITER RESULT EXCEPTION ITER THROW return false; - if (!emitAtomOp(cx->names().throw_, JSOP_STRING)) // EXCEPTION ITER ITER "throw" + if (!emit1(JSOP_DUP)) // ITER RESULT EXCEPTION ITER THROW THROW return false; - if (!emit1(JSOP_SWAP)) // EXCEPTION ITER "throw" ITER + if (!emit1(JSOP_UNDEFINED)) // ITER RESULT EXCEPTION ITER THROW THROW UNDEFINED return false; - if (!emit1(JSOP_IN)) // EXCEPTION ITER THROW? + if (!emit1(JSOP_EQ)) // ITER RESULT EXCEPTION ITER THROW ?EQL return false; - // if (THROW?) goto delegate - JumpList checkThrow; - if (!emitJump(JSOP_IFNE, &checkThrow)) // EXCEPTION ITER - return false; - if (!emit1(JSOP_POP)) // EXCEPTION + + IfThenElseEmitter ifThrowMethodIsNotDefined(this); + if (!ifThrowMethodIsNotDefined.emitIf()) // ITER RESULT EXCEPTION ITER THROW return false; - if (!emit1(JSOP_THROW)) // throw EXCEPTION + if (!emitUint16Operand(JSOP_THROWMSG, JSMSG_ITERATOR_NO_THROW)) // throw return false; - - if (!emitJumpTargetAndPatch(checkThrow)) // delegate: + if (!ifThrowMethodIsNotDefined.emitEnd()) // ITER OLDRESULT EXCEPTION ITER THROW return false; - // RESULT = ITER.throw(EXCEPTION) // EXCEPTION ITER - stackDepth = uint32_t(depth); - if (!emit1(JSOP_DUP)) // EXCEPTION ITER ITER + // ES 14.4.13, YieldExpression : yield * AssignmentExpression, step 5.b.iii.4. + // RESULT = ITER.throw(EXCEPTION) // ITER OLDRESULT EXCEPTION ITER THROW + if (!emit1(JSOP_SWAP)) // ITER OLDRESULT EXCEPTION THROW ITER return false; - if (!emit1(JSOP_DUP)) // EXCEPTION ITER ITER ITER + if (!emit2(JSOP_PICK, 2)) // ITER OLDRESULT THROW ITER EXCEPTION return false; - if (!emitAtomOp(cx->names().throw_, JSOP_CALLPROP)) // EXCEPTION ITER ITER THROW + if (!emitCall(JSOP_CALL, 1, iter)) // ITER OLDRESULT RESULT return false; - if (!emit1(JSOP_SWAP)) // EXCEPTION ITER THROW ITER + checkTypeSet(JSOP_CALL); + if (!emitCheckIsObj(CheckIsObjectKind::IteratorThrow)) // ITER OLDRESULT RESULT return false; - if (!emit2(JSOP_PICK, 3)) // ITER THROW ITER EXCEPTION + if (!emit1(JSOP_SWAP)) // ITER RESULT OLDRESULT return false; - if (!emitCall(JSOP_CALL, 1, iter)) // ITER RESULT + if (!emit1(JSOP_POP)) // ITER RESULT return false; - checkTypeSet(JSOP_CALL); MOZ_ASSERT(this->stackDepth == depth); JumpList checkResult; + // Note that there is no GOSUB to the finally block here. If the iterator has a + // "throw" method, it does not perform IteratorClose per + // ES 14.4.13, YieldExpression : yield * AssignmentExpression, step 5.b.ii. if (!emitJump(JSOP_GOTO, &checkResult)) // goto checkResult return false; - // Catch epilogue. + // The finally block, IteratorClose logic. + + JumpTarget finallyStart{ 0 }; + if (!emitJumpTarget(&finallyStart)) + return false; + if (!emit1(JSOP_FINALLY)) // ITER RESULT FTYPE FVALUE + return false; + if (!emitDupAt(3)) // ITER RESULT FTYPE FVALUE ITER + return false; + if (!emitIteratorClose(Some(tryStart))) // ITER RESULT FTYPE FVALUE + return false; + if (!emit1(JSOP_RETSUB)) // ITER RESULT + return false; + + // Catch and finally epilogue. // This is a peace offering to ReconstructPCStack. See the note in EmitTry. if (!emit1(JSOP_NOP)) return false; - if (!tryNoteList.append(JSTRY_CATCH, depth, tryStart.offset + JSOP_TRY_LENGTH, tryEnd.offset)) + size_t tryStartOffset = tryStart.offset + JSOP_TRY_LENGTH; + if (!tryNoteList.append(JSTRY_CATCH, depth, tryStartOffset, tryEnd.offset)) + return false; + if (!tryNoteList.append(JSTRY_FINALLY, depth, tryStartOffset, finallyStart.offset)) return false; - // After the try/catch block: send the received value to the iterator. + // After the try-catch-finally block: send the received value to the iterator. if (!emitJumpTargetAndPatch(send)) // send: return false; @@ -8155,10 +8514,10 @@ } bool -BytecodeEmitter::emitSelfHostedAllowContentSpread(ParseNode* pn) +BytecodeEmitter::emitSelfHostedAllowContentIter(ParseNode* pn) { if (pn->pn_count != 2) { - reportError(pn, JSMSG_MORE_ARGS_NEEDED, "allowContentSpread", "1", ""); + reportError(pn, JSMSG_MORE_ARGS_NEEDED, "allowContentIter", "1", ""); return false; } @@ -8184,7 +8543,7 @@ if (!pn->isKind(PNK_NAME)) { if (emitterMode == BytecodeEmitter::SelfHosting && pn->isKind(PNK_CALL)) { ParseNode* pn2 = pn->pn_head; - if (pn2->getKind() == PNK_NAME && pn2->name() == cx->names().allowContentSpread) + if (pn2->getKind() == PNK_NAME && pn2->name() == cx->names().allowContentIter) return isRestParameter(pn2->pn_next, result); } *result = false; @@ -8292,8 +8651,8 @@ return emitSelfHostedResumeGenerator(pn); if (pn2->name() == cx->names().forceInterpreter) return emitSelfHostedForceInterpreter(pn); - if (pn2->name() == cx->names().allowContentSpread) - return emitSelfHostedAllowContentSpread(pn); + if (pn2->name() == cx->names().allowContentIter) + return emitSelfHostedAllowContentIter(pn); // Fall through. } if (!emitGetName(pn2, callop)) @@ -8948,7 +9307,7 @@ if (!updateSourceCoordNotes(pn2->pn_pos.begin)) return false; - bool allowSelfHostedSpread = false; + bool allowSelfHostedIter = false; if (pn2->isKind(PNK_ELISION)) { if (!emit1(JSOP_HOLE)) return false; @@ -8959,9 +9318,9 @@ if (emitterMode == BytecodeEmitter::SelfHosting && expr->isKind(PNK_CALL) && - expr->pn_head->name() == cx->names().allowContentSpread) + expr->pn_head->name() == cx->names().allowContentIter) { - allowSelfHostedSpread = true; + allowSelfHostedIter = true; } } else { expr = pn2; @@ -8976,7 +9335,7 @@ return false; if (!emit2(JSOP_PICK, 2)) // ITER ARRAY INDEX return false; - if (!emitSpread(allowSelfHostedSpread)) // ARRAY INDEX + if (!emitSpread(allowSelfHostedIter)) // ARRAY INDEX return false; } else if (afterSpread) { if (!emit1(JSOP_INITELEM_INC)) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/frontend/BytecodeEmitter.h firefox-trunk-53.0~a1~hg20170115r329516/js/src/frontend/BytecodeEmitter.h --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/frontend/BytecodeEmitter.h 2017-01-13 01:17:35.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/frontend/BytecodeEmitter.h 2017-01-16 01:17:18.000000000 +0000 @@ -679,6 +679,13 @@ // Pops iterator from the top of the stack. Pushes the result of |.next()| // onto the stack. MOZ_MUST_USE bool emitIteratorNext(ParseNode* pn, bool allowSelfHosted = false); + MOZ_MUST_USE bool emitIteratorClose( + mozilla::Maybe yieldStarTryStart = mozilla::Nothing(), + bool allowSelfHosted = false); + + template + MOZ_MUST_USE bool wrapWithDestructuringIteratorCloseTryNote(int32_t iterDepth, + InnerEmitter emitter); // Check if the value on top of the stack is "undefined". If so, replace // that value on the stack with the value defined by |defaultExpr|. @@ -726,7 +733,7 @@ MOZ_MUST_USE bool emitSelfHostedCallFunction(ParseNode* pn); MOZ_MUST_USE bool emitSelfHostedResumeGenerator(ParseNode* pn); MOZ_MUST_USE bool emitSelfHostedForceInterpreter(ParseNode* pn); - MOZ_MUST_USE bool emitSelfHostedAllowContentSpread(ParseNode* pn); + MOZ_MUST_USE bool emitSelfHostedAllowContentIter(ParseNode* pn); MOZ_MUST_USE bool emitComprehensionFor(ParseNode* compFor); MOZ_MUST_USE bool emitComprehensionForIn(ParseNode* pn); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit/AtomicOperations.h firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit/AtomicOperations.h --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit/AtomicOperations.h 2017-01-13 01:25:23.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit/AtomicOperations.h 2017-01-16 01:26:25.000000000 +0000 @@ -341,6 +341,8 @@ # include "jit/none/AtomicOperations-ppc.h" # elif defined(__aarch64__) # include "jit/arm64/AtomicOperations-arm64.h" +# elif defined(__alpha__) +# include "jit/none/AtomicOperations-ppc.h" # elif defined(__hppa__) # include "jit/none/AtomicOperations-ppc.h" # else diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit/BaselineCompiler.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit/BaselineCompiler.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit/BaselineCompiler.cpp 2017-01-13 01:25:29.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit/BaselineCompiler.cpp 2017-01-16 01:26:25.000000000 +0000 @@ -3978,7 +3978,7 @@ } bool -BaselineCompiler::emit_JSOP_ISNOITER() +BaselineCompiler::emitIsMagicValue() { frame.syncStack(0); @@ -3997,6 +3997,12 @@ } bool +BaselineCompiler::emit_JSOP_ISNOITER() +{ + return emitIsMagicValue(); +} + +bool BaselineCompiler::emit_JSOP_ENDITER() { if (!emit_JSOP_JUMPTARGET()) @@ -4008,6 +4014,12 @@ } bool +BaselineCompiler::emit_JSOP_ISGENCLOSING() +{ + return emitIsMagicValue(); +} + +bool BaselineCompiler::emit_JSOP_GETRVAL() { frame.syncStack(0); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit/BaselineCompiler.h firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit/BaselineCompiler.h --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit/BaselineCompiler.h 2017-01-13 01:25:30.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit/BaselineCompiler.h 2017-01-16 01:26:25.000000000 +0000 @@ -203,6 +203,7 @@ _(JSOP_MOREITER) \ _(JSOP_ISNOITER) \ _(JSOP_ENDITER) \ + _(JSOP_ISGENCLOSING) \ _(JSOP_GENERATOR) \ _(JSOP_INITIALYIELD) \ _(JSOP_YIELD) \ @@ -342,6 +343,8 @@ MOZ_MUST_USE bool emitThrowConstAssignment(); MOZ_MUST_USE bool emitUninitializedLexicalCheck(const ValueOperand& val); + MOZ_MUST_USE bool emitIsMagicValue(); + MOZ_MUST_USE bool addPCMappingEntry(bool addIndexEntry); MOZ_MUST_USE bool addYieldOffset(); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit/IonBuilder.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit/IonBuilder.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit/IonBuilder.cpp 2017-01-13 01:26:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit/IonBuilder.cpp 2017-01-16 01:27:04.000000000 +0000 @@ -1141,9 +1141,11 @@ current->add(env); // This reproduce what is done in CallObject::createForFunction. Skip - // this for analyses, as the script might not have a baseline script - // with template objects yet. - if (fun->needsSomeEnvironmentObject() && !info().isAnalysis()) { + // this for the arguments analysis, as the script might not have a + // baseline script with template objects yet. + if (fun->needsSomeEnvironmentObject() && + info().analysisMode() != Analysis_ArgumentsUsage) + { if (fun->needsNamedLambdaEnvironment()) env = createNamedLambdaObject(callee, env); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit/JitFrames.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit/JitFrames.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit/JitFrames.cpp 2017-01-13 01:26:26.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit/JitFrames.cpp 2017-01-16 01:27:06.000000000 +0000 @@ -328,23 +328,47 @@ } static void -CloseLiveIteratorIon(JSContext* cx, const InlineFrameIterator& frame, uint32_t stackSlot) +CloseLiveIteratorIon(JSContext* cx, const InlineFrameIterator& frame, JSTryNote* tn) { + MOZ_ASSERT(tn->kind == JSTRY_FOR_IN || + tn->kind == JSTRY_ITERCLOSE || + tn->kind == JSTRY_DESTRUCTURING_ITERCLOSE); + + bool isDestructuring = tn->kind == JSTRY_DESTRUCTURING_ITERCLOSE; + MOZ_ASSERT_IF(!isDestructuring, tn->stackDepth > 0); + MOZ_ASSERT_IF(isDestructuring, tn->stackDepth > 1); + SnapshotIterator si = frame.snapshotIterator(); - // Skip stack slots until we reach the iterator object. - uint32_t skipSlots = NumArgAndLocalSlots(frame) + stackSlot - 1; + // Skip stack slots until we reach the iterator object on the stack. For + // the destructuring case, we also need to get the "done" value. + uint32_t stackSlot = tn->stackDepth; + uint32_t adjust = isDestructuring ? 2 : 1; + uint32_t skipSlots = NumArgAndLocalSlots(frame) + stackSlot - adjust; for (unsigned i = 0; i < skipSlots; i++) si.skip(); Value v = si.read(); - RootedObject obj(cx, &v.toObject()); + RootedObject iterObject(cx, &v.toObject()); - if (cx->isExceptionPending()) - UnwindIteratorForException(cx, obj); - else - UnwindIteratorForUncatchableException(cx, obj); + if (isDestructuring) { + Value v = si.read(); + MOZ_ASSERT(v.isBoolean()); + // Do not call IteratorClose if the destructuring iterator is already + // done. + if (v.isTrue()) + return; + } + + if (cx->isExceptionPending()) { + if (tn->kind == JSTRY_FOR_IN) + UnwindIteratorForException(cx, iterObject); + else + IteratorCloseForException(cx, iterObject); + } else { + UnwindIteratorForUncatchableException(cx, iterObject); + } } class IonFrameStackDepthOp @@ -417,14 +441,13 @@ JSTryNote* tn = *tni; switch (tn->kind) { - case JSTRY_FOR_IN: { - MOZ_ASSERT(JSOp(*(script->main() + tn->start + tn->length)) == JSOP_ENDITER); - MOZ_ASSERT(tn->stackDepth > 0); - - uint32_t localSlot = tn->stackDepth; - CloseLiveIteratorIon(cx, frame, localSlot); + case JSTRY_FOR_IN: + case JSTRY_ITERCLOSE: + case JSTRY_DESTRUCTURING_ITERCLOSE: + MOZ_ASSERT_IF(tn->kind == JSTRY_FOR_IN, + JSOp(*(script->main() + tn->start + tn->length)) == JSOP_ENDITER); + CloseLiveIteratorIon(cx, frame, tn); break; - } case JSTRY_FOR_OF: case JSTRY_LOOP: @@ -602,7 +625,7 @@ uint8_t* framePointer; uint8_t* stackPointer; BaselineFrameAndStackPointersFromTryNote(tn, frame, &framePointer, &stackPointer); - Value iterValue(*(Value*) stackPointer); + Value iterValue(*reinterpret_cast(stackPointer)); RootedObject iterObject(cx, &iterValue.toObject()); if (!UnwindIteratorForException(cx, iterObject)) { // See comment in the JSTRY_FOR_IN case in Interpreter.cpp's @@ -613,6 +636,36 @@ } break; } + + case JSTRY_ITERCLOSE: { + uint8_t* framePointer; + uint8_t* stackPointer; + BaselineFrameAndStackPointersFromTryNote(tn, frame, &framePointer, &stackPointer); + Value iterValue(*reinterpret_cast(stackPointer)); + RootedObject iterObject(cx, &iterValue.toObject()); + if (!IteratorCloseForException(cx, iterObject)) { + SettleOnTryNote(cx, tn, frame, ei, rfe, pc); + return false; + } + break; + } + + case JSTRY_DESTRUCTURING_ITERCLOSE: { + uint8_t* framePointer; + uint8_t* stackPointer; + BaselineFrameAndStackPointersFromTryNote(tn, frame, &framePointer, &stackPointer); + Value doneValue(*(reinterpret_cast(stackPointer))); + MOZ_ASSERT(doneValue.isBoolean()); + if (doneValue.isFalse()) { + Value iterValue(*(reinterpret_cast(stackPointer) + 1)); + RootedObject iterObject(cx, &iterValue.toObject()); + if (!IteratorCloseForException(cx, iterObject)) { + SettleOnTryNote(cx, tn, frame, ei, rfe, pc); + return false; + } + } + break; + } case JSTRY_FOR_OF: case JSTRY_LOOP: diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/debug/bug1330339.js firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/debug/bug1330339.js --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/debug/bug1330339.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/debug/bug1330339.js 2017-01-16 01:23:03.000000000 +0000 @@ -0,0 +1,36 @@ +// |jit-test| test-also-wasm-baseline; error: TestComplete + +if (!wasmIsSupported()) + throw "TestComplete"; + +let module = new WebAssembly.Module(wasmTextToBinary(` + (module + (import "global" "func") + (func (export "test") + call 0 ;; calls the import, which is func #0 + ) + ) +`)); + +let imports = { + global: { + func: function () { + let g = newGlobal(); + let dbg = new Debugger(g); + dbg.onExceptionUnwind = function (frame) { + frame.older; + }; + g.eval("throw new Error();"); + } + } +}; +let instance = new WebAssembly.Instance(module, imports); + +try { + instance.exports.test(); + assertEq(false, true); +} catch (e) { + assertEq(e.constructor.name, 'Error'); +} + +throw "TestComplete"; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/debug/bug1330491.js firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/debug/bug1330491.js --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/debug/bug1330491.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/debug/bug1330491.js 2017-01-16 01:23:03.000000000 +0000 @@ -0,0 +1,21 @@ +// |jit-test| test-also-wasm-baseline; error: TestComplete + +if (!wasmIsSupported()) + throw "TestComplete"; + +(function createShortLivedDebugger() { + var g = newGlobal(); + g.debuggeeGlobal = this; + g.eval("(" + function () { + dbg = new Debugger(debuggeeGlobal); + } + ")();"); +})(); + +let module = new WebAssembly.Module(wasmTextToBinary('(module (func))')); +new WebAssembly.Instance(module); + +gcslice(1000000); + +new WebAssembly.Instance(module); + +throw "TestComplete"; \ No newline at end of file diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/wasm/binary.js firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/wasm/binary.js --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/wasm/binary.js 2017-01-13 01:25:20.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/wasm/binary.js 2017-01-16 01:26:22.000000000 +0000 @@ -203,6 +203,21 @@ return { name: memoryId, body }; } +function dataSection(segmentArrays) { + var body = []; + body.push(...varU32(segmentArrays.length)); + for (let array of segmentArrays) { + body.push(...varU32(0)); // table index + body.push(...varU32(I32ConstCode)); + body.push(...varS32(array.offset)); + body.push(...varU32(EndCode)); + body.push(...varU32(array.elems.length)); + for (let elem of array.elems) + body.push(...varU32(elem)); + } + return { name: dataId, body }; +} + function elemSection(elemArrays) { var body = []; body.push(...varU32(elemArrays.length)); @@ -278,7 +293,7 @@ bodySection([v2vBody]) ]), {a:{"":()=>{}}}); -assertErrorMessage(() => wasmEval(moduleWithSections([ {name: dataId, body: [], } ])), CompileError, /data section requires a memory section/); +assertErrorMessage(() => wasmEval(moduleWithSections([ dataSection([{offset:1, elems:[]}]) ])), CompileError, /data segment requires a memory section/); wasmEval(moduleWithSections([tableSection(0)])); wasmEval(moduleWithSections([elemSection([])])); @@ -291,23 +306,47 @@ wasmEval(moduleWithSections([sigSection([v2vSig]), declSection([0,0,0]), tableSection(4), elemSection([{offset:0, elems:[0,1,0,2]}]), bodySection([v2vBody, v2vBody, v2vBody])])); wasmEval(moduleWithSections([sigSection([v2vSig,i2vSig]), declSection([0,0,1]), tableSection(3), elemSection([{offset:0,elems:[0,1,2]}]), bodySection([v2vBody, v2vBody, v2vBody])])); -function invalidTableSection0() { +function tableSection0() { var body = []; body.push(...varU32(0)); // number of tables return { name: tableId, body }; } -assertErrorMessage(() => wasmEval(moduleWithSections([invalidTableSection0()])), CompileError, /number of tables must be exactly one/); +function invalidTableSection2() { + var body = []; + body.push(...varU32(2)); // number of tables + body.push(...varU32(AnyFuncCode)); + body.push(...varU32(0x0)); + body.push(...varU32(0)); + body.push(...varU32(AnyFuncCode)); + body.push(...varU32(0x0)); + body.push(...varU32(0)); + return { name: tableId, body }; +} + +wasmEval(moduleWithSections([tableSection0()])); +assertErrorMessage(() => wasmEval(moduleWithSections([invalidTableSection2()])), CompileError, /number of tables must be at most one/); wasmEval(moduleWithSections([memorySection(0)])); -function invalidMemorySection0() { +function memorySection0() { var body = []; body.push(...varU32(0)); // number of memories return { name: memoryId, body }; } -assertErrorMessage(() => wasmEval(moduleWithSections([invalidMemorySection0()])), CompileError, /number of memories must be exactly one/); +function invalidMemorySection2() { + var body = []; + body.push(...varU32(2)); // number of memories + body.push(...varU32(0x0)); + body.push(...varU32(0)); + body.push(...varU32(0x0)); + body.push(...varU32(0)); + return { name: memoryId, body }; +} + +wasmEval(moduleWithSections([memorySection0()])); +assertErrorMessage(() => wasmEval(moduleWithSections([invalidMemorySection2()])), CompileError, /number of memories must be at most one/); // Test early 'end' const bodyMismatch = /function body length mismatch/; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/wasm/spec/call_indirect.wast firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/wasm/spec/call_indirect.wast --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/wasm/spec/call_indirect.wast 2017-01-13 01:25:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/wasm/spec/call_indirect.wast 2017-01-16 01:26:23.000000000 +0000 @@ -360,3 +360,9 @@ ) "unknown type" ) + +;; invalid table +(assert_invalid + (module (table anyfunc (elem 0 0))) + "unknown function 0" +) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/wasm/spec/custom_section.wast firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/wasm/spec/custom_section.wast --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/wasm/spec/custom_section.wast 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/wasm/spec/custom_section.wast 2017-01-16 01:26:23.000000000 +0000 @@ -0,0 +1,92 @@ +(module + "\00asm" "\0d\00\00\00" + "\00\24\10" "a custom section" "this is the payload" + "\00\20\10" "a custom section" "this is payload" + "\00\11\10" "a custom section" "" + "\00\10\00" "" "this is payload" + "\00\01\00" "" "" + "\00\24\10" "\00\00custom sectio\00" "this is the payload" +) + +(module + "\00asm" "\0d\00\00\00" + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\01\01\00" ;; type section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\02\01\00" ;; import section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\03\01\00" ;; function section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\04\01\00" ;; table section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\05\01\00" ;; memory section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\06\01\00" ;; global section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\07\01\00" ;; export section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\09\01\00" ;; element section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\0a\01\00" ;; code section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" + "\0b\01\00" ;; data section + "\00\0e\06" "custom" "payload" + "\00\0e\06" "custom" "payload" +) + +(module + "\00asm" "\0d\00\00\00" + "\01\07\01\60\02\7f\7f\01\7f" ;; type section + "\00\1a\06" "custom" "this is the payload" ;; custom section + "\03\02\01\00" ;; function section + "\07\0a\01\06\61\64\64\54\77\6f\00\00" ;; export section + "\0a\09\01\07\00\20\00\20\01\6a\0b" ;; code section + "\00\1b\07" "custom2" "this is the payload" ;; custom section +) + +(assert_malformed + (module + "\00asm" "\0d\00\00\00" + "\00\00" + ) + "unexpected end" +) + +(assert_malformed + (module + "\00asm" "\0d\00\00\00" + "\00\26\10" "a custom section" "this is the payload" + ) + "unexpected end" +) + +(assert_malformed + (module + "\00asm" "\0d\00\00\00" + "\00\25\10" "a custom section" "this is the payload" + "\00\24\10" "a custom section" "this is the payload" + ) + "invalid section id" +) + +(assert_malformed + (module + "\00asm" "\0d\00\00\00" + "\01\07\01\60\02\7f\7f\01\7f" ;; type section + "\00\25\10" "a custom section" "this is the payload" ;; invalid length! + "\03\02\01\00" ;; function section + "\0a\09\01\07\00\20\00\20\01\6a\0b" ;; code section + "\00\1b\07" "custom2" "this is the payload" ;; custom section + ) + "function and code section have inconsistent lengths" +) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/wasm/spec/custom_section.wast.js firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/wasm/spec/custom_section.wast.js --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/wasm/spec/custom_section.wast.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/wasm/spec/custom_section.wast.js 2017-01-16 01:26:23.000000000 +0000 @@ -0,0 +1 @@ +var importedArgs = ['custom_section.wast']; load(scriptdir + '../wast.js'); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/wasm/spec/float_misc.wast firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/wasm/spec/float_misc.wast --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/wasm/spec/float_misc.wast 2017-01-13 01:25:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/wasm/spec/float_misc.wast 2017-01-16 01:26:23.000000000 +0000 @@ -631,13 +631,3 @@ (assert_return (invoke "f32.nearest" (f32.const 0x1.fffffep+22)) (f32.const 0x1p+23)) (assert_return (invoke "f64.nearest" (f64.const -0x1.fffffffffffffp+51)) (f64.const -0x1p+52)) (assert_return (invoke "f64.nearest" (f64.const 0x1.fffffffffffffp+51)) (f64.const 0x1p+52)) - -;; Test that min and max behave properly with signaling NaNs. -(assert_return (invoke "f32.min" (f32.const 0.0) (f32.const nan:0x200000)) (f32.const nan:0x600000)) -(assert_return (invoke "f32.min" (f32.const nan:0x200000) (f32.const 0.0)) (f32.const nan:0x600000)) -(assert_return (invoke "f32.max" (f32.const 0.0) (f32.const nan:0x200000)) (f32.const nan:0x600000)) -(assert_return (invoke "f32.max" (f32.const nan:0x200000) (f32.const 0.0)) (f32.const nan:0x600000)) -(assert_return (invoke "f64.min" (f64.const 0.0) (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) -(assert_return (invoke "f64.min" (f64.const nan:0x4000000000000) (f64.const 0.0)) (f64.const nan:0xc000000000000)) -(assert_return (invoke "f64.max" (f64.const 0.0) (f64.const nan:0x4000000000000)) (f64.const nan:0xc000000000000)) -(assert_return (invoke "f64.max" (f64.const nan:0x4000000000000) (f64.const 0.0)) (f64.const nan:0xc000000000000)) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/wasm/spec/globals.wast firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/wasm/spec/globals.wast --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/wasm/spec/globals.wast 2017-01-13 01:25:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/wasm/spec/globals.wast 2017-01-16 01:26:24.000000000 +0000 @@ -95,3 +95,15 @@ (module (global i32 (get_global 1)) (global i32 (i32.const 0))) "unknown global" ) + +(module + (import "spectest" "global" (global i32)) +) +(assert_malformed (module "\00asm\0d\00\00\00\02\94\80\80\80\00\01\08\73\70\65\63\74\65\73\74\06\67\6c\6f\62\61\6c\03\7f\02") "invalid mutability") + +(module + (global i32 (i32.const 0)) +) +(assert_malformed (module "\00asm\0d\00\00\00\06\86\80\80\80\00\01\7f\ff\41\00\0b") "invalid mutability") +(assert_malformed (module "\00asm\0d\00\00\00\06\86\80\80\80\00\01\7f\d4\41\00\0b") "invalid mutability") +(assert_malformed (module "\00asm\0d\00\00\00\06\86\80\80\80\00\01\7f\02\41\00\0b") "invalid mutability") diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/wasm/spec/memory.wast firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/wasm/spec/memory.wast --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/wasm/spec/memory.wast 2017-01-13 01:25:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/wasm/spec/memory.wast 2017-01-16 01:26:24.000000000 +0000 @@ -17,6 +17,9 @@ ;; (module (memory 1) (data (get_global 0) "a") (global i32 (i32.const 0))) ;; (module (memory 1) (data (get_global $g) "a") (global $g i32 (i32.const 0))) +(assert_invalid (module (memory 0) (memory 0)) "multiple memories") +(assert_invalid (module (memory (import "spectest" "memory") 0) (memory 0)) "multiple memories") + (module (memory (data)) (func (export "memsize") (result i32) (current_memory))) (assert_return (invoke "memsize") (i32.const 0)) (module (memory (data "")) (func (export "memsize") (result i32) (current_memory))) @@ -29,6 +32,31 @@ (assert_invalid (module (data (i32.const 0) "x")) "unknown memory") (assert_invalid + (module (func (drop (f32.load (i32.const 0))))) + "unknown memory" +) +(assert_invalid + (module (func (f32.store (f32.const 0) (i32.const 0)))) + "unknown memory" +) +(assert_invalid + (module (func (drop (i32.load8_s (i32.const 0))))) + "unknown memory" +) +(assert_invalid + (module (func (i32.store8 (i32.const 0) (i32.const 0)))) + "unknown memory" +) +(assert_invalid + (module (func (drop (current_memory)))) + "unknown memory" +) +(assert_invalid + (module (func (drop (grow_memory (i32.const 0))))) + "unknown memory" +) + +(assert_invalid (module (memory 1) (data (i64.const 0))) "type mismatch" ) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/wasm/spec/start.wast firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/wasm/spec/start.wast --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jit-test/tests/wasm/spec/start.wast 2017-01-13 01:25:23.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jit-test/tests/wasm/spec/start.wast 2017-01-16 01:26:24.000000000 +0000 @@ -2,6 +2,7 @@ (module (func) (start 1)) "unknown function" ) + (assert_invalid (module (func $main (result i32) (return (i32.const 0))) @@ -16,6 +17,7 @@ ) "start function" ) + (module (memory (data "A")) (func $inc @@ -87,6 +89,11 @@ (start $main) ) +(module + (func $print (import "spectest" "print")) + (start $print) +) + (assert_trap (module (func $main (unreachable)) (start $main)) "unreachable" diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jsiter.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/src/jsiter.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jsiter.cpp 2017-01-13 01:27:53.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jsiter.cpp 2017-01-16 01:29:07.000000000 +0000 @@ -12,6 +12,7 @@ #include "mozilla/Maybe.h" #include "mozilla/MemoryReporting.h" #include "mozilla/PodOperations.h" +#include "mozilla/Unused.h" #include "jsarray.h" #include "jsatom.h" @@ -1217,6 +1218,7 @@ } return LegacyGeneratorObject::close(cx, obj); } + return true; } @@ -1234,6 +1236,56 @@ return true; } +bool +js::IteratorCloseForException(JSContext* cx, HandleObject obj) +{ + MOZ_ASSERT(cx->isExceptionPending()); + + bool isClosingGenerator = cx->isClosingGenerator(); + JS::AutoSaveExceptionState savedExc(cx); + + // Implements IteratorClose (ES 7.4.6) for exception unwinding. See + // also the bytecode generated by BytecodeEmitter::emitIteratorClose. + + // Step 3. + // + // Get the "return" method. + RootedValue returnMethod(cx); + if (!GetProperty(cx, obj, obj, cx->names().return_, &returnMethod)) + return false; + + // Step 4. + // + // Do nothing if "return" is null or undefined. Throw a TypeError if the + // method is not IsCallable. + if (returnMethod.isNullOrUndefined()) + return true; + if (!IsCallable(returnMethod)) + return ReportIsNotFunction(cx, returnMethod); + + // Step 5, 6, 8. + // + // Call "return" if it is not null or undefined. + RootedValue rval(cx); + bool ok = Call(cx, returnMethod, obj, &rval); + if (isClosingGenerator) { + // Closing an iterator is implemented as an exception, but in spec + // terms it is a Completion value with [[Type]] return. In this case + // we *do* care if the call threw and if it returned an object. + if (!ok) + return false; + if (!rval.isObject()) + return ThrowCheckIsObject(cx, CheckIsObjectKind::IteratorReturn); + } else { + // We don't care if the call threw or that it returned an Object, as + // Step 6 says if IteratorClose is being called during a throw, the + // original throw has primacy. + savedExc.restore(); + } + + return true; +} + void js::UnwindIteratorForUncatchableException(JSContext* cx, JSObject* obj) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jsiter.h firefox-trunk-53.0~a1~hg20170115r329516/js/src/jsiter.h --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jsiter.h 2017-01-13 01:27:53.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jsiter.h 2017-01-16 01:29:07.000000000 +0000 @@ -183,6 +183,9 @@ bool UnwindIteratorForException(JSContext* cx, HandleObject obj); +bool +IteratorCloseForException(JSContext* cx, HandleObject obj); + void UnwindIteratorForUncatchableException(JSContext* cx, JSObject* obj); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/js.msg firefox-trunk-53.0~a1~hg20170115r329516/js/src/js.msg --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/js.msg 2017-01-13 01:27:29.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/js.msg 2017-01-16 01:28:13.000000000 +0000 @@ -95,7 +95,7 @@ MSG_DEF(JSMSG_NOT_ITERATOR, 1, JSEXN_TYPEERR, "{0} is not iterator") MSG_DEF(JSMSG_ALREADY_HAS_PRAGMA, 2, JSEXN_WARN, "{0} is being assigned a {1}, but already has one") MSG_DEF(JSMSG_GET_ITER_RETURNED_PRIMITIVE, 0, JSEXN_TYPEERR, "[Symbol.iterator]() returned a non-object value") -MSG_DEF(JSMSG_NEXT_RETURNED_PRIMITIVE, 0, JSEXN_TYPEERR, "iterator.next() returned a non-object value") +MSG_DEF(JSMSG_ITER_METHOD_RETURNED_PRIMITIVE, 1, JSEXN_TYPEERR, "iterator.{0}() returned a non-object value") MSG_DEF(JSMSG_CANT_SET_PROTO, 0, JSEXN_TYPEERR, "can't set prototype of this object") MSG_DEF(JSMSG_CANT_SET_PROTO_OF, 1, JSEXN_TYPEERR, "can't set prototype of {0}") MSG_DEF(JSMSG_CANT_SET_PROTO_CYCLE, 0, JSEXN_TYPEERR, "can't set prototype: it would cause a prototype chain cycle") @@ -588,3 +588,4 @@ // Iterator MSG_DEF(JSMSG_RETURN_NOT_CALLABLE, 0, JSEXN_TYPEERR, "property 'return' of iterator is not callable") +MSG_DEF(JSMSG_ITERATOR_NO_THROW, 0, JSEXN_TYPEERR, "iterator does not have a 'throw' method") diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jsopcode.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/src/jsopcode.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jsopcode.cpp 2017-01-13 01:27:54.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jsopcode.cpp 2017-01-16 01:29:09.000000000 +0000 @@ -92,7 +92,8 @@ /************************************************************************/ -#define COUNTS_LEN 16 +static bool +DecompileArgumentFromStack(JSContext* cx, int formalIndex, char** res); size_t js::GetVariableBytecodeLength(jsbytecode* pc) @@ -460,6 +461,34 @@ offsetStack[stackDepth] = tmp; } break; + + case JSOP_PICK: { + jsbytecode* pc = script_->offsetToPC(offset); + unsigned n = GET_UINT8(pc); + MOZ_ASSERT(ndefs == n + 1); + if (offsetStack) { + uint32_t top = stackDepth + n; + uint32_t tmp = offsetStack[stackDepth]; + for (uint32_t i = stackDepth; i < top; i++) + offsetStack[i] = offsetStack[i + 1]; + offsetStack[top] = tmp; + } + break; + } + + case JSOP_UNPICK: { + jsbytecode* pc = script_->offsetToPC(offset); + unsigned n = GET_UINT8(pc); + MOZ_ASSERT(ndefs == n + 1); + if (offsetStack) { + uint32_t top = stackDepth + n; + uint32_t tmp = offsetStack[top]; + for (uint32_t i = top; i > stackDepth; i--) + offsetStack[i] = offsetStack[i - 1]; + offsetStack[stackDepth] = tmp; + } + break; + } } stackDepth += ndefs; return stackDepth; @@ -1230,6 +1259,24 @@ return write(loadAtom(pc)); case JSOP_GETARG: { unsigned slot = GET_ARGNO(pc); + + // For self-hosted scripts that are called from non-self-hosted code, + // decompiling the parameter name in the self-hosted script is + // unhelpful. Decompile the argument name instead. + if (script->selfHosted()) { + char* result; + if (!DecompileArgumentFromStack(cx, slot, &result)) + return false; + + // Note that decompiling the argument in the parent frame might + // not succeed. + if (result) { + bool ok = write(result); + js_free(result); + return ok; + } + } + JSAtom* atom = getArg(slot); if (!atom) return false; @@ -1570,12 +1617,17 @@ MOZ_ASSERT(frameIter.script()->selfHosted()); /* - * Get the second-to-top frame, the caller of the builtin that called the - * intrinsic. + * Get the second-to-top frame, the non-self-hosted caller of the builtin + * that called the intrinsic. */ ++frameIter; - if (frameIter.done() || !frameIter.hasScript() || frameIter.compartment() != cx->compartment()) + if (frameIter.done() || + !frameIter.hasScript() || + frameIter.script()->selfHosted() || + frameIter.compartment() != cx->compartment()) + { return true; + } RootedScript script(cx, frameIter.script()); jsbytecode* current = frameIter.pc(); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jsopcode.h firefox-trunk-53.0~a1~hg20170115r329516/js/src/jsopcode.h --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jsopcode.h 2017-01-13 01:27:54.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jsopcode.h 2017-01-16 01:29:09.000000000 +0000 @@ -423,6 +423,7 @@ case JSOP_RETRVAL: case JSOP_FINALYIELDRVAL: case JSOP_THROW: + case JSOP_THROWMSG: case JSOP_TABLESWITCH: return false; case JSOP_GOSUB: diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jsopcodeinlines.h firefox-trunk-53.0~a1~hg20170115r329516/js/src/jsopcodeinlines.h --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jsopcodeinlines.h 2017-01-13 01:27:54.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jsopcodeinlines.h 2017-01-16 01:29:09.000000000 +0000 @@ -27,6 +27,7 @@ case JSOP_AND: return 1; case JSOP_PICK: + case JSOP_UNPICK: /* * Pick pops and pushes how deep it looks in the stack + 1 * items. i.e. if the stack were |a b[2] c[1] d[0]|, pick 2 @@ -44,7 +45,7 @@ { jsbytecode* pc = script->offsetToPC(offset); - if (JSOp(*pc) == JSOP_PICK) + if (JSOp(*pc) == JSOP_PICK || JSOp(*pc) == JSOP_UNPICK) return pc[1] + 1; if (CodeSpec[*pc].nuses == -1) return StackUses(script, pc); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/jsscript.h firefox-trunk-53.0~a1~hg20170115r329516/js/src/jsscript.h --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/jsscript.h 2017-01-13 01:28:11.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/jsscript.h 2017-01-16 01:29:10.000000000 +0000 @@ -84,7 +84,9 @@ JSTRY_FINALLY, JSTRY_FOR_IN, JSTRY_FOR_OF, - JSTRY_LOOP + JSTRY_LOOP, + JSTRY_ITERCLOSE, + JSTRY_DESTRUCTURING_ITERCLOSE }; /* diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/shell/js.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/src/shell/js.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/shell/js.cpp 2017-01-13 01:28:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/shell/js.cpp 2017-01-16 01:29:55.000000000 +0000 @@ -2589,11 +2589,28 @@ return true; } -JS_STATIC_ASSERT(JSTRY_CATCH == 0); -JS_STATIC_ASSERT(JSTRY_FINALLY == 1); -JS_STATIC_ASSERT(JSTRY_FOR_IN == 2); +static const char* +TryNoteName(JSTryNoteKind kind) +{ + switch (kind) { + case JSTRY_CATCH: + return "catch"; + case JSTRY_FINALLY: + return "finally"; + case JSTRY_FOR_IN: + return "for-in"; + case JSTRY_FOR_OF: + return "for-of"; + case JSTRY_LOOP: + return "loop"; + case JSTRY_ITERCLOSE: + return "iterclose"; + case JSTRY_DESTRUCTURING_ITERCLOSE: + return "dstr-iterclose"; + } -static const char* const TryNoteNames[] = { "catch", "finally", "for-in", "for-of", "loop" }; + MOZ_CRASH("Bad JSTryNoteKind"); +} static MOZ_MUST_USE bool TryNotes(JSContext* cx, HandleScript script, Sprinter* sp) @@ -2601,17 +2618,16 @@ if (!script->hasTrynotes()) return true; - if (sp->put("\nException table:\nkind stack start end\n") < 0) + if (sp->put("\nException table:\nkind stack start end\n") < 0) return false; JSTryNote* tn = script->trynotes()->vector; JSTryNote* tnlimit = tn + script->trynotes()->length; do { - MOZ_ASSERT(tn->kind < ArrayLength(TryNoteNames)); - uint8_t startOff = script->pcToOffset(script->main()) + tn->start; - if (!sp->jsprintf(" %-7s %6u %8u %8u\n", - TryNoteNames[tn->kind], tn->stackDepth, - startOff, startOff + tn->length)) + uint32_t startOff = script->pcToOffset(script->main()) + tn->start; + if (!sp->jsprintf(" %-14s %6u %8u %8u\n", + TryNoteName(static_cast(tn->kind)), + tn->stackDepth, startOff, startOff + tn->length)) { return false; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/tests/ecma_6/Destructuring/array-iterator-close.js firefox-trunk-53.0~a1~hg20170115r329516/js/src/tests/ecma_6/Destructuring/array-iterator-close.js --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/tests/ecma_6/Destructuring/array-iterator-close.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/tests/ecma_6/Destructuring/array-iterator-close.js 2017-01-16 01:32:31.000000000 +0000 @@ -0,0 +1,77 @@ +// Tests that IteratorClose is called in array destructuring patterns. + +function test() { + var returnCalled = 0; + var returnCalledExpected = 0; + var iterable = {}; + + // empty [] calls IteratorClose regardless of "done" on the result. + iterable[Symbol.iterator] = makeIterator({ + next: function() { + return { done: true }; + }, + ret: function() { + returnCalled++; + return {}; + } + }); + var [] = iterable; + assertEq(returnCalled, ++returnCalledExpected); + + iterable[Symbol.iterator] = makeIterator({ + ret: function() { + returnCalled++; + return {}; + } + }); + var [] = iterable; + assertEq(returnCalled, ++returnCalledExpected); + + // Non-empty destructuring calls IteratorClose if iterator is not done by + // the end of destructuring. + var [a,b] = iterable; + assertEq(returnCalled, ++returnCalledExpected); + var [c,] = iterable; + assertEq(returnCalled, ++returnCalledExpected); + + // throw in lhs ref calls IteratorClose + function throwlhs() { + throw "in lhs"; + } + assertThrowsValue(function() { + 0, [...{}[throwlhs()]] = iterable; + }, "in lhs"); + assertEq(returnCalled, ++returnCalledExpected); + + // throw in iter.next doesn't call IteratorClose + iterable[Symbol.iterator] = makeIterator({ + next: function() { + throw "in next"; + }, + ret: function() { + returnCalled++; + return {}; + } + }); + assertThrowsValue(function() { + var [d] = iterable; + }, "in next"); + assertEq(returnCalled, returnCalledExpected); + + // "return" must return an Object. + iterable[Symbol.iterator] = makeIterator({ + ret: function() { + returnCalled++; + return 42; + } + }); + assertThrowsInstanceOf(function() { + var [] = iterable; + }, TypeError); + assertEq(returnCalled, ++returnCalledExpected); +} + +test(); + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/tests/ecma_6/Generators/delegating-yield-2.js firefox-trunk-53.0~a1~hg20170115r329516/js/src/tests/ecma_6/Generators/delegating-yield-2.js --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/tests/ecma_6/Generators/delegating-yield-2.js 2017-01-13 01:30:58.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/tests/ecma_6/Generators/delegating-yield-2.js 2017-01-16 01:32:32.000000000 +0000 @@ -25,8 +25,8 @@ inner = g1(); outer = delegate(inner); assertIteratorNext(outer, 1); -inner.throw = function(e) { return e*2; }; -assertEq(84, outer.throw(42)); +inner.throw = function(e) { return { value: e*2 }; }; +assertEq(84, outer.throw(42).value); assertIteratorDone(outer, undefined); // Monkeypatching inner.next. @@ -41,7 +41,9 @@ assertIteratorNext(outer, 1); delete GeneratorObjectPrototype.throw; var outer_throw_42 = GeneratorObjectPrototype_throw.bind(outer, 42); -assertThrowsValue(outer_throw_42, 42); +// yield* protocol violation: no 'throw' method +assertThrowsInstanceOf(outer_throw_42, TypeError); +// Now done, so just throws. assertThrowsValue(outer_throw_42, 42); // Monkeypunch a different throw handler. @@ -49,11 +51,11 @@ outer = delegate(inner); outer_throw_42 = GeneratorObjectPrototype_throw.bind(outer, 42); assertIteratorNext(outer, 1); -GeneratorObjectPrototype.throw = function(e) { return e*2; } -assertEq(84, outer_throw_42()); -assertEq(84, outer_throw_42()); +GeneratorObjectPrototype.throw = function(e) { return { value: e*2 }; } +assertEq(84, outer_throw_42().value); +assertEq(84, outer_throw_42().value); // This continues indefinitely. -assertEq(84, outer_throw_42()); +assertEq(84, outer_throw_42().value); assertIteratorDone(outer, undefined); // The same, but restoring the original pre-monkey throw. @@ -61,8 +63,8 @@ outer = delegate(inner); outer_throw_42 = GeneratorObjectPrototype_throw.bind(outer, 42); assertIteratorNext(outer, 1); -assertEq(84, outer_throw_42()); -assertEq(84, outer_throw_42()); +assertEq(84, outer_throw_42().value); +assertEq(84, outer_throw_42().value); GeneratorObjectPrototype.throw = GeneratorObjectPrototype_throw; assertIteratorResult(outer_throw_42(), 42, false); assertIteratorDone(outer, undefined); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/tests/ecma_6/Generators/yield-star-iterator-close.js firefox-trunk-53.0~a1~hg20170115r329516/js/src/tests/ecma_6/Generators/yield-star-iterator-close.js --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/tests/ecma_6/Generators/yield-star-iterator-close.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/tests/ecma_6/Generators/yield-star-iterator-close.js 2017-01-16 01:32:32.000000000 +0000 @@ -0,0 +1,123 @@ +// Tests that the "return" method on iterators is called in yield* +// expressions. + +function test() { + var returnCalled = 0; + var returnCalledExpected = 0; + var nextCalled = 0; + var nextCalledExpected = 0; + var iterable = {}; + iterable[Symbol.iterator] = makeIterator({ + next: function() { + nextCalled++; + return { done: false }; + }, + ret: function() { + returnCalled++; + return { done: true, value: "iter.return" }; + } + }); + + function* y() { + yield* iterable; + } + + // G.p.throw on an iterator without "throw" calls IteratorClose. + var g1 = y(); + g1.next(); + assertThrowsValue(function() { + g1.throw("foo"); + }, "foo"); + assertEq(returnCalled, ++returnCalledExpected); + assertEq(nextCalled, ++nextCalledExpected); + g1.next(); + assertEq(nextCalled, nextCalledExpected); + + // G.p.return calls "return", and if the result.done is true, return the + // result. + var g2 = y(); + g2.next(); + var v2 = g2.return("test return"); + assertEq(v2.done, true); + assertEq(v2.value, "iter.return"); + assertEq(returnCalled, ++returnCalledExpected); + assertEq(nextCalled, ++nextCalledExpected); + g2.next(); + assertEq(nextCalled, nextCalledExpected); + + // G.p.return calls "return", and if the result.done is false, continue + // yielding. + iterable[Symbol.iterator] = makeIterator({ + next: function() { + nextCalled++; + return { done: false }; + }, + ret: function() { + returnCalled++; + return { done: false, value: "iter.return" }; + } + }); + var g3 = y(); + g3.next(); + var v3 = g3.return("test return"); + assertEq(v3.done, false); + assertEq(v3.value, "iter.return"); + assertEq(returnCalled, ++returnCalledExpected); + assertEq(nextCalled, ++nextCalledExpected); + g3.next(); + assertEq(nextCalled, ++nextCalledExpected); + + // G.p.return throwing does not re-call iter.return. + iterable[Symbol.iterator] = makeIterator({ + ret: function() { + returnCalled++; + throw "in iter.return"; + } + }); + var g4 = y(); + g4.next(); + assertThrowsValue(function() { + g4.return("in test"); + }, "in iter.return"); + assertEq(returnCalled, ++returnCalledExpected); + + // G.p.return expects iter.return to return an Object. + iterable[Symbol.iterator] = makeIterator({ + ret: function() { + returnCalled++; + return 42; + } + }); + var g5 = y(); + g5.next(); + assertThrowsInstanceOf(function() { + g5.return("foo"); + }, TypeError); + assertEq(returnCalled, ++returnCalledExpected); + + // IteratorClose expects iter.return to return an Object. + var g6 = y(); + g6.next(); + assertThrowsInstanceOf(function() { + g6.throw("foo"); + }, TypeError); + assertEq(returnCalled, ++returnCalledExpected); + + // G.p.return passes its argument to "return". + iterable[Symbol.iterator] = makeIterator({ + ret: function(x) { + assertEq(x, "in test"); + returnCalled++; + return { done: true }; + } + }); + var g7 = y(); + g7.next(); + g7.return("in test"); + assertEq(returnCalled, ++returnCalledExpected); +} + +test(); + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/tests/ecma_6/shell.js firefox-trunk-53.0~a1~hg20170115r329516/js/src/tests/ecma_6/shell.js --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/tests/ecma_6/shell.js 2017-01-13 01:32:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/tests/ecma_6/shell.js 2017-01-16 01:33:40.000000000 +0000 @@ -3,21 +3,42 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ (function(global) { - /** Yield every permutation of the elements in some array. */ - global.Permutations = function* Permutations(items) { - if (items.length == 0) { - yield []; - } else { - items = items.slice(0); - for (let i = 0; i < items.length; i++) { - let swap = items[0]; - items[0] = items[i]; - items[i] = swap; - for (let e of Permutations(items.slice(1, items.length))) - yield [items[0]].concat(e); - } - } - }; + /** Yield every permutation of the elements in some array. */ + global.Permutations = function* Permutations(items) { + if (items.length == 0) { + yield []; + } else { + items = items.slice(0); + for (let i = 0; i < items.length; i++) { + let swap = items[0]; + items[0] = items[i]; + items[i] = swap; + for (let e of Permutations(items.slice(1, items.length))) + yield [items[0]].concat(e); + } + } + }; + + /** Make an iterator with a return method. */ + global.makeIterator = function makeIterator(overrides) { + var iterator = { + throw: function(e) { + throw e; + }, + next: function(x) { + if (overrides && overrides.next) + return overrides.next(x); + return { done: false }; + }, + return: function(x) { + if (overrides && overrides.ret) + return overrides.ret(x); + return { done: true }; + } + }; + + return function() { return iterator; }; + }; })(this); if (typeof assertThrowsInstanceOf === 'undefined') { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/tests/ecma_6/Statements/for-of-iterator-close.js firefox-trunk-53.0~a1~hg20170115r329516/js/src/tests/ecma_6/Statements/for-of-iterator-close.js --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/tests/ecma_6/Statements/for-of-iterator-close.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/tests/ecma_6/Statements/for-of-iterator-close.js 2017-01-16 01:33:26.000000000 +0000 @@ -0,0 +1,102 @@ +// Tests that IteratorReturn is called when a for-of loop has an abrupt +// completion value during non-iterator code. + +function test() { + var returnCalled = 0; + var returnCalledExpected = 0; + var iterable = {}; + iterable[Symbol.iterator] = makeIterator({ + ret: function() { + returnCalled++; + return {}; + } + }); + + // break calls iter.return + for (var x of iterable) + break; + assertEq(returnCalled, ++returnCalledExpected); + + // throw in body calls iter.return + assertThrowsValue(function() { + for (var x of iterable) + throw "in body"; + }, "in body"); + assertEq(returnCalled, ++returnCalledExpected); + + // throw in lhs ref calls iter.return + function throwlhs() { + throw "in lhs"; + } + assertThrowsValue(function() { + for ((throwlhs()) of iterable) + continue; + }, "in lhs"); + assertEq(returnCalled, ++returnCalledExpected); + + // throw in iter.return doesn't re-call iter.return + iterable[Symbol.iterator] = makeIterator({ + ret: function() { + returnCalled++; + throw "in iter.return"; + } + }); + assertThrowsValue(function() { + for (var x of iterable) + break; + }, "in iter.return"); + assertEq(returnCalled, ++returnCalledExpected); + + // throw in iter.next doesn't call IteratorClose + iterable[Symbol.iterator] = makeIterator({ + next: function() { + throw "in next"; + } + }); + assertThrowsValue(function() { + for (var x of iterable) + break; + }, "in next"); + assertEq(returnCalled, returnCalledExpected); + + // "return" must return an Object. + iterable[Symbol.iterator] = makeIterator({ + ret: function() { + returnCalled++; + return 42; + } + }); + assertThrowsInstanceOf(function() { + for (var x of iterable) + break; + }, TypeError); + assertEq(returnCalled, ++returnCalledExpected); + + // continue doesn't call iter.return for the loop it's continuing + var i = 0; + iterable[Symbol.iterator] = makeIterator({ + next: function() { + return { done: i++ > 5 }; + }, + ret: function() { + returnCalled++; + return {}; + } + }); + for (var x of iterable) + continue; + assertEq(returnCalled, returnCalledExpected); + + // continue does call iter.return for loops it skips + i = 0; + L: do { + for (var x of iterable) + continue L; + } while (false); + assertEq(returnCalled, ++returnCalledExpected); +} + +test(); + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/vm/CommonPropertyNames.h firefox-trunk-53.0~a1~hg20170115r329516/js/src/vm/CommonPropertyNames.h --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/vm/CommonPropertyNames.h 2017-01-13 01:39:19.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/vm/CommonPropertyNames.h 2017-01-16 01:42:31.000000000 +0000 @@ -13,7 +13,7 @@ #define FOR_EACH_COMMON_PROPERTYNAME(macro) \ macro(add, add, "add") \ - macro(allowContentSpread, allowContentSpread, "allowContentSpread") \ + macro(allowContentIter, allowContentIter, "allowContentIter") \ macro(anonymous, anonymous, "anonymous") \ macro(Any, Any, "Any") \ macro(apply, apply, "apply") \ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/vm/Debugger.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/src/vm/Debugger.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/vm/Debugger.cpp 2017-01-13 01:39:20.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/vm/Debugger.cpp 2017-01-16 01:42:31.000000000 +0000 @@ -6297,8 +6297,12 @@ if (thisVal.isMagic() && thisVal.whyMagic() == JS_IS_CONSTRUCTING) return false; } - if (iter.isWasm()) + if (iter.isWasm()) { + // Skip frame of wasm instances we cannot observe. + if (!iter.wasmDebugEnabled()) + return false; return observesWasm(iter.wasmInstance()); + } return observesScript(iter.script()); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/vm/HelperThreads.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/src/vm/HelperThreads.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/vm/HelperThreads.cpp 2017-01-13 01:39:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/vm/HelperThreads.cpp 2017-01-16 01:42:33.000000000 +0000 @@ -87,10 +87,6 @@ { AutoLockHelperThreadState lock; - // Don't append this task if another failed. - if (HelperThreadState().wasmFailed(lock)) - return false; - if (!HelperThreadState().wasmWorklist(lock).append(task)) return false; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/vm/HelperThreads.h firefox-trunk-53.0~a1~hg20170115r329516/js/src/vm/HelperThreads.h --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/vm/HelperThreads.h 2017-01-13 01:39:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/vm/HelperThreads.h 2017-01-16 01:42:33.000000000 +0000 @@ -229,7 +229,7 @@ } void setWasmError(const AutoLockHelperThreadState&, UniqueChars error) { if (!firstWasmError) - firstWasmError = Move(error); + firstWasmError = Move(error); } bool wasmFailed(const AutoLockHelperThreadState&) { return bool(numWasmFailedJobs); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/vm/Interpreter.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/src/vm/Interpreter.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/vm/Interpreter.cpp 2017-01-13 01:39:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/vm/Interpreter.cpp 2017-01-16 01:42:33.000000000 +0000 @@ -1192,6 +1192,33 @@ break; } + case JSTRY_ITERCLOSE: { + // The iterator object is at the top of the stack. + Value* sp = regs.spForStackDepth(tn->stackDepth); + RootedObject iterObject(cx, &sp[-1].toObject()); + if (!IteratorCloseForException(cx, iterObject)) { + SettleOnTryNote(cx, tn, ei, regs); + return ErrorReturnContinuation; + } + break; + } + + case JSTRY_DESTRUCTURING_ITERCLOSE: { + // Whether the destructuring iterator is done is at the top of the + // stack. The iterator object is second from the top. + MOZ_ASSERT(tn->stackDepth > 1); + Value* sp = regs.spForStackDepth(tn->stackDepth); + MOZ_ASSERT(sp[-1].isBoolean()); + if (sp[-1].isFalse()) { + RootedObject iterObject(cx, &sp[-2].toObject()); + if (!IteratorCloseForException(cx, iterObject)) { + SettleOnTryNote(cx, tn, ei, regs); + return ErrorReturnContinuation; + } + } + break; + } + case JSTRY_FOR_OF: case JSTRY_LOOP: break; @@ -1859,7 +1886,6 @@ /* Various 1-byte no-ops. */ CASE(JSOP_NOP) CASE(JSOP_NOP_DESTRUCTURING) -CASE(JSOP_UNUSED187) CASE(JSOP_UNUSED192) CASE(JSOP_UNUSED209) CASE(JSOP_UNUSED210) @@ -2154,6 +2180,13 @@ } END_CASE(JSOP_ENDITER) +CASE(JSOP_ISGENCLOSING) +{ + bool b = REGS.sp[-1].isMagic(JS_GENERATOR_CLOSING); + PUSH_BOOLEAN(b); +} +END_CASE(JSOP_ISGENCLOSING) + CASE(JSOP_DUP) { MOZ_ASSERT(REGS.stackDepth() >= 1); @@ -5042,7 +5075,16 @@ { switch (kind) { case CheckIsObjectKind::IteratorNext: - JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_NEXT_RETURNED_PRIMITIVE); + JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, + JSMSG_ITER_METHOD_RETURNED_PRIMITIVE, "next"); + break; + case CheckIsObjectKind::IteratorReturn: + JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, + JSMSG_ITER_METHOD_RETURNED_PRIMITIVE, "return"); + break; + case CheckIsObjectKind::IteratorThrow: + JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, + JSMSG_ITER_METHOD_RETURNED_PRIMITIVE, "throw"); break; case CheckIsObjectKind::GetIterator: JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_GET_ITER_RETURNED_PRIMITIVE); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/vm/Interpreter.h firefox-trunk-53.0~a1~hg20170115r329516/js/src/vm/Interpreter.h --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/vm/Interpreter.h 2017-01-13 01:39:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/vm/Interpreter.h 2017-01-16 01:42:33.000000000 +0000 @@ -562,6 +562,8 @@ enum class CheckIsObjectKind : uint8_t { IteratorNext, + IteratorReturn, + IteratorThrow, GetIterator }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/vm/Opcodes.h firefox-trunk-53.0~a1~hg20170115r329516/js/src/vm/Opcodes.h --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/vm/Opcodes.h 2017-01-13 01:39:32.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/vm/Opcodes.h 2017-01-16 01:42:34.000000000 +0000 @@ -1916,8 +1916,16 @@ * Stack: => this */ \ macro(JSOP_GLOBALTHIS, 186,"globalthis", NULL, 1, 0, 1, JOF_BYTE) \ - macro(JSOP_UNUSED187, 187,"unused187", NULL, 1, 0, 0, JOF_BYTE) \ - \ + /* + * Pushes a boolean indicating whether the top of the stack is + * MagicValue(JS_GENERATOR_CLOSING). + * + * Category: Statements + * Type: For-In Statement + * Operands: + * Stack: val => val, res + */ \ + macro(JSOP_ISGENCLOSING, 187, "isgenclosing", NULL, 1, 1, 2, JOF_BYTE) \ /* * Pushes unsigned 24-bit int immediate integer operand onto the stack. * Category: Literals diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/vm/Stack.h firefox-trunk-53.0~a1~hg20170115r329516/js/src/vm/Stack.h --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/vm/Stack.h 2017-01-13 01:39:35.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/vm/Stack.h 2017-01-16 01:42:55.000000000 +0000 @@ -1811,6 +1811,8 @@ // ----------------------------------------------------------- // The following functions can only be called when isWasm() // ----------------------------------------------------------- + + inline bool wasmDebugEnabled() const; inline wasm::Instance* wasmInstance() const; // ----------------------------------------------------------- @@ -2056,11 +2058,19 @@ return data_.jitFrames_.script(); } +inline bool +FrameIter::wasmDebugEnabled() const +{ + MOZ_ASSERT(!done()); + MOZ_ASSERT(data_.state_ == WASM); + return data_.wasmFrames_.debugEnabled(); +} + inline wasm::Instance* FrameIter::wasmInstance() const { MOZ_ASSERT(!done()); - MOZ_ASSERT(data_.state_ == WASM); + MOZ_ASSERT(data_.state_ == WASM && wasmDebugEnabled()); return data_.wasmFrames_.instance(); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/wasm/WasmCode.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/src/wasm/WasmCode.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/wasm/WasmCode.cpp 2017-01-13 01:39:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/wasm/WasmCode.cpp 2017-01-16 01:43:22.000000000 +0000 @@ -177,7 +177,7 @@ const char* file = metadata.filename.get(); unsigned line = codeRange.funcLineOrBytecode(); unsigned column = 0; - writePerfSpewerAsmJSFunctionMap(start, size, file, line, column, name.begin()); + writePerfSpewerWasmFunctionMap(start, size, file, line, column, name.begin()); } #endif #ifdef MOZ_VTUNE diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/wasm/WasmGenerator.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/src/wasm/WasmGenerator.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/wasm/WasmGenerator.cpp 2017-01-13 01:39:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/wasm/WasmGenerator.cpp 2017-01-16 01:43:23.000000000 +0000 @@ -247,8 +247,8 @@ if (HelperThreadState().wasmFailed(lock)) { if (error_) { - MOZ_ASSERT(!*error_, "Should have stopped earlier"); - *error_ = Move(HelperThreadState().harvestWasmError(lock)); + MOZ_ASSERT(!*error_, "Should have stopped earlier"); + *error_ = Move(HelperThreadState().harvestWasmError(lock)); } return false; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/wasm/WasmIonCompile.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/src/wasm/WasmIonCompile.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/wasm/WasmIonCompile.cpp 2017-01-13 01:39:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/wasm/WasmIonCompile.cpp 2017-01-16 01:43:28.000000000 +0000 @@ -3667,7 +3667,7 @@ if (!env.isAsmJS()) { if (!ValidateFunctionBody(task->env(), func.index(), bodySize, d)) - return false; + return false; d.rollbackPosition(d.begin()); } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/wasm/WasmModule.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/src/wasm/WasmModule.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/wasm/WasmModule.cpp 2017-01-13 01:39:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/wasm/WasmModule.cpp 2017-01-16 01:43:29.000000000 +0000 @@ -893,12 +893,16 @@ // instance must hold onto a ref of the bytecode (keeping it alive). This // wastes memory for most users, so we try to only save the source when a // developer actually cares: when the compartment is debuggable (which is - // true when the web console is open) or a names section is present (since - // this going to be stripped for non-developer builds). + // true when the web console is open), has code compiled with debug flag + // enabled or a names section is present (since this going to be stripped + // for non-developer builds). const ShareableBytes* maybeBytecode = nullptr; - if (cx->compartment()->isDebuggee() || !metadata_->funcNames.empty()) + if (cx->compartment()->isDebuggee() || metadata_->debugEnabled || + !metadata_->funcNames.empty()) + { maybeBytecode = bytecode_.get(); + } auto codeSegment = CodeSegment::create(cx, code_, linkData_, *metadata_, memory); if (!codeSegment) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/src/wasm/WasmValidate.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/src/wasm/WasmValidate.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/src/wasm/WasmValidate.cpp 2017-01-13 01:39:44.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/src/wasm/WasmValidate.cpp 2017-01-16 01:43:31.000000000 +0000 @@ -1089,11 +1089,13 @@ if (!d.readVarU32(&numTables)) return d.fail("failed to read number of tables"); - if (numTables != 1) - return d.fail("the number of tables must be exactly one"); + if (numTables > 1) + return d.fail("the number of tables must be at most one"); - if (!DecodeTableLimits(d, &env->tables)) - return false; + for (uint32_t i = 0; i < numTables; ++i) { + if (!DecodeTableLimits(d, &env->tables)) + return false; + } if (!d.finishSection(sectionStart, sectionSize, "table")) return false; @@ -1114,11 +1116,13 @@ if (!d.readVarU32(&numMemories)) return d.fail("failed to read number of memories"); - if (numMemories != 1) - return d.fail("the number of memories must be exactly one"); + if (numMemories > 1) + return d.fail("the number of memories must be at most one"); - if (!DecodeMemoryLimits(d, env)) - return false; + for (uint32_t i = 0; i < numMemories; ++i) { + if (!DecodeMemoryLimits(d, env)) + return false; + } if (!d.finishSection(sectionStart, sectionSize, "memory")) return false; @@ -1534,9 +1538,6 @@ if (sectionStart == Decoder::NotStarted) return true; - if (!env->usesMemory()) - return d.fail("data section requires a memory section"); - uint32_t numSegments; if (!d.readVarU32(&numSegments)) return d.fail("failed to read number of data segments"); @@ -1552,6 +1553,9 @@ if (linearMemoryIndex != 0) return d.fail("linear memory index must currently be 0"); + if (!env->usesMemory()) + return d.fail("data segment requires a memory section"); + DataSegment seg; if (!DecodeInitializerExpression(d, env->globals, ValType::I32, &seg.offset)) return false; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/idl/nsIXPCScriptable.idl firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/idl/nsIXPCScriptable.idl --- firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/idl/nsIXPCScriptable.idl 2017-01-13 01:40:12.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/idl/nsIXPCScriptable.idl 2017-01-16 01:43:31.000000000 +0000 @@ -29,6 +29,7 @@ [ref] native JSCallArgsRef(const JS::CallArgs); [ref] native JSAutoIdVector(JS::AutoIdVector); [ptr] native jsClassPtr(const js::Class); +[ptr] native JSClassPtr(const JSClass); /** * Note: This is not really an XPCOM interface. For example, callers must @@ -65,6 +66,7 @@ readonly attribute string className; [notxpcom,nostdcall] uint32_t getScriptableFlags(); [notxpcom,nostdcall] jsClassPtr getClass(); + [notxpcom,nostdcall] JSClassPtr getJSClass(); void preCreate(in nsISupports nativeObj, in JSContextPtr cx, in JSObjectPtr globalObj, out JSObjectPtr parentObj); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/public/xpc_map_end.h firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/public/xpc_map_end.h --- firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/public/xpc_map_end.h 2017-01-13 01:40:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/public/xpc_map_end.h 2017-01-16 01:43:32.000000000 +0000 @@ -85,6 +85,13 @@ return &klass; } +// virtual +const JSClass* +XPC_MAP_CLASSNAME::GetJSClass() +{ + return Jsvalify(GetClass()); +} + /**************************************************************/ #ifndef XPC_MAP_WANT_PRECREATE diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/XPCCallContext.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/XPCCallContext.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/XPCCallContext.cpp 2017-01-13 01:40:13.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/XPCCallContext.cpp 2017-01-16 01:43:33.000000000 +0000 @@ -70,11 +70,8 @@ &js::GetReservedSlot(unwrapped, XPC_WN_TEAROFF_FLAT_OBJECT_SLOT).toObject()); } - if (mWrapper) { - if (mTearOff) - mScriptableInfo = nullptr; - else - mScriptableInfo = mWrapper->GetScriptableInfo(); + if (mWrapper && !mTearOff) { + mScriptable = mWrapper->GetScriptable(); } if (!JSID_IS_VOID(name)) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/XPCForwards.h firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/XPCForwards.h --- firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/XPCForwards.h 2017-01-13 01:40:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/XPCForwards.h 2017-01-16 01:43:33.000000000 +0000 @@ -28,7 +28,6 @@ class XPCWrappedNative; class XPCWrappedNativeProto; class XPCWrappedNativeTearOff; -class XPCNativeScriptableInfo; class XPCNativeScriptableCreateInfo; class XPCTraceableVariant; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/XPCInlines.h firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/XPCInlines.h --- firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/XPCInlines.h 2017-01-13 01:40:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/XPCInlines.h 2017-01-16 01:43:33.000000000 +0000 @@ -99,11 +99,11 @@ return mTearOff; } -inline XPCNativeScriptableInfo* -XPCCallContext::GetScriptableInfo() const +inline nsIXPCScriptable* +XPCCallContext::GetScriptable() const { CHECK_STATE(HAVE_OBJECT); - return mScriptableInfo; + return mScriptable; } inline bool diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/XPCJSContext.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/XPCJSContext.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/XPCJSContext.cpp 2017-01-13 01:40:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/XPCJSContext.cpp 2017-01-16 01:43:33.000000000 +0000 @@ -3531,7 +3531,6 @@ XPCJSContext::DescribeCustomObjects(JSObject* obj, const js::Class* clasp, char (&name)[72]) const { - XPCNativeScriptableInfo* si = nullptr; if (!IS_PROTO_CLASS(clasp)) { return false; @@ -3539,13 +3538,13 @@ XPCWrappedNativeProto* p = static_cast(xpc_GetJSPrivate(obj)); - si = p->GetScriptableInfo(); - - if (!si) { + nsCOMPtr scr = p->GetScriptable(); + if (!scr) { return false; } - SprintfLiteral(name, "JS Object (%s - %s)", clasp->name, si->GetJSClass()->name); + SprintfLiteral(name, "JS Object (%s - %s)", + clasp->name, scr->GetJSClass()->name); return true; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/xpcprivate.h firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/xpcprivate.h --- firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/xpcprivate.h 2017-01-13 01:40:16.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/xpcprivate.h 2017-01-16 01:43:47.000000000 +0000 @@ -58,8 +58,7 @@ * nsIXPCScriptable). This allows it to implement a more DOM-like interface, * besides just exposing XPCOM methods and constants. An nsIXPCScriptable * instance has hooks that correspond to all the normal JSClass hooks. Each - * nsIXPCScriptable instance is mirrored by an XPCNativeScriptableInfo in - * XPConnect. These can have pointers from XPCWrappedNativeProto and + * nsIXPCScriptable instance can have pointers from XPCWrappedNativeProto and * XPCWrappedNative (since C++ objects can have scriptable info without having * class info). */ @@ -703,7 +702,7 @@ inline bool CanGetTearOff() const ; inline XPCWrappedNativeTearOff* GetTearOff() const ; - inline XPCNativeScriptableInfo* GetScriptableInfo() const ; + inline nsIXPCScriptable* GetScriptable() const ; inline bool CanGetSet() const ; inline XPCNativeSet* GetSet() const ; inline bool CanGetInterface() const ; @@ -779,7 +778,7 @@ XPCWrappedNative* mWrapper; XPCWrappedNativeTearOff* mTearOff; - XPCNativeScriptableInfo* mScriptableInfo; + nsCOMPtr mScriptable; RefPtr mSet; RefPtr mInterface; @@ -1384,46 +1383,8 @@ }; /***************************************************************************/ -// XPCNativeScriptableInfo is a trivial wrapper for nsIXPCScriptable which -// should be removed eventually. - -class XPCNativeScriptableInfo final -{ -public: - static XPCNativeScriptableInfo* - Construct(const XPCNativeScriptableCreateInfo* sci); - - nsIXPCScriptable* - GetCallback() const { return mCallback; } - - const JSClass* - GetJSClass() { return Jsvalify(mCallback->GetClass()); } - -protected: - explicit XPCNativeScriptableInfo(nsIXPCScriptable* aCallback) - : mCallback(aCallback) - { - MOZ_COUNT_CTOR(XPCNativeScriptableInfo); - } -public: - ~XPCNativeScriptableInfo() - { - MOZ_COUNT_DTOR(XPCNativeScriptableInfo); - } -private: - - // disable copy ctor and assignment - XPCNativeScriptableInfo(const XPCNativeScriptableInfo& r) = delete; - XPCNativeScriptableInfo& operator= (const XPCNativeScriptableInfo& r) = delete; - -private: - nsCOMPtr mCallback; -}; - -/***************************************************************************/ // XPCNativeScriptableCreateInfo is used in creating new wrapper and protos. -// it abstracts out the scriptable interface pointer and the flags. After -// creation these are factored differently using XPCNativeScriptableInfo. +// It abstracts out the scriptable interface pointer and the flags. class MOZ_STACK_CLASS XPCNativeScriptableCreateInfo final { @@ -1469,8 +1430,8 @@ XPCNativeSet* GetSet() const {return mSet;} - XPCNativeScriptableInfo* - GetScriptableInfo() {return mScriptableInfo;} + nsIXPCScriptable* + GetScriptable() const { return mScriptable; } bool CallPostCreatePrototype(); void JSProtoObjectFinalized(js::FreeOp* fop, JSObject* obj); @@ -1529,7 +1490,7 @@ JS::ObjectPtr mJSProtoObject; nsCOMPtr mClassInfo; RefPtr mSet; - XPCNativeScriptableInfo* mScriptableInfo; + nsCOMPtr mScriptable; }; /***********************************************/ @@ -1692,11 +1653,8 @@ public: - XPCNativeScriptableInfo* - GetScriptableInfo() const {return mScriptableInfo;} - - nsIXPCScriptable* // call this wrong and you deserve to crash - GetScriptableCallback() const {return mScriptableInfo->GetCallback();} + nsIXPCScriptable* + GetScriptable() const { return mScriptable; } nsIClassInfo* GetClassInfo() const {return IsValid() && HasProto() ? @@ -1844,7 +1802,7 @@ }; RefPtr mSet; JS::TenuredHeap mFlatJSObject; - XPCNativeScriptableInfo* mScriptableInfo; + nsCOMPtr mScriptable; XPCWrappedNativeTearOff mFirstTearOff; }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/XPCWrappedNative.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/XPCWrappedNative.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/XPCWrappedNative.cpp 2017-01-13 01:40:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/XPCWrappedNative.cpp 2017-01-16 01:43:47.000000000 +0000 @@ -50,9 +50,10 @@ if (MOZ_UNLIKELY(cb.WantDebugInfo())) { char name[72]; - XPCNativeScriptableInfo* si = tmp->GetScriptableInfo(); - if (si) - SprintfLiteral(name, "XPCWrappedNative (%s)", si->GetJSClass()->name); + nsCOMPtr scr = tmp->GetScriptable(); + if (scr) + SprintfLiteral(name, "XPCWrappedNative (%s)", + scr->GetJSClass()->name); else SprintfLiteral(name, "XPCWrappedNative"); @@ -170,13 +171,13 @@ GatherScriptableCreateInfo(identity, nativeHelper.GetClassInfo(), sciProto, sciMaybe); - // ...and then ScriptableInfo. We need all this stuff now because it's going - // to tell us the JSClass of the object we're going to create. - XPCNativeScriptableInfo* si = XPCNativeScriptableInfo::Construct(&sciWrapper); - MOZ_ASSERT(si); + // ...and then get the nsIXPCScriptable. This will tell us the JSClass of + // the object we're going to create. + nsCOMPtr scr = sciWrapper.GetCallback(); + MOZ_ASSERT(scr); // Finally, we get to the JSClass. - const JSClass* clasp = si->GetJSClass(); + const JSClass* clasp = scr->GetJSClass(); MOZ_ASSERT(clasp->flags & JSCLASS_IS_GLOBAL); // Create the global. @@ -221,23 +222,7 @@ // are different for globals. We do our setup inline here, instead. // - // Share mScriptableInfo with the proto. - // - // This is probably more trouble than it's worth, since we've already - // created an XPCNativeScriptableInfo for ourselves. Nevertheless, this is - // what ::Init() does, and we want to be as consistent as possible with - // that code. - XPCNativeScriptableInfo* siProto = proto->GetScriptableInfo(); - if (siProto && siProto->GetCallback() == sciWrapper.GetCallback()) { - wrapper->mScriptableInfo = siProto; - // XPCNativeScriptableInfo uses manual memory management. If we're - // switching over to that of the proto, we need to destroy the one - // we've allocated. - delete si; - si = nullptr; - } else { - wrapper->mScriptableInfo = si; - } + wrapper->mScriptable = scr; // Set the JS object to the global we already created. wrapper->mFlatJSObject = global; @@ -550,8 +535,7 @@ XPCWrappedNative::XPCWrappedNative(already_AddRefed&& aIdentity, XPCWrappedNativeProto* aProto) : mMaybeProto(aProto), - mSet(aProto->GetSet()), - mScriptableInfo(nullptr) + mSet(aProto->GetSet()) { MOZ_ASSERT(NS_IsMainThread()); @@ -568,8 +552,7 @@ already_AddRefed&& aSet) : mMaybeScope(TagScope(aScope)), - mSet(aSet), - mScriptableInfo(nullptr) + mSet(aSet) { MOZ_ASSERT(NS_IsMainThread()); @@ -588,14 +571,7 @@ void XPCWrappedNative::Destroy() { - XPCWrappedNativeProto* proto = GetProto(); - - if (mScriptableInfo && - (!HasProto() || - (proto && proto->GetScriptableInfo() != mScriptableInfo))) { - delete mScriptableInfo; - mScriptableInfo = nullptr; - } + mScriptable = nullptr; XPCWrappedNativeScope* scope = GetScope(); if (scope) { @@ -729,30 +705,20 @@ XPCWrappedNative::Init(const XPCNativeScriptableCreateInfo* sci) { AutoJSContext cx; - // setup our scriptable info... - if (sci->GetCallback()) { - if (HasProto()) { - XPCNativeScriptableInfo* siProto = GetProto()->GetScriptableInfo(); - if (siProto && siProto->GetCallback() == sci->GetCallback()) - mScriptableInfo = siProto; - } - if (!mScriptableInfo) { - mScriptableInfo = XPCNativeScriptableInfo::Construct(sci); - - if (!mScriptableInfo) - return false; - } - } - XPCNativeScriptableInfo* si = mScriptableInfo; + // Setup our scriptable... + MOZ_ASSERT(!mScriptable); + mScriptable = sci->GetCallback(); // create our flatJSObject - const JSClass* jsclazz = si ? si->GetJSClass() : Jsvalify(&XPC_WN_NoHelper_JSClass); + const JSClass* jsclazz = mScriptable + ? mScriptable->GetJSClass() + : Jsvalify(&XPC_WN_NoHelper_JSClass); // We should have the global jsclass flag if and only if we're a global. - MOZ_ASSERT_IF(si, !!si->GetCallback()->IsGlobalObject() == - !!(jsclazz->flags & JSCLASS_IS_GLOBAL)); + MOZ_ASSERT_IF(mScriptable, !!mScriptable->IsGlobalObject() == + !!(jsclazz->flags & JSCLASS_IS_GLOBAL)); MOZ_ASSERT(jsclazz && jsclazz->name && @@ -959,7 +925,7 @@ if (HasProto()) proto->SystemIsBeingShutDown(); - // We don't destroy mScriptableInfo here. The destructor will do it. + // We don't clear mScriptable here. The destructor will do it. // Cleanup the tearoffs. for (XPCWrappedNativeTearOff* to = &mFirstTearOff; to; to = to->GetNextTearOff()) { @@ -1095,8 +1061,8 @@ // If the scriptable helper forbids us from reflecting additional // interfaces, then don't even try the QI, just fail. - if (mScriptableInfo && - mScriptableInfo->GetCallback()->ClassInfoInterfacesOnly() && + if (mScriptable && + mScriptable->ClassInfoInterfacesOnly() && !mSet->HasInterface(aInterface) && !mSet->HasInterfaceWithAncestor(aInterface)) { return NS_ERROR_NO_INTERFACE; @@ -2152,14 +2118,12 @@ XPC_LOG_ALWAYS(("mFlatJSObject of %x", mFlatJSObject.unbarrieredGetPtr())); XPC_LOG_ALWAYS(("mIdentity of %x", mIdentity.get())); - XPC_LOG_ALWAYS(("mScriptableInfo @ %x", mScriptableInfo)); + XPC_LOG_ALWAYS(("mScriptable @ %x", mScriptable.get())); - if (depth && mScriptableInfo) { - nsCOMPtr scr = mScriptableInfo->GetCallback(); + if (depth && mScriptable) { XPC_LOG_INDENT(); - XPC_LOG_ALWAYS(("mScriptable @ %x", scr.get())); - XPC_LOG_ALWAYS(("mFlags of %x", scr->GetScriptableFlags())); - XPC_LOG_ALWAYS(("mJSClass @ %x", mScriptableInfo->GetJSClass())); + XPC_LOG_ALWAYS(("mFlags of %x", mScriptable->GetScriptableFlags())); + XPC_LOG_ALWAYS(("mJSClass @ %x", mScriptable->GetJSClass())); XPC_LOG_OUTDENT(); } XPC_LOG_OUTDENT(); @@ -2185,9 +2149,9 @@ char* sz = nullptr; char* name = nullptr; - XPCNativeScriptableInfo* si = GetScriptableInfo(); - if (si) - name = JS_smprintf("%s", si->GetJSClass()->name); + nsCOMPtr scr = GetScriptable(); + if (scr) + name = JS_smprintf("%s", scr->GetJSClass()->name); if (to) { const char* fmt = name ? " (%s)" : "%s"; name = JS_sprintf_append(name, fmt, @@ -2218,7 +2182,7 @@ } const char* fmt = "[xpconnect wrapped %s" FMT_ADDR FMT_STR(" (native") FMT_ADDR FMT_STR(")") "]"; - if (si) { + if (scr) { fmt = "[object %s" FMT_ADDR FMT_STR(" (native") FMT_ADDR FMT_STR(")") "]"; } sz = JS_smprintf(fmt, name PARAM_ADDR(this) PARAM_ADDR(mIdentity.get())); @@ -2267,12 +2231,10 @@ info->GetNameShared(&interfaceName); clsInfo->GetContractID(&contractID); - if (wrapper->GetScriptableInfo()) { - wrapper->GetScriptableInfo()->GetCallback()-> - GetClassName(&className); + if (wrapper->GetScriptable()) { + wrapper->GetScriptable()->GetClassName(&className); } - printf("\n!!! Object's nsIClassInfo lies about its interfaces!!!\n" " classname: %s \n" " contractid: %s \n" diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/XPCWrappedNativeJSOps.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/XPCWrappedNativeJSOps.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/XPCWrappedNativeJSOps.cpp 2017-01-13 01:40:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/XPCWrappedNativeJSOps.cpp 2017-01-16 01:43:47.000000000 +0000 @@ -229,7 +229,7 @@ bool reflectToStringAndToSource, XPCWrappedNative* wrapperToReflectInterfaceNames, XPCWrappedNative* wrapperToReflectDoubleWrap, - XPCNativeScriptableInfo* scriptableInfo, + nsIXPCScriptable* scr, unsigned propFlags, bool* resolved) { @@ -254,9 +254,8 @@ JSNative call; uint32_t flags = 0; - if (scriptableInfo) { - nsCOMPtr classInfo = do_QueryInterface( - scriptableInfo->GetCallback()); + if (scr) { + nsCOMPtr classInfo = do_QueryInterface(scr); if (classInfo) { nsresult rv = classInfo->GetFlags(&flags); @@ -415,8 +414,8 @@ if (id == xpccx->GetStringID(XPCJSContext::IDX_TO_STRING) || id == xpccx->GetStringID(XPCJSContext::IDX_TO_SOURCE) || - (scriptableInfo && - scriptableInfo->GetCallback()->DontEnumQueryInterface() && + (scr && + scr->DontEnumQueryInterface() && id == xpccx->GetStringID(XPCJSContext::IDX_QUERY_INTERFACE))) propFlags &= ~JSPROP_ENUMERATE; @@ -549,7 +548,7 @@ XPCWrappedNative* wrapper = static_cast(p); if (helperType == WN_HELPER) - wrapper->GetScriptableCallback()->Finalize(wrapper, js::CastToJSFreeOp(fop), obj); + wrapper->GetScriptable()->Finalize(wrapper, js::CastToJSFreeOp(fop), obj); wrapper->FlatJSObjectFinalized(); } @@ -704,7 +703,7 @@ XPCWrappedNative* wrapper = XPCWrappedNative::Get(unwrapped); \ THROW_AND_RETURN_IF_BAD_WRAPPER(cx, wrapper); \ bool retval = true; \ - nsresult rv = wrapper->GetScriptableCallback()-> + nsresult rv = wrapper->GetScriptable()-> #define POST_HELPER_STUB \ if (NS_FAILED(rv)) \ @@ -797,15 +796,15 @@ RootedId old(cx, ccx.SetResolveName(id)); - XPCNativeScriptableInfo* si = wrapper->GetScriptableInfo(); - if (si && si->GetCallback()->WantResolve()) { + nsCOMPtr scr = wrapper->GetScriptable(); + if (scr && scr->WantResolve()) { XPCWrappedNative* oldResolvingWrapper; - bool allowPropMods = si->GetCallback()->AllowPropModsDuringResolve(); + bool allowPropMods = scr->AllowPropModsDuringResolve(); if (allowPropMods) oldResolvingWrapper = ccx.SetResolvingWrapper(wrapper); - rv = si->GetCallback()->Resolve(wrapper, cx, obj, id, &resolved, &retval); + rv = scr->Resolve(wrapper, cx, obj, id, &resolved, &retval); if (allowPropMods) (void)ccx.SetResolvingWrapper(oldResolvingWrapper); @@ -835,9 +834,7 @@ IsLocal) { XPCWrappedNative* wrapperForInterfaceNames = - (si && si->GetCallback()->DontReflectInterfaceNames()) - ? nullptr - : wrapper; + (scr && scr->DontReflectInterfaceNames()) ? nullptr : wrapper; XPCWrappedNative* oldResolvingWrapper = ccx.SetResolvingWrapper(wrapper); @@ -846,7 +843,7 @@ wrapper->GetScope(), false, wrapperForInterfaceNames, - nullptr, si, + nullptr, scr, JSPROP_ENUMERATE, resolvedp); (void)ccx.SetResolvingWrapper(oldResolvingWrapper); } @@ -862,15 +859,15 @@ XPCWrappedNative* wrapper = ccx.GetWrapper(); THROW_AND_RETURN_IF_BAD_WRAPPER(cx, wrapper); - XPCNativeScriptableInfo* si = wrapper->GetScriptableInfo(); - if (!si || !si->GetCallback()->WantEnumerate()) + nsCOMPtr scr = wrapper->GetScriptable(); + if (!scr || !scr->WantEnumerate()) return Throw(NS_ERROR_XPC_BAD_OP_ON_WN_PROTO, cx); if (!XPC_WN_Shared_Enumerate(cx, obj)) return false; bool retval = true; - nsresult rv = si->GetCallback()->Enumerate(wrapper, cx, obj, &retval); + nsresult rv = scr->Enumerate(wrapper, cx, obj, &retval); if (NS_FAILED(rv)) return Throw(rv, cx); return retval; @@ -886,15 +883,15 @@ XPCWrappedNative* wrapper = ccx.GetWrapper(); THROW_AND_RETURN_IF_BAD_WRAPPER(cx, wrapper); - XPCNativeScriptableInfo* si = wrapper->GetScriptableInfo(); - if (!si || !si->GetCallback()->WantNewEnumerate()) + nsCOMPtr scr = wrapper->GetScriptable(); + if (!scr || !scr->WantNewEnumerate()) return Throw(NS_ERROR_XPC_BAD_OP_ON_WN_PROTO, cx); if (!XPC_WN_Shared_Enumerate(cx, obj)) return false; bool retval = true; - nsresult rv = si->GetCallback()->NewEnumerate(wrapper, cx, obj, properties, &retval); + nsresult rv = scr->NewEnumerate(wrapper, cx, obj, properties, &retval); if (NS_FAILED(rv)) return Throw(rv, cx); return retval; @@ -902,16 +899,6 @@ /***************************************************************************/ -// static -XPCNativeScriptableInfo* -XPCNativeScriptableInfo::Construct(const XPCNativeScriptableCreateInfo* sci) -{ - MOZ_ASSERT(sci, "bad param"); - nsCOMPtr callback = sci->GetCallback(); - MOZ_ASSERT(callback); - return new XPCNativeScriptableInfo(callback); -} - const js::ObjectOps XPC_WN_ObjectOpsWithEnumerate = { nullptr, // lookupProperty nullptr, // defineProperty @@ -1113,11 +1100,11 @@ if (!ccx.IsValid()) return false; - XPCNativeScriptableInfo* si = self->GetScriptableInfo(); + nsCOMPtr scr = self->GetScriptable(); return DefinePropertyIfFound(ccx, obj, id, self->GetSet(), nullptr, nullptr, self->GetScope(), - true, nullptr, nullptr, si, + true, nullptr, nullptr, scr, JSPROP_ENUMERATE, resolvep); } @@ -1190,12 +1177,12 @@ if (!ccx.IsValid()) return false; - XPCNativeScriptableInfo* si = self->GetScriptableInfo(); + nsCOMPtr scr = self->GetScriptable(); return DefinePropertyIfFound(ccx, obj, id, self->GetSet(), nullptr, nullptr, self->GetScope(), - true, nullptr, nullptr, si, + true, nullptr, nullptr, scr, JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE, resolvedp); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/XPCWrappedNativeProto.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/XPCWrappedNativeProto.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/XPCWrappedNativeProto.cpp 2017-01-13 01:40:14.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/XPCWrappedNativeProto.cpp 2017-01-16 01:43:47.000000000 +0000 @@ -21,8 +21,7 @@ : mScope(Scope), mJSProtoObject(nullptr), mClassInfo(ClassInfo), - mSet(Set), - mScriptableInfo(nullptr) + mSet(Set) { // This native object lives as long as its associated JSObject - killed // by finalization of the JSObject (or explicitly if Init fails). @@ -48,8 +47,6 @@ // Note that our weak ref to mScope is not to be trusted at this point. XPCNativeSet::ClearCacheEntryForClassInfo(mClassInfo); - - delete mScriptableInfo; } bool @@ -57,19 +54,14 @@ bool callPostCreatePrototype) { AutoJSContext cx; - nsIXPCScriptable* callback = scriptableCreateInfo ? - scriptableCreateInfo->GetCallback() : - nullptr; - if (callback) { - mScriptableInfo = - XPCNativeScriptableInfo::Construct(scriptableCreateInfo); - if (!mScriptableInfo) - return false; - } + nsCOMPtr callback = scriptableCreateInfo + ? scriptableCreateInfo->GetCallback() + : nullptr; + if (callback) + mScriptable = callback; const js::Class* jsclazz = - (mScriptableInfo && - mScriptableInfo->GetCallback()->AllowPropModsToPrototype()) + (mScriptable && mScriptable->AllowPropModsToPrototype()) ? &XPC_WN_ModsAllowed_Proto_JSClass : &XPC_WN_NoMods_Proto_JSClass; @@ -94,14 +86,12 @@ AutoJSContext cx; // Nothing to do if we don't have a scriptable callback. - nsIXPCScriptable* callback = mScriptableInfo ? mScriptableInfo->GetCallback() - : nullptr; - if (!callback) + if (!mScriptable) return true; // Call the helper. This can handle being called if it's not implemented, // so we don't have to check any sort of "want" here. See xpc_map_end.h. - nsresult rv = callback->PostCreatePrototype(cx, mJSProtoObject); + nsresult rv = mScriptable->PostCreatePrototype(cx, mJSProtoObject); if (NS_FAILED(rv)) { JS_SetPrivate(mJSProtoObject, nullptr); mJSProtoObject = nullptr; @@ -193,13 +183,11 @@ XPC_LOG_ALWAYS(("mScope @ %x", mScope)); XPC_LOG_ALWAYS(("mJSProtoObject @ %x", mJSProtoObject.get())); XPC_LOG_ALWAYS(("mSet @ %x", mSet.get())); - XPC_LOG_ALWAYS(("mScriptableInfo @ %x", mScriptableInfo)); - if (depth && mScriptableInfo) { - nsCOMPtr scr = mScriptableInfo->GetCallback(); + XPC_LOG_ALWAYS(("mScriptable @ %x", mScriptable.get())); + if (depth && mScriptable) { XPC_LOG_INDENT(); - XPC_LOG_ALWAYS(("mScriptable @ %x", scr.get())); - XPC_LOG_ALWAYS(("mFlags of %x", scr->GetScriptableFlags())); - XPC_LOG_ALWAYS(("mJSClass @ %x", mScriptableInfo->GetJSClass())); + XPC_LOG_ALWAYS(("mFlags of %x", mScriptable->GetScriptableFlags())); + XPC_LOG_ALWAYS(("mJSClass @ %x", mScriptable->GetJSClass())); XPC_LOG_OUTDENT(); } XPC_LOG_OUTDENT(); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/XPCWrapper.h firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/XPCWrapper.h --- firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/src/XPCWrapper.h 2017-01-13 01:40:15.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/src/XPCWrapper.h 2017-01-16 01:43:47.000000000 +0000 @@ -11,14 +11,6 @@ namespace XPCNativeWrapper { -// Given an XPCWrappedNative pointer and the name of a function on -// nsIXPCScriptable corresponding with a flag, returns 'true' if the flag is -// set. -// XXX Convert to using GetFlags() and not a macro. -#define NATIVE_HAS_FLAG(_wn, _flag) \ - ((_wn)->GetScriptableInfo() && \ - (_wn)->GetScriptableInfo()->GetCallback()->_flag()) - bool AttachNewConstructorObject(JSContext* aCx, JS::HandleObject aGlobalObject); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/wrappers/WrapperFactory.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/wrappers/WrapperFactory.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/wrappers/WrapperFactory.cpp 2017-01-13 01:40:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/wrappers/WrapperFactory.cpp 2017-01-16 01:44:21.000000000 +0000 @@ -203,7 +203,7 @@ RootedObject wrapScope(cx, scope); { - if (NATIVE_HAS_FLAG(&ccx, WantPreCreate)) { + if (ccx.GetScriptable() && ccx.GetScriptable()->WantPreCreate()) { // We have a precreate hook. This object might enforce that we only // ever create JS object for it. @@ -211,7 +211,7 @@ // being accessed across compartments. We would really prefer to // replace the above code with a test that says "do you only have one // wrapper?" - nsresult rv = wn->GetScriptableInfo()->GetCallback()-> + nsresult rv = wn->GetScriptable()-> PreCreate(wn->Native(), cx, scope, wrapScope.address()); if (NS_FAILED(rv)) { retObj.set(waive ? WaiveXray(cx, obj) : obj); @@ -250,7 +250,7 @@ // (the old scope). If (2) is the case, PreCreate will return the // scope of the document (the new scope). RootedObject probe(cx); - rv = wn->GetScriptableInfo()->GetCallback()-> + rv = wn->GetScriptable()-> PreCreate(wn->Native(), cx, currentScope, probe.address()); // Check for case (2). diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/wrappers/XrayWrapper.cpp firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/wrappers/XrayWrapper.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/js/xpconnect/wrappers/XrayWrapper.cpp 2017-01-13 01:40:37.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/js/xpconnect/wrappers/XrayWrapper.cpp 2017-01-16 01:44:21.000000000 +0000 @@ -1573,14 +1573,13 @@ { // Run the call hook of the wrapped native. XPCWrappedNative* wn = getWN(wrapper); - if (NATIVE_HAS_FLAG(wn, WantCall)) { + if (wn->GetScriptable() && wn->GetScriptable()->WantCall()) { XPCCallContext ccx(cx, wrapper, nullptr, JSID_VOIDHANDLE, args.length(), args.array(), args.rval().address()); if (!ccx.IsValid()) return false; bool ok = true; - nsresult rv = wn->GetScriptableInfo()->GetCallback()->Call( - wn, cx, wrapper, args, &ok); + nsresult rv = wn->GetScriptable()->Call(wn, cx, wrapper, args, &ok); if (NS_FAILED(rv)) { if (ok) XPCThrower::Throw(rv, cx); @@ -1599,14 +1598,14 @@ { // Run the construct hook of the wrapped native. XPCWrappedNative* wn = getWN(wrapper); - if (NATIVE_HAS_FLAG(wn, WantConstruct)) { + if (wn->GetScriptable() && wn->GetScriptable()->WantConstruct()) { XPCCallContext ccx(cx, wrapper, nullptr, JSID_VOIDHANDLE, args.length(), args.array(), args.rval().address()); if (!ccx.IsValid()) return false; bool ok = true; - nsresult rv = wn->GetScriptableInfo()->GetCallback()->Construct( - wn, cx, wrapper, args, &ok); + nsresult rv = + wn->GetScriptable()->Construct(wn, cx, wrapper, args, &ok); if (NS_FAILED(rv)) { if (ok) XPCThrower::Throw(rv, cx); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/changesets firefox-trunk-53.0~a1~hg20170115r329516/l10n/changesets --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/changesets 2017-01-13 02:26:08.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/changesets 2017-01-16 02:30:10.000000000 +0000 @@ -24,20 +24,20 @@ eu 734:503bd56cc92f fa 862:717e308d1b2d fi 819:b94e70f75e78 -fr 5893:f8e86caa13df +fr 5895:5c18e5e60d5d fy-NL 1700:7ecb0b172068 ga-IE 811:74801eb4fa9a gd 805:089dcd4ed213 gl 1532:79eda21c5b0b gu-IN 660:ef0d3c1d041a -he 937:5606717a01a3 +he 938:52b382b51c4e hi-IN 622:a0cd9c0dc2a0 hr 1183:96241bc72794 hu 1373:3a610eb64ab2 hy-AM 625:11b4926e5a05 id 843:7513196a8654 is 601:ed2f2f9fdc59 -it 5584:f9a0ea62b082 +it 5586:8a4f906c2f09 ja 972:51baad795f56 ja-JP-mac 973:91ffb751eaf1 kk 645:7c191b79eb1a @@ -60,7 +60,7 @@ pt-PT 3837:5c7949830393 rm 763:b4787f6f2074 ro 1259:ecad3f7b8163 -ru 2716:97f95f757ad4 +ru 2718:6dd152d57fb5 si 580:51f3b8e71db1 sk 2585:dbb5165fc4cd sl 1588:b9614acbf122 diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/fr/browser/chrome/browser/browser.dtd firefox-trunk-53.0~a1~hg20170115r329516/l10n/fr/browser/chrome/browser/browser.dtd --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/fr/browser/chrome/browser/browser.dtd 2017-01-13 02:07:35.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/fr/browser/chrome/browser/browser.dtd 2017-01-16 02:10:43.000000000 +0000 @@ -761,6 +761,9 @@ + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/fr/browser/chrome/browser/browser.properties firefox-trunk-53.0~a1~hg20170115r329516/l10n/fr/browser/chrome/browser/browser.properties --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/fr/browser/chrome/browser/browser.properties 2017-01-13 02:07:35.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/fr/browser/chrome/browser/browser.properties 2017-01-16 02:10:43.000000000 +0000 @@ -82,10 +82,6 @@ addonInstallRestartIgnoreButton=Plus tard addonInstallRestartIgnoreButton.accesskey=P -# LOCALIZATION NOTE (deveditionTheme.name): This should be nearly the brand name for aurora. -# See browser/branding/aurora/locales/*/brand.properties -deveditionTheme.name=Developer Edition - # LOCALIZATION NOTE (addonInstallError-1, addonInstallError-2, addonInstallError-3, addonInstallError-4, addonInstallError-5, addonLocalInstallError-1, addonLocalInstallError-2, addonLocalInstallError-3, addonLocalInstallError-4, addonLocalInstallError-5): # %1$S is the application name, %2$S is the add-on name addonInstallError-1=Le module complémentaire n’a pas pu être téléchargé à cause d’un échec de connexion. @@ -110,6 +106,14 @@ unsignedAddonsDisabled.learnMore.label=En savoir plus unsignedAddonsDisabled.learnMore.accesskey=E +# LOCALIZATION NOTE (compactLightTheme.name): This is displayed in about:addons -> Appearance +compactLightTheme.name=Compacte clair +compactLightTheme.description=Un thème compacte avec des couleurs claires. + +# LOCALIZATION NOTE (compactDarkTheme.name): This is displayed in about:addons -> Appearance +compactDarkTheme.name=Compacte sombre +compactDarkTheme.description=Un thème compacte avec des couleurs sombres. + # LOCALIZATION NOTE (lwthemeInstallRequest.message): %S will be replaced with # the host name of the site. lwthemeInstallRequest.message=Ce site (%S) a tenté d’installer un thème. @@ -600,8 +604,6 @@ emeNotifications.drmContentPlaying.button.label = Configurer… emeNotifications.drmContentPlaying.button.accesskey = C -# LOCALIZATION NOTE(emeNotifications.drmContentDisabled.message): NB: inserted via innerHTML, so please don't use <, > or & in this string. %S will be the 'learn more' link -emeNotifications.drmContentDisabled.message = Vous devez activer les DRM pour lire certains éléments audio ou vidéo sur cette page. %S emeNotifications.drmContentDisabled.button.label = Activer les DRM emeNotifications.drmContentDisabled.button.accesskey = A # LOCALIZATION NOTE(emeNotifications.drmContentDisabled.learnMoreLabel): NB: inserted via innerHTML, so please don't use <, > or & in this string. @@ -730,10 +732,8 @@ decoder.noCodecs.button = Me montrer comment decoder.noCodecs.accesskey = M decoder.noCodecs.message = Pour lire la vidéo, vous devez peut-être installer le Media Feature Pack de Microsoft. -decoder.noCodecsVista.message = Pour lire la vidéo, vous devez peut-être installer le Supplément de mise à jour de plate-forme pour Windows Vista de Microsoft. decoder.noCodecsLinux.message = Pour lire la vidéo, vous devez peut-être installer les codecs vidéo nécessaires. decoder.noHWAcceleration.message = Afin d’améliorer la qualité de la vidéo, vous devez peut-être installer le Media Feature Pack de Microsoft. -decoder.noHWAccelerationVista.message = Afin d’améliorer la qualité de la vidéo, vous devez peut-être installer le Supplément de mise à jour de plate-forme pour Windows Vista de Microsoft. decoder.noPulseAudio.message = Pour activer l’audio, vous devez peut-être installer le logiciel PulseAudio demandé. decoder.unsupportedLibavcodec.message = libavcodec pourrait être vulnérable ou n’est pas pris en charge, et devrait être mis à jour pour lire des vidéos. diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/fr/browser/chrome/browser/preferences/advanced.dtd firefox-trunk-53.0~a1~hg20170115r329516/l10n/fr/browser/chrome/browser/preferences/advanced.dtd --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/fr/browser/chrome/browser/preferences/advanced.dtd 2017-01-13 02:07:35.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/fr/browser/chrome/browser/preferences/advanced.dtd 2017-01-16 02:10:43.000000000 +0000 @@ -10,10 +10,10 @@ - - - - + + + + @@ -25,8 +25,8 @@ - - + + @@ -88,8 +88,8 @@ in preferences.properties --> - - + + @@ -103,10 +103,10 @@ - - - - + + + + @@ -115,12 +115,12 @@ - - - - - - + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/fr/browser/chrome/browser/preferences/colors.dtd firefox-trunk-53.0~a1~hg20170115r329516/l10n/fr/browser/chrome/browser/preferences/colors.dtd --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/fr/browser/chrome/browser/preferences/colors.dtd 2017-01-13 02:07:35.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/fr/browser/chrome/browser/preferences/colors.dtd 2017-01-16 02:10:43.000000000 +0000 @@ -6,12 +6,12 @@ - - + + - - - + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/fr/browser/chrome/browser/preferences/fonts.dtd firefox-trunk-53.0~a1~hg20170115r329516/l10n/fr/browser/chrome/browser/preferences/fonts.dtd --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/fr/browser/chrome/browser/preferences/fonts.dtd 2017-01-13 02:07:35.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/fr/browser/chrome/browser/preferences/fonts.dtd 2017-01-16 02:10:43.000000000 +0000 @@ -61,8 +61,8 @@ - - + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/fr/browser/chrome/browser/preferences/main.dtd firefox-trunk-53.0~a1~hg20170115r329516/l10n/fr/browser/chrome/browser/preferences/main.dtd --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/fr/browser/chrome/browser/preferences/main.dtd 2017-01-13 02:07:35.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/fr/browser/chrome/browser/preferences/main.dtd 2017-01-16 02:10:43.000000000 +0000 @@ -6,9 +6,9 @@ - + - + @@ -28,8 +28,8 @@ - - + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/fr/browser/chrome/browser/preferences/security.dtd firefox-trunk-53.0~a1~hg20170115r329516/l10n/fr/browser/chrome/browser/preferences/security.dtd --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/fr/browser/chrome/browser/preferences/security.dtd 2017-01-13 02:07:35.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/fr/browser/chrome/browser/preferences/security.dtd 2017-01-16 02:10:43.000000000 +0000 @@ -4,8 +4,8 @@ - - + + - - + + - - + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/it/browser/chrome/browser/preferences/tabs.dtd firefox-trunk-53.0~a1~hg20170115r329516/l10n/it/browser/chrome/browser/preferences/tabs.dtd --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/it/browser/chrome/browser/preferences/tabs.dtd 2017-01-13 02:12:24.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/it/browser/chrome/browser/preferences/tabs.dtd 2017-01-16 02:15:35.000000000 +0000 @@ -6,12 +6,12 @@ - - - - - - + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/accounts.properties firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/accounts.properties --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/accounts.properties 2017-01-13 02:20:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/accounts.properties 2017-01-16 02:23:59.000000000 +0000 @@ -11,6 +11,8 @@ verificationSentBody = Ссылка для подтверждения была отправлена на %S. verificationNotSentTitle = Не удалось отправить подтверждение verificationNotSentBody = Мы не можем отправить сейчас письмо для подтверждения, пожалуйста, повторите попытку позже. +deviceConnectedTitle = Синхронизация Firefox +deviceConnectedBody = Этот компьютер теперь синхронизируется с %S. syncStartNotification.title = Синхронизация включена syncStartNotification.body2 = %S сейчас начнёт синхронизироваться. deviceDisconnectedNotification.title = Синхронизация отсоединилась diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/browser.dtd firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/browser.dtd --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/browser.dtd 2017-01-13 02:20:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/browser.dtd 2017-01-16 02:23:59.000000000 +0000 @@ -553,6 +553,8 @@ + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/browser.properties firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/browser.properties --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/browser.properties 2017-01-13 02:20:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/browser.properties 2017-01-16 02:23:59.000000000 +0000 @@ -59,7 +59,10 @@ unsignedAddonsDisabled.message = Одно или несколько установленных дополнений не могут быть проверены, поэтому они были отключены. unsignedAddonsDisabled.learnMore.label = Подробнее unsignedAddonsDisabled.learnMore.accesskey = о -deveditionTheme.name = Developer Edition +compactLightTheme.name = Компактная светлая +compactLightTheme.description = Компактная тема со светлой цветовой гаммой. +compactDarkTheme.name = Компактная тёмная +compactDarkTheme.description = Компактная тема с тёмной цветовой гаммой. lwthemeInstallRequest.message = Этот сайт (%S) попытался установить тему. lwthemeInstallRequest.allowButton = Разрешить lwthemeInstallRequest.allowButton.accesskey = ш @@ -187,7 +190,7 @@ puNotifyText = %S был обновлён puAlertTitle = %S обновлён puAlertText = Щёлкните здесь для получения подробностей -geolocation.allowLocation = Разрешаю доступ к местоположению +geolocation.allowLocation = Разрешаю geolocation.allowLocation.accesskey = а geolocation.dontAllowLocation = Не разрешаю geolocation.dontAllowLocation.accesskey = е @@ -310,7 +313,6 @@ emeNotifications.drmContentPlaying.message2 = Некоторое аудио или видео на этом сайте использует программу DRM, что может ограничить возможности, предоставляемые вам %S. emeNotifications.drmContentPlaying.button.label = Настроить… emeNotifications.drmContentPlaying.button.accesskey = а -emeNotifications.drmContentDisabled.message = Для воспроизведения некоторого аудио или видео на этой странице вы должны включить DRM. %S emeNotifications.drmContentDisabled.button.label = Включить DRM emeNotifications.drmContentDisabled.button.accesskey = ю emeNotifications.drmContentDisabled.learnMoreLabel = Подробнее @@ -372,11 +374,8 @@ decoder.noCodecs.button = Подробнее decoder.noCodecs.accesskey = о decoder.noCodecs.message = Для воспроизведения видео вам может потребоваться установить Мedia Feature Pack от Microsoft. -decoder.noCodecsVista.message = Для воспроизведения видео вам может потребоваться установить Platform Update Supplement для Windows Vista от Microsoft. -decoder.noCodecsXP.message = Для воспроизведения видео вам может потребоваться включить Плагин расшифровки контента Primetime от Adobe. decoder.noCodecsLinux.message = Для воспроизведения видео вам может потребоваться установить необходимые видеокодеки. decoder.noHWAcceleration.message = Для улучшения качества видео вам может потребоваться установить Мedia Feature Pack от Microsoft. -decoder.noHWAccelerationVista.message = Для улучшения качества видео вам может потребоваться установить Platform Update Supplement для Windows Vista от Microsoft. decoder.noPulseAudio.message = Для воспроизведения аудио вам может потребоваться установить необходимое программное обеспечение PulseAudio. decoder.unsupportedLibavcodec.message = libavcodec может быть уязвим или не поддерживается, и должен быть обновлён для воспроизведения видео. captivePortal.infoMessage2 = Эта сеть может потребовать от вас произвести авторизацию для получения доступа в Интернет. diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/preferences/advanced.dtd firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/preferences/advanced.dtd --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/preferences/advanced.dtd 2017-01-13 02:20:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/preferences/advanced.dtd 2017-01-16 02:24:00.000000000 +0000 @@ -6,10 +6,10 @@ - - - - + + + + @@ -19,8 +19,8 @@ - - + + @@ -59,8 +59,8 @@ - - + + @@ -70,22 +70,22 @@ - - - - + + + + - - - - - - + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/preferences/colors.dtd firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/preferences/colors.dtd --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/preferences/colors.dtd 2017-01-13 02:20:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/preferences/colors.dtd 2017-01-16 02:24:00.000000000 +0000 @@ -5,11 +5,11 @@ - - - - - + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/preferences/fonts.dtd firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/preferences/fonts.dtd --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/preferences/fonts.dtd 2017-01-13 02:20:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/preferences/fonts.dtd 2017-01-16 02:24:00.000000000 +0000 @@ -50,8 +50,8 @@ - - + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/preferences/main.dtd firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/preferences/main.dtd --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/preferences/main.dtd 2017-01-13 02:20:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/preferences/main.dtd 2017-01-16 02:24:00.000000000 +0000 @@ -5,9 +5,9 @@ - + - + @@ -24,8 +24,8 @@ - - + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/preferences/security.dtd firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/preferences/security.dtd --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/preferences/security.dtd 2017-01-13 02:20:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/preferences/security.dtd 2017-01-16 02:24:00.000000000 +0000 @@ -3,14 +3,14 @@ - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - - + + - - + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/preferences/siteDataSettings.dtd firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/preferences/siteDataSettings.dtd --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/preferences/siteDataSettings.dtd 2017-01-13 02:20:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/preferences/siteDataSettings.dtd 2017-01-16 02:24:00.000000000 +0000 @@ -7,3 +7,5 @@ + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/preferences/tabs.dtd firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/preferences/tabs.dtd --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/browser/chrome/browser/preferences/tabs.dtd 2017-01-13 02:20:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/browser/chrome/browser/preferences/tabs.dtd 2017-01-16 02:24:00.000000000 +0000 @@ -6,12 +6,12 @@ - - - - - - + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/devtools/client/netmonitor.properties firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/devtools/client/netmonitor.properties --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/devtools/client/netmonitor.properties 2017-01-13 02:20:23.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/devtools/client/netmonitor.properties 2017-01-16 02:24:00.000000000 +0000 @@ -26,6 +26,7 @@ responseHeaders = Заголовки ответа requestCookies = Куки запроса responseCookies = Куки ответа +responsePayload = Полезная нагрузка ответа jsonFilterText = Свойства фильтра jsonScopeName = JSON jsonpScopeName = JSONP → callback %S() @@ -158,7 +159,7 @@ netmonitor.context.copyResponseHeaders.accesskey = о netmonitor.context.copyResponse = Копировать ответ netmonitor.context.copyResponse.accesskey = и -netmonitor.context.copyImageAsDataUri = Копировать изображение как URL данных +netmonitor.context.copyImageAsDataUri = Копировать изображение как URI данных netmonitor.context.copyImageAsDataUri.accesskey = ж netmonitor.context.copyAllAsHar = Копировать всё как HAR netmonitor.context.copyAllAsHar.accesskey = п diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/devtools/client/webconsole.properties firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/devtools/client/webconsole.properties --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/devtools/client/webconsole.properties 2017-01-13 02:20:23.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/devtools/client/webconsole.properties 2017-01-16 02:24:00.000000000 +0000 @@ -54,3 +54,15 @@ webconsole.close.key = CmdOrCtrl+W webconsole.clear.key = Ctrl+Shift+L webconsole.clear.keyOSX = Ctrl+L +webconsole.menu.copyURL.label = Копировать ссылку +webconsole.menu.copyURL.accesskey = о +webconsole.menu.openURL.label = Открыть URL в новой вкладке +webconsole.menu.openURL.accesskey = ы +webconsole.menu.openInVarView.label = Открыть в Виде Переменных +webconsole.menu.openInVarView.accesskey = к +webconsole.menu.storeAsGlobalVar.label = Хранить как глобальную переменную +webconsole.menu.storeAsGlobalVar.accesskey = н +webconsole.menu.copy.label = Копировать +webconsole.menu.copy.accesskey = и +webconsole.menu.selectAll.label = Выделить всё +webconsole.menu.selectAll.accesskey = л diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/toolkit/chrome/mozapps/downloads/downloads.properties firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/toolkit/chrome/mozapps/downloads/downloads.properties --- firefox-trunk-53.0~a1~hg20170113r329171/l10n/ru/toolkit/chrome/mozapps/downloads/downloads.properties 2017-01-13 02:20:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/l10n/ru/toolkit/chrome/mozapps/downloads/downloads.properties 2017-01-16 02:24:00.000000000 +0000 @@ -2,10 +2,10 @@ # 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/. -seconds = секунда;секунды;секунд -minutes = минута;минуты;минут -hours = час;часа;часов -days = день;дня;дней +shortSeconds = сек;сек;сек +shortMinutes = мин;мин;мин +shortHours = ч;ч;ч +shortDays = д;д;д paused = Загрузка приостановлена — #1 downloading = Загрузка notStarted = Не начато @@ -44,11 +44,11 @@ transferSameUnits2 = %1$S из %2$S %3$S transferDiffUnits2 = %1$S %2$S из %3$S %4$S transferNoTotal2 = %1$S %2$S -timePair2 = %1$S %2$S -timeLeftSingle2 = Осталось %1$S -timeLeftDouble2 = Осталось %1$S %2$S -timeFewSeconds = Осталось несколько секунд -timeUnknown = Оставшееся время неизвестно +timePair3 = %1$S%2$S +timeLeftSingle3 = Осталось %1$S +timeLeftDouble3 = Осталось %1$S %2$S +timeFewSeconds2 = Осталось несколько секунд +timeUnknown2 = Оставшееся время неизвестно doneSize = #1 #2 doneScheme2 = ресурс %1$S doneFileScheme = локальный файл diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/base/crashtests/crashtests.list firefox-trunk-53.0~a1~hg20170115r329516/layout/base/crashtests/crashtests.list --- firefox-trunk-53.0~a1~hg20170113r329171/layout/base/crashtests/crashtests.list 2017-01-13 01:41:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/base/crashtests/crashtests.list 2017-01-16 01:45:01.000000000 +0000 @@ -129,7 +129,7 @@ load 364427-1.html load 365909-1.xhtml load 365909-2.xhtml -skip-if(stylo) load 366128-1.xhtml # bug 1323654 +load 366128-1.xhtml load 366271-1.html load 366967-1.html load 367015-1.html @@ -211,7 +211,7 @@ load 403569-1.xhtml load 403569-2.xhtml load 403569-3.xhtml -skip-if(stylo) load 404218-1.xhtml # bug 1323671 +load 404218-1.xhtml load 404491-1.html load 404721-1.xhtml load 404721-2.xhtml @@ -316,7 +316,7 @@ load 492112-1.xhtml load 492163-1.xhtml load 495350-1.html -skip-if(stylo) load 496011-1.xhtml # bug 1323649 +load 496011-1.xhtml load 497519-1.xhtml load 497519-2.xhtml load 497519-3.xhtml diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/base/moz.build firefox-trunk-53.0~a1~hg20170115r329516/layout/base/moz.build --- firefox-trunk-53.0~a1~hg20170113r329171/layout/base/moz.build 2017-01-13 01:41:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/base/moz.build 2017-01-16 01:45:01.000000000 +0000 @@ -80,6 +80,7 @@ 'RestyleManagerHandleInlines.h', 'ServoRestyleManager.h', 'ServoRestyleManagerInlines.h', + 'ShapeUtils.h', 'StaticPresData.h', ] @@ -114,6 +115,7 @@ 'RestyleTracker.cpp', 'ScrollbarStyles.cpp', 'ServoRestyleManager.cpp', + 'ShapeUtils.cpp', 'StackArena.cpp', 'StaticPresData.cpp', 'TouchManager.cpp', diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/base/nsCSSFrameConstructor.cpp firefox-trunk-53.0~a1~hg20170115r329516/layout/base/nsCSSFrameConstructor.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/layout/base/nsCSSFrameConstructor.cpp 2017-01-13 01:41:04.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/base/nsCSSFrameConstructor.cpp 2017-01-16 01:45:10.000000000 +0000 @@ -7366,30 +7366,37 @@ return rv; } + // The frame constructor uses this codepath both for bonafide newly-added + // content and for RestyleManager-driven frame construction (RECONSTRUCT_FRAME + // and lazy frame construction). If we're using the Servo style system, we + // want to ensure that styles get resolved in the first case, whereas for the + // second case they should have already been resolved if needed. + bool isNewlyAddedContentForServo = aContainer->IsStyledByServo() && + !RestyleManager()->AsBase()->IsInStyleRefresh(); + // See comment in ContentRangeInserted for why this is necessary. if (!GetContentInsertionFrameFor(aContainer) && !aContainer->IsActiveChildrenElement()) { + // We're punting on frame construction because there's no container frame. + // The Servo-backed style system handles this case like the lazy frame + // construction case. + if (isNewlyAddedContentForServo) { + aContainer->AsElement()->NoteDirtyDescendantsForServo(); + } return NS_OK; } if (aAllowLazyConstruction && MaybeConstructLazily(CONTENTAPPEND, aContainer, aFirstNewContent)) { - if (aContainer->IsStyledByServo()) { + if (isNewlyAddedContentForServo) { aContainer->AsElement()->NoteDirtyDescendantsForServo(); } return NS_OK; } // We couldn't construct lazily. Make Servo eagerly traverse the subtree. - if (ServoStyleSet* set = mPresShell->StyleSet()->GetAsServo()) { - // We use the same codepaths to handle both of the following cases: - // (a) Newly-appended content for which lazy frame construction is disallowed. - // (b) Lazy frame construction driven by the restyle manager. - // We need the styles for (a). In the case of (b), the Servo traversal has - // already happened, so we don't need to do it again. - if (!RestyleManager()->AsBase()->IsInStyleRefresh()) { - set->StyleNewChildren(aContainer->AsElement()); - } + if (isNewlyAddedContentForServo) { + mPresShell->StyleSet()->AsServo()->StyleNewChildren(aContainer->AsElement()); } LAYOUT_PHASE_TEMP_EXIT(); @@ -7817,6 +7824,15 @@ return rv; } + // The frame constructor uses this codepath both for bonafide newly-added + // content and for RestyleManager-driven frame construction (RECONSTRUCT_FRAME + // and lazy frame construction). If we're using the Servo style system, we + // want to ensure that styles get resolved in the first case, whereas for the + // second case they should have already been resolved if needed. + bool isNewlyAddedContentForServo = aContainer->IsStyledByServo() && + !RestyleManager()->AsBase()->IsInStyleRefresh(); + + // Put 'parentFrame' inside a scope so we don't confuse it with // 'insertion.mParentFrame' later. { @@ -7825,6 +7841,12 @@ // a parent. While its uncommon to change the structure of the default content itself, a label, // for example, can be reframed by having its value attribute set or removed. if (!parentFrame && !aContainer->IsActiveChildrenElement()) { + // We're punting on frame construction because there's no container frame. + // The Servo-backed style system handles this case like the lazy frame + // construction case. + if (isNewlyAddedContentForServo) { + aContainer->AsElement()->NoteDirtyDescendantsForServo(); + } return NS_OK; } @@ -7834,7 +7856,7 @@ if (aAllowLazyConstruction && MaybeConstructLazily(CONTENTINSERT, aContainer, aStartChild)) { - if (aContainer->IsStyledByServo()) { + if (isNewlyAddedContentForServo) { aContainer->AsElement()->NoteDirtyDescendantsForServo(); } return NS_OK; @@ -7842,15 +7864,8 @@ } // We couldn't construct lazily. Make Servo eagerly traverse the subtree. - if (ServoStyleSet* set = mPresShell->StyleSet()->GetAsServo()) { - // We use the same codepaths to handle both of the following cases: - // (a) Newly-appended content for which lazy frame construction is disallowed. - // (b) Lazy frame construction driven by the restyle manager. - // We need the styles for (a). In the case of (b), the Servo traversal has - // already happened, so we don't need to do it again. - if (!RestyleManager()->AsBase()->IsInStyleRefresh()) { - set->StyleNewChildren(aContainer->AsElement()); - } + if (isNewlyAddedContentForServo) { + mPresShell->StyleSet()->AsServo()->StyleNewChildren(aContainer->AsElement()); } InsertionPoint insertion; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/base/nsLayoutUtils.cpp firefox-trunk-53.0~a1~hg20170115r329516/layout/base/nsLayoutUtils.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/layout/base/nsLayoutUtils.cpp 2017-01-13 01:41:05.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/base/nsLayoutUtils.cpp 2017-01-16 01:45:20.000000000 +0000 @@ -22,6 +22,7 @@ #include "mozilla/dom/ContentChild.h" #include "mozilla/Unused.h" #include "nsCharTraits.h" +#include "nsDocument.h" #include "nsFontMetrics.h" #include "nsPresContext.h" #include "nsIContent.h" diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/base/nsStyleChangeList.cpp firefox-trunk-53.0~a1~hg20170115r329516/layout/base/nsStyleChangeList.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/layout/base/nsStyleChangeList.cpp 2017-01-13 01:41:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/base/nsStyleChangeList.cpp 2017-01-16 01:45:22.000000000 +0000 @@ -18,6 +18,10 @@ { MOZ_ASSERT(aFrame || (aHint & nsChangeHint_ReconstructFrame), "must have frame"); + MOZ_ASSERT(aHint, "No hint to process?"); + MOZ_ASSERT(!(aHint & nsChangeHint_NeutralChange), + "Neutral changes do not need extra processing, " + "and should be stripped out"); MOZ_ASSERT(aContent || !(aHint & nsChangeHint_ReconstructFrame), "must have content"); // XXXbz we should make this take Element instead of nsIContent diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/base/PresShell.cpp firefox-trunk-53.0~a1~hg20170115r329516/layout/base/PresShell.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/layout/base/PresShell.cpp 2017-01-13 01:40:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/base/PresShell.cpp 2017-01-16 01:44:21.000000000 +0000 @@ -8044,6 +8044,9 @@ } } } + if (aEvent->mMessage == eKeyDown) { + mIsLastKeyDownCanceled = aEvent->mFlags.mDefaultPrevented; + } break; } case eMouseUp: @@ -8833,6 +8836,9 @@ !doc->EventHandlingSuppressed()) { nsAutoPtr ev(mDelayedEvents[0].forget()); mDelayedEvents.RemoveElementAt(0); + if (ev->IsKeyPressEvent() && mIsLastKeyDownCanceled) { + continue; + } ev->Dispatch(); } if (!doc->EventHandlingSuppressed()) { @@ -9638,6 +9644,12 @@ mEvent = keyEvent; } +bool +PresShell::DelayedKeyEvent::IsKeyPressEvent() +{ + return mEvent->mMessage == eKeyPress; +} + // Start of DEBUG only code #ifdef DEBUG diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/base/PresShell.h firefox-trunk-53.0~a1~hg20170115r329516/layout/base/PresShell.h --- firefox-trunk-53.0~a1~hg20170113r329171/layout/base/PresShell.h 2017-01-13 01:40:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/base/PresShell.h 2017-01-16 01:44:22.000000000 +0000 @@ -600,6 +600,7 @@ public: virtual ~DelayedEvent() { } virtual void Dispatch() { } + virtual bool IsKeyPressEvent() { return false; } }; class DelayedInputEvent : public DelayedEvent @@ -624,6 +625,7 @@ { public: explicit DelayedKeyEvent(mozilla::WidgetKeyboardEvent* aEvent); + virtual bool IsKeyPressEvent() override; }; // Check if aEvent is a mouse event and record the mouse location for later @@ -903,6 +905,8 @@ // Whether the widget has received a paint message yet. bool mHasReceivedPaintMessage : 1; + bool mIsLastKeyDownCanceled : 1; + static bool sDisableNonTestMouseEvents; }; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/base/RestyleTracker.cpp firefox-trunk-53.0~a1~hg20170115r329516/layout/base/RestyleTracker.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/layout/base/RestyleTracker.cpp 2017-01-13 01:40:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/base/RestyleTracker.cpp 2017-01-16 01:44:22.000000000 +0000 @@ -61,9 +61,7 @@ struct RestyleEnumerateData : RestyleTracker::Hints { RefPtr mElement; -#if defined(MOZ_ENABLE_PROFILER_SPS) UniqueProfilerBacktrace mBacktrace; -#endif }; inline void @@ -257,12 +255,10 @@ data->mRestyleHint, MarkerTracingType::START))); } -#if defined(MOZ_ENABLE_PROFILER_SPS) Maybe profilerRAII; if (profiler_feature_active("restyle")) { profilerRAII.emplace("Paint", "Styles", Move(data->mBacktrace)); } -#endif ProcessOneRestyle(element, data->mRestyleHint, data->mChangeHint, data->mRestyleHintData); AddRestyleRootsIfAwaitingRestyle(data->mDescendants); @@ -337,9 +333,7 @@ // We can move data since we'll be clearing mPendingRestyles after // we finish enumerating it. restyle->mRestyleHintData = Move(data->mRestyleHintData); -#if defined(MOZ_ENABLE_PROFILER_SPS) restyle->mBacktrace = Move(data->mBacktrace); -#endif #ifdef RESTYLE_LOGGING count++; @@ -365,12 +359,10 @@ index++, count); LOG_RESTYLE_INDENT(); -#if defined(MOZ_ENABLE_PROFILER_SPS) Maybe profilerRAII; if (profiler_feature_active("restyle")) { profilerRAII.emplace("Paint", "Styles", Move(currentRestyle->mBacktrace)); } -#endif if (isTimelineRecording) { timelines->AddMarkerForDocShell(docShell, Move( MakeUnique( diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/base/RestyleTracker.h firefox-trunk-53.0~a1~hg20170115r329516/layout/base/RestyleTracker.h --- firefox-trunk-53.0~a1~hg20170113r329171/layout/base/RestyleTracker.h 2017-01-13 01:40:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/base/RestyleTracker.h 2017-01-16 01:44:22.000000000 +0000 @@ -22,10 +22,6 @@ #include "GeckoProfiler.h" #include "mozilla/Maybe.h" -#if defined(MOZ_ENABLE_PROFILER_SPS) -#include "ProfilerBacktrace.h" -#endif - namespace mozilla { class RestyleManager; @@ -128,9 +124,7 @@ // that we called AddPendingRestyle for and found the element this is // the RestyleData for as its nearest restyle root. nsTArray> mDescendants; -#if defined(MOZ_ENABLE_PROFILER_SPS) UniqueProfilerBacktrace mBacktrace; -#endif }; /** @@ -265,11 +259,9 @@ if (!existingData) { RestyleData* rd = new RestyleData(aRestyleHint, aMinChangeHint, aRestyleHintData); -#if defined(MOZ_ENABLE_PROFILER_SPS) if (profiler_feature_active("restyle")) { rd->mBacktrace = profiler_get_backtrace(); } -#endif mPendingRestyles.Put(aElement, rd); return false; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/base/ServoRestyleManager.cpp firefox-trunk-53.0~a1~hg20170115r329516/layout/base/ServoRestyleManager.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/layout/base/ServoRestyleManager.cpp 2017-01-13 01:40:39.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/base/ServoRestyleManager.cpp 2017-01-16 01:44:22.000000000 +0000 @@ -30,6 +30,8 @@ nsRestyleHint aRestyleHint, nsChangeHint aMinChangeHint) { + MOZ_ASSERT(!(aMinChangeHint & nsChangeHint_NeutralChange), + "Didn't expect explicit change hints to be neutral!"); if (MOZ_UNLIKELY(IsDisconnected()) || MOZ_UNLIKELY(PresContext()->PresShell()->IsDestroying())) { return; @@ -147,8 +149,9 @@ // FIXME(bholley): Once we transfer ownership of the styles to the frame, we // can fast-reject without the FFI call by checking mServoData for null. nsChangeHint changeHint = Servo_TakeChangeHint(aElement); - if (changeHint) { - aChangeListToProcess.AppendChange(primaryFrame, aElement, changeHint); + if (changeHint & ~nsChangeHint_NeutralChange) { + aChangeListToProcess.AppendChange( + primaryFrame, aElement, changeHint & ~nsChangeHint_NeutralChange); } // If our change hint is reconstruct, we delegate to the frame constructor, @@ -227,11 +230,18 @@ StyleChildrenIterator it(aElement); for (nsIContent* n = it.GetNextChild(); n; n = it.GetNextChild()) { if (traverseElementChildren && n->IsElement()) { - MOZ_ASSERT(primaryFrame, - "Frame construction should be scheduled, and it takes the " - "correct style for the children, so no need to be here."); - RecreateStyleContexts(n->AsElement(), primaryFrame->StyleContext(), - aStyleSet, aChangeListToProcess); + if (!primaryFrame) { + // The frame constructor presumably decided to suppress frame + // construction on this subtree. Just clear the dirty descendants + // bit from the subtree, since there's no point in harvesting the + // change hints. + MOZ_ASSERT(!n->AsElement()->GetPrimaryFrame(), + "Only display:contents should do this, and we don't handle that yet"); + ClearDirtyDescendantsFromSubtree(n->AsElement()); + } else { + RecreateStyleContexts(n->AsElement(), primaryFrame->StyleContext(), + aStyleSet, aChangeListToProcess); + } } else if (traverseTextChildren && n->IsNodeOfType(nsINode::eTEXT)) { RecreateStyleContextsForText(n, primaryFrame->StyleContext(), aStyleSet); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/base/ShapeUtils.cpp firefox-trunk-53.0~a1~hg20170115r329516/layout/base/ShapeUtils.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/layout/base/ShapeUtils.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/base/ShapeUtils.cpp 2017-01-16 01:44:22.000000000 +0000 @@ -0,0 +1,80 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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 "mozilla/ShapeUtils.h" + +#include + +#include "nsCSSRendering.h" +#include "nsRuleNode.h" +#include "nsStyleCoord.h" +#include "nsStyleStruct.h" +#include "SVGContentUtils.h" + +namespace mozilla { + +nscoord +ShapeUtils::ComputeShapeRadius(const StyleShapeRadius aType, + const nscoord aCenter, + const nscoord aPosMin, + const nscoord aPosMax) +{ + nscoord dist1 = std::abs(aPosMin - aCenter); + nscoord dist2 = std::abs(aPosMax - aCenter); + nscoord length = 0; + switch (aType) { + case StyleShapeRadius::FarthestSide: + length = dist1 > dist2 ? dist1 : dist2; + break; + case StyleShapeRadius::ClosestSide: + length = dist1 > dist2 ? dist2 : dist1; + break; + } + return length; +} + +nsPoint +ShapeUtils::ComputeCircleOrEllipseCenter(StyleBasicShape* const aBasicShape, + const nsRect& aRefBox) +{ + nsPoint topLeft, anchor; + nsSize size(aRefBox.Size()); + nsImageRenderer::ComputeObjectAnchorPoint(aBasicShape->GetPosition(), + size, size, + &topLeft, &anchor); + return nsPoint(anchor.x + aRefBox.x, anchor.y + aRefBox.y); +} + +nscoord +ShapeUtils::ComputeCircleRadius(StyleBasicShape* const aBasicShape, + const nsPoint& aCenter, + const nsRect& aRefBox) +{ + const nsTArray& coords = aBasicShape->Coordinates(); + MOZ_ASSERT(coords.Length() == 1, "wrong number of arguments"); + nscoord r = 0; + if (coords[0].GetUnit() == eStyleUnit_Enumerated) { + const auto styleShapeRadius = coords[0].GetEnumValue(); + nscoord horizontal = + ComputeShapeRadius(styleShapeRadius, aCenter.x, aRefBox.x, aRefBox.XMost()); + nscoord vertical = + ComputeShapeRadius(styleShapeRadius, aCenter.y, aRefBox.y, aRefBox.YMost()); + r = styleShapeRadius == StyleShapeRadius::FarthestSide + ? std::max(horizontal, vertical) + : std::min(horizontal, vertical); + } else { + // We resolve percent value for circle() as defined here: + // https://drafts.csswg.org/css-shapes/#funcdef-circle + double referenceLength = + SVGContentUtils::ComputeNormalizedHypotenuse(aRefBox.width, + aRefBox.height); + r = nsRuleNode::ComputeCoordPercentCalc(coords[0], + NSToCoordRound(referenceLength)); + } + return r; +} + +} // namespace mozilla diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/base/ShapeUtils.h firefox-trunk-53.0~a1~hg20170115r329516/layout/base/ShapeUtils.h --- firefox-trunk-53.0~a1~hg20170113r329171/layout/base/ShapeUtils.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/base/ShapeUtils.h 2017-01-16 01:44:22.000000000 +0000 @@ -0,0 +1,55 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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/. */ + +#ifndef mozilla_ShapeUtils_h +#define mozilla_ShapeUtils_h + +#include "nsCoord.h" +#include "nsStyleConsts.h" + +struct nsPoint; +struct nsRect; + +namespace mozilla { +class StyleBasicShape; + +// ShapeUtils is a namespace class containing utility functions related to +// processing basic shapes in the CSS Shapes Module. +// https://drafts.csswg.org/css-shapes/#basic-shape-functions +// +struct ShapeUtils final +{ + // Compute the length of a keyword , i.e. closest-side or + // farthest-side, for a circle or an ellipse on a single dimension. The + // caller needs to call for both dimensions and combine the result. + // https://drafts.csswg.org/css-shapes/#typedef-shape-radius. + // + // @return The length of the radius in app units. + static nscoord ComputeShapeRadius(const StyleShapeRadius aType, + const nscoord aCenter, + const nscoord aPosMin, + const nscoord aPosMax); + + // Compute the center of a circle or an ellipse. + // + // @param aRefBox The reference box of the basic shape. + // @return The point of the center. + static nsPoint ComputeCircleOrEllipseCenter( + StyleBasicShape* const aBasicShape, + const nsRect& aRefBox); + + // Compute the radius for a circle. + // @param aCenter the center of the circle. + // @param aRefBox the reference box of the circle. + // @return The length of the radius in app units. + static nscoord ComputeCircleRadius( + mozilla::StyleBasicShape* const aBasicShape, + const nsPoint& aCenter, const nsRect& aRefBox); +}; + +} // namespace mozilla + +#endif // mozilla_ShapeUtils_h diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/generic/BlockReflowInput.cpp firefox-trunk-53.0~a1~hg20170115r329516/layout/generic/BlockReflowInput.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/layout/generic/BlockReflowInput.cpp 2017-01-13 01:42:55.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/generic/BlockReflowInput.cpp 2017-01-16 01:46:11.000000000 +0000 @@ -988,9 +988,8 @@ region.BSize(wm) = std::max(region.BSize(wm), ContentBSize() - floatPos.B(wm)); } - DebugOnly rv = mFloatManager->AddFloat(aFloat, region, wm, - ContainerSize()); - MOZ_ASSERT(NS_SUCCEEDED(rv), "bad float placement"); + mFloatManager->AddFloat(aFloat, region, wm, ContainerSize()); + // store region nsFloatManager::StoreRegionFor(wm, aFloat, region, ContainerSize()); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/generic/crashtests/crashtests.list firefox-trunk-53.0~a1~hg20170115r329516/layout/generic/crashtests/crashtests.list --- firefox-trunk-53.0~a1~hg20170113r329171/layout/generic/crashtests/crashtests.list 2017-01-13 01:43:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/generic/crashtests/crashtests.list 2017-01-16 01:47:03.000000000 +0000 @@ -207,7 +207,7 @@ load 406137.html load 406380.html load 406902-1.html -skip-if(stylo) load 407009-1.xhtml # bug 1323654 +load 407009-1.xhtml load 408304-1.xhtml load 408602-1.html load 408737-1.html @@ -262,7 +262,7 @@ load 425253-1.html load 426040-1.html load 426272-1.html -skip-if(stylo) load 428263-1.html # bug 1323671 +load 428263-1.html load 429458.xhtml load 429960-1.html load 429960-2.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/generic/nsFloatManager.cpp firefox-trunk-53.0~a1~hg20170115r329516/layout/generic/nsFloatManager.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/layout/generic/nsFloatManager.cpp 2017-01-13 01:43:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/generic/nsFloatManager.cpp 2017-01-16 01:47:05.000000000 +0000 @@ -10,6 +10,7 @@ #include #include "mozilla/ReflowInput.h" +#include "mozilla/ShapeUtils.h" #include "nsBlockFrame.h" #include "nsError.h" #include "nsIPresShell.h" @@ -187,7 +188,7 @@ // There aren't any more floats that could intersect this band. break; } - if (fi.IsEmpty()) { + if (fi.IsEmpty(aShapeType)) { // For compatibility, ignore floats with empty rects, even though it // disagrees with the spec. (We might want to fix this in the // future, though.) @@ -261,7 +262,7 @@ lineRight - lineLeft, blockSize, haveFloats); } -nsresult +void nsFloatManager::AddFloat(nsIFrame* aFloatFrame, const LogicalRect& aMarginRect, WritingMode aWM, const nsSize& aContainerSize) { @@ -290,10 +291,7 @@ if (thisBEnd > sideBEnd) sideBEnd = thisBEnd; - if (!mFloats.AppendElement(info)) - return NS_ERROR_OUT_OF_MEMORY; - - return NS_OK; + mFloats.AppendElement(Move(info)); } // static @@ -531,6 +529,145 @@ } ///////////////////////////////////////////////////////////////////////////// +// BoxShapeInfo + +nscoord +nsFloatManager::BoxShapeInfo::LineLeft(WritingMode aWM, + const nscoord aBStart, + const nscoord aBEnd) const +{ + nscoord radii[8]; + bool hasRadii = mFrame->GetShapeBoxBorderRadii(radii); + + if (!hasRadii) { + return mShapeBoxRect.x; + } + + // Get the physical side for line-left since border-radii are in + // the physical axis. + mozilla::Side lineLeftSide = + aWM.PhysicalSide(aWM.LogicalSideForLineRelativeDir(eLineRelativeDirLeft)); + nscoord blockStartCornerRadiusL = + radii[SideToHalfCorner(lineLeftSide, true, false)]; + nscoord blockStartCornerRadiusB = + radii[SideToHalfCorner(lineLeftSide, true, true)]; + nscoord blockEndCornerRadiusL = + radii[SideToHalfCorner(lineLeftSide, false, false)]; + nscoord blockEndCornerRadiusB = + radii[SideToHalfCorner(lineLeftSide, false, true)]; + + if (aWM.IsLineInverted()) { + // This happens only when aWM is vertical-lr. Need to swap blockStart + // and blockEnd corners. + std::swap(blockStartCornerRadiusL, blockEndCornerRadiusL); + std::swap(blockStartCornerRadiusB, blockEndCornerRadiusB); + } + + nscoord lineLeftDiff = + ComputeEllipseLineInterceptDiff( + mShapeBoxRect.y, mShapeBoxRect.YMost(), + blockStartCornerRadiusL, blockStartCornerRadiusB, + blockEndCornerRadiusL, blockEndCornerRadiusB, + aBStart, aBEnd); + return mShapeBoxRect.x + lineLeftDiff; +} + +nscoord +nsFloatManager::BoxShapeInfo::LineRight(WritingMode aWM, + const nscoord aBStart, + const nscoord aBEnd) const +{ + nscoord radii[8]; + bool hasRadii = mFrame->GetShapeBoxBorderRadii(radii); + + if (!hasRadii) { + return mShapeBoxRect.XMost(); + } + + // Get the physical side for line-right since border-radii are in + // the physical axis. + mozilla::Side lineRightSide = + aWM.PhysicalSide(aWM.LogicalSideForLineRelativeDir(eLineRelativeDirRight)); + nscoord blockStartCornerRadiusL = + radii[SideToHalfCorner(lineRightSide, false, false)]; + nscoord blockStartCornerRadiusB = + radii[SideToHalfCorner(lineRightSide, false, true)]; + nscoord blockEndCornerRadiusL = + radii[SideToHalfCorner(lineRightSide, true, false)]; + nscoord blockEndCornerRadiusB = + radii[SideToHalfCorner(lineRightSide, true, true)]; + + if (aWM.IsLineInverted()) { + // This happens only when aWM is vertical-lr. Need to swap blockStart + // and blockEnd corners. + std::swap(blockStartCornerRadiusL, blockEndCornerRadiusL); + std::swap(blockStartCornerRadiusB, blockEndCornerRadiusB); + } + + nscoord lineRightDiff = + ComputeEllipseLineInterceptDiff( + mShapeBoxRect.y, mShapeBoxRect.YMost(), + blockStartCornerRadiusL, blockStartCornerRadiusB, + blockEndCornerRadiusL, blockEndCornerRadiusB, + aBStart, aBEnd); + return mShapeBoxRect.XMost() - lineRightDiff; +} + +///////////////////////////////////////////////////////////////////////////// +// CircleShapeInfo + +nsFloatManager::CircleShapeInfo::CircleShapeInfo( + StyleBasicShape* const aBasicShape, + nscoord aLineLeft, + nscoord aBlockStart, + const LogicalRect& aShapeBoxRect, + WritingMode aWM, + const nsSize& aContainerSize) +{ + // Use physical coordinates to compute the center of the circle() since + // the keywords such as 'left', 'top', etc. are physical. + // https://drafts.csswg.org/css-shapes-1/#funcdef-circle + nsRect physicalShapeBoxRect = + aShapeBoxRect.GetPhysicalRect(aWM, aContainerSize); + nsPoint physicalCenter = + ShapeUtils::ComputeCircleOrEllipseCenter(aBasicShape, physicalShapeBoxRect); + mRadius = + ShapeUtils::ComputeCircleRadius(aBasicShape, physicalCenter, + physicalShapeBoxRect); + + // Convert the coordinate space back to the same as FloatInfo::mRect. + // mCenter.x is in the line-axis of the frame manager and mCenter.y are in + // the frame manager's real block-axis. + LogicalPoint logicalCenter(aWM, physicalCenter, aContainerSize); + mCenter = nsPoint(logicalCenter.LineRelative(aWM, aContainerSize) + aLineLeft, + logicalCenter.B(aWM) + aBlockStart); +} + +nscoord +nsFloatManager::CircleShapeInfo::LineLeft(WritingMode aWM, + const nscoord aBStart, + const nscoord aBEnd) const +{ + nscoord lineLeftDiff = + ComputeEllipseLineInterceptDiff(BStart(), BEnd(), + mRadius, mRadius, mRadius, mRadius, + aBStart, aBEnd); + return mCenter.x - mRadius + lineLeftDiff; +} + +nscoord +nsFloatManager::CircleShapeInfo::LineRight(WritingMode aWM, + const nscoord aBStart, + const nscoord aBEnd) const +{ + nscoord lineRightDiff = + ComputeEllipseLineInterceptDiff(BStart(), BEnd(), + mRadius, mRadius, mRadius, mRadius, + aBStart, aBEnd); + return mCenter.x + mRadius - lineRightDiff; +} + +///////////////////////////////////////////////////////////////////////////// // FloatInfo nsFloatManager::FloatInfo::FloatInfo(nsIFrame* aFrame, @@ -548,41 +685,58 @@ const StyleShapeOutside& shapeOutside = mFrame->StyleDisplay()->mShapeOutside; - if (shapeOutside.GetType() == StyleShapeSourceType::Box) { - // Initialize shape-box reference rect. - LogicalRect rect = aMarginRect; + if (shapeOutside.GetType() == StyleShapeSourceType::None) { + return; + } - switch (shapeOutside.GetReferenceBox()) { - case StyleShapeOutsideShapeBox::Content: - rect.Deflate(aWM, mFrame->GetLogicalUsedPadding(aWM)); - MOZ_FALLTHROUGH; - case StyleShapeOutsideShapeBox::Padding: - rect.Deflate(aWM, mFrame->GetLogicalUsedBorder(aWM)); - MOZ_FALLTHROUGH; - case StyleShapeOutsideShapeBox::Border: - rect.Deflate(aWM, mFrame->GetLogicalUsedMargin(aWM)); - break; - case StyleShapeOutsideShapeBox::Margin: - // Do nothing. rect is already a margin rect. - break; - case StyleShapeOutsideShapeBox::NoBox: - MOZ_ASSERT_UNREACHABLE("Why don't we have a shape-box?"); - break; - } + // Initialize 's reference rect. + LogicalRect rect = aMarginRect; - mShapeBoxRect.emplace(rect.LineLeft(aWM, aContainerSize) + aLineLeft, - rect.BStart(aWM) + aBlockStart, - rect.ISize(aWM), rect.BSize(aWM)); + switch (shapeOutside.GetReferenceBox()) { + case StyleShapeOutsideShapeBox::Content: + rect.Deflate(aWM, mFrame->GetLogicalUsedPadding(aWM)); + MOZ_FALLTHROUGH; + case StyleShapeOutsideShapeBox::Padding: + rect.Deflate(aWM, mFrame->GetLogicalUsedBorder(aWM)); + MOZ_FALLTHROUGH; + case StyleShapeOutsideShapeBox::Border: + rect.Deflate(aWM, mFrame->GetLogicalUsedMargin(aWM)); + break; + case StyleShapeOutsideShapeBox::Margin: + // Do nothing. rect is already a margin rect. + break; + case StyleShapeOutsideShapeBox::NoBox: + MOZ_ASSERT(shapeOutside.GetType() != StyleShapeSourceType::Box, + "Box source type must have specified!"); + break; + } + + if (shapeOutside.GetType() == StyleShapeSourceType::Box) { + nsRect shapeBoxRect(rect.LineLeft(aWM, aContainerSize) + aLineLeft, + rect.BStart(aWM) + aBlockStart, + rect.ISize(aWM), rect.BSize(aWM)); + mShapeInfo = MakeUnique(shapeBoxRect, mFrame); + } else if (shapeOutside.GetType() == StyleShapeSourceType::Shape) { + StyleBasicShape* const basicShape = shapeOutside.GetBasicShape(); + + if (basicShape->GetShapeType() == StyleBasicShapeType::Circle) { + mShapeInfo = MakeUnique(basicShape, aLineLeft, aBlockStart, + rect, aWM, aContainerSize); + } + } else if (shapeOutside.GetType() == StyleShapeSourceType::URL) { + // Bug 1265343: Implement 'shape-image-threshold'. + } else { + MOZ_ASSERT_UNREACHABLE("Unknown StyleShapeSourceType!"); } } #ifdef NS_BUILD_REFCNT_LOGGING -nsFloatManager::FloatInfo::FloatInfo(const FloatInfo& aOther) - : mFrame(aOther.mFrame) - , mLeftBEnd(aOther.mLeftBEnd) - , mRightBEnd(aOther.mRightBEnd) - , mRect(aOther.mRect) - , mShapeBoxRect(aOther.mShapeBoxRect) +nsFloatManager::FloatInfo::FloatInfo(FloatInfo&& aOther) + : mFrame(Move(aOther.mFrame)) + , mLeftBEnd(Move(aOther.mLeftBEnd)) + , mRightBEnd(Move(aOther.mRightBEnd)) + , mRect(Move(aOther.mRect)) + , mShapeInfo(Move(aOther.mShapeInfo)) { MOZ_COUNT_CTOR(nsFloatManager::FloatInfo); } @@ -604,51 +758,14 @@ } MOZ_ASSERT(aShapeType == ShapeType::ShapeOutside); - const StyleShapeOutside& shapeOutside = mFrame->StyleDisplay()->mShapeOutside; - if (shapeOutside.GetType() == StyleShapeSourceType::None) { + if (!mShapeInfo) { return LineLeft(); } - - if (shapeOutside.GetType() == StyleShapeSourceType::Box) { - nscoord radii[8]; - bool hasRadii = mFrame->GetShapeBoxBorderRadii(radii); - - if (!hasRadii) { - return ShapeBoxRect().x; - } - - // Get the physical side for line-left since border-radii are in - // the physical axis. - mozilla::Side lineLeftSide = - aWM.PhysicalSide(aWM.LogicalSideForLineRelativeDir(eLineRelativeDirLeft)); - nscoord blockStartCornerRadiusL = - radii[SideToHalfCorner(lineLeftSide, true, false)]; - nscoord blockStartCornerRadiusB = - radii[SideToHalfCorner(lineLeftSide, true, true)]; - nscoord blockEndCornerRadiusL = - radii[SideToHalfCorner(lineLeftSide, false, false)]; - nscoord blockEndCornerRadiusB = - radii[SideToHalfCorner(lineLeftSide, false, true)]; - - if (aWM.IsLineInverted()) { - // This happens only when aWM is vertical-lr. Need to swap blockStart - // and blockEnd corners. - std::swap(blockStartCornerRadiusL, blockEndCornerRadiusL); - std::swap(blockStartCornerRadiusB, blockEndCornerRadiusB); - } - - nscoord lineLeftDiff = - ComputeEllipseLineInterceptDiff( - ShapeBoxRect().y, ShapeBoxRect().YMost(), - blockStartCornerRadiusL, blockStartCornerRadiusB, - blockEndCornerRadiusL, blockEndCornerRadiusB, - aBStart, aBEnd); - return ShapeBoxRect().x + lineLeftDiff; - } - - // XXX: Other shape source types are not implemented yet. - - return LineLeft(); + // Clip the flow area to the margin-box because + // https://drafts.csswg.org/css-shapes-1/#relation-to-box-model-and-float-behavior + // says "When a shape is used to define a float area, the shape is clipped + // to the float’s margin box." + return std::max(LineLeft(), mShapeInfo->LineLeft(aWM, aBStart, aBEnd)); } nscoord @@ -662,55 +779,59 @@ } MOZ_ASSERT(aShapeType == ShapeType::ShapeOutside); - const StyleShapeOutside& shapeOutside = mFrame->StyleDisplay()->mShapeOutside; - if (shapeOutside.GetType() == StyleShapeSourceType::None) { + if (!mShapeInfo) { return LineRight(); } + // Clip the flow area to the margin-box. See LineLeft(). + return std::min(LineRight(), mShapeInfo->LineRight(aWM, aBStart, aBEnd)); +} - if (shapeOutside.GetType() == StyleShapeSourceType::Box) { - nscoord radii[8]; - bool hasRadii = mFrame->GetShapeBoxBorderRadii(radii); +nscoord +nsFloatManager::FloatInfo::BStart(ShapeType aShapeType) const +{ + if (aShapeType == ShapeType::Margin) { + return BStart(); + } - if (!hasRadii) { - return ShapeBoxRect().XMost(); - } + MOZ_ASSERT(aShapeType == ShapeType::ShapeOutside); + if (!mShapeInfo) { + return BStart(); + } + // Clip the flow area to the margin-box. See LineLeft(). + return std::max(BStart(), mShapeInfo->BStart()); +} - // Get the physical side for line-right since border-radii are in - // the physical axis. - mozilla::Side lineRightSide = - aWM.PhysicalSide(aWM.LogicalSideForLineRelativeDir(eLineRelativeDirRight)); - nscoord blockStartCornerRadiusL = - radii[SideToHalfCorner(lineRightSide, false, false)]; - nscoord blockStartCornerRadiusB = - radii[SideToHalfCorner(lineRightSide, false, true)]; - nscoord blockEndCornerRadiusL = - radii[SideToHalfCorner(lineRightSide, true, false)]; - nscoord blockEndCornerRadiusB = - radii[SideToHalfCorner(lineRightSide, true, true)]; - - if (aWM.IsLineInverted()) { - // This happens only when aWM is vertical-lr. Need to swap blockStart - // and blockEnd corners. - std::swap(blockStartCornerRadiusL, blockEndCornerRadiusL); - std::swap(blockStartCornerRadiusB, blockEndCornerRadiusB); - } +nscoord +nsFloatManager::FloatInfo::BEnd(ShapeType aShapeType) const +{ + if (aShapeType == ShapeType::Margin) { + return BEnd(); + } - nscoord lineRightDiff = - ComputeEllipseLineInterceptDiff( - ShapeBoxRect().y, ShapeBoxRect().YMost(), - blockStartCornerRadiusL, blockStartCornerRadiusB, - blockEndCornerRadiusL, blockEndCornerRadiusB, - aBStart, aBEnd); - return ShapeBoxRect().XMost() - lineRightDiff; + MOZ_ASSERT(aShapeType == ShapeType::ShapeOutside); + if (!mShapeInfo) { + return BEnd(); } + // Clip the flow area to the margin-box. See LineLeft(). + return std::min(BEnd(), mShapeInfo->BEnd()); +} - // XXX: Other shape source types are not implemented yet. +bool +nsFloatManager::FloatInfo::IsEmpty(ShapeType aShapeType) const +{ + if (aShapeType == ShapeType::Margin) { + return IsEmpty(); + } - return LineRight(); + MOZ_ASSERT(aShapeType == ShapeType::ShapeOutside); + if (!mShapeInfo) { + return IsEmpty(); + } + return mShapeInfo->IsEmpty(); } /* static */ nscoord -nsFloatManager::FloatInfo::ComputeEllipseLineInterceptDiff( +nsFloatManager::ShapeInfo::ComputeEllipseLineInterceptDiff( const nscoord aShapeBoxBStart, const nscoord aShapeBoxBEnd, const nscoord aBStartCornerRadiusL, const nscoord aBStartCornerRadiusB, const nscoord aBEndCornerRadiusL, const nscoord aBEndCornerRadiusB, @@ -780,7 +901,7 @@ } /* static */ nscoord -nsFloatManager::FloatInfo::XInterceptAtY(const nscoord aY, +nsFloatManager::ShapeInfo::XInterceptAtY(const nscoord aY, const nscoord aRadiusX, const nscoord aRadiusY) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/generic/nsFloatManager.h firefox-trunk-53.0~a1~hg20170115r329516/layout/generic/nsFloatManager.h --- firefox-trunk-53.0~a1~hg20170113r329171/layout/generic/nsFloatManager.h 2017-01-13 01:43:22.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/generic/nsFloatManager.h 2017-01-16 01:47:05.000000000 +0000 @@ -10,11 +10,12 @@ #define nsFloatManager_h_ #include "mozilla/Attributes.h" -#include "mozilla/Maybe.h" +#include "mozilla/UniquePtr.h" #include "mozilla/WritingModes.h" #include "nsCoord.h" #include "nsFrameList.h" // for DEBUG_FRAME_DUMP #include "nsIntervalSet.h" +#include "nsPoint.h" #include "nsTArray.h" class nsIPresShell; @@ -22,6 +23,7 @@ class nsPresContext; namespace mozilla { struct ReflowInput; +class StyleBasicShape; } // namespace mozilla /** @@ -201,9 +203,9 @@ * aMarginRect is relative to the current translation. The caller * must ensure aMarginRect.height >= 0 and aMarginRect.width >= 0. */ - nsresult AddFloat(nsIFrame* aFloatFrame, - const mozilla::LogicalRect& aMarginRect, - mozilla::WritingMode aWM, const nsSize& aContainerSize); + void AddFloat(nsIFrame* aFloatFrame, + const mozilla::LogicalRect& aMarginRect, + mozilla::WritingMode aWM, const nsSize& aContainerSize); /** * Notify that we tried to place a float that could not fit at all and @@ -332,6 +334,101 @@ private: + // ShapeInfo is an abstract class for implementing all the shapes in CSS + // Shapes Module. A subclass needs to override all the methods to adjust + // the flow area with respect to its shape. + class ShapeInfo + { + public: + virtual ~ShapeInfo() {} + + virtual nscoord LineLeft(mozilla::WritingMode aWM, + const nscoord aBStart, + const nscoord aBEnd) const = 0; + virtual nscoord LineRight(mozilla::WritingMode aWM, + const nscoord aBStart, + const nscoord aBEnd) const = 0; + virtual nscoord BStart() const = 0; + virtual nscoord BEnd() const = 0; + virtual bool IsEmpty() const = 0; + + protected: + // Compute the minimum line-axis difference between the bounding shape + // box and its rounded corner within the given band (block-axis region). + // This is used as a helper function to compute the LineRight() and + // LineLeft(). See the picture in the implementation for an example. + // RadiusL and RadiusB stand for radius on the line-axis and block-axis. + // + // Returns radius-x diff on the line-axis, or 0 if there's no rounded + // corner within the given band. + static nscoord ComputeEllipseLineInterceptDiff( + const nscoord aShapeBoxBStart, const nscoord aShapeBoxBEnd, + const nscoord aBStartCornerRadiusL, const nscoord aBStartCornerRadiusB, + const nscoord aBEndCornerRadiusL, const nscoord aBEndCornerRadiusB, + const nscoord aBandBStart, const nscoord aBandBEnd); + + static nscoord XInterceptAtY(const nscoord aY, const nscoord aRadiusX, + const nscoord aRadiusY); + }; + + // Implements shape-outside: . + class BoxShapeInfo final : public ShapeInfo + { + public: + BoxShapeInfo(const nsRect& aShapeBoxRect, nsIFrame* const aFrame) + : mShapeBoxRect(aShapeBoxRect) + , mFrame(aFrame) + { + } + + nscoord LineLeft(mozilla::WritingMode aWM, + const nscoord aBStart, + const nscoord aBEnd) const override; + nscoord LineRight(mozilla::WritingMode aWM, + const nscoord aBStart, + const nscoord aBEnd) const override; + nscoord BStart() const override { return mShapeBoxRect.y; } + nscoord BEnd() const override { return mShapeBoxRect.YMost(); } + bool IsEmpty() const override { return mShapeBoxRect.IsEmpty(); }; + + private: + // This is the reference box of css shape-outside if specified, which + // implements the value in the CSS Shapes Module Level 1. + // The coordinate space is the same as FloatInfo::mRect. + const nsRect mShapeBoxRect; + // The frame of the float. + nsIFrame* const mFrame; + }; + + // Implements shape-outside: circle(). + class CircleShapeInfo final : public ShapeInfo + { + public: + CircleShapeInfo(mozilla::StyleBasicShape* const aBasicShape, + nscoord aLineLeft, + nscoord aBlockStart, + const mozilla::LogicalRect& aShapeBoxRect, + mozilla::WritingMode aWM, + const nsSize& aContainerSize); + + nscoord LineLeft(mozilla::WritingMode aWM, + const nscoord aBStart, + const nscoord aBEnd) const override; + nscoord LineRight(mozilla::WritingMode aWM, + const nscoord aBStart, + const nscoord aBEnd) const override; + nscoord BStart() const override { return mCenter.y - mRadius; } + nscoord BEnd() const override { return mCenter.y + mRadius; } + bool IsEmpty() const override { return mRadius == 0; }; + + private: + // The position of the center of the circle. The coordinate space is the + // same as FloatInfo::mRect. + nsPoint mCenter; + // The radius of the circle in app units. + nscoord mRadius; + }; + struct FloatInfo { nsIFrame *const mFrame; // The lowest block-ends of left/right floats up to and including @@ -350,8 +447,6 @@ nscoord BSize() const { return mRect.height; } bool IsEmpty() const { return mRect.IsEmpty(); } - nsRect ShapeBoxRect() const { return mShapeBoxRect.valueOr(mRect); } - // aBStart and aBEnd are the starting and ending coordinate of a band. // LineLeft() and LineRight() return the innermost line-left extent and // line-right extent within the given band, respectively. @@ -359,35 +454,12 @@ const nscoord aBStart, const nscoord aBEnd) const; nscoord LineRight(mozilla::WritingMode aWM, ShapeType aShapeType, const nscoord aBStart, const nscoord aBEnd) const; - - nscoord BStart(ShapeType aShapeType) const - { - return aShapeType == ShapeType::Margin ? BStart() : ShapeBoxRect().y; - } - nscoord BEnd(ShapeType aShapeType) const - { - return aShapeType == ShapeType::Margin ? BEnd() : ShapeBoxRect().YMost(); - } - - // Compute the minimum line-axis difference between the bounding shape - // box and its rounded corner within the given band (block-axis region). - // This is used as a helper function to compute the LineRight() and - // LineLeft(). See the picture in the implementation for an example. - // RadiusL and RadiusB stand for radius on the line-axis and block-axis. - // - // Returns radius-x diff on the line-axis, or 0 if there's no rounded - // corner within the given band. - static nscoord ComputeEllipseLineInterceptDiff( - const nscoord aShapeBoxBStart, const nscoord aShapeBoxBEnd, - const nscoord aBStartCornerRadiusL, const nscoord aBStartCornerRadiusB, - const nscoord aBEndCornerRadiusL, const nscoord aBEndCornerRadiusB, - const nscoord aBandBStart, const nscoord aBandBEnd); - - static nscoord XInterceptAtY(const nscoord aY, const nscoord aRadiusX, - const nscoord aRadiusY); + nscoord BStart(ShapeType aShapeType) const; + nscoord BEnd(ShapeType aShapeType) const; + bool IsEmpty(ShapeType aShapeType) const; #ifdef NS_BUILD_REFCNT_LOGGING - FloatInfo(const FloatInfo& aOther); + FloatInfo(FloatInfo&& aOther); ~FloatInfo(); #endif @@ -398,10 +470,9 @@ // the line-relative axis of the frame manager and its block // coordinates are in the frame manager's real block direction. nsRect mRect; - // This is the reference box of css shape-outside if specified, which - // implements the value in the CSS Shapes Module Level 1. - // The coordinate setup is the same as mRect. - mozilla::Maybe mShapeBoxRect; + // Pointer to a concrete subclass of ShapeInfo or null, which means that + // there is no shape-outside. + mozilla::UniquePtr mShapeInfo; }; #ifdef DEBUG diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/generic/nsGridContainerFrame.cpp firefox-trunk-53.0~a1~hg20170115r329516/layout/generic/nsGridContainerFrame.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/layout/generic/nsGridContainerFrame.cpp 2017-01-13 01:43:34.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/generic/nsGridContainerFrame.cpp 2017-01-16 01:47:07.000000000 +0000 @@ -3678,6 +3678,7 @@ const ReflowInput* aReflowInput, nsRenderingContext* aRC, const LogicalSize& aAvailableSize, + const LogicalSize& aCBSize, nscoord aIMinSizeClamp = NS_MAXSIZE, nscoord aBMinSizeClamp = NS_MAXSIZE) { @@ -3710,7 +3711,7 @@ } else { aChild->Properties().Delete(nsIFrame::BClampMarginBoxMinSizeProperty()); } - ReflowInput childRI(pc, *rs, aChild, aAvailableSize, nullptr, riFlags); + ReflowInput childRI(pc, *rs, aChild, aAvailableSize, &aCBSize, riFlags); ReflowOutput childSize(childRI); nsReflowStatus childStatus; const uint32_t flags = NS_FRAME_NO_MOVE_FRAME | NS_FRAME_NO_SIZE_VIEW; @@ -3748,22 +3749,25 @@ if (size == NS_INTRINSIC_WIDTH_UNKNOWN) { // We need to reflow the child to find its BSize contribution. // XXX this will give mostly correct results for now (until bug 1174569). - nscoord cbISize = INFINITE_ISIZE_COORD; - nscoord cbBSize = NS_UNCONSTRAINEDSIZE; + nscoord availISize = INFINITE_ISIZE_COORD; + nscoord availBSize = NS_UNCONSTRAINEDSIZE; auto childWM = child->GetWritingMode(); const bool isOrthogonal = childWM.IsOrthogonalTo(aCBWM); // The next two variables are MinSizeClamp values in the child's axes. nscoord iMinSizeClamp = NS_MAXSIZE; nscoord bMinSizeClamp = NS_MAXSIZE; + LogicalSize cbSize(childWM, 0, 0); if (aState.mCols.mCanResolveLineRangeSize) { nscoord sz = aState.mCols.ResolveSize(aGridItem.mArea.mCols); if (isOrthogonal) { - cbBSize = sz; + availBSize = sz; + cbSize.BSize(childWM) = sz; if (aGridItem.mState[aAxis] & ItemState::eClampMarginBoxMinSize) { bMinSizeClamp = sz; } } else { - cbISize = sz; + availISize = sz; + cbSize.ISize(childWM) = sz; if (aGridItem.mState[aAxis] & ItemState::eClampMarginBoxMinSize) { iMinSizeClamp = sz; } @@ -3774,16 +3778,15 @@ } else { iMinSizeClamp = aMinSizeClamp; } - LogicalSize availableSize(childWM, cbISize, cbBSize); + LogicalSize availableSize(childWM, availISize, availBSize); size = ::MeasuringReflow(child, aState.mReflowInput, aRC, availableSize, - iMinSizeClamp, bMinSizeClamp); + cbSize, iMinSizeClamp, bMinSizeClamp); nsIFrame::IntrinsicISizeOffsetData offsets = child->IntrinsicBSizeOffsets(); size += offsets.hMargin; auto percent = offsets.hPctMargin; - if (!aState.mReflowInput) { - // We always want to add in percent padding too, but during Reflow we - // always have a definite percentage basis (the grid area) so any percent - // padding is already resolved and baked in to 'size' at this point. + if (availBSize == NS_UNCONSTRAINEDSIZE) { + // We always want to add in percent padding too, unless we already did so + // using a resolved column size above. percent += offsets.hPctPadding; } size = nsLayoutUtils::AddPercents(size, percent); @@ -4199,7 +4202,15 @@ auto* rc = &aState.mRenderingContext; // XXX figure out if we can avoid/merge this reflow with the main reflow. // XXX (after bug 1174569 is sorted out) - ::MeasuringReflow(child, aState.mReflowInput, rc, avail); + // + // XXX How should we handle percentage padding here? (bug 1330866) + // XXX (see ::ContentContribution and how it deals with percentages) + // XXX What if the true baseline after line-breaking differs from this + // XXX hypothetical baseline based on an infinite inline size? + // XXX Maybe we should just call ::ContentContribution here instead? + // XXX For now we just pass a zero-sized CB: + LogicalSize cbSize(childWM, 0, 0); + ::MeasuringReflow(child, aState.mReflowInput, rc, avail, cbSize); nscoord baseline; nsGridContainerFrame* grid = do_QueryFrame(child); if (state & ItemState::eFirstBaseline) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/generic/WritingModes.h firefox-trunk-53.0~a1~hg20170115r329516/layout/generic/WritingModes.h --- firefox-trunk-53.0~a1~hg20170113r329171/layout/generic/WritingModes.h 2017-01-13 01:43:19.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/generic/WritingModes.h 2017-01-16 01:46:12.000000000 +0000 @@ -784,6 +784,16 @@ CHECK_WRITING_MODE(aWritingMode); return mPoint.y; } + nscoord LineRelative(WritingMode aWritingMode, + const nsSize& aContainerSize) const // line-axis + { + CHECK_WRITING_MODE(aWritingMode); + if (aWritingMode.IsBidiLTR()) { + return I(); + } + return (aWritingMode.IsVertical() ? aContainerSize.height + : aContainerSize.width) - I(); + } /** * These non-const accessors return a reference (lvalue) that can be diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/bugs/315920-26.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/bugs/315920-26.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/bugs/315920-26.html 2017-01-13 01:47:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/bugs/315920-26.html 2017-01-16 01:50:42.000000000 +0000 @@ -1,5 +1,5 @@ - + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/css-grid/grid-item-sizing-percent-002-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/css-grid/grid-item-sizing-percent-002-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/css-grid/grid-item-sizing-percent-002-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/css-grid/grid-item-sizing-percent-002-ref.html 2017-01-16 01:55:04.000000000 +0000 @@ -0,0 +1,136 @@ + + + + Reference: Testing grid item percent sizes + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/css-grid/grid-item-sizing-percent-003.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/css-grid/grid-item-sizing-percent-003.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/css-grid/grid-item-sizing-percent-003.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/css-grid/grid-item-sizing-percent-003.html 2017-01-16 01:55:04.000000000 +0000 @@ -0,0 +1,132 @@ + + + + CSS Test: Testing grid item percent sizes + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/css-grid/grid-item-sizing-percent-003-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/css-grid/grid-item-sizing-percent-003-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/css-grid/grid-item-sizing-percent-003-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/css-grid/grid-item-sizing-percent-003-ref.html 2017-01-16 01:55:04.000000000 +0000 @@ -0,0 +1,137 @@ + + + + Reference: Testing grid item percent sizes + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/css-grid/grid-item-sizing-percent-004.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/css-grid/grid-item-sizing-percent-004.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/css-grid/grid-item-sizing-percent-004.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/css-grid/grid-item-sizing-percent-004.html 2017-01-16 01:55:04.000000000 +0000 @@ -0,0 +1,135 @@ + + + + CSS Test: Testing grid item percent sizes + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/css-grid/grid-item-sizing-percent-004-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/css-grid/grid-item-sizing-percent-004-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/css-grid/grid-item-sizing-percent-004-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/css-grid/grid-item-sizing-percent-004-ref.html 2017-01-16 01:55:04.000000000 +0000 @@ -0,0 +1,134 @@ + + + + Reference: Testing grid item percent sizes + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/css-grid/reftest.list firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/css-grid/reftest.list --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/css-grid/reftest.list 2017-01-13 01:51:53.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/css-grid/reftest.list 2017-01-16 01:55:05.000000000 +0000 @@ -45,6 +45,9 @@ == vrl-grid-placement-auto-row-sparse-001.html vrl-grid-placement-auto-row-sparse-001-ref.html == grid-relpos-items-001.html grid-relpos-items-001-ref.html == grid-item-sizing-percent-001.html grid-item-sizing-percent-001-ref.html +== grid-item-sizing-percent-002.html grid-item-sizing-percent-002-ref.html +== grid-item-sizing-percent-003.html grid-item-sizing-percent-003-ref.html +== grid-item-sizing-percent-004.html grid-item-sizing-percent-004-ref.html == grid-item-sizing-px-001.html grid-item-sizing-percent-001-ref.html == grid-item-dir-001.html grid-item-dir-001-ref.html fuzzy-if(winWidget,70,130) fuzzy-if(cocoaWidget,85,180) == grid-col-max-sizing-max-content-001.html grid-col-max-sizing-max-content-001-ref.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/forms/input/datetime/reftest.list firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/forms/input/datetime/reftest.list --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/forms/input/datetime/reftest.list 2017-01-13 00:56:11.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/forms/input/datetime/reftest.list 2017-01-16 00:54:01.000000000 +0000 @@ -1,13 +1,13 @@ default-preferences pref(dom.forms.datetime,true) -# not valid on Android/B2G where type=time looks like type=text -skip-if(Android||B2G||Mulet) != time-simple-unthemed.html time-simple-unthemed-ref.html -skip-if(Android||B2G||Mulet) != time-large-font.html time-basic.html -skip-if(Android||B2G||Mulet) != time-width-height.html time-basic.html -skip-if(Android||B2G||Mulet) != time-border.html time-basic.html -# only valid on Android/B2G where type=number looks the same as type=text -skip-if(!Android&&!B2G&&!Mulet) == time-simple-unthemed.html time-simple-unthemed-ref.html +# not valid on Android where type=time looks like type=text +skip-if(Android) != time-simple-unthemed.html time-simple-unthemed-ref.html +skip-if(Android) != time-large-font.html time-basic.html +skip-if(Android) != time-width-height.html time-basic.html +skip-if(Android) != time-border.html time-basic.html +# only valid on Android where type=number looks the same as type=text +skip-if(!Android) == time-simple-unthemed.html time-simple-unthemed-ref.html # type change -skip-if(Android||B2G||Mulet) == to-time-from-other-type-unthemed.html time-simple-unthemed.html -skip-if(Android||B2G||Mulet) == from-time-to-other-type-unthemed.html from-time-to-other-type-unthemed-ref.html +skip-if(Android) == to-time-from-other-type-unthemed.html time-simple-unthemed.html +skip-if(Android) == from-time-to-other-type-unthemed.html from-time-to-other-type-unthemed-ref.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/forms/input/datetime/reftest-stylo.list firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/forms/input/datetime/reftest-stylo.list --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/forms/input/datetime/reftest-stylo.list 2017-01-13 00:56:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/forms/input/datetime/reftest-stylo.list 2017-01-16 00:54:01.000000000 +0000 @@ -1,12 +1,12 @@ # DO NOT EDIT! This is a auto-generated temporary list for Stylo testing default-preferences pref(dom.forms.datetime,true) -# not valid on Android/B2G where type=time looks like type=text +# not valid on Android where type=time looks like type=text # == time-simple-unthemed.html time-simple-unthemed.html # == time-large-font.html time-large-font.html # == time-width-height.html time-width-height.html # == time-border.html time-border.html -# only valid on Android/B2G where type=number looks the same as type=text +# only valid on Android where type=number looks the same as type=text # == time-simple-unthemed.html time-simple-unthemed.html # type change diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/svg/filter-on-continuation-box-01.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/svg/filter-on-continuation-box-01.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/svg/filter-on-continuation-box-01.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/svg/filter-on-continuation-box-01.html 2017-01-16 00:58:09.000000000 +0000 @@ -0,0 +1,23 @@ + + + + +
    + Wrapped sentence +
    + + + + \ No newline at end of file diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/svg/filter-on-continuation-box-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/svg/filter-on-continuation-box-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/svg/filter-on-continuation-box-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/svg/filter-on-continuation-box-ref.html 2017-01-16 00:58:09.000000000 +0000 @@ -0,0 +1,15 @@ + + + + +
    + Wrapped sentence +
    + + \ No newline at end of file diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/svg/mask-contains-inner-svg-01.svg firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/svg/mask-contains-inner-svg-01.svg --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/svg/mask-contains-inner-svg-01.svg 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/svg/mask-contains-inner-svg-01.svg 2017-01-16 00:58:27.000000000 +0000 @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/svg/mask-contains-inner-svg-02.svg firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/svg/mask-contains-inner-svg-02.svg --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/svg/mask-contains-inner-svg-02.svg 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/svg/mask-contains-inner-svg-02.svg 2017-01-16 00:58:27.000000000 +0000 @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/svg/reftest.list firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/svg/reftest.list --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/svg/reftest.list 2017-01-13 01:00:31.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/svg/reftest.list 2017-01-16 00:58:28.000000000 +0000 @@ -465,3 +465,7 @@ == paint-on-maskLayer-1a.html paint-on-maskLayer-1-ref.html == paint-on-maskLayer-1b.html paint-on-maskLayer-1-ref.html == paint-on-maskLayer-1c.html paint-on-maskLayer-1-ref.html + +fuzzy(71,817) == filter-on-continuation-box-01.html filter-on-continuation-box-ref.html +== mask-contains-inner-svg-01.svg pass.svg +== mask-contains-inner-svg-02.svg pass.svg diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/reftest.list firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/reftest.list --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/reftest.list 2017-01-13 01:06:26.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/reftest.list 2017-01-16 01:04:35.000000000 +0000 @@ -53,7 +53,9 @@ include selectors4/reftest.list # Shapes Level 1 -include shapes1/reftest.list +# Bug 1300355: Skip shapes reftests to prevent frequent intermittent failures +# on Win7 debug. +skip-if(winWidget&&isDebugBuild) include shapes1/reftest.list # Text Level 3 # In Bug 1316482, we've added a large number of tests in this folder, which diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/reftest.list firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/reftest.list --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/reftest.list 2017-01-13 01:06:26.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/reftest.list 2017-01-16 01:04:35.000000000 +0000 @@ -1,4 +1,4 @@ -default-preferences pref(layout.css.shape-outside.enabled,true) +default-preferences pref(layout.css.shape-outside.enabled,true) pref(layout.css.clip-path-shapes.enabled,true) # only == shape-outside-margin-box-001.html shape-outside-margin-box-001-ref.html @@ -35,3 +35,29 @@ == shape-outside-padding-box-border-radius-002.html shape-outside-padding-box-border-radius-002-ref.html == shape-outside-content-box-border-radius-001.html shape-outside-content-box-border-radius-001-ref.html == shape-outside-content-box-border-radius-002.html shape-outside-content-box-border-radius-002-ref.html + +# Basic shape: circle() +== shape-outside-circle-001.html shape-outside-circle-001-ref.html +== shape-outside-circle-002.html shape-outside-circle-002-ref.html +== shape-outside-circle-003.html shape-outside-circle-003-ref.html +== shape-outside-circle-004.html shape-outside-circle-004-ref.html +== shape-outside-circle-005.html shape-outside-circle-005-ref.html +== shape-outside-circle-006.html shape-outside-circle-005-ref.html +== shape-outside-circle-007.html shape-outside-circle-005-ref.html +== shape-outside-circle-008.html shape-outside-circle-008-ref.html +== shape-outside-circle-009.html shape-outside-circle-008-ref.html +== shape-outside-circle-010.html shape-outside-circle-010-ref.html +== shape-outside-circle-011.html shape-outside-circle-011-ref.html +== shape-outside-circle-012.html shape-outside-circle-011-ref.html +== shape-outside-circle-013.html shape-outside-circle-011-ref.html +== shape-outside-circle-014.html shape-outside-circle-014-ref.html +== shape-outside-circle-015.html shape-outside-circle-014-ref.html +== shape-outside-circle-016.html shape-outside-circle-016-ref.html +== shape-outside-circle-017.html shape-outside-circle-017-ref.html +== shape-outside-circle-018.html shape-outside-circle-018-ref.html +== shape-outside-circle-019.html shape-outside-circle-019-ref.html +== shape-outside-circle-020.html shape-outside-circle-020-ref.html +== shape-outside-circle-021.html shape-outside-circle-021-ref.html +== shape-outside-circle-022.html shape-outside-circle-022-ref.html +== shape-outside-circle-023.html shape-outside-circle-023-ref.html +== shape-outside-circle-024.html shape-outside-circle-024-ref.html diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-001.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-001.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-001.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-001.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,54 @@ + + + + + + CSS Shape Test: float left, circle(50% at left top) + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-001-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-001-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-001-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-001-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,51 @@ + + + + + + CSS Shape Test: float left, circle(50% at left top) reference + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-002.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-002.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-002.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-002.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,55 @@ + + + + + + CSS Shape Test: float left, circle(50% at right bottom) + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-002-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-002-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-002-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-002-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,52 @@ + + + + + + CSS Shape Test: float left, circle(50% at right bottom) reference + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-003.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-003.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-003.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-003.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,55 @@ + + + + + + CSS Shape Test: float right, circle(50% at right top) + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-003-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-003-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-003-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-003-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,52 @@ + + + + + + CSS Shape Test: float right, circle(50% at right top) reference + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-004.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-004.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-004.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-004.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,56 @@ + + + + + + CSS Shape Test: float right, circle(50% at left bottom) + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-004-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-004-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-004-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-004-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,53 @@ + + + + + + CSS Shape Test: float left, circle(50% at left bottom) reference + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-005.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-005.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-005.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-005.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,48 @@ + + + + + + CSS Shape Test: float left, circle() + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-005-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-005-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-005-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-005-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,45 @@ + + + + + + CSS Shape Test: float left, circle() reference + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-006.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-006.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-006.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-006.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,49 @@ + + + + + + CSS Shape Test: float left, circle(closest-side at center) border-box + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-007.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-007.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-007.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-007.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,48 @@ + + + + + + CSS Shape Test: float left, circle(farthest-side at center) + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-008.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-008.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-008.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-008.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,49 @@ + + + + + + CSS Shape Test: float left, circle(0%) border-box + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-008-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-008-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-008-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-008-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,46 @@ + + + + + + CSS Shape Test: float left, circle(0%) border-box reference + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-009.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-009.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-009.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-009.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,49 @@ + + + + + + CSS Shape Test: float left, circle(closest-side at left center) border-box + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-010.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-010.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-010.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-010.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,48 @@ + + + + + + CSS Shape Test: float left, circle(100%) + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-010-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-010-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-010-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-010-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,45 @@ + + + + + + CSS Shape Test: float left, circle(100%) reference + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-011.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-011.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-011.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-011.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,49 @@ + + + + + + CSS Shape Test: float right, circle() + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-011-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-011-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-011-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-011-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,46 @@ + + + + + + CSS Shape Test: float right, circle() reference + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-012.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-012.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-012.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-012.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,50 @@ + + + + + + CSS Shape Test: float right, circle(closest-side at center) border-box + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-013.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-013.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-013.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-013.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,49 @@ + + + + + + CSS Shape Test: float right, circle(farthest-side at center) + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-014.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-014.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-014.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-014.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,50 @@ + + + + + + CSS Shape Test: float right, circle(0%) border-box + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-014-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-014-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-014-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-014-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,47 @@ + + + + + + CSS Shape Test: float right, circle(0%) border-box reference + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-015.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-015.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-015.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-015.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,50 @@ + + + + + + CSS Shape Test: float right, circle(closest-side at right center) border-box + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-016.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-016.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-016.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-016.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,49 @@ + + + + + + CSS Shape Test: float right, circle(100%) + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-016-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-016-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-016-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-016-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,46 @@ + + + + + + CSS Shape Test: float right, circle(100%) reference + + + + + +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-017.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-017.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-017.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-017.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,56 @@ + + + + + + CSS Shape Test: vertical-rl, float left, circle(50% at left 40px top 40px) + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-017-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-017-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-017-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-017-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,54 @@ + + + + + + CSS Shape Test: vertical-rl, float left, circle(50% at left 40px top 40px) reference + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-018.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-018.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-018.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-018.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + CSS Shape Test: vertical-rl, float right, circle(50% at left 40px bottom 40px) + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-018-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-018-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-018-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-018-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,55 @@ + + + + + + CSS Shape Test: vertical-rl, float right, circle(50% at left 40px bottom 40px) reference + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-019.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-019.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-019.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-019.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,56 @@ + + + + + + CSS Shape Test: vertical-lr, float left, circle(50% at right 40px top 40px) + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-019-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-019-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-019-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-019-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,54 @@ + + + + + + CSS Shape Test: vertical-lr, float left, circle(50% at right 40px top 40px) reference + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-020.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-020.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-020.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-020.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + CSS Shape Test: vertical-lr, float right, circle(50% at right 40px bottom 40px) + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-020-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-020-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-020-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-020-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,54 @@ + + + + + + CSS Shape Test: vertical-lr, float right, circle(50% at right 40px bottom 40px) reference + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-021.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-021.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-021.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-021.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,56 @@ + + + + + + CSS Shape Test: sideways-lr, float left, circle(50% at right 40px bottom 40px) + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-021-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-021-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-021-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-021-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,54 @@ + + + + + + CSS Shape Test: sideways-lr, float left, circle(50% at right 40px bottom 40px) reference + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-022.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-022.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-022.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-022.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + CSS Shape Test: sideways-lr, float right, circle(50% at right 40px top 40px) + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-022-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-022-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-022-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-022-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,55 @@ + + + + + + CSS Shape Test: sideways-lr, float right, circle(50% at right 40px top 40px) reference + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-023.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-023.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-023.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-023.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,56 @@ + + + + + + CSS Shape Test: horizontal-tb, float left, circle(50% at left 40px bottom 40px) + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-023-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-023-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-023-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-023-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,54 @@ + + + + + + CSS Shape Test: horizontal-tb, float left, circle(50% at left 40px bottom 40px) reference + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-024.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-024.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-024.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-024.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,57 @@ + + + + + + CSS Shape Test: horizontal-tb, float right, circle(50% at right 40px bottom 40px) + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-024-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-024-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-024-ref.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/shapes1/shape-outside-circle-024-ref.html 2017-01-16 01:04:35.000000000 +0000 @@ -0,0 +1,55 @@ + + + + + + CSS Shape Test: horizontal-tb, float right, circle(50% at right 40px bottom 40px) reference + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/writing-modes-3/text-orientation-upright-directionality-001-ref.html firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/writing-modes-3/text-orientation-upright-directionality-001-ref.html --- firefox-trunk-53.0~a1~hg20170113r329171/layout/reftests/w3c-css/submitted/writing-modes-3/text-orientation-upright-directionality-001-ref.html 2017-01-13 01:06:28.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/reftests/w3c-css/submitted/writing-modes-3/text-orientation-upright-directionality-001-ref.html 2017-01-16 01:04:50.000000000 +0000 @@ -4,7 +4,6 @@ CSS Reference: text-orientation:upright in sideways-* writing modes -

    The two sideways-rl lines should be identical: diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/style/crashtests/crashtests.list firefox-trunk-53.0~a1~hg20170115r329516/layout/style/crashtests/crashtests.list --- firefox-trunk-53.0~a1~hg20170113r329171/layout/style/crashtests/crashtests.list 2017-01-13 01:08:52.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/style/crashtests/crashtests.list 2017-01-16 01:07:37.000000000 +0000 @@ -11,7 +11,7 @@ load 368740.html load 379788-1.html load 383979-1.xhtml -skip-if(stylo) load 383979-2.html # bug 1323671 +load 383979-2.html load 386939-1.html load 391034-1.xhtml asserts-if(stylo,1) load 397022-1.html # bug 1324704 diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/style/CSSStyleSheet.cpp firefox-trunk-53.0~a1~hg20170115r329516/layout/style/CSSStyleSheet.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/layout/style/CSSStyleSheet.cpp 2017-01-13 01:07:48.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/style/CSSStyleSheet.cpp 2017-01-16 01:06:14.000000000 +0000 @@ -765,16 +765,6 @@ } } -struct ListEnumData { - ListEnumData(FILE* aOut, int32_t aIndent) - : mOut(aOut), - mIndent(aIndent) - { - } - FILE* mOut; - int32_t mIndent; -}; - void CSSStyleSheet::List(FILE* out, int32_t aIndent) const { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/style/moz.build firefox-trunk-53.0~a1~hg20170115r329516/layout/style/moz.build --- firefox-trunk-53.0~a1~hg20170113r329171/layout/style/moz.build 2017-01-13 01:08:53.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/style/moz.build 2017-01-16 01:07:37.000000000 +0000 @@ -102,6 +102,7 @@ 'ServoCSSRuleList.h', 'ServoDeclarationBlock.h', 'ServoElementSnapshot.h', + 'ServoPropPrefList.h', 'ServoStyleRule.h', 'ServoStyleSet.h', 'ServoStyleSheet.h', diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/style/nsStyleConsts.h firefox-trunk-53.0~a1~hg20170115r329516/layout/style/nsStyleConsts.h --- firefox-trunk-53.0~a1~hg20170113r329171/layout/style/nsStyleConsts.h 2017-01-13 01:09:47.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/style/nsStyleConsts.h 2017-01-16 01:08:11.000000000 +0000 @@ -314,8 +314,8 @@ // See AnimationEffectReadOnly.webidl // and mozilla/dom/AnimationEffectReadOnlyBinding.h namespace dom { -enum class PlaybackDirection : uint32_t; -enum class FillMode : uint32_t; +enum class PlaybackDirection : uint8_t; +enum class FillMode : uint8_t; } // See nsStyleDisplay diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/style/nsStyleContext.cpp firefox-trunk-53.0~a1~hg20170115r329516/layout/style/nsStyleContext.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/layout/style/nsStyleContext.cpp 2017-01-13 01:09:47.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/style/nsStyleContext.cpp 2017-01-16 01:08:11.000000000 +0000 @@ -959,7 +959,8 @@ #undef GET_UNIQUE_STYLE_DATA } -template +template nsChangeHint nsStyleContext::CalcStyleDifferenceInternal(StyleContextLike* aNewContext, nsChangeHint aParentHintsNotHandledForDescendants, @@ -969,6 +970,10 @@ PROFILER_LABEL("nsStyleContext", "CalcStyleDifference", js::ProfileEntry::Category::CSS); + // See the comment in CalcStyleDifference(ServoComputedValues*, ...) to + // understand why we need to manually handle the neutral change in Servo. + MOZ_ASSERT_IF(mSource.IsServoComputedValues(), + aNeutralChangeHandling == NeutralChangeHandling::Retain); MOZ_ASSERT(NS_IsHintSubset(aParentHintsNotHandledForDescendants, nsChangeHint_Hints_NotHandledForDescendants), "caller is passing inherited hints, but shouldn't be"); @@ -1214,7 +1219,9 @@ MOZ_ASSERT(NS_IsHintSubset(hint, nsChangeHint_AllHints), "Added a new hint without bumping AllHints?"); - return hint & ~nsChangeHint_NeutralChange; + return aNeutralChangeHandling == NeutralChangeHandling::Strip + ? (hint & ~nsChangeHint_NeutralChange) + : hint; } nsChangeHint @@ -1223,8 +1230,9 @@ uint32_t* aEqualStructs, uint32_t* aSamePointerStructs) { - return CalcStyleDifferenceInternal(aNewContext, aParentHintsNotHandledForDescendants, - aEqualStructs, aSamePointerStructs); + return CalcStyleDifferenceInternal + (aNewContext, aParentHintsNotHandledForDescendants, aEqualStructs, + aSamePointerStructs); } class MOZ_STACK_CLASS FakeStyleContext @@ -1260,9 +1268,15 @@ uint32_t* aEqualStructs, uint32_t* aSamePointerStructs) { + // NB: Servo uses the presence of a change hint to determine whether it should + // generate a new nsStyleContext. + // + // Given that, we can't strip the neutral change hint here, since it may + // provoke errors like bug 1330874. FakeStyleContext newContext(aNewComputedValues); - return CalcStyleDifferenceInternal(&newContext, aParentHintsNotHandledForDescendants, - aEqualStructs, aSamePointerStructs); + return CalcStyleDifferenceInternal( + &newContext, aParentHintsNotHandledForDescendants, aEqualStructs, + aSamePointerStructs); } #ifdef DEBUG diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/style/nsStyleContext.h firefox-trunk-53.0~a1~hg20170115r329516/layout/style/nsStyleContext.h --- firefox-trunk-53.0~a1~hg20170113r329171/layout/style/nsStyleContext.h 2017-01-13 01:09:47.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/style/nsStyleContext.h 2017-01-16 01:08:11.000000000 +0000 @@ -399,7 +399,12 @@ uint32_t* aSamePointerStructs); private: - template + enum class NeutralChangeHandling { + Retain, + Strip, + }; + + template nsChangeHint CalcStyleDifferenceInternal(StyleContextLike* aNewContext, nsChangeHint aParentHintsNotHandledForDescendants, uint32_t* aEqualStructs, diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/style/ServoBindings.cpp firefox-trunk-53.0~a1~hg20170115r329516/layout/style/ServoBindings.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/layout/style/ServoBindings.cpp 2017-01-13 01:08:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/style/ServoBindings.cpp 2017-01-16 01:07:09.000000000 +0000 @@ -9,6 +9,7 @@ #include "ChildIterator.h" #include "gfxFontFamilyList.h" #include "nsAttrValueInlines.h" +#include "nsCSSProps.h" #include "nsCSSParser.h" #include "nsCSSRuleProcessor.h" #include "nsContentUtils.h" @@ -1047,6 +1048,13 @@ return &aCSSValue->GetArrayValue()->Item(aIndex); } + +bool +Gecko_PropertyId_IsPrefEnabled(nsCSSPropertyID id) +{ + return nsCSSProps::IsEnabled(id); +} + void Gecko_LoadStyleSheet(css::Loader* aLoader, ServoStyleSheet* aParent, diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/style/ServoBindings.h firefox-trunk-53.0~a1~hg20170115r329516/layout/style/ServoBindings.h --- firefox-trunk-53.0~a1~hg20170113r329171/layout/style/ServoBindings.h 2017-01-13 01:08:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/style/ServoBindings.h 2017-01-16 01:07:09.000000000 +0000 @@ -293,6 +293,7 @@ void Gecko_CSSValue_SetFunction(nsCSSValueBorrowedMut css_value, int32_t len); nsCSSValueBorrowedMut Gecko_CSSValue_GetArrayItem(nsCSSValueBorrowedMut css_value, int32_t index); NS_DECL_THREADSAFE_FFI_REFCOUNTING(nsCSSValueSharedList, CSSValueSharedList); +bool Gecko_PropertyId_IsPrefEnabled(nsCSSPropertyID id); // Style-struct management. #define STYLE_STRUCT(name, checkdata_cb) \ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/style/ServoPropPrefList.h firefox-trunk-53.0~a1~hg20170115r329516/layout/style/ServoPropPrefList.h --- firefox-trunk-53.0~a1~hg20170113r329171/layout/style/ServoPropPrefList.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/style/ServoPropPrefList.h 2017-01-16 01:07:10.000000000 +0000 @@ -0,0 +1,25 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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/. */ + +#ifndef mozilla_ServoPropPrefList_h +#define mozilla_ServoPropPrefList_h + +namespace mozilla { + +#define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, \ + stylestruct_, stylestructoffset_, animtype_) \ + const bool SERVO_PREF_ENABLED_##id_ = !(sizeof(pref_) == 1); +#define CSS_PROP_SHORTHAND(name_, id_, method_, flags_, pref_) \ + const bool SERVO_PREF_ENABLED_##id_ = !(sizeof(pref_) == 1); +#define CSS_PROP_LIST_INCLUDE_LOGICAL +#include "nsCSSPropList.h" +#undef CSS_PROP_LIST_INCLUDE_LOGICAL +#undef CSS_PROP +#undef CSS_PROP_SHORTHAND + +} + +#endif // mozilla_ServoPropPrefList_h diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/style/test/mochitest.ini firefox-trunk-53.0~a1~hg20170115r329516/layout/style/test/mochitest.ini --- firefox-trunk-53.0~a1~hg20170113r329171/layout/style/test/mochitest.ini 2017-01-13 01:09:50.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/style/test/mochitest.ini 2017-01-16 01:08:13.000000000 +0000 @@ -301,7 +301,7 @@ [test_unprefixing_service_prefs.html] support-files = unprefixing_service_iframe.html unprefixing_service_utils.js [test_value_cloning.html] -skip-if = toolkit == 'android' #bug 775227 +skip-if = toolkit == 'android' # bug 775227 for android [test_value_computation.html] skip-if = toolkit == 'android' [test_value_storage.html] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/svg/nsCSSClipPathInstance.cpp firefox-trunk-53.0~a1~hg20170115r329516/layout/svg/nsCSSClipPathInstance.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/layout/svg/nsCSSClipPathInstance.cpp 2017-01-13 01:11:09.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/svg/nsCSSClipPathInstance.cpp 2017-01-16 01:09:15.000000000 +0000 @@ -11,6 +11,7 @@ #include "mozilla/dom/SVGSVGElement.h" #include "mozilla/gfx/2D.h" #include "mozilla/gfx/PathHelpers.h" +#include "mozilla/ShapeUtils.h" #include "nsCSSRendering.h" #include "nsIFrame.h" #include "nsRenderingContext.h" @@ -104,22 +105,6 @@ return builder->Finish(); } -static void -EnumerationToLength(nscoord& aCoord, StyleShapeRadius aType, - nscoord aCenter, nscoord aPosMin, nscoord aPosMax) -{ - nscoord dist1 = abs(aPosMin - aCenter); - nscoord dist2 = abs(aPosMax - aCenter); - switch (aType) { - case StyleShapeRadius::FarthestSide: - aCoord = dist1 > dist2 ? dist1 : dist2; - break; - case StyleShapeRadius::ClosestSide: - aCoord = dist1 > dist2 ? dist2 : dist1; - break; - } -} - already_AddRefed nsCSSClipPathInstance::CreateClipPathCircle(DrawTarget* aDrawTarget, const nsRect& aRefBox) @@ -128,41 +113,13 @@ RefPtr builder = aDrawTarget->CreatePathBuilder(); - nsPoint topLeft, anchor; - nsSize size = nsSize(aRefBox.width, aRefBox.height); - nsImageRenderer::ComputeObjectAnchorPoint(basicShape->GetPosition(), - size, size, - &topLeft, &anchor); - Point center = Point(anchor.x + aRefBox.x, anchor.y + aRefBox.y); - - const nsTArray& coords = basicShape->Coordinates(); - MOZ_ASSERT(coords.Length() == 1, "wrong number of arguments"); - nscoord r = 0; - if (coords[0].GetUnit() == eStyleUnit_Enumerated) { - const auto styleShapeRadius = coords[0].GetEnumValue(); - nscoord horizontal, vertical; - EnumerationToLength(horizontal, styleShapeRadius, - center.x, aRefBox.x, aRefBox.x + aRefBox.width); - EnumerationToLength(vertical, styleShapeRadius, - center.y, aRefBox.y, aRefBox.y + aRefBox.height); - if (styleShapeRadius == StyleShapeRadius::FarthestSide) { - r = horizontal > vertical ? horizontal : vertical; - } else { - r = horizontal < vertical ? horizontal : vertical; - } - } else { - // We resolve percent value for circle() as defined here: - // https://drafts.csswg.org/css-shapes/#funcdef-circle - double referenceLength = - SVGContentUtils::ComputeNormalizedHypotenuse(aRefBox.width, - aRefBox.height); - r = nsRuleNode::ComputeCoordPercentCalc(coords[0], - NSToCoordRound(referenceLength)); - } - + nsPoint center = + ShapeUtils::ComputeCircleOrEllipseCenter(basicShape, aRefBox); + nscoord r = ShapeUtils::ComputeCircleRadius(basicShape, center, aRefBox); nscoord appUnitsPerDevPixel = mTargetFrame->PresContext()->AppUnitsPerDevPixel(); - builder->Arc(center / appUnitsPerDevPixel, r / appUnitsPerDevPixel, + builder->Arc(Point(center.x, center.y) / appUnitsPerDevPixel, + r / appUnitsPerDevPixel, 0, Float(2 * M_PI)); builder->Close(); return builder->Finish(); @@ -176,25 +133,25 @@ RefPtr builder = aDrawTarget->CreatePathBuilder(); - nsPoint topLeft, anchor; - nsSize size = nsSize(aRefBox.width, aRefBox.height); - nsImageRenderer::ComputeObjectAnchorPoint(basicShape->GetPosition(), - size, size, - &topLeft, &anchor); - Point center = Point(anchor.x + aRefBox.x, anchor.y + aRefBox.y); + nsPoint center = + ShapeUtils::ComputeCircleOrEllipseCenter(basicShape, aRefBox); const nsTArray& coords = basicShape->Coordinates(); MOZ_ASSERT(coords.Length() == 2, "wrong number of arguments"); nscoord rx = 0, ry = 0; if (coords[0].GetUnit() == eStyleUnit_Enumerated) { - EnumerationToLength(rx, coords[0].GetEnumValue(), - center.x, aRefBox.x, aRefBox.x + aRefBox.width); + rx = ShapeUtils::ComputeShapeRadius(coords[0].GetEnumValue(), + center.x, + aRefBox.x, + aRefBox.x + aRefBox.width); } else { rx = nsRuleNode::ComputeCoordPercentCalc(coords[0], aRefBox.width); } if (coords[1].GetUnit() == eStyleUnit_Enumerated) { - EnumerationToLength(ry, coords[1].GetEnumValue(), - center.y, aRefBox.y, aRefBox.y + aRefBox.height); + ry = ShapeUtils::ComputeShapeRadius(coords[1].GetEnumValue(), + center.y, + aRefBox.y, + aRefBox.y + aRefBox.height); } else { ry = nsRuleNode::ComputeCoordPercentCalc(coords[1], aRefBox.height); } @@ -202,7 +159,7 @@ nscoord appUnitsPerDevPixel = mTargetFrame->PresContext()->AppUnitsPerDevPixel(); EllipseToBezier(builder.get(), - center / appUnitsPerDevPixel, + Point(center.x, center.y) / appUnitsPerDevPixel, Size(rx, ry) / appUnitsPerDevPixel); builder->Close(); return builder->Finish(); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/svg/nsSVGIntegrationUtils.cpp firefox-trunk-53.0~a1~hg20170115r329516/layout/svg/nsSVGIntegrationUtils.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/layout/svg/nsSVGIntegrationUtils.cpp 2017-01-13 01:11:11.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/svg/nsSVGIntegrationUtils.cpp 2017-01-16 01:09:16.000000000 +0000 @@ -26,6 +26,7 @@ #include "mozilla/gfx/Point.h" #include "nsCSSRendering.h" #include "mozilla/Unused.h" +#include "mozilla/RestyleManager.h" using namespace mozilla; using namespace mozilla::layers; @@ -110,18 +111,28 @@ // property set, that would be bad, since then our GetVisualOverflowRect() // call would give us the post-effects, and post-transform, overflow rect. // - // With image masks, there is one more exception. - // - // In nsStyleImageLayers::Layer::CalcDifference, we do not add - // nsChangeHint_UpdateOverflow hint when image mask(not SVG mask) property - // value changed, since replace image mask does not cause layout change. - // So even if we apply a new mask image to this frame, - // PreEffectsBBoxProperty might still left empty. - NS_ASSERTION(nsSVGEffects::GetEffectProperties(aFrame).MightHaveNoneSVGMask() || + // There are two more exceptions: + // 1. In nsStyleImageLayers::Layer::CalcDifference, we do not add + // nsChangeHint_UpdateOverflow hint when image mask(not SVG mask) + // property value changed, since replace image mask does not cause + // layout change. So even if we apply a new mask image to this frame, + // PreEffectsBBoxProperty might still left empty. + // 2. During restyling: before the last continuation is restyled, there + // is no guarantee that every continuation carries a + // PreEffectsBBoxProperty property. +#ifdef DEBUG + nsIFrame* firstFrame = + nsLayoutUtils::FirstContinuationOrIBSplitSibling(aFrame); + bool mightHaveNoneSVGMask = + nsSVGEffects::GetEffectProperties(firstFrame).MightHaveNoneSVGMask(); + bool inRestyle = + aFrame->PresContext()->RestyleManager()->AsGecko()->IsInStyleRefresh(); + + NS_ASSERTION(mightHaveNoneSVGMask || inRestyle || aFrame->GetParent()->StyleContext()->GetPseudo() == nsCSSAnonBoxes::mozAnonymousBlock, "How did we getting here, then?"); - +#endif NS_ASSERTION(!aFrame->Properties().Get( aFrame->PreTransformOverflowAreasProperty()), "GetVisualOverflowRect() won't return the pre-effects rect!"); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/svg/nsSVGMaskFrame.cpp firefox-trunk-53.0~a1~hg20170115r329516/layout/svg/nsSVGMaskFrame.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/layout/svg/nsSVGMaskFrame.cpp 2017-01-13 01:11:11.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/svg/nsSVGMaskFrame.cpp 2017-01-16 01:09:16.000000000 +0000 @@ -262,7 +262,7 @@ gfxMatrix m = mMatrixForChildren; if (kid->GetContent()->IsSVGElement()) { m = static_cast(kid->GetContent())-> - PrependLocalTransformsTo(m); + PrependLocalTransformsTo(m, eUserSpaceToParent); } result = nsSVGUtils::PaintFrameWithEffects(kid, *tmpCtx, m); if (result != DrawResult::SUCCESS) { diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/svg/SVGGeometryFrame.cpp firefox-trunk-53.0~a1~hg20170115r329516/layout/svg/SVGGeometryFrame.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/layout/svg/SVGGeometryFrame.cpp 2017-01-13 01:10:24.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/svg/SVGGeometryFrame.cpp 2017-01-16 01:09:13.000000000 +0000 @@ -284,9 +284,16 @@ if (!StyleVisibility()->IsVisible()) return DrawResult::SUCCESS; + gfxMatrix childToUserSpace = aTransform; + if (GetContent()->IsSVGElement()) { + childToUserSpace = static_cast(GetContent())-> + PrependLocalTransformsTo(childToUserSpace, + eChildToUserSpace); + } + // Matrix to the geometry's user space: gfxMatrix newMatrix = - aContext.CurrentMatrix().PreMultiply(aTransform).NudgeToIntegers(); + aContext.CurrentMatrix().PreMultiply(childToUserSpace).NudgeToIntegers(); if (newMatrix.IsSingular()) { return DrawResult::BAD_ARGS; } diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/tables/crashtests/crashtests.list firefox-trunk-53.0~a1~hg20170115r329516/layout/tables/crashtests/crashtests.list --- firefox-trunk-53.0~a1~hg20170113r329171/layout/tables/crashtests/crashtests.list 2017-01-13 01:11:19.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/tables/crashtests/crashtests.list 2017-01-16 01:09:16.000000000 +0000 @@ -115,7 +115,7 @@ load 451170.html load 451355-1.html load 456041.html -skip-if(stylo) load 457115.html # bug 1323671 +load 457115.html load 460637-1.xhtml load 460637-2.xhtml load 460637-3.xhtml diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/b2g_start_script.js firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/b2g_start_script.js --- firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/b2g_start_script.js 2017-01-13 01:11:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/b2g_start_script.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ -/* 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 { utils: Cu, classes: Cc, interfaces: Ci } = Components; - -function setPermissions() { - if (__webDriverArguments.length < 2) { - return; - } - - let serverAddr = __webDriverArguments[0]; - let serverPort = __webDriverArguments[1]; - let perms = Cc["@mozilla.org/permissionmanager;1"] - .getService(Ci.nsIPermissionManager); - let ioService = Cc["@mozilla.org/network/io-service;1"] - .getService(Ci.nsIIOService); - let uri = ioService.newURI("http://" + serverAddr + ":" + serverPort); - perms.add(uri, "allowXULXBL", Ci.nsIPermissionManager.ALLOW_ACTION); -} - -var cm = Cc["@mozilla.org/categorymanager;1"] - .getService(Ci.nsICategoryManager); - -// Disable update timers that cause b2g failures. -if (cm) { - cm.deleteCategoryEntry("update-timer", "nsUpdateService", false); -} - -// Load into any existing windows -var wm = Cc["@mozilla.org/appshell/window-mediator;1"] - .getService(Ci.nsIWindowMediator); -var win = wm.getMostRecentWindow(''); - -setPermissions(); - -// Loading this into the global namespace causes intermittent failures. -// See bug 882888 for more details. -var reftest = {}; -Cu.import("chrome://reftest/content/reftest.jsm", reftest); - -// Prevent display off during testing. -navigator.mozPower.screenEnabled = true; -var settingLock = navigator.mozSettings.createLock(); -var settingResult = settingLock.set({ - 'screen.timeout': 0 -}); -settingResult.onsuccess = function () { - dump("Set screen.time to 0\n"); - // Start the reftests - reftest.OnRefTestLoad(win); -} -settingResult.onerror = function () { - dump("Change screen.time failed\n"); - // Start the reftests - reftest.OnRefTestLoad(win); -} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/bootstrap.js firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/bootstrap.js --- firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/bootstrap.js 2017-01-13 01:11:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/bootstrap.js 2017-01-16 01:10:13.000000000 +0000 @@ -33,11 +33,6 @@ }; function startup(data, reason) { - // b2g is bootstrapped by b2g_start_script.js - if (Services.appinfo.widgetToolkit == "gonk") { - return; - } - if (Services.appinfo.OS == "Android") { Cm.addBootstrappedManifestLocation(data.installPath); Services.wm.addListener(WindowListener); @@ -66,10 +61,6 @@ } function shutdown(data, reason) { - if (Services.appinfo.widgetToolkit == "gonk") { - return; - } - if (Services.appinfo.OS == "Android") { Services.wm.removeListener(WindowListener); Cm.removedBootstrappedManifestLocation(data.installPath); diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/gaia_lock_screen.js firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/gaia_lock_screen.js --- firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/gaia_lock_screen.js 2017-01-13 01:11:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/gaia_lock_screen.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ -/* 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/. */ - -// NOTE: This code was forked from: -// https://github.com/mozilla-b2g/gaia/blob/master/tests/atoms/gaia_lock_screen.js - -'use strict'; -/* globals waitFor, finish */ -/* exported GaiaLockScreen */ - -var GaiaLockScreen = { - - unlock: function(forcibly) { - let setlock = window.wrappedJSObject.SettingsListener.getSettingsLock(); - let service = window.wrappedJSObject.Service; - let obj = {'screen.timeout': 0}; - setlock.set(obj); - - waitFor( - function() { - service.request('unlock', { forcibly: forcibly }); - waitFor( - function() { - finish(service.locked); - }, - function() { - return !service.locked; - } - ); - }, - function() { - return !!service; - } - ); - }, - - lock: function(forcibly) { - let service = window.wrappedJSObject.Service; - let setlock = window.wrappedJSObject.SettingsListener.getSettingsLock(); - let obj = {'screen.timeout': 0}; - setlock.set(obj); - waitFor( - function() { - service.request('lock', { forcibly: forcibly }); - waitFor( - function() { - finish(!service.locked); - }, - function() { - return service.locked; - } - ); - }, - function() { - return !!service; - } - ); - } -}; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/jar.mn firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/jar.mn --- firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/jar.mn 2017-01-13 01:11:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/jar.mn 2017-01-16 01:10:13.000000000 +0000 @@ -1,6 +1,6 @@ reftest.jar: % content reftest %content/ -* content/reftest-content.js (reftest-content.js) + content/reftest-content.js (reftest-content.js) content/httpd.jsm (../../../netwerk/test/httpserver/httpd.js) content/StructuredLog.jsm (../../../testing/modules/StructuredLog.jsm) * content/reftest.jsm (reftest.jsm) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/mach_commands.py firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/mach_commands.py --- firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/mach_commands.py 2017-01-13 01:11:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/mach_commands.py 2017-01-16 01:10:13.000000000 +0000 @@ -7,8 +7,6 @@ import os import re import sys -import warnings -import which from argparse import Namespace from mozbuild.base import ( @@ -24,43 +22,6 @@ import reftestcommandline -ADB_NOT_FOUND = ''' -The %s command requires the adb binary to be on your path. - -If you have a B2G build, this can be found in -'%s/out/host//bin'. -'''.lstrip() - -GAIA_PROFILE_NOT_FOUND = ''' -The reftest command requires a non-debug gaia profile on Mulet. -Either pass in --profile, or set the GAIA_PROFILE environment variable. - -If you do not have a non-debug gaia profile, you can build one: - $ git clone https://github.com/mozilla-b2g/gaia - $ cd gaia - $ make - -The profile should be generated in a directory called 'profile'. -'''.lstrip() - -GAIA_PROFILE_IS_DEBUG = ''' -The reftest command requires a non-debug gaia profile on Mulet. -The specified profile, %s, is a debug profile. - -If you do not have a non-debug gaia profile, you can build one: - $ git clone https://github.com/mozilla-b2g/gaia - $ cd gaia - $ make - -The profile should be generated in a directory called 'profile'. -'''.lstrip() - -MARIONETTE_DISABLED = ''' -The reftest command requires a marionette enabled build on Mulet. - -Add 'ac_add_options --enable-marionette' to your mozconfig file and re-build the application. -Your currently active mozconfig is %s. -'''.lstrip() parser = None @@ -100,80 +61,6 @@ if not os.path.isdir(tests): os.symlink(self.topsrcdir, tests) - def run_b2g_test(self, b2g_home=None, xre_path=None, **kwargs): - """Runs a b2g reftest. - - filter is a regular expression (in JS syntax, as could be passed to the - RegExp constructor) to select which reftests to run from the manifest. - - tests is a list of paths. It can be a relative path from the - top source directory, an absolute filename, or a directory containing - test files. - - suite is the type of reftest to run. It can be one of ('reftest', - 'crashtest'). - """ - args = Namespace(**kwargs) - if args.suite not in ('reftest', 'crashtest'): - raise Exception('None or unrecognized reftest suite type.') - - self._setup_objdir(args) - import runreftestb2g - - for i, path in enumerate(args.tests): - # Non-absolute paths are relative to the packaged directory, which - # has an extra tests/ at the start - if os.path.exists(os.path.abspath(path)): - path = os.path.relpath(path, os.path.join(self.topsrcdir)) - args.tests[i] = os.path.join('tests', path) - - try: - which.which('adb') - except which.WhichError: - # TODO Find adb automatically if it isn't on the path - raise Exception(ADB_NOT_FOUND % ('%s-remote' % args.suite, b2g_home)) - - args.b2gPath = b2g_home - args.logdir = self.reftest_dir - args.httpdPath = os.path.join(self.topsrcdir, 'netwerk', 'test', 'httpserver') - args.xrePath = xre_path - args.ignoreWindowSize = True - - return runreftestb2g.run_test_harness(parser, args) - - def run_mulet_test(self, **kwargs): - """Runs a mulet reftest.""" - args = Namespace(**kwargs) - self._setup_objdir(args) - - import runreftestmulet - - if self.substs.get('ENABLE_MARIONETTE') != '1': - print(MARIONETTE_DISABLED % self.mozconfig['path']) - return 1 - - if not args.profile: - gaia_profile = os.environ.get('GAIA_PROFILE') - if not gaia_profile: - print(GAIA_PROFILE_NOT_FOUND) - return 1 - args.profile = gaia_profile - - if os.path.isfile(os.path.join(args.profile, 'extensions', - 'httpd@gaiamobile.org')): - print(GAIA_PROFILE_IS_DEBUG % args.profile) - return 1 - - args.app = self.get_binary_path() - args.mulet = True - - if not args.app.endswith('-bin'): - args.app = '%s-bin' % args.app - if not os.path.isfile(args.app): - args.app = args.app[:-len('-bin')] - - return runreftestmulet.run_test_harness(parser, args) - def run_desktop_test(self, **kwargs): """Runs a reftest, in desktop Firefox.""" import runreftest @@ -301,8 +188,6 @@ build_obj = MozbuildObject.from_environment(cwd=here) if conditions.is_android(build_obj): parser = reftestcommandline.RemoteArgumentsParser() - elif conditions.is_mulet(build_obj): - parser = reftestcommandline.B2GArgumentParser() else: parser = reftestcommandline.DesktopArgumentsParser() return parser @@ -344,50 +229,4 @@ from mozrunner.devices.android_device import verify_android_device verify_android_device(self, install=True, xre=True) return reftest.run_android_test(**kwargs) - elif conditions.is_mulet(self): - return reftest.run_mulet_test(**kwargs) return reftest.run_desktop_test(**kwargs) - - -# TODO For now b2g commands will only work with the emulator, -# they should be modified to work with all devices. -def is_emulator(cls): - """Emulator needs to be configured.""" - return cls.device_name.startswith('emulator') - - -@CommandProvider -class B2GCommands(MachCommandBase): - def __init__(self, context): - MachCommandBase.__init__(self, context) - - for attr in ('b2g_home', 'xre_path', 'device_name'): - setattr(self, attr, getattr(context, attr, None)) - - @Command('reftest-remote', category='testing', - description='Run a remote reftest (b2g layout and graphics correctness, remote device).', - conditions=[conditions.is_b2g, is_emulator], - parser=get_parser) - def run_reftest_remote(self, **kwargs): - kwargs["suite"] = "reftest" - return self._run_reftest(**kwargs) - - @Command('crashtest-remote', category='testing', - description='Run a remote crashtest (Check if b2g crashes on a page, remote device).', - conditions=[conditions.is_b2g, is_emulator], - parser=get_parser) - def run_crashtest_remote(self, test_file, **kwargs): - kwargs["suite"] = "crashtest" - return self._run_reftest(**kwargs) - - def _run_reftest(self, **kwargs): - process_test_objects(kwargs) - if self.device_name: - if self.device_name.startswith('emulator'): - emulator = 'arm' - if 'x86' in self.device_name: - emulator = 'x86' - kwargs['emulator'] = emulator - - reftest = self._spawn(ReftestRunner) - return reftest.run_b2g_test(self.b2g_home, self.xre_path, **kwargs) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/moz.build firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/moz.build --- firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/moz.build 2017-01-13 01:11:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/moz.build 2017-01-16 01:10:13.000000000 +0000 @@ -16,20 +16,15 @@ GENERATED_FILES += ['automation.py'] TEST_HARNESS_FILES.reftest += [ '!automation.py', - '/build/mobile/b2gautomation.py', '/build/mobile/remoteautomation.py', '/build/pgo/server-locations.txt', '/testing/mochitest/server.js', - 'b2g_start_script.js', - 'gaia_lock_screen.js', 'mach_test_package_commands.py', 'output.py', 'reftest-preferences.js', 'reftestcommandline.py', 'remotereftest.py', 'runreftest.py', - 'runreftestb2g.py', - 'runreftestmulet.py', ] TEST_HARNESS_FILES.reftest.chrome += [ diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/output.py firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/output.py --- firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/output.py 2017-01-13 01:11:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/output.py 2017-01-16 01:10:13.000000000 +0000 @@ -105,8 +105,6 @@ def __init__(self, log, utilityPath, symbolsPath=None): self.stack_fixer_function = get_stack_fixer_function(utilityPath, symbolsPath) self.log = log - # needed for b2gautomation.py - self.suite_finished = False def __call__(self, line): # need to return processed messages to appease remoteautomation.py @@ -120,9 +118,6 @@ return [line] if isinstance(data, dict) and 'action' in data: - if data['action'] == 'suite_end': - self.suite_finished = True - self.log.log_raw(data) else: self.verbatim(json.dumps(data)) diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/reftestcommandline.py firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/reftestcommandline.py --- firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/reftestcommandline.py 2017-01-13 01:11:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/reftestcommandline.py 2017-01-16 01:10:14.000000000 +0000 @@ -360,203 +360,6 @@ options.utilityPath = reftest.getFullPath(options.utilityPath) -class B2GArgumentParser(ReftestArgumentsParser): - def __init__(self, **kwargs): - super(B2GArgumentParser, self).__init__(**kwargs) - - self.add_argument("--browser-arg", - action="store", - type=str, - dest="browser_arg", - help="Optional command-line arg to pass to the browser") - - self.add_argument("--b2gpath", - action="store", - type=str, - dest="b2gPath", - help="path to B2G repo or qemu dir") - - self.add_argument("--emulator", - action="store", - type=str, - dest="emulator", - help="Architecture of emulator to use: x86 or arm") - - self.add_argument("--emulator-res", - action="store", - type=str, - dest="emulator_res", - help="Emulator resolution of the format 'x'") - - self.add_argument("--no-window", - action="store_true", - dest="noWindow", - default=False, - help="Pass --no-window to the emulator") - - self.add_argument("--adbpath", - action="store", - type=str, - dest="adb_path", - default="adb", - help="path to adb") - - self.add_argument("--deviceIP", - action="store", - type=str, - dest="deviceIP", - help="ip address of remote device to test") - - self.add_argument("--devicePort", - action="store", - type=str, - dest="devicePort", - default="20701", - help="port of remote device to test") - - self.add_argument("--remote-logfile", - action="store", - type=str, - dest="remoteLogFile", - help="Name of log file on the device relative to the device root. PLEASE ONLY USE A FILENAME.") - - self.add_argument("--remote-webserver", - action="store", - type=str, - dest="remoteWebServer", - help="ip address where the remote web server is hosted at") - - self.add_argument("--http-port", - action="store", - type=str, - dest="httpPort", - help="ip address where the remote web server is hosted at") - - self.add_argument("--ssl-port", - action="store", - type=str, - dest="sslPort", - help="ip address where the remote web server is hosted at") - - self.add_argument("--pidfile", - action="store", - type=str, - dest="pidFile", - default="", - help="name of the pidfile to generate") - - self.add_argument("--gecko-path", - action="store", - type=str, - dest="geckoPath", - help="the path to a gecko distribution that should " - "be installed on the emulator prior to test") - - self.add_argument("--logdir", - action="store", - type=str, - dest="logdir", - help="directory to store log files") - - self.add_argument('--busybox', - action='store', - type=str, - dest='busybox', - help="Path to busybox binary to install on device") - - self.add_argument("--httpd-path", - action="store", - type=str, - dest="httpdPath", - help="path to the httpd.js file") - - self.add_argument("--profile", - action="store", - type=str, - dest="profile", - help="for mulet testing, the path to the " - "gaia profile to use") - - self.add_argument("--mulet", - action="store_true", - dest="mulet", - default=False, - help="Run the tests on a B2G desktop build") - - self.set_defaults(remoteTestRoot=None, - logFile="reftest.log", - autorun=True, - closeWhenDone=True, - testPath="") - - def validate_remote(self, options, automation): - if not options.app: - options.app = automation.DEFAULT_APP - - if not options.remoteTestRoot: - options.remoteTestRoot = automation._devicemanager.deviceRoot + \ - "/reftest" - - options.remoteProfile = options.remoteTestRoot + "/profile" - - productRoot = options.remoteTestRoot + "/" + automation._product - if options.utilityPath is None: - options.utilityPath = productRoot + "/bin" - - if not options.httpPort: - options.httpPort = automation.DEFAULT_HTTP_PORT - - if not options.sslPort: - options.sslPort = automation.DEFAULT_SSL_PORT - - if options.remoteWebServer is None: - options.remoteWebServer = self.get_ip() - - options.webServer = options.remoteWebServer - - if options.geckoPath and not options.emulator: - self.error( - "You must specify --emulator if you specify --gecko-path") - - if options.logdir and not options.emulator: - self.error("You must specify --emulator if you specify --logdir") - - if options.remoteLogFile is None: - options.remoteLogFile = "reftest.log" - - options.localLogName = options.remoteLogFile - options.remoteLogFile = options.remoteTestRoot + \ - '/' + options.remoteLogFile - - # Ensure that the options.logfile (which the base class uses) is set to - # the remote setting when running remote. Also, if the user set the - # log file name there, use that instead of reusing the remotelogfile as - # above. - if (options.logFile): - # If the user specified a local logfile name use that - options.localLogName = options.logFile - options.logFile = options.remoteLogFile - - # Only reset the xrePath if it wasn't provided - if options.xrePath is None: - options.xrePath = options.utilityPath - options.xrePath = os.path.abspath(options.xrePath) - - if options.pidFile != "": - f = open(options.pidFile, 'w') - f.write("%s" % os.getpid()) - f.close() - - # httpd-path is specified by standard makefile targets and may be specified - # on the command line to select a particular version of httpd.js. If not - # specified, try to select the one from from the xre bundle, as - # required in bug 882932. - if not options.httpdPath: - options.httpdPath = os.path.join(options.xrePath, "components") - - return options - - class RemoteArgumentsParser(ReftestArgumentsParser): def __init__(self, **kwargs): super(RemoteArgumentsParser, self).__init__() diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/reftest-content.js firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/reftest-content.js --- firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/reftest-content.js 2017-01-13 01:11:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/reftest-content.js 2017-01-16 01:10:13.000000000 +0000 @@ -100,9 +100,7 @@ function OnInitialLoad() { -#ifndef REFTEST_B2G removeEventListener("load", OnInitialLoad, true); -#endif gDebug = CC[DEBUG_CONTRACTID].getService(CI.nsIDebug2); var env = CC[ENVIRONMENT_CONTRACTID].getService(CI.nsIEnvironment); @@ -182,16 +180,11 @@ } function doPrintMode(contentRootElement) { -#if REFTEST_B2G - // nsIPrintSettings not available in B2G - return false; -#else // use getAttribute because className works differently in HTML and SVG return contentRootElement && contentRootElement.hasAttribute('class') && contentRootElement.getAttribute('class').split(/\s+/) .indexOf("reftest-print") != -1; -#endif } function setupPrintMode() { @@ -1162,13 +1155,9 @@ sendAsyncMessage("reftest:UpdateCanvasForInvalidation", { rects: rects }); } } -#if REFTEST_B2G -OnInitialLoad(); -#else if (content.document.readyState == "complete") { // load event has already fired for content, get started OnInitialLoad(); } else { addEventListener("load", OnInitialLoad, true); } -#endif diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/reftest.jsm firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/reftest.jsm --- firefox-trunk-53.0~a1~hg20170113r329171/layout/tools/reftest/reftest.jsm 2017-01-13 01:11:21.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/layout/tools/reftest/reftest.jsm 2017-01-16 01:10:14.000000000 +0000 @@ -63,7 +63,6 @@ var gBrowser; // Are we testing web content loaded in a separate process? var gBrowserIsRemote; // bool -var gB2GisMulet; // bool // Are we using diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/bug1204626_doc1.html firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/bug1204626_doc1.html --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/bug1204626_doc1.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/bug1204626_doc1.html 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,5 @@ + +

    This is the document inside the iframe. (Currently this +document doesn't even need to exist in order to reproduce the bug in +question, as long as the parent contains a frame, but it's probably +best not to depend on that.)

    diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/bug293834_form.html firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/bug293834_form.html --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/bug293834_form.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/bug293834_form.html 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,26 @@ + + + + + Nested iframe for bug 293834 + + + +
    + not prefilled:
    + prefilled:
    + + Should be saved checked
    + Initially checked
    +
    + not prefilled:
    + prefilled:
    + Should be saved checked
    + Initiallly checked
    +
    + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/bug449141_page.html firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/bug449141_page.html --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/bug449141_page.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/bug449141_page.html 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,12 @@ + + + + + Nested iframe for bug 449141 + + + + + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/chrome.ini firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/chrome.ini --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/chrome.ini 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/chrome.ini 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,11 @@ +[DEFAULT] +support-files = + 320x240.ogv + bug449141_page.html + bug1170334_iframe.xml + bug1170334_style.css + +[test_bug449141.html] +skip-if = toolkit == 'android' +[test_bug1170334_wbp_xmlstyle.html] +[test_bug1192654.html] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/mochitest.ini firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/mochitest.ini --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/mochitest.ini 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/mochitest.ini 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,14 @@ +[DEFAULT] +support-files = + bug293834_form.html + +[test_bug293834.html] +skip-if = (toolkit == "cocoa" && e10s) # bug 1252223 +[test_bug499115.html] +[test_nsFind.html] +[test_private_window_from_content.html] +# Next two tests are disabled in e10s because of bug 989501. +[test_window_open_position_constraint.html] +skip-if = toolkit == 'android' +[test_window_open_units.html] +skip-if = toolkit == 'android' diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/moz.build firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/moz.build --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/moz.build 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/moz.build 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,9 @@ +# -*- Mode: python; 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'] +MOCHITEST_CHROME_MANIFESTS += ['chrome.ini'] +BROWSER_CHROME_MANIFESTS += ['browser.ini'] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_bug1170334_wbp_xmlstyle.html firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_bug1170334_wbp_xmlstyle.html --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_bug1170334_wbp_xmlstyle.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_bug1170334_wbp_xmlstyle.html 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,80 @@ + + + + + Test for Bug 1170334 (nsWebBrowserPersist vs. XML stylesheets) + + + + +Mozilla Bug 1170334 +

    +
    
    +
    + +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_bug1192654.html firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_bug1192654.html --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_bug1192654.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_bug1192654.html 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,78 @@ + + + + + Test for Bug 1192654 (nsWebBrowser vs. nonpersistable subdocuments) + + + + +Mozilla Bug 1192654 +

    +
    
    +
    + + +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_bug293834.html firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_bug293834.html --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_bug293834.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_bug293834.html 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,137 @@ + + + + + Test for Bug 293834 + + + + +Mozilla Bug 293834 +

    + +

    +
    
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_bug449141.html firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_bug449141.html --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_bug449141.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_bug449141.html 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,101 @@ + + + + + Test for Bug 449141 + + + + +Mozilla Bug 449141 +

    + +

    +
    
    +
    +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_bug499115.html firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_bug499115.html --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_bug499115.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_bug499115.html 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,66 @@ + + + + + + + Test for Bug 499115 + + + + + Mozilla Bug 499115 +

    + +
    +    
    +  
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_nsFind.html firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_nsFind.html --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_nsFind.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_nsFind.html 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,241 @@ + + + + + + Test for nsFind::Find() + + + + +Mozilla Bug 450048 +

    This is the text to search in­to

    +

    "straight" and “curly” and ‘didn't’ and 'doesn’t'

    + +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_private_window_from_content.html firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_private_window_from_content.html --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_private_window_from_content.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_private_window_from_content.html 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,12 @@ + + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_window_open_position_constraint.html firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_window_open_position_constraint.html --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_window_open_position_constraint.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_window_open_position_constraint.html 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,56 @@ + + + + Test for Bug 978847 + + + + +Mozilla Bug 978847 +

    + +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_window_open_units.html firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_window_open_units.html --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/test/test_window_open_units.html 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/test/test_window_open_units.html 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,36 @@ + + + + Test for Bug 594140 + + + + + +Mozilla Bug 594140 +

    + +
    +
    +
    + + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/tests/unit/test_wwauthpromptfactory.js firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/tests/unit/test_wwauthpromptfactory.js --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/tests/unit/test_wwauthpromptfactory.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/tests/unit/test_wwauthpromptfactory.js 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,67 @@ +var Cc = Components.classes; +var Ci = Components.interfaces; + +var authPromptRequestReceived; + +const tPFCID = Components.ID("{749e62f4-60ae-4569-a8a2-de78b649660f}"); +const tPFContract = "@mozilla.org/passwordmanager/authpromptfactory;1"; + +/* + * TestPromptFactory + * + * Implements nsIPromptFactory + */ +var TestPromptFactory = { + QueryInterface: function tPF_qi(iid) { + if (iid.equals(Ci.nsISupports) || + iid.equals(Ci.nsIFactory) || + iid.equals(Ci.nsIPromptFactory)) + return this; + throw Components.results.NS_ERROR_NO_INTERFACE; + }, + + createInstance: function tPF_ci(outer, iid) { + if (outer) + throw Components.results.NS_ERROR_NO_AGGREGATION; + return this.QueryInterface(iid); + }, + + lockFactory: function tPF_lockf(lock) { + throw Components.results.NS_ERROR_NOT_IMPLEMENTED; + }, + + getPrompt : function tPF_getPrompt(aWindow, aIID) { + if (aIID.equals(Ci.nsIAuthPrompt) || + aIID.equals(Ci.nsIAuthPrompt2)) { + authPromptRequestReceived = true; + return {}; + } + + throw Components.results.NS_ERROR_NO_INTERFACE; + } +}; // end of TestPromptFactory implementation + +/* + * The tests + */ +function run_test() { + Components.manager.nsIComponentRegistrar.registerFactory(tPFCID, + "TestPromptFactory", tPFContract, TestPromptFactory); + + // Make sure that getting both nsIAuthPrompt and nsIAuthPrompt2 works + // (these should work independently of whether the application has + // nsIPromptService2) + var ww = Cc["@mozilla.org/embedcomp/window-watcher;1"].getService(); + + authPromptRequestReceived = false; + + do_check_neq(ww.nsIPromptFactory.getPrompt(null, Ci.nsIAuthPrompt), null); + + do_check_true(authPromptRequestReceived); + + authPromptRequestReceived = false; + + do_check_neq(ww.nsIPromptFactory.getPrompt(null, Ci.nsIAuthPrompt2), null); + + do_check_true(authPromptRequestReceived); +} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/tests/unit/test_wwpromptfactory.js firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/tests/unit/test_wwpromptfactory.js --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/tests/unit/test_wwpromptfactory.js 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/tests/unit/test_wwpromptfactory.js 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,24 @@ +function run_test() { + // Make sure that getting both nsIAuthPrompt and nsIAuthPrompt2 works + // (these should work independently of whether the application has + // nsIPromptService2) + var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"] + .getService(); + + var prompt; + + prompt = ww.nsIWindowWatcher.getNewPrompter(null); + do_check_neq(prompt, null); + prompt = ww.nsIWindowWatcher.getNewAuthPrompter(null); + do_check_neq(prompt, null); + + prompt = ww.nsIPromptFactory.getPrompt(null, + Components.interfaces.nsIPrompt); + do_check_neq(prompt, null); + prompt = ww.nsIPromptFactory.getPrompt(null, + Components.interfaces.nsIAuthPrompt); + do_check_neq(prompt, null); + prompt = ww.nsIPromptFactory.getPrompt(null, + Components.interfaces.nsIAuthPrompt2); + do_check_neq(prompt, null); +} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/tests/unit/xpcshell.ini firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/tests/unit/xpcshell.ini --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowcreator/tests/unit/xpcshell.ini 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowcreator/tests/unit/xpcshell.ini 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,6 @@ +[DEFAULT] +head = +tail = + +[test_wwauthpromptfactory.js] +[test_wwpromptfactory.js] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/moz.build firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/moz.build --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/moz.build 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/moz.build 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,49 @@ +# -*- Mode: python; 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/. + +TEST_DIRS += ['test'] + +XPIDL_SOURCES += [ + 'nsIDialogParamBlock.idl', + 'nsIPromptFactory.idl', + 'nsIPromptService.idl', + 'nsIPromptService2.idl', + 'nsIWindowWatcher.idl', + 'nsPIPromptService.idl', + 'nsPIWindowWatcher.idl', +] + +XPIDL_MODULE = 'windowwatcher' + +EXPORTS += [ + 'nsPromptUtils.h', +] + +UNIFIED_SOURCES += [ + 'nsAutoWindowStateHelper.cpp', + 'nsWindowWatcher.cpp', +] + +EXPORTS += [ + 'nsWindowWatcher.h', +] + +if CONFIG['MOZ_XUL']: + UNIFIED_SOURCES += [ + 'nsDialogParamBlock.cpp', + ] + +FINAL_LIBRARY = 'xul' +# For nsJSUtils +LOCAL_INCLUDES += [ + '/docshell/base', + '/dom/base', +] + +if CONFIG['GNU_CXX']: + CXXFLAGS += ['-Wno-error=shadow'] + +include('/ipc/chromium/chromium-config.mozbuild') diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsAutoWindowStateHelper.cpp firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsAutoWindowStateHelper.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsAutoWindowStateHelper.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsAutoWindowStateHelper.cpp 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,73 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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 "nsAutoWindowStateHelper.h" + +#include "mozilla/dom/Event.h" +#include "nsIDocument.h" +#include "nsIDOMEvent.h" +#include "nsIDOMWindow.h" +#include "nsPIDOMWindow.h" +#include "nsString.h" + +using namespace mozilla; +using namespace mozilla::dom; + +/**************************************************************** + ****************** nsAutoWindowStateHelper ********************* + ****************************************************************/ + +nsAutoWindowStateHelper::nsAutoWindowStateHelper(nsPIDOMWindowOuter* aWindow) + : mWindow(aWindow) + , mDefaultEnabled(DispatchEventToChrome("DOMWillOpenModalDialog")) +{ + if (mWindow) { + mWindow->EnterModalState(); + } +} + +nsAutoWindowStateHelper::~nsAutoWindowStateHelper() +{ + if (mWindow) { + mWindow->LeaveModalState(); + } + + if (mDefaultEnabled) { + DispatchEventToChrome("DOMModalDialogClosed"); + } +} + +bool +nsAutoWindowStateHelper::DispatchEventToChrome(const char* aEventName) +{ + // XXXbz should we skip dispatching the event if the inner changed? + // That is, should we store both the inner and the outer? + if (!mWindow) { + return true; + } + + // The functions of nsContentUtils do not provide the required behavior, + // so the following is inlined. + nsIDocument* doc = mWindow->GetExtantDoc(); + if (!doc) { + return true; + } + + ErrorResult rv; + RefPtr event = doc->CreateEvent(NS_LITERAL_STRING("Events"), rv); + if (rv.Failed()) { + rv.SuppressException(); + return false; + } + event->InitEvent(NS_ConvertASCIItoUTF16(aEventName), true, true); + event->SetTrusted(true); + event->WidgetEventPtr()->mFlags.mOnlyChromeDispatch = true; + + nsCOMPtr target = do_QueryInterface(mWindow); + bool defaultActionEnabled; + target->DispatchEvent(event, &defaultActionEnabled); + return defaultActionEnabled; +} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsAutoWindowStateHelper.h firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsAutoWindowStateHelper.h --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsAutoWindowStateHelper.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsAutoWindowStateHelper.h 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,35 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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/. */ + +#ifndef __nsAutoWindowStateHelper_h +#define __nsAutoWindowStateHelper_h + +#include "nsCOMPtr.h" +#include "nsPIDOMWindow.h" + +/** + * Helper class for dealing with notifications around opening modal + * windows. + */ + +class nsPIDOMWindowOuter; + +class nsAutoWindowStateHelper +{ +public: + explicit nsAutoWindowStateHelper(nsPIDOMWindowOuter* aWindow); + ~nsAutoWindowStateHelper(); + + bool DefaultEnabled() { return mDefaultEnabled; } + +protected: + bool DispatchEventToChrome(const char* aEventName); + + nsCOMPtr mWindow; + bool mDefaultEnabled; +}; + +#endif diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsDialogParamBlock.cpp firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsDialogParamBlock.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsDialogParamBlock.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsDialogParamBlock.cpp 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,101 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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 "nsDialogParamBlock.h" +#include "nsString.h" +#include "nsReadableUtils.h" + +NS_IMPL_ISUPPORTS(nsDialogParamBlock, nsIDialogParamBlock) + +nsDialogParamBlock::nsDialogParamBlock() + : mNumStrings(0) + , mString(nullptr) +{ + for (int32_t i = 0; i < kNumInts; i++) { + mInt[i] = 0; + } +} + +nsDialogParamBlock::~nsDialogParamBlock() +{ + delete[] mString; +} + +NS_IMETHODIMP +nsDialogParamBlock::SetNumberStrings(int32_t aNumStrings) +{ + if (mString) { + return NS_ERROR_ALREADY_INITIALIZED; + } + + mString = new nsString[aNumStrings]; + if (!mString) { + return NS_ERROR_OUT_OF_MEMORY; + } + mNumStrings = aNumStrings; + return NS_OK; +} + +NS_IMETHODIMP +nsDialogParamBlock::GetInt(int32_t aIndex, int32_t* aResult) +{ + nsresult rv = InBounds(aIndex, kNumInts); + if (rv == NS_OK) { + *aResult = mInt[aIndex]; + } + return rv; +} + +NS_IMETHODIMP +nsDialogParamBlock::SetInt(int32_t aIndex, int32_t aInt) +{ + nsresult rv = InBounds(aIndex, kNumInts); + if (rv == NS_OK) { + mInt[aIndex] = aInt; + } + return rv; +} + +NS_IMETHODIMP +nsDialogParamBlock::GetString(int32_t aIndex, char16_t** aResult) +{ + if (mNumStrings == 0) { + SetNumberStrings(kNumStrings); + } + nsresult rv = InBounds(aIndex, mNumStrings); + if (rv == NS_OK) { + *aResult = ToNewUnicode(mString[aIndex]); + } + return rv; +} + +NS_IMETHODIMP +nsDialogParamBlock::SetString(int32_t aIndex, const char16_t* aString) +{ + if (mNumStrings == 0) { + SetNumberStrings(kNumStrings); + } + nsresult rv = InBounds(aIndex, mNumStrings); + if (rv == NS_OK) { + mString[aIndex] = aString; + } + return rv; +} + +NS_IMETHODIMP +nsDialogParamBlock::GetObjects(nsIMutableArray** aObjects) +{ + NS_ENSURE_ARG_POINTER(aObjects); + NS_IF_ADDREF(*aObjects = mObjects); + return NS_OK; +} + +NS_IMETHODIMP +nsDialogParamBlock::SetObjects(nsIMutableArray* aObjects) +{ + mObjects = aObjects; + return NS_OK; +} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsDialogParamBlock.h firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsDialogParamBlock.h --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsDialogParamBlock.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsDialogParamBlock.h 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,45 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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/. */ + +#ifndef __nsDialogParamBlock_h +#define __nsDialogParamBlock_h + +#include "nsIDialogParamBlock.h" +#include "nsIMutableArray.h" +#include "nsCOMPtr.h" + +// {4E4AAE11-8901-46cc-8217-DAD7C5415873} +#define NS_DIALOGPARAMBLOCK_CID \ + {0x4e4aae11, 0x8901, 0x46cc, {0x82, 0x17, 0xda, 0xd7, 0xc5, 0x41, 0x58, 0x73}} + +class nsString; + +class nsDialogParamBlock : public nsIDialogParamBlock +{ +public: + nsDialogParamBlock(); + + NS_DECL_NSIDIALOGPARAMBLOCK + NS_DECL_ISUPPORTS + +protected: + virtual ~nsDialogParamBlock(); + +private: + enum { kNumInts = 8, kNumStrings = 16 }; + + nsresult InBounds(int32_t aIndex, int32_t aMax) + { + return aIndex >= 0 && aIndex < aMax ? NS_OK : NS_ERROR_ILLEGAL_VALUE; + } + + int32_t mInt[kNumInts]; + int32_t mNumStrings; + nsString* mString; + nsCOMPtr mObjects; +}; + +#endif diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsIDialogParamBlock.idl firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsIDialogParamBlock.idl --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsIDialogParamBlock.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsIDialogParamBlock.idl 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,42 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* 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" +interface nsIMutableArray; + +/** + * An interface to pass strings, integers and nsISupports to a dialog + */ + +[scriptable, uuid(f76c0901-437a-11d3-b7a0-e35db351b4bc)] +interface nsIDialogParamBlock: nsISupports { + + /** Get or set an integer to pass. + * Index must be in the range 0..7 + */ + int32_t GetInt( in int32_t inIndex ); + void SetInt( in int32_t inIndex, in int32_t inInt ); + + /** Set the maximum number of strings to pass. Default is 16. + * Use before setting any string (If you want to change it from the default). + */ + void SetNumberStrings( in int32_t inNumStrings ); + + /** Get or set an string to pass. + * Index starts at 0 + */ + wstring GetString( in int32_t inIndex ); + void SetString( in int32_t inIndex, in wstring inString); + + /** + * A place where you can store an nsIMutableArray to pass nsISupports + */ + attribute nsIMutableArray objects; +}; + +%{C++ +#define NS_DIALOGPARAMBLOCK_CONTRACTID "@mozilla.org/embedcomp/dialogparam;1" +%} + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsIPromptFactory.idl firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsIPromptFactory.idl --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsIPromptFactory.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsIPromptFactory.idl 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,22 @@ +/* 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" + +interface mozIDOMWindowProxy; + +/** + * This interface allows creating various prompts that have a specific parent. + */ +[scriptable, uuid(2803541c-c96a-4ff1-bd7c-9cb566d46aeb)] +interface nsIPromptFactory : nsISupports +{ + /** + * Returns an object implementing the specified interface that creates + * prompts parented to aParent. + */ + void getPrompt(in mozIDOMWindowProxy aParent, in nsIIDRef iid, + [iid_is(iid),retval] out nsQIResult result); +}; + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsIPromptService2.idl firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsIPromptService2.idl --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsIPromptService2.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsIPromptService2.idl 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,45 @@ +/* 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 "nsIPromptService.idl" + +interface nsIAuthInformation; +interface nsIAuthPromptCallback; +interface nsICancelable; +interface nsIChannel; +interface mozIDOMWindowProxy; + +/** + * This is an improved version of nsIPromptService that is less prescriptive + * about the resulting user interface. + * + * @status INCOMPLETE do not freeze before fixing bug 228207 + */ +[scriptable, uuid(3775ad32-8326-422b-9ff3-87ef1d3f9f0e)] +interface nsIPromptService2 : nsIPromptService { + // NOTE: These functions differ from their nsIAuthPrompt counterparts by + // having additional checkbox parameters + // checkValue can be null meaning to show no checkbox + // checkboxLabel is a wstring so that it can be null from both JS and C++ in + // a convenient way + // + // See nsIAuthPrompt2 for documentation on the semantics of the other + // parameters. + boolean promptAuth(in mozIDOMWindowProxy aParent, + in nsIChannel aChannel, + in uint32_t level, + in nsIAuthInformation authInfo, + in wstring checkboxLabel, + inout boolean checkValue); + + nsICancelable asyncPromptAuth(in mozIDOMWindowProxy aParent, + in nsIChannel aChannel, + in nsIAuthPromptCallback aCallback, + in nsISupports aContext, + in uint32_t level, + in nsIAuthInformation authInfo, + in wstring checkboxLabel, + inout boolean checkValue); +}; + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsIPromptService.idl firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsIPromptService.idl --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsIPromptService.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsIPromptService.idl 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,346 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* 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" + +interface mozIDOMWindowProxy; + +/** + * This is the interface to the embeddable prompt service; the service that + * implements nsIPrompt. Its interface is designed to be just nsIPrompt, each + * method modified to take a parent window parameter. + * + * Accesskeys can be attached to buttons and checkboxes by inserting an & + * before the accesskey character in the checkbox message or button title. For + * a real &, use && instead. (A "button title" generally refers to the text + * label of a button.) + * + * One note: in all cases, the parent window parameter can be null. However, + * these windows are all intended to have parents. So when no parent is + * specified, the implementation should try hard to find a suitable foster + * parent. + * + * Implementations are free to choose how they present the various button + * types. For example, while prompts that give the user a choice between OK + * and Cancel are required to return a boolean value indicating whether or not + * the user accepted the prompt (pressed OK) or rejected the prompt (pressed + * Cancel), the implementation of this interface could very well speak the + * prompt to the user instead of rendering any visual user-interface. The + * standard button types are merely idioms used to convey the nature of the + * choice the user is to make. + * + * Because implementations of this interface may loosely interpret the various + * button types, it is advised that text messages passed to these prompts do + * not refer to the button types by name. For example, it is inadvisable to + * tell the user to "Press OK to proceed." Instead, such a prompt might be + * rewritten to ask the user: "Would you like to proceed?" + */ +[scriptable, uuid(404ebfa2-d8f4-4c94-8416-e65a55f9df5a)] +interface nsIPromptService : nsISupports +{ + /** + * Puts up an alert dialog with an OK button. + * + * @param aParent + * The parent window or null. + * @param aDialogTitle + * Text to appear in the title of the dialog. + * @param aText + * Text to appear in the body of the dialog. + */ + void alert(in mozIDOMWindowProxy aParent, + in wstring aDialogTitle, + in wstring aText); + + /** + * Puts up an alert dialog with an OK button and a labeled checkbox. + * + * @param aParent + * The parent window or null. + * @param aDialogTitle + * Text to appear in the title of the dialog. + * @param aText + * Text to appear in the body of the dialog. + * @param aCheckMsg + * Text to appear with the checkbox. + * @param aCheckState + * Contains the initial checked state of the checkbox when this method + * is called and the final checked state after this method returns. + */ + void alertCheck(in mozIDOMWindowProxy aParent, + in wstring aDialogTitle, + in wstring aText, + in wstring aCheckMsg, + inout boolean aCheckState); + + /** + * Puts up a dialog with OK and Cancel buttons. + * + * @param aParent + * The parent window or null. + * @param aDialogTitle + * Text to appear in the title of the dialog. + * @param aText + * Text to appear in the body of the dialog. + * + * @return true for OK, false for Cancel + */ + boolean confirm(in mozIDOMWindowProxy aParent, + in wstring aDialogTitle, + in wstring aText); + + /** + * Puts up a dialog with OK and Cancel buttons and a labeled checkbox. + * + * @param aParent + * The parent window or null. + * @param aDialogTitle + * Text to appear in the title of the dialog. + * @param aText + * Text to appear in the body of the dialog. + * @param aCheckMsg + * Text to appear with the checkbox. + * @param aCheckState + * Contains the initial checked state of the checkbox when this method + * is called and the final checked state after this method returns. + * + * @return true for OK, false for Cancel + */ + boolean confirmCheck(in mozIDOMWindowProxy aParent, + in wstring aDialogTitle, + in wstring aText, + in wstring aCheckMsg, + inout boolean aCheckState); + + /** + * Button Flags + * + * The following flags are combined to form the aButtonFlags parameter passed + * to confirmEx. See confirmEx for more information on how the flags may be + * combined. + */ + + /** + * Button Position Flags + */ + const unsigned long BUTTON_POS_0 = 1; + const unsigned long BUTTON_POS_1 = 1 << 8; + const unsigned long BUTTON_POS_2 = 1 << 16; + + /** + * Button Title Flags (used to set the labels of buttons in the prompt) + */ + const unsigned long BUTTON_TITLE_OK = 1; + const unsigned long BUTTON_TITLE_CANCEL = 2; + const unsigned long BUTTON_TITLE_YES = 3; + const unsigned long BUTTON_TITLE_NO = 4; + const unsigned long BUTTON_TITLE_SAVE = 5; + const unsigned long BUTTON_TITLE_DONT_SAVE = 6; + const unsigned long BUTTON_TITLE_REVERT = 7; + const unsigned long BUTTON_TITLE_IS_STRING = 127; + + /** + * Button Default Flags (used to select which button is the default one) + */ + const unsigned long BUTTON_POS_0_DEFAULT = 0; + const unsigned long BUTTON_POS_1_DEFAULT = 1 << 24; + const unsigned long BUTTON_POS_2_DEFAULT = 1 << 25; + + /** + * Causes the buttons to be initially disabled. They are enabled after a + * timeout expires. The implementation may interpret this loosely as the + * intent is to ensure that the user does not click through a security dialog + * too quickly. Strictly speaking, the implementation could choose to ignore + * this flag. + */ + const unsigned long BUTTON_DELAY_ENABLE = 1 << 26; + + /** + * Selects the standard set of OK/Cancel buttons. + */ + const unsigned long STD_OK_CANCEL_BUTTONS = (BUTTON_TITLE_OK * BUTTON_POS_0) + + (BUTTON_TITLE_CANCEL * BUTTON_POS_1); + + /** + * Selects the standard set of Yes/No buttons. + */ + const unsigned long STD_YES_NO_BUTTONS = (BUTTON_TITLE_YES * BUTTON_POS_0) + + (BUTTON_TITLE_NO * BUTTON_POS_1); + + + /** + * Puts up a dialog with up to 3 buttons and an optional, labeled checkbox. + * + * @param aParent + * The parent window or null. + * @param aDialogTitle + * Text to appear in the title of the dialog. + * @param aText + * Text to appear in the body of the dialog. + * @param aButtonFlags + * A combination of Button Flags. + * @param aButton0Title + * Used when button 0 uses TITLE_IS_STRING + * @param aButton1Title + * Used when button 1 uses TITLE_IS_STRING + * @param aButton2Title + * Used when button 2 uses TITLE_IS_STRING + * @param aCheckMsg + * Text to appear with the checkbox. Null if no checkbox. + * @param aCheckState + * Contains the initial checked state of the checkbox when this method + * is called and the final checked state after this method returns. + * + * @return index of the button pressed. + * + * Buttons are numbered 0 - 2. The implementation can decide whether the + * sequence goes from right to left or left to right. Button 0 is the + * default button unless one of the Button Default Flags is specified. + * + * A button may use a predefined title, specified by one of the Button Title + * Flags values. Each title value can be multiplied by a position value to + * assign the title to a particular button. If BUTTON_TITLE_IS_STRING is + * used for a button, the string parameter for that button will be used. If + * the value for a button position is zero, the button will not be shown. + * + * In general, aButtonFlags is constructed per the following example: + * + * aButtonFlags = (BUTTON_POS_0) * (BUTTON_TITLE_AAA) + + * (BUTTON_POS_1) * (BUTTON_TITLE_BBB) + + * BUTTON_POS_1_DEFAULT; + * + * where "AAA" and "BBB" correspond to one of the button titles. + */ + int32_t confirmEx(in mozIDOMWindowProxy aParent, + in wstring aDialogTitle, + in wstring aText, + in unsigned long aButtonFlags, + in wstring aButton0Title, + in wstring aButton1Title, + in wstring aButton2Title, + in wstring aCheckMsg, + inout boolean aCheckState); + + /** + * Puts up a dialog with an edit field and an optional, labeled checkbox. + * + * @param aParent + * The parent window or null. + * @param aDialogTitle + * Text to appear in the title of the dialog. + * @param aText + * Text to appear in the body of the dialog. + * @param aValue + * Contains the default value for the dialog field when this method + * is called (null value is ok). Upon return, if the user pressed + * OK, then this parameter contains a newly allocated string value. + * Otherwise, the parameter's value is unmodified. + * @param aCheckMsg + * Text to appear with the checkbox. If null, check box will not be shown. + * @param aCheckState + * Contains the initial checked state of the checkbox when this method + * is called and the final checked state after this method returns. + * + * @return true for OK, false for Cancel. + */ + boolean prompt(in mozIDOMWindowProxy aParent, + in wstring aDialogTitle, + in wstring aText, + inout wstring aValue, + in wstring aCheckMsg, + inout boolean aCheckState); + + /** + * Puts up a dialog with an edit field, a password field, and an optional, + * labeled checkbox. + * + * @param aParent + * The parent window or null. + * @param aDialogTitle + * Text to appear in the title of the dialog. + * @param aText + * Text to appear in the body of the dialog. + * @param aUsername + * Contains the default value for the username field when this method + * is called (null value is ok). Upon return, if the user pressed OK, + * then this parameter contains a newly allocated string value. + * Otherwise, the parameter's value is unmodified. + * @param aPassword + * Contains the default value for the password field when this method + * is called (null value is ok). Upon return, if the user pressed OK, + * then this parameter contains a newly allocated string value. + * Otherwise, the parameter's value is unmodified. + * @param aCheckMsg + * Text to appear with the checkbox. If null, check box will not be shown. + * @param aCheckState + * Contains the initial checked state of the checkbox when this method + * is called and the final checked state after this method returns. + * + * @return true for OK, false for Cancel. + */ + boolean promptUsernameAndPassword(in mozIDOMWindowProxy aParent, + in wstring aDialogTitle, + in wstring aText, + inout wstring aUsername, + inout wstring aPassword, + in wstring aCheckMsg, + inout boolean aCheckState); + + /** + * Puts up a dialog with a password field and an optional, labeled checkbox. + * + * @param aParent + * The parent window or null. + * @param aDialogTitle + * Text to appear in the title of the dialog. + * @param aText + * Text to appear in the body of the dialog. + * @param aPassword + * Contains the default value for the password field when this method + * is called (null value is ok). Upon return, if the user pressed OK, + * then this parameter contains a newly allocated string value. + * Otherwise, the parameter's value is unmodified. + * @param aCheckMsg + * Text to appear with the checkbox. If null, check box will not be shown. + * @param aCheckState + * Contains the initial checked state of the checkbox when this method + * is called and the final checked state after this method returns. + * + * @return true for OK, false for Cancel. + */ + boolean promptPassword(in mozIDOMWindowProxy aParent, + in wstring aDialogTitle, + in wstring aText, + inout wstring aPassword, + in wstring aCheckMsg, + inout boolean aCheckState); + + /** + * Puts up a dialog box which has a list box of strings from which the user + * may make a single selection. + * + * @param aParent + * The parent window or null. + * @param aDialogTitle + * Text to appear in the title of the dialog. + * @param aText + * Text to appear in the body of the dialog. + * @param aCount + * The length of the aSelectList array parameter. + * @param aSelectList + * The list of strings to display. + * @param aOutSelection + * Contains the index of the selected item in the list when this + * method returns true. + * + * @return true for OK, false for Cancel. + */ + boolean select(in mozIDOMWindowProxy aParent, + in wstring aDialogTitle, + in wstring aText, + in uint32_t aCount, + [array, size_is(aCount)] in wstring aSelectList, + out long aOutSelection); +}; diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsIWindowWatcher.idl firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsIWindowWatcher.idl --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsIWindowWatcher.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsIWindowWatcher.idl 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,167 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * 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" + +interface mozIDOMWindowProxy; +interface nsIObserver; +interface nsIPrompt; +interface nsIAuthPrompt; +interface nsISimpleEnumerator; +interface nsIWebBrowserChrome; +interface nsIWindowCreator; + + + +/** + * nsIWindowWatcher is the keeper of Gecko/DOM Windows. It maintains + * a list of open top-level windows, and allows some operations on them. + + * Usage notes: + + * This component has an |activeWindow| property. Clients may expect + * this property to be always current, so to properly integrate this component + * the application will need to keep it current by setting the property + * as the active window changes. + * This component should not keep a (XPCOM) reference to any windows; + * the implementation will claim no ownership. Windows must notify + * this component when they are created or destroyed, so only a weak + * reference is kept. Note that there is no interface for such notifications + * (not a public one, anyway). This is taken care of both in Mozilla and + * by common embedding code. Embedding clients need do nothing special + * about that requirement. + * This component must be initialized at application startup by calling + * setWindowCreator. + */ +[scriptable, uuid(641fe945-6902-4b3f-87c2-0daef32499b3)] +interface nsIWindowWatcher : nsISupports { + + /** Create a new window. It will automatically be added to our list + (via addWindow()). + @param aParent parent window, if any. Null if no parent. If it is + impossible to get to an nsIWebBrowserChrome from aParent, this + method will effectively act as if aParent were null. + @param aURL url to which to open the new window. Must already be + escaped, if applicable. can be null. + @param aName window name from JS window.open. can be null. If a window + with this name already exists, the openWindow call may just load + aUrl in it (if aUrl is not null) and return it. + @param aFeatures window features from JS window.open. can be null. + @param aArguments extra argument(s) to the new window, to be attached + as the |arguments| property. An nsIArray will be + unwound into multiple arguments (but not recursively!). + can be null. + @return the new window + + @note This method may examine the JS context stack for purposes of + determining the security context to use for the search for a given + window named aName. + @note This method should try to set the default charset for the new + window to the default charset of aParent. This is not guaranteed, + however. + @note This method may dispatch a "toplevel-window-ready" notification + via nsIObserverService if the window did not already exist. + */ + mozIDOMWindowProxy openWindow(in mozIDOMWindowProxy aParent, in string aUrl, + in string aName, in string aFeatures, + in nsISupports aArguments); + + /** Clients of this service can register themselves to be notified + when a window is opened or closed (added to or removed from this + service). This method adds an aObserver to the list of objects + to be notified. + @param aObserver the object to be notified when windows are + opened or closed. Its Observe method will be + called with the following parameters: + + aObserver::Observe interprets its parameters so: + aSubject the window being opened or closed, sent as an nsISupports + which can be QIed to an nsIDOMWindow. + aTopic a wstring, either "domwindowopened" or "domwindowclosed". + someData not used. + */ + void registerNotification(in nsIObserver aObserver); + + /** Clients of this service can register themselves to be notified + when a window is opened or closed (added to or removed from this + service). This method removes an aObserver from the list of objects + to be notified. + @param aObserver the observer to be removed. + */ + void unregisterNotification(in nsIObserver aObserver); + + /** Get an iterator for currently open windows in the order they were opened, + guaranteeing that each will be visited exactly once. + @return an enumerator which will itself return nsISupports objects which + can be QIed to an nsIDOMWindow + */ + + nsISimpleEnumerator getWindowEnumerator(); + + /** Return a newly created nsIPrompt implementation. + @param aParent the parent window used for posing alerts. can be null. + @return a new nsIPrompt object + */ + + nsIPrompt getNewPrompter(in mozIDOMWindowProxy aParent); + + /** Return a newly created nsIAuthPrompt implementation. + @param aParent the parent window used for posing alerts. can be null. + @return a new nsIAuthPrompt object + */ + + nsIAuthPrompt getNewAuthPrompter(in mozIDOMWindowProxy aParent); + + /** Set the window creator callback. It must be filled in by the app. + openWindow will use it to create new windows. + @param creator the callback. if null, the callback will be cleared + and window creation capabilities lost. + */ + void setWindowCreator(in nsIWindowCreator creator); + + /** Returns true if a window creator callback has been set, false otherwise. + */ + boolean hasWindowCreator(); + + + /** Retrieve the chrome window mapped to the given DOM window. Window + Watcher keeps a list of all top-level DOM windows currently open, + along with their corresponding chrome interfaces. Since DOM Windows + lack a (public) means of retrieving their corresponding chrome, + this method will do that. + @param aWindow the DOM window whose chrome window the caller needs + @return the corresponding chrome window + */ + nsIWebBrowserChrome getChromeForWindow(in mozIDOMWindowProxy aWindow); + + /** + Retrieve an existing window (or frame). + @param aTargetName the window name + @param aCurrentWindow a starting point in the window hierarchy to + begin the search. If null, each toplevel window + will be searched. + + Note: This method will search all open windows for any window or + frame with the given window name. Make sure you understand the + security implications of this before using this method! + */ + mozIDOMWindowProxy getWindowByName(in AString aTargetName, + in mozIDOMWindowProxy aCurrentWindow); + + /** The Watcher serves as a global storage facility for the current active + (frontmost non-floating-palette-type) window, storing and returning + it on demand. Users must keep this attribute current, including after + the topmost window is closed. This attribute obviously can return null + if no windows are open, but should otherwise always return a valid + window. + */ + attribute mozIDOMWindowProxy activeWindow; + +}; + +%{C++ +#define NS_WINDOWWATCHER_CONTRACTID "@mozilla.org/embedcomp/window-watcher;1" +%} diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsPIPromptService.idl firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsPIPromptService.idl --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsPIPromptService.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsPIPromptService.idl 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,31 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* 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/. */ + +/* The general dialog posing function within nsPromptService, for + private consumption, only. */ + +#include "nsISupports.idl" + +interface nsIDOMWindow; +interface nsIDialogParamBlock; + +[uuid(C60A1955-6CB3-4827-8EF8-4F5C668AF0B3)] +interface nsPIPromptService : nsISupports +{ +%{C++ + // eOpeningSound is obsolete but we need to support it for the compatibility. + // The implementers should use eSoundEventId instead. + enum {eMsg=0, eCheckboxMsg=1, eIconClass=2, eTitleMessage=3, eEditfield1Msg=4, + eEditfield2Msg=5, eEditfield1Value=6, eEditfield2Value=7, + eButton0Text=8, eButton1Text=9, eButton2Text=10, eButton3Text=11, + eDialogTitle=12, eOpeningSound=13}; + enum {eButtonPressed=0, eCheckboxState=1, eNumberButtons=2, + eNumberEditfields=3, eEditField1Password=4, eDefaultButton=5, + eDelayButtonEnable=6, eSoundEventId=7}; +%} + + void doDialog(in nsIDOMWindow aParent, in nsIDialogParamBlock aParamBlock, in string aChromeURL); +}; + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsPIWindowWatcher.idl firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsPIWindowWatcher.idl --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsPIWindowWatcher.idl 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsPIWindowWatcher.idl 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,146 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/. */ + +/* Private "control" methods on the Window Watcher. These are annoying + bookkeeping methods, not part of the public (embedding) interface. +*/ + +#include "nsISupports.idl" + +interface mozIDOMWindowProxy; +interface nsIDOMWindow; +interface nsISimpleEnumerator; +interface nsIWebBrowserChrome; +interface nsIDocShellTreeItem; +interface nsIArray; +interface nsITabParent; +interface nsIDocShellLoadInfo; + +[uuid(d162f9c4-19d5-4723-931f-f1e51bfa9f68)] + +interface nsPIWindowWatcher : nsISupports +{ + /** A window has been created. Add it to our list. + @param aWindow the window to add + @param aChrome the corresponding chrome window. The DOM window + and chrome will be mapped together, and the corresponding + chrome can be retrieved using the (not private) + method getChromeForWindow. If null, any extant mapping + will be cleared. + */ + void addWindow(in mozIDOMWindowProxy aWindow, + in nsIWebBrowserChrome aChrome); + + /** A window has been closed. Remove it from our list. + @param aWindow the window to remove + */ + void removeWindow(in mozIDOMWindowProxy aWindow); + + /** Like the public interface's open(), but can handle openDialog-style + arguments and calls which shouldn't result in us navigating the window. + + @param aParent parent window, if any. Null if no parent. If it is + impossible to get to an nsIWebBrowserChrome from aParent, this + method will effectively act as if aParent were null. + @param aURL url to which to open the new window. Must already be + escaped, if applicable. can be null. + @param aName window name from JS window.open. can be null. If a window + with this name already exists, the openWindow call may just load + aUrl in it (if aUrl is not null) and return it. + @param aFeatures window features from JS window.open. can be null. + @param aCalledFromScript true if we were called from script. + @param aDialog use dialog defaults (see nsIDOMWindow::openDialog) + @param aNavigate true if we should navigate the new window to the + specified URL. + @param aArgs Window argument + @param aIsPopupSpam true if the window is a popup spam window; used for + popup blocker internals. + @param aForceNoOpener If true, force noopener behavior. This means not + looking for existing windows with the given name, + not setting an opener on the newly opened window, + and returning null from this method. + @param aLoadInfo if aNavigate is true, this allows the caller to pass in + an nsIDocShellLoadInfo to use for the navigation. + Callers can pass in null if they want the windowwatcher + to just construct a loadinfo itself. If aNavigate is + false, this argument is ignored. + + @return the new window + + @note This method may examine the JS context stack for purposes of + determining the security context to use for the search for a given + window named aName. + @note This method should try to set the default charset for the new + window to the default charset of the document in the calling window + (which is determined based on the JS stack and the value of + aParent). This is not guaranteed, however. + */ + mozIDOMWindowProxy openWindow2(in mozIDOMWindowProxy aParent, in string aUrl, + in string aName, in string aFeatures, + in boolean aCalledFromScript, + in boolean aDialog, + in boolean aNavigate, + in nsISupports aArgs, + in boolean aIsPopupSpam, + in boolean aForceNoOpener, + in nsIDocShellLoadInfo aLoadInfo); + + /** + * Opens a new window using the most recent non-private browser + * window as its parent. + * + * @return the nsITabParent of the initial browser for the newly opened + * window. + */ + nsITabParent openWindowWithoutParent(); + + /** + * Opens a new window so that the window that aOpeningTab belongs to + * is set as the parent window. The newly opened window will also + * inherit load context information from aOpeningTab. + * + * @param aOpeningTab + * The nsITabParent that is requesting the new window be opened. + * @param aFeatures + * Window features if called with window.open or similar. + * @param aCalledFromJS + * True if called via window.open or similar. + * @param aOpenerFullZoom + * The current zoom multiplier for the opener tab. This is then + * applied to the newly opened window. + * + * @return the nsITabParent of the initial browser for the newly opened + * window. + */ + nsITabParent openWindowWithTabParent(in nsITabParent aOpeningTab, + in ACString aFeatures, + in boolean aCalledFromJS, + in float aOpenerFullZoom); + + /** + * Find a named docshell tree item amongst all windows registered + * with the window watcher. This may be a subframe in some window, + * for example. + * + * @param aName the name of the window. Must not be null. + * @param aRequestor the tree item immediately making the request. + * We should make sure to not recurse down into its findItemWithName + * method. + * @param aOriginalRequestor the original treeitem that made the request. + * Used for security checks. + * @return the tree item with aName as the name, or null if there + * isn't one. "Special" names, like _self, _top, etc, will be + * treated specially only if aRequestor is null; in that case they + * will be resolved relative to the first window the windowwatcher + * knows about. + * @see findItemWithName methods on nsIDocShellTreeItem and + * nsIDocShellTreeOwner + */ + nsIDocShellTreeItem findItemWithName(in AString aName, + in nsIDocShellTreeItem aRequestor, + in nsIDocShellTreeItem aOriginalRequestor); +}; + diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsPromptUtils.h firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsPromptUtils.h --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsPromptUtils.h 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsPromptUtils.h 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,141 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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/. */ + +#ifndef NSPROMPTUTILS_H_ +#define NSPROMPTUTILS_H_ + +#include "nsIHttpChannel.h" + +/** + * @file + * This file defines some helper functions that simplify interaction + * with authentication prompts. + */ + +/** + * Given a username (possibly in DOMAIN\user form) and password, parses the + * domain out of the username if necessary and sets domain, username and + * password on the auth information object. + */ +inline void +NS_SetAuthInfo(nsIAuthInformation* aAuthInfo, const nsString& aUser, + const nsString& aPassword) +{ + uint32_t flags; + aAuthInfo->GetFlags(&flags); + if (flags & nsIAuthInformation::NEED_DOMAIN) { + // Domain is separated from username by a backslash + int32_t idx = aUser.FindChar(char16_t('\\')); + if (idx == kNotFound) { + aAuthInfo->SetUsername(aUser); + } else { + aAuthInfo->SetDomain(Substring(aUser, 0, idx)); + aAuthInfo->SetUsername(Substring(aUser, idx + 1)); + } + } else { + aAuthInfo->SetUsername(aUser); + } + aAuthInfo->SetPassword(aPassword); +} + +/** + * Gets the host and port from a channel and authentication info. This is the + * "logical" host and port for this authentication, i.e. for a proxy + * authentication it refers to the proxy, while for a host authentication it + * is the actual host. + * + * @param machineProcessing + * When this parameter is true, the host will be returned in ASCII + * (instead of UTF-8; this is relevant when IDN is used). In addition, + * the port will be returned as the real port even when it was not + * explicitly specified (when false, the port will be returned as -1 in + * this case) + */ +inline void +NS_GetAuthHostPort(nsIChannel* aChannel, nsIAuthInformation* aAuthInfo, + bool aMachineProcessing, nsCString& aHost, int32_t* aPort) +{ + nsCOMPtr uri; + nsresult rv = aChannel->GetURI(getter_AddRefs(uri)); + if (NS_FAILED(rv)) { + return; + } + + // Have to distinguish proxy auth and host auth here... + uint32_t flags; + aAuthInfo->GetFlags(&flags); + if (flags & nsIAuthInformation::AUTH_PROXY) { + nsCOMPtr proxied(do_QueryInterface(aChannel)); + NS_ASSERTION(proxied, "proxy auth needs nsIProxiedChannel"); + + nsCOMPtr info; + proxied->GetProxyInfo(getter_AddRefs(info)); + NS_ASSERTION(info, "proxy auth needs nsIProxyInfo"); + + nsAutoCString idnhost; + info->GetHost(idnhost); + info->GetPort(aPort); + + if (aMachineProcessing) { + nsCOMPtr idnService = + do_GetService(NS_IDNSERVICE_CONTRACTID); + if (idnService) { + idnService->ConvertUTF8toACE(idnhost, aHost); + } else { + // Not much we can do here... + aHost = idnhost; + } + } else { + aHost = idnhost; + } + } else { + if (aMachineProcessing) { + uri->GetAsciiHost(aHost); + *aPort = NS_GetRealPort(uri); + } else { + uri->GetHost(aHost); + uri->GetPort(aPort); + } + } +} + +/** + * Creates the key for looking up passwords in the password manager. This + * function uses the same format that Gecko functions have always used, thus + * ensuring backwards compatibility. + */ +inline void +NS_GetAuthKey(nsIChannel* aChannel, nsIAuthInformation* aAuthInfo, + nsCString& aKey) +{ + // HTTP does this differently from other protocols + nsCOMPtr http(do_QueryInterface(aChannel)); + if (!http) { + nsCOMPtr uri; + aChannel->GetURI(getter_AddRefs(uri)); + uri->GetPrePath(aKey); + return; + } + + // NOTE: For backwards-compatibility reasons, this must be the ASCII host. + nsCString host; + int32_t port = -1; + + NS_GetAuthHostPort(aChannel, aAuthInfo, true, host, &port); + + nsAutoString realm; + aAuthInfo->GetRealm(realm); + + // Now assemble the key: host:port (realm) + aKey.Append(host); + aKey.Append(':'); + aKey.AppendInt(port); + aKey.AppendLiteral(" ("); + AppendUTF16toUTF8(realm, aKey); + aKey.Append(')'); +} + +#endif diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsWindowWatcher.cpp firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsWindowWatcher.cpp --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/components/windowwatcher/nsWindowWatcher.cpp 1970-01-01 00:00:00.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/components/windowwatcher/nsWindowWatcher.cpp 2017-01-16 01:42:55.000000000 +0000 @@ -0,0 +1,2584 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* 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/. */ + +//#define USEWEAKREFS // (haven't quite figured that out yet) + +#include "nsWindowWatcher.h" +#include "nsAutoWindowStateHelper.h" + +#include "nsCRT.h" +#include "nsNetUtil.h" +#include "nsIAuthPrompt.h" +#include "nsIAuthPrompt2.h" +#include "nsISimpleEnumerator.h" +#include "nsIInterfaceRequestorUtils.h" +#include "nsJSUtils.h" +#include "plstr.h" + +#include "nsDocShell.h" +#include "nsGlobalWindow.h" +#include "nsIBaseWindow.h" +#include "nsIBrowserDOMWindow.h" +#include "nsIDocShell.h" +#include "nsIDocShellLoadInfo.h" +#include "nsIDocShellTreeItem.h" +#include "nsIDocShellTreeOwner.h" +#include "nsIDocumentLoader.h" +#include "nsIDocument.h" +#include "nsIDOMDocument.h" +#include "nsIDOMWindow.h" +#include "nsIDOMChromeWindow.h" +#include "nsIDOMModalContentWindow.h" +#include "nsIPrompt.h" +#include "nsIScriptObjectPrincipal.h" +#include "nsIScreen.h" +#include "nsIScreenManager.h" +#include "nsIScriptContext.h" +#include "nsIObserverService.h" +#include "nsIScriptSecurityManager.h" +#include "nsXPCOM.h" +#include "nsIURI.h" +#include "nsIWebBrowser.h" +#include "nsIWebBrowserChrome.h" +#include "nsIWebNavigation.h" +#include "nsIWindowCreator.h" +#include "nsIWindowCreator2.h" +#include "nsIXPConnect.h" +#include "nsIXULRuntime.h" +#include "nsPIDOMWindow.h" +#include "nsIContentViewer.h" +#include "nsIWindowProvider.h" +#include "nsIMutableArray.h" +#include "nsIDOMStorageManager.h" +#include "nsIWidget.h" +#include "nsFocusManager.h" +#include "nsIPresShell.h" +#include "nsPresContext.h" +#include "nsContentUtils.h" +#include "nsIPrefBranch.h" +#include "nsIPrefService.h" +#include "nsSandboxFlags.h" +#include "mozilla/Preferences.h" +#include "mozilla/dom/Storage.h" +#include "mozilla/dom/ScriptSettings.h" +#include "mozilla/dom/TabParent.h" +#include "mozilla/dom/DocGroup.h" +#include "mozilla/dom/TabGroup.h" +#include "nsIXULWindow.h" +#include "nsIXULBrowserWindow.h" +#include "nsGlobalWindow.h" + +#ifdef USEWEAKREFS +#include "nsIWeakReference.h" +#endif + +using namespace mozilla; +using namespace mozilla::dom; + +/**************************************************************** + ******************** nsWatcherWindowEntry ********************** + ****************************************************************/ + +class nsWindowWatcher; + +struct nsWatcherWindowEntry +{ + + nsWatcherWindowEntry(mozIDOMWindowProxy* aWindow, nsIWebBrowserChrome* aChrome) + : mChrome(nullptr) + { +#ifdef USEWEAKREFS + mWindow = do_GetWeakReference(aWindow); +#else + mWindow = aWindow; +#endif + nsCOMPtr supportsweak(do_QueryInterface(aChrome)); + if (supportsweak) { + supportsweak->GetWeakReference(getter_AddRefs(mChromeWeak)); + } else { + mChrome = aChrome; + mChromeWeak = nullptr; + } + ReferenceSelf(); + } + ~nsWatcherWindowEntry() {} + + void InsertAfter(nsWatcherWindowEntry* aOlder); + void Unlink(); + void ReferenceSelf(); + +#ifdef USEWEAKREFS + nsCOMPtr mWindow; +#else // still not an owning ref + mozIDOMWindowProxy* mWindow; +#endif + nsIWebBrowserChrome* mChrome; + nsWeakPtr mChromeWeak; + // each struct is in a circular, doubly-linked list + nsWatcherWindowEntry* mYounger; // next younger in sequence + nsWatcherWindowEntry* mOlder; +}; + +void +nsWatcherWindowEntry::InsertAfter(nsWatcherWindowEntry* aOlder) +{ + if (aOlder) { + mOlder = aOlder; + mYounger = aOlder->mYounger; + mOlder->mYounger = this; + if (mOlder->mOlder == mOlder) { + mOlder->mOlder = this; + } + mYounger->mOlder = this; + if (mYounger->mYounger == mYounger) { + mYounger->mYounger = this; + } + } +} + +void +nsWatcherWindowEntry::Unlink() +{ + mOlder->mYounger = mYounger; + mYounger->mOlder = mOlder; + ReferenceSelf(); +} + +void +nsWatcherWindowEntry::ReferenceSelf() +{ + + mYounger = this; + mOlder = this; +} + +/**************************************************************** + ****************** nsWatcherWindowEnumerator ******************* + ****************************************************************/ + +class nsWatcherWindowEnumerator : public nsISimpleEnumerator +{ + +public: + explicit nsWatcherWindowEnumerator(nsWindowWatcher* aWatcher); + NS_IMETHOD HasMoreElements(bool* aResult) override; + NS_IMETHOD GetNext(nsISupports** aResult) override; + + NS_DECL_ISUPPORTS + +protected: + virtual ~nsWatcherWindowEnumerator(); + +private: + friend class nsWindowWatcher; + + nsWatcherWindowEntry* FindNext(); + void WindowRemoved(nsWatcherWindowEntry* aInfo); + + nsWindowWatcher* mWindowWatcher; + nsWatcherWindowEntry* mCurrentPosition; +}; + +NS_IMPL_ADDREF(nsWatcherWindowEnumerator) +NS_IMPL_RELEASE(nsWatcherWindowEnumerator) +NS_IMPL_QUERY_INTERFACE(nsWatcherWindowEnumerator, nsISimpleEnumerator) + +nsWatcherWindowEnumerator::nsWatcherWindowEnumerator(nsWindowWatcher* aWatcher) + : mWindowWatcher(aWatcher) + , mCurrentPosition(aWatcher->mOldestWindow) +{ + mWindowWatcher->AddEnumerator(this); + mWindowWatcher->AddRef(); +} + +nsWatcherWindowEnumerator::~nsWatcherWindowEnumerator() +{ + mWindowWatcher->RemoveEnumerator(this); + mWindowWatcher->Release(); +} + +NS_IMETHODIMP +nsWatcherWindowEnumerator::HasMoreElements(bool* aResult) +{ + if (!aResult) { + return NS_ERROR_INVALID_ARG; + } + + *aResult = !!mCurrentPosition; + return NS_OK; +} + +NS_IMETHODIMP +nsWatcherWindowEnumerator::GetNext(nsISupports** aResult) +{ + if (!aResult) { + return NS_ERROR_INVALID_ARG; + } + + *aResult = nullptr; + +#ifdef USEWEAKREFS + while (mCurrentPosition) { + CallQueryReferent(mCurrentPosition->mWindow, aResult); + if (*aResult) { + mCurrentPosition = FindNext(); + break; + } else { // window is gone! + mWindowWatcher->RemoveWindow(mCurrentPosition); + } + } + NS_IF_ADDREF(*aResult); +#else + if (mCurrentPosition) { + CallQueryInterface(mCurrentPosition->mWindow, aResult); + mCurrentPosition = FindNext(); + } +#endif + return NS_OK; +} + +nsWatcherWindowEntry* +nsWatcherWindowEnumerator::FindNext() +{ + nsWatcherWindowEntry* info; + + if (!mCurrentPosition) { + return 0; + } + + info = mCurrentPosition->mYounger; + return info == mWindowWatcher->mOldestWindow ? 0 : info; +} + +// if a window is being removed adjust the iterator's current position +void +nsWatcherWindowEnumerator::WindowRemoved(nsWatcherWindowEntry* aInfo) +{ + + if (mCurrentPosition == aInfo) { + mCurrentPosition = + mCurrentPosition != aInfo->mYounger ? aInfo->mYounger : 0; + } +} + +/**************************************************************** + *********************** nsWindowWatcher ************************ + ****************************************************************/ + +NS_IMPL_ADDREF(nsWindowWatcher) +NS_IMPL_RELEASE(nsWindowWatcher) +NS_IMPL_QUERY_INTERFACE(nsWindowWatcher, + nsIWindowWatcher, + nsIPromptFactory, + nsPIWindowWatcher) + +nsWindowWatcher::nsWindowWatcher() + : mEnumeratorList() + , mOldestWindow(0) + , mListLock("nsWindowWatcher.mListLock") +{ +} + +nsWindowWatcher::~nsWindowWatcher() +{ + // delete data + while (mOldestWindow) { + RemoveWindow(mOldestWindow); + } +} + +nsresult +nsWindowWatcher::Init() +{ + return NS_OK; +} + +/** + * Convert aArguments into either an nsIArray or nullptr. + * + * - If aArguments is nullptr, return nullptr. + * - If aArguments is an nsArray, return nullptr if it's empty, or otherwise + * return the array. + * - If aArguments is an nsIArray, return nullptr if it's empty, or + * otherwise just return the array. + * - Otherwise, return an nsIArray with one element: aArguments. + */ +static already_AddRefed +ConvertArgsToArray(nsISupports* aArguments) +{ + if (!aArguments) { + return nullptr; + } + + nsCOMPtr array = do_QueryInterface(aArguments); + if (array) { + uint32_t argc = 0; + array->GetLength(&argc); + if (argc == 0) { + return nullptr; + } + + return array.forget(); + } + + nsCOMPtr singletonArray = + do_CreateInstance(NS_ARRAY_CONTRACTID); + NS_ENSURE_TRUE(singletonArray, nullptr); + + nsresult rv = singletonArray->AppendElement(aArguments, /* aWeak = */ false); + NS_ENSURE_SUCCESS(rv, nullptr); + + return singletonArray.forget(); +} + +NS_IMETHODIMP +nsWindowWatcher::OpenWindow(mozIDOMWindowProxy* aParent, + const char* aUrl, + const char* aName, + const char* aFeatures, + nsISupports* aArguments, + mozIDOMWindowProxy** aResult) +{ + nsCOMPtr argv = ConvertArgsToArray(aArguments); + + uint32_t argc = 0; + if (argv) { + argv->GetLength(&argc); + } + bool dialog = (argc != 0); + + return OpenWindowInternal(aParent, aUrl, aName, aFeatures, + /* calledFromJS = */ false, dialog, + /* navigate = */ true, argv, + /* aIsPopupSpam = */ false, + /* aForceNoOpener = */ false, + /* aLoadInfo = */ nullptr, + aResult); +} + +struct SizeSpec +{ + SizeSpec() + : mLeft(0) + , mTop(0) + , mOuterWidth(0) + , mOuterHeight(0) + , mInnerWidth(0) + , mInnerHeight(0) + , mLeftSpecified(false) + , mTopSpecified(false) + , mOuterWidthSpecified(false) + , mOuterHeightSpecified(false) + , mInnerWidthSpecified(false) + , mInnerHeightSpecified(false) + , mUseDefaultWidth(false) + , mUseDefaultHeight(false) + { + } + + int32_t mLeft; + int32_t mTop; + int32_t mOuterWidth; // Total window width + int32_t mOuterHeight; // Total window height + int32_t mInnerWidth; // Content area width + int32_t mInnerHeight; // Content area height + + bool mLeftSpecified; + bool mTopSpecified; + bool mOuterWidthSpecified; + bool mOuterHeightSpecified; + bool mInnerWidthSpecified; + bool mInnerHeightSpecified; + + // If these booleans are true, don't look at the corresponding width values + // even if they're specified -- they'll be bogus + bool mUseDefaultWidth; + bool mUseDefaultHeight; + + bool PositionSpecified() const + { + return mLeftSpecified || mTopSpecified; + } + + bool SizeSpecified() const + { + return mOuterWidthSpecified || mOuterHeightSpecified || + mInnerWidthSpecified || mInnerHeightSpecified; + } +}; + +NS_IMETHODIMP +nsWindowWatcher::OpenWindow2(mozIDOMWindowProxy* aParent, + const char* aUrl, + const char* aName, + const char* aFeatures, + bool aCalledFromScript, + bool aDialog, + bool aNavigate, + nsISupports* aArguments, + bool aIsPopupSpam, + bool aForceNoOpener, + nsIDocShellLoadInfo* aLoadInfo, + mozIDOMWindowProxy** aResult) +{ + nsCOMPtr argv = ConvertArgsToArray(aArguments); + + uint32_t argc = 0; + if (argv) { + argv->GetLength(&argc); + } + + // This is extremely messed up, but this behavior is necessary because + // callers lie about whether they're a dialog window and whether they're + // called from script. Fixing this is bug 779939. + bool dialog = aDialog; + if (!aCalledFromScript) { + dialog = argc > 0; + } + + return OpenWindowInternal(aParent, aUrl, aName, aFeatures, + aCalledFromScript, dialog, + aNavigate, argv, aIsPopupSpam, + aForceNoOpener, aLoadInfo, aResult); +} + +// This static function checks if the aDocShell uses an UserContextId equal to +// the userContextId of subjectPrincipal, if not null. +static bool +CheckUserContextCompatibility(nsIDocShell* aDocShell) +{ + MOZ_ASSERT(aDocShell); + + uint32_t userContextId = + static_cast(aDocShell)->GetOriginAttributes().mUserContextId; + + nsCOMPtr subjectPrincipal = + nsContentUtils::GetCurrentJSContext() + ? nsContentUtils::SubjectPrincipal() : nullptr; + + // If we don't have a valid principal, probably we are in e10s mode, parent + // side. + if (!subjectPrincipal) { + return true; + } + + // DocShell can have UsercontextID set but loading a document with system + // principal. In this case, we consider everything ok. + if (nsContentUtils::IsSystemPrincipal(subjectPrincipal)) { + return true; + } + + return subjectPrincipal->GetUserContextId() == userContextId; +} + +NS_IMETHODIMP +nsWindowWatcher::OpenWindowWithoutParent(nsITabParent** aResult) +{ + return OpenWindowWithTabParent(nullptr, EmptyCString(), true, 1.0f, aResult); +} + +nsresult +nsWindowWatcher::CreateChromeWindow(const nsACString& aFeatures, + nsIWebBrowserChrome* aParentChrome, + uint32_t aChromeFlags, + nsITabParent* aOpeningTabParent, + mozIDOMWindowProxy* aOpener, + nsIWebBrowserChrome** aResult) +{ + nsCOMPtr windowCreator2(do_QueryInterface(mWindowCreator)); + if (NS_WARN_IF(!windowCreator2)) { + return NS_ERROR_UNEXPECTED; + } + + // B2G multi-screen support. mozDisplayId is returned from the + // "display-changed" event, it is also platform-dependent. +#ifdef MOZ_WIDGET_GONK + int retval = WinHasOption(aFeatures, "mozDisplayId", 0, nullptr); + windowCreator2->SetScreenId(retval); +#endif + + bool cancel = false; + nsCOMPtr newWindowChrome; + nsresult rv = + windowCreator2->CreateChromeWindow2(aParentChrome, aChromeFlags, + aOpeningTabParent, aOpener, &cancel, + getter_AddRefs(newWindowChrome)); + + if (NS_SUCCEEDED(rv) && cancel) { + newWindowChrome = nullptr; + return NS_ERROR_ABORT; + } + + newWindowChrome.forget(aResult); + return NS_OK; +} + +/** + * Disable persistence of size/position in popups (determined by + * determining whether the features parameter specifies width or height + * in any way). We consider any overriding of the window's size or position + * in the open call as disabling persistence of those attributes. + * Popup windows (which should not persist size or position) generally set + * the size. + * + * @param aFeatures + * The features string that was used to open the window. + * @param aTreeOwner + * The nsIDocShellTreeOwner of the newly opened window. If null, + * this function is a no-op. + */ +void +nsWindowWatcher::MaybeDisablePersistence(const nsACString& aFeatures, + nsIDocShellTreeOwner* aTreeOwner) +{ + if (!aTreeOwner) { + return; + } + + // At the moment, the strings "height=" or "width=" never happen + // outside a size specification, so we can do this the Q&D way. + if (PL_strcasestr(aFeatures.BeginReading(), "width=") || + PL_strcasestr(aFeatures.BeginReading(), "height=")) { + aTreeOwner->SetPersistence(false, false, false); + } +} + +NS_IMETHODIMP +nsWindowWatcher::OpenWindowWithTabParent(nsITabParent* aOpeningTabParent, + const nsACString& aFeatures, + bool aCalledFromJS, + float aOpenerFullZoom, + nsITabParent** aResult) +{ + MOZ_ASSERT(XRE_IsParentProcess()); + MOZ_ASSERT(mWindowCreator); + + if (!nsContentUtils::IsSafeToRunScript()) { + nsContentUtils::WarnScriptWasIgnored(nullptr); + return NS_ERROR_FAILURE; + } + + if (NS_WARN_IF(!mWindowCreator)) { + return NS_ERROR_UNEXPECTED; + } + + bool isPrivateBrowsingWindow = + Preferences::GetBool("browser.privatebrowsing.autostart"); + + nsCOMPtr parentWindowOuter; + if (aOpeningTabParent) { + // We need to examine the window that aOpeningTabParent belongs to in + // order to inform us of what kind of window we're going to open. + TabParent* openingTab = TabParent::GetFrom(aOpeningTabParent); + parentWindowOuter = openingTab->GetParentWindowOuter(); + + // Propagate the privacy status of the parent window, if + // available, to the child. + if (!isPrivateBrowsingWindow) { + nsCOMPtr parentContext = openingTab->GetLoadContext(); + if (parentContext) { + isPrivateBrowsingWindow = parentContext->UsePrivateBrowsing(); + } + } + } + + if (!parentWindowOuter) { + // We couldn't find a browser window for the opener, so either we + // never were passed aOpeningTabParent, the window is closed, + // or it's in the process of closing. Either way, we'll use + // the most recently opened browser window instead. + parentWindowOuter = nsContentUtils::GetMostRecentNonPBWindow(); + } + + if (NS_WARN_IF(!parentWindowOuter)) { + return NS_ERROR_UNEXPECTED; + } + + nsCOMPtr parentTreeOwner; + GetWindowTreeOwner(parentWindowOuter, getter_AddRefs(parentTreeOwner)); + if (NS_WARN_IF(!parentTreeOwner)) { + return NS_ERROR_UNEXPECTED; + } + + nsCOMPtr windowCreator2(do_QueryInterface(mWindowCreator)); + if (NS_WARN_IF(!windowCreator2)) { + return NS_ERROR_UNEXPECTED; + } + + uint32_t chromeFlags = CalculateChromeFlagsForChild(aFeatures); + + // A content process has asked for a new window, which implies + // that the new window will need to be remote. + chromeFlags |= nsIWebBrowserChrome::CHROME_REMOTE_WINDOW; + + nsCOMPtr parentChrome(do_GetInterface(parentTreeOwner)); + nsCOMPtr newWindowChrome; + + CreateChromeWindow(aFeatures, parentChrome, chromeFlags, + aOpeningTabParent, nullptr, + getter_AddRefs(newWindowChrome)); + + if (NS_WARN_IF(!newWindowChrome)) { + return NS_ERROR_UNEXPECTED; + } + + nsCOMPtr chromeTreeItem = do_GetInterface(newWindowChrome); + if (NS_WARN_IF(!chromeTreeItem)) { + return NS_ERROR_UNEXPECTED; + } + + nsCOMPtr chromeTreeOwner; + chromeTreeItem->GetTreeOwner(getter_AddRefs(chromeTreeOwner)); + if (NS_WARN_IF(!chromeTreeOwner)) { + return NS_ERROR_UNEXPECTED; + } + + nsCOMPtr chromeContext = do_QueryInterface(chromeTreeItem); + if (NS_WARN_IF(!chromeContext)) { + return NS_ERROR_UNEXPECTED; + } + + chromeContext->SetPrivateBrowsing(isPrivateBrowsingWindow); + + // Tabs opened from a content process can only open new windows + // that will also run with out-of-process tabs. + chromeContext->SetRemoteTabs(true); + + MaybeDisablePersistence(aFeatures, chromeTreeOwner); + + SizeSpec sizeSpec; + CalcSizeSpec(aFeatures, sizeSpec); + SizeOpenedWindow(chromeTreeOwner, parentWindowOuter, false, sizeSpec, + Some(aOpenerFullZoom)); + + nsCOMPtr newTabParent; + chromeTreeOwner->GetPrimaryTabParent(getter_AddRefs(newTabParent)); + if (NS_WARN_IF(!newTabParent)) { + return NS_ERROR_UNEXPECTED; + } + + newTabParent.forget(aResult); + return NS_OK; +} + +nsresult +nsWindowWatcher::OpenWindowInternal(mozIDOMWindowProxy* aParent, + const char* aUrl, + const char* aName, + const char* aFeatures, + bool aCalledFromJS, + bool aDialog, + bool aNavigate, + nsIArray* aArgv, + bool aIsPopupSpam, + bool aForceNoOpener, + nsIDocShellLoadInfo* aLoadInfo, + mozIDOMWindowProxy** aResult) +{ + nsresult rv = NS_OK; + bool isNewToplevelWindow = false; + bool windowIsNew = false; + bool windowNeedsName = false; + bool windowIsModal = false; + bool uriToLoadIsChrome = false; + bool windowIsModalContentDialog = false; + + uint32_t chromeFlags; + nsAutoString name; // string version of aName + nsAutoCString features; // string version of aFeatures + nsCOMPtr uriToLoad; // from aUrl, if any + nsCOMPtr parentTreeOwner; // from the parent window, if any + nsCOMPtr newDocShellItem; // from the new window + + nsCOMPtr parent = + aParent ? nsPIDOMWindowOuter::From(aParent) : nullptr; + + NS_ENSURE_ARG_POINTER(aResult); + *aResult = 0; + + if (!nsContentUtils::IsSafeToRunScript()) { + nsContentUtils::WarnScriptWasIgnored(nullptr); + return NS_ERROR_FAILURE; + } + + GetWindowTreeOwner(parent, getter_AddRefs(parentTreeOwner)); + + // We expect TabParent to have provided us the absolute URI of the window + // we're to open, so there's no need to call URIfromURL (or more importantly, + // to check for a chrome URI, which cannot be opened from a remote tab). + if (aUrl) { + rv = URIfromURL(aUrl, aParent, getter_AddRefs(uriToLoad)); + if (NS_FAILED(rv)) { + return rv; + } + uriToLoad->SchemeIs("chrome", &uriToLoadIsChrome); + } + + bool nameSpecified = false; + if (aName) { + CopyUTF8toUTF16(aName, name); + nameSpecified = true; + } else { + name.SetIsVoid(true); + } + + if (aFeatures) { + features.Assign(aFeatures); + features.StripWhitespace(); + } else { + features.SetIsVoid(true); + } + + // try to find an extant window with the given name + nsCOMPtr foundWindow = + SafeGetWindowByName(name, aForceNoOpener, aParent); + GetWindowTreeItem(foundWindow, getter_AddRefs(newDocShellItem)); + + // Do sandbox checks here, instead of waiting until nsIDocShell::LoadURI. + // The state of the window can change before this call and if we are blocked + // because of sandboxing, we wouldn't want that to happen. + nsCOMPtr parentWindow = + aParent ? nsPIDOMWindowOuter::From(aParent) : nullptr; + nsCOMPtr parentDocShell; + if (parentWindow) { + parentDocShell = parentWindow->GetDocShell(); + if (parentDocShell) { + nsCOMPtr foundDocShell = do_QueryInterface(newDocShellItem); + if (parentDocShell->IsSandboxedFrom(foundDocShell)) { + return NS_ERROR_DOM_INVALID_ACCESS_ERR; + } + } + } + + // no extant window? make a new one. + + // If no parent, consider it chrome when running in the parent process. + bool hasChromeParent = XRE_IsContentProcess() ? false : true; + if (aParent) { + // Check if the parent document has chrome privileges. + nsIDocument* doc = parentWindow->GetDoc(); + hasChromeParent = doc && nsContentUtils::IsChromeDoc(doc); + } + + bool isCallerChrome = nsContentUtils::LegacyIsCallerChromeOrNativeCode(); + + // Make sure we calculate the chromeFlags *before* we push the + // callee context onto the context stack so that + // the calculation sees the actual caller when doing its + // security checks. + if (isCallerChrome && XRE_IsParentProcess()) { + chromeFlags = CalculateChromeFlagsForParent(aParent, features, + aDialog, uriToLoadIsChrome, + hasChromeParent, aCalledFromJS); + } else { + chromeFlags = CalculateChromeFlagsForChild(features); + + // Until ShowModalDialog is removed, it's still possible for content to + // request dialogs, but only in single-process mode. + if (aDialog) { + MOZ_ASSERT(XRE_IsParentProcess()); + chromeFlags |= nsIWebBrowserChrome::CHROME_OPENAS_DIALOG; + } + } + + // If we're not called through our JS version of the API, and we got + // our internal modal option, treat the window we're opening as a + // modal content window (and set the modal chrome flag). + if (!aCalledFromJS && aArgv && + WinHasOption(features, "-moz-internal-modal", 0, nullptr)) { + windowIsModalContentDialog = true; + + // CHROME_MODAL gets inherited by dependent windows, which affects various + // platform-specific window state (especially on OSX). So we need some way + // to determine that this window was actually opened by nsGlobalWindow:: + // ShowModalDialog(), and that somebody is actually going to be watching + // for return values and all that. + chromeFlags |= nsIWebBrowserChrome::CHROME_MODAL_CONTENT_WINDOW; + chromeFlags |= nsIWebBrowserChrome::CHROME_MODAL; + } + + SizeSpec sizeSpec; + CalcSizeSpec(features, sizeSpec); + + nsCOMPtr sm( + do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID)); + + + // XXXbz Why is an AutoJSAPI good enough here? Wouldn't AutoEntryScript (so + // we affect the entry global) make more sense? Or do we just want to affect + // GetSubjectPrincipal()? + dom::AutoJSAPI jsapiChromeGuard; + + bool windowTypeIsChrome = + chromeFlags & nsIWebBrowserChrome::CHROME_OPENAS_CHROME; + if (isCallerChrome && !hasChromeParent && !windowTypeIsChrome) { + // open() is called from chrome on a non-chrome window, initialize an + // AutoJSAPI with the callee to prevent the caller's privileges from leaking + // into code that runs while opening the new window. + // + // The reasoning for this is in bug 289204. Basically, chrome sometimes does + // someContentWindow.open(untrustedURL), and wants to be insulated from nasty + // javascript: URLs and such. But there are also cases where we create a + // window parented to a content window (such as a download dialog), usually + // directly with nsIWindowWatcher. In those cases, we want the principal of + // the initial about:blank document to be system, so that the subsequent XUL + // load can reuse the inner window and avoid blowing away expandos. As such, + // we decide whether to load with the principal of the caller or of the parent + // based on whether the docshell type is chrome or content. + + nsCOMPtr parentGlobalObject = do_QueryInterface(aParent); + if (!aParent) { + jsapiChromeGuard.Init(); + } else if (NS_WARN_IF(!jsapiChromeGuard.Init(parentGlobalObject))) { + return NS_ERROR_UNEXPECTED; + } + } + + uint32_t activeDocsSandboxFlags = 0; + if (!newDocShellItem) { + // We're going to either open up a new window ourselves or ask a + // nsIWindowProvider for one. In either case, we'll want to set the right + // name on it. + windowNeedsName = true; + + // If the parent trying to open a new window is sandboxed + // without 'allow-popups', this is not allowed and we fail here. + if (aParent) { + if (nsIDocument* doc = parentWindow->GetDoc()) { + // Save sandbox flags for copying to new browsing context (docShell). + activeDocsSandboxFlags = doc->GetSandboxFlags(); + if (activeDocsSandboxFlags & SANDBOXED_AUXILIARY_NAVIGATION) { + return NS_ERROR_DOM_INVALID_ACCESS_ERR; + } + } + } + + // Now check whether it's ok to ask a window provider for a window. Don't + // do it if we're opening a dialog or if our parent is a chrome window or + // if we're opening something that has modal, dialog, or chrome flags set. + nsCOMPtr chromeWin = do_QueryInterface(aParent); + if (!aDialog && !chromeWin && + !(chromeFlags & (nsIWebBrowserChrome::CHROME_MODAL | + nsIWebBrowserChrome::CHROME_OPENAS_DIALOG | + nsIWebBrowserChrome::CHROME_OPENAS_CHROME))) { + nsCOMPtr provider; + if (parentTreeOwner) { + provider = do_GetInterface(parentTreeOwner); + } else if (XRE_IsContentProcess()) { + // we're in a content process but we don't have a tabchild we can + // use. + provider = nsContentUtils::GetWindowProviderForContentProcess(); + } + + if (provider) { + nsCOMPtr newWindow; + rv = provider->ProvideWindow(aParent, chromeFlags, aCalledFromJS, + sizeSpec.PositionSpecified(), + sizeSpec.SizeSpecified(), + uriToLoad, name, features, aForceNoOpener, + &windowIsNew, getter_AddRefs(newWindow)); + + if (NS_SUCCEEDED(rv)) { + GetWindowTreeItem(newWindow, getter_AddRefs(newDocShellItem)); + if (windowIsNew && newDocShellItem) { + // Make sure to stop any loads happening in this window that the + // window provider might have started. Otherwise if our caller + // manipulates the window it just opened and then the load + // completes their stuff will get blown away. + nsCOMPtr webNav = + do_QueryInterface(newDocShellItem); + webNav->Stop(nsIWebNavigation::STOP_NETWORK); + } + + // If this is a new window, but it's incompatible with the current + // userContextId, we ignore it and we pretend that nothing has been + // returned by ProvideWindow. + if (!windowIsNew && newDocShellItem) { + nsCOMPtr docShell = do_QueryInterface(newDocShellItem); + if (!CheckUserContextCompatibility(docShell)) { + newWindow = nullptr; + newDocShellItem = nullptr; + windowIsNew = false; + } + } + + } else if (rv == NS_ERROR_ABORT) { + // NS_ERROR_ABORT means the window provider has flat-out rejected + // the open-window call and we should bail. Don't return an error + // here, because our caller may propagate that error, which might + // cause e.g. window.open to throw! Just return null for our out + // param. + return NS_OK; + } + } + } + } + + bool newWindowShouldBeModal = false; + bool parentIsModal = false; + if (!newDocShellItem) { + windowIsNew = true; + isNewToplevelWindow = true; + + nsCOMPtr parentChrome(do_GetInterface(parentTreeOwner)); + + // is the parent (if any) modal? if so, we must be, too. + bool weAreModal = (chromeFlags & nsIWebBrowserChrome::CHROME_MODAL) != 0; + newWindowShouldBeModal = weAreModal; + if (!weAreModal && parentChrome) { + parentChrome->IsWindowModal(&weAreModal); + parentIsModal = weAreModal; + } + + if (weAreModal) { + windowIsModal = true; + // in case we added this because weAreModal + chromeFlags |= nsIWebBrowserChrome::CHROME_MODAL | + nsIWebBrowserChrome::CHROME_DEPENDENT; + } + + // Make sure to not create modal windows if our parent is invisible and + // isn't a chrome window. Otherwise we can end up in a bizarre situation + // where we can't shut down because an invisible window is open. If + // someone tries to do this, throw. + if (!hasChromeParent && (chromeFlags & nsIWebBrowserChrome::CHROME_MODAL)) { + nsCOMPtr parentWindow(do_GetInterface(parentTreeOwner)); + nsCOMPtr parentWidget; + if (parentWindow) { + parentWindow->GetMainWidget(getter_AddRefs(parentWidget)); + } + // NOTE: the logic for this visibility check is duplicated in + // nsIDOMWindowUtils::isParentWindowMainWidgetVisible - if we change + // how a window is determined "visible" in this context then we should + // also adjust that attribute and/or any consumers of it... + if (parentWidget && !parentWidget->IsVisible()) { + return NS_ERROR_NOT_AVAILABLE; + } + } + + NS_ASSERTION(mWindowCreator, + "attempted to open a new window with no WindowCreator"); + rv = NS_ERROR_FAILURE; + if (mWindowCreator) { + nsCOMPtr newChrome; + + nsCOMPtr parentTopInnerWindow; + if (parentWindow) { + nsCOMPtr parentTopWindow = parentWindow->GetTop(); + if (parentTopWindow) { + parentTopInnerWindow = parentTopWindow->GetCurrentInnerWindow(); + } + } + + if (parentTopInnerWindow) { + parentTopInnerWindow->Suspend(); + } + + /* If the window creator is an nsIWindowCreator2, we can give it + some hints. The only hint at this time is whether the opening window + is in a situation that's likely to mean this is an unrequested + popup window we're creating. However we're not completely honest: + we clear that indicator if the opener is chrome, so that the + downstream consumer can treat the indicator to mean simply + that the new window is subject to popup control. */ + nsCOMPtr windowCreator2( + do_QueryInterface(mWindowCreator)); + if (windowCreator2) { + mozIDOMWindowProxy* openerWindow = aForceNoOpener ? nullptr : aParent; + rv = CreateChromeWindow(features, parentChrome, chromeFlags, + nullptr, openerWindow, getter_AddRefs(newChrome)); + + } else { + rv = mWindowCreator->CreateChromeWindow(parentChrome, chromeFlags, + getter_AddRefs(newChrome)); + } + + if (parentTopInnerWindow) { + parentTopInnerWindow->Resume(); + } + + if (newChrome) { + nsCOMPtr xulWin = do_GetInterface(newChrome); + if (xulWin) { + nsCOMPtr xulBrowserWin; + xulWin->GetXULBrowserWindow(getter_AddRefs(xulBrowserWin)); + if (xulBrowserWin) { + nsPIDOMWindowOuter* openerWindow = aForceNoOpener ? nullptr : parentWindow.get(); + xulBrowserWin->ForceInitialBrowserNonRemote(openerWindow); + } + } + /* It might be a chrome nsXULWindow, in which case it won't have + an nsIDOMWindow (primary content shell). But in that case, it'll + be able to hand over an nsIDocShellTreeItem directly. */ + nsCOMPtr newWindow(do_GetInterface(newChrome)); + if (newWindow) { + GetWindowTreeItem(newWindow, getter_AddRefs(newDocShellItem)); + } + if (!newDocShellItem) { + newDocShellItem = do_GetInterface(newChrome); + } + if (!newDocShellItem) { + rv = NS_ERROR_FAILURE; + } + } + } + } + + // better have a window to use by this point + if (!newDocShellItem) { + return rv; + } + + nsCOMPtr newDocShell(do_QueryInterface(newDocShellItem)); + NS_ENSURE_TRUE(newDocShell, NS_ERROR_UNEXPECTED); + + // If our parent is sandboxed, set it as the one permitted sandboxed navigator + // on the new window we're opening. + if (activeDocsSandboxFlags && parentWindow) { + newDocShell->SetOnePermittedSandboxedNavigator( + parentWindow->GetDocShell()); + } + + // Copy sandbox flags to the new window if activeDocsSandboxFlags says to do + // so. Note that it's only nonzero if the window is new, so clobbering + // sandbox flags on the window makes sense in that case. + if (activeDocsSandboxFlags & + SANDBOX_PROPAGATES_TO_AUXILIARY_BROWSING_CONTEXTS) { + newDocShell->SetSandboxFlags(activeDocsSandboxFlags); + } + + rv = ReadyOpenedDocShellItem(newDocShellItem, parentWindow, windowIsNew, + aForceNoOpener, aResult); + if (NS_FAILED(rv)) { + return rv; + } + + if (isNewToplevelWindow) { + nsCOMPtr newTreeOwner; + newDocShellItem->GetTreeOwner(getter_AddRefs(newTreeOwner)); + MaybeDisablePersistence(features, newTreeOwner); + } + + if ((aDialog || windowIsModalContentDialog) && aArgv) { + // Set the args on the new window. + nsCOMPtr piwin(do_QueryInterface(*aResult)); + NS_ENSURE_TRUE(piwin, NS_ERROR_UNEXPECTED); + + rv = piwin->SetArguments(aArgv); + NS_ENSURE_SUCCESS(rv, rv); + } + + /* allow a window that we found by name to keep its name (important for cases + like _self where the given name is different (and invalid)). Also, _blank + is not a window name. */ + if (windowNeedsName) { + if (nameSpecified && !name.LowerCaseEqualsLiteral("_blank")) { + newDocShellItem->SetName(name); + } else { + newDocShellItem->SetName(EmptyString()); + } + } + + // Now we have to set the right opener principal on the new window. Note + // that we have to do this _before_ starting any URI loads, thanks to the + // sync nature of javascript: loads. + // + // Note: The check for the current JSContext isn't necessarily sensical. + // It's just designed to preserve old semantics during a mass-conversion + // patch. + nsCOMPtr subjectPrincipal = + nsContentUtils::GetCurrentJSContext() ? nsContentUtils::SubjectPrincipal() : + nullptr; + + bool isPrivateBrowsingWindow = false; + + if (windowIsNew) { + auto* docShell = static_cast(newDocShell.get()); + + // If this is not a chrome docShell, we apply originAttributes from the + // subjectPrincipal unless if it's an expanded or system principal. + if (subjectPrincipal && + !nsContentUtils::IsSystemOrExpandedPrincipal(subjectPrincipal) && + docShell->ItemType() != nsIDocShellTreeItem::typeChrome) { + OriginAttributes attrs; + attrs.Inherit(subjectPrincipal->OriginAttributesRef()); + isPrivateBrowsingWindow = !!attrs.mPrivateBrowsingId; + docShell->SetOriginAttributes(attrs); + } else { + nsCOMPtr parentItem; + GetWindowTreeItem(aParent, getter_AddRefs(parentItem)); + nsCOMPtr parentContext = do_QueryInterface(parentItem); + if (parentContext) { + isPrivateBrowsingWindow = parentContext->UsePrivateBrowsing(); + } + } + + bool autoPrivateBrowsing = + Preferences::GetBool("browser.privatebrowsing.autostart"); + + if (!autoPrivateBrowsing && + (chromeFlags & nsIWebBrowserChrome::CHROME_NON_PRIVATE_WINDOW)) { + isPrivateBrowsingWindow = false; + } else if (autoPrivateBrowsing || + (chromeFlags & nsIWebBrowserChrome::CHROME_PRIVATE_WINDOW)) { + isPrivateBrowsingWindow = true; + } + + // Now set the opener principal on the new window. Note that we need to do + // this no matter whether we were opened from JS; if there is nothing on + // the JS stack, just use the principal of our parent window. In those + // cases we do _not_ set the parent window principal as the owner of the + // load--since we really don't know who the owner is, just leave it null. + nsCOMPtr newWindow = do_QueryInterface(*aResult); + NS_ASSERTION(newWindow == newDocShell->GetWindow(), "Different windows??"); + + // The principal of the initial about:blank document gets set up in + // nsWindowWatcher::AddWindow. Make sure to call it. In the common case + // this call already happened when the window was created, but + // SetInitialPrincipalToSubject is safe to call multiple times. + if (newWindow) { + newWindow->SetInitialPrincipalToSubject(); + if (aIsPopupSpam) { + nsGlobalWindow* globalWin = nsGlobalWindow::Cast(newWindow); + MOZ_ASSERT(!globalWin->IsPopupSpamWindow(), + "Who marked it as popup spam already???"); + if (!globalWin->IsPopupSpamWindow()) { // Make sure we don't mess up our + // counter even if the above + // assert fails. + globalWin->SetIsPopupSpamWindow(true); + } + } + } + } + + // We rely on CalculateChromeFlags to decide whether remote (out-of-process) + // tabs should be used. + bool isRemoteWindow = + !!(chromeFlags & nsIWebBrowserChrome::CHROME_REMOTE_WINDOW); + + if (isNewToplevelWindow) { + nsCOMPtr childRoot; + newDocShellItem->GetRootTreeItem(getter_AddRefs(childRoot)); + nsCOMPtr childContext = do_QueryInterface(childRoot); + if (childContext) { + childContext->SetPrivateBrowsing(isPrivateBrowsingWindow); + childContext->SetRemoteTabs(isRemoteWindow); + } + } else if (windowIsNew) { + nsCOMPtr childContext = do_QueryInterface(newDocShellItem); + if (childContext) { + childContext->SetPrivateBrowsing(isPrivateBrowsingWindow); + childContext->SetRemoteTabs(isRemoteWindow); + } + } + + nsCOMPtr loadInfo = aLoadInfo; + if (uriToLoad && aNavigate && !loadInfo) { + newDocShell->CreateLoadInfo(getter_AddRefs(loadInfo)); + NS_ENSURE_TRUE(loadInfo, NS_ERROR_FAILURE); + + if (subjectPrincipal) { + loadInfo->SetTriggeringPrincipal(subjectPrincipal); + } + + /* use the URL from the *extant* document, if any. The usual accessor + GetDocument will synchronously create an about:blank document if + it has no better answer, and we only care about a real document. + Also using GetDocument to force document creation seems to + screw up focus in the hidden window; see bug 36016. + */ + nsCOMPtr doc = GetEntryDocument(); + if (!doc && parentWindow) { + doc = parentWindow->GetExtantDoc(); + } + if (doc) { + // Set the referrer + loadInfo->SetReferrer(doc->GetDocumentURI()); + loadInfo->SetReferrerPolicy(doc->GetReferrerPolicy()); + } + } + + if (isNewToplevelWindow) { + // Notify observers that the window is open and ready. + // The window has not yet started to load a document. + nsCOMPtr obsSvc = + mozilla::services::GetObserverService(); + if (obsSvc) { + obsSvc->NotifyObservers(*aResult, "toplevel-window-ready", nullptr); + } + } + + // Before loading the URI we want to be 100% sure that we use the correct + // userContextId. + MOZ_ASSERT(CheckUserContextCompatibility(newDocShell)); + + if (uriToLoad && aNavigate) { + newDocShell->LoadURI( + uriToLoad, + loadInfo, + windowIsNew ? + static_cast(nsIWebNavigation::LOAD_FLAGS_FIRST_LOAD) : + static_cast(nsIWebNavigation::LOAD_FLAGS_NONE), + true); + } + + // Copy the current session storage for the current domain. + if (subjectPrincipal && parentDocShell) { + nsCOMPtr parentStorageManager = + do_QueryInterface(parentDocShell); + nsCOMPtr newStorageManager = + do_QueryInterface(newDocShell); + + if (parentStorageManager && newStorageManager) { + nsCOMPtr storage; + nsCOMPtr pInnerWin = parentWindow->GetCurrentInnerWindow(); + parentStorageManager->GetStorage(pInnerWin, subjectPrincipal, + getter_AddRefs(storage)); + if (storage) { + newStorageManager->CloneStorage(storage); + } + } + } + + if (isNewToplevelWindow) { + nsCOMPtr newTreeOwner; + newDocShellItem->GetTreeOwner(getter_AddRefs(newTreeOwner)); + SizeOpenedWindow(newTreeOwner, aParent, isCallerChrome, sizeSpec); + } + + // XXXbz isn't windowIsModal always true when windowIsModalContentDialog? + if (windowIsModal || windowIsModalContentDialog) { + nsCOMPtr newTreeOwner; + newDocShellItem->GetTreeOwner(getter_AddRefs(newTreeOwner)); + nsCOMPtr newChrome(do_GetInterface(newTreeOwner)); + + // Throw an exception here if no web browser chrome is available, + // we need that to show a modal window. + NS_ENSURE_TRUE(newChrome, NS_ERROR_NOT_AVAILABLE); + + // Dispatch dialog events etc, but we only want to do that if + // we're opening a modal content window (the helper classes are + // no-ops if given no window), for chrome dialogs we don't want to + // do any of that (it's done elsewhere for us). + // Make sure we maintain the state on an outer window, because + // that's where it lives; inner windows assert if you try to + // maintain the state on them. + nsAutoWindowStateHelper windowStateHelper( + parentWindow ? parentWindow->GetOuterWindow() : nullptr); + + if (!windowStateHelper.DefaultEnabled()) { + // Default to cancel not opening the modal window. + NS_RELEASE(*aResult); + + return NS_OK; + } + + bool isAppModal = false; + nsCOMPtr parentWindow(do_GetInterface(newTreeOwner)); + nsCOMPtr parentWidget; + if (parentWindow) { + parentWindow->GetMainWidget(getter_AddRefs(parentWidget)); + if (parentWidget) { + isAppModal = parentWidget->IsRunningAppModal(); + } + } + if (parentWidget && + ((!newWindowShouldBeModal && parentIsModal) || isAppModal)) { + parentWidget->SetFakeModal(true); + } else { + // Reset popup state while opening a modal dialog, and firing + // events about the dialog, to prevent the current state from + // being active the whole time a modal dialog is open. + nsAutoPopupStatePusher popupStatePusher(openAbused); + + newChrome->ShowAsModal(); + } + } + + if (aForceNoOpener && windowIsNew) { + NS_RELEASE(*aResult); + } + + return NS_OK; +} + +NS_IMETHODIMP +nsWindowWatcher::RegisterNotification(nsIObserver* aObserver) +{ + // just a convenience method; it delegates to nsIObserverService + + if (!aObserver) { + return NS_ERROR_INVALID_ARG; + } + + nsCOMPtr os = mozilla::services::GetObserverService(); + if (!os) { + return NS_ERROR_FAILURE; + } + + nsresult rv = os->AddObserver(aObserver, "domwindowopened", false); + if (NS_SUCCEEDED(rv)) { + rv = os->AddObserver(aObserver, "domwindowclosed", false); + } + + return rv; +} + +NS_IMETHODIMP +nsWindowWatcher::UnregisterNotification(nsIObserver* aObserver) +{ + // just a convenience method; it delegates to nsIObserverService + + if (!aObserver) { + return NS_ERROR_INVALID_ARG; + } + + nsCOMPtr os = mozilla::services::GetObserverService(); + if (!os) { + return NS_ERROR_FAILURE; + } + + os->RemoveObserver(aObserver, "domwindowopened"); + os->RemoveObserver(aObserver, "domwindowclosed"); + + return NS_OK; +} + +NS_IMETHODIMP +nsWindowWatcher::GetWindowEnumerator(nsISimpleEnumerator** aResult) +{ + if (!aResult) { + return NS_ERROR_INVALID_ARG; + } + + MutexAutoLock lock(mListLock); + nsWatcherWindowEnumerator* enumerator = new nsWatcherWindowEnumerator(this); + if (enumerator) { + return CallQueryInterface(enumerator, aResult); + } + + return NS_ERROR_OUT_OF_MEMORY; +} + +NS_IMETHODIMP +nsWindowWatcher::GetNewPrompter(mozIDOMWindowProxy* aParent, nsIPrompt** aResult) +{ + // This is for backwards compat only. Callers should just use the prompt + // service directly. + nsresult rv; + nsCOMPtr factory = + do_GetService("@mozilla.org/prompter;1", &rv); + NS_ENSURE_SUCCESS(rv, rv); + return factory->GetPrompt(aParent, NS_GET_IID(nsIPrompt), + reinterpret_cast(aResult)); +} + +NS_IMETHODIMP +nsWindowWatcher::GetNewAuthPrompter(mozIDOMWindowProxy* aParent, + nsIAuthPrompt** aResult) +{ + // This is for backwards compat only. Callers should just use the prompt + // service directly. + nsresult rv; + nsCOMPtr factory = + do_GetService("@mozilla.org/prompter;1", &rv); + NS_ENSURE_SUCCESS(rv, rv); + return factory->GetPrompt(aParent, NS_GET_IID(nsIAuthPrompt), + reinterpret_cast(aResult)); +} + +NS_IMETHODIMP +nsWindowWatcher::GetPrompt(mozIDOMWindowProxy* aParent, const nsIID& aIID, + void** aResult) +{ + // This is for backwards compat only. Callers should just use the prompt + // service directly. + nsresult rv; + nsCOMPtr factory = + do_GetService("@mozilla.org/prompter;1", &rv); + NS_ENSURE_SUCCESS(rv, rv); + rv = factory->GetPrompt(aParent, aIID, aResult); + + // Allow for an embedding implementation to not support nsIAuthPrompt2. + if (rv == NS_NOINTERFACE && aIID.Equals(NS_GET_IID(nsIAuthPrompt2))) { + nsCOMPtr oldPrompt; + rv = factory->GetPrompt( + aParent, NS_GET_IID(nsIAuthPrompt), getter_AddRefs(oldPrompt)); + NS_ENSURE_SUCCESS(rv, rv); + + NS_WrapAuthPrompt(oldPrompt, reinterpret_cast(aResult)); + if (!*aResult) { + rv = NS_ERROR_NOT_AVAILABLE; + } + } + return rv; +} + +NS_IMETHODIMP +nsWindowWatcher::SetWindowCreator(nsIWindowCreator* aCreator) +{ + mWindowCreator = aCreator; + return NS_OK; +} + +NS_IMETHODIMP +nsWindowWatcher::HasWindowCreator(bool* aResult) +{ + *aResult = mWindowCreator; + return NS_OK; +} + +NS_IMETHODIMP +nsWindowWatcher::GetActiveWindow(mozIDOMWindowProxy** aActiveWindow) +{ + *aActiveWindow = nullptr; + nsCOMPtr fm = do_GetService(FOCUSMANAGER_CONTRACTID); + if (fm) { + return fm->GetActiveWindow(aActiveWindow); + } + return NS_OK; +} + +NS_IMETHODIMP +nsWindowWatcher::SetActiveWindow(mozIDOMWindowProxy* aActiveWindow) +{ + nsCOMPtr fm = do_GetService(FOCUSMANAGER_CONTRACTID); + if (fm) { + return fm->SetActiveWindow(aActiveWindow); + } + return NS_OK; +} + +NS_IMETHODIMP +nsWindowWatcher::AddWindow(mozIDOMWindowProxy* aWindow, nsIWebBrowserChrome* aChrome) +{ + if (!aWindow) { + return NS_ERROR_INVALID_ARG; + } + +#ifdef DEBUG + { + nsCOMPtr win(do_QueryInterface(aWindow)); + + NS_ASSERTION(win->IsOuterWindow(), + "Uh, the active window must be an outer window!"); + } +#endif + + { + nsWatcherWindowEntry* info; + MutexAutoLock lock(mListLock); + + // if we already have an entry for this window, adjust + // its chrome mapping and return + info = FindWindowEntry(aWindow); + if (info) { + nsCOMPtr supportsweak( + do_QueryInterface(aChrome)); + if (supportsweak) { + supportsweak->GetWeakReference(getter_AddRefs(info->mChromeWeak)); + } else { + info->mChrome = aChrome; + info->mChromeWeak = nullptr; + } + return NS_OK; + } + + // create a window info struct and add it to the list of windows + info = new nsWatcherWindowEntry(aWindow, aChrome); + if (!info) { + return NS_ERROR_OUT_OF_MEMORY; + } + + if (mOldestWindow) { + info->InsertAfter(mOldestWindow->mOlder); + } else { + mOldestWindow = info; + } + } // leave the mListLock + + // a window being added to us signifies a newly opened window. + // send notifications. + nsCOMPtr os = mozilla::services::GetObserverService(); + if (!os) { + return NS_ERROR_FAILURE; + } + + nsCOMPtr domwin(do_QueryInterface(aWindow)); + return os->NotifyObservers(domwin, "domwindowopened", 0); +} + +NS_IMETHODIMP +nsWindowWatcher::RemoveWindow(mozIDOMWindowProxy* aWindow) +{ + // find the corresponding nsWatcherWindowEntry, remove it + + if (!aWindow) { + return NS_ERROR_INVALID_ARG; + } + + nsWatcherWindowEntry* info = FindWindowEntry(aWindow); + if (info) { + RemoveWindow(info); + return NS_OK; + } + NS_WARNING("requested removal of nonexistent window"); + return NS_ERROR_INVALID_ARG; +} + +nsWatcherWindowEntry* +nsWindowWatcher::FindWindowEntry(mozIDOMWindowProxy* aWindow) +{ + // find the corresponding nsWatcherWindowEntry + nsWatcherWindowEntry* info; + nsWatcherWindowEntry* listEnd; +#ifdef USEWEAKREFS + nsresult rv; + bool found; +#endif + + info = mOldestWindow; + listEnd = 0; +#ifdef USEWEAKREFS + rv = NS_OK; + found = false; + while (info != listEnd && NS_SUCCEEDED(rv)) { + nsCOMPtr infoWindow(do_QueryReferent(info->mWindow)); + if (!infoWindow) { // clean up dangling reference, while we're here + rv = RemoveWindow(info); + } else if (infoWindow.get() == aWindow) { + return info; + } + + info = info->mYounger; + listEnd = mOldestWindow; + } + return 0; +#else + while (info != listEnd) { + if (info->mWindow == aWindow) { + return info; + } + info = info->mYounger; + listEnd = mOldestWindow; + } + return 0; +#endif +} + +nsresult +nsWindowWatcher::RemoveWindow(nsWatcherWindowEntry* aInfo) +{ + uint32_t count = mEnumeratorList.Length(); + + { + // notify the enumerators + MutexAutoLock lock(mListLock); + for (uint32_t ctr = 0; ctr < count; ++ctr) { + mEnumeratorList[ctr]->WindowRemoved(aInfo); + } + + // remove the element from the list + if (aInfo == mOldestWindow) { + mOldestWindow = aInfo->mYounger == mOldestWindow ? 0 : aInfo->mYounger; + } + aInfo->Unlink(); + } + + // a window being removed from us signifies a newly closed window. + // send notifications. + nsCOMPtr os = mozilla::services::GetObserverService(); + if (os) { +#ifdef USEWEAKREFS + nsCOMPtr domwin(do_QueryReferent(aInfo->mWindow)); + if (domwin) { + os->NotifyObservers(domwin, "domwindowclosed", 0); + } + // else bummer. since the window is gone, there's nothing to notify with. +#else + nsCOMPtr domwin(do_QueryInterface(aInfo->mWindow)); + os->NotifyObservers(domwin, "domwindowclosed", 0); +#endif + } + + delete aInfo; + return NS_OK; +} + +NS_IMETHODIMP +nsWindowWatcher::GetChromeForWindow(mozIDOMWindowProxy* aWindow, + nsIWebBrowserChrome** aResult) +{ + if (!aWindow || !aResult) { + return NS_ERROR_INVALID_ARG; + } + *aResult = 0; + + MutexAutoLock lock(mListLock); + nsWatcherWindowEntry* info = FindWindowEntry(aWindow); + if (info) { + if (info->mChromeWeak) { + return info->mChromeWeak->QueryReferent( + NS_GET_IID(nsIWebBrowserChrome), reinterpret_cast(aResult)); + } + *aResult = info->mChrome; + NS_IF_ADDREF(*aResult); + } + return NS_OK; +} + +NS_IMETHODIMP +nsWindowWatcher::GetWindowByName(const nsAString& aTargetName, + mozIDOMWindowProxy* aCurrentWindow, + mozIDOMWindowProxy** aResult) +{ + if (!aResult) { + return NS_ERROR_INVALID_ARG; + } + + *aResult = nullptr; + + nsPIDOMWindowOuter* currentWindow = + aCurrentWindow ? nsPIDOMWindowOuter::From(aCurrentWindow) : nullptr; + + nsCOMPtr treeItem; + + nsCOMPtr startItem; + GetWindowTreeItem(currentWindow, getter_AddRefs(startItem)); + if (startItem) { + // Note: original requestor is null here, per idl comments + startItem->FindItemWithName(aTargetName, nullptr, nullptr, + getter_AddRefs(treeItem)); + } else { + // Note: original requestor is null here, per idl comments + FindItemWithName(aTargetName, nullptr, nullptr, getter_AddRefs(treeItem)); + } + + if (treeItem) { + nsCOMPtr domWindow = treeItem->GetWindow(); + domWindow.forget(aResult); + } + + return NS_OK; +} + +bool +nsWindowWatcher::AddEnumerator(nsWatcherWindowEnumerator* aEnumerator) +{ + // (requires a lock; assumes it's called by someone holding the lock) + return mEnumeratorList.AppendElement(aEnumerator) != nullptr; +} + +bool +nsWindowWatcher::RemoveEnumerator(nsWatcherWindowEnumerator* aEnumerator) +{ + // (requires a lock; assumes it's called by someone holding the lock) + return mEnumeratorList.RemoveElement(aEnumerator); +} + +nsresult +nsWindowWatcher::URIfromURL(const char* aURL, + mozIDOMWindowProxy* aParent, + nsIURI** aURI) +{ + // Build the URI relative to the entry global. + nsCOMPtr baseWindow = do_QueryInterface(GetEntryGlobal()); + + // failing that, build it relative to the parent window, if possible + if (!baseWindow && aParent) { + baseWindow = nsPIDOMWindowOuter::From(aParent)->GetCurrentInnerWindow(); + } + + // failing that, use the given URL unmodified. It had better not be relative. + + nsIURI* baseURI = nullptr; + + // get baseWindow's document URI + if (baseWindow) { + if (nsIDocument* doc = baseWindow->GetDoc()) { + baseURI = doc->GetDocBaseURI(); + } + } + + // build and return the absolute URI + return NS_NewURI(aURI, aURL, baseURI); +} + +#define NS_CALCULATE_CHROME_FLAG_FOR(feature, flag) \ + prefBranch->GetBoolPref(feature, &forceEnable); \ + if (forceEnable && !aDialog && !aHasChromeParent && !aChromeURL) { \ + chromeFlags |= flag; \ + } else { \ + chromeFlags |= \ + WinHasOption(aFeatures, feature, 0, &presenceFlag) ? flag : 0; \ + } + +// static +uint32_t +nsWindowWatcher::CalculateChromeFlagsHelper(uint32_t aInitialFlags, + const nsACString& aFeatures, + bool& presenceFlag, + bool aDialog, + bool aHasChromeParent, + bool aChromeURL) +{ + uint32_t chromeFlags = aInitialFlags; + + nsresult rv; + nsCOMPtr prefBranch; + nsCOMPtr prefs = + do_GetService(NS_PREFSERVICE_CONTRACTID, &rv); + + NS_ENSURE_SUCCESS(rv, nsIWebBrowserChrome::CHROME_DEFAULT); + + rv = prefs->GetBranch("dom.disable_window_open_feature.", + getter_AddRefs(prefBranch)); + + NS_ENSURE_SUCCESS(rv, nsIWebBrowserChrome::CHROME_DEFAULT); + + // NS_CALCULATE_CHROME_FLAG_FOR requires aFeatures, forceEnable, aDialog + // aHasChromeParent, aChromeURL, presenceFlag and chromeFlags to be in + // scope. + bool forceEnable = false; + + NS_CALCULATE_CHROME_FLAG_FOR("titlebar", + nsIWebBrowserChrome::CHROME_TITLEBAR); + NS_CALCULATE_CHROME_FLAG_FOR("close", + nsIWebBrowserChrome::CHROME_WINDOW_CLOSE); + NS_CALCULATE_CHROME_FLAG_FOR("toolbar", + nsIWebBrowserChrome::CHROME_TOOLBAR); + NS_CALCULATE_CHROME_FLAG_FOR("location", + nsIWebBrowserChrome::CHROME_LOCATIONBAR); + NS_CALCULATE_CHROME_FLAG_FOR("personalbar", + nsIWebBrowserChrome::CHROME_PERSONAL_TOOLBAR); + NS_CALCULATE_CHROME_FLAG_FOR("status", + nsIWebBrowserChrome::CHROME_STATUSBAR); + NS_CALCULATE_CHROME_FLAG_FOR("menubar", + nsIWebBrowserChrome::CHROME_MENUBAR); + NS_CALCULATE_CHROME_FLAG_FOR("resizable", + nsIWebBrowserChrome::CHROME_WINDOW_RESIZE); + NS_CALCULATE_CHROME_FLAG_FOR("minimizable", + nsIWebBrowserChrome::CHROME_WINDOW_MIN); + + // default scrollbar to "on," unless explicitly turned off + if (WinHasOption(aFeatures, "scrollbars", 1, &presenceFlag) || !presenceFlag) { + chromeFlags |= nsIWebBrowserChrome::CHROME_SCROLLBARS; + } + + return chromeFlags; +} + +// static +uint32_t +nsWindowWatcher::EnsureFlagsSafeForContent(uint32_t aChromeFlags, + bool aChromeURL) +{ + aChromeFlags |= nsIWebBrowserChrome::CHROME_TITLEBAR; + aChromeFlags |= nsIWebBrowserChrome::CHROME_WINDOW_CLOSE; + aChromeFlags &= ~nsIWebBrowserChrome::CHROME_WINDOW_LOWERED; + aChromeFlags &= ~nsIWebBrowserChrome::CHROME_WINDOW_RAISED; + aChromeFlags &= ~nsIWebBrowserChrome::CHROME_WINDOW_POPUP; + /* Untrusted script is allowed to pose modal windows with a chrome + scheme. This check could stand to be better. But it effectively + prevents untrusted script from opening modal windows in general + while still allowing alerts and the like. */ + if (!aChromeURL) { + aChromeFlags &= ~(nsIWebBrowserChrome::CHROME_MODAL | + nsIWebBrowserChrome::CHROME_OPENAS_CHROME); + } + + if (!(aChromeFlags & nsIWebBrowserChrome::CHROME_OPENAS_CHROME)) { + aChromeFlags &= ~nsIWebBrowserChrome::CHROME_DEPENDENT; + } + + return aChromeFlags; +} + +/** + * Calculate the chrome bitmask from a string list of features requested + * from a child process. Feature strings that are restricted to the parent + * process are ignored here. + * @param aFeatures a string containing a list of named features + * @return the chrome bitmask + */ +// static +uint32_t +nsWindowWatcher::CalculateChromeFlagsForChild(const nsACString& aFeatures) +{ + if (aFeatures.IsVoid()) { + return nsIWebBrowserChrome::CHROME_ALL; + } + + bool presenceFlag = false; + uint32_t chromeFlags = CalculateChromeFlagsHelper( + nsIWebBrowserChrome::CHROME_WINDOW_BORDERS, aFeatures, presenceFlag); + + return EnsureFlagsSafeForContent(chromeFlags); +} + +/** + * Calculate the chrome bitmask from a string list of features for a new + * privileged window. + * @param aParent the opener window + * @param aFeatures a string containing a list of named chrome features + * @param aDialog affects the assumptions made about unnamed features + * @param aChromeURL true if the window is being sent to a chrome:// URL + * @param aHasChromeParent true if the parent window is privileged + * @param aCalledFromJS true if the window open request came from script. + * @return the chrome bitmask + */ +// static +uint32_t +nsWindowWatcher::CalculateChromeFlagsForParent(mozIDOMWindowProxy* aParent, + const nsACString& aFeatures, + bool aDialog, + bool aChromeURL, + bool aHasChromeParent, + bool aCalledFromJS) +{ + MOZ_ASSERT(XRE_IsParentProcess()); + MOZ_ASSERT(nsContentUtils::LegacyIsCallerChromeOrNativeCode()); + + uint32_t chromeFlags = 0; + + // The features string is made void by OpenWindowInternal + // if nullptr was originally passed as the features string. + if (aFeatures.IsVoid()) { + chromeFlags = nsIWebBrowserChrome::CHROME_ALL; + if (aDialog) { + chromeFlags |= nsIWebBrowserChrome::CHROME_OPENAS_DIALOG | + nsIWebBrowserChrome::CHROME_OPENAS_CHROME; + } + } else { + chromeFlags = nsIWebBrowserChrome::CHROME_WINDOW_BORDERS; + } + + /* This function has become complicated since browser windows and + dialogs diverged. The difference is, browser windows assume all + chrome not explicitly mentioned is off, if the features string + is not null. Exceptions are some OS border chrome new with Mozilla. + Dialogs interpret a (mostly) empty features string to mean + "OS's choice," and also support an "all" flag explicitly disallowed + in the standards-compliant window.(normal)open. */ + + bool presenceFlag = false; + if (aDialog && WinHasOption(aFeatures, "all", 0, &presenceFlag)) { + chromeFlags = nsIWebBrowserChrome::CHROME_ALL; + } + + /* Next, allow explicitly named options to override the initial settings */ + chromeFlags = CalculateChromeFlagsHelper(chromeFlags, aFeatures, presenceFlag, + aDialog, aHasChromeParent, aChromeURL); + + // Determine whether the window is a private browsing window + chromeFlags |= WinHasOption(aFeatures, "private", 0, &presenceFlag) ? + nsIWebBrowserChrome::CHROME_PRIVATE_WINDOW : 0; + chromeFlags |= WinHasOption(aFeatures, "non-private", 0, &presenceFlag) ? + nsIWebBrowserChrome::CHROME_NON_PRIVATE_WINDOW : 0; + + // Determine whether the window should have remote tabs. + bool remote = BrowserTabsRemoteAutostart(); + + if (remote) { + remote = !WinHasOption(aFeatures, "non-remote", 0, &presenceFlag); + } else { + remote = WinHasOption(aFeatures, "remote", 0, &presenceFlag); + } + + if (remote) { + chromeFlags |= nsIWebBrowserChrome::CHROME_REMOTE_WINDOW; + } + + chromeFlags |= WinHasOption(aFeatures, "popup", 0, &presenceFlag) ? + nsIWebBrowserChrome::CHROME_WINDOW_POPUP : 0; + + /* OK. + Normal browser windows, in spite of a stated pattern of turning off + all chrome not mentioned explicitly, will want the new OS chrome (window + borders, titlebars, closebox) on, unless explicitly turned off. + Dialogs, on the other hand, take the absence of any explicit settings + to mean "OS' choice." */ + + // default titlebar and closebox to "on," if not mentioned at all + if (!(chromeFlags & nsIWebBrowserChrome::CHROME_WINDOW_POPUP)) { + if (!PL_strcasestr(aFeatures.BeginReading(), "titlebar")) { + chromeFlags |= nsIWebBrowserChrome::CHROME_TITLEBAR; + } + if (!PL_strcasestr(aFeatures.BeginReading(), "close")) { + chromeFlags |= nsIWebBrowserChrome::CHROME_WINDOW_CLOSE; + } + } + + if (aDialog && !aFeatures.IsVoid() && !presenceFlag) { + chromeFlags = nsIWebBrowserChrome::CHROME_DEFAULT; + } + + /* Finally, once all the above normal chrome has been divined, deal + with the features that are more operating hints than appearance + instructions. (Note modality implies dependence.) */ + + if (WinHasOption(aFeatures, "alwaysLowered", 0, nullptr) || + WinHasOption(aFeatures, "z-lock", 0, nullptr)) { + chromeFlags |= nsIWebBrowserChrome::CHROME_WINDOW_LOWERED; + } else if (WinHasOption(aFeatures, "alwaysRaised", 0, nullptr)) { + chromeFlags |= nsIWebBrowserChrome::CHROME_WINDOW_RAISED; + } + + chromeFlags |= WinHasOption(aFeatures, "macsuppressanimation", 0, nullptr) ? + nsIWebBrowserChrome::CHROME_MAC_SUPPRESS_ANIMATION : 0; + + chromeFlags |= WinHasOption(aFeatures, "chrome", 0, nullptr) ? + nsIWebBrowserChrome::CHROME_OPENAS_CHROME : 0; + chromeFlags |= WinHasOption(aFeatures, "extrachrome", 0, nullptr) ? + nsIWebBrowserChrome::CHROME_EXTRA : 0; + chromeFlags |= WinHasOption(aFeatures, "centerscreen", 0, nullptr) ? + nsIWebBrowserChrome::CHROME_CENTER_SCREEN : 0; + chromeFlags |= WinHasOption(aFeatures, "dependent", 0, nullptr) ? + nsIWebBrowserChrome::CHROME_DEPENDENT : 0; + chromeFlags |= WinHasOption(aFeatures, "modal", 0, nullptr) ? + (nsIWebBrowserChrome::CHROME_MODAL | nsIWebBrowserChrome::CHROME_DEPENDENT) : 0; + + /* On mobile we want to ignore the dialog window feature, since the mobile UI + does not provide any affordance for dialog windows. This does not interfere + with dialog windows created through openDialog. */ + bool disableDialogFeature = false; + nsCOMPtr branch = do_GetService(NS_PREFSERVICE_CONTRACTID); + + branch->GetBoolPref("dom.disable_window_open_dialog_feature", + &disableDialogFeature); + + if (!disableDialogFeature) { + chromeFlags |= WinHasOption(aFeatures, "dialog", 0, nullptr) ? + nsIWebBrowserChrome::CHROME_OPENAS_DIALOG : 0; + } + + /* and dialogs need to have the last word. assume dialogs are dialogs, + and opened as chrome, unless explicitly told otherwise. */ + if (aDialog) { + if (!PL_strcasestr(aFeatures.BeginReading(), "dialog")) { + chromeFlags |= nsIWebBrowserChrome::CHROME_OPENAS_DIALOG; + } + if (!PL_strcasestr(aFeatures.BeginReading(), "chrome")) { + chromeFlags |= nsIWebBrowserChrome::CHROME_OPENAS_CHROME; + } + } + + /* missing + chromeFlags->copy_history + */ + + // Check security state for use in determing window dimensions + if (!aHasChromeParent) { + chromeFlags = EnsureFlagsSafeForContent(chromeFlags, aChromeURL); + } + + // Disable CHROME_OPENAS_DIALOG if the window is inside '); yield promise; - yield new Promise(resolve => setTimeout(resolve, kIteratorTimeout)); yield toggleHighlightAndWait(true); yield ContentTask.spawn(gBrowser, { search }, function* (args) { @@ -194,7 +172,6 @@ args.search, "Added the correct match"); }); - yield new Promise(resolve => setTimeout(resolve, kIteratorTimeout)); yield toggleHighlightAndWait(false); let matches = gFindBar._foundMatches.value.match(/([\d]*)\sof\s([\d]*)/); @@ -224,7 +201,6 @@ }); gFindBar.close(true); - yield new Promise(resolve => setTimeout(resolve, kIteratorTimeout)); } ]]> diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/content/tests/chrome/bug451540_window.xul firefox-trunk-53.0~a1~hg20170115r329516/toolkit/content/tests/chrome/bug451540_window.xul --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/content/tests/chrome/bug451540_window.xul 2017-01-13 01:41:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/content/tests/chrome/bug451540_window.xul 2017-01-16 01:43:31.000000000 +0000 @@ -23,7 +23,6 @@ let gFindBar = null; let gPrefsvc = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch); - const kIteratorTimeout = gPrefsvc.getIntPref("findbar.iteratorTimeout") + 20; let gBrowser; let sendCtrl = true; @@ -49,6 +48,18 @@ gBrowser.loadURI(data); } + function promiseHighlightFinished() { + return new Promise(resolve => { + let listener = { + onHighlightFinished() { + gFindBar.browser.finder.removeResultListener(listener); + resolve(); + } + }; + gFindBar.browser.finder.addResultListener(listener); + }); + } + function* resetForNextTest(elementId, aText) { if (!aText) aText = SEARCH_TEXT; @@ -57,7 +68,6 @@ let highlightButton = gFindBar.getElement("highlight"); if (highlightButton.checked) { highlightButton.click(); - yield new Promise(resolve => setTimeout(resolve, kIteratorTimeout)); } // Initialise input @@ -75,7 +85,7 @@ // Perform search and turn on highlighting gFindBar._find(); highlightButton.click(); - yield new Promise(resolve => setTimeout(resolve, kIteratorTimeout)); + yield promiseHighlightFinished(); // Move caret to start of element info(`focusing element`); @@ -117,7 +127,6 @@ let matchCase = gFindBar.getElement("find-case-sensitive"); if (matchCase.checked) { matchCase.doCommand(); - yield new Promise(resolve => setTimeout(resolve, kIteratorTimeout)); } // First check match has been correctly highlighted diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/content/tests/chrome/chrome.ini firefox-trunk-53.0~a1~hg20170115r329516/toolkit/content/tests/chrome/chrome.ini --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/content/tests/chrome/chrome.ini 2017-01-13 01:41:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/content/tests/chrome/chrome.ini 2017-01-16 01:43:31.000000000 +0000 @@ -191,7 +191,6 @@ skip-if = toolkit == "cocoa" [test_bug451540.xul] support-files = bug451540_window.xul -skip-if = toolkit == "cocoa" [test_autocomplete_mac_caret.xul] skip-if = toolkit != "cocoa" [test_cursorsnap.xul] diff -Nru firefox-trunk-53.0~a1~hg20170113r329171/toolkit/content/tests/chrome/findbar_events_window.xul firefox-trunk-53.0~a1~hg20170115r329516/toolkit/content/tests/chrome/findbar_events_window.xul --- firefox-trunk-53.0~a1~hg20170113r329171/toolkit/content/tests/chrome/findbar_events_window.xul 2017-01-13 01:41:06.000000000 +0000 +++ firefox-trunk-53.0~a1~hg20170115r329516/toolkit/content/tests/chrome/findbar_events_window.xul 2017-01-16 01:43:31.000000000 +0000 @@ -19,6 +19,7 @@