| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 | 244 |
| 245 DISALLOW_COPY_AND_ASSIGN(RemoterFactoryImpl); | 245 DISALLOW_COPY_AND_ASSIGN(RemoterFactoryImpl); |
| 246 }; | 246 }; |
| 247 #endif // BUILDFLAG(ENABLE_MEDIA_REMOTING) | 247 #endif // BUILDFLAG(ENABLE_MEDIA_REMOTING) |
| 248 | 248 |
| 249 template <typename Interface> | 249 template <typename Interface> |
| 250 void IgnoreInterfaceRequest(mojo::InterfaceRequest<Interface> request) { | 250 void IgnoreInterfaceRequest(mojo::InterfaceRequest<Interface> request) { |
| 251 // Intentionally ignore the interface request. | 251 // Intentionally ignore the interface request. |
| 252 } | 252 } |
| 253 | 253 |
| 254 // The following functions simplify code paths where the UI thread notifies the |
| 255 // ResourceDispatcherHostImpl of information pertaining to loading behavior of |
| 256 // frame hosts. |
| 257 void NotifyRouteChangesOnIO( |
| 258 base::Callback<void(ResourceDispatcherHostImpl*, |
| 259 const GlobalFrameRoutingId&)> frame_callback, |
| 260 std::unique_ptr<std::set<GlobalFrameRoutingId>> routing_ids) { |
| 261 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 262 ResourceDispatcherHostImpl* rdh = ResourceDispatcherHostImpl::Get(); |
| 263 if (!rdh) |
| 264 return; |
| 265 for (const auto& routing_id : *routing_ids) |
| 266 frame_callback.Run(rdh, routing_id); |
| 267 } |
| 268 |
| 269 void NotifyForEachFrameFromUI( |
| 270 RenderFrameHost* root_frame_host, |
| 271 base::Callback<void(ResourceDispatcherHostImpl*, |
| 272 const GlobalFrameRoutingId&)> frame_callback) { |
| 273 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 274 |
| 275 FrameTree* frame_tree = static_cast<RenderFrameHostImpl*>(root_frame_host) |
| 276 ->frame_tree_node() |
| 277 ->frame_tree(); |
| 278 DCHECK_EQ(root_frame_host, frame_tree->GetMainFrame()); |
| 279 |
| 280 std::unique_ptr<std::set<GlobalFrameRoutingId>> routing_ids( |
| 281 new std::set<GlobalFrameRoutingId>()); |
| 282 for (FrameTreeNode* node : frame_tree->Nodes()) { |
| 283 RenderFrameHostImpl* frame_host = node->current_frame_host(); |
| 284 RenderFrameHostImpl* pending_frame_host = |
| 285 IsBrowserSideNavigationEnabled() |
| 286 ? node->render_manager()->speculative_frame_host() |
| 287 : node->render_manager()->pending_frame_host(); |
| 288 if (frame_host) |
| 289 routing_ids->insert(frame_host->GetGlobalFrameRoutingId()); |
| 290 if (pending_frame_host) |
| 291 routing_ids->insert(pending_frame_host->GetGlobalFrameRoutingId()); |
| 292 } |
| 293 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| 294 base::Bind(&NotifyRouteChangesOnIO, frame_callback, |
| 295 base::Passed(std::move(routing_ids)))); |
| 296 } |
| 297 |
| 254 } // namespace | 298 } // namespace |
| 255 | 299 |
| 256 // static | 300 // static |
| 257 RenderFrameHost* RenderFrameHost::FromID(int render_process_id, | 301 RenderFrameHost* RenderFrameHost::FromID(int render_process_id, |
| 258 int render_frame_id) { | 302 int render_frame_id) { |
| 259 return RenderFrameHostImpl::FromID(render_process_id, render_frame_id); | 303 return RenderFrameHostImpl::FromID(render_process_id, render_frame_id); |
| 260 } | 304 } |
| 261 | 305 |
| 262 #if defined(OS_ANDROID) | 306 #if defined(OS_ANDROID) |
| 263 // static | 307 // static |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 | 347 |
| 304 // static | 348 // static |
| 305 RenderFrameHostImpl* RenderFrameHostImpl::FromAXTreeID( | 349 RenderFrameHostImpl* RenderFrameHostImpl::FromAXTreeID( |
| 306 ui::AXTreeIDRegistry::AXTreeID ax_tree_id) { | 350 ui::AXTreeIDRegistry::AXTreeID ax_tree_id) { |
| 307 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 351 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 308 ui::AXTreeIDRegistry::FrameID frame_id = | 352 ui::AXTreeIDRegistry::FrameID frame_id = |
| 309 ui::AXTreeIDRegistry::GetInstance()->GetFrameID(ax_tree_id); | 353 ui::AXTreeIDRegistry::GetInstance()->GetFrameID(ax_tree_id); |
| 310 return RenderFrameHostImpl::FromID(frame_id.first, frame_id.second); | 354 return RenderFrameHostImpl::FromID(frame_id.first, frame_id.second); |
| 311 } | 355 } |
| 312 | 356 |
| 357 // static |
| 358 void RenderFrameHost::BlockRequestsForFrame(RenderFrameHost* root_frame_host) { |
| 359 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 360 NotifyForEachFrameFromUI( |
| 361 root_frame_host, |
| 362 base::Bind(&ResourceDispatcherHostImpl::BlockRequestsForRoute)); |
| 363 } |
| 364 |
| 365 // static |
| 366 void RenderFrameHost::ResumeBlockedRequestsForFrame( |
| 367 RenderFrameHost* root_frame_host) { |
| 368 NotifyForEachFrameFromUI( |
| 369 root_frame_host, |
| 370 base::Bind(&ResourceDispatcherHostImpl::ResumeBlockedRequestsForRoute)); |
| 371 } |
| 372 |
| 373 // static |
| 374 void RenderFrameHost::CancelBlockedRequestsForFrame( |
| 375 RenderFrameHost* root_frame_host) { |
| 376 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 377 NotifyForEachFrameFromUI( |
| 378 root_frame_host, |
| 379 base::Bind(&ResourceDispatcherHostImpl::CancelBlockedRequestsForRoute)); |
| 380 } |
| 381 |
| 313 RenderFrameHostImpl::RenderFrameHostImpl(SiteInstance* site_instance, | 382 RenderFrameHostImpl::RenderFrameHostImpl(SiteInstance* site_instance, |
| 314 RenderViewHostImpl* render_view_host, | 383 RenderViewHostImpl* render_view_host, |
| 315 RenderFrameHostDelegate* delegate, | 384 RenderFrameHostDelegate* delegate, |
| 316 RenderWidgetHostDelegate* rwh_delegate, | 385 RenderWidgetHostDelegate* rwh_delegate, |
| 317 FrameTree* frame_tree, | 386 FrameTree* frame_tree, |
| 318 FrameTreeNode* frame_tree_node, | 387 FrameTreeNode* frame_tree_node, |
| 319 int32_t routing_id, | 388 int32_t routing_id, |
| 320 int32_t widget_routing_id, | 389 int32_t widget_routing_id, |
| 321 bool hidden, | 390 bool hidden, |
| 322 bool renderer_initiated_creation) | 391 bool renderer_initiated_creation) |
| (...skipping 637 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 960 render_widget_host_->InitForFrame(); | 1029 render_widget_host_->InitForFrame(); |
| 961 | 1030 |
| 962 if (enabled_bindings_ && created) { | 1031 if (enabled_bindings_ && created) { |
| 963 if (!frame_bindings_control_) | 1032 if (!frame_bindings_control_) |
| 964 GetRemoteAssociatedInterfaces()->GetInterface(&frame_bindings_control_); | 1033 GetRemoteAssociatedInterfaces()->GetInterface(&frame_bindings_control_); |
| 965 frame_bindings_control_->AllowBindings(enabled_bindings_); | 1034 frame_bindings_control_->AllowBindings(enabled_bindings_); |
| 966 } | 1035 } |
| 967 } | 1036 } |
| 968 | 1037 |
| 969 void RenderFrameHostImpl::Init() { | 1038 void RenderFrameHostImpl::Init() { |
| 970 ResourceDispatcherHost::ResumeBlockedRequestsForFrameFromUI(this); | 1039 ResumeBlockedRequestsForFrame(this); |
| 971 if (!waiting_for_init_) | 1040 if (!waiting_for_init_) |
| 972 return; | 1041 return; |
| 973 | 1042 |
| 974 waiting_for_init_ = false; | 1043 waiting_for_init_ = false; |
| 975 if (pendinging_navigate_) { | 1044 if (pendinging_navigate_) { |
| 976 frame_tree_node()->navigator()->OnBeginNavigation( | 1045 frame_tree_node()->navigator()->OnBeginNavigation( |
| 977 frame_tree_node(), pendinging_navigate_->first, | 1046 frame_tree_node(), pendinging_navigate_->first, |
| 978 pendinging_navigate_->second); | 1047 pendinging_navigate_->second); |
| 979 pendinging_navigate_.reset(); | 1048 pendinging_navigate_.reset(); |
| 980 } | 1049 } |
| (...skipping 2517 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3498 GetUserData(kRenderFrameHostAndroidKey)); | 3567 GetUserData(kRenderFrameHostAndroidKey)); |
| 3499 if (!render_frame_host_android) { | 3568 if (!render_frame_host_android) { |
| 3500 render_frame_host_android = new RenderFrameHostAndroid(this); | 3569 render_frame_host_android = new RenderFrameHostAndroid(this); |
| 3501 SetUserData(kRenderFrameHostAndroidKey, render_frame_host_android); | 3570 SetUserData(kRenderFrameHostAndroidKey, render_frame_host_android); |
| 3502 } | 3571 } |
| 3503 return render_frame_host_android->GetJavaObject(); | 3572 return render_frame_host_android->GetJavaObject(); |
| 3504 } | 3573 } |
| 3505 #endif | 3574 #endif |
| 3506 | 3575 |
| 3507 } // namespace content | 3576 } // namespace content |
| OLD | NEW |