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

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

Issue 483773002: PlzNavigate: implement CommitNavigation on the browser side (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Using non-inherited structs 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
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/command_line.h" 8 #include "base/command_line.h"
9 #include "base/containers/hash_tables.h" 9 #include "base/containers/hash_tables.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 1012 matching lines...) Expand 10 before | Expand all | Expand 10 after
1023 title_direction)); 1023 title_direction));
1024 } 1024 }
1025 1025
1026 void RenderFrameHostImpl::OnUpdateEncoding(const std::string& encoding_name) { 1026 void RenderFrameHostImpl::OnUpdateEncoding(const std::string& encoding_name) {
1027 // This message is only sent for top-level frames. TODO(avi): when frame tree 1027 // This message is only sent for top-level frames. TODO(avi): when frame tree
1028 // mirroring works correctly, add a check here to enforce it. 1028 // mirroring works correctly, add a check here to enforce it.
1029 delegate_->UpdateEncoding(this, encoding_name); 1029 delegate_->UpdateEncoding(this, encoding_name);
1030 } 1030 }
1031 1031
1032 void RenderFrameHostImpl::OnBeginNavigation( 1032 void RenderFrameHostImpl::OnBeginNavigation(
1033 const FrameHostMsg_BeginNavigation_Params& params) { 1033 const FrameHostMsg_BeginNavigation_Params& params,
1034 const CoreNavigationParams& core_params) {
1034 CHECK(CommandLine::ForCurrentProcess()->HasSwitch( 1035 CHECK(CommandLine::ForCurrentProcess()->HasSwitch(
1035 switches::kEnableBrowserSideNavigation)); 1036 switches::kEnableBrowserSideNavigation));
1036 frame_tree_node()->render_manager()->OnBeginNavigation(params); 1037 frame_tree_node()->render_manager()->OnBeginNavigation(params, core_params);
1037 } 1038 }
1038 1039
1039 void RenderFrameHostImpl::OnAccessibilityEvents( 1040 void RenderFrameHostImpl::OnAccessibilityEvents(
1040 const std::vector<AccessibilityHostMsg_EventParams>& params) { 1041 const std::vector<AccessibilityHostMsg_EventParams>& params) {
1041 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( 1042 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
1042 render_view_host_->GetView()); 1043 render_view_host_->GetView());
1043 1044
1044 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); 1045 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode();
1045 if ((accessibility_mode != AccessibilityModeOff) && view && 1046 if ((accessibility_mode != AccessibilityModeOff) && view &&
1046 RenderViewHostImpl::IsRVHStateActive(render_view_host_->rvh_state())) { 1047 RenderViewHostImpl::IsRVHStateActive(render_view_host_->rvh_state())) {
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
1166 // Give the client a chance to disallow URLs from committing. 1167 // Give the client a chance to disallow URLs from committing.
1167 return GetContentClient()->browser()->CanCommitURL(GetProcess(), url); 1168 return GetContentClient()->browser()->CanCommitURL(GetProcess(), url);
1168 } 1169 }
1169 1170
1170 void RenderFrameHostImpl::Navigate(const FrameMsg_Navigate_Params& params) { 1171 void RenderFrameHostImpl::Navigate(const FrameMsg_Navigate_Params& params) {
1171 TRACE_EVENT0("navigation", "RenderFrameHostImpl::Navigate"); 1172 TRACE_EVENT0("navigation", "RenderFrameHostImpl::Navigate");
1172 // Browser plugin guests are not allowed to navigate outside web-safe schemes, 1173 // Browser plugin guests are not allowed to navigate outside web-safe schemes,
1173 // so do not grant them the ability to request additional URLs. 1174 // so do not grant them the ability to request additional URLs.
1174 if (!GetProcess()->IsIsolatedGuest()) { 1175 if (!GetProcess()->IsIsolatedGuest()) {
1175 ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL( 1176 ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL(
1176 GetProcess()->GetID(), params.url); 1177 GetProcess()->GetID(), params.core_params.url);
1177 if (params.url.SchemeIs(url::kDataScheme) && 1178 if (params.core_params.url.SchemeIs(url::kDataScheme) &&
1178 params.base_url_for_data_url.SchemeIs(url::kFileScheme)) { 1179 params.base_url_for_data_url.SchemeIs(url::kFileScheme)) {
1179 // If 'data:' is used, and we have a 'file:' base url, grant access to 1180 // If 'data:' is used, and we have a 'file:' base url, grant access to
1180 // local files. 1181 // local files.
1181 ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL( 1182 ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL(
1182 GetProcess()->GetID(), params.base_url_for_data_url); 1183 GetProcess()->GetID(), params.base_url_for_data_url);
1183 } 1184 }
1184 } 1185 }
1185 1186
1186 // Only send the message if we aren't suspended at the start of a cross-site 1187 // Only send the message if we aren't suspended at the start of a cross-site
1187 // request. 1188 // request.
(...skipping 16 matching lines...) Expand all
1204 // loading" message will be received asynchronously from the UI of the 1205 // loading" message will be received asynchronously from the UI of the
1205 // browser. But we want to keep the throbber in sync with what's happening 1206 // browser. But we want to keep the throbber in sync with what's happening
1206 // in the UI. For example, we want to start throbbing immediately when the 1207 // in the UI. For example, we want to start throbbing immediately when the
1207 // user naivgates even if the renderer is delayed. There is also an issue 1208 // user naivgates even if the renderer is delayed. There is also an issue
1208 // with the throbber starting because the WebUI (which controls whether the 1209 // with the throbber starting because the WebUI (which controls whether the
1209 // favicon is displayed) happens synchronously. If the start loading 1210 // favicon is displayed) happens synchronously. If the start loading
1210 // messages was asynchronous, then the default favicon would flash in. 1211 // messages was asynchronous, then the default favicon would flash in.
1211 // 1212 //
1212 // Blink doesn't send throb notifications for JavaScript URLs, so we 1213 // Blink doesn't send throb notifications for JavaScript URLs, so we
1213 // don't want to either. 1214 // don't want to either.
1214 if (!params.url.SchemeIs(url::kJavaScriptScheme)) 1215 if (!params.core_params.url.SchemeIs(url::kJavaScriptScheme))
1215 delegate_->DidStartLoading(this, true); 1216 delegate_->DidStartLoading(this, true);
1216 } 1217 }
1217 1218
1218 void RenderFrameHostImpl::NavigateToURL(const GURL& url) { 1219 void RenderFrameHostImpl::NavigateToURL(const GURL& url) {
1219 FrameMsg_Navigate_Params params; 1220 FrameMsg_Navigate_Params params;
1220 params.page_id = -1; 1221 params.commit_params.page_id = -1;
1221 params.pending_history_list_offset = -1; 1222 params.commit_params.pending_history_list_offset = -1;
1222 params.current_history_list_offset = -1; 1223 params.commit_params.current_history_list_offset = -1;
1223 params.current_history_list_length = 0; 1224 params.commit_params.current_history_list_length = 0;
1224 params.url = url; 1225 params.core_params.url = url;
nasko 2014/09/22 23:13:03 nit: I'd put the core params before the commit one
clamy 2014/09/23 21:13:25 Done.
1225 params.transition = PAGE_TRANSITION_LINK; 1226 params.core_params.transition = PAGE_TRANSITION_LINK;
1226 params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1227 params.core_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
1227 params.browser_navigation_start = base::TimeTicks::Now(); 1228 params.commit_params.browser_navigation_start = base::TimeTicks::Now();
nasko 2014/09/22 23:13:03 nit: move this up to the group of commit_* members
clamy 2014/09/23 21:13:25 Moved it above the history parameters as history p
1228 Navigate(params); 1229 Navigate(params);
1229 } 1230 }
1230 1231
1231 void RenderFrameHostImpl::Stop() { 1232 void RenderFrameHostImpl::Stop() {
1232 Send(new FrameMsg_Stop(routing_id_)); 1233 Send(new FrameMsg_Stop(routing_id_));
1233 } 1234 }
1234 1235
1235 void RenderFrameHostImpl::DispatchBeforeUnload(bool for_cross_site_transition) { 1236 void RenderFrameHostImpl::DispatchBeforeUnload(bool for_cross_site_transition) {
1236 TRACE_EVENT_ASYNC_BEGIN0( 1237 TRACE_EVENT_ASYNC_BEGIN0(
1237 "navigation", "RenderFrameHostImpl::BeforeUnload", this); 1238 "navigation", "RenderFrameHostImpl::BeforeUnload", this);
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
1317 render_view_host_->delegate_->RendererUnresponsive( 1318 render_view_host_->delegate_->RendererUnresponsive(
1318 render_view_host_, 1319 render_view_host_,
1319 render_view_host_->is_waiting_for_beforeunload_ack(), 1320 render_view_host_->is_waiting_for_beforeunload_ack(),
1320 render_view_host_->IsWaitingForUnloadACK()); 1321 render_view_host_->IsWaitingForUnloadACK());
1321 } 1322 }
1322 1323
1323 void RenderFrameHostImpl::NotificationClosed(int notification_id) { 1324 void RenderFrameHostImpl::NotificationClosed(int notification_id) {
1324 cancel_notification_callbacks_.erase(notification_id); 1325 cancel_notification_callbacks_.erase(notification_id);
1325 } 1326 }
1326 1327
1328 // PlzNavigate
1329 void RenderFrameHostImpl::CommitNavigation(
1330 const GURL& stream_url,
1331 const CoreNavigationParams& core_params,
1332 const CommitNavigationParams& commit_params) {
1333 // TODO(clamy): Check if we have to add security checks for the browser plugin
1334 // guests.
1335
1336 DCHECK(render_view_host_->rvh_state() == RenderViewHostImpl::STATE_DEFAULT);
1337 // Get back to a clean state, in case we start a new navigation without
1338 // completing a RVH swap or unload handler.
1339 render_view_host_->SetState(RenderViewHostImpl::STATE_DEFAULT);
Charlie Reis 2014/09/19 23:12:31 As mentioned, please either remove this or add a T
clamy 2014/09/23 21:13:25 Done.
1340 Send(new FrameMsg_CommitNavigation(
1341 routing_id_, stream_url, core_params, commit_params));
1342 // TODO(clamy): Check if we should start the throbber for non javascript urls
1343 // here.
1344 }
1345
1327 void RenderFrameHostImpl::PlatformNotificationPermissionRequestDone( 1346 void RenderFrameHostImpl::PlatformNotificationPermissionRequestDone(
1328 int request_id, blink::WebNotificationPermission permission) { 1347 int request_id, blink::WebNotificationPermission permission) {
1329 Send(new PlatformNotificationMsg_PermissionRequestComplete( 1348 Send(new PlatformNotificationMsg_PermissionRequestComplete(
1330 routing_id_, request_id, permission)); 1349 routing_id_, request_id, permission));
1331 } 1350 }
1332 1351
1333 void RenderFrameHostImpl::UpdateCrossProcessIframeAccessibility( 1352 void RenderFrameHostImpl::UpdateCrossProcessIframeAccessibility(
1334 const std::map<int32, int> node_to_frame_routing_id_map) { 1353 const std::map<int32, int> node_to_frame_routing_id_map) {
1335 std::map<int32, int>::const_iterator iter; 1354 std::map<int32, int>::const_iterator iter;
1336 for (iter = node_to_frame_routing_id_map.begin(); 1355 for (iter = node_to_frame_routing_id_map.begin();
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
1456 "RenderFrameHostImpl navigation suspended", this); 1475 "RenderFrameHostImpl navigation suspended", this);
1457 } 1476 }
1458 1477
1459 if (!suspend && suspended_nav_params_) { 1478 if (!suspend && suspended_nav_params_) {
1460 // There's navigation message params waiting to be sent. Now that we're not 1479 // There's navigation message params waiting to be sent. Now that we're not
1461 // suspended anymore, resume navigation by sending them. If we were swapped 1480 // suspended anymore, resume navigation by sending them. If we were swapped
1462 // out, we should also stop filtering out the IPC messages now. 1481 // out, we should also stop filtering out the IPC messages now.
1463 render_view_host_->SetState(RenderViewHostImpl::STATE_DEFAULT); 1482 render_view_host_->SetState(RenderViewHostImpl::STATE_DEFAULT);
1464 1483
1465 DCHECK(!proceed_time.is_null()); 1484 DCHECK(!proceed_time.is_null());
1466 suspended_nav_params_->browser_navigation_start = proceed_time; 1485 suspended_nav_params_->commit_params.browser_navigation_start =
1486 proceed_time;
1467 Send(new FrameMsg_Navigate(routing_id_, *suspended_nav_params_)); 1487 Send(new FrameMsg_Navigate(routing_id_, *suspended_nav_params_));
1468 suspended_nav_params_.reset(); 1488 suspended_nav_params_.reset();
1469 } 1489 }
1470 } 1490 }
1471 1491
1472 void RenderFrameHostImpl::CancelSuspendedNavigations() { 1492 void RenderFrameHostImpl::CancelSuspendedNavigations() {
1473 // Clear any state if a pending navigation is canceled or preempted. 1493 // Clear any state if a pending navigation is canceled or preempted.
1474 if (suspended_nav_params_) 1494 if (suspended_nav_params_)
1475 suspended_nav_params_.reset(); 1495 suspended_nav_params_.reset();
1476 1496
1477 TRACE_EVENT_ASYNC_END0("navigation", 1497 TRACE_EVENT_ASYNC_END0("navigation",
1478 "RenderFrameHostImpl navigation suspended", this); 1498 "RenderFrameHostImpl navigation suspended", this);
1479 navigations_suspended_ = false; 1499 navigations_suspended_ = false;
1480 } 1500 }
1481 1501
1482 } // namespace content 1502 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698