author | Ryan VanderMeulen <ryanvm@gmail.com> |
Mon, 06 Oct 2014 17:00:27 -0400 | |
changeset 232284 | b1b103778f93ebea31c13d725232775d48c76418 |
parent 232283 | 5578b160f514fcbfb782c980fee483fa6e410c95 |
child 232285 | a4a109579ef265390b0179d6a7c0703faeb39764 |
push id | 4187 |
push user | bhearsum@mozilla.com |
push date | Fri, 28 Nov 2014 15:29:12 +0000 |
treeherder | mozilla-beta@f23cc6a30c11 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
bugs | 1068412 |
milestone | 35.0a1 |
backs out | f4953072c20f75a7257538f990a232abfadc4354 |
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
|
chrome/RegistryMessageUtils.h | file | annotate | diff | comparison | revisions | |
chrome/nsChromeRegistryChrome.cpp | file | annotate | diff | comparison | revisions | |
dom/ipc/ContentChild.cpp | file | annotate | diff | comparison | revisions | |
dom/ipc/PContent.ipdl | file | annotate | diff | comparison | revisions | |
netwerk/protocol/res/nsResProtocolHandler.cpp | file | annotate | diff | comparison | revisions | |
netwerk/test/browser/browser.ini | file | annotate | diff | comparison | revisions | |
netwerk/test/browser/browser_child_resource.js | file | annotate | diff | comparison | revisions | |
netwerk/test/browser/dummy.html | file | annotate | diff | comparison | revisions |
--- a/chrome/RegistryMessageUtils.h +++ b/chrome/RegistryMessageUtils.h @@ -38,22 +38,16 @@ struct ChromePackage flags == rhs.flags; } }; struct ResourceMapping { nsCString resource; SerializedURI resolvedURI; - - bool operator ==(const ResourceMapping& rhs) const - { - return resource.Equals(rhs.resource) && - resolvedURI == rhs.resolvedURI; - } }; struct OverrideMapping { SerializedURI originalURI; SerializedURI overrideURI; bool operator==(const OverrideMapping& rhs) const
--- a/chrome/nsChromeRegistryChrome.cpp +++ b/chrome/nsChromeRegistryChrome.cpp @@ -448,31 +448,27 @@ nsChromeRegistryChrome::SendRegisteredCh InfallibleTArray<ResourceMapping> resources; InfallibleTArray<OverrideMapping> overrides; EnumerationArgs args = { packages, mSelectedLocale, mSelectedSkin }; mPackagesHash.EnumerateRead(CollectPackages, &args); - // If we were passed a parent then a new child process has been created and - // has requested all of the chrome so send it the resources too. Otherwise - // resource mappings are sent by the resource protocol handler dynamically. - if (aParent) { - nsCOMPtr<nsIIOService> io (do_GetIOService()); - NS_ENSURE_TRUE_VOID(io); + nsCOMPtr<nsIIOService> io (do_GetIOService()); + NS_ENSURE_TRUE_VOID(io); - nsCOMPtr<nsIProtocolHandler> ph; - nsresult rv = io->GetProtocolHandler("resource", getter_AddRefs(ph)); - NS_ENSURE_SUCCESS_VOID(rv); + nsCOMPtr<nsIProtocolHandler> ph; + nsresult rv = io->GetProtocolHandler("resource", getter_AddRefs(ph)); + NS_ENSURE_SUCCESS_VOID(rv); - nsCOMPtr<nsIResProtocolHandler> irph (do_QueryInterface(ph)); - nsResProtocolHandler* rph = static_cast<nsResProtocolHandler*>(irph.get()); - rph->CollectSubstitutions(resources); - } + //FIXME: Some substitutions are set up lazily and might not exist yet + nsCOMPtr<nsIResProtocolHandler> irph (do_QueryInterface(ph)); + nsResProtocolHandler* rph = static_cast<nsResProtocolHandler*>(irph.get()); + rph->CollectSubstitutions(resources); mOverrideTable.EnumerateRead(&EnumerateOverride, &overrides); if (aParent) { bool success = aParent->SendRegisterChrome(packages, resources, overrides, mSelectedLocale, false); NS_ENSURE_TRUE_VOID(success); } else {
--- a/dom/ipc/ContentChild.cpp +++ b/dom/ipc/ContentChild.cpp @@ -1569,20 +1569,16 @@ ContentChild::RecvRegisterChromeItem(con case ChromeRegistryItem::TChromePackage: chromeRegistry->RegisterPackage(item.get_ChromePackage()); break; case ChromeRegistryItem::TOverrideMapping: chromeRegistry->RegisterOverride(item.get_OverrideMapping()); break; - case ChromeRegistryItem::TResourceMapping: - chromeRegistry->RegisterResource(item.get_ResourceMapping()); - break; - default: MOZ_ASSERT(false, "bad chrome item"); return false; } return true; }
--- a/dom/ipc/PContent.ipdl +++ b/dom/ipc/PContent.ipdl @@ -66,17 +66,16 @@ using mozilla::dom::NativeThreadId from using mozilla::dom::quota::PersistenceType from "mozilla/dom/quota/PersistenceType.h"; using mozilla::hal::ProcessPriority from "mozilla/HalTypes.h"; using gfxIntSize from "nsSize.h"; union ChromeRegistryItem { ChromePackage; OverrideMapping; - ResourceMapping; }; namespace mozilla { namespace dom { struct FontListEntry { nsString familyName; nsString faceName;
--- a/netwerk/protocol/res/nsResProtocolHandler.cpp +++ b/netwerk/protocol/res/nsResProtocolHandler.cpp @@ -1,29 +1,24 @@ /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "mozilla/chrome/RegistryMessageUtils.h" -#include "mozilla/dom/ContentParent.h" -#include "mozilla/unused.h" #include "nsResProtocolHandler.h" #include "nsIIOService.h" #include "nsIFile.h" #include "nsNetUtil.h" #include "nsURLHelper.h" #include "nsEscape.h" #include "mozilla/Omnijar.h" -using mozilla::dom::ContentParent; -using mozilla::unused; - static NS_DEFINE_CID(kResURLCID, NS_RESURL_CID); static nsResProtocolHandler *gResHandler = nullptr; #if defined(PR_LOGGING) // // Log module for Resource Protocol logging... // @@ -304,72 +299,44 @@ nsResProtocolHandler::AllowPort(int32_t *_retval = false; return NS_OK; } //---------------------------------------------------------------------------- // nsResProtocolHandler::nsIResProtocolHandler //---------------------------------------------------------------------------- -static void -SendResourceSubstitution(const nsACString& root, nsIURI* baseURI) -{ - if (GeckoProcessType_Content == XRE_GetProcessType()) { - return; - } - - ResourceMapping resourceMapping; - resourceMapping.resource = root; - if (baseURI) { - baseURI->GetSpec(resourceMapping.resolvedURI.spec); - baseURI->GetOriginCharset(resourceMapping.resolvedURI.charset); - } - - nsTArray<ContentParent*> parents; - ContentParent::GetAll(parents); - if (!parents.Length()) { - return; - } - - for (uint32_t i = 0; i < parents.Length(); i++) { - unused << parents[i]->SendRegisterChromeItem(resourceMapping); - } -} - NS_IMETHODIMP nsResProtocolHandler::SetSubstitution(const nsACString& root, nsIURI *baseURI) { if (!baseURI) { mSubstitutions.Remove(root); - SendResourceSubstitution(root, baseURI); return NS_OK; } // If baseURI isn't a resource URI, we can set the substitution immediately. nsAutoCString scheme; nsresult rv = baseURI->GetScheme(scheme); NS_ENSURE_SUCCESS(rv, rv); if (!scheme.EqualsLiteral("resource")) { mSubstitutions.Put(root, baseURI); - SendResourceSubstitution(root, baseURI); return NS_OK; } // baseURI is a resource URI, let's resolve it first. nsAutoCString newBase; rv = ResolveURI(baseURI, newBase); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIURI> newBaseURI; rv = mIOService->NewURI(newBase, nullptr, nullptr, getter_AddRefs(newBaseURI)); NS_ENSURE_SUCCESS(rv, rv); mSubstitutions.Put(root, newBaseURI); - SendResourceSubstitution(root, newBaseURI); return NS_OK; } NS_IMETHODIMP nsResProtocolHandler::GetSubstitution(const nsACString& root, nsIURI **result) { NS_ENSURE_ARG_POINTER(result);
--- a/netwerk/test/browser/browser.ini +++ b/netwerk/test/browser/browser.ini @@ -1,6 +1,3 @@ [DEFAULT] -support-files = - dummy.html [browser_NetUtil.js] -[browser_child_resource.js]
deleted file mode 100644 --- a/netwerk/test/browser/browser_child_resource.js +++ /dev/null @@ -1,213 +0,0 @@ -/* -Any copyright is dedicated to the Public Domain. -http://creativecommons.org/publicdomain/zero/1.0/ -*/ - -// This must be loaded in the remote process for this test to be useful -const TEST_URL = "http://example.com/browser/netwerk/test/browser/dummy.html"; - -const expectedRemote = gMultiProcessBrowser ? "true" : ""; - -Components.utils.import("resource://gre/modules/Services.jsm"); -const resProtocol = Cc["@mozilla.org/network/protocol;1?name=resource"] - .getService(Ci.nsIResProtocolHandler); - -function frameScript() { - Components.utils.import("resource://gre/modules/Services.jsm"); - let resProtocol = Components.classes["@mozilla.org/network/protocol;1?name=resource"] - .getService(Components.interfaces.nsIResProtocolHandler); - - addMessageListener("Test:ResolveURI", function({ data: uri }) { - uri = Services.io.newURI(uri, null, null); - try { - let resolved = resProtocol.resolveURI(uri); - sendAsyncMessage("Test:ResolvedURI", resolved); - } - catch (e) { - sendAsyncMessage("Test:ResolvedURI", null); - } - }); - - addMessageListener("Test:Crash", function() { - dump("Crashing\n"); - privateNoteIntentionalCrash(); - Components.utils.import("resource://gre/modules/ctypes.jsm"); - let zero = new ctypes.intptr_t(8); - let badptr = ctypes.cast(zero, ctypes.PointerType(ctypes.int32_t)); - badptr.contents - }); -} - -function waitForEvent(obj, name, capturing, chromeEvent) { - info("Waiting for " + name); - return new Promise((resolve) => { - function listener(event) { - info("Saw " + name); - obj.removeEventListener(name, listener, capturing, chromeEvent); - resolve(event); - } - - obj.addEventListener(name, listener, capturing, chromeEvent); - }); -} - -function resolveURI(uri) { - uri = Services.io.newURI(uri, null, null); - try { - return resProtocol.resolveURI(uri); - } - catch (e) { - return null; - } -} - -function remoteResolveURI(uri) { - return new Promise((resolve) => { - let manager = gBrowser.selectedBrowser.messageManager; - - function listener({ data: resolved }) { - manager.removeMessageListener("Test:ResolvedURI", listener); - resolve(resolved); - } - - manager.addMessageListener("Test:ResolvedURI", listener); - manager.sendAsyncMessage("Test:ResolveURI", uri); - }); -} - -let loadTestTab = Task.async(function*() { - gBrowser.selectedTab = gBrowser.addTab(TEST_URL); - let browser = gBrowser.selectedBrowser; - yield waitForEvent(browser, "load", true); - browser.messageManager.loadFrameScript("data:,(" + frameScript.toString() + ")();", true); - return browser; -}); - -// Restarts the child process by crashing it then reloading the tab -let restart = Task.async(function*() { - let browser = gBrowser.selectedBrowser; - // If the tab isn't remote this would crash the main process so skip it - if (browser.getAttribute("remote") != "true") - return browser; - - browser.messageManager.sendAsyncMessage("Test:Crash"); - yield waitForEvent(browser, "AboutTabCrashedLoad", false, true); - - browser.reload(); - - yield waitForEvent(browser, "load", true); - is(browser.getAttribute("remote"), expectedRemote, "Browser should be in the right process"); - browser.messageManager.loadFrameScript("data:,(" + frameScript.toString() + ")();", true); - return browser; -}); - -// Sanity check that this test is going to be useful -add_task(function*() { - let browser = yield loadTestTab(); - - // This must be loaded in the remote process for this test to be useful - is(browser.getAttribute("remote"), expectedRemote, "Browser should be in the right process"); - - let local = resolveURI("resource://gre/modules/Services.jsm"); - let remote = yield remoteResolveURI("resource://gre/modules/Services.jsm"); - is(local, remote, "Services.jsm should resolve in both processes"); - - gBrowser.removeCurrentTab(); -}); - -// Add a mapping, update it then remove it -add_task(function*() { - let browser = yield loadTestTab(); - - info("Set"); - resProtocol.setSubstitution("testing", Services.io.newURI("chrome://global/content", null, null)); - let local = resolveURI("resource://testing/test.js"); - let remote = yield remoteResolveURI("resource://testing/test.js"); - is(local, "chrome://global/content/test.js", "Should resolve in main process"); - is(remote, "chrome://global/content/test.js", "Should resolve in child process"); - - info("Change"); - resProtocol.setSubstitution("testing", Services.io.newURI("chrome://global/skin", null, null)); - local = resolveURI("resource://testing/test.js"); - remote = yield remoteResolveURI("resource://testing/test.js"); - is(local, "chrome://global/skin/test.js", "Should resolve in main process"); - is(remote, "chrome://global/skin/test.js", "Should resolve in child process"); - - info("Clear"); - resProtocol.setSubstitution("testing", null); - local = resolveURI("resource://testing/test.js"); - remote = yield remoteResolveURI("resource://testing/test.js"); - is(local, null, "Shouldn't resolve in main process"); - is(remote, null, "Shouldn't resolve in child process"); - - gBrowser.removeCurrentTab(); -}); - -// Add a mapping, restart the child process then check it is still there -add_task(function*() { - let browser = yield loadTestTab(); - - info("Set"); - resProtocol.setSubstitution("testing", Services.io.newURI("chrome://global/content", null, null)); - let local = resolveURI("resource://testing/test.js"); - let remote = yield remoteResolveURI("resource://testing/test.js"); - is(local, "chrome://global/content/test.js", "Should resolve in main process"); - is(remote, "chrome://global/content/test.js", "Should resolve in child process"); - - yield restart(); - - local = resolveURI("resource://testing/test.js"); - remote = yield remoteResolveURI("resource://testing/test.js"); - is(local, "chrome://global/content/test.js", "Should resolve in main process"); - is(remote, "chrome://global/content/test.js", "Should resolve in child process"); - - info("Change"); - resProtocol.setSubstitution("testing", Services.io.newURI("chrome://global/skin", null, null)); - - yield restart(); - - local = resolveURI("resource://testing/test.js"); - remote = yield remoteResolveURI("resource://testing/test.js"); - is(local, "chrome://global/skin/test.js", "Should resolve in main process"); - is(remote, "chrome://global/skin/test.js", "Should resolve in child process"); - - info("Clear"); - resProtocol.setSubstitution("testing", null); - - yield restart(); - - local = resolveURI("resource://testing/test.js"); - remote = yield remoteResolveURI("resource://testing/test.js"); - is(local, null, "Shouldn't resolve in main process"); - is(remote, null, "Shouldn't resolve in child process"); - - gBrowser.removeCurrentTab(); -}); - -// Adding a mapping to a resource URI should work -add_task(function*() { - let browser = yield loadTestTab(); - - info("Set"); - resProtocol.setSubstitution("testing", Services.io.newURI("chrome://global/content", null, null)); - resProtocol.setSubstitution("testing2", Services.io.newURI("resource://testing", null, null)); - let local = resolveURI("resource://testing2/test.js"); - let remote = yield remoteResolveURI("resource://testing2/test.js"); - is(local, "chrome://global/content/test.js", "Should resolve in main process"); - is(remote, "chrome://global/content/test.js", "Should resolve in child process"); - - info("Clear"); - resProtocol.setSubstitution("testing", null); - local = resolveURI("resource://testing2/test.js"); - remote = yield remoteResolveURI("resource://testing2/test.js"); - is(local, "chrome://global/content/test.js", "Should resolve in main process"); - is(remote, "chrome://global/content/test.js", "Should resolve in child process"); - - resProtocol.setSubstitution("testing2", null); - local = resolveURI("resource://testing2/test.js"); - remote = yield remoteResolveURI("resource://testing2/test.js"); - is(local, null, "Shouldn't resolve in main process"); - is(remote, null, "Shouldn't resolve in child process"); - - gBrowser.removeCurrentTab(); -});