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

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

Issue 5978003: Make IPC::Channel::Listener:OnMessageReceived have a return value indicating ... (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 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 return true; 269 return true;
270 } 270 }
271 } 271 }
272 272
273 return false; 273 return false;
274 } 274 }
275 275
276 void WorkerProcessHost::OnProcessLaunched() { 276 void WorkerProcessHost::OnProcessLaunched() {
277 } 277 }
278 278
279 void WorkerProcessHost::OnMessageReceived(const IPC::Message& message) { 279 bool WorkerProcessHost::OnMessageReceived(const IPC::Message& message) {
280 bool msg_is_ok = true; 280 bool msg_is_ok = true;
281 bool handled = true; 281 bool handled = true;
282 IPC_BEGIN_MESSAGE_MAP_EX(WorkerProcessHost, message, msg_is_ok) 282 IPC_BEGIN_MESSAGE_MAP_EX(WorkerProcessHost, message, msg_is_ok)
283 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerContextClosed, 283 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerContextClosed,
284 OnWorkerContextClosed) 284 OnWorkerContextClosed)
285 IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowDatabase, OnAllowDatabase) 285 IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowDatabase, OnAllowDatabase)
286 IPC_MESSAGE_UNHANDLED(handled = false) 286 IPC_MESSAGE_UNHANDLED(handled = false)
287 IPC_END_MESSAGE_MAP_EX() 287 IPC_END_MESSAGE_MAP_EX()
288 288
289 if (!msg_is_ok) { 289 if (!msg_is_ok) {
290 NOTREACHED(); 290 NOTREACHED();
291 UserMetrics::RecordAction(UserMetricsAction("BadMessageTerminate_WPH")); 291 UserMetrics::RecordAction(UserMetricsAction("BadMessageTerminate_WPH"));
292 base::KillProcess(handle(), ResultCodes::KILLED_BAD_MESSAGE, false); 292 base::KillProcess(handle(), ResultCodes::KILLED_BAD_MESSAGE, false);
293 } 293 }
294 294
295 if (handled) 295 if (handled)
296 return; 296 return true;
297 297
298 for (Instances::iterator i = instances_.begin(); i != instances_.end(); ++i) { 298 for (Instances::iterator i = instances_.begin(); i != instances_.end(); ++i) {
299 if (i->worker_route_id() == message.routing_id()) { 299 if (i->worker_route_id() == message.routing_id()) {
300 if (!i->shared()) { 300 if (!i->shared()) {
301 // Don't relay messages from shared workers (all communication is via 301 // Don't relay messages from shared workers (all communication is via
302 // the message port). 302 // the message port).
303 WorkerInstance::FilterInfo info = i->GetFilter(); 303 WorkerInstance::FilterInfo info = i->GetFilter();
304 RelayMessage(message, info.first, info.second); 304 RelayMessage(message, info.first, info.second);
305 } 305 }
306 306
307 if (message.type() == WorkerHostMsg_WorkerContextDestroyed::ID) { 307 if (message.type() == WorkerHostMsg_WorkerContextDestroyed::ID) {
308 instances_.erase(i); 308 instances_.erase(i);
309 UpdateTitle(); 309 UpdateTitle();
310 } 310 }
311 break; 311 return true;
312 } 312 }
313 } 313 }
314 return false;
314 } 315 }
315 316
316 // Sent to notify the browser process when a worker context invokes close(), so 317 // Sent to notify the browser process when a worker context invokes close(), so
317 // no new connections are sent to shared workers. 318 // no new connections are sent to shared workers.
318 void WorkerProcessHost::OnWorkerContextClosed(int worker_route_id) { 319 void WorkerProcessHost::OnWorkerContextClosed(int worker_route_id) {
319 for (Instances::iterator i = instances_.begin(); i != instances_.end(); ++i) { 320 for (Instances::iterator i = instances_.begin(); i != instances_.end(); ++i) {
320 if (i->worker_route_id() == worker_route_id) { 321 if (i->worker_route_id() == worker_route_id) {
321 // Set the closed flag - this will stop any further messages from 322 // Set the closed flag - this will stop any further messages from
322 // being sent to the worker (messages can still be sent from the worker, 323 // being sent to the worker (messages can still be sent from the worker,
323 // for exception reporting, etc). 324 // for exception reporting, etc).
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 } 607 }
607 } 608 }
608 return false; 609 return false;
609 } 610 }
610 611
611 WorkerProcessHost::WorkerInstance::FilterInfo 612 WorkerProcessHost::WorkerInstance::FilterInfo
612 WorkerProcessHost::WorkerInstance::GetFilter() const { 613 WorkerProcessHost::WorkerInstance::GetFilter() const {
613 DCHECK(NumFilters() == 1); 614 DCHECK(NumFilters() == 1);
614 return *filters_.begin(); 615 return *filters_.begin();
615 } 616 }
OLDNEW
« no previous file with comments | « chrome/browser/worker_host/worker_process_host.h ('k') | chrome/common/appcache/appcache_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698