author | Carsten "Tomcat" Book <cbook@mozilla.com> |
Wed, 27 Apr 2016 11:57:21 +0200 | |
changeset 295057 | ab0044bfa1df858919797bcd6a9aef76a668cd4a |
parent 294963 | 488df90abd620538454e58ae0a75f13453f391b1 (current diff) |
parent 295056 | 048c047097a97068fa5e4f2592c53e59449ab8fd (diff) |
child 295058 | a8d0cda0ef764a00b9ca133878581109698c295f |
child 295062 | a8386cc2b749b7c73b3e3e718eb3b50b7d5aa8e0 |
child 295140 | 3de22a3be0840dab498e2eabaceaa38d70be9589 |
push id | 30217 |
push user | cbook@mozilla.com |
push date | Wed, 27 Apr 2016 09:58:13 +0000 |
treeherder | mozilla-central@ab0044bfa1df [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | merge |
milestone | 49.0a1 |
first release with | nightly linux32
ab0044bfa1df
/
49.0a1
/
20160427030215
/
files
nightly linux64
ab0044bfa1df
/
49.0a1
/
20160427030215
/
files
nightly mac
ab0044bfa1df
/
49.0a1
/
20160427030215
/
files
nightly win32
ab0044bfa1df
/
49.0a1
/
20160427030215
/
files
nightly win64
ab0044bfa1df
/
49.0a1
/
20160427030215
/
files
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
releases | nightly linux32
49.0a1
/
20160427030215
/
pushlog to previous
nightly linux64
49.0a1
/
20160427030215
/
pushlog to previous
nightly mac
49.0a1
/
20160427030215
/
pushlog to previous
nightly win32
49.0a1
/
20160427030215
/
pushlog to previous
nightly win64
49.0a1
/
20160427030215
/
pushlog to previous
|
--- a/accessible/base/TextAttrs.cpp +++ b/accessible/base/TextAttrs.cpp @@ -697,17 +697,17 @@ TextAttrsMgr::TextDecorValue:: TextDecorValue(nsIFrame* aFrame) { const nsStyleTextReset* textReset = aFrame->StyleTextReset(); mStyle = textReset->GetDecorationStyle(); bool isForegroundColor = false; textReset->GetDecorationColor(mColor, isForegroundColor); if (isForegroundColor) - mColor = aFrame->StyleContext()->GetTextFillColor(); + mColor = aFrame->StyleColor()->mColor; mLine = textReset->mTextDecorationLine & (NS_STYLE_TEXT_DECORATION_LINE_UNDERLINE | NS_STYLE_TEXT_DECORATION_LINE_LINE_THROUGH); } TextAttrsMgr::TextDecorTextAttr:: TextDecorTextAttr(nsIFrame* aRootFrame, nsIFrame* aFrame) :
--- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -5435,17 +5435,17 @@ function handleLinkClick(event, href, li // first get document wide referrer policy, then // get referrer attribute from clicked link and parse it and // allow per element referrer to overrule the document wide referrer if enabled let referrerPolicy = doc.referrerPolicy; if (Services.prefs.getBoolPref("network.http.enablePerElementReferrer") && linkNode) { let referrerAttrValue = Services.netUtils.parseAttributePolicyString(linkNode. getAttribute("referrerpolicy")); - if (referrerAttrValue != Ci.nsIHttpChannel.REFERRER_POLICY_DEFAULT) { + if (referrerAttrValue != Ci.nsIHttpChannel.REFERRER_POLICY_UNSET) { referrerPolicy = referrerAttrValue; } } urlSecurityCheck(href, doc.nodePrincipal); let params = { charset: doc.characterSet, allowMixedContent: persistAllowMixedContentInChildTab, referrerURI: referrerURI,
--- a/browser/base/content/content.js +++ b/browser/base/content/content.js @@ -123,17 +123,17 @@ var handleContentContextMenu = function let parentAllowsMixedContent = !!docShell.mixedContentChannel; // get referrer attribute from clicked link and parse it // if per element referrer is enabled, the element referrer overrules // the document wide referrer if (Services.prefs.getBoolPref("network.http.enablePerElementReferrer")) { let referrerAttrValue = Services.netUtils.parseAttributePolicyString(event.target. getAttribute("referrerpolicy")); - if (referrerAttrValue !== Ci.nsIHttpChannel.REFERRER_POLICY_DEFAULT) { + if (referrerAttrValue !== Ci.nsIHttpChannel.REFERRER_POLICY_UNSET) { referrerPolicy = referrerAttrValue; } } let disableSetDesktopBg = null; // Media related cache info parent needs for saving let contentType = null; let contentDisposition = null; @@ -414,17 +414,17 @@ var ClickEventHandler = { // get referrer attribute from clicked link and parse it // if per element referrer is enabled, the element referrer overrules // the document wide referrer let referrerPolicy = ownerDoc.referrerPolicy; if (Services.prefs.getBoolPref("network.http.enablePerElementReferrer") && node) { let referrerAttrValue = Services.netUtils.parseAttributePolicyString(node. getAttribute("referrerpolicy")); - if (referrerAttrValue !== Ci.nsIHttpChannel.REFERRER_POLICY_DEFAULT) { + if (referrerAttrValue !== Ci.nsIHttpChannel.REFERRER_POLICY_UNSET) { referrerPolicy = referrerAttrValue; } } let json = { button: event.button, shiftKey: event.shiftKey, ctrlKey: event.ctrlKey, metaKey: event.metaKey, altKey: event.altKey, href: null, title: null, bookmark: false, referrerPolicy: referrerPolicy };
--- a/browser/locales/en-US/chrome/browser/preferences/blocklists.dtd +++ b/browser/locales/en-US/chrome/browser/preferences/blocklists.dtd @@ -1,14 +1,14 @@ <!-- 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/. --> <!ENTITY window.title "Block Lists"> -<!ENTITY window.width "50em"> +<!ENTITY window.width "55em"> <!ENTITY treehead.list.label "List"> <!ENTITY windowClose.key "w"> <!ENTITY button.cancel.label "Cancel"> <!ENTITY button.cancel.accesskey "C"> <!ENTITY button.ok.label "Save Changes"> <!ENTITY button.ok.accesskey "S">
--- a/build/sanitizers/lsan_suppressions.txt +++ b/build/sanitizers/lsan_suppressions.txt @@ -71,22 +71,16 @@ leak:nsPSPrinterList::GetPrinterList leak:_PR_Getfd # Bug 1028483 - The XML parser sometimes leaks an object. bc3 leak:processInternalEntity # Bug 1187421 - With e10s, NSS does not always free the error stack. m1. leak:nss_ClearErrorStack -# Bug 1122045 - Leaks in MessageLoop::MessageLoop() -leak:MessageLoop::MessageLoop -# This may not actually be related to MessageLoop. -leak:base::WaitableEvent::TimedWait -leak:MessageLoop::PostTask_Helper - # Bug 1189430 - DNS leaks in mochitest-chrome. leak:nsDNSService::AsyncResolveExtended leak:_GetAddrInfo_Portable # Bug 1189568 - Indirect leaks of IMContextWrapper and nsIntRect. leak:nsWindow::Create leak:nsBaseWidget::StoreWindowClipRegion
--- a/devtools/client/debugger/test/mochitest/browser_dbg_variables-view-frame-parameters-02.js +++ b/devtools/client/debugger/test/mochitest/browser_dbg_variables-view-frame-parameters-02.js @@ -515,25 +515,25 @@ function testGetterSetterObject() { is(propEnums.length, 0, "The propEnums should contain all the created enumerable elements."); is(propNonEnums.length, 2, "The propEnums should contain all the created non-enumerable elements."); is(propNonEnums[0].querySelector(".name").getAttribute("value"), "get", "Should have the right property name for 'get'."); is(propNonEnums[0].querySelector(".value").getAttribute("value"), - "test/myVar.prop()", + "get prop()", "Should have the right property value for 'get'."); ok(propNonEnums[0].querySelector(".value").className.includes("token-other"), "Should have the right token class for 'get'."); is(propNonEnums[1].querySelector(".name").getAttribute("value"), "set", "Should have the right property name for 'set'."); is(propNonEnums[1].querySelector(".value").getAttribute("value"), - "test/myVar.prop(val)", + "set prop(val)", "Should have the right property value for 'set'."); ok(propNonEnums[1].querySelector(".value").className.includes("token-other"), "Should have the right token class for 'set'."); deferred.resolve(); }); myVar.expand();
--- a/devtools/server/actors/utils/TabSources.js +++ b/devtools/server/actors/utils/TabSources.js @@ -254,16 +254,20 @@ TabSources.prototype = { * Returns true if the URL likely points to a minified resource, false * otherwise. * * @param String aURL * The URL to test. * @returns Boolean */ _isMinifiedURL: function (aURL) { + if (!aURL) { + return false; + } + try { let url = new URL(aURL); let pathname = url.pathname; return MINIFIED_SOURCE_REGEXP.test(pathname.slice(pathname.lastIndexOf("/") + 1)); } catch (e) { // Not a valid URL so don't try to parse out the filename, just test the // whole thing with the minified source regexp. return MINIFIED_SOURCE_REGEXP.test(aURL);
--- a/dom/audiochannel/AudioChannelService.cpp +++ b/dom/audiochannel/AudioChannelService.cpp @@ -382,18 +382,18 @@ AudioChannelService::GetState(nsPIDOMWin *aVolume *= winData->mChannels[aAudioChannel].mVolume; *aMuted = *aMuted || winData->mChannels[aAudioChannel].mMuted; } *aVolume *= window->GetAudioVolume(); // TODO : distiguish between suspend and mute, it would be done in bug1242874. *aMuted = *aMuted || window->GetMediaSuspended() || window->GetAudioMuted(); - nsCOMPtr<nsPIDOMWindowOuter> win = window->GetScriptableParent(); - if (window == win) { + nsCOMPtr<nsPIDOMWindowOuter> win = window->GetScriptableParentOrNull(); + if (!win) { break; } window = do_QueryInterface(win); // If there is no parent, or we are the toplevel we don't continue. } while (window && window != aWindow); }
--- a/dom/base/nsGlobalWindow.cpp +++ b/dom/base/nsGlobalWindow.cpp @@ -3653,18 +3653,18 @@ nsPIDOMWindowInner::CreatePerformanceObj !NS_SUCCEEDED(timedChannel->GetTimingEnabled(&timingEnabled)) || !timingEnabled) { timedChannel = nullptr; } if (timing) { // If we are dealing with an iframe, we will need the parent's performance // object (so we can add the iframe as a resource of that page). nsPerformance* parentPerformance = nullptr; - nsCOMPtr<nsPIDOMWindowOuter> parentWindow = GetScriptableParent(); - if (GetOuterWindow() != parentWindow) { + nsCOMPtr<nsPIDOMWindowOuter> parentWindow = GetScriptableParentOrNull(); + if (parentWindow) { nsPIDOMWindowInner* parentInnerWindow = nullptr; if (parentWindow) { parentInnerWindow = parentWindow->GetCurrentInnerWindow(); } if (parentInnerWindow) { parentPerformance = parentInnerWindow->GetPerformance(); } } @@ -3874,16 +3874,29 @@ nsGlobalWindow::GetScriptableParent() { FORWARD_TO_OUTER(GetScriptableParent, (), nullptr); nsCOMPtr<nsPIDOMWindowOuter> parent = GetParentOuter(); return parent.get(); } /** + * Behavies identically to GetScriptableParent extept that it returns null + * if GetScriptableParent would return this window. + */ +nsPIDOMWindowOuter* +nsGlobalWindow::GetScriptableParentOrNull() +{ + FORWARD_TO_OUTER(GetScriptableParentOrNull, (), nullptr); + + nsPIDOMWindowOuter* parent = GetScriptableParent(); + return (Cast(parent) == this) ? nullptr : parent; +} + +/** * nsPIDOMWindow::GetParent (when called from C++) is just a wrapper around * GetRealParent. */ already_AddRefed<nsPIDOMWindowOuter> nsGlobalWindow::GetParent() { MOZ_ASSERT(IsOuterWindow());
--- a/dom/base/nsGlobalWindow.h +++ b/dom/base/nsGlobalWindow.h @@ -891,16 +891,17 @@ public: mozilla::ErrorResult& aError); already_AddRefed<nsPIDOMWindowOuter> GetOpener() override; void SetOpener(JSContext* aCx, JS::Handle<JS::Value> aOpener, mozilla::ErrorResult& aError); already_AddRefed<nsPIDOMWindowOuter> GetParentOuter(); already_AddRefed<nsPIDOMWindowOuter> GetParent(mozilla::ErrorResult& aError); already_AddRefed<nsPIDOMWindowOuter> GetParent() override; nsPIDOMWindowOuter* GetScriptableParent() override; + nsPIDOMWindowOuter* GetScriptableParentOrNull() override; mozilla::dom::Element* GetFrameElementOuter(); mozilla::dom::Element* GetFrameElement(mozilla::ErrorResult& aError); already_AddRefed<nsIDOMElement> GetFrameElement() override; already_AddRefed<nsPIDOMWindowOuter> OpenOuter(const nsAString& aUrl, const nsAString& aName, const nsAString& aOptions, mozilla::ErrorResult& aError);
--- a/dom/base/nsINode.cpp +++ b/dom/base/nsINode.cpp @@ -1652,16 +1652,177 @@ nsINode::GetNextElementSibling() const return nextSibling->AsElement(); } nextSibling = nextSibling->GetNextSibling(); } return nullptr; } +static already_AddRefed<nsINode> +GetNodeFromNodeOrString(const OwningNodeOrString& aNode, + nsIDocument* aDocument) +{ + if (aNode.IsNode()) { + nsCOMPtr<nsINode> node = aNode.GetAsNode(); + return node.forget(); + } + + if (aNode.IsString()){ + RefPtr<nsTextNode> textNode = + aDocument->CreateTextNode(aNode.GetAsString()); + return textNode.forget(); + } + + MOZ_CRASH("Impossible type"); +} + +/** + * Implement the algorithm specified at + * https://dom.spec.whatwg.org/#converting-nodes-into-a-node for |prepend()|, + * |append()|, |before()|, |after()|, and |replaceWith()| APIs. + */ +static already_AddRefed<nsINode> +ConvertNodesOrStringsIntoNode(const Sequence<OwningNodeOrString>& aNodes, + nsIDocument* aDocument, + ErrorResult& aRv) +{ + if (aNodes.Length() == 1) { + return GetNodeFromNodeOrString(aNodes[0], aDocument); + } + + nsCOMPtr<nsINode> fragment = aDocument->CreateDocumentFragment(); + + for (const auto& node : aNodes) { + nsCOMPtr<nsINode> childNode = GetNodeFromNodeOrString(node, aDocument); + fragment->AppendChild(*childNode, aRv); + if (aRv.Failed()) { + return nullptr; + } + } + + return fragment.forget(); +} + +static void +InsertNodesIntoHashset(const Sequence<OwningNodeOrString>& aNodes, + nsTHashtable<nsPtrHashKey<nsINode>>& aHashset) +{ + for (const auto& node : aNodes) { + if (node.IsNode()) { + aHashset.PutEntry(node.GetAsNode()); + } + } +} + +static nsINode* +FindViablePreviousSibling(const nsINode& aNode, + const Sequence<OwningNodeOrString>& aNodes) +{ + nsTHashtable<nsPtrHashKey<nsINode>> nodeSet(16); + InsertNodesIntoHashset(aNodes, nodeSet); + + nsINode* viablePreviousSibling = nullptr; + for (nsINode* sibling = aNode.GetPreviousSibling(); sibling; + sibling = sibling->GetPreviousSibling()) { + if (!nodeSet.Contains(sibling)) { + viablePreviousSibling = sibling; + break; + } + } + + return viablePreviousSibling; +} + +static nsINode* +FindViableNextSibling(const nsINode& aNode, + const Sequence<OwningNodeOrString>& aNodes) +{ + nsTHashtable<nsPtrHashKey<nsINode>> nodeSet(16); + InsertNodesIntoHashset(aNodes, nodeSet); + + nsINode* viableNextSibling = nullptr; + for (nsINode* sibling = aNode.GetNextSibling(); sibling; + sibling = sibling->GetNextSibling()) { + if (!nodeSet.Contains(sibling)) { + viableNextSibling = sibling; + break; + } + } + + return viableNextSibling; +} + +void +nsINode::Before(const Sequence<OwningNodeOrString>& aNodes, + ErrorResult& aRv) +{ + nsCOMPtr<nsINode> parent = GetParentNode(); + if (!parent) { + return; + } + + nsINode* viablePreviousSibling = FindViablePreviousSibling(*this, aNodes); + + nsCOMPtr<nsINode> node = + ConvertNodesOrStringsIntoNode(aNodes, OwnerDoc(), aRv); + if (aRv.Failed()) { + return; + } + + viablePreviousSibling = viablePreviousSibling ? + viablePreviousSibling->GetNextSibling() : parent->GetFirstChild(); + + parent->InsertBefore(*node, viablePreviousSibling, aRv); +} + +void +nsINode::After(const Sequence<OwningNodeOrString>& aNodes, + ErrorResult& aRv) +{ + nsCOMPtr<nsINode> parent = GetParentNode(); + if (!parent) { + return; + } + + nsINode* viableNextSibling = FindViableNextSibling(*this, aNodes); + + nsCOMPtr<nsINode> node = + ConvertNodesOrStringsIntoNode(aNodes, OwnerDoc(), aRv); + if (aRv.Failed()) { + return; + } + + parent->InsertBefore(*node, viableNextSibling, aRv); +} + +void +nsINode::ReplaceWith(const Sequence<OwningNodeOrString>& aNodes, + ErrorResult& aRv) +{ + nsCOMPtr<nsINode> parent = GetParentNode(); + if (!parent) { + return; + } + + nsINode* viableNextSibling = FindViableNextSibling(*this, aNodes); + + nsCOMPtr<nsINode> node = + ConvertNodesOrStringsIntoNode(aNodes, OwnerDoc(), aRv); + if (aRv.Failed()) { + return; + } + + if (parent == GetParentNode()) { + parent->ReplaceChild(*node, *this, aRv); + } else { + parent->InsertBefore(*node, viableNextSibling, aRv); + } +} + void nsINode::Remove() { nsCOMPtr<nsINode> parent = GetParentNode(); if (!parent) { return; } int32_t index = parent->IndexOf(this); @@ -1696,16 +1857,42 @@ nsINode::GetLastElementChild() const return child->AsElement(); } } return nullptr; } void +nsINode::Prepend(const Sequence<OwningNodeOrString>& aNodes, + ErrorResult& aRv) +{ + nsCOMPtr<nsINode> node = + ConvertNodesOrStringsIntoNode(aNodes, OwnerDoc(), aRv); + if (aRv.Failed()) { + return; + } + + InsertBefore(*node, mFirstChild, aRv); +} + +void +nsINode::Append(const Sequence<OwningNodeOrString>& aNodes, + ErrorResult& aRv) +{ + nsCOMPtr<nsINode> node = + ConvertNodesOrStringsIntoNode(aNodes, OwnerDoc(), aRv); + if (aRv.Failed()) { + return; + } + + AppendChild(*node, aRv); +} + +void nsINode::doRemoveChildAt(uint32_t aIndex, bool aNotify, nsIContent* aKid, nsAttrAndChildArray& aChildArray) { NS_PRECONDITION(aKid && aKid->GetParentNode() == this && aKid == GetChildAt(aIndex) && IndexOf(aKid) == (int32_t)aIndex, "Bogus aKid"); nsMutationGuard::DidMutate();
--- a/dom/base/nsINode.h +++ b/dom/base/nsINode.h @@ -71,16 +71,18 @@ inline bool IsSpaceCharacter(char aChar) struct BoxQuadOptions; struct ConvertCoordinateOptions; class DOMPoint; class DOMQuad; class DOMRectReadOnly; class Element; class EventHandlerNonNull; template<typename T> class Optional; +class OwningNodeOrString; +template<typename> class Sequence; class Text; class TextOrElementOrDocument; struct DOMPointInit; } // namespace dom } // namespace mozilla #define NODE_FLAG_BIT(n_) \ (nsWrapperCache::FlagsType(1U) << (WRAPPER_CACHE_FLAGS_BITS_USED + (n_))) @@ -263,19 +265,23 @@ class nsINode : public mozilla::dom::Eve { public: typedef mozilla::dom::BoxQuadOptions BoxQuadOptions; typedef mozilla::dom::ConvertCoordinateOptions ConvertCoordinateOptions; typedef mozilla::dom::DOMPoint DOMPoint; typedef mozilla::dom::DOMPointInit DOMPointInit; typedef mozilla::dom::DOMQuad DOMQuad; typedef mozilla::dom::DOMRectReadOnly DOMRectReadOnly; + typedef mozilla::dom::OwningNodeOrString OwningNodeOrString; typedef mozilla::dom::TextOrElementOrDocument TextOrElementOrDocument; typedef mozilla::ErrorResult ErrorResult; + template<class T> + using Sequence = mozilla::dom::Sequence<T>; + NS_DECLARE_STATIC_IID_ACCESSOR(NS_INODE_IID) // Among the sub-classes that inherit (directly or indirectly) from nsINode, // measurement of the following members may be added later if DMD finds it is // worthwhile: // - nsGenericHTMLElement: mForm, mFieldSet // - nsGenericHTMLFrameElement: mFrameLoader (bug 672539) // - HTMLBodyElement: mContentStyleRule @@ -1790,25 +1796,33 @@ public: mozilla::ErrorResult rv; parent->RemoveChild(*this, rv); return rv.StealNSResult(); } // ChildNode methods mozilla::dom::Element* GetPreviousElementSibling() const; mozilla::dom::Element* GetNextElementSibling() const; + + void Before(const Sequence<OwningNodeOrString>& aNodes, ErrorResult& aRv); + void After(const Sequence<OwningNodeOrString>& aNodes, ErrorResult& aRv); + void ReplaceWith(const Sequence<OwningNodeOrString>& aNodes, + ErrorResult& aRv); /** * Remove this node from its parent, if any. */ void Remove(); // ParentNode methods mozilla::dom::Element* GetFirstElementChild() const; mozilla::dom::Element* GetLastElementChild() const; + void Prepend(const Sequence<OwningNodeOrString>& aNodes, ErrorResult& aRv); + void Append(const Sequence<OwningNodeOrString>& aNodes, ErrorResult& aRv); + void GetBoxQuads(const BoxQuadOptions& aOptions, nsTArray<RefPtr<DOMQuad> >& aResult, mozilla::ErrorResult& aRv); already_AddRefed<DOMQuad> ConvertQuadFromNode(DOMQuad& aQuad, const TextOrElementOrDocument& aFrom, const ConvertCoordinateOptions& aOptions, ErrorResult& aRv);
--- a/dom/base/nsPIDOMWindow.h +++ b/dom/base/nsPIDOMWindow.h @@ -113,16 +113,22 @@ public: */ virtual already_AddRefed<nsPIDOMWindowOuter> GetTop() = 0; // Outer only virtual already_AddRefed<nsPIDOMWindowOuter> GetParent() = 0; virtual nsPIDOMWindowOuter* GetScriptableTop() = 0; virtual nsPIDOMWindowOuter* GetScriptableParent() = 0; virtual already_AddRefed<nsPIWindowRoot> GetTopWindowRoot() = 0; + /** + * Behavies identically to GetScriptableParent extept that it returns null + * if GetScriptableParent would return this window. + */ + virtual nsPIDOMWindowOuter* GetScriptableParentOrNull() = 0; + // Inner windows only. virtual nsresult RegisterIdleObserver(nsIIdleObserver* aIdleObserver) = 0; virtual nsresult UnregisterIdleObserver(nsIIdleObserver* aIdleObserver) = 0; virtual bool IsTopLevelWindowActive() = 0; // Outer windows only. virtual void SetActive(bool aActive)
--- a/dom/base/test/referrer_helper.js +++ b/dom/base/test/referrer_helper.js @@ -18,25 +18,26 @@ window.addEventListener("message", funct } }); /** * helper to perform an XHR * to do checkIndividualResults and resetState */ function doXHR(aUrl, onSuccess, onFail) { - var xhr = new XMLHttpRequest(); + // The server is at http[s]://example.com so we need cross-origin XHR. + var xhr = new XMLHttpRequest({mozSystem: true}); xhr.responseType = "json"; xhr.onload = function () { onSuccess(xhr); }; xhr.onerror = function () { onFail(xhr); }; - xhr.open('GET', aUrl, true); + xhr.open('GET', "http" + aUrl, true); xhr.send(null); } /** * Grabs the results via XHR and passes to checker. */ function checkIndividualResults(aTestname, aExpectedReferrer, aName) { var onload = xhr => { @@ -64,16 +65,18 @@ function resetState() { /** * testing if anchor and area referrer attributes are honoured (1174913) */ var tests = (function() { // enable referrer attribute yield SpecialPowers.pushPrefEnv({"set": [['network.http.enablePerElementReferrer', true]]}, advance); + yield SpecialPowers.pushPrefEnv({"set": [['security.mixed_content.block_active_content', false]]}, advance); + yield SpecialPowers.pushPermissions([{'type': 'systemXHR', 'allow': true, 'context': document}], advance); var iframe = document.getElementById("testframe"); for (var j = 0; j < testCases.length; j++) { var actions = testCases[j].ACTION; var tests = testCases[j].TESTS; for (var k = 0; k < actions.length; k++) { var actionString = actions[k]; @@ -82,17 +85,18 @@ var tests = (function() { var searchParams = new URLSearchParams(); searchParams.append("ACTION", actionString); searchParams.append("NAME", tests[i].NAME); for (var l of PARAMS) { if (tests[i][l]) { searchParams.append(l, tests[i][l]); } } - yield iframe.src = SJS + searchParams.toString(); + var schemeFrom = tests[i].SCHEME_FROM || "http"; + yield iframe.src = schemeFrom + SJS + searchParams.toString(); yield checkIndividualResults(tests[i].DESC, tests[i].RESULT, tests[i].NAME); }; }; }; // complete. Be sure to yield so we don't call this twice. yield SimpleTest.finish(); })(); \ No newline at end of file
--- a/dom/base/test/referrer_testserver.sjs +++ b/dom/base/test/referrer_testserver.sjs @@ -11,27 +11,31 @@ const BASE_URL = "example.com/tests/dom/ const SHARED_KEY = SJS; const SAME_ORIGIN = "mochi.test:8888/tests/dom/base/test/" + SJS; const CROSS_ORIGIN = "test1.example.com/tests/dom/base/test/" + SJS; const IMG_BYTES = atob( "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12" + "P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="); -function createTestUrl(aPolicy, aAction, aName, aType) { - return "http://" + BASE_URL + +function createTestUrl(aPolicy, aAction, aName, aType, aSchemeFrom, aSchemeTo) { + var schemeTo = aSchemeTo || "http"; + var schemeFrom = aSchemeFrom || "http"; + return schemeTo + "://" + BASE_URL + "ACTION=" + aAction + "&" + "policy=" + aPolicy + "&" + "NAME=" + aName + "&" + - "type=" + aType; + "type=" + aType + "&" + + "SCHEME_FROM=" + schemeFrom; } // test page using iframe referrer attribute // if aParams are set this creates a test where the iframe url is a redirect -function createIframeTestPageUsingRefferer(aMetaPolicy, aAttributePolicy, aNewAttributePolicy, aName, aParams, aChangingMethod) { +function createIframeTestPageUsingRefferer(aMetaPolicy, aAttributePolicy, aNewAttributePolicy, aName, aParams, + aSchemeFrom, aSchemeTo, aChangingMethod) { var metaString = ""; if (aMetaPolicy) { metaString = `<meta name="referrer" content="${aMetaPolicy}">`; } var changeString = ""; if (aChangingMethod === "setAttribute") { changeString = `document.getElementById("myframe").setAttribute("referrerpolicy", "${aNewAttributePolicy}")`; } else if (aChangingMethod === "property") { @@ -39,17 +43,17 @@ function createIframeTestPageUsingReffer } var iFrameString = `<iframe src="" id="myframe" ${aAttributePolicy ? ` referrerpolicy="${aAttributePolicy}"` : ""}>iframe</iframe>`; var iframeUrl = ""; if (aParams) { aParams.delete("ACTION"); aParams.append("ACTION", "redirectIframe"); iframeUrl = "http://" + CROSS_ORIGIN + aParams.toString(); } else { - iframeUrl = createTestUrl(aAttributePolicy, "test", aName, "iframe"); + iframeUrl = createTestUrl(aAttributePolicy, "test", aName, "iframe", aSchemeFrom, aSchemeTo); } return `<!DOCTYPE HTML> <html> <head> ${metaString} </head> <body> @@ -62,53 +66,53 @@ function createIframeTestPageUsingReffer }; document.getElementById("myframe").src = "${iframeUrl}"; }.bind(window), false); </script> </body> </html>`; } -function buildAnchorString(aMetaPolicy, aReferrerPolicy, aName, aRelString){ +function buildAnchorString(aMetaPolicy, aReferrerPolicy, aName, aRelString, aSchemeFrom, aSchemeTo){ if (aReferrerPolicy) { - return `<a href="${createTestUrl(aReferrerPolicy, 'test', aName, 'link')}" referrerpolicy="${aReferrerPolicy}" id="link" ${aRelString}>${aReferrerPolicy}</a>`; + return `<a href="${createTestUrl(aReferrerPolicy, 'test', aName, 'link', aSchemeFrom, aSchemeTo)}" referrerpolicy="${aReferrerPolicy}" id="link" ${aRelString}>${aReferrerPolicy}</a>`; } - return `<a href="${createTestUrl(aMetaPolicy, 'test', aName, 'link')}" id="link" ${aRelString}>link</a>`; + return `<a href="${createTestUrl(aMetaPolicy, 'test', aName, 'link', aSchemeFrom, aSchemeTo)}" id="link" ${aRelString}>link</a>`; } -function buildAreaString(aMetaPolicy, aReferrerPolicy, aName, aRelString){ +function buildAreaString(aMetaPolicy, aReferrerPolicy, aName, aRelString, aSchemeFrom, aSchemeTo){ var result = `<img src="file_mozfiledataurl_img.jpg" alt="image" usemap="#imageMap">`; result += `<map name="imageMap">`; if (aReferrerPolicy) { - result += `<area shape="circle" coords="1,1,1" href="${createTestUrl(aReferrerPolicy, 'test', aName, 'link')}" alt="theArea" referrerpolicy="${aReferrerPolicy}" id="link" ${aRelString}>`; + result += `<area shape="circle" coords="1,1,1" href="${createTestUrl(aReferrerPolicy, 'test', aName, 'link', aSchemeFrom, aSchemeTo)}" alt="theArea" referrerpolicy="${aReferrerPolicy}" id="link" ${aRelString}>`; } else { - result += `<area shape="circle" coords="1,1,1" href="${createTestUrl(aMetaPolicy, 'test', aName, 'link')}" alt="theArea" id="link" ${aRelString}>`; + result += `<area shape="circle" coords="1,1,1" href="${createTestUrl(aMetaPolicy, 'test', aName, 'link', aSchemeFrom, aSchemeTo)}" alt="theArea" id="link" ${aRelString}>`; } result += `</map>`; return result; } // test page using anchor or area referrer attribute -function createAETestPageUsingRefferer(aMetaPolicy, aAttributePolicy, aNewAttributePolicy, aName, aRel, aStringBuilder, aChangingMethod) { +function createAETestPageUsingRefferer(aMetaPolicy, aAttributePolicy, aNewAttributePolicy, aName, aRel, aStringBuilder, aSchemeFrom, aSchemeTo, aChangingMethod) { var metaString = ""; if (aMetaPolicy) { metaString = `<head><meta name="referrer" content="${aMetaPolicy}"></head>`; } var changeString = ""; if (aChangingMethod === "setAttribute") { changeString = `document.getElementById("link").setAttribute("referrerpolicy", "${aNewAttributePolicy}")`; } else if (aChangingMethod === "property") { changeString = `document.getElementById("link").referrerPolicy = "${aNewAttributePolicy}"`; } var relString = ""; if (aRel) { relString = `rel="noreferrer"`; } - var elementString = aStringBuilder(aMetaPolicy, aAttributePolicy, aName, relString); + var elementString = aStringBuilder(aMetaPolicy, aAttributePolicy, aName, relString, aSchemeFrom, aSchemeTo); return `<!DOCTYPE HTML> <html> ${metaString} <body> ${elementString} <script> window.addEventListener("load", function() { @@ -146,16 +150,18 @@ function createRedirectImgTestCase(aPara </script> </body> </html>`; } function handleRequest(request, response) { var params = new URLSearchParams(request.queryString); var action = params.get("ACTION"); + var schemeFrom = params.get("SCHEME_FROM") || "http"; + var schemeTo = params.get("SCHEME_TO") || "http"; if (action === "resetState") { setSharedState(SHARED_KEY, "{}"); response.write(""); return; } if (action === "get-test-results") { // ?action=get-result @@ -196,17 +202,17 @@ function handleRequest(request, response result = result ? JSON.parse(result) : {}; var referrerLevel = "none"; var test = {} if (request.hasHeader("Referer")) { var referrer = request.getHeader("Referer"); if (referrer.indexOf("referrer_testserver") > 0) { referrerLevel = "full"; - } else if (referrer.indexOf("http://mochi.test:8888") == 0) { + } else if (referrer.indexOf(schemeFrom + "://example.com") == 0) { referrerLevel = "origin"; } else { // this is never supposed to happen referrerLevel = "other-origin"; } test.referrer = referrer; } else { test.referrer = ""; @@ -245,18 +251,18 @@ function handleRequest(request, response var attributePolicy = params.get("ATTRIBUTE_POLICY") || ""; var newAttributePolicy = params.get("NEW_ATTRIBUTE_POLICY") || ""; var metaPolicy = params.get("META_POLICY") || ""; var rel = params.get("REL") || ""; var name = params.get("NAME"); // anchor & area var _getPage = createAETestPageUsingRefferer.bind(null, metaPolicy, attributePolicy, newAttributePolicy, name, rel); - var _getAnchorPage = _getPage.bind(null, buildAnchorString); - var _getAreaPage = _getPage.bind(null, buildAreaString); + var _getAnchorPage = _getPage.bind(null, buildAnchorString, schemeFrom, schemeTo); + var _getAreaPage = _getPage.bind(null, buildAreaString, schemeFrom, schemeTo); // aMetaPolicy, aAttributePolicy, aNewAttributePolicy, aName, aChangingMethod, aStringBuilder if (action === "generate-anchor-policy-test") { response.write(_getAnchorPage()); return; } if (action === "generate-anchor-changing-policy-test-set-attribute") { response.write(_getAnchorPage("setAttribute")); @@ -275,17 +281,18 @@ function handleRequest(request, response return; } if (action === "generate-area-changing-policy-test-property") { response.write(_getAreaPage("property")); return; } // iframe - _getPage = createIframeTestPageUsingRefferer.bind(null, metaPolicy, attributePolicy, newAttributePolicy, name, ""); + _getPage = createIframeTestPageUsingRefferer.bind(null, metaPolicy, attributePolicy, newAttributePolicy, name, "", + schemeFrom, schemeTo); // aMetaPolicy, aAttributePolicy, aNewAttributePolicy, aName, aChangingMethod if (action === "generate-iframe-policy-test") { response.write(_getPage()); return; } if (action === "generate-iframe-changing-policy-test-set-attribute") { response.write(_getPage("setAttribute")); @@ -297,15 +304,16 @@ function handleRequest(request, response } // redirect tests with img and iframe if (action === "generate-img-redirect-policy-test") { response.write(createRedirectImgTestCase(params, attributePolicy)); return; } if (action === "generate-iframe-redirect-policy-test") { - response.write(createIframeTestPageUsingRefferer(metaPolicy, attributePolicy, newAttributePolicy, name, params)); + response.write(createIframeTestPageUsingRefferer(metaPolicy, attributePolicy, newAttributePolicy, name, params, + schemeFrom, schemeTo)); return; } response.write("I don't know action " + action); return; }
--- a/dom/base/test/test_anchor_area_referrer.html +++ b/dom/base/test/test_anchor_area_referrer.html @@ -9,18 +9,18 @@ <!-- Testing that anchor and area referrer attributes are honoured correctly * anchor tag with referrer attribute (generate-anchor-policy-test) https://bugzilla.mozilla.org/show_bug.cgi?id=1174913 --> <script type="application/javascript;version=1.8"> - const SJS = "/tests/dom/base/test/referrer_testserver.sjs?"; - const PARAMS = ["ATTRIBUTE_POLICY", "NEW_ATTRIBUTE_POLICY", "META_POLICY", "REL"]; + const SJS = "://example.com/tests/dom/base/test/referrer_testserver.sjs?"; + const PARAMS = ["ATTRIBUTE_POLICY", "NEW_ATTRIBUTE_POLICY", "META_POLICY", "REL", "SCHEME_FROM", "SCHEME_TO"]; const testCases = [ {ACTION: ["generate-anchor-policy-test", "generate-area-policy-test"], TESTS: [ {ATTRIBUTE_POLICY: 'unsafe-url', NAME: 'unsafe-url-with-origin-in-meta', META_POLICY: 'origin', DESC: "unsafe-url (anchor) with origin in meta", @@ -34,16 +34,38 @@ NAME: 'no-referrer-with-origin-in-meta', META_POLICY: 'origin', DESC: "no-referrer (anchor) with origin in meta", RESULT: 'none'}, {NAME: 'no-referrer-in-meta', META_POLICY: 'no-referrer', DESC: "no-referrer in meta", RESULT: 'none'}, + + // Test if element attr would override meta referr policy. + + // 1. Downgrade. + {ATTRIBUTE_POLICY: 'no-referrer-when-downgrade', + NAME: 'origin-in-meta-downgrade-in-attr', + META_POLICY: 'origin', + DESC: 'origin in meta downgrade in attr', + SCHEME_FROM: 'https', + SCHEME_TO: 'http', + RESULT: 'none'}, + + // 2. No downgrade. + {ATTRIBUTE_POLICY: 'no-referrer-when-downgrade', + NAME: 'origin-in-meta-downgrade-in-attr', + META_POLICY: 'origin', + DESC: 'origin in meta downgrade in attr', + SCHEME_FROM: 'https', + SCHEME_TO: 'https', + RESULT: 'full'}, + // End of element attr overriding test.. + {ATTRIBUTE_POLICY: 'origin', NAME: 'origin-with-no-meta', META_POLICY: '', DESC: "origin (anchor) with no meta", RESULT: 'origin'}]} ]; </script> <script type="application/javascript;version=1.7" src="/tests/dom/base/test/referrer_helper.js"></script>
--- a/dom/base/test/test_anchor_area_referrer_changing.html +++ b/dom/base/test/test_anchor_area_referrer_changing.html @@ -10,17 +10,17 @@ Testing that anchor and area referrer attributes are honoured correctly This test is split due to errors on b2g * testing setAttribute and .referrer (generate-anchor-changing-test) https://bugzilla.mozilla.org/show_bug.cgi?id=1174913 --> <script type="application/javascript;version=1.8"> - const SJS = "/tests/dom/base/test/referrer_testserver.sjs?"; + const SJS = "://example.com/tests/dom/base/test/referrer_testserver.sjs?"; const PARAMS = ["ATTRIBUTE_POLICY", "NEW_ATTRIBUTE_POLICY", "META_POLICY", "REL"]; const testCases = [ {ACTION: ["generate-anchor-changing-policy-test-set-attribute", "generate-area-changing-policy-test-set-attribute"], TESTS: [ {ATTRIBUTE_POLICY: 'unsafe-url', NEW_ATTRIBUTE_POLICY: 'no-referrer', NAME: 'no-referrer-unsafe-url-with-origin-in-meta',
--- a/dom/base/test/test_anchor_area_referrer_invalid.html +++ b/dom/base/test/test_anchor_area_referrer_invalid.html @@ -9,52 +9,63 @@ <!-- Testing that anchor and area referrer attributes are honoured correctly * anchor tag with invalid referrer attributes https://bugzilla.mozilla.org/show_bug.cgi?id=1174913 --> <script type="application/javascript;version=1.8"> - const SJS = "/tests/dom/base/test/referrer_testserver.sjs?"; - const PARAMS = ["ATTRIBUTE_POLICY", "NEW_ATTRIBUTE_POLICY", "META_POLICY", "REL"]; + const SJS = "://example.com/tests/dom/base/test/referrer_testserver.sjs?"; + const PARAMS = ["ATTRIBUTE_POLICY", "NEW_ATTRIBUTE_POLICY", "META_POLICY", "REL", , "SCHEME_FROM", "SCHEME_TO"]; const testCases = [ {ACTION: ["generate-anchor-policy-test", "generate-area-policy-test"], TESTS: [ // setting invalid refer values -> we expect either full referrer (default) // or whatever is specified in the meta referrer policy + + // Note that for those test cases which require cross-origin test, we use different + // scheme to result in cross-origin request. {ATTRIBUTE_POLICY: 'origin-when-cross-origin', NAME: 'origin-when-cross-origin-with-no-meta', META_POLICY: '', + SCHEME_FROM: 'https', + SCHEME_TO: 'http', DESC: "origin-when-cross-origin (anchor) with no meta", - RESULT: 'full'}, + RESULT: 'origin'}, {ATTRIBUTE_POLICY: 'default', NAME: 'default-with-no-meta', META_POLICY: '', DESC: "default (anchor) with no meta", RESULT: 'full'}, {ATTRIBUTE_POLICY: 'something', NAME: 'something-with-no-meta', META_POLICY: '', DESC: "something (anchor) with no meta", RESULT: 'full'}, {ATTRIBUTE_POLICY: 'origin-when-cross-origin', NAME: 'origin-when-cross-origin-with-no-referrer-in-meta', META_POLICY: 'no-referrer', + SCHEME_FROM: 'https', + SCHEME_TO: 'http', DESC: "origin-when-cross-origin (anchor) with no-referrer in meta", - RESULT: 'none'}, + RESULT: 'origin'}, {ATTRIBUTE_POLICY: 'origin-when-cross-origin', NAME: 'origin-when-cross-origin-with-unsafe-url-in-meta', META_POLICY: 'unsafe-url', + SCHEME_FROM: 'https', + SCHEME_TO: 'http', DESC: "origin-when-cross-origin (anchor) with unsafe-url in meta", - RESULT: 'full'}, + RESULT: 'origin'}, {ATTRIBUTE_POLICY: 'origin-when-cross-origin', NAME: 'origin-when-cross-origin-with-origin-in-meta', META_POLICY: 'origin', + SCHEME_FROM: 'https', + SCHEME_TO: 'http', DESC: "origin-when-cross-origin (anchor) with origin in meta", RESULT: 'origin'}]} ]; </script> <script type="application/javascript;version=1.7" src="/tests/dom/base/test/referrer_helper.js"></script> </head> <body onload="tests.next();"> <iframe id="testframe"></iframe>
--- a/dom/base/test/test_anchor_area_referrer_rel.html +++ b/dom/base/test/test_anchor_area_referrer_rel.html @@ -9,17 +9,17 @@ <!-- Testing that anchor and area referrer attributes are honoured correctly * anchor tag with referrer attribute with rel=noreferrer https://bugzilla.mozilla.org/show_bug.cgi?id=1174913 --> <script type="application/javascript;version=1.8"> - const SJS = "/tests/dom/base/test/referrer_testserver.sjs?"; + const SJS = "://example.com/tests/dom/base/test/referrer_testserver.sjs?"; const PARAMS = ["ATTRIBUTE_POLICY", "NEW_ATTRIBUTE_POLICY", "META_POLICY", "REL"]; const testCases = [ {ACTION: ["generate-anchor-policy-test", "generate-area-policy-test"], TESTS: [ // setting rel=noreferrer -> we expect no referrer {ATTRIBUTE_POLICY: 'unsafe-url', NAME: 'unsafe-url-with-origin-in-meta-rel',
--- a/dom/base/test/test_iframe_referrer.html +++ b/dom/base/test/test_iframe_referrer.html @@ -10,17 +10,17 @@ Testing that iframe referrer attribute is honoured correctly * regular loads * regression tests that meta referrer is still working even if attribute referrers are enabled https://bugzilla.mozilla.org/show_bug.cgi?id=1175736 --> <script type="application/javascript;version=1.7"> - const SJS = "/tests/dom/base/test/referrer_testserver.sjs?"; + const SJS = "://example.com/tests/dom/base/test/referrer_testserver.sjs?"; const PARAMS = ["ATTRIBUTE_POLICY", "NEW_ATTRIBUTE_POLICY", "META_POLICY"]; const testCases = [ {ACTION: ["generate-iframe-policy-test"], TESTS: [ {ATTRIBUTE_POLICY: 'unsafe-url', NAME: 'unsafe-url-with-origin-in-meta', META_POLICY: 'origin',
--- a/dom/base/test/test_iframe_referrer_changing.html +++ b/dom/base/test/test_iframe_referrer_changing.html @@ -9,17 +9,17 @@ <!-- Testing that iframe referrer attribute is honoured correctly * testing setAttribute and .referrer https://bugzilla.mozilla.org/show_bug.cgi?id=1175736 --> <script type="application/javascript;version=1.7"> - const SJS = "/tests/dom/base/test/referrer_testserver.sjs?"; + const SJS = "://example.com/tests/dom/base/test/referrer_testserver.sjs?"; const PARAMS = ["ATTRIBUTE_POLICY", "NEW_ATTRIBUTE_POLICY", "META_POLICY"]; const testCases = [ {ACTION: ["generate-iframe-changing-policy-test-set-attribute"], TESTS: [ {ATTRIBUTE_POLICY: 'unsafe-url', NEW_ATTRIBUTE_POLICY: 'no-referrer', NAME: 'no-referrer-unsafe-url-with-origin-in-meta',
--- a/dom/base/test/test_iframe_referrer_invalid.html +++ b/dom/base/test/test_iframe_referrer_invalid.html @@ -9,53 +9,64 @@ <!-- Testing that iframe referrer attribute is honoured correctly * invalid referrer policies https://bugzilla.mozilla.org/show_bug.cgi?id=1175736 --> <script type="application/javascript;version=1.7"> - const SJS = "/tests/dom/base/test/referrer_testserver.sjs?"; - const PARAMS = ["ATTRIBUTE_POLICY", "NEW_ATTRIBUTE_POLICY", "META_POLICY"]; + const SJS = "://example.com/tests/dom/base/test/referrer_testserver.sjs?"; + const PARAMS = ["ATTRIBUTE_POLICY", "NEW_ATTRIBUTE_POLICY", "META_POLICY", "SCHEME_FROM", "SCHEME_TO"]; const testCases = [ {ACTION: ["generate-iframe-policy-test"], TESTS: [ // setting invalid refer values -> we expect either full referrer (default) // or whatever is specified in the meta referrer policy + + // Note that for those test cases which require cross-origin test, we use different + // scheme to result in cross-origin request. {ATTRIBUTE_POLICY: 'origin-when-cross-origin', NAME: 'origin-when-cross-origin-with-no-meta', META_POLICY: '', DESC: "origin-when-cross-origin (iframe) with no meta", - RESULT: 'full'}, + SCHEME_FROM: 'https', + SCHEME_TO: 'http', + RESULT: 'origin'}, {ATTRIBUTE_POLICY: 'default', NAME: 'default-with-no-meta', META_POLICY: '', DESC: "default (iframe) with no meta", RESULT: 'full'}, {ATTRIBUTE_POLICY: 'something', NAME: 'something-with-no-meta', META_POLICY: '', DESC: "something (iframe) with no meta", RESULT: 'full'}, {ATTRIBUTE_POLICY: 'origin-when-cross-origin', NAME: 'origin-when-cross-origin-with-no-referrer-in-meta', META_POLICY: 'no-referrer', DESC: "origin-when-cross-origin (iframe) with no-referrer in meta", - RESULT: 'none'}, + SCHEME_FROM: 'https', + SCHEME_TO: 'http', + RESULT: 'origin'}, {ATTRIBUTE_POLICY: 'origin-when-cross-origin', NAME: 'origin-when-cross-origin-with-unsafe-url-in-meta', META_POLICY: 'unsafe-url', DESC: "origin-when-cross-origin (iframe) with unsafe-url in meta", - RESULT: 'full'}, + SCHEME_FROM: 'https', + SCHEME_TO: 'http', + RESULT: 'origin'}, {ATTRIBUTE_POLICY: 'origin-when-cross-origin', NAME: 'origin-when-cross-origin-with-origin-in-meta', META_POLICY: 'origin', DESC: "origin-when-cross-origin (iframe) with origin in meta", + SCHEME_FROM: 'https', + SCHEME_TO: 'http', RESULT: 'origin'}, {NAME: 'origin-in-meta', META_POLICY: 'origin', DESC: "origin in meta", RESULT: 'origin'}, {NAME: 'no-referrer-in-meta', META_POLICY: 'no-referrer', DESC: "no-referrer in meta",
--- a/dom/base/test/test_referrer_redirect.html +++ b/dom/base/test/test_referrer_redirect.html @@ -8,17 +8,17 @@ <!-- Testing referrer headers after redirects. https://bugzilla.mozilla.org/show_bug.cgi?id=1184781 --> <script type="application/javascript;version=1.8"> - const SJS = "/tests/dom/base/test/referrer_testserver.sjs?"; + const SJS = "://example.com/tests/dom/base/test/referrer_testserver.sjs?"; const PARAMS = ["ATTRIBUTE_POLICY", "NEW_ATTRIBUTE_POLICY", "META_POLICY"]; const testCases = [ {ACTION: ["generate-img-redirect-policy-test", "generate-iframe-redirect-policy-test"], TESTS: [ { ATTRIBUTE_POLICY: "no-referrer", NAME: "no-referrer-with-no-meta",
--- a/dom/canvas/moz.build +++ b/dom/canvas/moz.build @@ -6,18 +6,19 @@ TEST_DIRS += ['compiledtest'] # Number changes to this file to avoid bug 1081323 (clobber after changing a manifest): # 12 MOCHITEST_MANIFESTS += [ 'test/crossorigin/mochitest.ini', - 'test/mochitest-subsuite-webgl.ini', 'test/mochitest.ini', + 'test/webgl-conf/generated-mochitest.ini', + 'test/webgl-mochitest/mochitest.ini', ] MOCHITEST_CHROME_MANIFESTS += ['test/chrome/chrome.ini'] EXPORTS += [ 'nsICanvasRenderingContextInternal.h', ]
deleted file mode 100644 --- a/dom/canvas/test/_webgl-conformance.ini +++ /dev/null @@ -1,847 +0,0 @@ -# This is a GENERATED FILE. Do not edit it directly. -# Regenerated it by using `python generate-wrappers-and-manifest.py`. -# Mark skipped tests in mochitest-errata.ini. -# Mark failing tests in mochi-single.html. - -[DEFAULT] -subsuite = webgl -skip-if = os == 'b2g' || ((os == 'linux') && (buildapp == 'b2g')) || ((os == 'linux') && (buildapp == 'mulet')) - -support-files = webgl-conformance/../webgl-mochitest/driver-info.js - webgl-conformance/always-fail.html - webgl-conformance/conformance/00_readme.txt - webgl-conformance/conformance/00_test_list.txt - webgl-conformance/conformance/LICENSE_CHROMIUM - webgl-conformance/conformance/attribs/00_test_list.txt - webgl-conformance/conformance/attribs/gl-enable-vertex-attrib.html - webgl-conformance/conformance/attribs/gl-vertex-attrib-zero-issues.html - webgl-conformance/conformance/attribs/gl-vertex-attrib.html - webgl-conformance/conformance/attribs/gl-vertexattribpointer-offsets.html - webgl-conformance/conformance/attribs/gl-vertexattribpointer.html - webgl-conformance/conformance/buffers/00_test_list.txt - webgl-conformance/conformance/buffers/buffer-bind-test.html - webgl-conformance/conformance/buffers/buffer-data-array-buffer.html - webgl-conformance/conformance/buffers/index-validation-copies-indices.html - webgl-conformance/conformance/buffers/index-validation-crash-with-buffer-sub-data.html - webgl-conformance/conformance/buffers/index-validation-verifies-too-many-indices.html - webgl-conformance/conformance/buffers/index-validation-with-resized-buffer.html - webgl-conformance/conformance/buffers/index-validation.html - webgl-conformance/conformance/canvas/00_test_list.txt - webgl-conformance/conformance/canvas/buffer-offscreen-test.html - webgl-conformance/conformance/canvas/buffer-preserve-test.html - webgl-conformance/conformance/canvas/canvas-test.html - webgl-conformance/conformance/canvas/canvas-zero-size.html - webgl-conformance/conformance/canvas/drawingbuffer-static-canvas-test.html - webgl-conformance/conformance/canvas/drawingbuffer-test.html - webgl-conformance/conformance/canvas/viewport-unchanged-upon-resize.html - webgl-conformance/conformance/context/00_test_list.txt - webgl-conformance/conformance/context/constants.html - webgl-conformance/conformance/context/context-attribute-preserve-drawing-buffer.html - webgl-conformance/conformance/context/context-attributes-alpha-depth-stencil-antialias.html - webgl-conformance/conformance/context/context-lost-restored.html - webgl-conformance/conformance/context/context-lost.html - webgl-conformance/conformance/context/context-type-test.html - webgl-conformance/conformance/context/incorrect-context-object-behaviour.html - webgl-conformance/conformance/context/methods.html - webgl-conformance/conformance/context/premultiplyalpha-test.html - webgl-conformance/conformance/context/resource-sharing-test.html - webgl-conformance/conformance/extensions/00_test_list.txt - webgl-conformance/conformance/extensions/ext-sRGB.html - webgl-conformance/conformance/extensions/ext-shader-texture-lod.html - webgl-conformance/conformance/extensions/ext-texture-filter-anisotropic.html - webgl-conformance/conformance/extensions/oes-standard-derivatives.html - webgl-conformance/conformance/extensions/oes-texture-float.html - webgl-conformance/conformance/extensions/oes-vertex-array-object.html - webgl-conformance/conformance/extensions/webgl-compressed-texture-etc1.html - webgl-conformance/conformance/extensions/webgl-compressed-texture-s3tc.html - webgl-conformance/conformance/extensions/webgl-debug-renderer-info.html - webgl-conformance/conformance/extensions/webgl-debug-shaders.html - webgl-conformance/conformance/extensions/webgl-depth-texture.html - webgl-conformance/conformance/glsl/00_test_list.txt - webgl-conformance/conformance/glsl/functions/00_test_list.txt - webgl-conformance/conformance/glsl/functions/glsl-function-abs.html - webgl-conformance/conformance/glsl/functions/glsl-function-acos.html - webgl-conformance/conformance/glsl/functions/glsl-function-asin.html - webgl-conformance/conformance/glsl/functions/glsl-function-atan-xy.html - webgl-conformance/conformance/glsl/functions/glsl-function-atan.html - webgl-conformance/conformance/glsl/functions/glsl-function-ceil.html - webgl-conformance/conformance/glsl/functions/glsl-function-clamp-float.html - webgl-conformance/conformance/glsl/functions/glsl-function-clamp-gentype.html - webgl-conformance/conformance/glsl/functions/glsl-function-cos.html - webgl-conformance/conformance/glsl/functions/glsl-function-cross.html - webgl-conformance/conformance/glsl/functions/glsl-function-distance.html - webgl-conformance/conformance/glsl/functions/glsl-function-dot.html - webgl-conformance/conformance/glsl/functions/glsl-function-faceforward.html - webgl-conformance/conformance/glsl/functions/glsl-function-floor.html - webgl-conformance/conformance/glsl/functions/glsl-function-fract.html - webgl-conformance/conformance/glsl/functions/glsl-function-length.html - webgl-conformance/conformance/glsl/functions/glsl-function-lessThan.html - webgl-conformance/conformance/glsl/functions/glsl-function-max-float.html - webgl-conformance/conformance/glsl/functions/glsl-function-max-gentype.html - webgl-conformance/conformance/glsl/functions/glsl-function-min-float.html - webgl-conformance/conformance/glsl/functions/glsl-function-min-gentype.html - webgl-conformance/conformance/glsl/functions/glsl-function-mix-float.html - webgl-conformance/conformance/glsl/functions/glsl-function-mix-gentype.html - webgl-conformance/conformance/glsl/functions/glsl-function-mod-float.html - webgl-conformance/conformance/glsl/functions/glsl-function-mod-gentype.html - webgl-conformance/conformance/glsl/functions/glsl-function-normalize.html - webgl-conformance/conformance/glsl/functions/glsl-function-reflect.html - webgl-conformance/conformance/glsl/functions/glsl-function-refract.html - webgl-conformance/conformance/glsl/functions/glsl-function-sign.html - webgl-conformance/conformance/glsl/functions/glsl-function-sin.html - webgl-conformance/conformance/glsl/functions/glsl-function-smoothstep-float.html - webgl-conformance/conformance/glsl/functions/glsl-function-smoothstep-gentype.html - webgl-conformance/conformance/glsl/functions/glsl-function-step-float.html - webgl-conformance/conformance/glsl/functions/glsl-function-step-gentype.html - webgl-conformance/conformance/glsl/functions/glsl-function.html - webgl-conformance/conformance/glsl/implicit/00_test_list.txt - webgl-conformance/conformance/glsl/implicit/add_int_float.vert.html - webgl-conformance/conformance/glsl/implicit/add_int_mat2.vert.html - webgl-conformance/conformance/glsl/implicit/add_int_mat3.vert.html - webgl-conformance/conformance/glsl/implicit/add_int_mat4.vert.html - webgl-conformance/conformance/glsl/implicit/add_int_vec2.vert.html - webgl-conformance/conformance/glsl/implicit/add_int_vec3.vert.html - webgl-conformance/conformance/glsl/implicit/add_int_vec4.vert.html - webgl-conformance/conformance/glsl/implicit/add_ivec2_vec2.vert.html - webgl-conformance/conformance/glsl/implicit/add_ivec3_vec3.vert.html - webgl-conformance/conformance/glsl/implicit/add_ivec4_vec4.vert.html - webgl-conformance/conformance/glsl/implicit/assign_int_to_float.vert.html - webgl-conformance/conformance/glsl/implicit/assign_ivec2_to_vec2.vert.html - webgl-conformance/conformance/glsl/implicit/assign_ivec3_to_vec3.vert.html - webgl-conformance/conformance/glsl/implicit/assign_ivec4_to_vec4.vert.html - webgl-conformance/conformance/glsl/implicit/construct_struct.vert.html - webgl-conformance/conformance/glsl/implicit/divide_int_float.vert.html - webgl-conformance/conformance/glsl/implicit/divide_int_mat2.vert.html - webgl-conformance/conformance/glsl/implicit/divide_int_mat3.vert.html - webgl-conformance/conformance/glsl/implicit/divide_int_mat4.vert.html - webgl-conformance/conformance/glsl/implicit/divide_int_vec2.vert.html - webgl-conformance/conformance/glsl/implicit/divide_int_vec3.vert.html - webgl-conformance/conformance/glsl/implicit/divide_int_vec4.vert.html - webgl-conformance/conformance/glsl/implicit/divide_ivec2_vec2.vert.html - webgl-conformance/conformance/glsl/implicit/divide_ivec3_vec3.vert.html - webgl-conformance/conformance/glsl/implicit/divide_ivec4_vec4.vert.html - webgl-conformance/conformance/glsl/implicit/equal_int_float.vert.html - webgl-conformance/conformance/glsl/implicit/equal_ivec2_vec2.vert.html - webgl-conformance/conformance/glsl/implicit/equal_ivec3_vec3.vert.html - webgl-conformance/conformance/glsl/implicit/equal_ivec4_vec4.vert.html - webgl-conformance/conformance/glsl/implicit/function_int_float.vert.html - webgl-conformance/conformance/glsl/implicit/function_ivec2_vec2.vert.html - webgl-conformance/conformance/glsl/implicit/function_ivec3_vec3.vert.html - webgl-conformance/conformance/glsl/implicit/function_ivec4_vec4.vert.html - webgl-conformance/conformance/glsl/implicit/greater_than.vert.html - webgl-conformance/conformance/glsl/implicit/greater_than_equal.vert.html - webgl-conformance/conformance/glsl/implicit/less_than.vert.html - webgl-conformance/conformance/glsl/implicit/less_than_equal.vert.html - webgl-conformance/conformance/glsl/implicit/multiply_int_float.vert.html - webgl-conformance/conformance/glsl/implicit/multiply_int_mat2.vert.html - webgl-conformance/conformance/glsl/implicit/multiply_int_mat3.vert.html - webgl-conformance/conformance/glsl/implicit/multiply_int_mat4.vert.html - webgl-conformance/conformance/glsl/implicit/multiply_int_vec2.vert.html - webgl-conformance/conformance/glsl/implicit/multiply_int_vec3.vert.html - webgl-conformance/conformance/glsl/implicit/multiply_int_vec4.vert.html - webgl-conformance/conformance/glsl/implicit/multiply_ivec2_vec2.vert.html - webgl-conformance/conformance/glsl/implicit/multiply_ivec3_vec3.vert.html - webgl-conformance/conformance/glsl/implicit/multiply_ivec4_vec4.vert.html - webgl-conformance/conformance/glsl/implicit/not_equal_int_float.vert.html - webgl-conformance/conformance/glsl/implicit/not_equal_ivec2_vec2.vert.html - webgl-conformance/conformance/glsl/implicit/not_equal_ivec3_vec3.vert.html - webgl-conformance/conformance/glsl/implicit/not_equal_ivec4_vec4.vert.html - webgl-conformance/conformance/glsl/implicit/subtract_int_float.vert.html - webgl-conformance/conformance/glsl/implicit/subtract_int_mat2.vert.html - webgl-conformance/conformance/glsl/implicit/subtract_int_mat3.vert.html - webgl-conformance/conformance/glsl/implicit/subtract_int_mat4.vert.html - webgl-conformance/conformance/glsl/implicit/subtract_int_vec2.vert.html - webgl-conformance/conformance/glsl/implicit/subtract_int_vec3.vert.html - webgl-conformance/conformance/glsl/implicit/subtract_int_vec4.vert.html - webgl-conformance/conformance/glsl/implicit/subtract_ivec2_vec2.vert.html - webgl-conformance/conformance/glsl/implicit/subtract_ivec3_vec3.vert.html - webgl-conformance/conformance/glsl/implicit/subtract_ivec4_vec4.vert.html - webgl-conformance/conformance/glsl/implicit/ternary_int_float.vert.html - webgl-conformance/conformance/glsl/implicit/ternary_ivec2_vec2.vert.html - webgl-conformance/conformance/glsl/implicit/ternary_ivec3_vec3.vert.html - webgl-conformance/conformance/glsl/implicit/ternary_ivec4_vec4.vert.html - webgl-conformance/conformance/glsl/matrices/00_test_list.txt - webgl-conformance/conformance/glsl/matrices/glsl-mat4-to-mat3.html - webgl-conformance/conformance/glsl/misc/00_test_list.txt - webgl-conformance/conformance/glsl/misc/attrib-location-length-limits.html - webgl-conformance/conformance/glsl/misc/embedded-struct-definitions-forbidden.html - webgl-conformance/conformance/glsl/misc/glsl-2types-of-textures-on-same-unit.html - webgl-conformance/conformance/glsl/misc/glsl-function-nodes.html - webgl-conformance/conformance/glsl/misc/glsl-long-variable-names.html - webgl-conformance/conformance/glsl/misc/glsl-vertex-branch.html - webgl-conformance/conformance/glsl/misc/include.vs - webgl-conformance/conformance/glsl/misc/non-ascii-comments.vert.html - webgl-conformance/conformance/glsl/misc/non-ascii.vert.html - webgl-conformance/conformance/glsl/misc/re-compile-re-link.html - webgl-conformance/conformance/glsl/misc/shader-with-256-character-identifier.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-257-character-identifier.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-_webgl-identifier.vert.html - webgl-conformance/conformance/glsl/misc/shader-with-arbitrary-indexing.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-arbitrary-indexing.vert.html - webgl-conformance/conformance/glsl/misc/shader-with-attrib-array.vert.html - webgl-conformance/conformance/glsl/misc/shader-with-attrib-struct.vert.html - webgl-conformance/conformance/glsl/misc/shader-with-clipvertex.vert.html - webgl-conformance/conformance/glsl/misc/shader-with-comma-assignment.html - webgl-conformance/conformance/glsl/misc/shader-with-comma-conditional-assignment.html - webgl-conformance/conformance/glsl/misc/shader-with-conditional-scoping.html - webgl-conformance/conformance/glsl/misc/shader-with-default-precision.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-default-precision.vert.html - webgl-conformance/conformance/glsl/misc/shader-with-define-line-continuation.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-dfdx-no-ext.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-dfdx.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-do-scoping.html - webgl-conformance/conformance/glsl/misc/shader-with-error-directive.html - webgl-conformance/conformance/glsl/misc/shader-with-explicit-int-cast.vert.html - webgl-conformance/conformance/glsl/misc/shader-with-float-return-value.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-for-loop.html - webgl-conformance/conformance/glsl/misc/shader-with-for-scoping.html - webgl-conformance/conformance/glsl/misc/shader-with-frag-depth.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-function-recursion.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-function-scoped-struct.html - webgl-conformance/conformance/glsl/misc/shader-with-functional-scoping.html - webgl-conformance/conformance/glsl/misc/shader-with-glcolor.vert.html - webgl-conformance/conformance/glsl/misc/shader-with-gles-1.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-gles-symbol.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-glprojectionmatrix.vert.html - webgl-conformance/conformance/glsl/misc/shader-with-hex-int-constant-macro.html - webgl-conformance/conformance/glsl/misc/shader-with-implicit-vec3-to-vec4-cast.vert.html - webgl-conformance/conformance/glsl/misc/shader-with-include.vert.html - webgl-conformance/conformance/glsl/misc/shader-with-int-return-value.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-invalid-identifier.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-ivec2-return-value.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-ivec3-return-value.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-ivec4-return-value.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-limited-indexing.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-line-directive.html - webgl-conformance/conformance/glsl/misc/shader-with-long-line.html - webgl-conformance/conformance/glsl/misc/shader-with-non-ascii-error.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-precision.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-quoted-error.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-undefined-preprocessor-symbol.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-uniform-in-loop-condition.vert.html - webgl-conformance/conformance/glsl/misc/shader-with-vec2-return-value.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-vec3-return-value.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-vec4-return-value.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-vec4-vec3-vec4-conditional.html - webgl-conformance/conformance/glsl/misc/shader-with-version-100.frag.html - webgl-conformance/conformance/glsl/misc/shader-with-version-100.vert.html - webgl-conformance/conformance/glsl/misc/shader-with-version-120.vert.html - webgl-conformance/conformance/glsl/misc/shader-with-version-130.vert.html - webgl-conformance/conformance/glsl/misc/shader-with-webgl-identifier.vert.html - webgl-conformance/conformance/glsl/misc/shader-without-precision.frag.html - webgl-conformance/conformance/glsl/misc/shared.html - webgl-conformance/conformance/glsl/misc/struct-nesting-exceeds-maximum.html - webgl-conformance/conformance/glsl/misc/struct-nesting-under-maximum.html - webgl-conformance/conformance/glsl/misc/uniform-location-length-limits.html - webgl-conformance/conformance/glsl/reserved/00_test_list.txt - webgl-conformance/conformance/glsl/reserved/_webgl_field.vert.html - webgl-conformance/conformance/glsl/reserved/_webgl_function.vert.html - webgl-conformance/conformance/glsl/reserved/_webgl_struct.vert.html - webgl-conformance/conformance/glsl/reserved/_webgl_variable.vert.html - webgl-conformance/conformance/glsl/reserved/webgl_field.vert.html - webgl-conformance/conformance/glsl/reserved/webgl_function.vert.html - webgl-conformance/conformance/glsl/reserved/webgl_struct.vert.html - webgl-conformance/conformance/glsl/reserved/webgl_variable.vert.html - webgl-conformance/conformance/glsl/samplers/00_test_list.txt - webgl-conformance/conformance/glsl/samplers/glsl-function-texture2d-bias.html - webgl-conformance/conformance/glsl/samplers/glsl-function-texture2dlod.html - webgl-conformance/conformance/glsl/samplers/glsl-function-texture2dproj.html - webgl-conformance/conformance/glsl/variables/00_test_list.txt - webgl-conformance/conformance/glsl/variables/gl-fragcoord.html - webgl-conformance/conformance/glsl/variables/gl-frontfacing.html - webgl-conformance/conformance/glsl/variables/gl-pointcoord.html - webgl-conformance/conformance/limits/00_test_list.txt - webgl-conformance/conformance/limits/gl-max-texture-dimensions.html - webgl-conformance/conformance/limits/gl-min-attribs.html - webgl-conformance/conformance/limits/gl-min-textures.html - webgl-conformance/conformance/limits/gl-min-uniforms.html - webgl-conformance/conformance/misc/00_test_list.txt - webgl-conformance/conformance/misc/bad-arguments-test.html - webgl-conformance/conformance/misc/delayed-drawing.html - webgl-conformance/conformance/misc/error-reporting.html - webgl-conformance/conformance/misc/functions-returning-strings.html - webgl-conformance/conformance/misc/instanceof-test.html - webgl-conformance/conformance/misc/invalid-passed-params.html - webgl-conformance/conformance/misc/is-object.html - webgl-conformance/conformance/misc/null-object-behaviour.html - webgl-conformance/conformance/misc/object-deletion-behaviour.html - webgl-conformance/conformance/misc/shader-precision-format.html - webgl-conformance/conformance/misc/type-conversion-test.html - webgl-conformance/conformance/misc/uninitialized-test.html - webgl-conformance/conformance/misc/webgl-specific.html - webgl-conformance/conformance/more/00_test_list.txt - webgl-conformance/conformance/more/README.md - webgl-conformance/conformance/more/all_tests.html - webgl-conformance/conformance/more/all_tests_linkonly.html - webgl-conformance/conformance/more/all_tests_sequential.html - webgl-conformance/conformance/more/conformance/argGenerators-A.js - webgl-conformance/conformance/more/conformance/argGenerators-B1.js - webgl-conformance/conformance/more/conformance/argGenerators-B2.js - webgl-conformance/conformance/more/conformance/argGenerators-B3.js - webgl-conformance/conformance/more/conformance/argGenerators-B4.js - webgl-conformance/conformance/more/conformance/argGenerators-C.js - webgl-conformance/conformance/more/conformance/argGenerators-D_G.js - webgl-conformance/conformance/more/conformance/argGenerators-G_I.js - webgl-conformance/conformance/more/conformance/argGenerators-L_S.js - webgl-conformance/conformance/more/conformance/argGenerators-S_V.js - webgl-conformance/conformance/more/conformance/badArgsArityLessThanArgc.html - webgl-conformance/conformance/more/conformance/constants.html - webgl-conformance/conformance/more/conformance/fuzzTheAPI.html - webgl-conformance/conformance/more/conformance/getContext.html - webgl-conformance/conformance/more/conformance/methods.html - webgl-conformance/conformance/more/conformance/quickCheckAPI-A.html - webgl-conformance/conformance/more/conformance/quickCheckAPI-B1.html - webgl-conformance/conformance/more/conformance/quickCheckAPI-B2.html - webgl-conformance/conformance/more/conformance/quickCheckAPI-B3.html - webgl-conformance/conformance/more/conformance/quickCheckAPI-B4.html - webgl-conformance/conformance/more/conformance/quickCheckAPI-C.html - webgl-conformance/conformance/more/conformance/quickCheckAPI-D_G.html - webgl-conformance/conformance/more/conformance/quickCheckAPI-G_I.html - webgl-conformance/conformance/more/conformance/quickCheckAPI-L_S.html - webgl-conformance/conformance/more/conformance/quickCheckAPI-S_V.html - webgl-conformance/conformance/more/conformance/quickCheckAPI.js - webgl-conformance/conformance/more/conformance/quickCheckAPIBadArgs.html - webgl-conformance/conformance/more/conformance/webGLArrays.html - webgl-conformance/conformance/more/demos/opengl_web.html - webgl-conformance/conformance/more/demos/video.html - webgl-conformance/conformance/more/functions/bindBuffer.html - webgl-conformance/conformance/more/functions/bindBufferBadArgs.html - webgl-conformance/conformance/more/functions/bindFramebufferLeaveNonZero.html - webgl-conformance/conformance/more/functions/bufferData.html - webgl-conformance/conformance/more/functions/bufferDataBadArgs.html - webgl-conformance/conformance/more/functions/bufferSubData.html - webgl-conformance/conformance/more/functions/bufferSubDataBadArgs.html - webgl-conformance/conformance/more/functions/copyTexImage2D.html - webgl-conformance/conformance/more/functions/copyTexImage2DBadArgs.html - webgl-conformance/conformance/more/functions/copyTexSubImage2D.html - webgl-conformance/conformance/more/functions/copyTexSubImage2DBadArgs.html - webgl-conformance/conformance/more/functions/deleteBufferBadArgs.html - webgl-conformance/conformance/more/functions/drawArrays.html - webgl-conformance/conformance/more/functions/drawArraysOutOfBounds.html - webgl-conformance/conformance/more/functions/drawElements.html - webgl-conformance/conformance/more/functions/drawElementsBadArgs.html - webgl-conformance/conformance/more/functions/isTests.html - webgl-conformance/conformance/more/functions/readPixels.html - webgl-conformance/conformance/more/functions/readPixelsBadArgs.html - webgl-conformance/conformance/more/functions/texImage2D.html - webgl-conformance/conformance/more/functions/texImage2DBadArgs.html - webgl-conformance/conformance/more/functions/texImage2DHTML.html - webgl-conformance/conformance/more/functions/texImage2DHTMLBadArgs.html - webgl-conformance/conformance/more/functions/texSubImage2D.html - webgl-conformance/conformance/more/functions/texSubImage2DBadArgs.html - webgl-conformance/conformance/more/functions/texSubImage2DHTML.html - webgl-conformance/conformance/more/functions/texSubImage2DHTMLBadArgs.html - webgl-conformance/conformance/more/functions/uniformMatrix.html - webgl-conformance/conformance/more/functions/uniformMatrixBadArgs.html - webgl-conformance/conformance/more/functions/uniformf.html - webgl-conformance/conformance/more/functions/uniformfArrayLen1.html - webgl-conformance/conformance/more/functions/uniformfBadArgs.html - webgl-conformance/conformance/more/functions/uniformi.html - webgl-conformance/conformance/more/functions/uniformiBadArgs.html - webgl-conformance/conformance/more/functions/vertexAttrib.html - webgl-conformance/conformance/more/functions/vertexAttribBadArgs.html - webgl-conformance/conformance/more/functions/vertexAttribPointer.html - webgl-conformance/conformance/more/functions/vertexAttribPointerBadArgs.html - webgl-conformance/conformance/more/glsl/arrayOutOfBounds.html - webgl-conformance/conformance/more/glsl/longLoops.html - webgl-conformance/conformance/more/glsl/uniformOutOfBounds.html - webgl-conformance/conformance/more/glsl/unusedAttribsUniforms.html - webgl-conformance/conformance/more/index.html - webgl-conformance/conformance/more/performance/CPUvsGPU.html - webgl-conformance/conformance/more/performance/bandwidth.html - webgl-conformance/conformance/more/performance/jsGCPause.html - webgl-conformance/conformance/more/performance/jsMatrixMult.html - webgl-conformance/conformance/more/performance/jsToGLOverhead.html - webgl-conformance/conformance/more/unit.css - webgl-conformance/conformance/more/unit.js - webgl-conformance/conformance/more/util.js - webgl-conformance/conformance/programs/00_test_list.txt - webgl-conformance/conformance/programs/get-active-test.html - webgl-conformance/conformance/programs/gl-bind-attrib-location-test.html - webgl-conformance/conformance/programs/gl-get-active-attribute.html - webgl-conformance/conformance/programs/gl-get-active-uniform.html - webgl-conformance/conformance/programs/gl-getshadersource.html - webgl-conformance/conformance/programs/gl-shader-test.html - webgl-conformance/conformance/programs/invalid-UTF-16.html - webgl-conformance/conformance/programs/program-test.html - webgl-conformance/conformance/reading/00_test_list.txt - webgl-conformance/conformance/reading/read-pixels-pack-alignment.html - webgl-conformance/conformance/reading/read-pixels-test.html - webgl-conformance/conformance/renderbuffers/00_test_list.txt - webgl-conformance/conformance/renderbuffers/framebuffer-object-attachment.html - webgl-conformance/conformance/renderbuffers/framebuffer-test.html - webgl-conformance/conformance/renderbuffers/renderbuffer-initialization.html - webgl-conformance/conformance/rendering/00_test_list.txt - webgl-conformance/conformance/rendering/draw-arrays-out-of-bounds.html - webgl-conformance/conformance/rendering/draw-elements-out-of-bounds.html - webgl-conformance/conformance/rendering/gl-clear.html - webgl-conformance/conformance/rendering/gl-drawelements.html - webgl-conformance/conformance/rendering/gl-scissor-test.html - webgl-conformance/conformance/rendering/line-loop-tri-fan.html - webgl-conformance/conformance/rendering/more-than-65536-indices.html - webgl-conformance/conformance/rendering/point-size.html - webgl-conformance/conformance/rendering/triangle.html - webgl-conformance/conformance/resources/3x3.png - webgl-conformance/conformance/resources/blue-1x1.jpg - webgl-conformance/conformance/resources/boolUniformShader.vert - webgl-conformance/conformance/resources/bug-32888-texture.png - webgl-conformance/conformance/resources/floatUniformShader.vert - webgl-conformance/conformance/resources/fragmentShader.frag - webgl-conformance/conformance/resources/glsl-conformance-test.js - webgl-conformance/conformance/resources/glsl-feature-tests.css - webgl-conformance/conformance/resources/glsl-generator.js - webgl-conformance/conformance/resources/gray-ramp-256-with-128-alpha.png - webgl-conformance/conformance/resources/gray-ramp-256.png - webgl-conformance/conformance/resources/gray-ramp-default-gamma.png - webgl-conformance/conformance/resources/gray-ramp-gamma0.1.png - webgl-conformance/conformance/resources/gray-ramp-gamma1.0.png - webgl-conformance/conformance/resources/gray-ramp-gamma2.0.png - webgl-conformance/conformance/resources/gray-ramp-gamma4.0.png - webgl-conformance/conformance/resources/gray-ramp-gamma9.0.png - webgl-conformance/conformance/resources/gray-ramp.png - webgl-conformance/conformance/resources/green-2x2-16bit.png - webgl-conformance/conformance/resources/intArrayUniformShader.vert - webgl-conformance/conformance/resources/intUniformShader.vert - webgl-conformance/conformance/resources/matUniformShader.vert - webgl-conformance/conformance/resources/noopUniformShader.frag - webgl-conformance/conformance/resources/noopUniformShader.vert - webgl-conformance/conformance/resources/npot-video.mp4 - webgl-conformance/conformance/resources/npot-video.theora.ogv - webgl-conformance/conformance/resources/npot-video.webmvp8.webm - webgl-conformance/conformance/resources/pnglib.js - webgl-conformance/conformance/resources/red-green.mp4 - webgl-conformance/conformance/resources/red-green.png - webgl-conformance/conformance/resources/red-green.theora.ogv - webgl-conformance/conformance/resources/red-green.webmvp8.webm - webgl-conformance/conformance/resources/red-indexed.png - webgl-conformance/conformance/resources/samplerUniformShader.frag - webgl-conformance/conformance/resources/small-square-with-cie-rgb-profile.png - webgl-conformance/conformance/resources/small-square-with-colormatch-profile.png - webgl-conformance/conformance/resources/small-square-with-colorspin-profile.jpg - webgl-conformance/conformance/resources/small-square-with-colorspin-profile.png - webgl-conformance/conformance/resources/small-square-with-e-srgb-profile.png - webgl-conformance/conformance/resources/small-square-with-smpte-c-profile.png - webgl-conformance/conformance/resources/small-square-with-srgb-iec61966-2.1-profile.png - webgl-conformance/conformance/resources/structUniformShader.vert - webgl-conformance/conformance/resources/vertexShader.vert - webgl-conformance/conformance/resources/webgl-test-utils.js - webgl-conformance/conformance/resources/webgl-test.js - webgl-conformance/conformance/resources/zero-alpha.png - webgl-conformance/conformance/state/00_test_list.txt - webgl-conformance/conformance/state/gl-enable-enum-test.html - webgl-conformance/conformance/state/gl-enum-tests.html - webgl-conformance/conformance/state/gl-get-calls.html - webgl-conformance/conformance/state/gl-geterror.html - webgl-conformance/conformance/state/gl-getstring.html - webgl-conformance/conformance/state/gl-object-get-calls.html - webgl-conformance/conformance/textures/00_test_list.txt - webgl-conformance/conformance/textures/compressed-tex-image.html - webgl-conformance/conformance/textures/copy-tex-image-and-sub-image-2d.html - webgl-conformance/conformance/textures/gl-pixelstorei.html - webgl-conformance/conformance/textures/gl-teximage.html - webgl-conformance/conformance/textures/origin-clean-conformance.html - webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-array-buffer-view.html - webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-canvas.html - webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-image-data.html - webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-image.html - webgl-conformance/conformance/textures/tex-image-and-sub-image-2d-with-video.html - webgl-conformance/conformance/textures/tex-image-and-uniform-binding-bugs.html - webgl-conformance/conformance/textures/tex-image-with-format-and-type.html - webgl-conformance/conformance/textures/tex-image-with-invalid-data.html - webgl-conformance/conformance/textures/tex-input-validation.html - webgl-conformance/conformance/textures/tex-sub-image-2d-bad-args.html - webgl-conformance/conformance/textures/tex-sub-image-2d.html - webgl-conformance/conformance/textures/texparameter-test.html - webgl-conformance/conformance/textures/texture-active-bind-2.html - webgl-conformance/conformance/textures/texture-active-bind.html - webgl-conformance/conformance/textures/texture-clear.html - webgl-conformance/conformance/textures/texture-complete.html - webgl-conformance/conformance/textures/texture-formats-test.html - webgl-conformance/conformance/textures/texture-mips.html - webgl-conformance/conformance/textures/texture-npot-video.html - webgl-conformance/conformance/textures/texture-npot.html - webgl-conformance/conformance/textures/texture-size-cube-maps.html - webgl-conformance/conformance/textures/texture-size.html - webgl-conformance/conformance/textures/texture-transparent-pixels-initialized.html - webgl-conformance/conformance/typedarrays/00_test_list.txt - webgl-conformance/conformance/typedarrays/array-buffer-crash.html - webgl-conformance/conformance/typedarrays/array-buffer-view-crash.html - webgl-conformance/conformance/typedarrays/array-unit-tests.html - webgl-conformance/conformance/uniforms/00_test_list.txt - webgl-conformance/conformance/uniforms/gl-uniform-arrays.html - webgl-conformance/conformance/uniforms/gl-uniform-bool.html - webgl-conformance/conformance/uniforms/gl-uniformmatrix4fv.html - webgl-conformance/conformance/uniforms/gl-unknown-uniform.html - webgl-conformance/conformance/uniforms/null-uniform-location.html - webgl-conformance/conformance/uniforms/uniform-location.html - webgl-conformance/conformance/uniforms/uniform-samplers-test.html - webgl-conformance/iframe-autoresize.js - webgl-conformance/mochi-single.html - webgl-conformance/resources/cors-util.js - webgl-conformance/resources/desktop-gl-constants.js - webgl-conformance/resources/js-test-pre.js - webgl-conformance/resources/js-test-style.css - webgl-conformance/resources/opengl_logo.jpg - webgl-conformance/resources/thunderbird-logo-64x64.png - webgl-conformance/resources/webgl-logo.png - webgl-conformance/resources/webgl-test-harness.js - -[webgl-conformance/_wrappers/test_always-fail.html] -[webgl-conformance/_wrappers/test_conformance__attribs__gl-enable-vertex-attrib.html] -[webgl-conformance/_wrappers/test_conformance__attribs__gl-vertex-attrib-zero-issues.html] -[webgl-conformance/_wrappers/test_conformance__attribs__gl-vertex-attrib.html] -[webgl-conformance/_wrappers/test_conformance__attribs__gl-vertexattribpointer-offsets.html] -[webgl-conformance/_wrappers/test_conformance__attribs__gl-vertexattribpointer.html] -[webgl-conformance/_wrappers/test_conformance__buffers__buffer-bind-test.html] -[webgl-conformance/_wrappers/test_conformance__buffers__buffer-data-array-buffer.html] -[webgl-conformance/_wrappers/test_conformance__buffers__index-validation-copies-indices.html] -[webgl-conformance/_wrappers/test_conformance__buffers__index-validation-crash-with-buffer-sub-data.html] -[webgl-conformance/_wrappers/test_conformance__buffers__index-validation-verifies-too-many-indices.html] -[webgl-conformance/_wrappers/test_conformance__buffers__index-validation-with-resized-buffer.html] -[webgl-conformance/_wrappers/test_conformance__buffers__index-validation.html] -[webgl-conformance/_wrappers/test_conformance__canvas__buffer-offscreen-test.html] -skip-if = os == 'android' -[webgl-conformance/_wrappers/test_conformance__canvas__buffer-preserve-test.html] -[webgl-conformance/_wrappers/test_conformance__canvas__canvas-test.html] -[webgl-conformance/_wrappers/test_conformance__canvas__canvas-zero-size.html] -[webgl-conformance/_wrappers/test_conformance__canvas__drawingbuffer-static-canvas-test.html] -skip-if = os == 'mac' -[webgl-conformance/_wrappers/test_conformance__canvas__drawingbuffer-test.html] -[webgl-conformance/_wrappers/test_conformance__canvas__viewport-unchanged-upon-resize.html] -skip-if = os == 'mac' -[webgl-conformance/_wrappers/test_conformance__context__constants.html] -[webgl-conformance/_wrappers/test_conformance__context__context-attributes-alpha-depth-stencil-antialias.html] -skip-if = (os == 'b2g') -[webgl-conformance/_wrappers/test_conformance__context__context-lost-restored.html] -[webgl-conformance/_wrappers/test_conformance__context__context-lost.html] -[webgl-conformance/_wrappers/test_conformance__context__context-type-test.html] -[webgl-conformance/_wrappers/test_conformance__context__incorrect-context-object-behaviour.html] -[webgl-conformance/_wrappers/test_conformance__context__methods.html] -[webgl-conformance/_wrappers/test_conformance__context__premultiplyalpha-test.html] -[webgl-conformance/_wrappers/test_conformance__context__resource-sharing-test.html] -[webgl-conformance/_wrappers/test_conformance__extensions__oes-standard-derivatives.html] -[webgl-conformance/_wrappers/test_conformance__extensions__ext-texture-filter-anisotropic.html] -[webgl-conformance/_wrappers/test_conformance__extensions__oes-texture-float.html] -skip-if = (os == 'linux') -[webgl-conformance/_wrappers/test_conformance__extensions__oes-vertex-array-object.html] -[webgl-conformance/_wrappers/test_conformance__extensions__webgl-debug-renderer-info.html] -[webgl-conformance/_wrappers/test_conformance__extensions__webgl-debug-shaders.html] -[webgl-conformance/_wrappers/test_conformance__extensions__webgl-compressed-texture-etc1.html] -[webgl-conformance/_wrappers/test_conformance__extensions__webgl-compressed-texture-s3tc.html] -[webgl-conformance/_wrappers/test_conformance__extensions__ext-sRGB.html] -[webgl-conformance/_wrappers/test_conformance__extensions__ext-shader-texture-lod.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-abs.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-acos.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-asin.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-atan.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-atan-xy.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-ceil.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-clamp-float.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-clamp-gentype.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-cos.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-cross.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-distance.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-dot.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-faceforward.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-floor.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-fract.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-length.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-max-float.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-max-gentype.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-min-float.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-min-gentype.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-mix-float.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-mix-gentype.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-mod-float.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-mod-gentype.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-normalize.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-reflect.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-sign.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-sin.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-step-float.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-step-gentype.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-smoothstep-float.html] -[webgl-conformance/_wrappers/test_conformance__glsl__functions__glsl-function-smoothstep-gentype.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_int_float.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_int_mat2.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_int_mat3.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_int_mat4.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_int_vec2.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_int_vec3.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_int_vec4.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_ivec2_vec2.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_ivec3_vec3.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__add_ivec4_vec4.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__assign_int_to_float.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__assign_ivec2_to_vec2.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__assign_ivec3_to_vec3.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__assign_ivec4_to_vec4.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__construct_struct.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_int_float.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_int_mat2.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_int_mat3.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_int_mat4.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_int_vec2.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_int_vec3.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_int_vec4.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_ivec2_vec2.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_ivec3_vec3.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__divide_ivec4_vec4.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__equal_int_float.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__equal_ivec2_vec2.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__equal_ivec3_vec3.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__equal_ivec4_vec4.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__function_int_float.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__function_ivec2_vec2.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__function_ivec3_vec3.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__function_ivec4_vec4.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__greater_than.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__greater_than_equal.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__less_than.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__less_than_equal.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_int_float.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_int_mat2.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_int_mat3.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_int_mat4.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_int_vec2.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_int_vec3.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_int_vec4.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_ivec2_vec2.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_ivec3_vec3.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__multiply_ivec4_vec4.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__not_equal_int_float.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__not_equal_ivec2_vec2.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__not_equal_ivec3_vec3.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__not_equal_ivec4_vec4.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_int_float.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_int_mat2.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_int_mat3.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_int_mat4.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_int_vec2.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_int_vec3.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_int_vec4.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_ivec2_vec2.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_ivec3_vec3.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__subtract_ivec4_vec4.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__ternary_int_float.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__ternary_ivec2_vec2.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__ternary_ivec3_vec3.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__implicit__ternary_ivec4_vec4.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__attrib-location-length-limits.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__embedded-struct-definitions-forbidden.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__glsl-function-nodes.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__glsl-long-variable-names.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__non-ascii-comments.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__non-ascii.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-256-character-identifier.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-257-character-identifier.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-_webgl-identifier.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-arbitrary-indexing.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-arbitrary-indexing.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-attrib-array.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-attrib-struct.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-clipvertex.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-default-precision.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-default-precision.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-define-line-continuation.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-dfdx-no-ext.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-dfdx.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-error-directive.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-explicit-int-cast.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-float-return-value.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-frag-depth.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-function-recursion.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-glcolor.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-gles-1.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-gles-symbol.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-glprojectionmatrix.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-implicit-vec3-to-vec4-cast.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-include.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-int-return-value.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-invalid-identifier.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-ivec2-return-value.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-ivec3-return-value.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-ivec4-return-value.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-limited-indexing.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-long-line.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-non-ascii-error.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-precision.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-quoted-error.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-undefined-preprocessor-symbol.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-uniform-in-loop-condition.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-vec2-return-value.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-vec3-return-value.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-vec4-return-value.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-version-100.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-version-100.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-version-120.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-version-130.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-with-webgl-identifier.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shader-without-precision.frag.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__shared.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__struct-nesting-exceeds-maximum.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__struct-nesting-under-maximum.html] -[webgl-conformance/_wrappers/test_conformance__glsl__misc__uniform-location-length-limits.html] -[webgl-conformance/_wrappers/test_conformance__glsl__reserved___webgl_field.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__reserved___webgl_function.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__reserved___webgl_struct.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__reserved___webgl_variable.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__reserved__webgl_field.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__reserved__webgl_function.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__reserved__webgl_struct.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__reserved__webgl_variable.vert.html] -[webgl-conformance/_wrappers/test_conformance__glsl__variables__gl-fragcoord.html] -[webgl-conformance/_wrappers/test_conformance__glsl__variables__gl-frontfacing.html] -[webgl-conformance/_wrappers/test_conformance__glsl__variables__gl-pointcoord.html] -[webgl-conformance/_wrappers/test_conformance__limits__gl-min-attribs.html] -[webgl-conformance/_wrappers/test_conformance__limits__gl-max-texture-dimensions.html] -[webgl-conformance/_wrappers/test_conformance__limits__gl-min-textures.html] -skip-if = (os == 'linux') -[webgl-conformance/_wrappers/test_conformance__limits__gl-min-uniforms.html] -[webgl-conformance/_wrappers/test_conformance__misc__bad-arguments-test.html] -[webgl-conformance/_wrappers/test_conformance__misc__error-reporting.html] -[webgl-conformance/_wrappers/test_conformance__misc__instanceof-test.html] -[webgl-conformance/_wrappers/test_conformance__misc__invalid-passed-params.html] -skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux') -[webgl-conformance/_wrappers/test_conformance__misc__is-object.html] -[webgl-conformance/_wrappers/test_conformance__misc__null-object-behaviour.html] -[webgl-conformance/_wrappers/test_conformance__misc__functions-returning-strings.html] -[webgl-conformance/_wrappers/test_conformance__misc__object-deletion-behaviour.html] -[webgl-conformance/_wrappers/test_conformance__misc__shader-precision-format.html] -[webgl-conformance/_wrappers/test_conformance__misc__type-conversion-test.html] -skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux') -[webgl-conformance/_wrappers/test_conformance__misc__uninitialized-test.html] -skip-if = os == 'android' -[webgl-conformance/_wrappers/test_conformance__misc__webgl-specific.html] -[webgl-conformance/_wrappers/test_conformance__programs__get-active-test.html] -[webgl-conformance/_wrappers/test_conformance__programs__gl-bind-attrib-location-test.html] -[webgl-conformance/_wrappers/test_conformance__programs__gl-get-active-attribute.html] -[webgl-conformance/_wrappers/test_conformance__programs__gl-get-active-uniform.html] -[webgl-conformance/_wrappers/test_conformance__programs__gl-getshadersource.html] -[webgl-conformance/_wrappers/test_conformance__programs__gl-shader-test.html] -[webgl-conformance/_wrappers/test_conformance__programs__invalid-UTF-16.html] -[webgl-conformance/_wrappers/test_conformance__programs__program-test.html] -[webgl-conformance/_wrappers/test_conformance__reading__read-pixels-pack-alignment.html] -[webgl-conformance/_wrappers/test_conformance__reading__read-pixels-test.html] -skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux') -[webgl-conformance/_wrappers/test_conformance__renderbuffers__framebuffer-object-attachment.html] -skip-if = os == 'android' -[webgl-conformance/_wrappers/test_conformance__renderbuffers__framebuffer-test.html] -[webgl-conformance/_wrappers/test_conformance__renderbuffers__renderbuffer-initialization.html] -[webgl-conformance/_wrappers/test_conformance__rendering__draw-arrays-out-of-bounds.html] -[webgl-conformance/_wrappers/test_conformance__rendering__draw-elements-out-of-bounds.html] -[webgl-conformance/_wrappers/test_conformance__rendering__gl-clear.html] -[webgl-conformance/_wrappers/test_conformance__rendering__gl-drawelements.html] -[webgl-conformance/_wrappers/test_conformance__rendering__gl-scissor-test.html] -[webgl-conformance/_wrappers/test_conformance__rendering__more-than-65536-indices.html] -[webgl-conformance/_wrappers/test_conformance__rendering__point-size.html] -[webgl-conformance/_wrappers/test_conformance__rendering__triangle.html] -[webgl-conformance/_wrappers/test_conformance__rendering__line-loop-tri-fan.html] -[webgl-conformance/_wrappers/test_conformance__state__gl-enable-enum-test.html] -[webgl-conformance/_wrappers/test_conformance__state__gl-enum-tests.html] -[webgl-conformance/_wrappers/test_conformance__state__gl-get-calls.html] -[webgl-conformance/_wrappers/test_conformance__state__gl-geterror.html] -[webgl-conformance/_wrappers/test_conformance__state__gl-getstring.html] -[webgl-conformance/_wrappers/test_conformance__state__gl-object-get-calls.html] -[webgl-conformance/_wrappers/test_conformance__textures__compressed-tex-image.html] -[webgl-conformance/_wrappers/test_conformance__textures__copy-tex-image-and-sub-image-2d.html] -[webgl-conformance/_wrappers/test_conformance__textures__gl-pixelstorei.html] -[webgl-conformance/_wrappers/test_conformance__textures__gl-teximage.html] -skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux') -[webgl-conformance/_wrappers/test_conformance__textures__origin-clean-conformance.html] -[webgl-conformance/_wrappers/test_conformance__textures__tex-image-and-sub-image-2d-with-array-buffer-view.html] -[webgl-conformance/_wrappers/test_conformance__textures__tex-image-and-sub-image-2d-with-canvas.html] -[webgl-conformance/_wrappers/test_conformance__textures__tex-image-and-sub-image-2d-with-image-data.html] -[webgl-conformance/_wrappers/test_conformance__textures__tex-image-and-sub-image-2d-with-image.html] -[webgl-conformance/_wrappers/test_conformance__textures__tex-image-and-sub-image-2d-with-video.html] -skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux') || (os == 'win') -[webgl-conformance/_wrappers/test_conformance__textures__tex-image-and-uniform-binding-bugs.html] -skip-if = (os == 'b2g') -[webgl-conformance/_wrappers/test_conformance__textures__tex-image-with-format-and-type.html] -skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux') -[webgl-conformance/_wrappers/test_conformance__textures__tex-image-with-invalid-data.html] -[webgl-conformance/_wrappers/test_conformance__textures__tex-input-validation.html] -skip-if = (os == 'android') || (os == 'b2g') || (os == 'linux') -[webgl-conformance/_wrappers/test_conformance__textures__tex-sub-image-2d-bad-args.html] -[webgl-conformance/_wrappers/test_conformance__textures__tex-sub-image-2d.html] -[webgl-conformance/_wrappers/test_conformance__textures__texparameter-test.html] -[webgl-conformance/_wrappers/test_conformance__textures__texture-active-bind-2.html] -[webgl-conformance/_wrappers/test_conformance__textures__texture-active-bind.html] -[webgl-conformance/_wrappers/test_conformance__textures__texture-complete.html] -[webgl-conformance/_wrappers/test_conformance__textures__texture-formats-test.html] -[webgl-conformance/_wrappers/test_conformance__textures__texture-mips.html] -skip-if = (os == 'linux') -[webgl-conformance/_wrappers/test_conformance__textures__texture-npot-video.html] -skip-if = (os == 'android') || (os == 'win') -[webgl-conformance/_wrappers/test_conformance__textures__texture-npot.html] -skip-if = os == 'android' -[webgl-conformance/_wrappers/test_conformance__textures__texture-size.html] -skip-if = os == 'android' -[webgl-conformance/_wrappers/test_conformance__textures__texture-size-cube-maps.html] -skip-if = (os == 'android') || (os == 'linux') -[webgl-conformance/_wrappers/test_conformance__textures__texture-transparent-pixels-initialized.html] -[webgl-conformance/_wrappers/test_conformance__typedarrays__array-buffer-crash.html] -[webgl-conformance/_wrappers/test_conformance__typedarrays__array-buffer-view-crash.html] -[webgl-conformance/_wrappers/test_conformance__typedarrays__array-unit-tests.html] -[webgl-conformance/_wrappers/test_conformance__uniforms__gl-uniform-arrays.html] -[webgl-conformance/_wrappers/test_conformance__uniforms__gl-uniform-bool.html] -[webgl-conformance/_wrappers/test_conformance__uniforms__gl-uniformmatrix4fv.html] -[webgl-conformance/_wrappers/test_conformance__uniforms__gl-unknown-uniform.html] -[webgl-conformance/_wrappers/test_conformance__uniforms__null-uniform-location.html] -[webgl-conformance/_wrappers/test_conformance__uniforms__uniform-location.html] -[webgl-conformance/_wrappers/test_conformance__uniforms__uniform-samplers-test.html] -[webgl-conformance/_wrappers/test_conformance__more__conformance__constants.html] -[webgl-conformance/_wrappers/test_conformance__more__conformance__getContext.html] -[webgl-conformance/_wrappers/test_conformance__more__conformance__methods.html] -[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-A.html] -[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-B1.html] -[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-B2.html] -[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-B3.html] -[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-B4.html] -[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-C.html] -[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-D_G.html] -[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-G_I.html] -[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-L_S.html] -[webgl-conformance/_wrappers/test_conformance__more__conformance__quickCheckAPI-S_V.html] -[webgl-conformance/_wrappers/test_conformance__more__conformance__webGLArrays.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__bindBuffer.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__bindBufferBadArgs.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__bindFramebufferLeaveNonZero.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__bufferData.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__bufferDataBadArgs.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__bufferSubData.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__bufferSubDataBadArgs.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__copyTexImage2D.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__copyTexImage2DBadArgs.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__copyTexSubImage2D.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__copyTexSubImage2DBadArgs.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__deleteBufferBadArgs.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__drawArrays.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__drawArraysOutOfBounds.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__drawElements.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__drawElementsBadArgs.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__isTests.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__readPixels.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__readPixelsBadArgs.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__texImage2D.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__texImage2DBadArgs.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__texImage2DHTML.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__texImage2DHTMLBadArgs.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__texSubImage2D.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__texSubImage2DBadArgs.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__texSubImage2DHTML.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__texSubImage2DHTMLBadArgs.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__uniformf.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__uniformfBadArgs.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__uniformfArrayLen1.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__uniformi.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__uniformiBadArgs.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__uniformMatrix.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__uniformMatrixBadArgs.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__vertexAttrib.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__vertexAttribBadArgs.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__vertexAttribPointer.html] -[webgl-conformance/_wrappers/test_conformance__more__functions__vertexAttribPointerBadArgs.html] -[webgl-conformance/_wrappers/test_conformance__more__glsl__arrayOutOfBounds.html] -[webgl-conformance/_wrappers/test_conformance__more__glsl__uniformOutOfBounds.html]
rename from dom/canvas/test/webgl-conformance/always-fail.html rename to dom/canvas/test/webgl-conf/always-fail.html --- a/dom/canvas/test/webgl-conformance/always-fail.html +++ b/dom/canvas/test/webgl-conf/always-fail.html @@ -1,15 +1,14 @@ <!DOCTYPE html> -<meta charset='utf-8'> <html> <head> - <title>Always fail test</title> - <link rel='stylesheet' href='resources/js-test-style.css'/> - <script src='resources/js-test-pre.js'></script> + <meta charset='utf-8'> + <link rel='stylesheet' href='checkout/resources/js-test-style.css'/> + <script src='checkout/resources/js-test-pre.js'></script> </head> <body> <div id='description'></div> <div id='console'></div> <script> description('Deliberately fail so as to test our harness.');
new file mode 100644 --- /dev/null +++ b/dom/canvas/test/webgl-conf/checkout/00_test_list.txt @@ -0,0 +1,6 @@ +// files that end in .txt list other tests +// other lines are assumed to be .html files + +conformance/00_test_list.txt +conformance/more/00_test_list.txt +
new file mode 100644 --- /dev/null +++ b/dom/canvas/test/webgl-conf/checkout/CONFORMANCE_RULES.txt @@ -0,0 +1,132 @@ +Rules for Claiming a Conformant WebGL Implementation +==================================================== + +The WebGL API is a web standard, and many web browser implementers +deliver their browser on multiple operating systems (OSs). WebGL +implementations also typically rely on the presence of an OpenGL or +OpenGL ES implementation on the OS. It can be appreciated that a WebGL +implementation therefore has many dependencies. This document attempts +to clarify to potential implementers the rules the Khronos Group uses +to judge whether a particular WebGL implementation is conformant. + +There are two primary reasons to submit conformance results: + + A) A web browser implementer desires to certify their WebGL + implementation as conformant. + + B) A GPU manufacturer delivering an embedded system including web + browser with WebGL support desires to certify their WebGL + implementation as conformant. + +Each of these situations carries different constraints, so the +conformance rules are phrased differently for each. Typically, a web +browser implementer aims to certify that the WebGL "layer" is correct. +A GPU vendor typically aims to certify that a given device is +physically capable of passing the tests. + +A newly-developed WebGL implementation should not support the "webgl" +HTML Canvas context type by default in a shipping version of the +product until reaching conformance. It is acceptable to give end users +an option to turn on WebGL support in a non-conformant implementation +as long as the documentation for that option clearly indicates that +the implementation is not yet conformant and may have compatibility +issues. It is suggested that the Canvas context type +"experimental-webgl" may be supported by default in such +implementations. + +A WebGL implementation might reach conformance, but a subsequent +graphics driver release on a particular OS might introduce a +regression causing failures of one or more of the WebGL conformance +tests. In this situation it is not required to revoke support for the +"webgl" HTML Canvas context type. The WebGL implementer should work +with the GPU vendor to ensure the driver regression is fixed. A +situation like this would, however, prevent the WebGL implementer from +conforming to a subsequent version of the test suite. + +(A) Conformance Rules for a Web Browser Implementer +=================================================== + +1. Conformance on a particular operating system + +On a given OS, a WebGL implementation will be considered to conform to +a particular version of the conformance suite if the suite passes with +no test failures on at least two GPUs, each from a different +vendor. If the OS only supports a GPU from one vendor, the two-GPU +requirement is dropped. + +2. Conformance across multiple operating systems + +A WebGL implementation will be considered to conform to a particular +version of the conformance suite if it passes rule (1) on all of the +OSs on which the WebGL implementation is intended to be supported. + +3. Conformance as the web browser is upgraded + +WebGL conformance results submitted for an earlier version of the +browser carry forward to later versions of the browser, unless the +WebGL implementation changes substantially enough that it is expected +that conformance may have been affected. In that case, the browser +implementer should submit new conformance results. + +4. Conformance as the operating system is upgraded + +If a new version is released of one of the OSs on which a WebGL +implementation is intended to run, then WebGL conformance results +submitted for earlier versions of that OS carry forward. Future +conformance results must be submitted against the new version of the +OS. If it is anticipated that the older OS version will be supported +for some time, then future conformance results must be submitted +separately for both the old and new versions of the OS. + +(B) Conformance Rules for a GPU Vendor +====================================== + +A GPU vendor submitting conformance results for a WebGL implementation +typically does so because the device containing the GPU includes a +built-in web browser. In this case the following rules apply: + +1. Conformance results must be submitted for each GPU and operating<