☠☠ backed out by 4fdb6fff42d1 ☠ ☠ | |
author | Thomas Wisniewski <wisniewskit@gmail.com> |
Mon, 19 Sep 2016 19:36:03 -0400 | |
changeset 314563 | 6fb622c938dee9dac8fceddff71908e4d75bb3df |
parent 314562 | 39b278f56017236b2f98f3b93e93553426f05be0 |
child 314564 | 3719ffa5eb4baaef4d21ccb1528f1ec6b1233e2b |
push id | 81931 |
push user | ryanvm@gmail.com |
push date | Wed, 21 Sep 2016 01:49:11 +0000 |
treeherder | mozilla-inbound@6fb622c938de [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | smaug |
bugs | 884693 |
milestone | 52.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/base/nsIDocument.h +++ b/dom/base/nsIDocument.h @@ -245,16 +245,19 @@ public: nsIStreamListener **aDocListener, bool aReset, nsIContentSink* aSink = nullptr) = 0; virtual void StopDocumentLoad() = 0; virtual void SetSuppressParserErrorElement(bool aSuppress) {} virtual bool SuppressParserErrorElement() { return false; } + virtual void SetSuppressParserErrorConsoleMessages(bool aSuppress) {} + virtual bool SuppressParserErrorConsoleMessages() { return false; } + /** * Signal that the document title may have changed * (see nsDocument::GetTitle). * @param aBoundTitleElement true if an HTML or SVG <title> element * has just been bound to the document. */ virtual void NotifyPossibleTitleChange(bool aBoundTitleElement) = 0;
new file mode 100644 --- /dev/null +++ b/dom/base/test/chrome/bug884693.sjs @@ -0,0 +1,8 @@ +function handleRequest(request, response) +{ + let [status, statusText, body] = request.queryString.split("&"); + response.setStatusLine(request.httpVersion, status, statusText); + response.setHeader("Content-Type", "text/xml", false); + response.setHeader("Content-Length", "" + body.length, false); + response.write(body); +}
--- a/dom/base/test/chrome/chrome.ini +++ b/dom/base/test/chrome/chrome.ini @@ -53,16 +53,17 @@ skip-if = buildapp == 'mulet' [test_bug752226-3.xul] [test_bug752226-4.xul] [test_bug765993.html] [test_bug780199.xul] [test_bug780529.xul] [test_bug800386.xul] [test_bug814638.xul] [test_bug816340.xul] +[test_bug884693.xul] [test_bug914381.html] [test_bug990812.xul] [test_bug1063837.xul] [test_bug1139964.xul] [test_bug1209621.xul] [test_cpows.xul] skip-if = buildapp == 'mulet' [test_registerElement_content.xul]
new file mode 100644 --- /dev/null +++ b/dom/base/test/chrome/test_bug884693.xul @@ -0,0 +1,67 @@ +<?xml version="1.0"?> +<?xml-stylesheet href="chrome://global/skin" type="text/css"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=884693 +--> +<window title="Mozilla Bug 884693" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/> + + <!-- test results are displayed in the html:body --> + <body xmlns="http://www.w3.org/1999/xhtml"> + <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=884693" + target="_blank">Mozilla Bug 884693</a> + </body> + + <!-- test code goes here --> + <script type="application/javascript"><![CDATA[ + + const SERVER_URL = "http://mochi.test:8888/tests/dom/base/test/chrome/bug884693.sjs"; + const INVALID_XML = "InvalidXML"; + + var { classes: Cc, interfaces: Ci } = Components; + + let consoleService = Cc["@mozilla.org/consoleservice;1"]. + getService(Ci.nsIConsoleService) + + function runTest(status, statusText, body, expectedResponse, expectedMessages) + { + return new Promise((resolve, reject) => { + consoleService.reset(); + + let xhr = new XMLHttpRequest(); + + xhr.onload = () => { + is(xhr.responseText, expectedResponse, "Correct responseText returned"); + + let messages = consoleService.getMessageArray() || []; + is(messages.length, expectedMessages.length, "Got expected message count"); + messages = messages.map(m => m.message).join(","); + for(let message of expectedMessages) { + ok(messages.indexOf(message) >= 0, "Got expected message: " + message); + } + + resolve(); + }; + + xhr.onerror = e => { + reject(e); + }; + + xhr.open("GET", `${SERVER_URL}?${status}&${statusText}&${body}`); + xhr.send(); + }); + } + + SimpleTest.waitForExplicitFinish(); + runTest(204, "No content", "", "", []). + then(() => { return runTest(204, "No content", INVALID_XML, "", []); }). + then(() => { return runTest(304, "Not modified", "", "", []); }). + then(() => { return runTest(304, "Not modified", INVALID_XML, "", []); }). + then(() => { return runTest(200, "OK", "", "", ["no root element found"]); }). + then(() => { return runTest(200, "OK", INVALID_XML, INVALID_XML, ["syntax error"]); }). + then(SimpleTest.finish); + + ]]></script> +</window>
--- a/dom/base/test/moz.build +++ b/dom/base/test/moz.build @@ -31,12 +31,13 @@ BROWSER_CHROME_MANIFESTS += [ TEST_DIRS += [ 'gtest', 'jsmodules' ] TEST_HARNESS_FILES.testing.mochitest.tests.dom.base.test.chrome += [ 'chrome/bug421622-referer.sjs', + 'chrome/bug884693.sjs', 'chrome/nochrome_bug765993.html', 'chrome/nochrome_bug765993.js', 'chrome/nochrome_bug765993.js^headers^', ]
--- a/dom/xhr/XMLHttpRequestMainThread.cpp +++ b/dom/xhr/XMLHttpRequestMainThread.cpp @@ -1995,16 +1995,23 @@ XMLHttpRequestMainThread::OnStopRequest( mWaitingForOnStopRequest = false; if (mRequestObserver) { NS_ASSERTION(mFirstStartRequestSeen, "Inconsistent state!"); mFirstStartRequestSeen = false; mRequestObserver->OnStopRequest(request, ctxt, status); } + // suppress parsing failure messages to console for status 204/304 (see bug 884693). + uint32_t responseStatus; + if (NS_SUCCEEDED(GetStatus(&responseStatus)) && + (responseStatus == 204 || responseStatus == 304)) { + mResponseXML->SetSuppressParserErrorConsoleMessages(true); + } + // make sure to notify the listener if we were aborted // XXX in fact, why don't we do the cleanup below in this case?? // State::unsent is for abort calls. See OnStartRequest above. if (mState == State::unsent || mFlagTimedOut) { if (mXMLParserStreamListener) (void) mXMLParserStreamListener->OnStopRequest(request, ctxt, status); return NS_OK; }
--- a/dom/xml/XMLDocument.cpp +++ b/dom/xml/XMLDocument.cpp @@ -494,16 +494,28 @@ XMLDocument::SetSuppressParserErrorEleme } bool XMLDocument::SuppressParserErrorElement() { return mSuppressParserErrorElement; } +void +XMLDocument::SetSuppressParserErrorConsoleMessages(bool aSuppress) +{ + mSuppressParserErrorConsoleMessages = aSuppress; +} + +bool +XMLDocument::SuppressParserErrorConsoleMessages() +{ + return mSuppressParserErrorConsoleMessages; +} + nsresult XMLDocument::StartDocumentLoad(const char* aCommand, nsIChannel* aChannel, nsILoadGroup* aLoadGroup, nsISupports* aContainer, nsIStreamListener **aDocListener, bool aReset, nsIContentSink* aSink)
--- a/dom/xml/XMLDocument.h +++ b/dom/xml/XMLDocument.h @@ -27,16 +27,19 @@ public: virtual void Reset(nsIChannel* aChannel, nsILoadGroup* aLoadGroup) override; virtual void ResetToURI(nsIURI *aURI, nsILoadGroup *aLoadGroup, nsIPrincipal* aPrincipal) override; virtual void SetSuppressParserErrorElement(bool aSuppress) override; virtual bool SuppressParserErrorElement() override; + virtual void SetSuppressParserErrorConsoleMessages(bool aSuppress) override; + virtual bool SuppressParserErrorConsoleMessages() override; + virtual nsresult StartDocumentLoad(const char* aCommand, nsIChannel* channel, nsILoadGroup* aLoadGroup, nsISupports* aContainer, nsIStreamListener **aDocListener, bool aReset = true, nsIContentSink* aSink = nullptr) override; virtual void EndLoad() override; @@ -87,14 +90,17 @@ protected: bool mLoopingForSyncLoad; // If true. we're really a Document, not an XMLDocument bool mIsPlainDocument; // If true, do not output <parsererror> elements. Per spec, XMLHttpRequest // shouldn't output them, whereas DOMParser/others should (see bug 918703). bool mSuppressParserErrorElement; + + // If true, do not log parsing errors to the web console (see bug 884693). + bool mSuppressParserErrorConsoleMessages; }; } // namespace dom } // namespace mozilla #endif // mozilla_dom_XMLDocument_h
--- a/parser/htmlparser/nsExpatDriver.cpp +++ b/parser/htmlparser/nsExpatDriver.cpp @@ -964,16 +964,21 @@ nsExpatDriver::HandleError() sourceText.get(), serr, &shouldReportError); if (NS_FAILED(rv)) { shouldReportError = true; } } + nsCOMPtr<nsIDocument> doc = do_QueryInterface(mOriginalSink->GetTarget()); + if (doc && doc->SuppressParserErrorConsoleMessages()) { + shouldReportError = false; + } + if (shouldReportError) { nsCOMPtr<nsIConsoleService> cs (do_GetService(NS_CONSOLESERVICE_CONTRACTID)); if (cs) { cs->LogMessage(serr); } }