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

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

Issue 283313002: Ensure that any IPC sent from a child process that couldn't be deserialized causes that p… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: switch to histograms Created 6 years, 7 months 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/worker_host/worker_process_host.h" 5 #include "content/browser/worker_host/worker_process_host.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 return false; 366 return false;
367 } 367 }
368 368
369 void WorkerProcessHost::OnProcessLaunched() { 369 void WorkerProcessHost::OnProcessLaunched() {
370 process_launched_ = true; 370 process_launched_ = true;
371 371
372 WorkerServiceImpl::GetInstance()->NotifyWorkerProcessCreated(); 372 WorkerServiceImpl::GetInstance()->NotifyWorkerProcessCreated();
373 } 373 }
374 374
375 bool WorkerProcessHost::OnMessageReceived(const IPC::Message& message) { 375 bool WorkerProcessHost::OnMessageReceived(const IPC::Message& message) {
376 bool msg_is_ok = true;
377 bool handled = true; 376 bool handled = true;
378 IPC_BEGIN_MESSAGE_MAP_EX(WorkerProcessHost, message, msg_is_ok) 377 IPC_BEGIN_MESSAGE_MAP(WorkerProcessHost, message)
379 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerContextClosed, 378 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerContextClosed,
380 OnWorkerContextClosed) 379 OnWorkerContextClosed)
381 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerContextDestroyed, 380 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerContextDestroyed,
382 OnWorkerContextDestroyed) 381 OnWorkerContextDestroyed)
383 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerScriptLoaded, 382 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerScriptLoaded,
384 OnWorkerScriptLoaded) 383 OnWorkerScriptLoaded)
385 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerScriptLoadFailed, 384 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerScriptLoadFailed,
386 OnWorkerScriptLoadFailed) 385 OnWorkerScriptLoadFailed)
387 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerConnected, 386 IPC_MESSAGE_HANDLER(WorkerHostMsg_WorkerConnected,
388 OnWorkerConnected) 387 OnWorkerConnected)
389 IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowDatabase, OnAllowDatabase) 388 IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowDatabase, OnAllowDatabase)
390 IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowFileSystem, OnAllowFileSystem) 389 IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowFileSystem, OnAllowFileSystem)
391 IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowIndexedDB, OnAllowIndexedDB) 390 IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_AllowIndexedDB, OnAllowIndexedDB)
392 IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_ForceKillWorker, 391 IPC_MESSAGE_HANDLER(WorkerProcessHostMsg_ForceKillWorker,
393 OnForceKillWorkerProcess) 392 OnForceKillWorkerProcess)
394 IPC_MESSAGE_UNHANDLED(handled = false) 393 IPC_MESSAGE_UNHANDLED(handled = false)
395 IPC_END_MESSAGE_MAP_EX() 394 IPC_END_MESSAGE_MAP_EX()
396 395
397 if (!msg_is_ok) {
398 NOTREACHED();
399 RecordAction(base::UserMetricsAction("BadMessageTerminate_WPH"));
400 base::KillProcess(
401 process_->GetData().handle, RESULT_CODE_KILLED_BAD_MESSAGE, false);
402 }
403
404 return handled; 396 return handled;
405 } 397 }
406 398
407 // Sent to notify the browser process when a worker context invokes close(), so 399 // Sent to notify the browser process when a worker context invokes close(), so
408 // no new connections are sent to shared workers. 400 // no new connections are sent to shared workers.
409 void WorkerProcessHost::OnWorkerContextClosed(int worker_route_id) { 401 void WorkerProcessHost::OnWorkerContextClosed(int worker_route_id) {
410 for (Instances::iterator i = instances_.begin(); i != instances_.end(); ++i) { 402 for (Instances::iterator i = instances_.begin(); i != instances_.end(); ++i) {
411 if (i->worker_route_id() == worker_route_id) { 403 if (i->worker_route_id() == worker_route_id) {
412 // Set the closed flag - this will stop any further messages from 404 // Set the closed flag - this will stop any further messages from
413 // being sent to the worker (messages can still be sent from the worker, 405 // being sent to the worker (messages can still be sent from the worker,
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
828 return false; 820 return false;
829 } 821 }
830 822
831 WorkerProcessHost::WorkerInstance::FilterInfo 823 WorkerProcessHost::WorkerInstance::FilterInfo
832 WorkerProcessHost::WorkerInstance::GetFilter() const { 824 WorkerProcessHost::WorkerInstance::GetFilter() const {
833 DCHECK(NumFilters() == 1); 825 DCHECK(NumFilters() == 1);
834 return *filters_.begin(); 826 return *filters_.begin();
835 } 827 }
836 828
837 } // namespace content 829 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_process_host_impl.cc ('k') | content/common/child_process_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698