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

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

Issue 5874002: Create a ResourceMessageFilter to filter resource related IPCs. This gets ri... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' 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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 WorkerProcessHost::WorkerProcessHost( 68 WorkerProcessHost::WorkerProcessHost(
69 ResourceDispatcherHost* resource_dispatcher_host, 69 ResourceDispatcherHost* resource_dispatcher_host,
70 ChromeURLRequestContext *request_context) 70 ChromeURLRequestContext *request_context)
71 : BrowserChildProcessHost(WORKER_PROCESS, resource_dispatcher_host), 71 : BrowserChildProcessHost(WORKER_PROCESS, resource_dispatcher_host),
72 request_context_(request_context) { 72 request_context_(request_context) {
73 next_route_id_callback_.reset(NewCallbackWithReturnValue( 73 next_route_id_callback_.reset(NewCallbackWithReturnValue(
74 WorkerService::GetInstance(), &WorkerService::next_worker_route_id)); 74 WorkerService::GetInstance(), &WorkerService::next_worker_route_id));
75 } 75 }
76 76
77 WorkerProcessHost::~WorkerProcessHost() { 77 WorkerProcessHost::~WorkerProcessHost() {
78 for (size_t i = 0; i < filters_.size(); ++i) {
79 filters_[i]->OnChannelClosing();
80 filters_[i]->OnFilterRemoved();
81 }
82
83 // Let interested observers know we are being deleted. 78 // Let interested observers know we are being deleted.
84 NotificationService::current()->Notify( 79 NotificationService::current()->Notify(
85 NotificationType::WORKER_PROCESS_HOST_SHUTDOWN, 80 NotificationType::WORKER_PROCESS_HOST_SHUTDOWN,
86 Source<WorkerProcessHost>(this), 81 Source<WorkerProcessHost>(this),
87 NotificationService::NoDetails()); 82 NotificationService::NoDetails());
88 83
89 // If we crashed, tell the RenderViewHosts. 84 // If we crashed, tell the RenderViewHosts.
90 for (Instances::iterator i = instances_.begin(); i != instances_.end(); ++i) { 85 for (Instances::iterator i = instances_.begin(); i != instances_.end(); ++i) {
91 const WorkerDocumentSet::DocumentInfoSet& parents = 86 const WorkerDocumentSet::DocumentInfoSet& parents =
92 i->worker_document_set()->documents(); 87 i->worker_document_set()->documents();
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 base::PLATFORM_FILE_TRUNCATE | 185 base::PLATFORM_FILE_TRUNCATE |
191 base::PLATFORM_FILE_WRITE_ATTRIBUTES); 186 base::PLATFORM_FILE_WRITE_ATTRIBUTES);
192 } 187 }
193 188
194 CreateMessageFilters(); 189 CreateMessageFilters();
195 190
196 return true; 191 return true;
197 } 192 }
198 193
199 void WorkerProcessHost::CreateMessageFilters() { 194 void WorkerProcessHost::CreateMessageFilters() {
200 filters_.push_back(new AppCacheDispatcherHost(request_context_, id())); 195 AddFilter(new AppCacheDispatcherHost(request_context_, id()));
201 filters_.push_back(new FileSystemDispatcherHost(request_context_)); 196 AddFilter(new FileSystemDispatcherHost(request_context_));
202 filters_.push_back(new FileUtilitiesMessageFilter(id())); 197 AddFilter(new FileUtilitiesMessageFilter(id()));
203 filters_.push_back( 198 AddFilter(
204 new BlobMessageFilter(id(), request_context_->blob_storage_context())); 199 new BlobMessageFilter(id(), request_context_->blob_storage_context()));
205 filters_.push_back(new MimeRegistryMessageFilter()); 200 AddFilter(new MimeRegistryMessageFilter());
206 filters_.push_back(new DatabaseMessageFilter( 201 AddFilter(new DatabaseMessageFilter(
207 request_context_->database_tracker(), 202 request_context_->database_tracker(),
208 request_context_->host_content_settings_map())); 203 request_context_->host_content_settings_map()));
209 filters_.push_back(new SocketStreamDispatcherHost()); 204 AddFilter(new SocketStreamDispatcherHost());
210
211 for (size_t i = 0; i < filters_.size(); ++i)
212 filters_[i]->OnFilterAdded(channel());
213 } 205 }
214 206
215 void WorkerProcessHost::CreateWorker(const WorkerInstance& instance) { 207 void WorkerProcessHost::CreateWorker(const WorkerInstance& instance) {
216 ChildProcessSecurityPolicy::GetInstance()->GrantRequestURL( 208 ChildProcessSecurityPolicy::GetInstance()->GrantRequestURL(
217 id(), instance.url()); 209 id(), instance.url());
218 210
219 instances_.push_back(instance); 211 instances_.push_back(instance);
220 212
221 WorkerProcessMsg_CreateWorker_Params params; 213 WorkerProcessMsg_CreateWorker_Params params;
222 params.url = instance.url(); 214 params.url = instance.url();
(...skipping 23 matching lines...) Expand all
246 if (!i->closed() && i->HasSender(sender, message.routing_id())) { 238 if (!i->closed() && i->HasSender(sender, message.routing_id())) {
247 RelayMessage( 239 RelayMessage(
248 message, this, i->worker_route_id(), next_route_id_callback_.get()); 240 message, this, i->worker_route_id(), next_route_id_callback_.get());
249 return true; 241 return true;
250 } 242 }
251 } 243 }
252 244
253 return false; 245 return false;
254 } 246 }
255 247
256 URLRequestContext* WorkerProcessHost::GetRequestContext(
257 uint32 request_id,
258 const ViewHostMsg_Resource_Request& request_data) {
259 return request_context_;
260 }
261
262 // Sent to notify the browser process when a worker context invokes close(), so 248 // Sent to notify the browser process when a worker context invokes close(), so
263 // no new connections are sent to shared workers. 249 // no new connections are sent to shared workers.
264 void WorkerProcessHost::OnWorkerContextClosed(int worker_route_id) { 250 void WorkerProcessHost::OnWorkerContextClosed(int worker_route_id) {
265 for (Instances::iterator i = instances_.begin(); i != instances_.end(); ++i) { 251 for (Instances::iterator i = instances_.begin(); i != instances_.end(); ++i) {
266 if (i->worker_route_id() == worker_route_id) { 252 if (i->worker_route_id() == worker_route_id) {
267 // Set the closed flag - this will stop any further messages from 253 // Set the closed flag - this will stop any further messages from
268 // being sent to the worker (messages can still be sent from the worker, 254 // being sent to the worker (messages can still be sent from the worker,
269 // for exception reporting, etc). 255 // for exception reporting, etc).
270 i->set_closed(true); 256 i->set_closed(true);
271 break; 257 break;
272 } 258 }
273 } 259 }
274 } 260 }
275 261
276 void WorkerProcessHost::OnMessageReceived(const IPC::Message& message) { 262 void WorkerProcessHost::OnMessageReceived(const IPC::Message& message) {
277 for (size_t i = 0; i < filters_.size(); ++i) {
278 if (filters_[i]->OnMessageReceived(message))
279 return;
280 }
281
282 bool msg_is_ok = true; 263 bool msg_is_ok = true;
283 bool handled = 264 bool handled =
284 MessagePortDispatcher::GetInstance()->OnMessageReceived( 265 MessagePortDispatcher::GetInstance()->OnMessageReceived(
285 message, this, next_route_id_callback_.get(), &msg_is_ok); 266 message, this, next_route_id_callback_.get(), &msg_is_ok);
286 267
287 if (!handled) { 268 if (!handled) {
288 handled = true; 269 handled = true;
289 IPC_BEGIN_MESSAGE_MAP_EX(WorkerProcessHost, message, msg_is_ok) 270 IPC_BEGIN_MESSAGE_MAP_EX(WorkerProcessHost, message, msg_is_ok)
290 IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWorker, OnCreateWorker) 271 IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWorker, OnCreateWorker)
291 IPC_MESSAGE_HANDLER(ViewHostMsg_LookupSharedWorker, OnLookupSharedWorker) 272 IPC_MESSAGE_HANDLER(ViewHostMsg_LookupSharedWorker, OnLookupSharedWorker)
(...skipping 30 matching lines...) Expand all
322 303
323 if (message.type() == WorkerHostMsg_WorkerContextDestroyed::ID) { 304 if (message.type() == WorkerHostMsg_WorkerContextDestroyed::ID) {
324 instances_.erase(i); 305 instances_.erase(i);
325 UpdateTitle(); 306 UpdateTitle();
326 } 307 }
327 break; 308 break;
328 } 309 }
329 } 310 }
330 } 311 }
331 312
332 void WorkerProcessHost::OnChannelConnected(int32 peer_pid) {
333 for (size_t i = 0; i < filters_.size(); ++i)
334 filters_[i]->OnChannelConnected(peer_pid);
335 }
336
337 void WorkerProcessHost::OnChannelError() {
338 for (size_t i = 0; i < filters_.size(); ++i)
339 filters_[i]->OnChannelError();
340 }
341
342 void WorkerProcessHost::OnProcessLaunched() { 313 void WorkerProcessHost::OnProcessLaunched() {
343 } 314 }
344 315
345 CallbackWithReturnValue<int>::Type* WorkerProcessHost::GetNextRouteIdCallback( 316 CallbackWithReturnValue<int>::Type* WorkerProcessHost::GetNextRouteIdCallback(
346 IPC::Message::Sender* sender) { 317 IPC::Message::Sender* sender) {
347 // We don't keep callbacks for senders associated with workers, so figure out 318 // 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 319 // what kind of sender this is, and cast it to the correct class to get the
349 // callback. 320 // callback.
350 for (BrowserChildProcessHost::Iterator iter(ChildProcessInfo::WORKER_PROCESS); 321 for (BrowserChildProcessHost::Iterator iter(ChildProcessInfo::WORKER_PROCESS);
351 !iter.Done(); ++iter) { 322 !iter.Done(); ++iter) {
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 } 661 }
691 } 662 }
692 return false; 663 return false;
693 } 664 }
694 665
695 WorkerProcessHost::WorkerInstance::SenderInfo 666 WorkerProcessHost::WorkerInstance::SenderInfo
696 WorkerProcessHost::WorkerInstance::GetSender() const { 667 WorkerProcessHost::WorkerInstance::GetSender() const {
697 DCHECK(NumSenders() == 1); 668 DCHECK(NumSenders() == 1);
698 return *senders_.begin(); 669 return *senders_.begin();
699 } 670 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698