- Bug 1182537 - Use channel->ascynOpen2 in dom/security/nsCORSListenerProxy (r=sicking) (5c4b779a12) - Bug 1155758 - Make about:serviceworkers work in B2G. r=fabrice (195eca3894) - Bug 1162920 - JavaScript error at aboutServiceWorkers.js when updating the service worker. r=fabrice (2d3a831a8c) - Bug 1155153 - [e10s] about:serviceworkers should work in e10s mode. Update B2G implementation. r=baku (0d1c2999c1) - Bug 1171915 - about:serviceworkers in b2g should use originAttributes when calling ServiceWorkerManager. r=baku,fabrice (faa3725da9) - Bug 1179161 - originAttributes does not have such isInBrowser member (follow-up bug 1171915). r=ferjm (a217140ae5) - Bug 1171917 - Improve about:serviceworkers tests on b2g. r=ferjm (5fd9d2f478) - Bug 1179557 - Add userContextId to originAttributes with tests. r=bholley, r=tanvi (8ddf96d921) - Bug 1179557 - Add getters for userContextId. r=bholley, r=tanvi (ebec5f7c7e) - Bug 1174110 - The service worker still remains registered when uninstalling the service-worker-enabled application. r=fabrice (c1c93b1250) - Bug 1144689 - Allow setting manually a fetch time and modified time for cache entries. r=fabrice (8e9dd47425) - Bug 1150199 - Langpacks should not have to be privileged r=ferjm (d41af25648) - Bug 1111961 - Developer mode support r=ferjm,pauljt (9b523402ac) - Bug 1168300 - notify clear-cookiejar-data. r=sicking (7d88bff29d) - Bug 1136434 - RequestSync API should delete all the timers when a task is unregistered, r=ehsan (5f92977920) - Bug 1151082 - RequestSyncAPI - avoid infinite loop when processing pending messages, r=ehsan (b5afcd55e8) - Bug 1165787 - Use origin in RequestSyncService.jsm. r=ehsan (b6fad2bd68) - Bug 1182347 - Migrate existing code away from .cookieJar. r=sicking,r=allstars.chh (304cbfd660) - Bug 1118946 - API to provide localized properties r=ferjm,sicking (a28aecaf19) - Bug 1077168 - Cancel in-flight Webapp install jobs from windows that change location. r=myk. (d55dc8ff6d) - Bug 1150660 - Fix sendAsyncMessage() uses to not trigger warnings in dom/apps r=fabrice (b087adcc23) - Bug 1169344 - Allow server apps to restrict access to their IAC ports. r=ferjm (82c8570555) - Bug 1068400 - Fix devtools when morphing non-e10s tab into e10s one. r=jryans (55be5ccdf5) - Bug 1145049 - Prevent caching tab actors in child processes. r=jryans (1a3ee9f278) - Bug 1145049 - Stop leaking tab actors and root actor on disconnect. r=jryans (26f259b441) - Bug 1181930 - Refactoring: move the message broadcaster out of Webapps.jsm r=ferjm (b1f8bb8b6d) - Bu 1115619 - Use a preference to guarantee app permission loading to permissions.sqlite. r=fabrice (5689c459d7) - Bug 1191579 - Remove useless getAll() implementation in Webapps.jsm (74f0d6874a)
3.9 KiB
Lazy Actor Modules and E10S setup
The DebuggerServer loads and creates most of the actors lazily to keep the initial memory usage down (which is extremely important on lower end devices).
Register a lazy global/tab actor module
register a global actor:
DebuggerServer.registerModule("devtools/server/actors/webapps", {
prefix: "webapps",
constructor: "WebappsActor",
type: { global: true }
});
register a tab actor:
DebuggerServer.registerModule("devtools/server/actors/webconsole", {
prefix: "console",
constructor: "WebConsoleActor",
type: { tab: true }
});
E10S Setup
Some of the actor modules needs to exchange messages between the parent and child processes.
E.g. the director-manager needs to ask the list installed director scripts from the director-registry running in the parent process) and the parent/child setup is lazily directed by the DebuggerServer.
When the actor is loaded for the first time in the the DebuggerServer running in the child process, it has the chances to run its setup procedure, e.g. in the director-registry:
...
const {DebuggerServer} = require("devtools/server/main");
...
// skip child setup if this actor module is not running in a child process
if (DebuggerServer.isInChildProcess) {
setupChildProcess();
}
...
The above setupChildProcess helper will use the DebuggerServer.setupInParent to start a setup process in the parent process Debugger Server, e.g. in the the director-registry:
function setupChildProcess() {
const { sendSyncMessage } = DebuggerServer.parentMessageManager;
DebuggerServer.setupInParent({
module: "devtools/server/actors/director-registry",
setupParent: "setupParentProcess"
});
...
in the parent process, the DebuggerServer will require the requested module and call the setupParent exported helper with the MessageManager connected to the child process as parameter, e.g. in the director-registry:
/**
* E10S parent/child setup helpers
*/
let gTrackedMessageManager = new Set();
exports.setupParentProcess = function setupParentProcess({ mm, prefix }) {
if (gTrackedMessageManager.has(mm)) { return; }
gTrackedMessageManager.add(mm);
// listen for director-script requests from the child process
mm.addMessageListener("debug:director-registry-request", handleChildRequest);
// time to unsubscribe from the disconnected message manager
DebuggerServer.once("disconnected-from-child:" + prefix, handleMessageManagerDisconnected);
function handleMessageManagerDisconnected(evt, { mm: disconnected_mm }) {
...
}
The DebuggerServer emits "disconnected-from-child:CHILDID" events to give the actor modules the chance to cleanup their handlers registered on the disconnected message manager.
E10S setup flow
In the child process:
- DebuggerServer loads an actor module
- the actor module check DebuggerServer.isInChildProcess
- the actor module calls the DebuggerServer.setupInParent helper
- the DebuggerServer.setupInParent helper asks to the parent process to run the required setup
- the actor module use the DebuggerServer.parentMessageManager.sendSyncMessage, DebuggerServer.parentMessageManager.addMessageListener helpers to send requests or to subscribe message handlers
- the actor module check DebuggerServer.isInChildProcess
In the parent process:
- The DebuggerServer receives the DebuggerServer.setupInParent request
- it tries to load the required module
- it tries to call the mod[setupParent] method with the frame message manager and the prefix
in the json parameter { mm, prefix }
- the module setupParent helper use the mm to subscribe the messagemanager events
- the module setupParent helper use the DebuggerServer object to subscribe once the "disconnected-from-child:PREFIX" event (needed to unsubscribe the messagemanager events)