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/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 1003 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1014 title_direction)); | 1014 title_direction)); |
1015 } | 1015 } |
1016 | 1016 |
1017 void RenderFrameHostImpl::OnUpdateEncoding(const std::string& encoding_name) { | 1017 void RenderFrameHostImpl::OnUpdateEncoding(const std::string& encoding_name) { |
1018 // This message is only sent for top-level frames. TODO(avi): when frame tree | 1018 // This message is only sent for top-level frames. TODO(avi): when frame tree |
1019 // mirroring works correctly, add a check here to enforce it. | 1019 // mirroring works correctly, add a check here to enforce it. |
1020 delegate_->UpdateEncoding(this, encoding_name); | 1020 delegate_->UpdateEncoding(this, encoding_name); |
1021 } | 1021 } |
1022 | 1022 |
1023 void RenderFrameHostImpl::OnBeginNavigation( | 1023 void RenderFrameHostImpl::OnBeginNavigation( |
1024 const FrameHostMsg_BeginNavigation_Params& params) { | 1024 const FrameHostMsg_BeginNavigation_Params& params, |
| 1025 const CommonNavigationParams& common_params) { |
1025 CHECK(CommandLine::ForCurrentProcess()->HasSwitch( | 1026 CHECK(CommandLine::ForCurrentProcess()->HasSwitch( |
1026 switches::kEnableBrowserSideNavigation)); | 1027 switches::kEnableBrowserSideNavigation)); |
1027 frame_tree_node()->render_manager()->OnBeginNavigation(params); | 1028 frame_tree_node()->render_manager()->OnBeginNavigation(params, common_params); |
1028 } | 1029 } |
1029 | 1030 |
1030 void RenderFrameHostImpl::OnAccessibilityEvents( | 1031 void RenderFrameHostImpl::OnAccessibilityEvents( |
1031 const std::vector<AccessibilityHostMsg_EventParams>& params) { | 1032 const std::vector<AccessibilityHostMsg_EventParams>& params) { |
1032 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( | 1033 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( |
1033 render_view_host_->GetView()); | 1034 render_view_host_->GetView()); |
1034 | 1035 |
1035 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 1036 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); |
1036 if ((accessibility_mode != AccessibilityModeOff) && view && | 1037 if ((accessibility_mode != AccessibilityModeOff) && view && |
1037 RenderViewHostImpl::IsRVHStateActive(render_view_host_->rvh_state())) { | 1038 RenderViewHostImpl::IsRVHStateActive(render_view_host_->rvh_state())) { |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1157 // Give the client a chance to disallow URLs from committing. | 1158 // Give the client a chance to disallow URLs from committing. |
1158 return GetContentClient()->browser()->CanCommitURL(GetProcess(), url); | 1159 return GetContentClient()->browser()->CanCommitURL(GetProcess(), url); |
1159 } | 1160 } |
1160 | 1161 |
1161 void RenderFrameHostImpl::Navigate(const FrameMsg_Navigate_Params& params) { | 1162 void RenderFrameHostImpl::Navigate(const FrameMsg_Navigate_Params& params) { |
1162 TRACE_EVENT0("navigation", "RenderFrameHostImpl::Navigate"); | 1163 TRACE_EVENT0("navigation", "RenderFrameHostImpl::Navigate"); |
1163 // Browser plugin guests are not allowed to navigate outside web-safe schemes, | 1164 // Browser plugin guests are not allowed to navigate outside web-safe schemes, |
1164 // so do not grant them the ability to request additional URLs. | 1165 // so do not grant them the ability to request additional URLs. |
1165 if (!GetProcess()->IsIsolatedGuest()) { | 1166 if (!GetProcess()->IsIsolatedGuest()) { |
1166 ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL( | 1167 ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL( |
1167 GetProcess()->GetID(), params.url); | 1168 GetProcess()->GetID(), params.common_params.url); |
1168 if (params.url.SchemeIs(url::kDataScheme) && | 1169 if (params.common_params.url.SchemeIs(url::kDataScheme) && |
1169 params.base_url_for_data_url.SchemeIs(url::kFileScheme)) { | 1170 params.base_url_for_data_url.SchemeIs(url::kFileScheme)) { |
1170 // If 'data:' is used, and we have a 'file:' base url, grant access to | 1171 // If 'data:' is used, and we have a 'file:' base url, grant access to |
1171 // local files. | 1172 // local files. |
1172 ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL( | 1173 ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL( |
1173 GetProcess()->GetID(), params.base_url_for_data_url); | 1174 GetProcess()->GetID(), params.base_url_for_data_url); |
1174 } | 1175 } |
1175 } | 1176 } |
1176 | 1177 |
1177 // Only send the message if we aren't suspended at the start of a cross-site | 1178 // Only send the message if we aren't suspended at the start of a cross-site |
1178 // request. | 1179 // request. |
(...skipping 16 matching lines...) Expand all Loading... |
1195 // loading" message will be received asynchronously from the UI of the | 1196 // loading" message will be received asynchronously from the UI of the |
1196 // browser. But we want to keep the throbber in sync with what's happening | 1197 // browser. But we want to keep the throbber in sync with what's happening |
1197 // in the UI. For example, we want to start throbbing immediately when the | 1198 // in the UI. For example, we want to start throbbing immediately when the |
1198 // user naivgates even if the renderer is delayed. There is also an issue | 1199 // user naivgates even if the renderer is delayed. There is also an issue |
1199 // with the throbber starting because the WebUI (which controls whether the | 1200 // with the throbber starting because the WebUI (which controls whether the |
1200 // favicon is displayed) happens synchronously. If the start loading | 1201 // favicon is displayed) happens synchronously. If the start loading |
1201 // messages was asynchronous, then the default favicon would flash in. | 1202 // messages was asynchronous, then the default favicon would flash in. |
1202 // | 1203 // |
1203 // Blink doesn't send throb notifications for JavaScript URLs, so we | 1204 // Blink doesn't send throb notifications for JavaScript URLs, so we |
1204 // don't want to either. | 1205 // don't want to either. |
1205 if (!params.url.SchemeIs(url::kJavaScriptScheme)) | 1206 if (!params.common_params.url.SchemeIs(url::kJavaScriptScheme)) |
1206 delegate_->DidStartLoading(this, true); | 1207 delegate_->DidStartLoading(this, true); |
1207 } | 1208 } |
1208 | 1209 |
1209 void RenderFrameHostImpl::NavigateToURL(const GURL& url) { | 1210 void RenderFrameHostImpl::NavigateToURL(const GURL& url) { |
1210 FrameMsg_Navigate_Params params; | 1211 FrameMsg_Navigate_Params params; |
| 1212 params.common_params.url = url; |
| 1213 params.common_params.transition = ui::PAGE_TRANSITION_LINK; |
| 1214 params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; |
| 1215 params.commit_params.browser_navigation_start = base::TimeTicks::Now(); |
1211 params.page_id = -1; | 1216 params.page_id = -1; |
1212 params.pending_history_list_offset = -1; | 1217 params.pending_history_list_offset = -1; |
1213 params.current_history_list_offset = -1; | 1218 params.current_history_list_offset = -1; |
1214 params.current_history_list_length = 0; | 1219 params.current_history_list_length = 0; |
1215 params.url = url; | |
1216 params.transition = ui::PAGE_TRANSITION_LINK; | |
1217 params.navigation_type = FrameMsg_Navigate_Type::NORMAL; | |
1218 params.browser_navigation_start = base::TimeTicks::Now(); | |
1219 Navigate(params); | 1220 Navigate(params); |
1220 } | 1221 } |
1221 | 1222 |
1222 void RenderFrameHostImpl::Stop() { | 1223 void RenderFrameHostImpl::Stop() { |
1223 Send(new FrameMsg_Stop(routing_id_)); | 1224 Send(new FrameMsg_Stop(routing_id_)); |
1224 } | 1225 } |
1225 | 1226 |
1226 void RenderFrameHostImpl::DispatchBeforeUnload(bool for_cross_site_transition) { | 1227 void RenderFrameHostImpl::DispatchBeforeUnload(bool for_cross_site_transition) { |
1227 TRACE_EVENT_ASYNC_BEGIN0( | 1228 TRACE_EVENT_ASYNC_BEGIN0( |
1228 "navigation", "RenderFrameHostImpl::BeforeUnload", this); | 1229 "navigation", "RenderFrameHostImpl::BeforeUnload", this); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1308 render_view_host_->delegate_->RendererUnresponsive( | 1309 render_view_host_->delegate_->RendererUnresponsive( |
1309 render_view_host_, | 1310 render_view_host_, |
1310 render_view_host_->is_waiting_for_beforeunload_ack(), | 1311 render_view_host_->is_waiting_for_beforeunload_ack(), |
1311 render_view_host_->IsWaitingForUnloadACK()); | 1312 render_view_host_->IsWaitingForUnloadACK()); |
1312 } | 1313 } |
1313 | 1314 |
1314 void RenderFrameHostImpl::NotificationClosed(int notification_id) { | 1315 void RenderFrameHostImpl::NotificationClosed(int notification_id) { |
1315 cancel_notification_callbacks_.erase(notification_id); | 1316 cancel_notification_callbacks_.erase(notification_id); |
1316 } | 1317 } |
1317 | 1318 |
| 1319 // PlzNavigate |
| 1320 void RenderFrameHostImpl::CommitNavigation( |
| 1321 const GURL& stream_url, |
| 1322 const CommonNavigationParams& common_params, |
| 1323 const CommitNavigationParams& commit_params) { |
| 1324 // TODO(clamy): Check if we have to add security checks for the browser plugin |
| 1325 // guests. |
| 1326 |
| 1327 Send(new FrameMsg_CommitNavigation( |
| 1328 routing_id_, stream_url, common_params, commit_params)); |
| 1329 // TODO(clamy): Check if we should start the throbber for non javascript urls |
| 1330 // here. |
| 1331 } |
| 1332 |
1318 void RenderFrameHostImpl::PlatformNotificationPermissionRequestDone( | 1333 void RenderFrameHostImpl::PlatformNotificationPermissionRequestDone( |
1319 int request_id, blink::WebNotificationPermission permission) { | 1334 int request_id, blink::WebNotificationPermission permission) { |
1320 Send(new PlatformNotificationMsg_PermissionRequestComplete( | 1335 Send(new PlatformNotificationMsg_PermissionRequestComplete( |
1321 routing_id_, request_id, permission)); | 1336 routing_id_, request_id, permission)); |
1322 } | 1337 } |
1323 | 1338 |
1324 void RenderFrameHostImpl::UpdateCrossProcessIframeAccessibility( | 1339 void RenderFrameHostImpl::UpdateCrossProcessIframeAccessibility( |
1325 const std::map<int32, int> node_to_frame_routing_id_map) { | 1340 const std::map<int32, int> node_to_frame_routing_id_map) { |
1326 std::map<int32, int>::const_iterator iter; | 1341 std::map<int32, int>::const_iterator iter; |
1327 for (iter = node_to_frame_routing_id_map.begin(); | 1342 for (iter = node_to_frame_routing_id_map.begin(); |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1447 "RenderFrameHostImpl navigation suspended", this); | 1462 "RenderFrameHostImpl navigation suspended", this); |
1448 } | 1463 } |
1449 | 1464 |
1450 if (!suspend && suspended_nav_params_) { | 1465 if (!suspend && suspended_nav_params_) { |
1451 // There's navigation message params waiting to be sent. Now that we're not | 1466 // There's navigation message params waiting to be sent. Now that we're not |
1452 // suspended anymore, resume navigation by sending them. If we were swapped | 1467 // suspended anymore, resume navigation by sending them. If we were swapped |
1453 // out, we should also stop filtering out the IPC messages now. | 1468 // out, we should also stop filtering out the IPC messages now. |
1454 render_view_host_->SetState(RenderViewHostImpl::STATE_DEFAULT); | 1469 render_view_host_->SetState(RenderViewHostImpl::STATE_DEFAULT); |
1455 | 1470 |
1456 DCHECK(!proceed_time.is_null()); | 1471 DCHECK(!proceed_time.is_null()); |
1457 suspended_nav_params_->browser_navigation_start = proceed_time; | 1472 suspended_nav_params_->commit_params.browser_navigation_start = |
| 1473 proceed_time; |
1458 Send(new FrameMsg_Navigate(routing_id_, *suspended_nav_params_)); | 1474 Send(new FrameMsg_Navigate(routing_id_, *suspended_nav_params_)); |
1459 suspended_nav_params_.reset(); | 1475 suspended_nav_params_.reset(); |
1460 } | 1476 } |
1461 } | 1477 } |
1462 | 1478 |
1463 void RenderFrameHostImpl::CancelSuspendedNavigations() { | 1479 void RenderFrameHostImpl::CancelSuspendedNavigations() { |
1464 // Clear any state if a pending navigation is canceled or preempted. | 1480 // Clear any state if a pending navigation is canceled or preempted. |
1465 if (suspended_nav_params_) | 1481 if (suspended_nav_params_) |
1466 suspended_nav_params_.reset(); | 1482 suspended_nav_params_.reset(); |
1467 | 1483 |
1468 TRACE_EVENT_ASYNC_END0("navigation", | 1484 TRACE_EVENT_ASYNC_END0("navigation", |
1469 "RenderFrameHostImpl navigation suspended", this); | 1485 "RenderFrameHostImpl navigation suspended", this); |
1470 navigations_suspended_ = false; | 1486 navigations_suspended_ = false; |
1471 } | 1487 } |
1472 | 1488 |
1473 } // namespace content | 1489 } // namespace content |
OLD | NEW |