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

Side by Side Diff: content/browser/frame_host/render_frame_host_impl.cc

Issue 462083003: Revert of [site isolation] cross-site transfers should track the RenderFrameHost, not the View (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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
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/browser/frame_host/render_frame_host_impl.h" 5 #include "content/browser/frame_host/render_frame_host_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/containers/hash_tables.h" 8 #include "base/containers/hash_tables.h"
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/metrics/user_metrics_action.h" 10 #include "base/metrics/user_metrics_action.h"
11 #include "base/time/time.h" 11 #include "base/time/time.h"
12 #include "content/browser/accessibility/accessibility_mode_helper.h" 12 #include "content/browser/accessibility/accessibility_mode_helper.h"
13 #include "content/browser/accessibility/browser_accessibility_manager.h" 13 #include "content/browser/accessibility/browser_accessibility_manager.h"
14 #include "content/browser/accessibility/browser_accessibility_state_impl.h" 14 #include "content/browser/accessibility/browser_accessibility_state_impl.h"
15 #include "content/browser/child_process_security_policy_impl.h" 15 #include "content/browser/child_process_security_policy_impl.h"
16 #include "content/browser/cross_site_request_manager.h"
17 #include "content/browser/frame_host/cross_process_frame_connector.h" 16 #include "content/browser/frame_host/cross_process_frame_connector.h"
18 #include "content/browser/frame_host/cross_site_transferring_request.h" 17 #include "content/browser/frame_host/cross_site_transferring_request.h"
19 #include "content/browser/frame_host/frame_tree.h" 18 #include "content/browser/frame_host/frame_tree.h"
20 #include "content/browser/frame_host/frame_tree_node.h" 19 #include "content/browser/frame_host/frame_tree_node.h"
21 #include "content/browser/frame_host/navigator.h" 20 #include "content/browser/frame_host/navigator.h"
22 #include "content/browser/frame_host/render_frame_host_delegate.h" 21 #include "content/browser/frame_host/render_frame_host_delegate.h"
23 #include "content/browser/frame_host/render_frame_proxy_host.h" 22 #include "content/browser/frame_host/render_frame_proxy_host.h"
24 #include "content/browser/renderer_host/input/input_router.h" 23 #include "content/browser/renderer_host/input/input_router.h"
25 #include "content/browser/renderer_host/input/timeout_monitor.h" 24 #include "content/browser/renderer_host/input/timeout_monitor.h"
26 #include "content/browser/renderer_host/render_process_host_impl.h" 25 #include "content/browser/renderer_host/render_process_host_impl.h"
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 bool is_swapped_out) 159 bool is_swapped_out)
161 : render_view_host_(render_view_host), 160 : render_view_host_(render_view_host),
162 delegate_(delegate), 161 delegate_(delegate),
163 cross_process_frame_connector_(NULL), 162 cross_process_frame_connector_(NULL),
164 render_frame_proxy_host_(NULL), 163 render_frame_proxy_host_(NULL),
165 frame_tree_(frame_tree), 164 frame_tree_(frame_tree),
166 frame_tree_node_(frame_tree_node), 165 frame_tree_node_(frame_tree_node),
167 routing_id_(routing_id), 166 routing_id_(routing_id),
168 is_swapped_out_(is_swapped_out), 167 is_swapped_out_(is_swapped_out),
169 renderer_initialized_(false), 168 renderer_initialized_(false),
170 navigations_suspended_(false),
171 weak_ptr_factory_(this) { 169 weak_ptr_factory_(this) {
172 frame_tree_->RegisterRenderFrameHost(this); 170 frame_tree_->RegisterRenderFrameHost(this);
173 GetProcess()->AddRoute(routing_id_, this); 171 GetProcess()->AddRoute(routing_id_, this);
174 g_routing_id_frame_map.Get().insert(std::make_pair( 172 g_routing_id_frame_map.Get().insert(std::make_pair(
175 RenderFrameHostID(GetProcess()->GetID(), routing_id_), 173 RenderFrameHostID(GetProcess()->GetID(), routing_id_),
176 this)); 174 this));
177 175
178 if (GetProcess()->GetServiceRegistry()) { 176 if (GetProcess()->GetServiceRegistry()) {
179 RenderFrameSetupPtr setup; 177 RenderFrameSetupPtr setup;
180 GetProcess()->GetServiceRegistry()->ConnectToRemoteService(&setup); 178 GetProcess()->GetServiceRegistry()->ConnectToRemoteService(&setup);
181 mojo::ServiceProviderPtr service_provider; 179 mojo::ServiceProviderPtr service_provider;
182 setup->GetServiceProviderForFrame(routing_id_, 180 setup->GetServiceProviderForFrame(routing_id_,
183 mojo::Get(&service_provider)); 181 mojo::Get(&service_provider));
184 service_registry_.BindRemoteServiceProvider( 182 service_registry_.BindRemoteServiceProvider(
185 service_provider.PassMessagePipe()); 183 service_provider.PassMessagePipe());
186 } 184 }
187 } 185 }
188 186
189 RenderFrameHostImpl::~RenderFrameHostImpl() { 187 RenderFrameHostImpl::~RenderFrameHostImpl() {
190 GetProcess()->RemoveRoute(routing_id_); 188 GetProcess()->RemoveRoute(routing_id_);
191 g_routing_id_frame_map.Get().erase( 189 g_routing_id_frame_map.Get().erase(
192 RenderFrameHostID(GetProcess()->GetID(), routing_id_)); 190 RenderFrameHostID(GetProcess()->GetID(), routing_id_));
193 // Clean up any leftover state from cross-site requests.
194 CrossSiteRequestManager::GetInstance()->SetHasPendingCrossSiteRequest(
195 GetProcess()->GetID(), routing_id_, false);
196
197 if (delegate_) 191 if (delegate_)
198 delegate_->RenderFrameDeleted(this); 192 delegate_->RenderFrameDeleted(this);
199 193
200 // Notify the FrameTree that this RFH is going away, allowing it to shut down 194 // Notify the FrameTree that this RFH is going away, allowing it to shut down
201 // the corresponding RenderViewHost if it is no longer needed. 195 // the corresponding RenderViewHost if it is no longer needed.
202 frame_tree_->UnregisterRenderFrameHost(this); 196 frame_tree_->UnregisterRenderFrameHost(this);
203 } 197 }
204 198
205 int RenderFrameHostImpl::GetRoutingID() { 199 int RenderFrameHostImpl::GetRoutingID() {
206 return routing_id_; 200 return routing_id_;
(...skipping 803 matching lines...) Expand 10 before | Expand all | Expand 10 after
1010 params.base_url_for_data_url.SchemeIs(url::kFileScheme)) { 1004 params.base_url_for_data_url.SchemeIs(url::kFileScheme)) {
1011 // If 'data:' is used, and we have a 'file:' base url, grant access to 1005 // If 'data:' is used, and we have a 'file:' base url, grant access to
1012 // local files. 1006 // local files.
1013 ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL( 1007 ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL(
1014 GetProcess()->GetID(), params.base_url_for_data_url); 1008 GetProcess()->GetID(), params.base_url_for_data_url);
1015 } 1009 }
1016 } 1010 }
1017 1011
1018 // Only send the message if we aren't suspended at the start of a cross-site 1012 // Only send the message if we aren't suspended at the start of a cross-site
1019 // request. 1013 // request.
1020 if (navigations_suspended_) { 1014 if (render_view_host_->navigations_suspended_) {
1021 // Shouldn't be possible to have a second navigation while suspended, since 1015 // Shouldn't be possible to have a second navigation while suspended, since
1022 // navigations will only be suspended during a cross-site request. If a 1016 // navigations will only be suspended during a cross-site request. If a
1023 // second navigation occurs, RenderFrameHostManager will cancel this pending 1017 // second navigation occurs, RenderFrameHostManager will cancel this pending
1024 // RFH and create a new pending RFH. 1018 // RFH and create a new pending RFH.
1025 DCHECK(!suspended_nav_params_.get()); 1019 DCHECK(!render_view_host_->suspended_nav_params_.get());
1026 suspended_nav_params_.reset(new FrameMsg_Navigate_Params(params)); 1020 render_view_host_->suspended_nav_params_.reset(
1021 new FrameMsg_Navigate_Params(params));
1027 } else { 1022 } else {
1028 // Get back to a clean state, in case we start a new navigation without 1023 // Get back to a clean state, in case we start a new navigation without
1029 // completing a RVH swap or unload handler. 1024 // completing a RVH swap or unload handler.
1030 render_view_host_->SetState(RenderViewHostImpl::STATE_DEFAULT); 1025 render_view_host_->SetState(RenderViewHostImpl::STATE_DEFAULT);
1031 1026
1032 Send(new FrameMsg_Navigate(routing_id_, params)); 1027 Send(new FrameMsg_Navigate(routing_id_, params));
1033 } 1028 }
1034 1029
1035 // Force the throbber to start. We do this because Blink's "started 1030 // Force the throbber to start. We do this because Blink's "started
1036 // loading" message will be received asynchronously from the UI of the 1031 // loading" message will be received asynchronously from the UI of the
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1139 render_view_host_->delegate_->RendererUnresponsive( 1134 render_view_host_->delegate_->RendererUnresponsive(
1140 render_view_host_, 1135 render_view_host_,
1141 render_view_host_->is_waiting_for_beforeunload_ack(), 1136 render_view_host_->is_waiting_for_beforeunload_ack(),
1142 render_view_host_->IsWaitingForUnloadACK()); 1137 render_view_host_->IsWaitingForUnloadACK());
1143 } 1138 }
1144 1139
1145 void RenderFrameHostImpl::NotificationClosed(int notification_id) { 1140 void RenderFrameHostImpl::NotificationClosed(int notification_id) {
1146 cancel_notification_callbacks_.erase(notification_id); 1141 cancel_notification_callbacks_.erase(notification_id);
1147 } 1142 }
1148 1143
1149 bool RenderFrameHostImpl::HasPendingCrossSiteRequest() {
1150 return CrossSiteRequestManager::GetInstance()->HasPendingCrossSiteRequest(
1151 GetProcess()->GetID(), routing_id_);
1152 }
1153
1154 void RenderFrameHostImpl::SetHasPendingCrossSiteRequest(
1155 bool has_pending_request) {
1156 CrossSiteRequestManager::GetInstance()->SetHasPendingCrossSiteRequest(
1157 GetProcess()->GetID(), routing_id_, has_pending_request);
1158 }
1159
1160 void RenderFrameHostImpl::PlatformNotificationPermissionRequestDone( 1144 void RenderFrameHostImpl::PlatformNotificationPermissionRequestDone(
1161 int request_id, blink::WebNotificationPermission permission) { 1145 int request_id, blink::WebNotificationPermission permission) {
1162 Send(new PlatformNotificationMsg_PermissionRequestComplete( 1146 Send(new PlatformNotificationMsg_PermissionRequestComplete(
1163 routing_id_, request_id, permission)); 1147 routing_id_, request_id, permission));
1164 } 1148 }
1165 1149
1166 void RenderFrameHostImpl::SetAccessibilityMode(AccessibilityMode mode) { 1150 void RenderFrameHostImpl::SetAccessibilityMode(AccessibilityMode mode) {
1167 Send(new FrameMsg_SetAccessibilityMode(routing_id_, mode)); 1151 Send(new FrameMsg_SetAccessibilityMode(routing_id_, mode));
1168 } 1152 }
1169 1153
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1207 BrowserThread::PostTask( 1191 BrowserThread::PostTask(
1208 BrowserThread::IO, 1192 BrowserThread::IO,
1209 FROM_HERE, 1193 FROM_HERE,
1210 base::Bind( 1194 base::Bind(
1211 &TransitionRequestManager::ClearPendingTransitionRequestData, 1195 &TransitionRequestManager::ClearPendingTransitionRequestData,
1212 base::Unretained(TransitionRequestManager::GetInstance()), 1196 base::Unretained(TransitionRequestManager::GetInstance()),
1213 GetProcess()->GetID(), 1197 GetProcess()->GetID(),
1214 routing_id_)); 1198 routing_id_));
1215 } 1199 }
1216 1200
1217 void RenderFrameHostImpl::SetNavigationsSuspended(
1218 bool suspend,
1219 const base::TimeTicks& proceed_time) {
1220 // This should only be called to toggle the state.
1221 DCHECK(navigations_suspended_ != suspend);
1222
1223 navigations_suspended_ = suspend;
1224 if (!suspend && suspended_nav_params_) {
1225 // There's navigation message params waiting to be sent. Now that we're not
1226 // suspended anymore, resume navigation by sending them. If we were swapped
1227 // out, we should also stop filtering out the IPC messages now.
1228 render_view_host_->SetState(RenderViewHostImpl::STATE_DEFAULT);
1229
1230 DCHECK(!proceed_time.is_null());
1231 suspended_nav_params_->browser_navigation_start = proceed_time;
1232 Send(new FrameMsg_Navigate(routing_id_, *suspended_nav_params_));
1233 suspended_nav_params_.reset();
1234 }
1235 }
1236
1237 void RenderFrameHostImpl::CancelSuspendedNavigations() {
1238 // Clear any state if a pending navigation is canceled or preempted.
1239 if (suspended_nav_params_)
1240 suspended_nav_params_.reset();
1241 navigations_suspended_ = false;
1242 }
1243
1244 } // namespace content 1201 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.h ('k') | content/browser/frame_host/render_frame_host_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698