| OLD | NEW |
| 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/browser/frame_host/render_frame_host_impl.h" | 5 #include "content/browser/frame_host/render_frame_host_impl.h" |
| 6 | 6 |
| 7 #include "base/containers/hash_tables.h" | 7 #include "base/containers/hash_tables.h" |
| 8 #include "base/lazy_instance.h" | 8 #include "base/lazy_instance.h" |
| 9 #include "content/browser/frame_host/cross_process_frame_connector.h" | 9 #include "content/browser/frame_host/cross_process_frame_connector.h" |
| 10 #include "content/browser/frame_host/frame_tree.h" | 10 #include "content/browser/frame_host/frame_tree.h" |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 return routing_id_; | 90 return routing_id_; |
| 91 } | 91 } |
| 92 | 92 |
| 93 gfx::NativeView RenderFrameHostImpl::GetNativeView() { | 93 gfx::NativeView RenderFrameHostImpl::GetNativeView() { |
| 94 RenderWidgetHostView* view = render_view_host_->GetView(); | 94 RenderWidgetHostView* view = render_view_host_->GetView(); |
| 95 if (!view) | 95 if (!view) |
| 96 return NULL; | 96 return NULL; |
| 97 return view->GetNativeView(); | 97 return view->GetNativeView(); |
| 98 } | 98 } |
| 99 | 99 |
| 100 void RenderFrameHostImpl::NotifyContextMenuClosed( |
| 101 const CustomContextMenuContext& context) { |
| 102 Send(new FrameMsg_ContextMenuClosed(routing_id_, context)); |
| 103 } |
| 104 |
| 105 void RenderFrameHostImpl::ExecuteCustomContextMenuCommand( |
| 106 int action, const CustomContextMenuContext& context) { |
| 107 Send(new FrameMsg_CustomContextMenuAction(routing_id_, context, action)); |
| 108 } |
| 109 |
| 100 RenderViewHost* RenderFrameHostImpl::GetRenderViewHost() { | 110 RenderViewHost* RenderFrameHostImpl::GetRenderViewHost() { |
| 101 return render_view_host_; | 111 return render_view_host_; |
| 102 } | 112 } |
| 103 | 113 |
| 104 bool RenderFrameHostImpl::Send(IPC::Message* message) { | 114 bool RenderFrameHostImpl::Send(IPC::Message* message) { |
| 105 return GetProcess()->Send(message); | 115 return GetProcess()->Send(message); |
| 106 } | 116 } |
| 107 | 117 |
| 108 bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) { | 118 bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) { |
| 109 if (delegate_->OnMessageReceived(this, msg)) | 119 if (delegate_->OnMessageReceived(this, msg)) |
| 110 return true; | 120 return true; |
| 111 | 121 |
| 112 if (cross_process_frame_connector_ && | 122 if (cross_process_frame_connector_ && |
| 113 cross_process_frame_connector_->OnMessageReceived(msg)) | 123 cross_process_frame_connector_->OnMessageReceived(msg)) |
| 114 return true; | 124 return true; |
| 115 | 125 |
| 116 bool handled = true; | 126 bool handled = true; |
| 117 bool msg_is_ok = true; | 127 bool msg_is_ok = true; |
| 118 IPC_BEGIN_MESSAGE_MAP_EX(RenderFrameHostImpl, msg, msg_is_ok) | 128 IPC_BEGIN_MESSAGE_MAP_EX(RenderFrameHostImpl, msg, msg_is_ok) |
| 119 IPC_MESSAGE_HANDLER(FrameHostMsg_Detach, OnDetach) | 129 IPC_MESSAGE_HANDLER(FrameHostMsg_Detach, OnDetach) |
| 120 IPC_MESSAGE_HANDLER(FrameHostMsg_DidStartProvisionalLoadForFrame, | 130 IPC_MESSAGE_HANDLER(FrameHostMsg_DidStartProvisionalLoadForFrame, |
| 121 OnDidStartProvisionalLoadForFrame) | 131 OnDidStartProvisionalLoadForFrame) |
| 122 IPC_MESSAGE_HANDLER(FrameHostMsg_DidFailProvisionalLoadWithError, | 132 IPC_MESSAGE_HANDLER(FrameHostMsg_DidFailProvisionalLoadWithError, |
| 123 OnDidFailProvisionalLoadWithError) | 133 OnDidFailProvisionalLoadWithError) |
| 124 IPC_MESSAGE_HANDLER(FrameHostMsg_DidRedirectProvisionalLoad, | 134 IPC_MESSAGE_HANDLER(FrameHostMsg_DidRedirectProvisionalLoad, |
| 125 OnDidRedirectProvisionalLoad) | 135 OnDidRedirectProvisionalLoad) |
| 126 IPC_MESSAGE_HANDLER(FrameHostMsg_SwapOut_ACK, OnSwapOutACK) | 136 IPC_MESSAGE_HANDLER(FrameHostMsg_SwapOut_ACK, OnSwapOutACK) |
| 137 IPC_MESSAGE_HANDLER(FrameHostMsg_ContextMenu, OnContextMenu) |
| 127 IPC_END_MESSAGE_MAP_EX() | 138 IPC_END_MESSAGE_MAP_EX() |
| 128 | 139 |
| 129 if (!msg_is_ok) { | 140 if (!msg_is_ok) { |
| 130 // The message had a handler, but its de-serialization failed. | 141 // The message had a handler, but its de-serialization failed. |
| 131 // Kill the renderer. | 142 // Kill the renderer. |
| 132 RecordAction(base::UserMetricsAction("BadMessageTerminate_RFH")); | 143 RecordAction(base::UserMetricsAction("BadMessageTerminate_RFH")); |
| 133 GetProcess()->ReceivedBadMessage(); | 144 GetProcess()->ReceivedBadMessage(); |
| 134 } | 145 } |
| 135 | 146 |
| 136 return handled; | 147 return handled; |
| 137 } | 148 } |
| 138 | 149 |
| 139 void RenderFrameHostImpl::Init() { | 150 void RenderFrameHostImpl::Init() { |
| 140 GetProcess()->ResumeRequestsForView(routing_id()); | 151 GetProcess()->ResumeRequestsForView(routing_id_); |
| 141 } | 152 } |
| 142 | 153 |
| 143 void RenderFrameHostImpl::OnCreateChildFrame(int new_frame_routing_id, | 154 void RenderFrameHostImpl::OnCreateChildFrame(int new_frame_routing_id, |
| 144 int64 parent_frame_id, | 155 int64 parent_frame_id, |
| 145 int64 frame_id, | 156 int64 frame_id, |
| 146 const std::string& frame_name) { | 157 const std::string& frame_name) { |
| 147 RenderFrameHostImpl* new_frame = frame_tree_->AddFrame( | 158 RenderFrameHostImpl* new_frame = frame_tree_->AddFrame( |
| 148 new_frame_routing_id, parent_frame_id, frame_id, frame_name); | 159 new_frame_routing_id, parent_frame_id, frame_id, frame_name); |
| 149 if (delegate_) | 160 if (delegate_) |
| 150 delegate_->RenderFrameCreated(new_frame); | 161 delegate_->RenderFrameCreated(new_frame); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 171 void RenderFrameHostImpl::OnDidRedirectProvisionalLoad( | 182 void RenderFrameHostImpl::OnDidRedirectProvisionalLoad( |
| 172 int32 page_id, | 183 int32 page_id, |
| 173 const GURL& source_url, | 184 const GURL& source_url, |
| 174 const GURL& target_url) { | 185 const GURL& target_url) { |
| 175 frame_tree_node_->navigator()->DidRedirectProvisionalLoad( | 186 frame_tree_node_->navigator()->DidRedirectProvisionalLoad( |
| 176 this, page_id, source_url, target_url); | 187 this, page_id, source_url, target_url); |
| 177 } | 188 } |
| 178 | 189 |
| 179 void RenderFrameHostImpl::SwapOut() { | 190 void RenderFrameHostImpl::SwapOut() { |
| 180 if (render_view_host_->IsRenderViewLive()) { | 191 if (render_view_host_->IsRenderViewLive()) { |
| 181 Send(new FrameMsg_SwapOut(routing_id())); | 192 Send(new FrameMsg_SwapOut(routing_id_)); |
| 182 } else { | 193 } else { |
| 183 // Our RenderViewHost doesn't have a live renderer, so just skip the unload | 194 // Our RenderViewHost doesn't have a live renderer, so just skip the unload |
| 184 // event. | 195 // event. |
| 185 OnSwappedOut(true); | 196 OnSwappedOut(true); |
| 186 } | 197 } |
| 187 } | 198 } |
| 188 | 199 |
| 189 void RenderFrameHostImpl::OnSwapOutACK() { | 200 void RenderFrameHostImpl::OnSwapOutACK() { |
| 190 OnSwappedOut(false); | 201 OnSwappedOut(false); |
| 191 } | 202 } |
| 192 | 203 |
| 193 void RenderFrameHostImpl::OnSwappedOut(bool timed_out) { | 204 void RenderFrameHostImpl::OnSwappedOut(bool timed_out) { |
| 194 frame_tree_node_->render_manager()->SwappedOutFrame(this); | 205 frame_tree_node_->render_manager()->SwappedOutFrame(this); |
| 195 } | 206 } |
| 196 | 207 |
| 208 void RenderFrameHostImpl::OnContextMenu(const ContextMenuParams& params) { |
| 209 // Validate the URLs in |params|. If the renderer can't request the URLs |
| 210 // directly, don't show them in the context menu. |
| 211 ContextMenuParams validated_params(params); |
| 212 RenderProcessHost* process = GetProcess(); |
| 213 |
| 214 // We don't validate |unfiltered_link_url| so that this field can be used |
| 215 // when users want to copy the original link URL. |
| 216 process->FilterURL(true, &validated_params.link_url); |
| 217 process->FilterURL(true, &validated_params.src_url); |
| 218 process->FilterURL(false, &validated_params.page_url); |
| 219 process->FilterURL(true, &validated_params.frame_url); |
| 220 |
| 221 delegate_->ShowContextMenu(this, validated_params); |
| 222 } |
| 223 |
| 197 } // namespace content | 224 } // namespace content |
| OLD | NEW |