This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch geckoview-102.3.0esr-12.0-1 in repository tor-browser.
commit 98d205b30ab79a8a88bf58b7202a3de2a095a484 Author: Adam Vandolder avandolder@mozilla.com AuthorDate: Wed Aug 17 02:18:22 2022 +0000
Bug 1774155 - Avoid copying data URI specs in deprecation warning. r=mccr8, a=RyanVM
Differential Revision: https://phabricator.services.mozilla.com/D154692 --- dom/bindings/BindingUtils.cpp | 26 +++++++++++++++++--------- dom/reporting/tests/common_deprecated.js | 31 ++++++++++++++++++++++++++++++- dom/reporting/tests/test_deprecated.html | 1 + 3 files changed, 48 insertions(+), 10 deletions(-)
diff --git a/dom/bindings/BindingUtils.cpp b/dom/bindings/BindingUtils.cpp index b1d298d88e0e5..af500c1f3128d 100644 --- a/dom/bindings/BindingUtils.cpp +++ b/dom/bindings/BindingUtils.cpp @@ -4090,14 +4090,22 @@ void ReportDeprecation(nsIGlobalObject* aGlobal, nsIURI* aURI, const Nullable<uint32_t>& aColumnNumber) { MOZ_ASSERT(aURI);
- // Anonymize the URL. - // Strip the URL of any possible username/password and make it ready to be - // presented in the UI. - nsCOMPtr<nsIURI> exposableURI = net::nsIOService::CreateExposableURI(aURI); - nsAutoCString spec; - nsresult rv = exposableURI->GetSpec(spec); - if (NS_WARN_IF(NS_FAILED(rv))) { - return; + // If the URI has the data scheme, report that instead of the spec, + // as the spec may be arbitrarily long and we would like to avoid + // copying it. + nsAutoCString specOrScheme; + nsresult rv; + if (aURI->SchemeIs("data")) { + specOrScheme.Assign("data:..."_ns); + } else { + // Anonymize the URL. + // Strip the URL of any possible username/password and make it ready to be + // presented in the UI. + nsCOMPtr<nsIURI> exposableURI = net::nsIOService::CreateExposableURI(aURI); + rv = exposableURI->GetSpec(specOrScheme); + if (NS_WARN_IF(NS_FAILED(rv))) { + return; + } }
nsAutoString type; @@ -4142,7 +4150,7 @@ void ReportDeprecation(nsIGlobalObject* aGlobal, nsIURI* aURI, aFileName, aLineNumber, aColumnNumber);
ReportingUtils::Report(aGlobal, nsGkAtoms::deprecation, u"default"_ns, - NS_ConvertUTF8toUTF16(spec), body); + NS_ConvertUTF8toUTF16(specOrScheme), body); }
// This runnable is used to write a deprecation message from a worker to the diff --git a/dom/reporting/tests/common_deprecated.js b/dom/reporting/tests/common_deprecated.js index 535945d6d586c..1cee9481c2e92 100644 --- a/dom/reporting/tests/common_deprecated.js +++ b/dom/reporting/tests/common_deprecated.js @@ -102,6 +102,35 @@ function test_deprecatedMethod() { }); }
+// eslint-disable-next-line no-unused-vars +function test_deprecatedMethodWithDataURI() { + info("Testing deprecatedMethodWithDataURI report"); + + const uri = `data:text/html,<script> + window.onload = () => { + let obs = new ReportingObserver((reports, o) => { + obs.disconnect(); + let report = reports[0]; + const message = (report.url == "data:...") ? "passed" : "failed"; + window.opener.postMessage(message, "http://mochi.test:8888"); + close(); + }); + + obs.observe(); + let testingInterface = new TestingDeprecatedInterface(); + testingInterface.deprecatedMethod(); + }; + </script>`; + + return new Promise((resolve, reject) => { + window.open(uri); + window.addEventListener("message", e => { + is(e.data, "passed", "The data URI is truncated"); + resolve(); + }); + }); +} + // eslint-disable-next-line no-unused-vars function test_deprecatedAttribute() { info("Testing DeprecatedTestingAttribute report"); @@ -138,7 +167,7 @@ function test_deprecatedAttribute() { .replace("worker_deprecated.js", "common_deprecated.js"), "We have a sourceFile" ); - is(report.body.lineNumber, 152, "We have a lineNumber"); + is(report.body.lineNumber, 181, "We have a lineNumber"); is(report.body.columnNumber, 4, "We have a columnNumber");
obs.disconnect(); diff --git a/dom/reporting/tests/test_deprecated.html b/dom/reporting/tests/test_deprecated.html index d0fa7f2d39b88..da55978e9b33f 100644 --- a/dom/reporting/tests/test_deprecated.html +++ b/dom/reporting/tests/test_deprecated.html @@ -12,6 +12,7 @@
test_deprecatedInterface() .then(() => test_deprecatedMethod()) +.then(() => test_deprecatedMethodWithDataURI()) .then(() => test_deprecatedAttribute()) .then(() => test_takeRecords()) .then(() => {