Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 // Represents the browser side of the browser <--> renderer communication | 5 // Represents the browser side of the browser <--> renderer communication |
| 6 // channel. There will be one RenderProcessHost per renderer process. | 6 // channel. There will be one RenderProcessHost per renderer process. |
| 7 | 7 |
| 8 #include "content/browser/renderer_host/render_process_host_impl.h" | 8 #include "content/browser/renderer_host/render_process_host_impl.h" |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 444 is_self_deleted_(false), | 444 is_self_deleted_(false), |
| 445 #endif | 445 #endif |
| 446 pending_views_(0), | 446 pending_views_(0), |
| 447 mojo_application_host_(new MojoApplicationHost), | 447 mojo_application_host_(new MojoApplicationHost), |
| 448 visible_widgets_(0), | 448 visible_widgets_(0), |
| 449 backgrounded_(true), | 449 backgrounded_(true), |
| 450 is_initialized_(false), | 450 is_initialized_(false), |
| 451 id_(ChildProcessHostImpl::GenerateChildProcessUniqueId()), | 451 id_(ChildProcessHostImpl::GenerateChildProcessUniqueId()), |
| 452 browser_context_(browser_context), | 452 browser_context_(browser_context), |
| 453 storage_partition_impl_(storage_partition_impl), | 453 storage_partition_impl_(storage_partition_impl), |
| 454 sudden_termination_allowed_(true), | 454 sudden_termination_enabled_(true), |
| 455 ignore_input_events_(false), | 455 ignore_input_events_(false), |
| 456 is_isolated_guest_(is_isolated_guest), | 456 is_isolated_guest_(is_isolated_guest), |
| 457 gpu_observer_registered_(false), | 457 gpu_observer_registered_(false), |
| 458 delayed_cleanup_needed_(false), | 458 delayed_cleanup_needed_(false), |
| 459 within_process_died_observer_(false), | 459 within_process_died_observer_(false), |
| 460 power_monitor_broadcaster_(this), | 460 power_monitor_broadcaster_(this), |
| 461 worker_ref_count_(0), | 461 worker_ref_count_(0), |
| 462 permission_service_context_(new PermissionServiceContext(this)), | 462 permission_service_context_(new PermissionServiceContext(this)), |
| 463 pending_valuebuffer_state_(new gpu::ValueStateMap()), | 463 pending_valuebuffer_state_(new gpu::ValueStateMap()), |
| 464 subscribe_uniform_enabled_(false), | 464 subscribe_uniform_enabled_(false), |
| (...skipping 954 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1419 if (!child_process_launcher_.get() || | 1419 if (!child_process_launcher_.get() || |
| 1420 child_process_launcher_->IsStarting() || | 1420 child_process_launcher_->IsStarting() || |
| 1421 !GetHandle()) | 1421 !GetHandle()) |
| 1422 return false; // Render process hasn't started or is probably crashed. | 1422 return false; // Render process hasn't started or is probably crashed. |
| 1423 | 1423 |
| 1424 // Test if there's an unload listener. | 1424 // Test if there's an unload listener. |
| 1425 // NOTE: It's possible that an onunload listener may be installed | 1425 // NOTE: It's possible that an onunload listener may be installed |
| 1426 // while we're shutting down, so there's a small race here. Given that | 1426 // while we're shutting down, so there's a small race here. Given that |
| 1427 // the window is small, it's unlikely that the web page has much | 1427 // the window is small, it's unlikely that the web page has much |
| 1428 // state that will be lost by not calling its unload handlers properly. | 1428 // state that will be lost by not calling its unload handlers properly. |
| 1429 if (!SuddenTerminationAllowed()) | 1429 if (!SuddenTerminationAllowed()) |
|
Charlie Reis
2015/01/29 23:20:41
This confused me at first, but I think I follow it
clamy
2015/02/02 16:16:27
As I explained in the other comment, I was planing
Charlie Reis
2015/02/02 20:14:50
I think tracking the handlers twice is fine. It's
clamy
2015/02/03 12:54:02
Acknowledged.
| |
| 1430 return false; | 1430 return false; |
| 1431 | 1431 |
| 1432 if (worker_ref_count_ != 0) { | 1432 if (worker_ref_count_ != 0) { |
| 1433 if (survive_for_worker_start_time_.is_null()) | 1433 if (survive_for_worker_start_time_.is_null()) |
| 1434 survive_for_worker_start_time_ = base::TimeTicks::Now(); | 1434 survive_for_worker_start_time_ = base::TimeTicks::Now(); |
| 1435 return false; | 1435 return false; |
| 1436 } | 1436 } |
| 1437 | 1437 |
| 1438 // Set this before ProcessDied() so observers can tell if the render process | 1438 // Set this before ProcessDied() so observers can tell if the render process |
| 1439 // died due to fast shutdown versus another cause. | 1439 // died due to fast shutdown versus another cause. |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1480 | 1480 |
| 1481 mark_child_process_activity_time(); | 1481 mark_child_process_activity_time(); |
| 1482 if (msg.routing_id() == MSG_ROUTING_CONTROL) { | 1482 if (msg.routing_id() == MSG_ROUTING_CONTROL) { |
| 1483 // Dispatch control messages. | 1483 // Dispatch control messages. |
| 1484 IPC_BEGIN_MESSAGE_MAP(RenderProcessHostImpl, msg) | 1484 IPC_BEGIN_MESSAGE_MAP(RenderProcessHostImpl, msg) |
| 1485 IPC_MESSAGE_HANDLER(ChildProcessHostMsg_ShutdownRequest, | 1485 IPC_MESSAGE_HANDLER(ChildProcessHostMsg_ShutdownRequest, |
| 1486 OnShutdownRequest) | 1486 OnShutdownRequest) |
| 1487 IPC_MESSAGE_HANDLER(ChildProcessHostMsg_DumpHandlesDone, | 1487 IPC_MESSAGE_HANDLER(ChildProcessHostMsg_DumpHandlesDone, |
| 1488 OnDumpHandlesDone) | 1488 OnDumpHandlesDone) |
| 1489 IPC_MESSAGE_HANDLER(ViewHostMsg_SuddenTerminationChanged, | 1489 IPC_MESSAGE_HANDLER(ViewHostMsg_SuddenTerminationChanged, |
| 1490 SuddenTerminationChanged) | 1490 OnSuddenTerminationChanged) |
| 1491 IPC_MESSAGE_HANDLER(ViewHostMsg_UserMetricsRecordAction, | 1491 IPC_MESSAGE_HANDLER(ViewHostMsg_UserMetricsRecordAction, |
| 1492 OnUserMetricsRecordAction) | 1492 OnUserMetricsRecordAction) |
| 1493 IPC_MESSAGE_HANDLER(ViewHostMsg_SavedPageAsMHTML, OnSavedPageAsMHTML) | 1493 IPC_MESSAGE_HANDLER(ViewHostMsg_SavedPageAsMHTML, OnSavedPageAsMHTML) |
| 1494 IPC_MESSAGE_HANDLER(ViewHostMsg_Close_ACK, OnCloseACK) | 1494 IPC_MESSAGE_HANDLER(ViewHostMsg_Close_ACK, OnCloseACK) |
| 1495 #if defined(ENABLE_WEBRTC) | 1495 #if defined(ENABLE_WEBRTC) |
| 1496 IPC_MESSAGE_HANDLER(AecDumpMsg_RegisterAecDumpConsumer, | 1496 IPC_MESSAGE_HANDLER(AecDumpMsg_RegisterAecDumpConsumer, |
| 1497 OnRegisterAecDumpConsumer) | 1497 OnRegisterAecDumpConsumer) |
| 1498 IPC_MESSAGE_HANDLER(AecDumpMsg_UnregisterAecDumpConsumer, | 1498 IPC_MESSAGE_HANDLER(AecDumpMsg_UnregisterAecDumpConsumer, |
| 1499 OnUnregisterAecDumpConsumer) | 1499 OnUnregisterAecDumpConsumer) |
| 1500 #endif | 1500 #endif |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1637 | 1637 |
| 1638 void RenderProcessHostImpl::AddPendingView() { | 1638 void RenderProcessHostImpl::AddPendingView() { |
| 1639 pending_views_++; | 1639 pending_views_++; |
| 1640 } | 1640 } |
| 1641 | 1641 |
| 1642 void RenderProcessHostImpl::RemovePendingView() { | 1642 void RenderProcessHostImpl::RemovePendingView() { |
| 1643 DCHECK(pending_views_); | 1643 DCHECK(pending_views_); |
| 1644 pending_views_--; | 1644 pending_views_--; |
| 1645 } | 1645 } |
| 1646 | 1646 |
| 1647 void RenderProcessHostImpl::SetSuddenTerminationAllowed(bool enabled) { | |
| 1648 sudden_termination_allowed_ = enabled; | |
| 1649 } | |
| 1650 | |
| 1651 bool RenderProcessHostImpl::SuddenTerminationAllowed() const { | 1647 bool RenderProcessHostImpl::SuddenTerminationAllowed() const { |
| 1652 return sudden_termination_allowed_; | 1648 return sudden_termination_enabled_; |
| 1653 } | 1649 } |
| 1654 | 1650 |
| 1655 base::TimeDelta RenderProcessHostImpl::GetChildProcessIdleTime() const { | 1651 base::TimeDelta RenderProcessHostImpl::GetChildProcessIdleTime() const { |
| 1656 return base::TimeTicks::Now() - child_process_activity_time_; | 1652 return base::TimeTicks::Now() - child_process_activity_time_; |
| 1657 } | 1653 } |
| 1658 | 1654 |
| 1659 void RenderProcessHostImpl::ResumeRequestsForView(int route_id) { | 1655 void RenderProcessHostImpl::ResumeRequestsForView(int route_id) { |
| 1660 widget_helper_->ResumeRequestsForView(route_id); | 1656 widget_helper_->ResumeRequestsForView(route_id); |
| 1661 } | 1657 } |
| 1662 | 1658 |
| (...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2143 NotificationService::current()->Notify( | 2139 NotificationService::current()->Notify( |
| 2144 NOTIFICATION_RENDERER_PROCESS_CLOSING, | 2140 NOTIFICATION_RENDERER_PROCESS_CLOSING, |
| 2145 Source<RenderProcessHost>(this), | 2141 Source<RenderProcessHost>(this), |
| 2146 NotificationService::NoDetails()); | 2142 NotificationService::NoDetails()); |
| 2147 | 2143 |
| 2148 mojo_application_host_->WillDestroySoon(); | 2144 mojo_application_host_->WillDestroySoon(); |
| 2149 | 2145 |
| 2150 Send(new ChildProcessMsg_Shutdown()); | 2146 Send(new ChildProcessMsg_Shutdown()); |
| 2151 } | 2147 } |
| 2152 | 2148 |
| 2153 void RenderProcessHostImpl::SuddenTerminationChanged(bool enabled) { | 2149 void RenderProcessHostImpl::OnSuddenTerminationChanged(bool enabled) { |
| 2154 SetSuddenTerminationAllowed(enabled); | 2150 sudden_termination_enabled_ = enabled; |
| 2155 } | 2151 } |
| 2156 | 2152 |
| 2157 void RenderProcessHostImpl::OnDumpHandlesDone() { | 2153 void RenderProcessHostImpl::OnDumpHandlesDone() { |
| 2158 Cleanup(); | 2154 Cleanup(); |
| 2159 } | 2155 } |
| 2160 | 2156 |
| 2161 void RenderProcessHostImpl::SetBackgrounded(bool backgrounded) { | 2157 void RenderProcessHostImpl::SetBackgrounded(bool backgrounded) { |
| 2162 // Note: we always set the backgrounded_ value. If the process is NULL | 2158 // Note: we always set the backgrounded_ value. If the process is NULL |
| 2163 // (and hence hasn't been created yet), we will set the process priority | 2159 // (and hence hasn't been created yet), we will set the process priority |
| 2164 // later when we create the process. | 2160 // later when we create the process. |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2360 | 2356 |
| 2361 void RenderProcessHostImpl::DecrementWorkerRefCount() { | 2357 void RenderProcessHostImpl::DecrementWorkerRefCount() { |
| 2362 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 2358 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 2363 DCHECK_GT(worker_ref_count_, 0); | 2359 DCHECK_GT(worker_ref_count_, 0); |
| 2364 --worker_ref_count_; | 2360 --worker_ref_count_; |
| 2365 if (worker_ref_count_ == 0) | 2361 if (worker_ref_count_ == 0) |
| 2366 Cleanup(); | 2362 Cleanup(); |
| 2367 } | 2363 } |
| 2368 | 2364 |
| 2369 } // namespace content | 2365 } // namespace content |
| OLD | NEW |