diff options
author | michaeln@chromium.org <michaeln@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-23 23:53:37 +0000 |
---|---|---|
committer | michaeln@chromium.org <michaeln@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-23 23:53:37 +0000 |
commit | b37ea77f80650f9bf88aeedfb0650463e0df6253 (patch) | |
tree | a051b435104ee3ceab6bd02c573f203d433499d0 /content/renderer/service_worker | |
parent | 5cfbddc9cc972f5133f26664dbf5810bb569cd04 (diff) | |
download | chromium_src-b37ea77f80650f9bf88aeedfb0650463e0df6253.zip chromium_src-b37ea77f80650f9bf88aeedfb0650463e0df6253.tar.gz chromium_src-b37ea77f80650f9bf88aeedfb0650463e0df6253.tar.bz2 |
Chromium: Adds a mechanism to pause the serviceworker startup sequence after downloading the main script and then to resume. This is to give the browser process a chance to compare the old and new script during a softupdate.
BUG=371671
Review URL: https://codereview.chromium.org/345463002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@279233 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer/service_worker')
4 files changed, 31 insertions, 2 deletions
diff --git a/content/renderer/service_worker/embedded_worker_context_client.cc b/content/renderer/service_worker/embedded_worker_context_client.cc index ea4072d..3642eff 100644 --- a/content/renderer/service_worker/embedded_worker_context_client.cc +++ b/content/renderer/service_worker/embedded_worker_context_client.cc @@ -120,6 +120,10 @@ blink::WebURL EmbeddedWorkerContextClient::scope() const { return service_worker_scope_; } +void EmbeddedWorkerContextClient::didPauseAfterDownload() { + Send(new EmbeddedWorkerHostMsg_DidPauseAfterDownload(embedded_worker_id_)); +} + void EmbeddedWorkerContextClient::getClients( blink::WebServiceWorkerClientsCallbacks* callbacks) { DCHECK(script_context_); diff --git a/content/renderer/service_worker/embedded_worker_context_client.h b/content/renderer/service_worker/embedded_worker_context_client.h index 7d18ec5..3fa6973 100644 --- a/content/renderer/service_worker/embedded_worker_context_client.h +++ b/content/renderer/service_worker/embedded_worker_context_client.h @@ -66,6 +66,7 @@ class EmbeddedWorkerContextClient // WebServiceWorkerContextClient overrides, some of them are just dispatched // on to script_context_. virtual blink::WebURL scope() const; + virtual void didPauseAfterDownload(); virtual void getClients(blink::WebServiceWorkerClientsCallbacks*); virtual void workerContextFailedToStart(); virtual void workerContextStarted(blink::WebServiceWorkerContextProxy* proxy); diff --git a/content/renderer/service_worker/embedded_worker_dispatcher.cc b/content/renderer/service_worker/embedded_worker_dispatcher.cc index 15ff76a4..9630f3a 100644 --- a/content/renderer/service_worker/embedded_worker_dispatcher.cc +++ b/content/renderer/service_worker/embedded_worker_dispatcher.cc @@ -52,6 +52,8 @@ bool EmbeddedWorkerDispatcher::OnMessageReceived( IPC_BEGIN_MESSAGE_MAP(EmbeddedWorkerDispatcher, message) IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_StartWorker, OnStartWorker) IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_StopWorker, OnStopWorker) + IPC_MESSAGE_HANDLER(EmbeddedWorkerMsg_ResumeAfterDownload, + OnResumeAfterDownload) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; @@ -82,9 +84,21 @@ void EmbeddedWorkerDispatcher::OnStartWorker( blink::WebEmbeddedWorkerStartData start_data; start_data.scriptURL = params.script_url; start_data.userAgent = base::UTF8ToUTF16(GetContentClient()->GetUserAgent()); + start_data.pauseAfterDownloadMode = + params.pause_after_download ? + blink::WebEmbeddedWorkerStartData::PauseAfterDownload : + blink::WebEmbeddedWorkerStartData::DontPauseAfterDownload; + start_data.waitForDebuggerMode = + params.wait_for_debugger ? + blink::WebEmbeddedWorkerStartData::WaitForDebugger : + blink::WebEmbeddedWorkerStartData::DontWaitForDebugger; + + // TODO(michaeln): delete setting this deprecated member once blink + // stops reading it. start_data.startMode = - params.pause_on_start ? blink::WebEmbeddedWorkerStartModePauseOnStart - : blink::WebEmbeddedWorkerStartModeDontPauseOnStart; + params.wait_for_debugger ? + blink::WebEmbeddedWorkerStartModePauseOnStart : + blink::WebEmbeddedWorkerStartModeDontPauseOnStart; wrapper->worker()->startWorkerContext(start_data); workers_.AddWithID(wrapper.release(), params.embedded_worker_id); @@ -103,4 +117,13 @@ void EmbeddedWorkerDispatcher::OnStopWorker(int embedded_worker_id) { wrapper->worker()->terminateWorkerContext(); } +void EmbeddedWorkerDispatcher::OnResumeAfterDownload(int embedded_worker_id) { + WorkerWrapper* wrapper = workers_.Lookup(embedded_worker_id); + if (!wrapper) { + LOG(WARNING) << "Got OnResumeAfterDownload for nonexistent worker"; + return; + } + wrapper->worker()->resumeAfterDownload(); +} + } // namespace content diff --git a/content/renderer/service_worker/embedded_worker_dispatcher.h b/content/renderer/service_worker/embedded_worker_dispatcher.h index 4f3434f..104ebfa 100644 --- a/content/renderer/service_worker/embedded_worker_dispatcher.h +++ b/content/renderer/service_worker/embedded_worker_dispatcher.h @@ -35,6 +35,7 @@ class EmbeddedWorkerDispatcher : public IPC::Listener { void OnStartWorker(const EmbeddedWorkerMsg_StartWorker_Params& params); void OnStopWorker(int embedded_worker_id); + void OnResumeAfterDownload(int embedded_worker_id); IDMap<WorkerWrapper, IDMapOwnPointer> workers_; base::WeakPtrFactory<EmbeddedWorkerDispatcher> weak_factory_; |