summaryrefslogtreecommitdiffstats
path: root/content/renderer/service_worker
diff options
context:
space:
mode:
authormichaeln@chromium.org <michaeln@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-23 23:53:37 +0000
committermichaeln@chromium.org <michaeln@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-23 23:53:37 +0000
commitb37ea77f80650f9bf88aeedfb0650463e0df6253 (patch)
treea051b435104ee3ceab6bd02c573f203d433499d0 /content/renderer/service_worker
parent5cfbddc9cc972f5133f26664dbf5810bb569cd04 (diff)
downloadchromium_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')
-rw-r--r--content/renderer/service_worker/embedded_worker_context_client.cc4
-rw-r--r--content/renderer/service_worker/embedded_worker_context_client.h1
-rw-r--r--content/renderer/service_worker/embedded_worker_dispatcher.cc27
-rw-r--r--content/renderer/service_worker/embedded_worker_dispatcher.h1
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_;