Chromium Code Reviews| 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 <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 220 int32_t widget_routing_id, | 220 int32_t widget_routing_id, |
| 221 bool hidden) | 221 bool hidden) |
| 222 : render_view_host_(render_view_host), | 222 : render_view_host_(render_view_host), |
| 223 delegate_(delegate), | 223 delegate_(delegate), |
| 224 site_instance_(static_cast<SiteInstanceImpl*>(site_instance)), | 224 site_instance_(static_cast<SiteInstanceImpl*>(site_instance)), |
| 225 process_(site_instance->GetProcess()), | 225 process_(site_instance->GetProcess()), |
| 226 cross_process_frame_connector_(NULL), | 226 cross_process_frame_connector_(NULL), |
| 227 render_frame_proxy_host_(NULL), | 227 render_frame_proxy_host_(NULL), |
| 228 frame_tree_(frame_tree), | 228 frame_tree_(frame_tree), |
| 229 frame_tree_node_(frame_tree_node), | 229 frame_tree_node_(frame_tree_node), |
| 230 parent_(nullptr), | |
| 230 render_widget_host_(nullptr), | 231 render_widget_host_(nullptr), |
| 231 routing_id_(routing_id), | 232 routing_id_(routing_id), |
| 232 is_waiting_for_swapout_ack_(false), | 233 is_waiting_for_swapout_ack_(false), |
| 233 render_frame_created_(false), | 234 render_frame_created_(false), |
| 234 navigations_suspended_(false), | 235 navigations_suspended_(false), |
| 235 is_waiting_for_beforeunload_ack_(false), | 236 is_waiting_for_beforeunload_ack_(false), |
| 236 unload_ack_is_for_navigation_(false), | 237 unload_ack_is_for_navigation_(false), |
| 237 is_loading_(false), | 238 is_loading_(false), |
| 238 pending_commit_(false), | 239 pending_commit_(false), |
| 239 nav_entry_id_(0), | 240 nav_entry_id_(0), |
| 240 accessibility_reset_token_(0), | 241 accessibility_reset_token_(0), |
| 241 accessibility_reset_count_(0), | 242 accessibility_reset_count_(0), |
| 242 browser_plugin_embedder_ax_tree_id_(AXTreeIDRegistry::kNoAXTreeID), | 243 browser_plugin_embedder_ax_tree_id_(AXTreeIDRegistry::kNoAXTreeID), |
| 243 no_create_browser_accessibility_manager_for_testing_(false), | 244 no_create_browser_accessibility_manager_for_testing_(false), |
| 244 web_ui_type_(WebUI::kNoWebUI), | 245 web_ui_type_(WebUI::kNoWebUI), |
| 245 pending_web_ui_type_(WebUI::kNoWebUI), | 246 pending_web_ui_type_(WebUI::kNoWebUI), |
| 246 should_reuse_web_ui_(false), | 247 should_reuse_web_ui_(false), |
| 247 last_navigation_lofi_state_(LOFI_UNSPECIFIED), | 248 last_navigation_lofi_state_(LOFI_UNSPECIFIED), |
| 248 frame_host_binding_(this), | 249 frame_host_binding_(this), |
| 249 weak_ptr_factory_(this) { | 250 weak_ptr_factory_(this) { |
| 250 frame_tree_->AddRenderViewHostRef(render_view_host_); | 251 frame_tree_->AddRenderViewHostRef(render_view_host_); |
| 251 GetProcess()->AddRoute(routing_id_, this); | 252 GetProcess()->AddRoute(routing_id_, this); |
| 252 g_routing_id_frame_map.Get().insert(std::make_pair( | 253 g_routing_id_frame_map.Get().insert(std::make_pair( |
| 253 RenderFrameHostID(GetProcess()->GetID(), routing_id_), | 254 RenderFrameHostID(GetProcess()->GetID(), routing_id_), |
| 254 this)); | 255 this)); |
| 255 site_instance_->AddObserver(this); | 256 site_instance_->AddObserver(this); |
| 256 GetSiteInstance()->IncrementActiveFrameCount(); | 257 GetSiteInstance()->IncrementActiveFrameCount(); |
| 257 | 258 |
| 258 // New child frames should inherit the nav_entry_id of their parent. | |
| 259 if (frame_tree_node_->parent()) { | 259 if (frame_tree_node_->parent()) { |
| 260 // Keep track of the parent RenderFrameHost, which shouldn't change even if | |
| 261 // this RenderFrameHost is on the pending deletion list and the parent | |
| 262 // FrameTreeNode has changed its current RenderFrameHost. | |
| 263 parent_ = frame_tree_node_->parent()->current_frame_host(); | |
|
alexmos
2016/06/21 23:36:02
Could this ever be incorrect if we try to create a
dcheng
2016/06/21 23:39:47
We don't allow frames to be attached in frames tha
Charlie Reis
2016/06/21 23:47:23
Yeah, I think that's something we'll want to enfor
| |
| 264 | |
| 265 // New child frames should inherit the nav_entry_id of their parent. | |
| 260 set_nav_entry_id( | 266 set_nav_entry_id( |
| 261 frame_tree_node_->parent()->current_frame_host()->nav_entry_id()); | 267 frame_tree_node_->parent()->current_frame_host()->nav_entry_id()); |
| 262 } | 268 } |
| 263 | 269 |
| 264 SetUpMojoIfNeeded(); | 270 SetUpMojoIfNeeded(); |
| 265 swapout_event_monitor_timeout_.reset(new TimeoutMonitor(base::Bind( | 271 swapout_event_monitor_timeout_.reset(new TimeoutMonitor(base::Bind( |
| 266 &RenderFrameHostImpl::OnSwappedOut, weak_ptr_factory_.GetWeakPtr()))); | 272 &RenderFrameHostImpl::OnSwappedOut, weak_ptr_factory_.GetWeakPtr()))); |
| 267 | 273 |
| 268 if (widget_routing_id != MSG_ROUTING_NONE) { | 274 if (widget_routing_id != MSG_ROUTING_NONE) { |
| 269 // TODO(avi): Once RenderViewHostImpl has-a RenderWidgetHostImpl, the main | 275 // TODO(avi): Once RenderViewHostImpl has-a RenderWidgetHostImpl, the main |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 342 | 348 |
| 343 SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() { | 349 SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() { |
| 344 return site_instance_.get(); | 350 return site_instance_.get(); |
| 345 } | 351 } |
| 346 | 352 |
| 347 RenderProcessHost* RenderFrameHostImpl::GetProcess() { | 353 RenderProcessHost* RenderFrameHostImpl::GetProcess() { |
| 348 return process_; | 354 return process_; |
| 349 } | 355 } |
| 350 | 356 |
| 351 RenderFrameHostImpl* RenderFrameHostImpl::GetParent() { | 357 RenderFrameHostImpl* RenderFrameHostImpl::GetParent() { |
| 352 FrameTreeNode* parent_node = frame_tree_node_->parent(); | 358 return parent_; |
| 353 if (!parent_node) | |
| 354 return NULL; | |
| 355 return parent_node->current_frame_host(); | |
| 356 } | 359 } |
| 357 | 360 |
| 358 int RenderFrameHostImpl::GetFrameTreeNodeId() { | 361 int RenderFrameHostImpl::GetFrameTreeNodeId() { |
| 359 return frame_tree_node_->frame_tree_node_id(); | 362 return frame_tree_node_->frame_tree_node_id(); |
| 360 } | 363 } |
| 361 | 364 |
| 362 const std::string& RenderFrameHostImpl::GetFrameName() { | 365 const std::string& RenderFrameHostImpl::GetFrameName() { |
| 363 return frame_tree_node_->frame_name(); | 366 return frame_tree_node_->frame_name(); |
| 364 } | 367 } |
| 365 | 368 |
| 366 bool RenderFrameHostImpl::IsCrossProcessSubframe() { | 369 bool RenderFrameHostImpl::IsCrossProcessSubframe() { |
| 367 FrameTreeNode* parent_node = frame_tree_node_->parent(); | 370 if (!parent_) |
| 368 if (!parent_node) | |
| 369 return false; | 371 return false; |
| 370 return GetSiteInstance() != | 372 return GetSiteInstance() != parent_->GetSiteInstance(); |
| 371 parent_node->current_frame_host()->GetSiteInstance(); | |
| 372 } | 373 } |
| 373 | 374 |
| 374 const GURL& RenderFrameHostImpl::GetLastCommittedURL() { | 375 const GURL& RenderFrameHostImpl::GetLastCommittedURL() { |
| 375 return last_committed_url(); | 376 return last_committed_url(); |
| 376 } | 377 } |
| 377 | 378 |
| 378 url::Origin RenderFrameHostImpl::GetLastCommittedOrigin() { | 379 url::Origin RenderFrameHostImpl::GetLastCommittedOrigin() { |
| 379 // Origin is stored per-FTN, so it's incorrect to call for a non-current RFH. | 380 // Origin is stored per-FTN, so it's incorrect to call for a non-current RFH. |
| 380 CHECK(this == frame_tree_node_->current_frame_host()); | 381 CHECK(this == frame_tree_node_->current_frame_host()); |
| 381 return frame_tree_node_->current_origin(); | 382 return frame_tree_node_->current_origin(); |
| (...skipping 2566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2948 // handler after it's destroyed so it can't run after the RFHI is destroyed. | 2949 // handler after it's destroyed so it can't run after the RFHI is destroyed. |
| 2949 web_bluetooth_service_->SetClientConnectionErrorHandler(base::Bind( | 2950 web_bluetooth_service_->SetClientConnectionErrorHandler(base::Bind( |
| 2950 &RenderFrameHostImpl::DeleteWebBluetoothService, base::Unretained(this))); | 2951 &RenderFrameHostImpl::DeleteWebBluetoothService, base::Unretained(this))); |
| 2951 } | 2952 } |
| 2952 | 2953 |
| 2953 void RenderFrameHostImpl::DeleteWebBluetoothService() { | 2954 void RenderFrameHostImpl::DeleteWebBluetoothService() { |
| 2954 web_bluetooth_service_.reset(); | 2955 web_bluetooth_service_.reset(); |
| 2955 } | 2956 } |
| 2956 | 2957 |
| 2957 } // namespace content | 2958 } // namespace content |
| OLD | NEW |