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

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

Powered by Google App Engine
This is Rietveld 408576698