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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 #include "storage/browser/fileapi/sandbox_file_system_backend.h" | 145 #include "storage/browser/fileapi/sandbox_file_system_backend.h" |
146 #include "third_party/skia/include/core/SkBitmap.h" | 146 #include "third_party/skia/include/core/SkBitmap.h" |
147 #include "ui/base/ui_base_switches.h" | 147 #include "ui/base/ui_base_switches.h" |
148 #include "ui/events/event_switches.h" | 148 #include "ui/events/event_switches.h" |
149 #include "ui/gfx/switches.h" | 149 #include "ui/gfx/switches.h" |
150 #include "ui/gl/gl_switches.h" | 150 #include "ui/gl/gl_switches.h" |
151 #include "ui/gl/gpu_switching_manager.h" | 151 #include "ui/gl/gpu_switching_manager.h" |
152 #include "ui/native_theme/native_theme_switches.h" | 152 #include "ui/native_theme/native_theme_switches.h" |
153 | 153 |
154 #if defined(OS_ANDROID) | 154 #if defined(OS_ANDROID) |
| 155 #include "content/browser/android/child_process_launcher_android.h" |
155 #include "content/browser/media/android/browser_demuxer_android.h" | 156 #include "content/browser/media/android/browser_demuxer_android.h" |
156 #include "content/browser/screen_orientation/screen_orientation_message_filter_a
ndroid.h" | 157 #include "content/browser/screen_orientation/screen_orientation_message_filter_a
ndroid.h" |
157 #endif | 158 #endif |
158 | 159 |
159 #if defined(OS_WIN) | 160 #if defined(OS_WIN) |
160 #include "base/win/scoped_com_initializer.h" | 161 #include "base/win/scoped_com_initializer.h" |
161 #include "content/common/font_cache_dispatcher_win.h" | 162 #include "content/common/font_cache_dispatcher_win.h" |
162 #include "content/common/sandbox_win.h" | 163 #include "content/common/sandbox_win.h" |
163 #include "ui/gfx/win/dpi.h" | 164 #include "ui/gfx/win/dpi.h" |
164 #endif | 165 #endif |
(...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
964 if (command_line->HasSwitch(switches::kDisableKillAfterBadIPC)) | 965 if (command_line->HasSwitch(switches::kDisableKillAfterBadIPC)) |
965 return; | 966 return; |
966 | 967 |
967 if (run_renderer_in_process()) { | 968 if (run_renderer_in_process()) { |
968 // In single process mode it is better if we don't suicide but just | 969 // In single process mode it is better if we don't suicide but just |
969 // crash. | 970 // crash. |
970 CHECK(false); | 971 CHECK(false); |
971 } | 972 } |
972 // We kill the renderer but don't include a NOTREACHED, because we want the | 973 // We kill the renderer but don't include a NOTREACHED, because we want the |
973 // browser to try to survive when it gets illegal messages from the renderer. | 974 // browser to try to survive when it gets illegal messages from the renderer. |
974 base::KillProcess(GetHandle(), RESULT_CODE_KILLED_BAD_MESSAGE, | 975 Shutdown(RESULT_CODE_KILLED_BAD_MESSAGE, false); |
975 false); | |
976 } | 976 } |
977 | 977 |
978 void RenderProcessHostImpl::WidgetRestored() { | 978 void RenderProcessHostImpl::WidgetRestored() { |
979 // Verify we were properly backgrounded. | 979 // Verify we were properly backgrounded. |
980 DCHECK_EQ(backgrounded_, (visible_widgets_ == 0)); | 980 DCHECK_EQ(backgrounded_, (visible_widgets_ == 0)); |
981 visible_widgets_++; | 981 visible_widgets_++; |
982 SetBackgrounded(false); | 982 SetBackgrounded(false); |
983 } | 983 } |
984 | 984 |
985 void RenderProcessHostImpl::WidgetHidden() { | 985 void RenderProcessHostImpl::WidgetHidden() { |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1322 base::ProcessHandle RenderProcessHostImpl::GetHandle() const { | 1322 base::ProcessHandle RenderProcessHostImpl::GetHandle() const { |
1323 if (run_renderer_in_process()) | 1323 if (run_renderer_in_process()) |
1324 return base::GetCurrentProcessHandle(); | 1324 return base::GetCurrentProcessHandle(); |
1325 | 1325 |
1326 if (!child_process_launcher_.get() || child_process_launcher_->IsStarting()) | 1326 if (!child_process_launcher_.get() || child_process_launcher_->IsStarting()) |
1327 return base::kNullProcessHandle; | 1327 return base::kNullProcessHandle; |
1328 | 1328 |
1329 return child_process_launcher_->GetProcess().Handle(); | 1329 return child_process_launcher_->GetProcess().Handle(); |
1330 } | 1330 } |
1331 | 1331 |
| 1332 bool RenderProcessHostImpl::Shutdown(int exit_code, bool wait) { |
| 1333 if (run_renderer_in_process()) |
| 1334 return false; // Single process mode never shuts down the renderer. |
| 1335 |
| 1336 #if defined(OS_ANDROID) |
| 1337 // Android requires a different approach for killing. |
| 1338 StopChildProcess(GetHandle()); |
| 1339 return true; |
| 1340 #else |
| 1341 return base::KillProcess(GetHandle(), exit_code, wait); |
| 1342 #endif |
| 1343 } |
| 1344 |
1332 bool RenderProcessHostImpl::FastShutdownIfPossible() { | 1345 bool RenderProcessHostImpl::FastShutdownIfPossible() { |
1333 if (run_renderer_in_process()) | 1346 if (run_renderer_in_process()) |
1334 return false; // Single process mode never shutdown the renderer. | 1347 return false; // Single process mode never shuts down the renderer. |
1335 | 1348 |
1336 if (!GetContentClient()->browser()->IsFastShutdownPossible()) | 1349 if (!GetContentClient()->browser()->IsFastShutdownPossible()) |
1337 return false; | 1350 return false; |
1338 | 1351 |
1339 if (!child_process_launcher_.get() || | 1352 if (!child_process_launcher_.get() || |
1340 child_process_launcher_->IsStarting() || | 1353 child_process_launcher_->IsStarting() || |
1341 !GetHandle()) | 1354 !GetHandle()) |
1342 return false; // Render process hasn't started or is probably crashed. | 1355 return false; // Render process hasn't started or is probably crashed. |
1343 | 1356 |
1344 // Test if there's an unload listener. | 1357 // Test if there's an unload listener. |
(...skipping 935 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2280 | 2293 |
2281 void RenderProcessHostImpl::DecrementWorkerRefCount() { | 2294 void RenderProcessHostImpl::DecrementWorkerRefCount() { |
2282 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 2295 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
2283 DCHECK_GT(worker_ref_count_, 0); | 2296 DCHECK_GT(worker_ref_count_, 0); |
2284 --worker_ref_count_; | 2297 --worker_ref_count_; |
2285 if (worker_ref_count_ == 0) | 2298 if (worker_ref_count_ == 0) |
2286 Cleanup(); | 2299 Cleanup(); |
2287 } | 2300 } |
2288 | 2301 |
2289 } // namespace content | 2302 } // namespace content |
OLD | NEW |