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

Side by Side Diff: chrome/browser/worker_host/worker_process_host.cc

Issue 5625003: Make the AppCacheDispatcherHost be a MessageFilter so that ResourceMessageFil... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix dependency issue in AppCacheDispatcherHost Created 10 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 "chrome/browser/worker_host/worker_process_host.h" 5 #include "chrome/browser/worker_host/worker_process_host.h"
6 6
7 #include <set> 7 #include <set>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 private: 62 private:
63 int render_process_unique_id_; 63 int render_process_unique_id_;
64 int render_view_id_; 64 int render_view_id_;
65 }; 65 };
66 66
67 WorkerProcessHost::WorkerProcessHost( 67 WorkerProcessHost::WorkerProcessHost(
68 ResourceDispatcherHost* resource_dispatcher_host, 68 ResourceDispatcherHost* resource_dispatcher_host,
69 ChromeURLRequestContext *request_context) 69 ChromeURLRequestContext *request_context)
70 : BrowserChildProcessHost(WORKER_PROCESS, resource_dispatcher_host), 70 : BrowserChildProcessHost(WORKER_PROCESS, resource_dispatcher_host),
71 request_context_(request_context), 71 request_context_(request_context),
72 appcache_dispatcher_host_(
73 new AppCacheDispatcherHost(request_context)),
74 ALLOW_THIS_IN_INITIALIZER_LIST(blob_dispatcher_host_( 72 ALLOW_THIS_IN_INITIALIZER_LIST(blob_dispatcher_host_(
75 new BlobDispatcherHost( 73 new BlobDispatcherHost(
76 this->id(), request_context->blob_storage_context()))), 74 this->id(), request_context->blob_storage_context()))),
77 ALLOW_THIS_IN_INITIALIZER_LIST(file_system_dispatcher_host_( 75 ALLOW_THIS_IN_INITIALIZER_LIST(file_system_dispatcher_host_(
78 new FileSystemDispatcherHost(this, request_context))), 76 new FileSystemDispatcherHost(this, request_context))),
79 ALLOW_THIS_IN_INITIALIZER_LIST(file_utilities_dispatcher_host_( 77 ALLOW_THIS_IN_INITIALIZER_LIST(file_utilities_dispatcher_host_(
80 new FileUtilitiesDispatcherHost(this, this->id()))), 78 new FileUtilitiesDispatcherHost(this, this->id()))),
81 ALLOW_THIS_IN_INITIALIZER_LIST(mime_registry_dispatcher_( 79 ALLOW_THIS_IN_INITIALIZER_LIST(mime_registry_dispatcher_(
82 new MimeRegistryDispatcher(this))) { 80 new MimeRegistryDispatcher(this))) {
83 next_route_id_callback_.reset(NewCallbackWithReturnValue( 81 next_route_id_callback_.reset(NewCallbackWithReturnValue(
84 WorkerService::GetInstance(), &WorkerService::next_worker_route_id)); 82 WorkerService::GetInstance(), &WorkerService::next_worker_route_id));
85 db_dispatcher_host_ = new DatabaseDispatcherHost( 83 db_dispatcher_host_ = new DatabaseDispatcherHost(
86 request_context->database_tracker(), this, 84 request_context->database_tracker(), this,
87 request_context_->host_content_settings_map()); 85 request_context_->host_content_settings_map());
88 appcache_dispatcher_host_->Initialize(this);
89 } 86 }
90 87
91 WorkerProcessHost::~WorkerProcessHost() { 88 WorkerProcessHost::~WorkerProcessHost() {
89 for (size_t i = 0; i < filters_.size(); ++i) {
90 filters_[i]->OnChannelClosing();
91 filters_[i]->OnFilterRemoved();
92 }
93
92 // Shut down the database dispatcher host. 94 // Shut down the database dispatcher host.
93 db_dispatcher_host_->Shutdown(); 95 db_dispatcher_host_->Shutdown();
94 96
95 // Shut down the blob dispatcher host. 97 // Shut down the blob dispatcher host.
96 blob_dispatcher_host_->Shutdown(); 98 blob_dispatcher_host_->Shutdown();
97 99
98 // Shut down the file system dispatcher host. 100 // Shut down the file system dispatcher host.
99 file_system_dispatcher_host_->Shutdown(); 101 file_system_dispatcher_host_->Shutdown();
100 102
101 // Shut down the file utilities dispatcher host. 103 // Shut down the file utilities dispatcher host.
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 base::PLATFORM_FILE_CREATE_ALWAYS | 210 base::PLATFORM_FILE_CREATE_ALWAYS |
209 base::PLATFORM_FILE_READ | 211 base::PLATFORM_FILE_READ |
210 base::PLATFORM_FILE_WRITE | 212 base::PLATFORM_FILE_WRITE |
211 base::PLATFORM_FILE_EXCLUSIVE_READ | 213 base::PLATFORM_FILE_EXCLUSIVE_READ |
212 base::PLATFORM_FILE_EXCLUSIVE_WRITE | 214 base::PLATFORM_FILE_EXCLUSIVE_WRITE |
213 base::PLATFORM_FILE_ASYNC | 215 base::PLATFORM_FILE_ASYNC |
214 base::PLATFORM_FILE_TRUNCATE | 216 base::PLATFORM_FILE_TRUNCATE |
215 base::PLATFORM_FILE_WRITE_ATTRIBUTES); 217 base::PLATFORM_FILE_WRITE_ATTRIBUTES);
216 } 218 }
217 219
220 CreateMessageFilters();
221
218 return true; 222 return true;
219 } 223 }
220 224
225 void WorkerProcessHost::CreateMessageFilters() {
226 filters_.push_back(new AppCacheDispatcherHost(request_context_, id()));
jennb 2010/12/04 00:31:51 I'm guessing you're switching the other dispatcher
227
228 for (size_t i = 0; i < filters_.size(); ++i)
229 filters_[i]->OnFilterAdded(channel());
230 }
231
221 void WorkerProcessHost::CreateWorker(const WorkerInstance& instance) { 232 void WorkerProcessHost::CreateWorker(const WorkerInstance& instance) {
222 ChildProcessSecurityPolicy::GetInstance()->GrantRequestURL( 233 ChildProcessSecurityPolicy::GetInstance()->GrantRequestURL(
223 id(), instance.url()); 234 id(), instance.url());
224 235
225 instances_.push_back(instance); 236 instances_.push_back(instance);
226 237
227 WorkerProcessMsg_CreateWorker_Params params; 238 WorkerProcessMsg_CreateWorker_Params params;
228 params.url = instance.url(); 239 params.url = instance.url();
229 params.is_shared = instance.shared(); 240 params.is_shared = instance.shared();
230 params.name = instance.name(); 241 params.name = instance.name();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 // Set the closed flag - this will stop any further messages from 284 // Set the closed flag - this will stop any further messages from
274 // being sent to the worker (messages can still be sent from the worker, 285 // being sent to the worker (messages can still be sent from the worker,
275 // for exception reporting, etc). 286 // for exception reporting, etc).
276 i->set_closed(true); 287 i->set_closed(true);
277 break; 288 break;
278 } 289 }
279 } 290 }
280 } 291 }
281 292
282 void WorkerProcessHost::OnMessageReceived(const IPC::Message& message) { 293 void WorkerProcessHost::OnMessageReceived(const IPC::Message& message) {
294 for (size_t i = 0; i < filters_.size(); ++i) {
295 if (filters_[i]->OnMessageReceived(message))
296 return;
297 }
298
283 bool msg_is_ok = true; 299 bool msg_is_ok = true;
284 bool handled = 300 bool handled =
285 appcache_dispatcher_host_->OnMessageReceived(message, &msg_is_ok) ||
286 db_dispatcher_host_->OnMessageReceived(message, &msg_is_ok) || 301 db_dispatcher_host_->OnMessageReceived(message, &msg_is_ok) ||
jennb 2010/12/04 00:31:51 Will all these also become filters eventually?
287 blob_dispatcher_host_->OnMessageReceived(message, &msg_is_ok) || 302 blob_dispatcher_host_->OnMessageReceived(message, &msg_is_ok) ||
288 file_system_dispatcher_host_->OnMessageReceived(message, &msg_is_ok) || 303 file_system_dispatcher_host_->OnMessageReceived(message, &msg_is_ok) ||
289 file_utilities_dispatcher_host_->OnMessageReceived(message) || 304 file_utilities_dispatcher_host_->OnMessageReceived(message) ||
290 mime_registry_dispatcher_->OnMessageReceived(message) || 305 mime_registry_dispatcher_->OnMessageReceived(message) ||
291 MessagePortDispatcher::GetInstance()->OnMessageReceived( 306 MessagePortDispatcher::GetInstance()->OnMessageReceived(
292 message, this, next_route_id_callback_.get(), &msg_is_ok); 307 message, this, next_route_id_callback_.get(), &msg_is_ok);
293 308
294 if (!handled) { 309 if (!handled) {
295 handled = true; 310 handled = true;
296 IPC_BEGIN_MESSAGE_MAP_EX(WorkerProcessHost, message, msg_is_ok) 311 IPC_BEGIN_MESSAGE_MAP_EX(WorkerProcessHost, message, msg_is_ok)
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 344
330 if (message.type() == WorkerHostMsg_WorkerContextDestroyed::ID) { 345 if (message.type() == WorkerHostMsg_WorkerContextDestroyed::ID) {
331 instances_.erase(i); 346 instances_.erase(i);
332 UpdateTitle(); 347 UpdateTitle();
333 } 348 }
334 break; 349 break;
335 } 350 }
336 } 351 }
337 } 352 }
338 353
354 void WorkerProcessHost::OnChannelConnected(int32 peer_pid) {
355 for (size_t i = 0; i < filters_.size(); ++i)
356 filters_[i]->OnChannelConnected(peer_pid);
357 }
358
359 void WorkerProcessHost::OnChannelError() {
360 for (size_t i = 0; i < filters_.size(); ++i)
361 filters_[i]->OnChannelError();
362 }
363
339 void WorkerProcessHost::OnProcessLaunched() { 364 void WorkerProcessHost::OnProcessLaunched() {
340 db_dispatcher_host_->Init(handle()); 365 db_dispatcher_host_->Init(handle());
341 file_system_dispatcher_host_->Init(handle()); 366 file_system_dispatcher_host_->Init(handle());
342 file_utilities_dispatcher_host_->Init(handle()); 367 file_utilities_dispatcher_host_->Init(handle());
343 } 368 }
344 369
345 CallbackWithReturnValue<int>::Type* WorkerProcessHost::GetNextRouteIdCallback( 370 CallbackWithReturnValue<int>::Type* WorkerProcessHost::GetNextRouteIdCallback(
346 IPC::Message::Sender* sender) { 371 IPC::Message::Sender* sender) {
347 // We don't keep callbacks for senders associated with workers, so figure out 372 // We don't keep callbacks for senders associated with workers, so figure out
348 // what kind of sender this is, and cast it to the correct class to get the 373 // what kind of sender this is, and cast it to the correct class to get the
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 } 711 }
687 } 712 }
688 return false; 713 return false;
689 } 714 }
690 715
691 WorkerProcessHost::WorkerInstance::SenderInfo 716 WorkerProcessHost::WorkerInstance::SenderInfo
692 WorkerProcessHost::WorkerInstance::GetSender() const { 717 WorkerProcessHost::WorkerInstance::GetSender() const {
693 DCHECK(NumSenders() == 1); 718 DCHECK(NumSenders() == 1);
694 return *senders_.begin(); 719 return *senders_.begin();
695 } 720 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698