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 1297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1308 IPC_BEGIN_MESSAGE_MAP(RenderProcessHostImpl, msg) | 1308 IPC_BEGIN_MESSAGE_MAP(RenderProcessHostImpl, msg) |
1309 IPC_MESSAGE_HANDLER(ChildProcessHostMsg_ShutdownRequest, | 1309 IPC_MESSAGE_HANDLER(ChildProcessHostMsg_ShutdownRequest, |
1310 OnShutdownRequest) | 1310 OnShutdownRequest) |
1311 IPC_MESSAGE_HANDLER(ChildProcessHostMsg_DumpHandlesDone, | 1311 IPC_MESSAGE_HANDLER(ChildProcessHostMsg_DumpHandlesDone, |
1312 OnDumpHandlesDone) | 1312 OnDumpHandlesDone) |
1313 IPC_MESSAGE_HANDLER(ViewHostMsg_SuddenTerminationChanged, | 1313 IPC_MESSAGE_HANDLER(ViewHostMsg_SuddenTerminationChanged, |
1314 SuddenTerminationChanged) | 1314 SuddenTerminationChanged) |
1315 IPC_MESSAGE_HANDLER(ViewHostMsg_UserMetricsRecordAction, | 1315 IPC_MESSAGE_HANDLER(ViewHostMsg_UserMetricsRecordAction, |
1316 OnUserMetricsRecordAction) | 1316 OnUserMetricsRecordAction) |
1317 IPC_MESSAGE_HANDLER(ViewHostMsg_SavedPageAsMHTML, OnSavedPageAsMHTML) | 1317 IPC_MESSAGE_HANDLER(ViewHostMsg_SavedPageAsMHTML, OnSavedPageAsMHTML) |
| 1318 IPC_MESSAGE_HANDLER(ViewHostMsg_Close_ACK, OnCloseACK) |
1318 // Adding single handlers for your service here is fine, but once your | 1319 // Adding single handlers for your service here is fine, but once your |
1319 // service needs more than one handler, please extract them into a new | 1320 // service needs more than one handler, please extract them into a new |
1320 // message filter and add that filter to CreateMessageFilters(). | 1321 // message filter and add that filter to CreateMessageFilters(). |
1321 IPC_END_MESSAGE_MAP() | 1322 IPC_END_MESSAGE_MAP() |
1322 | 1323 |
1323 return true; | 1324 return true; |
1324 } | 1325 } |
1325 | 1326 |
1326 // Dispatch incoming messages to the appropriate IPC::Listener. | 1327 // Dispatch incoming messages to the appropriate IPC::Listener. |
1327 IPC::Listener* listener = listeners_.Lookup(msg.routing_id()); | 1328 IPC::Listener* listener = listeners_.Lookup(msg.routing_id()); |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1439 deleting_soon_ = true; | 1440 deleting_soon_ = true; |
1440 // It's important not to wait for the DeleteTask to delete the channel | 1441 // It's important not to wait for the DeleteTask to delete the channel |
1441 // proxy. Kill it off now. That way, in case the profile is going away, the | 1442 // proxy. Kill it off now. That way, in case the profile is going away, the |
1442 // rest of the objects attached to this RenderProcessHost start going | 1443 // rest of the objects attached to this RenderProcessHost start going |
1443 // away first, since deleting the channel proxy will post a | 1444 // away first, since deleting the channel proxy will post a |
1444 // OnChannelClosed() to IPC::ChannelProxy::Context on the IO thread. | 1445 // OnChannelClosed() to IPC::ChannelProxy::Context on the IO thread. |
1445 channel_.reset(); | 1446 channel_.reset(); |
1446 gpu_message_filter_ = NULL; | 1447 gpu_message_filter_ = NULL; |
1447 message_port_message_filter_ = NULL; | 1448 message_port_message_filter_ = NULL; |
1448 screen_orientation_dispatcher_host_ = NULL; | 1449 screen_orientation_dispatcher_host_ = NULL; |
| 1450 session_storage_namespaces_awaiting_close_.clear(); |
1449 | 1451 |
1450 // Remove ourself from the list of renderer processes so that we can't be | 1452 // Remove ourself from the list of renderer processes so that we can't be |
1451 // reused in between now and when the Delete task runs. | 1453 // reused in between now and when the Delete task runs. |
1452 UnregisterHost(GetID()); | 1454 UnregisterHost(GetID()); |
1453 } | 1455 } |
1454 } | 1456 } |
1455 | 1457 |
1456 void RenderProcessHostImpl::AddPendingView() { | 1458 void RenderProcessHostImpl::AddPendingView() { |
1457 pending_views_++; | 1459 pending_views_++; |
1458 } | 1460 } |
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1828 FOR_EACH_OBSERVER(RenderProcessHostObserver, | 1830 FOR_EACH_OBSERVER(RenderProcessHostObserver, |
1829 observers_, | 1831 observers_, |
1830 RenderProcessExited(this, GetHandle(), status, exit_code)); | 1832 RenderProcessExited(this, GetHandle(), status, exit_code)); |
1831 within_process_died_observer_ = false; | 1833 within_process_died_observer_ = false; |
1832 | 1834 |
1833 child_process_launcher_.reset(); | 1835 child_process_launcher_.reset(); |
1834 channel_.reset(); | 1836 channel_.reset(); |
1835 gpu_message_filter_ = NULL; | 1837 gpu_message_filter_ = NULL; |
1836 message_port_message_filter_ = NULL; | 1838 message_port_message_filter_ = NULL; |
1837 screen_orientation_dispatcher_host_ = NULL; | 1839 screen_orientation_dispatcher_host_ = NULL; |
| 1840 session_storage_namespaces_awaiting_close_.clear(); |
1838 | 1841 |
1839 IDMap<IPC::Listener>::iterator iter(&listeners_); | 1842 IDMap<IPC::Listener>::iterator iter(&listeners_); |
1840 while (!iter.IsAtEnd()) { | 1843 while (!iter.IsAtEnd()) { |
1841 iter.GetCurrentValue()->OnMessageReceived( | 1844 iter.GetCurrentValue()->OnMessageReceived( |
1842 ViewHostMsg_RenderProcessGone(iter.GetCurrentKey(), | 1845 ViewHostMsg_RenderProcessGone(iter.GetCurrentKey(), |
1843 static_cast<int>(status), | 1846 static_cast<int>(status), |
1844 exit_code)); | 1847 exit_code)); |
1845 iter.Advance(); | 1848 iter.Advance(); |
1846 } | 1849 } |
1847 | 1850 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1896 if (!webrtc_log_message_callback_.is_null()) | 1899 if (!webrtc_log_message_callback_.is_null()) |
1897 webrtc_log_message_callback_.Run(message); | 1900 webrtc_log_message_callback_.Run(message); |
1898 } | 1901 } |
1899 #endif | 1902 #endif |
1900 | 1903 |
1901 scoped_refptr<ScreenOrientationDispatcherHost> | 1904 scoped_refptr<ScreenOrientationDispatcherHost> |
1902 RenderProcessHostImpl::screen_orientation_dispatcher_host() const { | 1905 RenderProcessHostImpl::screen_orientation_dispatcher_host() const { |
1903 return make_scoped_refptr(screen_orientation_dispatcher_host_); | 1906 return make_scoped_refptr(screen_orientation_dispatcher_host_); |
1904 } | 1907 } |
1905 | 1908 |
| 1909 void RenderProcessHostImpl::ReleaseOnCloseAck( |
| 1910 const SessionStorageNamespaceMap& sessions, |
| 1911 int view_route_id) { |
| 1912 session_storage_namespaces_awaiting_close_[view_route_id] = sessions; |
| 1913 } |
| 1914 |
1906 void RenderProcessHostImpl::OnShutdownRequest() { | 1915 void RenderProcessHostImpl::OnShutdownRequest() { |
1907 // Don't shut down if there are active RenderViews, or if there are pending | 1916 // Don't shut down if there are active RenderViews, or if there are pending |
1908 // RenderViews being swapped back in. | 1917 // RenderViews being swapped back in. |
1909 // In single process mode, we never shutdown the renderer. | 1918 // In single process mode, we never shutdown the renderer. |
1910 int num_active_views = GetActiveViewCount(); | 1919 int num_active_views = GetActiveViewCount(); |
1911 if (pending_views_ || num_active_views > 0 || run_renderer_in_process()) | 1920 if (pending_views_ || num_active_views > 0 || run_renderer_in_process()) |
1912 return; | 1921 return; |
1913 | 1922 |
1914 // Notify any contents that might have swapped out renderers from this | 1923 // Notify any contents that might have swapped out renderers from this |
1915 // process. They should not attempt to swap them back in. | 1924 // process. They should not attempt to swap them back in. |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1999 scoped_refptr<AudioRendererHost> | 2008 scoped_refptr<AudioRendererHost> |
2000 RenderProcessHostImpl::audio_renderer_host() const { | 2009 RenderProcessHostImpl::audio_renderer_host() const { |
2001 return audio_renderer_host_; | 2010 return audio_renderer_host_; |
2002 } | 2011 } |
2003 | 2012 |
2004 void RenderProcessHostImpl::OnUserMetricsRecordAction( | 2013 void RenderProcessHostImpl::OnUserMetricsRecordAction( |
2005 const std::string& action) { | 2014 const std::string& action) { |
2006 RecordComputedAction(action); | 2015 RecordComputedAction(action); |
2007 } | 2016 } |
2008 | 2017 |
| 2018 void RenderProcessHostImpl::OnCloseACK(int old_route_id) { |
| 2019 session_storage_namespaces_awaiting_close_.erase(old_route_id); |
| 2020 } |
| 2021 |
2009 void RenderProcessHostImpl::OnSavedPageAsMHTML(int job_id, int64 data_size) { | 2022 void RenderProcessHostImpl::OnSavedPageAsMHTML(int job_id, int64 data_size) { |
2010 MHTMLGenerationManager::GetInstance()->MHTMLGenerated(job_id, data_size); | 2023 MHTMLGenerationManager::GetInstance()->MHTMLGenerated(job_id, data_size); |
2011 } | 2024 } |
2012 | 2025 |
2013 void RenderProcessHostImpl::OnCompositorSurfaceBuffersSwappedNoHost( | 2026 void RenderProcessHostImpl::OnCompositorSurfaceBuffersSwappedNoHost( |
2014 const ViewHostMsg_CompositorSurfaceBuffersSwapped_Params& params) { | 2027 const ViewHostMsg_CompositorSurfaceBuffersSwapped_Params& params) { |
2015 TRACE_EVENT0("renderer_host", | 2028 TRACE_EVENT0("renderer_host", |
2016 "RenderWidgetHostImpl::OnCompositorSurfaceBuffersSwappedNoHost"); | 2029 "RenderWidgetHostImpl::OnCompositorSurfaceBuffersSwappedNoHost"); |
2017 if (!ui::LatencyInfo::Verify(params.latency_info, | 2030 if (!ui::LatencyInfo::Verify(params.latency_info, |
2018 "ViewHostMsg_CompositorSurfaceBuffersSwapped")) | 2031 "ViewHostMsg_CompositorSurfaceBuffersSwapped")) |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2072 mojo::ScopedMessagePipeHandle handle) { | 2085 mojo::ScopedMessagePipeHandle handle) { |
2073 mojo_activation_required_ = true; | 2086 mojo_activation_required_ = true; |
2074 MaybeActivateMojo(); | 2087 MaybeActivateMojo(); |
2075 | 2088 |
2076 mojo::AllocationScope scope; | 2089 mojo::AllocationScope scope; |
2077 mojo_application_host_->service_provider()->ConnectToService(service_name, | 2090 mojo_application_host_->service_provider()->ConnectToService(service_name, |
2078 handle.Pass()); | 2091 handle.Pass()); |
2079 } | 2092 } |
2080 | 2093 |
2081 } // namespace content | 2094 } // namespace content |
OLD | NEW |