| 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 #include "content/browser/renderer_host/render_view_host_impl.h" | 5 #include "content/browser/renderer_host/render_view_host_impl.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 g_created_callbacks = LAZY_INSTANCE_INITIALIZER; | 111 g_created_callbacks = LAZY_INSTANCE_INITIALIZER; |
| 112 | 112 |
| 113 } // namespace | 113 } // namespace |
| 114 | 114 |
| 115 /////////////////////////////////////////////////////////////////////////////// | 115 /////////////////////////////////////////////////////////////////////////////// |
| 116 // RenderViewHost, public: | 116 // RenderViewHost, public: |
| 117 | 117 |
| 118 // static | 118 // static |
| 119 RenderViewHost* RenderViewHost::FromID(int render_process_id, | 119 RenderViewHost* RenderViewHost::FromID(int render_process_id, |
| 120 int render_view_id) { | 120 int render_view_id) { |
| 121 RenderProcessHost* process = RenderProcessHost::FromID(render_process_id); | 121 RenderWidgetHost* widget = |
| 122 if (!process) | 122 RenderWidgetHost::FromID(render_process_id, render_view_id); |
| 123 return NULL; | |
| 124 RenderWidgetHost* widget = process->GetRenderWidgetHostByID(render_view_id); | |
| 125 if (!widget || !widget->IsRenderView()) | 123 if (!widget || !widget->IsRenderView()) |
| 126 return NULL; | 124 return NULL; |
| 127 return static_cast<RenderViewHostImpl*>(RenderWidgetHostImpl::From(widget)); | 125 return static_cast<RenderViewHostImpl*>(RenderWidgetHostImpl::From(widget)); |
| 128 } | 126 } |
| 129 | 127 |
| 130 // static | 128 // static |
| 131 RenderViewHost* RenderViewHost::From(RenderWidgetHost* rwh) { | 129 RenderViewHost* RenderViewHost::From(RenderWidgetHost* rwh) { |
| 132 DCHECK(rwh->IsRenderView()); | 130 DCHECK(rwh->IsRenderView()); |
| 133 return static_cast<RenderViewHostImpl*>(RenderWidgetHostImpl::From(rwh)); | 131 return static_cast<RenderViewHostImpl*>(RenderWidgetHostImpl::From(rwh)); |
| 134 } | 132 } |
| (...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 | 471 |
| 474 // If we are not running the renderer in process and no other tab is using | 472 // If we are not running the renderer in process and no other tab is using |
| 475 // the hung process, consider it eligible to be killed, assuming it is a real | 473 // the hung process, consider it eligible to be killed, assuming it is a real |
| 476 // process (unit tests don't have real processes). | 474 // process (unit tests don't have real processes). |
| 477 if (hung) { | 475 if (hung) { |
| 478 base::ProcessHandle process_handle = GetProcess()->GetHandle(); | 476 base::ProcessHandle process_handle = GetProcess()->GetHandle(); |
| 479 int views = 0; | 477 int views = 0; |
| 480 | 478 |
| 481 // Count the number of widget hosts for the process, which is equivalent to | 479 // Count the number of widget hosts for the process, which is equivalent to |
| 482 // views using the process as of this writing. | 480 // views using the process as of this writing. |
| 483 RenderProcessHost::RenderWidgetHostsIterator iter( | 481 RenderWidgetHost::List widgets = RenderWidgetHost::GetRenderWidgetHosts(); |
| 484 GetProcess()->GetRenderWidgetHostsIterator()); | 482 for (size_t i = 0; i < widgets.size(); ++i) { |
| 485 for (; !iter.IsAtEnd(); iter.Advance()) | 483 if (widgets[i]->GetProcess()->GetID() == GetProcess()->GetID()) |
| 486 ++views; | 484 ++views; |
| 485 } |
| 487 | 486 |
| 488 if (!RenderProcessHost::run_renderer_in_process() && | 487 if (!RenderProcessHost::run_renderer_in_process() && |
| 489 process_handle && views <= 1) { | 488 process_handle && views <= 1) { |
| 490 // The process can safely be terminated, only if WebContents sets | 489 // The process can safely be terminated, only if WebContents sets |
| 491 // SuddenTerminationAllowed, which indicates that the timer has expired. | 490 // SuddenTerminationAllowed, which indicates that the timer has expired. |
| 492 // This is not the case if we load data URLs or about:blank. The reason | 491 // This is not the case if we load data URLs or about:blank. The reason |
| 493 // is that those have no network requests and this code is hit without | 492 // is that those have no network requests and this code is hit without |
| 494 // setting the unresponsiveness timer. This allows a corner case where a | 493 // setting the unresponsiveness timer. This allows a corner case where a |
| 495 // navigation to a data URL will leave a process running, if the | 494 // navigation to a data URL will leave a process running, if the |
| 496 // beforeunload handler completes fine, but the unload handler hangs. | 495 // beforeunload handler completes fine, but the unload handler hangs. |
| (...skipping 1574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2071 const std::vector<base::FilePath>& file_paths = state.GetReferencedFiles(); | 2070 const std::vector<base::FilePath>& file_paths = state.GetReferencedFiles(); |
| 2072 for (std::vector<base::FilePath>::const_iterator file = file_paths.begin(); | 2071 for (std::vector<base::FilePath>::const_iterator file = file_paths.begin(); |
| 2073 file != file_paths.end(); ++file) { | 2072 file != file_paths.end(); ++file) { |
| 2074 if (!policy->CanReadFile(GetProcess()->GetID(), *file)) | 2073 if (!policy->CanReadFile(GetProcess()->GetID(), *file)) |
| 2075 return false; | 2074 return false; |
| 2076 } | 2075 } |
| 2077 return true; | 2076 return true; |
| 2078 } | 2077 } |
| 2079 | 2078 |
| 2080 } // namespace content | 2079 } // namespace content |
| OLD | NEW |