Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: content/renderer/render_frame_impl.cc

Issue 509063004: Move ViewMsg_Stop from RenderViewHost to RenderFrameHost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Another rebase to fix patch failure. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | content/renderer/render_frame_proxy.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/renderer/render_frame_impl.h" 5 #include "content/renderer/render_frame_impl.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after
745 while ((observer = it.GetNext()) != NULL) { 745 while ((observer = it.GetNext()) != NULL) {
746 if (observer->OnMessageReceived(msg)) 746 if (observer->OnMessageReceived(msg))
747 return true; 747 return true;
748 } 748 }
749 749
750 bool handled = true; 750 bool handled = true;
751 IPC_BEGIN_MESSAGE_MAP(RenderFrameImpl, msg) 751 IPC_BEGIN_MESSAGE_MAP(RenderFrameImpl, msg)
752 IPC_MESSAGE_HANDLER(FrameMsg_Navigate, OnNavigate) 752 IPC_MESSAGE_HANDLER(FrameMsg_Navigate, OnNavigate)
753 IPC_MESSAGE_HANDLER(FrameMsg_BeforeUnload, OnBeforeUnload) 753 IPC_MESSAGE_HANDLER(FrameMsg_BeforeUnload, OnBeforeUnload)
754 IPC_MESSAGE_HANDLER(FrameMsg_SwapOut, OnSwapOut) 754 IPC_MESSAGE_HANDLER(FrameMsg_SwapOut, OnSwapOut)
755 IPC_MESSAGE_HANDLER(FrameMsg_Stop, OnStop)
755 IPC_MESSAGE_HANDLER(FrameMsg_ContextMenuClosed, OnContextMenuClosed) 756 IPC_MESSAGE_HANDLER(FrameMsg_ContextMenuClosed, OnContextMenuClosed)
756 IPC_MESSAGE_HANDLER(FrameMsg_CustomContextMenuAction, 757 IPC_MESSAGE_HANDLER(FrameMsg_CustomContextMenuAction,
757 OnCustomContextMenuAction) 758 OnCustomContextMenuAction)
758 IPC_MESSAGE_HANDLER(InputMsg_Undo, OnUndo) 759 IPC_MESSAGE_HANDLER(InputMsg_Undo, OnUndo)
759 IPC_MESSAGE_HANDLER(InputMsg_Redo, OnRedo) 760 IPC_MESSAGE_HANDLER(InputMsg_Redo, OnRedo)
760 IPC_MESSAGE_HANDLER(InputMsg_Cut, OnCut) 761 IPC_MESSAGE_HANDLER(InputMsg_Cut, OnCut)
761 IPC_MESSAGE_HANDLER(InputMsg_Copy, OnCopy) 762 IPC_MESSAGE_HANDLER(InputMsg_Copy, OnCopy)
762 IPC_MESSAGE_HANDLER(InputMsg_Paste, OnPaste) 763 IPC_MESSAGE_HANDLER(InputMsg_Paste, OnPaste)
763 IPC_MESSAGE_HANDLER(InputMsg_PasteAndMatchStyle, OnPasteAndMatchStyle) 764 IPC_MESSAGE_HANDLER(InputMsg_PasteAndMatchStyle, OnPasteAndMatchStyle)
764 IPC_MESSAGE_HANDLER(InputMsg_Delete, OnDelete) 765 IPC_MESSAGE_HANDLER(InputMsg_Delete, OnDelete)
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
1009 Send(new FrameHostMsg_BeforeUnload_ACK(routing_id_, proceed, 1010 Send(new FrameHostMsg_BeforeUnload_ACK(routing_id_, proceed,
1010 before_unload_start_time, 1011 before_unload_start_time,
1011 before_unload_end_time)); 1012 before_unload_end_time));
1012 } 1013 }
1013 1014
1014 void RenderFrameImpl::OnSwapOut(int proxy_routing_id) { 1015 void RenderFrameImpl::OnSwapOut(int proxy_routing_id) {
1015 TRACE_EVENT1("navigation", "RenderFrameImpl::OnSwapOut", "id", routing_id_); 1016 TRACE_EVENT1("navigation", "RenderFrameImpl::OnSwapOut", "id", routing_id_);
1016 RenderFrameProxy* proxy = NULL; 1017 RenderFrameProxy* proxy = NULL;
1017 bool is_site_per_process = 1018 bool is_site_per_process =
1018 CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess); 1019 CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess);
1020 bool is_main_frame = !frame_->parent();
1019 1021
1020 // Only run unload if we're not swapped out yet, but send the ack either way. 1022 // Only run unload if we're not swapped out yet, but send the ack either way.
1021 if (!is_swapped_out_ || !render_view_->is_swapped_out_) { 1023 if (!is_swapped_out_ || !render_view_->is_swapped_out_) {
1022 // Swap this RenderFrame out so the frame can navigate to a page rendered by 1024 // Swap this RenderFrame out so the frame can navigate to a page rendered by
1023 // a different process. This involves running the unload handler and 1025 // a different process. This involves running the unload handler and
1024 // clearing the page. We also allow this process to exit if there are no 1026 // clearing the page. We also allow this process to exit if there are no
1025 // other active RenderFrames in it. 1027 // other active RenderFrames in it.
1026 1028
1027 // Send an UpdateState message before we get swapped out. Create the 1029 // Send an UpdateState message before we get swapped out. Create the
1028 // RenderFrameProxy as well so its routing id is registered for receiving 1030 // RenderFrameProxy as well so its routing id is registered for receiving
1029 // IPC messages. 1031 // IPC messages.
1030 render_view_->SyncNavigationState(); 1032 render_view_->SyncNavigationState();
1031 proxy = RenderFrameProxy::CreateProxyToReplaceFrame(this, 1033 proxy = RenderFrameProxy::CreateProxyToReplaceFrame(this,
1032 proxy_routing_id); 1034 proxy_routing_id);
1033 1035
1034 // Synchronously run the unload handler before sending the ACK. 1036 // Synchronously run the unload handler before sending the ACK.
1035 // TODO(creis): Call dispatchUnloadEvent unconditionally here to support 1037 // TODO(creis): Call dispatchUnloadEvent unconditionally here to support
1036 // unload on subframes as well. 1038 // unload on subframes as well.
1037 if (!frame_->parent()) 1039 if (is_main_frame)
1038 frame_->dispatchUnloadEvent(); 1040 frame_->dispatchUnloadEvent();
1039 1041
1040 // Swap out and stop sending any IPC messages that are not ACKs. 1042 // Swap out and stop sending any IPC messages that are not ACKs.
1041 // TODO(nasko): Do we need RenderFrameImpl::is_swapped_out_ anymore? 1043 // TODO(nasko): Do we need RenderFrameImpl::is_swapped_out_ anymore?
1042 if (!frame_->parent()) 1044 if (is_main_frame)
1043 render_view_->SetSwappedOut(true); 1045 render_view_->SetSwappedOut(true);
1044 is_swapped_out_ = true; 1046 is_swapped_out_ = true;
1045 1047
1046 // Now that we're swapped out and filtering IPC messages, stop loading to 1048 // Now that we're swapped out and filtering IPC messages, stop loading to
1047 // ensure that no other in-progress navigation continues. We do this here 1049 // ensure that no other in-progress navigation continues. We do this here
1048 // to avoid sending a DidStopLoading message to the browser process. 1050 // to avoid sending a DidStopLoading message to the browser process.
1049 // TODO(creis): Should we be stopping all frames here and using 1051 // TODO(creis): Should we be stopping all frames here and using
1050 // StopAltErrorPageFetcher with RenderView::OnStop, or just stopping this 1052 // StopAltErrorPageFetcher with RenderView::OnStop, or just stopping this
1051 // frame? 1053 // frame?
1052 if (!frame_->parent()) 1054 OnStop();
1053 render_view_->OnStop();
1054 else
1055 frame_->stopLoading();
1056 1055
1057 // Let subframes know that the frame is now rendered remotely, for the 1056 // Let subframes know that the frame is now rendered remotely, for the
1058 // purposes of compositing and input events. 1057 // purposes of compositing and input events.
1059 if (frame_->parent()) 1058 if (!is_main_frame)
1060 frame_->setIsRemote(true); 1059 frame_->setIsRemote(true);
1061 1060
1062 // Replace the page with a blank dummy URL. The unload handler will not be 1061 // Replace the page with a blank dummy URL. The unload handler will not be
1063 // run a second time, thanks to a check in FrameLoader::stopLoading. 1062 // run a second time, thanks to a check in FrameLoader::stopLoading.
1064 // TODO(creis): Need to add a better way to do this that avoids running the 1063 // TODO(creis): Need to add a better way to do this that avoids running the
1065 // beforeunload handler. For now, we just run it a second time silently. 1064 // beforeunload handler. For now, we just run it a second time silently.
1066 if (!is_site_per_process || frame_->parent() == NULL) 1065 if (!is_site_per_process || is_main_frame)
1067 render_view_->NavigateToSwappedOutURL(frame_); 1066 render_view_->NavigateToSwappedOutURL(frame_);
1068 1067
1069 // Let WebKit know that this view is hidden so it can drop resources and 1068 // Let WebKit know that this view is hidden so it can drop resources and
1070 // stop compositing. 1069 // stop compositing.
1071 // TODO(creis): Support this for subframes as well. 1070 // TODO(creis): Support this for subframes as well.
1072 if (!frame_->parent()) { 1071 if (is_main_frame) {
1073 render_view_->webview()->setVisibilityState( 1072 render_view_->webview()->setVisibilityState(
1074 blink::WebPageVisibilityStateHidden, false); 1073 blink::WebPageVisibilityStateHidden, false);
1075 } 1074 }
1076 } 1075 }
1077 1076
1078 // It is now safe to show modal dialogs again. 1077 // It is now safe to show modal dialogs again.
1079 // TODO(creis): Deal with modal dialogs from subframes. 1078 // TODO(creis): Deal with modal dialogs from subframes.
1080 if (!frame_->parent()) 1079 if (is_main_frame)
1081 render_view_->suppress_dialogs_until_swap_out_ = false; 1080 render_view_->suppress_dialogs_until_swap_out_ = false;
1082 1081
1083 Send(new FrameHostMsg_SwapOut_ACK(routing_id_)); 1082 Send(new FrameHostMsg_SwapOut_ACK(routing_id_));
1084 1083
1085 // Now that all of the cleanup is complete and the browser side is notified, 1084 // Now that all of the cleanup is complete and the browser side is notified,
1086 // start using the RenderFrameProxy, if one is created. 1085 // start using the RenderFrameProxy, if one is created.
1087 if (proxy) { 1086 if (proxy) {
1088 if (frame_->parent()) { 1087 if (!is_main_frame) {
1089 frame_->swap(proxy->web_frame()); 1088 frame_->swap(proxy->web_frame());
1090 if (is_site_per_process) { 1089 if (is_site_per_process) {
1091 // TODO(nasko): delete the frame here, since we've replaced it with a 1090 // TODO(nasko): delete the frame here, since we've replaced it with a
1092 // proxy. 1091 // proxy.
1093 } 1092 }
1094 } else { 1093 } else {
1095 set_render_frame_proxy(proxy); 1094 set_render_frame_proxy(proxy);
1096 } 1095 }
1097 } 1096 }
1098 1097
1099 // Safe to exit if no one else is using the process. 1098 // Safe to exit if no one else is using the process.
1100 if (!frame_->parent()) 1099 if (is_main_frame)
1101 render_view_->WasSwappedOut(); 1100 render_view_->WasSwappedOut();
1102 } 1101 }
1103 1102
1104 void RenderFrameImpl::OnContextMenuClosed( 1103 void RenderFrameImpl::OnContextMenuClosed(
1105 const CustomContextMenuContext& custom_context) { 1104 const CustomContextMenuContext& custom_context) {
1106 if (custom_context.request_id) { 1105 if (custom_context.request_id) {
1107 // External request, should be in our map. 1106 // External request, should be in our map.
1108 ContextMenuClient* client = 1107 ContextMenuClient* client =
1109 pending_context_menus_.Lookup(custom_context.request_id); 1108 pending_context_menus_.Lookup(custom_context.request_id);
1110 if (client) { 1109 if (client) {
(...skipping 2055 matching lines...) Expand 10 before | Expand all | Expand 10 after
3166 void RenderFrameImpl::AddObserver(RenderFrameObserver* observer) { 3165 void RenderFrameImpl::AddObserver(RenderFrameObserver* observer) {
3167 observers_.AddObserver(observer); 3166 observers_.AddObserver(observer);
3168 } 3167 }
3169 3168
3170 void RenderFrameImpl::RemoveObserver(RenderFrameObserver* observer) { 3169 void RenderFrameImpl::RemoveObserver(RenderFrameObserver* observer) {
3171 observer->RenderFrameGone(); 3170 observer->RenderFrameGone();
3172 observers_.RemoveObserver(observer); 3171 observers_.RemoveObserver(observer);
3173 } 3172 }
3174 3173
3175 void RenderFrameImpl::OnStop() { 3174 void RenderFrameImpl::OnStop() {
3175 DCHECK(frame_);
3176 frame_->stopLoading();
3177 if (!frame_->parent())
3178 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers_, OnStop());
3179
3176 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, OnStop()); 3180 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, OnStop());
3177 } 3181 }
3178 3182
3179 void RenderFrameImpl::WasHidden() { 3183 void RenderFrameImpl::WasHidden() {
3180 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasHidden()); 3184 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasHidden());
3181 } 3185 }
3182 3186
3183 void RenderFrameImpl::WasShown() { 3187 void RenderFrameImpl::WasShown() {
3184 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasShown()); 3188 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasShown());
3185 } 3189 }
(...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after
3840 3844
3841 #if defined(ENABLE_BROWSER_CDMS) 3845 #if defined(ENABLE_BROWSER_CDMS)
3842 RendererCdmManager* RenderFrameImpl::GetCdmManager() { 3846 RendererCdmManager* RenderFrameImpl::GetCdmManager() {
3843 if (!cdm_manager_) 3847 if (!cdm_manager_)
3844 cdm_manager_ = new RendererCdmManager(this); 3848 cdm_manager_ = new RendererCdmManager(this);
3845 return cdm_manager_; 3849 return cdm_manager_;
3846 } 3850 }
3847 #endif // defined(ENABLE_BROWSER_CDMS) 3851 #endif // defined(ENABLE_BROWSER_CDMS)
3848 3852
3849 } // namespace content 3853 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | content/renderer/render_frame_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698