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

Side by Side Diff: content/browser/frame_host/render_frame_host_manager.h

Issue 1202593002: Move browser-to-renderer opener plumbing to frame routing IDs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@opener-create-opener-render-views
Patch Set: More cleanup Created 5 years, 5 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 #ifndef CONTENT_BROWSER_FRAME_HOST_RENDER_FRAME_HOST_MANAGER_H_ 5 #ifndef CONTENT_BROWSER_FRAME_HOST_RENDER_FRAME_HOST_MANAGER_H_
6 #define CONTENT_BROWSER_FRAME_HOST_RENDER_FRAME_HOST_MANAGER_H_ 6 #define CONTENT_BROWSER_FRAME_HOST_RENDER_FRAME_HOST_MANAGER_H_
7 7
8 #include <list> 8 #include <list>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 public: 114 public:
115 // Initializes the given renderer if necessary and creates the view ID 115 // Initializes the given renderer if necessary and creates the view ID
116 // corresponding to this view host. If this method is not called and the 116 // corresponding to this view host. If this method is not called and the
117 // process is not shared, then the WebContentsImpl will act as though the 117 // process is not shared, then the WebContentsImpl will act as though the
118 // renderer is not running (i.e., it will render "sad tab"). This method is 118 // renderer is not running (i.e., it will render "sad tab"). This method is
119 // automatically called from LoadURL. |for_main_frame_navigation| indicates 119 // automatically called from LoadURL. |for_main_frame_navigation| indicates
120 // whether this RenderViewHost is used to render a top-level frame, so the 120 // whether this RenderViewHost is used to render a top-level frame, so the
121 // appropriate RenderWidgetHostView type is used. 121 // appropriate RenderWidgetHostView type is used.
122 virtual bool CreateRenderViewForRenderManager( 122 virtual bool CreateRenderViewForRenderManager(
123 RenderViewHost* render_view_host, 123 RenderViewHost* render_view_host,
124 int opener_route_id, 124 int opener_frame_routing_id,
125 int proxy_routing_id, 125 int proxy_routing_id,
126 const FrameReplicationState& replicated_frame_state, 126 const FrameReplicationState& replicated_frame_state,
127 bool for_main_frame_navigation) = 0; 127 bool for_main_frame_navigation) = 0;
128 virtual bool CreateRenderFrameForRenderManager( 128 virtual bool CreateRenderFrameForRenderManager(
129 RenderFrameHost* render_frame_host, 129 RenderFrameHost* render_frame_host,
130 int parent_routing_id, 130 int parent_routing_id,
131 int previous_sibling_routing_id, 131 int previous_sibling_routing_id,
132 int proxy_routing_id) = 0; 132 int proxy_routing_id) = 0;
133 virtual void BeforeUnloadFiredFromRenderManager( 133 virtual void BeforeUnloadFiredFromRenderManager(
134 bool proceed, const base::TimeTicks& proceed_time, 134 bool proceed, const base::TimeTicks& proceed_time,
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 346
347 // Creates and initializes a RenderFrameHost. The |web_ui| is an optional 347 // Creates and initializes a RenderFrameHost. The |web_ui| is an optional
348 // input parameter used to double check bindings when swapping back in a 348 // input parameter used to double check bindings when swapping back in a
349 // previously existing RenderFrameHost. If |flags| has the 349 // previously existing RenderFrameHost. If |flags| has the
350 // CREATE_RF_SWAPPED_OUT bit set from the CreateRenderFrameFlags enum, it will 350 // CREATE_RF_SWAPPED_OUT bit set from the CreateRenderFrameFlags enum, it will
351 // initially be placed on the swapped out hosts list. If |view_routing_id_ptr| 351 // initially be placed on the swapped out hosts list. If |view_routing_id_ptr|
352 // is not nullptr it will be set to the routing id of the view associated with 352 // is not nullptr it will be set to the routing id of the view associated with
353 // the frame. 353 // the frame.
354 scoped_ptr<RenderFrameHostImpl> CreateRenderFrame(SiteInstance* instance, 354 scoped_ptr<RenderFrameHostImpl> CreateRenderFrame(SiteInstance* instance,
355 WebUIImpl* web_ui, 355 WebUIImpl* web_ui,
356 int opener_route_id,
357 int flags, 356 int flags,
358 int* view_routing_id_ptr); 357 int* view_routing_id_ptr);
359 358
360 // Helper method to create and initialize a RenderFrameProxyHost and return 359 // Helper method to create and initialize a RenderFrameProxyHost and return
361 // its routing id. 360 // its routing id. If |suppress_opener| is true, an opener frame won't be
362 int CreateRenderFrameProxy(SiteInstance* instance); 361 // assigned for the corresponding RenderFrameProxy even if the current
362 // FrameTreeNode has an opener.
363 int CreateRenderFrameProxy(SiteInstance* instance, bool suppress_opener);
363 364
364 // Creates proxies for a new child frame at FrameTreeNode |child| in all 365 // Creates proxies for a new child frame at FrameTreeNode |child| in all
365 // SiteInstances for which the current frame has proxies. This method is 366 // SiteInstances for which the current frame has proxies. This method is
366 // called on the parent of a new child frame before the child leaves the 367 // called on the parent of a new child frame before the child leaves the
367 // SiteInstance. 368 // SiteInstance.
368 void CreateProxiesForChildFrame(FrameTreeNode* child); 369 void CreateProxiesForChildFrame(FrameTreeNode* child);
369 370
370 // Sets the passed passed interstitial as the currently showing interstitial. 371 // Sets the passed passed interstitial as the currently showing interstitial.
371 // |interstitial_page| should be non NULL (use the remove_interstitial_page 372 // |interstitial_page| should be non NULL (use the remove_interstitial_page
372 // method to unset the interstitial) and no interstitial page should be set 373 // method to unset the interstitial) and no interstitial page should be set
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 bool IsPendingDeletion(RenderFrameHostImpl* render_frame_host); 408 bool IsPendingDeletion(RenderFrameHostImpl* render_frame_host);
408 409
409 // If |render_frame_host| is on the pending deletion list, this deletes it. 410 // If |render_frame_host| is on the pending deletion list, this deletes it.
410 // Returns whether it was deleted. 411 // Returns whether it was deleted.
411 bool DeleteFromPendingList(RenderFrameHostImpl* render_frame_host); 412 bool DeleteFromPendingList(RenderFrameHostImpl* render_frame_host);
412 413
413 // Deletes any proxy hosts associated with this node. Used during destruction 414 // Deletes any proxy hosts associated with this node. Used during destruction
414 // of WebContentsImpl. 415 // of WebContentsImpl.
415 void ResetProxyHosts(); 416 void ResetProxyHosts();
416 417
417 // Returns the routing id for a RenderFrameHost or RenderFrameHostProxy 418 // Returns the routing id for a RenderFrameHost or RenderFrameProxyHost
nasko 2015/07/07 16:26:21 Nice catch!
418 // that has the given SiteInstance and is associated with this 419 // that has the given SiteInstance and is associated with this
419 // RenderFrameHostManager. Returns MSG_ROUTING_NONE if none is found. 420 // RenderFrameHostManager. Returns MSG_ROUTING_NONE if none is found.
420 int GetRoutingIdForSiteInstance(SiteInstance* site_instance); 421 int GetRoutingIdForSiteInstance(SiteInstance* site_instance);
421 422
422 // PlzNavigate 423 // PlzNavigate
423 // Notifies the RenderFrameHostManager that a new NavigationRequest has been 424 // Notifies the RenderFrameHostManager that a new NavigationRequest has been
424 // created and set in the FrameTreeNode so that it can speculatively create a 425 // created and set in the FrameTreeNode so that it can speculatively create a
425 // new RenderFrameHost (and potentially a new process) if needed. 426 // new RenderFrameHost (and potentially a new process) if needed.
426 void DidCreateNavigationRequest(const NavigationRequest& request); 427 void DidCreateNavigationRequest(const NavigationRequest& request);
427 428
(...skipping 27 matching lines...) Expand all
455 // origin. 456 // origin.
456 void OnDidUpdateOrigin(const url::Origin& origin); 457 void OnDidUpdateOrigin(const url::Origin& origin);
457 458
458 void EnsureRenderViewInitialized(RenderViewHostImpl* render_view_host, 459 void EnsureRenderViewInitialized(RenderViewHostImpl* render_view_host,
459 SiteInstance* instance); 460 SiteInstance* instance);
460 461
461 // Recursively creates swapped out RenderViews and RenderFrameProxies for 462 // Recursively creates swapped out RenderViews and RenderFrameProxies for
462 // this frame's FrameTree and for its opener chain in the given SiteInstance. 463 // this frame's FrameTree and for its opener chain in the given SiteInstance.
463 // This allows other tabs to send cross-process JavaScript calls to their 464 // This allows other tabs to send cross-process JavaScript calls to their
464 // opener(s) and to any other frames in the opener's FrameTree (e.g., 465 // opener(s) and to any other frames in the opener's FrameTree (e.g.,
465 // supporting calls like window.opener.opener.frames[x][y]). Returns the 466 // supporting calls like window.opener.opener.frames[x][y]).
466 // route ID of this frame's RenderView for |instance|. 467 void CreateOpenerProxies(SiteInstance* instance);
467 // TODO(alexmos): Switch this to return RenderFrame routing IDs. 468
468 int CreateOpenerProxies(SiteInstance* instance); 469 // Returns a routing ID for the current FrameTreeNode's opener node in the
470 // given SiteInstance. May return a routing ID of either a RenderFrame (if
nasko 2015/07/07 16:26:21 s/RenderFrame/RenderFrameHost/
alexmos 2015/07/08 04:42:18 Done.
471 // opener's current or pending RFH has SiteInstance |instance|) or a
472 // RenderFrameProxy. Returns MSG_ROUTING_NONE if there is no opener, or if
nasko 2015/07/07 16:26:21 s/RenderFrameProxy/RenderFrameProxyHost/
alexmos 2015/07/08 04:42:18 Done.
473 // the opener node doesn't have a proxy for |instance|.
474 int GetOpenerRoutingID(SiteInstance* instance);
469 475
470 // Called on the RFHM of the inner WebContents to create a 476 // Called on the RFHM of the inner WebContents to create a
471 // RenderFrameProxyHost in its outer WebContents's SiteInstance, 477 // RenderFrameProxyHost in its outer WebContents's SiteInstance,
472 // |outer_contents_site_instance|. The frame in outer WebContents that is 478 // |outer_contents_site_instance|. The frame in outer WebContents that is
473 // hosting the inner WebContents is |render_frame_host|, and the frame will 479 // hosting the inner WebContents is |render_frame_host|, and the frame will
474 // be swapped out with the proxy. 480 // be swapped out with the proxy.
475 void CreateOuterDelegateProxy(SiteInstance* outer_contents_site_instance, 481 void CreateOuterDelegateProxy(SiteInstance* outer_contents_site_instance,
476 RenderFrameHostImpl* render_frame_host); 482 RenderFrameHostImpl* render_frame_host);
477 483
478 // Sets the child RenderWidgetHostView for this frame, which must be part of 484 // Sets the child RenderWidgetHostView for this frame, which must be part of
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 void CreatePendingRenderFrameHost(SiteInstance* old_instance, 610 void CreatePendingRenderFrameHost(SiteInstance* old_instance,
605 SiteInstance* new_instance, 611 SiteInstance* new_instance,
606 bool is_main_frame); 612 bool is_main_frame);
607 613
608 // Ensure that we have created all needed proxies for a new RFH with 614 // Ensure that we have created all needed proxies for a new RFH with
609 // SiteInstance |new_instance|: (1) create swapped-out RVHs and proxies for 615 // SiteInstance |new_instance|: (1) create swapped-out RVHs and proxies for
610 // the new RFH's opener chain if we are staying in the same BrowsingInstance; 616 // the new RFH's opener chain if we are staying in the same BrowsingInstance;
611 // (2) Create proxies for the new RFH's SiteInstance in its own frame tree; 617 // (2) Create proxies for the new RFH's SiteInstance in its own frame tree;
612 // (3) set any additional flags for the new RenderFrame with 618 // (3) set any additional flags for the new RenderFrame with
613 // |create_render_frame_flags|. 619 // |create_render_frame_flags|.
614 // Returns the opener's RVH route ID to be used for the new RenderFrame. 620 void CreateProxiesForNewRenderFrameHost(SiteInstance* old_instance,
615 // TODO(alexmos): switch this to return opener's RFH routing ID instead. 621 SiteInstance* new_instance,
616 int CreateProxiesForNewRenderFrameHost(SiteInstance* old_instance, 622 int* create_render_frame_flags);
617 SiteInstance* new_instance,
618 int* create_render_frame_flags);
619 623
620 // Create swapped out RenderViews and RenderFrameProxies in the given 624 // Create swapped out RenderViews and RenderFrameProxies in the given
621 // SiteInstance for all frames on the opener chain of this frame. Same as 625 // SiteInstance for all frames on the opener chain of this frame. Same as
622 // CreateOpenerProxies, but starts from this frame's opener, returning 626 // CreateOpenerProxies, but starts from this frame's opener, calling
623 // MSG_ROUTING_NONE if it doesn't exist, and calling CreateOpenerProxies if 627 // CreateOpenerProxies on it if it exists and returning otherwise.
624 // it does. 628 void CreateOpenerProxiesIfNeeded(SiteInstance* instance);
625 // TODO(alexmos): Switch this to return RenderFrame routing IDs.
626 int CreateOpenerProxiesIfNeeded(SiteInstance* instance);
627 629
628 // Creates a RenderFrameHost and corresponding RenderViewHost if necessary. 630 // Creates a RenderFrameHost and corresponding RenderViewHost if necessary.
629 scoped_ptr<RenderFrameHostImpl> CreateRenderFrameHost(SiteInstance* instance, 631 scoped_ptr<RenderFrameHostImpl> CreateRenderFrameHost(SiteInstance* instance,
630 int view_routing_id, 632 int view_routing_id,
631 int frame_routing_id, 633 int frame_routing_id,
632 int flags); 634 int flags);
633 635
634 // PlzNavigate 636 // PlzNavigate
635 // Creates and initializes a speculative RenderFrameHost and/or WebUI for an 637 // Creates and initializes a speculative RenderFrameHost and/or WebUI for an
636 // ongoing navigation. They might be destroyed and re-created later if the 638 // ongoing navigation. They might be destroyed and re-created later if the
637 // navigation is redirected to a different SiteInstance. 639 // navigation is redirected to a different SiteInstance.
638 bool CreateSpeculativeRenderFrameHost(const GURL& url, 640 bool CreateSpeculativeRenderFrameHost(const GURL& url,
639 SiteInstance* old_instance, 641 SiteInstance* old_instance,
640 SiteInstance* new_instance, 642 SiteInstance* new_instance,
641 int bindings); 643 int bindings);
642 644
643 // Sets up the necessary state for a new RenderViewHost with the given opener, 645 // Sets up the necessary state for a new RenderViewHost. Creates a
644 // if necessary. It creates a RenderFrameProxy in the target renderer process 646 // RenderFrameProxy in the target renderer process with the given
645 // with the given |proxy_routing_id|, which is used to route IPC messages when 647 // |proxy_routing_id|, which is used to route IPC messages when in swapped
646 // in swapped out state. Returns early if the RenderViewHost has already been 648 // out state. Returns early if the RenderViewHost has already been
647 // initialized for another RenderFrameHost. 649 // initialized for another RenderFrameHost. If |suppress_opener| is true,
648 // TODO(creis): opener_route_id is currently for the RenderViewHost but should 650 // an opener won't be assigned for the RenderView's main frame.
649 // be for the RenderFrame, since frames can have openers.
650 bool InitRenderView(RenderViewHostImpl* render_view_host, 651 bool InitRenderView(RenderViewHostImpl* render_view_host,
651 int opener_route_id,
652 int proxy_routing_id, 652 int proxy_routing_id,
653 bool for_main_frame_navigation); 653 bool for_main_frame_navigation,
654 bool suppress_opener);
654 655
655 // Initialization for RenderFrameHost uses the same sequence as InitRenderView 656 // Initialization for RenderFrameHost uses the same sequence as InitRenderView
656 // above. 657 // above.
657 bool InitRenderFrame(RenderFrameHostImpl* render_frame_host); 658 bool InitRenderFrame(RenderFrameHostImpl* render_frame_host);
658 659
659 // Sets the pending RenderFrameHost/WebUI to be the active one. Note that this 660 // Sets the pending RenderFrameHost/WebUI to be the active one. Note that this
660 // doesn't require the pending render_frame_host_ pointer to be non-NULL, 661 // doesn't require the pending render_frame_host_ pointer to be non-NULL,
661 // since there could be Web UI switching as well. Call this for every commit. 662 // since there could be Web UI switching as well. Call this for every commit.
662 // If PlzNavigate is enabled the method will set the speculative (not pending) 663 // If PlzNavigate is enabled the method will set the speculative (not pending)
663 // RenderFrameHost to be the active one. 664 // RenderFrameHost to be the active one.
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
802 bool should_reuse_web_ui_; 803 bool should_reuse_web_ui_;
803 804
804 base::WeakPtrFactory<RenderFrameHostManager> weak_factory_; 805 base::WeakPtrFactory<RenderFrameHostManager> weak_factory_;
805 806
806 DISALLOW_COPY_AND_ASSIGN(RenderFrameHostManager); 807 DISALLOW_COPY_AND_ASSIGN(RenderFrameHostManager);
807 }; 808 };
808 809
809 } // namespace content 810 } // namespace content
810 811
811 #endif // CONTENT_BROWSER_FRAME_HOST_RENDER_FRAME_HOST_MANAGER_H_ 812 #endif // CONTENT_BROWSER_FRAME_HOST_RENDER_FRAME_HOST_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698