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

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

Issue 2086083003: Cache RenderFrameHost's parent so it doesn't change over time. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <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
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
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
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
OLDNEW
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698