OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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.h" | 5 #include "content/browser/renderer_host/render_view_host.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
90 | 90 |
91 RenderViewHost::RenderViewHost(SiteInstance* instance, | 91 RenderViewHost::RenderViewHost(SiteInstance* instance, |
92 RenderViewHostDelegate* delegate, | 92 RenderViewHostDelegate* delegate, |
93 int routing_id, | 93 int routing_id, |
94 SessionStorageNamespace* session_storage) | 94 SessionStorageNamespace* session_storage) |
95 : RenderWidgetHost(instance->GetProcess(), routing_id), | 95 : RenderWidgetHost(instance->GetProcess(), routing_id), |
96 instance_(instance), | 96 instance_(instance), |
97 delegate_(delegate), | 97 delegate_(delegate), |
98 waiting_for_drag_context_response_(false), | 98 waiting_for_drag_context_response_(false), |
99 enabled_bindings_(0), | 99 enabled_bindings_(0), |
100 pending_request_id_(0), | 100 pending_request_id_(-1), |
101 navigations_suspended_(false), | 101 navigations_suspended_(false), |
102 suspended_nav_message_(NULL), | 102 suspended_nav_message_(NULL), |
103 is_swapped_out_(false), | |
103 run_modal_reply_msg_(NULL), | 104 run_modal_reply_msg_(NULL), |
104 is_waiting_for_beforeunload_ack_(false), | 105 is_waiting_for_beforeunload_ack_(false), |
105 is_waiting_for_unload_ack_(false), | 106 is_waiting_for_unload_ack_(false), |
106 unload_ack_is_for_cross_site_transition_(false), | 107 unload_ack_is_for_cross_site_transition_(false), |
107 are_javascript_messages_suppressed_(false), | 108 are_javascript_messages_suppressed_(false), |
108 sudden_termination_allowed_(false), | 109 sudden_termination_allowed_(false), |
109 session_storage_namespace_(session_storage), | 110 session_storage_namespace_(session_storage), |
110 is_extension_process_(false), | 111 is_extension_process_(false), |
111 save_accessibility_tree_for_testing_(false), | 112 save_accessibility_tree_for_testing_(false), |
112 render_view_termination_status_(base::TERMINATION_STATUS_STILL_RUNNING) { | 113 render_view_termination_status_(base::TERMINATION_STATUS_STILL_RUNNING) { |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
256 Navigate(params); | 257 Navigate(params); |
257 } | 258 } |
258 | 259 |
259 void RenderViewHost::SetNavigationsSuspended(bool suspend) { | 260 void RenderViewHost::SetNavigationsSuspended(bool suspend) { |
260 // This should only be called to toggle the state. | 261 // This should only be called to toggle the state. |
261 DCHECK(navigations_suspended_ != suspend); | 262 DCHECK(navigations_suspended_ != suspend); |
262 | 263 |
263 navigations_suspended_ = suspend; | 264 navigations_suspended_ = suspend; |
264 if (!suspend && suspended_nav_message_.get()) { | 265 if (!suspend && suspended_nav_message_.get()) { |
265 // There's a navigation message waiting to be sent. Now that we're not | 266 // There's a navigation message waiting to be sent. Now that we're not |
266 // suspended anymore, resume navigation by sending it. | 267 // suspended anymore, resume navigation by sending it. If we were swapped |
268 // out, we should also stop filtering out the IPC messages now. | |
269 is_swapped_out_ = false; | |
267 Send(suspended_nav_message_.release()); | 270 Send(suspended_nav_message_.release()); |
268 } | 271 } |
269 } | 272 } |
270 | 273 |
274 void RenderViewHost::CancelSuspendedNavigations() { | |
275 // Clear any state if a pending navigation is canceled or pre-empted. | |
276 if (suspended_nav_message_.get()) | |
277 suspended_nav_message_.reset(); | |
278 navigations_suspended_ = false; | |
279 } | |
280 | |
271 void RenderViewHost::FirePageBeforeUnload(bool for_cross_site_transition) { | 281 void RenderViewHost::FirePageBeforeUnload(bool for_cross_site_transition) { |
272 if (!IsRenderViewLive()) { | 282 if (!IsRenderViewLive()) { |
273 // This RenderViewHost doesn't have a live renderer, so just skip running | 283 // This RenderViewHost doesn't have a live renderer, so just skip running |
274 // the onbeforeunload handler. | 284 // the onbeforeunload handler. |
275 is_waiting_for_beforeunload_ack_ = true; // Checked by OnMsgShouldCloseACK. | 285 is_waiting_for_beforeunload_ack_ = true; // Checked by OnMsgShouldCloseACK. |
276 unload_ack_is_for_cross_site_transition_ = for_cross_site_transition; | 286 unload_ack_is_for_cross_site_transition_ = for_cross_site_transition; |
277 OnMsgShouldCloseACK(true); | 287 OnMsgShouldCloseACK(true); |
278 return; | 288 return; |
279 } | 289 } |
280 | 290 |
(...skipping 12 matching lines...) Expand all Loading... | |
293 } else { | 303 } else { |
294 // Start the hang monitor in case the renderer hangs in the beforeunload | 304 // Start the hang monitor in case the renderer hangs in the beforeunload |
295 // handler. | 305 // handler. |
296 is_waiting_for_beforeunload_ack_ = true; | 306 is_waiting_for_beforeunload_ack_ = true; |
297 unload_ack_is_for_cross_site_transition_ = for_cross_site_transition; | 307 unload_ack_is_for_cross_site_transition_ = for_cross_site_transition; |
298 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); | 308 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); |
299 Send(new ViewMsg_ShouldClose(routing_id())); | 309 Send(new ViewMsg_ShouldClose(routing_id())); |
300 } | 310 } |
301 } | 311 } |
302 | 312 |
303 void RenderViewHost::ClosePage(bool for_cross_site_transition, | 313 void RenderViewHost::SwapOut(int new_render_process_host_id, |
304 int new_render_process_host_id, | 314 int new_request_id) { |
305 int new_request_id) { | 315 // Start filtering IPC messages to avoid confusing the delegate. This will |
306 // This will be set back to false in OnClosePageACK, just before we close the | 316 // prevent any dialogs from appearing during unload handlers, but we've |
307 // tab or replace it with a pending RVH. There are some cases (such as 204 | 317 // already decided to silence them in crbug.com/68780. We will set it back |
308 // errors) where we'll continue to show this RVH. | 318 // to false in SetNavigationsSuspended if we swap back in. |
319 is_swapped_out_ = true; | |
320 | |
321 // This will be set back to false in OnSwapOutACK, just before we replace | |
322 // this RVH with the pending RVH. | |
309 is_waiting_for_unload_ack_ = true; | 323 is_waiting_for_unload_ack_ = true; |
310 // Start the hang monitor in case the renderer hangs in the unload handler. | 324 // Start the hang monitor in case the renderer hangs in the unload handler. |
311 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); | 325 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); |
312 | 326 |
313 ViewMsg_ClosePage_Params params; | 327 ViewMsg_SwapOut_Params params; |
314 params.closing_process_id = process()->id(); | 328 params.closing_process_id = process()->id(); |
315 params.closing_route_id = routing_id(); | 329 params.closing_route_id = routing_id(); |
316 params.for_cross_site_transition = for_cross_site_transition; | |
317 params.new_render_process_host_id = new_render_process_host_id; | 330 params.new_render_process_host_id = new_render_process_host_id; |
318 params.new_request_id = new_request_id; | 331 params.new_request_id = new_request_id; |
319 if (IsRenderViewLive()) { | 332 if (IsRenderViewLive()) { |
333 Send(new ViewMsg_SwapOut(routing_id(), params)); | |
334 } else { | |
335 // This RenderViewHost doesn't have a live renderer, so just skip the unload | |
336 // event. We must notify the ResourceDispatcherHost on the IO thread, | |
337 // which we will do through the RenderProcessHost's widget helper. | |
338 process()->CrossSiteSwapOutACK(params); | |
339 } | |
340 } | |
341 | |
342 void RenderViewHost::OnSwapOutACK() { | |
343 // Stop the hang monitor now that the unload handler has finished. | |
344 StopHangMonitorTimeout(); | |
345 is_waiting_for_unload_ack_ = false; | |
346 } | |
347 | |
348 void RenderViewHost::ClosePage() { | |
349 // Start the hang monitor in case the renderer hangs in the unload handler. | |
350 is_waiting_for_unload_ack_ = true; | |
351 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); | |
352 | |
353 if (IsRenderViewLive()) { | |
354 // TODO(creis): Should this be moved to Shutdown? It may not be called for | |
355 // RenderViewHosts that have been swapped out. | |
320 NotificationService::current()->Notify( | 356 NotificationService::current()->Notify( |
321 NotificationType::RENDER_VIEW_HOST_WILL_CLOSE_RENDER_VIEW, | 357 NotificationType::RENDER_VIEW_HOST_WILL_CLOSE_RENDER_VIEW, |
322 Source<RenderViewHost>(this), | 358 Source<RenderViewHost>(this), |
323 NotificationService::NoDetails()); | 359 NotificationService::NoDetails()); |
324 | 360 |
325 Send(new ViewMsg_ClosePage(routing_id(), params)); | 361 Send(new ViewMsg_ClosePage(routing_id())); |
326 } else { | 362 } else { |
327 // This RenderViewHost doesn't have a live renderer, so just skip closing | 363 // This RenderViewHost doesn't have a live renderer, so just skip the unload |
328 // the page. We must notify the ResourceDispatcherHost on the IO thread, | 364 // event and close the page. |
329 // which we will do through the RenderProcessHost's widget helper. | |
330 process()->CrossSiteClosePageACK(params); | |
331 } | |
332 } | |
333 | |
334 void RenderViewHost::OnClosePageACK(bool for_cross_site_transition) { | |
335 StopHangMonitorTimeout(); | |
336 is_waiting_for_unload_ack_ = false; | |
337 | |
338 // If this ClosePageACK is not for a cross-site transition, then it is for an | |
339 // attempt to close the tab. We have now finished the unload handler and can | |
340 // proceed with closing the tab. | |
341 if (!for_cross_site_transition) { | |
342 ClosePageIgnoringUnloadEvents(); | 365 ClosePageIgnoringUnloadEvents(); |
343 } | 366 } |
344 } | 367 } |
345 | 368 |
346 void RenderViewHost::ClosePageIgnoringUnloadEvents() { | 369 void RenderViewHost::ClosePageIgnoringUnloadEvents() { |
347 StopHangMonitorTimeout(); | 370 StopHangMonitorTimeout(); |
348 is_waiting_for_beforeunload_ack_ = false; | 371 is_waiting_for_beforeunload_ack_ = false; |
349 is_waiting_for_unload_ack_ = false; | 372 is_waiting_for_unload_ack_ = false; |
350 | 373 |
351 sudden_termination_allowed_ = true; | 374 sudden_termination_allowed_ = true; |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
746 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateTargetURL, OnMsgUpdateTargetURL) | 769 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateTargetURL, OnMsgUpdateTargetURL) |
747 IPC_MESSAGE_HANDLER(ViewHostMsg_Snapshot, OnMsgScreenshot) | 770 IPC_MESSAGE_HANDLER(ViewHostMsg_Snapshot, OnMsgScreenshot) |
748 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateInspectorSetting, | 771 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateInspectorSetting, |
749 OnUpdateInspectorSetting) | 772 OnUpdateInspectorSetting) |
750 IPC_MESSAGE_HANDLER(ViewHostMsg_Close, OnMsgClose) | 773 IPC_MESSAGE_HANDLER(ViewHostMsg_Close, OnMsgClose) |
751 IPC_MESSAGE_HANDLER(ViewHostMsg_RequestMove, OnMsgRequestMove) | 774 IPC_MESSAGE_HANDLER(ViewHostMsg_RequestMove, OnMsgRequestMove) |
752 IPC_MESSAGE_HANDLER(ViewHostMsg_DidStartLoading, OnMsgDidStartLoading) | 775 IPC_MESSAGE_HANDLER(ViewHostMsg_DidStartLoading, OnMsgDidStartLoading) |
753 IPC_MESSAGE_HANDLER(ViewHostMsg_DidStopLoading, OnMsgDidStopLoading) | 776 IPC_MESSAGE_HANDLER(ViewHostMsg_DidStopLoading, OnMsgDidStopLoading) |
754 IPC_MESSAGE_HANDLER(ViewHostMsg_DidChangeLoadProgress, | 777 IPC_MESSAGE_HANDLER(ViewHostMsg_DidChangeLoadProgress, |
755 OnMsgDidChangeLoadProgress) | 778 OnMsgDidChangeLoadProgress) |
779 IPC_MESSAGE_HANDLER(ViewHostMsg_DidStartProvisionalLoadForFrame, | |
780 OnMsgDidStartProvisionalLoadForFrame) | |
781 IPC_MESSAGE_HANDLER(ViewHostMsg_DidRedirectProvisionalLoad, | |
782 OnMsgDidRedirectProvisionalLoad) | |
783 IPC_MESSAGE_HANDLER(ViewHostMsg_DidFailProvisionalLoadWithError, | |
784 OnMsgDidFailProvisionalLoadWithError) | |
785 IPC_MESSAGE_HANDLER(ViewHostMsg_DidLoadResourceFromMemoryCache, | |
786 OnMsgDidLoadResourceFromMemoryCache) | |
787 IPC_MESSAGE_HANDLER(ViewHostMsg_DidDisplayInsecureContent, | |
788 OnMsgDidDisplayInsecureContent) | |
789 IPC_MESSAGE_HANDLER(ViewHostMsg_DidRunInsecureContent, | |
790 OnMsgDidRunInsecureContent) | |
791 IPC_MESSAGE_HANDLER(ViewHostMsg_DocumentLoadedInFrame, | |
792 OnMsgDocumentLoadedInFrame) | |
793 IPC_MESSAGE_HANDLER(ViewHostMsg_DidFinishLoad, OnMsgDidFinishLoad) | |
794 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateContentRestrictions, | |
795 OnMsgUpdateContentRestrictions) | |
756 IPC_MESSAGE_HANDLER(ViewHostMsg_DocumentAvailableInMainFrame, | 796 IPC_MESSAGE_HANDLER(ViewHostMsg_DocumentAvailableInMainFrame, |
757 OnMsgDocumentAvailableInMainFrame) | 797 OnMsgDocumentAvailableInMainFrame) |
758 IPC_MESSAGE_HANDLER(ViewHostMsg_DocumentOnLoadCompletedInMainFrame, | 798 IPC_MESSAGE_HANDLER(ViewHostMsg_DocumentOnLoadCompletedInMainFrame, |
759 OnMsgDocumentOnLoadCompletedInMainFrame) | 799 OnMsgDocumentOnLoadCompletedInMainFrame) |
760 IPC_MESSAGE_HANDLER(ViewHostMsg_ContextMenu, OnMsgContextMenu) | 800 IPC_MESSAGE_HANDLER(ViewHostMsg_ContextMenu, OnMsgContextMenu) |
761 IPC_MESSAGE_HANDLER(ViewHostMsg_OpenURL, OnMsgOpenURL) | 801 IPC_MESSAGE_HANDLER(ViewHostMsg_OpenURL, OnMsgOpenURL) |
762 IPC_MESSAGE_HANDLER(ViewHostMsg_DidContentsPreferredSizeChange, | 802 IPC_MESSAGE_HANDLER(ViewHostMsg_DidContentsPreferredSizeChange, |
763 OnMsgDidContentsPreferredSizeChange) | 803 OnMsgDidContentsPreferredSizeChange) |
764 IPC_MESSAGE_HANDLER(ViewHostMsg_DomOperationResponse, | 804 IPC_MESSAGE_HANDLER(ViewHostMsg_DomOperationResponse, |
765 OnMsgDomOperationResponse) | 805 OnMsgDomOperationResponse) |
766 IPC_MESSAGE_HANDLER(ViewHostMsg_WebUISend, OnMsgWebUISend) | 806 IPC_MESSAGE_HANDLER(ViewHostMsg_WebUISend, OnMsgWebUISend) |
767 IPC_MESSAGE_HANDLER(ViewHostMsg_ForwardMessageToExternalHost, | 807 IPC_MESSAGE_HANDLER(ViewHostMsg_ForwardMessageToExternalHost, |
768 OnMsgForwardMessageToExternalHost) | 808 OnMsgForwardMessageToExternalHost) |
769 IPC_MESSAGE_HANDLER(ViewHostMsg_SetTooltipText, OnMsgSetTooltipText) | 809 IPC_MESSAGE_HANDLER(ViewHostMsg_SetTooltipText, OnMsgSetTooltipText) |
770 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_RunJavaScriptMessage, | 810 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_RunJavaScriptMessage, |
771 OnMsgRunJavaScriptMessage) | 811 OnMsgRunJavaScriptMessage) |
772 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_RunBeforeUnloadConfirm, | 812 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_RunBeforeUnloadConfirm, |
773 OnMsgRunBeforeUnloadConfirm) | 813 OnMsgRunBeforeUnloadConfirm) |
774 IPC_MESSAGE_HANDLER(DragHostMsg_StartDragging, OnMsgStartDragging) | 814 IPC_MESSAGE_HANDLER(DragHostMsg_StartDragging, OnMsgStartDragging) |
775 IPC_MESSAGE_HANDLER(DragHostMsg_UpdateDragCursor, OnUpdateDragCursor) | 815 IPC_MESSAGE_HANDLER(DragHostMsg_UpdateDragCursor, OnUpdateDragCursor) |
776 IPC_MESSAGE_HANDLER(ViewHostMsg_TakeFocus, OnTakeFocus) | 816 IPC_MESSAGE_HANDLER(ViewHostMsg_TakeFocus, OnTakeFocus) |
777 IPC_MESSAGE_HANDLER(ViewHostMsg_AddMessageToConsole, OnAddMessageToConsole) | 817 IPC_MESSAGE_HANDLER(ViewHostMsg_AddMessageToConsole, OnAddMessageToConsole) |
778 IPC_MESSAGE_HANDLER(ViewHostMsg_ShouldClose_ACK, OnMsgShouldCloseACK) | 818 IPC_MESSAGE_HANDLER(ViewHostMsg_ShouldClose_ACK, OnMsgShouldCloseACK) |
819 IPC_MESSAGE_HANDLER(ViewHostMsg_ClosePage_ACK, OnMsgClosePageACK) | |
779 IPC_MESSAGE_HANDLER(ViewHostMsg_SelectionChanged, OnMsgSelectionChanged) | 820 IPC_MESSAGE_HANDLER(ViewHostMsg_SelectionChanged, OnMsgSelectionChanged) |
780 IPC_MESSAGE_HANDLER(ViewHostMsg_AccessibilityNotifications, | 821 IPC_MESSAGE_HANDLER(ViewHostMsg_AccessibilityNotifications, |
781 OnAccessibilityNotifications) | 822 OnAccessibilityNotifications) |
782 IPC_MESSAGE_HANDLER(ViewHostMsg_OnCSSInserted, OnCSSInserted) | 823 IPC_MESSAGE_HANDLER(ViewHostMsg_OnCSSInserted, OnCSSInserted) |
783 IPC_MESSAGE_HANDLER(ViewHostMsg_ContentBlocked, OnContentBlocked) | 824 IPC_MESSAGE_HANDLER(ViewHostMsg_ContentBlocked, OnContentBlocked) |
784 IPC_MESSAGE_HANDLER(ViewHostMsg_AppCacheAccessed, OnAppCacheAccessed) | 825 IPC_MESSAGE_HANDLER(ViewHostMsg_AppCacheAccessed, OnAppCacheAccessed) |
785 IPC_MESSAGE_HANDLER(ViewHostMsg_WebDatabaseAccessed, OnWebDatabaseAccessed) | 826 IPC_MESSAGE_HANDLER(ViewHostMsg_WebDatabaseAccessed, OnWebDatabaseAccessed) |
786 IPC_MESSAGE_HANDLER(ViewHostMsg_FocusedNodeChanged, OnMsgFocusedNodeChanged) | 827 IPC_MESSAGE_HANDLER(ViewHostMsg_FocusedNodeChanged, OnMsgFocusedNodeChanged) |
787 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateZoomLimits, OnUpdateZoomLimits) | 828 IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateZoomLimits, OnUpdateZoomLimits) |
788 IPC_MESSAGE_HANDLER(ViewHostMsg_ScriptEvalResponse, OnScriptEvalResponse) | 829 IPC_MESSAGE_HANDLER(ViewHostMsg_ScriptEvalResponse, OnScriptEvalResponse) |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
825 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); | 866 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); |
826 if (!view) | 867 if (!view) |
827 return; | 868 return; |
828 | 869 |
829 view->CreateNewWindow(route_id, params); | 870 view->CreateNewWindow(route_id, params); |
830 } | 871 } |
831 | 872 |
832 void RenderViewHost::CreateNewWidget(int route_id, | 873 void RenderViewHost::CreateNewWidget(int route_id, |
833 WebKit::WebPopupType popup_type) { | 874 WebKit::WebPopupType popup_type) { |
834 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); | 875 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); |
835 if (view) | 876 if (view && !is_swapped_out_) |
Matt Perry
2011/04/28 22:48:20
rather than adding these checks in every message h
Charlie Reis
2011/04/29 17:53:53
That's a great idea-- thanks. Now there's only a
| |
836 view->CreateNewWidget(route_id, popup_type); | 877 view->CreateNewWidget(route_id, popup_type); |
837 } | 878 } |
838 | 879 |
839 void RenderViewHost::CreateNewFullscreenWidget(int route_id) { | 880 void RenderViewHost::CreateNewFullscreenWidget(int route_id) { |
840 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); | 881 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); |
841 if (view) | 882 if (view && !is_swapped_out_) |
842 view->CreateNewFullscreenWidget(route_id); | 883 view->CreateNewFullscreenWidget(route_id); |
843 } | 884 } |
844 | 885 |
845 void RenderViewHost::OnMsgShowView(int route_id, | 886 void RenderViewHost::OnMsgShowView(int route_id, |
846 WindowOpenDisposition disposition, | 887 WindowOpenDisposition disposition, |
847 const gfx::Rect& initial_pos, | 888 const gfx::Rect& initial_pos, |
848 bool user_gesture) { | 889 bool user_gesture) { |
849 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); | 890 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); |
850 if (view) { | 891 if (view) { |
851 view->ShowCreatedWindow(route_id, disposition, initial_pos, user_gesture); | 892 if (!is_swapped_out_) |
893 view->ShowCreatedWindow(route_id, disposition, initial_pos, user_gesture); | |
852 Send(new ViewMsg_Move_ACK(route_id)); | 894 Send(new ViewMsg_Move_ACK(route_id)); |
853 } | 895 } |
854 } | 896 } |
855 | 897 |
856 void RenderViewHost::OnMsgShowWidget(int route_id, | 898 void RenderViewHost::OnMsgShowWidget(int route_id, |
857 const gfx::Rect& initial_pos) { | 899 const gfx::Rect& initial_pos) { |
858 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); | 900 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); |
859 if (view) { | 901 if (view) { |
860 view->ShowCreatedWidget(route_id, initial_pos); | 902 if (!is_swapped_out_) |
903 view->ShowCreatedWidget(route_id, initial_pos); | |
861 Send(new ViewMsg_Move_ACK(route_id)); | 904 Send(new ViewMsg_Move_ACK(route_id)); |
862 } | 905 } |
863 } | 906 } |
864 | 907 |
865 void RenderViewHost::OnMsgShowFullscreenWidget(int route_id) { | 908 void RenderViewHost::OnMsgShowFullscreenWidget(int route_id) { |
866 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); | 909 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); |
867 if (view) { | 910 if (view) { |
868 view->ShowCreatedFullscreenWidget(route_id); | 911 if (!is_swapped_out_) |
912 view->ShowCreatedFullscreenWidget(route_id); | |
869 Send(new ViewMsg_Move_ACK(route_id)); | 913 Send(new ViewMsg_Move_ACK(route_id)); |
870 } | 914 } |
871 } | 915 } |
872 | 916 |
873 void RenderViewHost::OnMsgRunModal(IPC::Message* reply_msg) { | 917 void RenderViewHost::OnMsgRunModal(IPC::Message* reply_msg) { |
874 DCHECK(!run_modal_reply_msg_); | 918 DCHECK(!run_modal_reply_msg_); |
875 run_modal_reply_msg_ = reply_msg; | 919 run_modal_reply_msg_ = reply_msg; |
876 | 920 |
877 // TODO(darin): Bug 1107929: Need to inform our delegate to show this view in | 921 // TODO(darin): Bug 1107929: Need to inform our delegate to show this view in |
878 // an app-modal fashion. | 922 // an app-modal fashion. |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
937 } | 981 } |
938 | 982 |
939 // If we're waiting for an unload ack from this renderer and we receive a | 983 // If we're waiting for an unload ack from this renderer and we receive a |
940 // Navigate message, then the renderer was navigating before it received the | 984 // Navigate message, then the renderer was navigating before it received the |
941 // unload request. It will either respond to the unload request soon or our | 985 // unload request. It will either respond to the unload request soon or our |
942 // timer will expire. Either way, we should ignore this message, because we | 986 // timer will expire. Either way, we should ignore this message, because we |
943 // have already committed to closing this renderer. | 987 // have already committed to closing this renderer. |
944 if (is_waiting_for_unload_ack_) | 988 if (is_waiting_for_unload_ack_) |
945 return; | 989 return; |
946 | 990 |
991 // If this RVH has been swapped out, ignore the navigation. | |
992 if (is_swapped_out_) | |
993 return; | |
994 | |
947 const int renderer_id = process()->id(); | 995 const int renderer_id = process()->id(); |
948 ChildProcessSecurityPolicy* policy = | 996 ChildProcessSecurityPolicy* policy = |
949 ChildProcessSecurityPolicy::GetInstance(); | 997 ChildProcessSecurityPolicy::GetInstance(); |
950 // Without this check, an evil renderer can trick the browser into creating | 998 // Without this check, an evil renderer can trick the browser into creating |
951 // a navigation entry for a banned URL. If the user clicks the back button | 999 // a navigation entry for a banned URL. If the user clicks the back button |
952 // followed by the forward button (or clicks reload, or round-trips through | 1000 // followed by the forward button (or clicks reload, or round-trips through |
953 // session restore, etc), we'll think that the browser commanded the | 1001 // session restore, etc), we'll think that the browser commanded the |
954 // renderer to load the URL and grant the renderer the privileges to request | 1002 // renderer to load the URL and grant the renderer the privileges to request |
955 // the URL. To prevent this attack, we block the renderer from inserting | 1003 // the URL. To prevent this attack, we block the renderer from inserting |
956 // banned URLs into the navigation controller in the first place. | 1004 // banned URLs into the navigation controller in the first place. |
957 FilterURL(policy, renderer_id, &validated_params.url); | 1005 FilterURL(policy, renderer_id, &validated_params.url); |
958 FilterURL(policy, renderer_id, &validated_params.referrer); | 1006 FilterURL(policy, renderer_id, &validated_params.referrer); |
959 for (std::vector<GURL>::iterator it(validated_params.redirects.begin()); | 1007 for (std::vector<GURL>::iterator it(validated_params.redirects.begin()); |
960 it != validated_params.redirects.end(); ++it) { | 1008 it != validated_params.redirects.end(); ++it) { |
961 FilterURL(policy, renderer_id, &(*it)); | 1009 FilterURL(policy, renderer_id, &(*it)); |
962 } | 1010 } |
963 FilterURL(policy, renderer_id, &validated_params.searchable_form_url); | 1011 FilterURL(policy, renderer_id, &validated_params.searchable_form_url); |
964 FilterURL(policy, renderer_id, &validated_params.password_form.origin); | 1012 FilterURL(policy, renderer_id, &validated_params.password_form.origin); |
965 FilterURL(policy, renderer_id, &validated_params.password_form.action); | 1013 FilterURL(policy, renderer_id, &validated_params.password_form.action); |
966 | 1014 |
967 delegate_->DidNavigate(this, validated_params); | 1015 delegate_->DidNavigate(this, validated_params); |
968 } | 1016 } |
969 | 1017 |
970 void RenderViewHost::OnMsgUpdateState(int32 page_id, | 1018 void RenderViewHost::OnMsgUpdateState(int32 page_id, |
971 const std::string& state) { | 1019 const std::string& state) { |
1020 // We allow UpdateState messages even from swapped out renderers. | |
972 delegate_->UpdateState(this, page_id, state); | 1021 delegate_->UpdateState(this, page_id, state); |
973 } | 1022 } |
974 | 1023 |
975 void RenderViewHost::OnMsgUpdateTitle(int32 page_id, | 1024 void RenderViewHost::OnMsgUpdateTitle(int32 page_id, |
976 const std::wstring& title) { | 1025 const std::wstring& title) { |
1026 if (is_swapped_out_) | |
1027 return; | |
1028 | |
977 if (title.length() > content::kMaxTitleChars) { | 1029 if (title.length() > content::kMaxTitleChars) { |
978 NOTREACHED() << "Renderer sent too many characters in title."; | 1030 NOTREACHED() << "Renderer sent too many characters in title."; |
979 return; | 1031 return; |
980 } | 1032 } |
981 delegate_->UpdateTitle(this, page_id, title); | 1033 delegate_->UpdateTitle(this, page_id, title); |
982 } | 1034 } |
983 | 1035 |
984 void RenderViewHost::OnMsgUpdateEncoding(const std::string& encoding_name) { | 1036 void RenderViewHost::OnMsgUpdateEncoding(const std::string& encoding_name) { |
985 delegate_->UpdateEncoding(this, encoding_name); | 1037 if (!is_swapped_out_) |
1038 delegate_->UpdateEncoding(this, encoding_name); | |
986 } | 1039 } |
987 | 1040 |
988 void RenderViewHost::OnMsgUpdateTargetURL(int32 page_id, | 1041 void RenderViewHost::OnMsgUpdateTargetURL(int32 page_id, |
989 const GURL& url) { | 1042 const GURL& url) { |
990 delegate_->UpdateTargetURL(page_id, url); | 1043 if (!is_swapped_out_) |
1044 delegate_->UpdateTargetURL(page_id, url); | |
991 | 1045 |
992 // Send a notification back to the renderer that we are ready to | 1046 // Send a notification back to the renderer that we are ready to |
993 // receive more target urls. | 1047 // receive more target urls. |
994 Send(new ViewMsg_UpdateTargetURL_ACK(routing_id())); | 1048 Send(new ViewMsg_UpdateTargetURL_ACK(routing_id())); |
995 } | 1049 } |
996 | 1050 |
997 void RenderViewHost::OnMsgScreenshot(const SkBitmap& bitmap) { | 1051 void RenderViewHost::OnMsgScreenshot(const SkBitmap& bitmap) { |
998 NotificationService::current()->Notify( | 1052 NotificationService::current()->Notify( |
999 NotificationType::TAB_SNAPSHOT_TAKEN, | 1053 NotificationType::TAB_SNAPSHOT_TAKEN, |
1000 Source<RenderViewHost>(this), | 1054 Source<RenderViewHost>(this), |
1001 Details<const SkBitmap>(&bitmap)); | 1055 Details<const SkBitmap>(&bitmap)); |
1002 } | 1056 } |
1003 | 1057 |
1004 void RenderViewHost::OnUpdateInspectorSetting( | 1058 void RenderViewHost::OnUpdateInspectorSetting( |
1005 const std::string& key, const std::string& value) { | 1059 const std::string& key, const std::string& value) { |
1006 delegate_->UpdateInspectorSetting(key, value); | 1060 if (!is_swapped_out_) |
1061 delegate_->UpdateInspectorSetting(key, value); | |
1007 } | 1062 } |
1008 | 1063 |
1009 void RenderViewHost::OnMsgClose() { | 1064 void RenderViewHost::OnMsgClose() { |
1010 // If the renderer is telling us to close, it has already run the unload | 1065 // If the renderer is telling us to close, it has already run the unload |
1011 // events, and we can take the fast path. | 1066 // events, and we can take the fast path. We allow this even from swapped |
1067 // out renderers. | |
1012 ClosePageIgnoringUnloadEvents(); | 1068 ClosePageIgnoringUnloadEvents(); |
1013 } | 1069 } |
1014 | 1070 |
1015 void RenderViewHost::OnMsgRequestMove(const gfx::Rect& pos) { | 1071 void RenderViewHost::OnMsgRequestMove(const gfx::Rect& pos) { |
1016 delegate_->RequestMove(pos); | 1072 if (!is_swapped_out_) |
1073 delegate_->RequestMove(pos); | |
1017 Send(new ViewMsg_Move_ACK(routing_id())); | 1074 Send(new ViewMsg_Move_ACK(routing_id())); |
1018 } | 1075 } |
1019 | 1076 |
1020 void RenderViewHost::OnMsgDidStartLoading() { | 1077 void RenderViewHost::OnMsgDidStartLoading() { |
1021 delegate_->DidStartLoading(); | 1078 if (!is_swapped_out_) |
1079 delegate_->DidStartLoading(); | |
1022 } | 1080 } |
1023 | 1081 |
1024 void RenderViewHost::OnMsgDidStopLoading() { | 1082 void RenderViewHost::OnMsgDidStopLoading() { |
1025 delegate_->DidStopLoading(); | 1083 if (!is_swapped_out_) |
1084 delegate_->DidStopLoading(); | |
1026 } | 1085 } |
1027 | 1086 |
1028 void RenderViewHost::OnMsgDidChangeLoadProgress(double load_progress) { | 1087 void RenderViewHost::OnMsgDidChangeLoadProgress(double load_progress) { |
1029 delegate_->DidChangeLoadProgress(load_progress); | 1088 if (!is_swapped_out_) |
1089 delegate_->DidChangeLoadProgress(load_progress); | |
1090 } | |
1091 | |
1092 void RenderViewHost::OnMsgDidStartProvisionalLoadForFrame(int64 frame_id, | |
1093 bool is_main_frame, | |
1094 const GURL& url) { | |
1095 if (!is_swapped_out_) | |
1096 delegate_->DidStartProvisionalLoadForFrame(frame_id, is_main_frame, url); | |
1097 } | |
1098 | |
1099 void RenderViewHost::OnMsgDidRedirectProvisionalLoad(int32 page_id, | |
1100 const GURL& source_url, | |
1101 const GURL& target_url) { | |
1102 if (!is_swapped_out_) | |
1103 delegate_->DidRedirectProvisionalLoad(page_id, source_url, target_url); | |
1104 } | |
1105 | |
1106 void RenderViewHost::OnMsgDidFailProvisionalLoadWithError( | |
1107 int64 frame_id, | |
1108 bool is_main_frame, | |
1109 int error_code, | |
1110 const GURL& url, | |
1111 bool showing_repost_interstitial) { | |
1112 if (!is_swapped_out_) { | |
1113 delegate_->DidFailProvisionalLoadWithError(frame_id, is_main_frame, | |
1114 error_code, url, | |
1115 showing_repost_interstitial); | |
1116 } | |
1117 } | |
1118 | |
1119 void RenderViewHost::OnMsgDidLoadResourceFromMemoryCache( | |
1120 const GURL& url, | |
1121 const std::string& security_info) { | |
1122 if (!is_swapped_out_) | |
1123 delegate_->DidLoadResourceFromMemoryCache(url, security_info); | |
1124 } | |
1125 | |
1126 void RenderViewHost::OnMsgDidDisplayInsecureContent() { | |
1127 if (!is_swapped_out_) | |
1128 delegate_->DidDisplayInsecureContent(); | |
1129 } | |
1130 | |
1131 void RenderViewHost::OnMsgDidRunInsecureContent( | |
1132 const std::string& security_origin, const GURL& target_url) { | |
1133 if (!is_swapped_out_) | |
1134 delegate_->DidRunInsecureContent(security_origin, target_url); | |
1135 } | |
1136 | |
1137 void RenderViewHost::OnMsgDocumentLoadedInFrame(int64 frame_id) { | |
1138 if (!is_swapped_out_) | |
1139 delegate_->DocumentLoadedInFrame(frame_id); | |
1140 } | |
1141 | |
1142 void RenderViewHost::OnMsgDidFinishLoad(int64 frame_id) { | |
1143 if (!is_swapped_out_) | |
1144 delegate_->DidFinishLoad(frame_id); | |
1145 } | |
1146 | |
1147 void RenderViewHost::OnMsgUpdateContentRestrictions(int restrictions) { | |
1148 if (!is_swapped_out_) | |
1149 delegate_->UpdateContentRestrictions(restrictions); | |
1030 } | 1150 } |
1031 | 1151 |
1032 void RenderViewHost::OnMsgDocumentAvailableInMainFrame() { | 1152 void RenderViewHost::OnMsgDocumentAvailableInMainFrame() { |
1033 delegate_->DocumentAvailableInMainFrame(this); | 1153 if (!is_swapped_out_) |
1154 delegate_->DocumentAvailableInMainFrame(this); | |
1034 } | 1155 } |
1035 | 1156 |
1036 void RenderViewHost::OnMsgDocumentOnLoadCompletedInMainFrame(int32 page_id) { | 1157 void RenderViewHost::OnMsgDocumentOnLoadCompletedInMainFrame(int32 page_id) { |
1037 delegate_->DocumentOnLoadCompletedInMainFrame(this, page_id); | 1158 if (!is_swapped_out_) |
1159 delegate_->DocumentOnLoadCompletedInMainFrame(this, page_id); | |
1038 } | 1160 } |
1039 | 1161 |
1040 void RenderViewHost::OnMsgContextMenu(const ContextMenuParams& params) { | 1162 void RenderViewHost::OnMsgContextMenu(const ContextMenuParams& params) { |
1041 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); | 1163 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); |
1042 if (!view) | 1164 if (!view || is_swapped_out_) |
1043 return; | 1165 return; |
1044 | 1166 |
1045 // Validate the URLs in |params|. If the renderer can't request the URLs | 1167 // Validate the URLs in |params|. If the renderer can't request the URLs |
1046 // directly, don't show them in the context menu. | 1168 // directly, don't show them in the context menu. |
1047 ContextMenuParams validated_params(params); | 1169 ContextMenuParams validated_params(params); |
1048 int renderer_id = process()->id(); | 1170 int renderer_id = process()->id(); |
1049 ChildProcessSecurityPolicy* policy = | 1171 ChildProcessSecurityPolicy* policy = |
1050 ChildProcessSecurityPolicy::GetInstance(); | 1172 ChildProcessSecurityPolicy::GetInstance(); |
1051 | 1173 |
1052 // We don't validate |unfiltered_link_url| so that this field can be used | 1174 // We don't validate |unfiltered_link_url| so that this field can be used |
1053 // when users want to copy the original link URL. | 1175 // when users want to copy the original link URL. |
1054 FilterURL(policy, renderer_id, &validated_params.link_url); | 1176 FilterURL(policy, renderer_id, &validated_params.link_url); |
1055 FilterURL(policy, renderer_id, &validated_params.src_url); | 1177 FilterURL(policy, renderer_id, &validated_params.src_url); |
1056 FilterURL(policy, renderer_id, &validated_params.page_url); | 1178 FilterURL(policy, renderer_id, &validated_params.page_url); |
1057 FilterURL(policy, renderer_id, &validated_params.frame_url); | 1179 FilterURL(policy, renderer_id, &validated_params.frame_url); |
1058 | 1180 |
1059 view->ShowContextMenu(validated_params); | 1181 view->ShowContextMenu(validated_params); |
1060 } | 1182 } |
1061 | 1183 |
1062 void RenderViewHost::OnMsgOpenURL(const GURL& url, | 1184 void RenderViewHost::OnMsgOpenURL(const GURL& url, |
1063 const GURL& referrer, | 1185 const GURL& referrer, |
1064 WindowOpenDisposition disposition) { | 1186 WindowOpenDisposition disposition) { |
1187 if (is_swapped_out_) | |
1188 return; | |
1189 | |
1065 GURL validated_url(url); | 1190 GURL validated_url(url); |
1066 FilterURL(ChildProcessSecurityPolicy::GetInstance(), | 1191 FilterURL(ChildProcessSecurityPolicy::GetInstance(), |
1067 process()->id(), &validated_url); | 1192 process()->id(), &validated_url); |
1068 | 1193 |
1069 delegate_->RequestOpenURL(validated_url, referrer, disposition); | 1194 delegate_->RequestOpenURL(validated_url, referrer, disposition); |
1070 } | 1195 } |
1071 | 1196 |
1072 void RenderViewHost::OnMsgDidContentsPreferredSizeChange( | 1197 void RenderViewHost::OnMsgDidContentsPreferredSizeChange( |
1073 const gfx::Size& new_size) { | 1198 const gfx::Size& new_size) { |
1074 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); | 1199 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); |
1075 if (!view) | 1200 if (!view || is_swapped_out_) |
1076 return; | 1201 return; |
1077 view->UpdatePreferredSize(new_size); | 1202 view->UpdatePreferredSize(new_size); |
1078 } | 1203 } |
1079 | 1204 |
1080 void RenderViewHost::OnMsgDomOperationResponse( | 1205 void RenderViewHost::OnMsgDomOperationResponse( |
1081 const std::string& json_string, int automation_id) { | 1206 const std::string& json_string, int automation_id) { |
1207 // We allow this even when swapped out. | |
1082 delegate_->DomOperationResponse(json_string, automation_id); | 1208 delegate_->DomOperationResponse(json_string, automation_id); |
1083 | 1209 |
1084 // We also fire a notification for more loosely-coupled use cases. | 1210 // We also fire a notification for more loosely-coupled use cases. |
1085 DomOperationNotificationDetails details(json_string, automation_id); | 1211 DomOperationNotificationDetails details(json_string, automation_id); |
1086 NotificationService::current()->Notify( | 1212 NotificationService::current()->Notify( |
1087 NotificationType::DOM_OPERATION_RESPONSE, Source<RenderViewHost>(this), | 1213 NotificationType::DOM_OPERATION_RESPONSE, Source<RenderViewHost>(this), |
1088 Details<DomOperationNotificationDetails>(&details)); | 1214 Details<DomOperationNotificationDetails>(&details)); |
1089 } | 1215 } |
1090 | 1216 |
1091 void RenderViewHost::OnMsgWebUISend( | 1217 void RenderViewHost::OnMsgWebUISend( |
1092 const GURL& source_url, const std::string& message, | 1218 const GURL& source_url, const std::string& message, |
1093 const std::string& content) { | 1219 const std::string& content) { |
1094 if (!ChildProcessSecurityPolicy::GetInstance()-> | 1220 if (!ChildProcessSecurityPolicy::GetInstance()-> |
1095 HasWebUIBindings(process()->id())) { | 1221 HasWebUIBindings(process()->id())) { |
1096 NOTREACHED() << "Blocked unauthorized use of WebUIBindings."; | 1222 NOTREACHED() << "Blocked unauthorized use of WebUIBindings."; |
1097 return; | 1223 return; |
1098 } | 1224 } |
1099 | 1225 |
1100 scoped_ptr<Value> value; | 1226 scoped_ptr<Value> value; |
1101 if (!content.empty()) { | 1227 if (!content.empty()) { |
1102 value.reset(base::JSONReader::Read(content, false)); | 1228 value.reset(base::JSONReader::Read(content, false)); |
1103 if (!value.get() || !value->IsType(Value::TYPE_LIST)) { | 1229 if (!value.get() || !value->IsType(Value::TYPE_LIST)) { |
1104 // The page sent us something that we didn't understand. | 1230 // The page sent us something that we didn't understand. |
1105 // This probably indicates a programming error. | 1231 // This probably indicates a programming error. |
1106 NOTREACHED() << "Invalid JSON argument in OnMsgWebUISend."; | 1232 NOTREACHED() << "Invalid JSON argument in OnMsgWebUISend."; |
1107 return; | 1233 return; |
1108 } | 1234 } |
1109 } | 1235 } |
1110 | 1236 |
1237 if (is_swapped_out_) | |
1238 return; | |
1239 | |
1111 ExtensionHostMsg_DomMessage_Params params; | 1240 ExtensionHostMsg_DomMessage_Params params; |
1112 params.name = message; | 1241 params.name = message; |
1113 if (value.get()) | 1242 if (value.get()) |
1114 params.arguments.Swap(static_cast<ListValue*>(value.get())); | 1243 params.arguments.Swap(static_cast<ListValue*>(value.get())); |
1115 params.source_url = source_url; | 1244 params.source_url = source_url; |
1116 // WebUI doesn't use these values yet. | 1245 // WebUI doesn't use these values yet. |
1117 // TODO(aa): When WebUI is ported to ExtensionFunctionDispatcher, send real | 1246 // TODO(aa): When WebUI is ported to ExtensionFunctionDispatcher, send real |
1118 // values here. | 1247 // values here. |
1119 params.request_id = -1; | 1248 params.request_id = -1; |
1120 params.has_callback = false; | 1249 params.has_callback = false; |
1121 params.user_gesture = false; | 1250 params.user_gesture = false; |
1122 delegate_->ProcessWebUIMessage(params); | 1251 delegate_->ProcessWebUIMessage(params); |
1123 } | 1252 } |
1124 | 1253 |
1125 void RenderViewHost::OnMsgForwardMessageToExternalHost( | 1254 void RenderViewHost::OnMsgForwardMessageToExternalHost( |
1126 const std::string& message, const std::string& origin, | 1255 const std::string& message, const std::string& origin, |
1127 const std::string& target) { | 1256 const std::string& target) { |
1128 delegate_->ProcessExternalHostMessage(message, origin, target); | 1257 if (!is_swapped_out_) |
1258 delegate_->ProcessExternalHostMessage(message, origin, target); | |
1129 } | 1259 } |
1130 | 1260 |
1131 void RenderViewHost::DisassociateFromPopupCount() { | 1261 void RenderViewHost::DisassociateFromPopupCount() { |
1132 Send(new ViewMsg_DisassociateFromPopupCount(routing_id())); | 1262 Send(new ViewMsg_DisassociateFromPopupCount(routing_id())); |
1133 } | 1263 } |
1134 | 1264 |
1135 void RenderViewHost::OnMsgSetTooltipText( | 1265 void RenderViewHost::OnMsgSetTooltipText( |
1136 const std::wstring& tooltip_text, | 1266 const std::wstring& tooltip_text, |
1137 WebTextDirection text_direction_hint) { | 1267 WebTextDirection text_direction_hint) { |
1268 if (is_swapped_out_) | |
1269 return; | |
1270 | |
1138 // First, add directionality marks around tooltip text if necessary. | 1271 // First, add directionality marks around tooltip text if necessary. |
1139 // A naive solution would be to simply always wrap the text. However, on | 1272 // A naive solution would be to simply always wrap the text. However, on |
1140 // windows, Unicode directional embedding characters can't be displayed on | 1273 // windows, Unicode directional embedding characters can't be displayed on |
1141 // systems that lack RTL fonts and are instead displayed as empty squares. | 1274 // systems that lack RTL fonts and are instead displayed as empty squares. |
1142 // | 1275 // |
1143 // To get around this we only wrap the string when we deem it necessary i.e. | 1276 // To get around this we only wrap the string when we deem it necessary i.e. |
1144 // when the locale direction is different than the tooltip direction hint. | 1277 // when the locale direction is different than the tooltip direction hint. |
1145 // | 1278 // |
1146 // Currently, we use element's directionality as the tooltip direction hint. | 1279 // Currently, we use element's directionality as the tooltip direction hint. |
1147 // An alternate solution would be to set the overall directionality based on | 1280 // An alternate solution would be to set the overall directionality based on |
(...skipping 10 matching lines...) Expand all Loading... | |
1158 !base::i18n::IsRTL()) { | 1291 !base::i18n::IsRTL()) { |
1159 // Force the tooltip to have RTL directionality. | 1292 // Force the tooltip to have RTL directionality. |
1160 base::i18n::WrapStringWithRTLFormatting(&wrapped_tooltip_text); | 1293 base::i18n::WrapStringWithRTLFormatting(&wrapped_tooltip_text); |
1161 } | 1294 } |
1162 } | 1295 } |
1163 if (view()) | 1296 if (view()) |
1164 view()->SetTooltipText(UTF16ToWide(wrapped_tooltip_text)); | 1297 view()->SetTooltipText(UTF16ToWide(wrapped_tooltip_text)); |
1165 } | 1298 } |
1166 | 1299 |
1167 void RenderViewHost::OnMsgSelectionChanged(const std::string& text) { | 1300 void RenderViewHost::OnMsgSelectionChanged(const std::string& text) { |
1168 if (view()) | 1301 if (view() && !is_swapped_out_) |
1169 view()->SelectionChanged(text); | 1302 view()->SelectionChanged(text); |
1170 } | 1303 } |
1171 | 1304 |
1172 void RenderViewHost::OnMsgRunJavaScriptMessage( | 1305 void RenderViewHost::OnMsgRunJavaScriptMessage( |
1173 const std::wstring& message, | 1306 const std::wstring& message, |
1174 const std::wstring& default_prompt, | 1307 const std::wstring& default_prompt, |
1175 const GURL& frame_url, | 1308 const GURL& frame_url, |
1176 const int flags, | 1309 const int flags, |
1177 IPC::Message* reply_msg) { | 1310 IPC::Message* reply_msg) { |
1178 // While a JS message dialog is showing, tabs in the same process shouldn't | 1311 // While a JS message dialog is showing, tabs in the same process shouldn't |
1179 // process input events. | 1312 // process input events. |
1180 process()->set_ignore_input_events(true); | 1313 process()->set_ignore_input_events(true); |
1181 StopHangMonitorTimeout(); | 1314 StopHangMonitorTimeout(); |
1182 delegate_->RunJavaScriptMessage(message, default_prompt, frame_url, flags, | 1315 delegate_->RunJavaScriptMessage(this, message, default_prompt, frame_url, |
1183 reply_msg, | 1316 flags, reply_msg, |
1184 &are_javascript_messages_suppressed_); | 1317 &are_javascript_messages_suppressed_); |
1185 } | 1318 } |
1186 | 1319 |
1187 void RenderViewHost::OnMsgRunBeforeUnloadConfirm(const GURL& frame_url, | 1320 void RenderViewHost::OnMsgRunBeforeUnloadConfirm(const GURL& frame_url, |
1188 const std::wstring& message, | 1321 const std::wstring& message, |
1189 IPC::Message* reply_msg) { | 1322 IPC::Message* reply_msg) { |
1190 // While a JS before unload dialog is showing, tabs in the same process | 1323 // While a JS before unload dialog is showing, tabs in the same process |
1191 // shouldn't process input events. | 1324 // shouldn't process input events. |
1192 process()->set_ignore_input_events(true); | 1325 process()->set_ignore_input_events(true); |
1193 StopHangMonitorTimeout(); | 1326 StopHangMonitorTimeout(); |
1194 delegate_->RunBeforeUnloadConfirm(message, reply_msg); | 1327 delegate_->RunBeforeUnloadConfirm(this, message, reply_msg); |
1195 } | 1328 } |
1196 | 1329 |
1197 void RenderViewHost::MediaPlayerActionAt(const gfx::Point& location, | 1330 void RenderViewHost::MediaPlayerActionAt(const gfx::Point& location, |
1198 const WebMediaPlayerAction& action) { | 1331 const WebMediaPlayerAction& action) { |
1199 // TODO(ajwong): Which thread should run this? Does it matter? | 1332 // TODO(ajwong): Which thread should run this? Does it matter? |
1200 Send(new ViewMsg_MediaPlayerActionAt(routing_id(), location, action)); | 1333 Send(new ViewMsg_MediaPlayerActionAt(routing_id(), location, action)); |
1201 } | 1334 } |
1202 | 1335 |
1203 void RenderViewHost::ContextMenuClosed( | 1336 void RenderViewHost::ContextMenuClosed( |
1204 const webkit_glue::CustomContextMenuContext& custom_context) { | 1337 const webkit_glue::CustomContextMenuContext& custom_context) { |
1205 Send(new ViewMsg_ContextMenuClosed(routing_id(), custom_context)); | 1338 Send(new ViewMsg_ContextMenuClosed(routing_id(), custom_context)); |
1206 } | 1339 } |
1207 | 1340 |
1208 void RenderViewHost::OnMsgStartDragging( | 1341 void RenderViewHost::OnMsgStartDragging( |
1209 const WebDropData& drop_data, | 1342 const WebDropData& drop_data, |
1210 WebDragOperationsMask drag_operations_mask, | 1343 WebDragOperationsMask drag_operations_mask, |
1211 const SkBitmap& image, | 1344 const SkBitmap& image, |
1212 const gfx::Point& image_offset) { | 1345 const gfx::Point& image_offset) { |
1213 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); | 1346 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); |
1214 if (view) | 1347 if (view && !is_swapped_out_) |
1215 view->StartDragging(drop_data, drag_operations_mask, image, image_offset); | 1348 view->StartDragging(drop_data, drag_operations_mask, image, image_offset); |
1216 } | 1349 } |
1217 | 1350 |
1218 void RenderViewHost::OnUpdateDragCursor(WebDragOperation current_op) { | 1351 void RenderViewHost::OnUpdateDragCursor(WebDragOperation current_op) { |
1219 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); | 1352 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); |
1220 if (view) | 1353 if (view && !is_swapped_out_) |
1221 view->UpdateDragCursor(current_op); | 1354 view->UpdateDragCursor(current_op); |
1222 } | 1355 } |
1223 | 1356 |
1224 void RenderViewHost::OnTakeFocus(bool reverse) { | 1357 void RenderViewHost::OnTakeFocus(bool reverse) { |
1225 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); | 1358 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); |
1226 if (view) | 1359 if (view && !is_swapped_out_) |
1227 view->TakeFocus(reverse); | 1360 view->TakeFocus(reverse); |
1228 } | 1361 } |
1229 | 1362 |
1230 void RenderViewHost::OnAddMessageToConsole(int32 level, | 1363 void RenderViewHost::OnAddMessageToConsole(int32 level, |
1231 const std::wstring& message, | 1364 const std::wstring& message, |
1232 int32 line_no, | 1365 int32 line_no, |
1233 const std::wstring& source_id) { | 1366 const std::wstring& source_id) { |
1367 if (is_swapped_out_) | |
1368 return; | |
1369 | |
1234 // Pass through log level only on WebUI pages to limit console spew. | 1370 // Pass through log level only on WebUI pages to limit console spew. |
1235 int32 resolved_level = | 1371 int32 resolved_level = |
1236 BindingsPolicy::is_web_ui_enabled(enabled_bindings_) ? level : 0; | 1372 BindingsPolicy::is_web_ui_enabled(enabled_bindings_) ? level : 0; |
1237 | 1373 |
1238 logging::LogMessage("CONSOLE", line_no, resolved_level).stream() << "\"" << | 1374 logging::LogMessage("CONSOLE", line_no, resolved_level).stream() << "\"" << |
1239 message << "\", source: " << source_id << " (" << line_no << ")"; | 1375 message << "\", source: " << source_id << " (" << line_no << ")"; |
1240 } | 1376 } |
1241 | 1377 |
1242 void RenderViewHost::AddObserver(RenderViewHostObserver* observer) { | 1378 void RenderViewHost::AddObserver(RenderViewHostObserver* observer) { |
1243 observers_.AddObserver(observer); | 1379 observers_.AddObserver(observer); |
(...skipping 10 matching lines...) Expand all Loading... | |
1254 } | 1390 } |
1255 | 1391 |
1256 void RenderViewHost::UnhandledKeyboardEvent( | 1392 void RenderViewHost::UnhandledKeyboardEvent( |
1257 const NativeWebKeyboardEvent& event) { | 1393 const NativeWebKeyboardEvent& event) { |
1258 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); | 1394 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); |
1259 if (view) | 1395 if (view) |
1260 view->HandleKeyboardEvent(event); | 1396 view->HandleKeyboardEvent(event); |
1261 } | 1397 } |
1262 | 1398 |
1263 void RenderViewHost::OnUserGesture() { | 1399 void RenderViewHost::OnUserGesture() { |
1264 delegate_->OnUserGesture(); | 1400 if (is_swapped_out_) |
1401 delegate_->OnUserGesture(); | |
1265 } | 1402 } |
1266 | 1403 |
1267 void RenderViewHost::GetAllSavableResourceLinksForCurrentPage( | 1404 void RenderViewHost::GetAllSavableResourceLinksForCurrentPage( |
1268 const GURL& page_url) { | 1405 const GURL& page_url) { |
1269 Send(new ViewMsg_GetAllSavableResourceLinksForCurrentPage(routing_id(), | 1406 Send(new ViewMsg_GetAllSavableResourceLinksForCurrentPage(routing_id(), |
1270 page_url)); | 1407 page_url)); |
1271 } | 1408 } |
1272 | 1409 |
1273 void RenderViewHost::GetSerializedHtmlDataForCurrentPageWithLocalLinks( | 1410 void RenderViewHost::GetSerializedHtmlDataForCurrentPageWithLocalLinks( |
1274 const std::vector<GURL>& links, | 1411 const std::vector<GURL>& links, |
1275 const std::vector<FilePath>& local_paths, | 1412 const std::vector<FilePath>& local_paths, |
1276 const FilePath& local_directory_name) { | 1413 const FilePath& local_directory_name) { |
1277 Send(new ViewMsg_GetSerializedHtmlDataForCurrentPageWithLocalLinks( | 1414 Send(new ViewMsg_GetSerializedHtmlDataForCurrentPageWithLocalLinks( |
1278 routing_id(), links, local_paths, local_directory_name)); | 1415 routing_id(), links, local_paths, local_directory_name)); |
1279 } | 1416 } |
1280 | 1417 |
1281 void RenderViewHost::OnMsgShouldCloseACK(bool proceed) { | 1418 void RenderViewHost::OnMsgShouldCloseACK(bool proceed) { |
1282 StopHangMonitorTimeout(); | 1419 StopHangMonitorTimeout(); |
1283 // If this renderer navigated while the beforeunload request was in flight, we | 1420 // If this renderer navigated while the beforeunload request was in flight, we |
1284 // may have cleared this state in OnMsgNavigate, in which case we can ignore | 1421 // may have cleared this state in OnMsgNavigate, in which case we can ignore |
1285 // this message. | 1422 // this message. |
1286 if (!is_waiting_for_beforeunload_ack_) | 1423 if (!is_waiting_for_beforeunload_ack_ || is_swapped_out_) |
1287 return; | 1424 return; |
1288 | 1425 |
1289 is_waiting_for_beforeunload_ack_ = false; | 1426 is_waiting_for_beforeunload_ack_ = false; |
1290 | 1427 |
1291 RenderViewHostDelegate::RendererManagement* management_delegate = | 1428 RenderViewHostDelegate::RendererManagement* management_delegate = |
1292 delegate_->GetRendererManagementDelegate(); | 1429 delegate_->GetRendererManagementDelegate(); |
1293 if (management_delegate) { | 1430 if (management_delegate) { |
1294 management_delegate->ShouldClosePage( | 1431 management_delegate->ShouldClosePage( |
1295 unload_ack_is_for_cross_site_transition_, proceed); | 1432 unload_ack_is_for_cross_site_transition_, proceed); |
1296 } | 1433 } |
1297 } | 1434 } |
1298 | 1435 |
1436 void RenderViewHost::OnMsgClosePageACK() { | |
1437 // We allow this even while swapped out. | |
1438 ClosePageIgnoringUnloadEvents(); | |
1439 } | |
1440 | |
1299 void RenderViewHost::WindowMoveOrResizeStarted() { | 1441 void RenderViewHost::WindowMoveOrResizeStarted() { |
1300 Send(new ViewMsg_MoveOrResizeStarted(routing_id())); | 1442 Send(new ViewMsg_MoveOrResizeStarted(routing_id())); |
1301 } | 1443 } |
1302 | 1444 |
1303 void RenderViewHost::NotifyRendererUnresponsive() { | 1445 void RenderViewHost::NotifyRendererUnresponsive() { |
1304 delegate_->RendererUnresponsive( | 1446 delegate_->RendererUnresponsive( |
1305 this, is_waiting_for_beforeunload_ack_ || is_waiting_for_unload_ack_); | 1447 this, is_waiting_for_beforeunload_ack_ || is_waiting_for_unload_ack_); |
1306 } | 1448 } |
1307 | 1449 |
1308 void RenderViewHost::NotifyRendererResponsive() { | 1450 void RenderViewHost::NotifyRendererResponsive() { |
1309 delegate_->RendererResponsive(this); | 1451 delegate_->RendererResponsive(this); |
1310 } | 1452 } |
1311 | 1453 |
1312 void RenderViewHost::OnMsgFocusedNodeChanged(bool is_editable_node) { | 1454 void RenderViewHost::OnMsgFocusedNodeChanged(bool is_editable_node) { |
1313 delegate_->FocusedNodeChanged(is_editable_node); | 1455 if (!is_swapped_out_) |
1456 delegate_->FocusedNodeChanged(is_editable_node); | |
1314 } | 1457 } |
1315 | 1458 |
1316 void RenderViewHost::OnMsgFocus() { | 1459 void RenderViewHost::OnMsgFocus() { |
1317 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); | 1460 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); |
1318 if (view) | 1461 if (view && !is_swapped_out_) |
1319 view->Activate(); | 1462 view->Activate(); |
1320 } | 1463 } |
1321 | 1464 |
1322 void RenderViewHost::OnMsgBlur() { | 1465 void RenderViewHost::OnMsgBlur() { |
1323 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); | 1466 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); |
1324 if (view) | 1467 if (view && !is_swapped_out_) |
1325 view->Deactivate(); | 1468 view->Deactivate(); |
1326 } | 1469 } |
1327 | 1470 |
1328 void RenderViewHost::ForwardMouseEvent( | 1471 void RenderViewHost::ForwardMouseEvent( |
1329 const WebKit::WebMouseEvent& mouse_event) { | 1472 const WebKit::WebMouseEvent& mouse_event) { |
1330 | 1473 |
1331 // We make a copy of the mouse event because | 1474 // We make a copy of the mouse event because |
1332 // RenderWidgetHost::ForwardMouseEvent will delete |mouse_event|. | 1475 // RenderWidgetHost::ForwardMouseEvent will delete |mouse_event|. |
1333 WebKit::WebMouseEvent event_copy(mouse_event); | 1476 WebKit::WebMouseEvent event_copy(mouse_event); |
1334 RenderWidgetHost::ForwardMouseEvent(event_copy); | 1477 RenderWidgetHost::ForwardMouseEvent(event_copy); |
(...skipping 18 matching lines...) Expand all Loading... | |
1353 view->HandleMouseUp(); | 1496 view->HandleMouseUp(); |
1354 default: | 1497 default: |
1355 // For now, we don't care about the rest. | 1498 // For now, we don't care about the rest. |
1356 break; | 1499 break; |
1357 } | 1500 } |
1358 } | 1501 } |
1359 } | 1502 } |
1360 | 1503 |
1361 void RenderViewHost::OnMouseActivate() { | 1504 void RenderViewHost::OnMouseActivate() { |
1362 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); | 1505 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); |
1363 if (view) | 1506 if (view && !is_swapped_out_) |
1364 view->HandleMouseActivate(); | 1507 view->HandleMouseActivate(); |
1365 } | 1508 } |
1366 | 1509 |
1367 void RenderViewHost::ForwardKeyboardEvent( | 1510 void RenderViewHost::ForwardKeyboardEvent( |
1368 const NativeWebKeyboardEvent& key_event) { | 1511 const NativeWebKeyboardEvent& key_event) { |
1369 if (ignore_input_events()) { | 1512 if (ignore_input_events()) { |
1370 if (key_event.type == WebInputEvent::RawKeyDown) | 1513 if (key_event.type == WebInputEvent::RawKeyDown) |
1371 delegate_->OnIgnoredUIEvent(); | 1514 delegate_->OnIgnoredUIEvent(); |
1372 return; | 1515 return; |
1373 } | 1516 } |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1471 *url = GURL(); | 1614 *url = GURL(); |
1472 } | 1615 } |
1473 } | 1616 } |
1474 | 1617 |
1475 void RenderViewHost::JavaScriptStressTestControl(int cmd, int param) { | 1618 void RenderViewHost::JavaScriptStressTestControl(int cmd, int param) { |
1476 Send(new ViewMsg_JavaScriptStressTestControl(routing_id(), cmd, param)); | 1619 Send(new ViewMsg_JavaScriptStressTestControl(routing_id(), cmd, param)); |
1477 } | 1620 } |
1478 | 1621 |
1479 void RenderViewHost::OnAccessibilityNotifications( | 1622 void RenderViewHost::OnAccessibilityNotifications( |
1480 const std::vector<ViewHostMsg_AccessibilityNotification_Params>& params) { | 1623 const std::vector<ViewHostMsg_AccessibilityNotification_Params>& params) { |
1481 if (view()) | 1624 if (view() && !is_swapped_out_) |
1482 view()->OnAccessibilityNotifications(params); | 1625 view()->OnAccessibilityNotifications(params); |
1483 | 1626 |
1484 if (!params.empty()) { | 1627 if (!params.empty()) { |
1485 for (unsigned i = 0; i < params.size(); i++) { | 1628 for (unsigned i = 0; i < params.size(); i++) { |
1486 const ViewHostMsg_AccessibilityNotification_Params& param = params[i]; | 1629 const ViewHostMsg_AccessibilityNotification_Params& param = params[i]; |
1487 | 1630 |
1488 if (param.notification_type == | 1631 if (param.notification_type == |
1489 ViewHostMsg_AccessibilityNotification_Type:: | 1632 ViewHostMsg_AccessibilityNotification_Type:: |
1490 NOTIFICATION_TYPE_LOAD_COMPLETE) { | 1633 NOTIFICATION_TYPE_LOAD_COMPLETE) { |
1491 // TODO(ctguil): Remove when mac processes OnAccessibilityNotifications. | 1634 // TODO(ctguil): Remove when mac processes OnAccessibilityNotifications. |
1492 if (view()) | 1635 if (view()) |
1493 view()->UpdateAccessibilityTree(param.acc_obj); | 1636 view()->UpdateAccessibilityTree(param.acc_obj); |
1494 | 1637 |
1495 if (save_accessibility_tree_for_testing_) | 1638 if (save_accessibility_tree_for_testing_) |
1496 accessibility_tree_ = param.acc_obj; | 1639 accessibility_tree_ = param.acc_obj; |
1497 } | 1640 } |
1498 } | 1641 } |
1499 | 1642 |
1500 NotificationService::current()->Notify( | 1643 NotificationService::current()->Notify( |
1501 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, | 1644 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, |
1502 Source<RenderViewHost>(this), | 1645 Source<RenderViewHost>(this), |
1503 NotificationService::NoDetails()); | 1646 NotificationService::NoDetails()); |
1504 } | 1647 } |
1505 | 1648 |
1506 AccessibilityNotificationsAck(); | 1649 AccessibilityNotificationsAck(); |
1507 } | 1650 } |
1508 | 1651 |
1509 void RenderViewHost::OnCSSInserted() { | 1652 void RenderViewHost::OnCSSInserted() { |
1510 delegate_->DidInsertCSS(); | 1653 if (!is_swapped_out_) |
1654 delegate_->DidInsertCSS(); | |
1511 } | 1655 } |
1512 | 1656 |
1513 void RenderViewHost::OnContentBlocked(ContentSettingsType type, | 1657 void RenderViewHost::OnContentBlocked(ContentSettingsType type, |
1514 const std::string& resource_identifier) { | 1658 const std::string& resource_identifier) { |
1515 RenderViewHostDelegate::ContentSettings* content_settings_delegate = | 1659 RenderViewHostDelegate::ContentSettings* content_settings_delegate = |
1516 delegate_->GetContentSettingsDelegate(); | 1660 delegate_->GetContentSettingsDelegate(); |
1517 if (content_settings_delegate) | 1661 if (content_settings_delegate && !is_swapped_out_) |
1518 content_settings_delegate->OnContentBlocked(type, resource_identifier); | 1662 content_settings_delegate->OnContentBlocked(type, resource_identifier); |
1519 } | 1663 } |
1520 | 1664 |
1521 void RenderViewHost::OnAppCacheAccessed(const GURL& manifest_url, | 1665 void RenderViewHost::OnAppCacheAccessed(const GURL& manifest_url, |
1522 bool blocked_by_policy) { | 1666 bool blocked_by_policy) { |
1523 RenderViewHostDelegate::ContentSettings* content_settings_delegate = | 1667 RenderViewHostDelegate::ContentSettings* content_settings_delegate = |
1524 delegate_->GetContentSettingsDelegate(); | 1668 delegate_->GetContentSettingsDelegate(); |
1525 if (content_settings_delegate) | 1669 if (content_settings_delegate && !is_swapped_out_) |
1526 content_settings_delegate->OnAppCacheAccessed(manifest_url, | 1670 content_settings_delegate->OnAppCacheAccessed(manifest_url, |
1527 blocked_by_policy); | 1671 blocked_by_policy); |
1528 } | 1672 } |
1529 | 1673 |
1530 void RenderViewHost::OnWebDatabaseAccessed(const GURL& url, | 1674 void RenderViewHost::OnWebDatabaseAccessed(const GURL& url, |
1531 const string16& name, | 1675 const string16& name, |
1532 const string16& display_name, | 1676 const string16& display_name, |
1533 unsigned long estimated_size, | 1677 unsigned long estimated_size, |
1534 bool blocked_by_policy) { | 1678 bool blocked_by_policy) { |
1535 RenderViewHostDelegate::ContentSettings* content_settings_delegate = | 1679 RenderViewHostDelegate::ContentSettings* content_settings_delegate = |
1536 delegate_->GetContentSettingsDelegate(); | 1680 delegate_->GetContentSettingsDelegate(); |
1537 if (content_settings_delegate) | 1681 if (content_settings_delegate && !is_swapped_out_) |
1538 content_settings_delegate->OnWebDatabaseAccessed( | 1682 content_settings_delegate->OnWebDatabaseAccessed( |
1539 url, name, display_name, estimated_size, blocked_by_policy); | 1683 url, name, display_name, estimated_size, blocked_by_policy); |
1540 } | 1684 } |
1541 | 1685 |
1542 void RenderViewHost::OnUpdateZoomLimits(int minimum_percent, | 1686 void RenderViewHost::OnUpdateZoomLimits(int minimum_percent, |
1543 int maximum_percent, | 1687 int maximum_percent, |
1544 bool remember) { | 1688 bool remember) { |
1545 delegate_->UpdateZoomLimits(minimum_percent, maximum_percent, remember); | 1689 if (!is_swapped_out_) |
1690 delegate_->UpdateZoomLimits(minimum_percent, maximum_percent, remember); | |
1546 } | 1691 } |
1547 | 1692 |
1548 void RenderViewHost::OnScriptEvalResponse(int id, const ListValue& result) { | 1693 void RenderViewHost::OnScriptEvalResponse(int id, const ListValue& result) { |
1549 Value* result_value; | 1694 Value* result_value; |
1550 if (!result.Get(0, &result_value)) { | 1695 if (!result.Get(0, &result_value)) { |
1551 // Programming error or rogue renderer. | 1696 // Programming error or rogue renderer. |
1552 NOTREACHED() << "Got bad arguments for OnScriptEvalResponse"; | 1697 NOTREACHED() << "Got bad arguments for OnScriptEvalResponse"; |
1553 return; | 1698 return; |
1554 } | 1699 } |
1700 if (is_swapped_out_) | |
1701 return; | |
1702 | |
1555 std::pair<int, Value*> details(id, result_value); | 1703 std::pair<int, Value*> details(id, result_value); |
1556 NotificationService::current()->Notify( | 1704 NotificationService::current()->Notify( |
1557 NotificationType::EXECUTE_JAVASCRIPT_RESULT, | 1705 NotificationType::EXECUTE_JAVASCRIPT_RESULT, |
1558 Source<RenderViewHost>(this), | 1706 Source<RenderViewHost>(this), |
1559 Details<std::pair<int, Value*> >(&details)); | 1707 Details<std::pair<int, Value*> >(&details)); |
1560 } | 1708 } |
1561 | 1709 |
1562 #if defined(OS_MACOSX) | 1710 #if defined(OS_MACOSX) |
1563 void RenderViewHost::OnMsgShowPopup( | 1711 void RenderViewHost::OnMsgShowPopup( |
1564 const ViewHostMsg_ShowPopup_Params& params) { | 1712 const ViewHostMsg_ShowPopup_Params& params) { |
1565 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); | 1713 RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); |
1566 if (view) { | 1714 if (view && !is_swapped_out_) { |
1567 view->ShowPopupMenu(params.bounds, | 1715 view->ShowPopupMenu(params.bounds, |
1568 params.item_height, | 1716 params.item_height, |
1569 params.item_font_size, | 1717 params.item_font_size, |
1570 params.selected_item, | 1718 params.selected_item, |
1571 params.popup_items, | 1719 params.popup_items, |
1572 params.right_aligned); | 1720 params.right_aligned); |
1573 } | 1721 } |
1574 } | 1722 } |
1575 #endif | 1723 #endif |
1576 | 1724 |
(...skipping 11 matching lines...) Expand all Loading... | |
1588 LOG(DFATAL) << "Invalid checked state " << checked_state; | 1736 LOG(DFATAL) << "Invalid checked state " << checked_state; |
1589 return; | 1737 return; |
1590 } | 1738 } |
1591 | 1739 |
1592 CommandState state; | 1740 CommandState state; |
1593 state.is_enabled = is_enabled; | 1741 state.is_enabled = is_enabled; |
1594 state.checked_state = | 1742 state.checked_state = |
1595 static_cast<RenderViewCommandCheckedState>(checked_state); | 1743 static_cast<RenderViewCommandCheckedState>(checked_state); |
1596 command_states_[static_cast<RenderViewCommand>(command)] = state; | 1744 command_states_[static_cast<RenderViewCommand>(command)] = state; |
1597 } | 1745 } |
OLD | NEW |