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

Side by Side Diff: content/browser/service_worker/service_worker_dispatcher_host.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
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_dispatcher_host.h" 5 #include "content/browser/service_worker/service_worker_dispatcher_host.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "content/browser/message_port_message_filter.h" 10 #include "content/browser/message_port_message_filter.h"
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { 115 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
116 BrowserThread::PostTask( 116 BrowserThread::PostTask(
117 BrowserThread::IO, FROM_HERE, 117 BrowserThread::IO, FROM_HERE,
118 base::Bind(&ServiceWorkerDispatcherHost::Init, 118 base::Bind(&ServiceWorkerDispatcherHost::Init,
119 this, make_scoped_refptr(context_wrapper))); 119 this, make_scoped_refptr(context_wrapper)));
120 return; 120 return;
121 } 121 }
122 122
123 context_wrapper_ = context_wrapper; 123 context_wrapper_ = context_wrapper;
124 GetContext()->embedded_worker_registry()->AddChildProcessSender( 124 GetContext()->embedded_worker_registry()->AddChildProcessSender(
125 render_process_id_, this); 125 render_process_id_, this, message_port_message_filter_);
126 } 126 }
127 127
128 void ServiceWorkerDispatcherHost::OnFilterAdded(IPC::Sender* sender) { 128 void ServiceWorkerDispatcherHost::OnFilterAdded(IPC::Sender* sender) {
129 TRACE_EVENT0("ServiceWorker", 129 TRACE_EVENT0("ServiceWorker",
130 "ServiceWorkerDispatcherHost::OnFilterAdded"); 130 "ServiceWorkerDispatcherHost::OnFilterAdded");
131 channel_ready_ = true; 131 channel_ready_ = true;
132 std::vector<IPC::Message*> messages; 132 std::vector<IPC::Message*> messages;
133 pending_messages_.release(&messages); 133 pending_messages_.release(&messages);
134 for (size_t i = 0; i < messages.size(); ++i) { 134 for (size_t i = 0; i < messages.size(); ++i) {
135 BrowserMessageFilter::Send(messages[i]); 135 BrowserMessageFilter::Send(messages[i]);
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 "ServiceWorkerDispatcherHost::OnPostMessageToWorker"); 463 "ServiceWorkerDispatcherHost::OnPostMessageToWorker");
464 if (!GetContext()) 464 if (!GetContext())
465 return; 465 return;
466 466
467 ServiceWorkerHandle* handle = handles_.Lookup(handle_id); 467 ServiceWorkerHandle* handle = handles_.Lookup(handle_id);
468 if (!handle) { 468 if (!handle) {
469 BadMessageReceived(); 469 BadMessageReceived();
470 return; 470 return;
471 } 471 }
472 472
473 std::vector<int> new_routing_ids; 473 handle->version()->DispatchMessageEvent(
474 message_port_message_filter_->UpdateMessagePortsWithNewRoutes( 474 message, sent_message_port_ids,
475 sent_message_port_ids, &new_routing_ids);
476 handle->version()->SendMessage(
477 ServiceWorkerMsg_MessageToWorker(message,
478 sent_message_port_ids,
479 new_routing_ids),
480 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 475 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
481 } 476 }
482 477
483 void ServiceWorkerDispatcherHost::OnProviderCreated(int provider_id) { 478 void ServiceWorkerDispatcherHost::OnProviderCreated(int provider_id) {
484 TRACE_EVENT0("ServiceWorker", 479 TRACE_EVENT0("ServiceWorker",
485 "ServiceWorkerDispatcherHost::OnProviderCreated"); 480 "ServiceWorkerDispatcherHost::OnProviderCreated");
486 if (!GetContext()) 481 if (!GetContext())
487 return; 482 return;
488 if (GetContext()->GetProviderHost(render_process_id_, provider_id)) { 483 if (GetContext()->GetProviderHost(render_process_id_, provider_id)) {
489 BadMessageReceived(); 484 BadMessageReceived();
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 thread_id, request_id, error_type, error_message)); 852 thread_id, request_id, error_type, error_message));
858 } 853 }
859 854
860 ServiceWorkerContextCore* ServiceWorkerDispatcherHost::GetContext() { 855 ServiceWorkerContextCore* ServiceWorkerDispatcherHost::GetContext() {
861 if (!context_wrapper_.get()) 856 if (!context_wrapper_.get())
862 return nullptr; 857 return nullptr;
863 return context_wrapper_->context(); 858 return context_wrapper_->context();
864 } 859 }
865 860
866 } // namespace content 861 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/embedded_worker_test_helper.cc ('k') | content/browser/service_worker/service_worker_version.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698