Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: content/browser/service_worker/service_worker_version.cc

Issue 733703002: Make sure message ports that are transferred to a serviceworker end up in the right process. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@service-worker-message-port-transfer
Patch Set: fix test compile Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « content/browser/service_worker/service_worker_version.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/service_worker/service_worker_version.h" 5 #include "content/browser/service_worker/service_worker_version.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "base/strings/string16.h" 9 #include "base/strings/string16.h"
10 #include "content/browser/message_port_message_filter.h"
10 #include "content/browser/service_worker/embedded_worker_instance.h" 11 #include "content/browser/service_worker/embedded_worker_instance.h"
11 #include "content/browser/service_worker/embedded_worker_registry.h" 12 #include "content/browser/service_worker/embedded_worker_registry.h"
12 #include "content/browser/service_worker/service_worker_context_core.h" 13 #include "content/browser/service_worker/service_worker_context_core.h"
13 #include "content/browser/service_worker/service_worker_registration.h" 14 #include "content/browser/service_worker/service_worker_registration.h"
14 #include "content/browser/service_worker/service_worker_utils.h" 15 #include "content/browser/service_worker/service_worker_utils.h"
15 #include "content/common/service_worker/service_worker_messages.h" 16 #include "content/common/service_worker/service_worker_messages.h"
16 #include "content/public/browser/browser_thread.h" 17 #include "content/public/browser/browser_thread.h"
17 #include "content/public/common/content_switches.h" 18 #include "content/public/common/content_switches.h"
18 19
19 namespace content { 20 namespace content {
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 base::Bind(&self::SendMessage, 241 base::Bind(&self::SendMessage,
241 weak_factory_.GetWeakPtr(), 242 weak_factory_.GetWeakPtr(),
242 message, callback))); 243 message, callback)));
243 return; 244 return;
244 } 245 }
245 246
246 ServiceWorkerStatusCode status = embedded_worker_->SendMessage(message); 247 ServiceWorkerStatusCode status = embedded_worker_->SendMessage(message);
247 RunSoon(base::Bind(callback, status)); 248 RunSoon(base::Bind(callback, status));
248 } 249 }
249 250
251 void ServiceWorkerVersion::DispatchMessageEvent(
252 const base::string16& message,
253 const std::vector<int>& sent_message_port_ids,
254 const StatusCallback& callback) {
255 if (running_status() != RUNNING) {
256 // Schedule calling this method after starting the worker.
257 StartWorker(base::Bind(
258 &RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(), callback,
259 base::Bind(&self::DispatchMessageEvent, weak_factory_.GetWeakPtr(),
260 message, sent_message_port_ids, callback)));
261 return;
262 }
263
264 MessagePortMessageFilter* filter =
265 embedded_worker_->message_port_message_filter();
266 std::vector<int> new_routing_ids;
267 filter->UpdateMessagePortsWithNewRoutes(sent_message_port_ids,
268 &new_routing_ids);
269 ServiceWorkerStatusCode status =
270 embedded_worker_->SendMessage(ServiceWorkerMsg_MessageToWorker(
271 message, sent_message_port_ids, new_routing_ids));
272 RunSoon(base::Bind(callback, status));
273 }
274
250 void ServiceWorkerVersion::DispatchInstallEvent( 275 void ServiceWorkerVersion::DispatchInstallEvent(
251 int active_version_id, 276 int active_version_id,
252 const StatusCallback& callback) { 277 const StatusCallback& callback) {
253 DCHECK_EQ(INSTALLING, status()) << status(); 278 DCHECK_EQ(INSTALLING, status()) << status();
254 279
255 if (running_status() != RUNNING) { 280 if (running_status() != RUNNING) {
256 // Schedule calling this method after starting the worker. 281 // Schedule calling this method after starting the worker.
257 StartWorker( 282 StartWorker(
258 base::Bind(&RunTaskAfterStartWorker, 283 base::Bind(&RunTaskAfterStartWorker,
259 weak_factory_.GetWeakPtr(), 284 weak_factory_.GetWeakPtr(),
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after
753 SetStatus(REDUNDANT); 778 SetStatus(REDUNDANT);
754 StopWorker(base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 779 StopWorker(base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
755 if (!context_) 780 if (!context_)
756 return; 781 return;
757 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; 782 std::vector<ServiceWorkerDatabase::ResourceRecord> resources;
758 script_cache_map_.GetResources(&resources); 783 script_cache_map_.GetResources(&resources);
759 context_->storage()->PurgeResources(resources); 784 context_->storage()->PurgeResources(resources);
760 } 785 }
761 786
762 } // namespace content 787 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/service_worker_version.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698