| 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 #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 #include <map> | 9 #include <map> |
| 10 | 10 |
| (...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 441 // window.name property. | 441 // window.name property. |
| 442 void OnDidUpdateName(const std::string& name); | 442 void OnDidUpdateName(const std::string& name); |
| 443 | 443 |
| 444 // Send updated origin to all frame proxies when the frame navigates to a new | 444 // Send updated origin to all frame proxies when the frame navigates to a new |
| 445 // origin. | 445 // origin. |
| 446 void OnDidUpdateOrigin(const url::Origin& origin); | 446 void OnDidUpdateOrigin(const url::Origin& origin); |
| 447 | 447 |
| 448 void EnsureRenderViewInitialized(RenderViewHostImpl* render_view_host, | 448 void EnsureRenderViewInitialized(RenderViewHostImpl* render_view_host, |
| 449 SiteInstance* instance); | 449 SiteInstance* instance); |
| 450 | 450 |
| 451 // Recursively creates swapped out RenderViews and RenderFrameProxies for | 451 // Creates swapped out RenderViews and RenderFrameProxies for this frame's |
| 452 // this frame's FrameTree and for its opener chain in the given SiteInstance. | 452 // FrameTree and for its opener chain in the given SiteInstance. This allows |
| 453 // This allows other tabs to send cross-process JavaScript calls to their | 453 // other tabs to send cross-process JavaScript calls to their opener(s) and |
| 454 // opener(s) and to any other frames in the opener's FrameTree (e.g., | 454 // to any other frames in the opener's FrameTree (e.g., supporting calls like |
| 455 // supporting calls like window.opener.opener.frames[x][y]). | 455 // window.opener.opener.frames[x][y]). Does not create proxies for the |
| 456 void CreateOpenerProxies(SiteInstance* instance); | 456 // subtree rooted at |skip_this_node| (e.g., if a node is being navigated, it |
| 457 // can be passed here to prevent proxies from being created for it, in |
| 458 // case it is in the same FrameTree as another node on its opener chain). |
| 459 void CreateOpenerProxies(SiteInstance* instance, |
| 460 FrameTreeNode* skip_this_node); |
| 457 | 461 |
| 458 // Ensure that this frame has proxies in all SiteInstances that can discover | 462 // Ensure that this frame has proxies in all SiteInstances that can discover |
| 459 // this frame by name (e.g., via window.open("", "frame_name")). See | 463 // this frame by name (e.g., via window.open("", "frame_name")). See |
| 460 // https://crbug.com/511474. | 464 // https://crbug.com/511474. |
| 461 void CreateProxiesForNewNamedFrame(); | 465 void CreateProxiesForNewNamedFrame(); |
| 462 | 466 |
| 463 // Returns a routing ID for the current FrameTreeNode's opener node in the | 467 // Returns a routing ID for the current FrameTreeNode's opener node in the |
| 464 // given SiteInstance. May return a routing ID of either a RenderFrameHost | 468 // given SiteInstance. May return a routing ID of either a RenderFrameHost |
| 465 // (if opener's current or pending RFH has SiteInstance |instance|) or a | 469 // (if opener's current or pending RFH has SiteInstance |instance|) or a |
| 466 // RenderFrameProxyHost. Returns MSG_ROUTING_NONE if there is no opener, or | 470 // RenderFrameProxyHost. Returns MSG_ROUTING_NONE if there is no opener, or |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 611 // Ensure that we have created all needed proxies for a new RFH with | 615 // Ensure that we have created all needed proxies for a new RFH with |
| 612 // SiteInstance |new_instance|: (1) create swapped-out RVHs and proxies for | 616 // SiteInstance |new_instance|: (1) create swapped-out RVHs and proxies for |
| 613 // the new RFH's opener chain if we are staying in the same BrowsingInstance; | 617 // the new RFH's opener chain if we are staying in the same BrowsingInstance; |
| 614 // (2) Create proxies for the new RFH's SiteInstance in its own frame tree; | 618 // (2) Create proxies for the new RFH's SiteInstance in its own frame tree; |
| 615 // (3) set any additional flags for the new RenderFrame with | 619 // (3) set any additional flags for the new RenderFrame with |
| 616 // |create_render_frame_flags|. | 620 // |create_render_frame_flags|. |
| 617 void CreateProxiesForNewRenderFrameHost(SiteInstance* old_instance, | 621 void CreateProxiesForNewRenderFrameHost(SiteInstance* old_instance, |
| 618 SiteInstance* new_instance, | 622 SiteInstance* new_instance, |
| 619 int* create_render_frame_flags); | 623 int* create_render_frame_flags); |
| 620 | 624 |
| 621 // Create swapped out RenderViews and RenderFrameProxies in the given | |
| 622 // SiteInstance for all frames on the opener chain of this frame. Same as | |
| 623 // CreateOpenerProxies, but starts from this frame's opener, calling | |
| 624 // CreateOpenerProxies on it if it exists and returning otherwise. | |
| 625 void CreateOpenerProxiesIfNeeded(SiteInstance* instance); | |
| 626 | |
| 627 // Traverse the opener chain and populate |opener_frame_trees| with | 625 // Traverse the opener chain and populate |opener_frame_trees| with |
| 628 // all FrameTrees accessible by following frame openers of nodes in the | 626 // all FrameTrees accessible by following frame openers of nodes in the |
| 629 // given node's FrameTree. |opener_frame_trees| is ordered so that openers | 627 // given node's FrameTree. |opener_frame_trees| is ordered so that openers |
| 630 // of smaller-indexed entries point to larger-indexed entries (i.e., this | 628 // of smaller-indexed entries point to larger-indexed entries (i.e., this |
| 631 // node's FrameTree is at index 0, its opener's FrameTree is at index 1, | 629 // node's FrameTree is at index 0, its opener's FrameTree is at index 1, |
| 632 // etc). If the traversal encounters a node with an opener pointing to a | 630 // etc). If the traversal encounters a node with an opener pointing to a |
| 633 // FrameTree that has already been traversed (such as when there's a cycle), | 631 // FrameTree that has already been traversed (such as when there's a cycle), |
| 634 // the node is added to |nodes_with_back_links|. | 632 // the node is added to |nodes_with_back_links|. |
| 635 void CollectOpenerFrameTrees( | 633 void CollectOpenerFrameTrees( |
| 636 std::vector<FrameTree*>* opener_frame_trees, | 634 std::vector<FrameTree*>* opener_frame_trees, |
| 637 base::hash_set<FrameTreeNode*>* nodes_with_back_links); | 635 base::hash_set<FrameTreeNode*>* nodes_with_back_links); |
| 638 | 636 |
| 639 // Create swapped out RenderViews and RenderFrameProxies in the given | 637 // Create swapped out RenderViews and RenderFrameProxies in the given |
| 640 // SiteInstance for the current node's FrameTree. Used as a helper function | 638 // SiteInstance for the current node's FrameTree. Used as a helper function |
| 641 // in CreateOpenerProxies for creating proxies in each FrameTree on the | 639 // in CreateOpenerProxies for creating proxies in each FrameTree on the |
| 642 // opener chain. | 640 // opener chain. Don't create proxies for the subtree rooted at |
| 643 void CreateOpenerProxiesForFrameTree(SiteInstance* instance); | 641 // |skip_this_node|. |
| 642 void CreateOpenerProxiesForFrameTree(SiteInstance* instance, |
| 643 FrameTreeNode* skip_this_node); |
| 644 | 644 |
| 645 // Creates a RenderFrameHost and corresponding RenderViewHost if necessary. | 645 // Creates a RenderFrameHost and corresponding RenderViewHost if necessary. |
| 646 scoped_ptr<RenderFrameHostImpl> CreateRenderFrameHost(SiteInstance* instance, | 646 scoped_ptr<RenderFrameHostImpl> CreateRenderFrameHost(SiteInstance* instance, |
| 647 int view_routing_id, | 647 int view_routing_id, |
| 648 int frame_routing_id, | 648 int frame_routing_id, |
| 649 int flags); | 649 int flags); |
| 650 | 650 |
| 651 // PlzNavigate | 651 // PlzNavigate |
| 652 // Creates and initializes a speculative RenderFrameHost and/or WebUI for an | 652 // Creates and initializes a speculative RenderFrameHost and/or WebUI for an |
| 653 // ongoing navigation. They might be destroyed and re-created later if the | 653 // ongoing navigation. They might be destroyed and re-created later if the |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 817 bool should_reuse_web_ui_; | 817 bool should_reuse_web_ui_; |
| 818 | 818 |
| 819 base::WeakPtrFactory<RenderFrameHostManager> weak_factory_; | 819 base::WeakPtrFactory<RenderFrameHostManager> weak_factory_; |
| 820 | 820 |
| 821 DISALLOW_COPY_AND_ASSIGN(RenderFrameHostManager); | 821 DISALLOW_COPY_AND_ASSIGN(RenderFrameHostManager); |
| 822 }; | 822 }; |
| 823 | 823 |
| 824 } // namespace content | 824 } // namespace content |
| 825 | 825 |
| 826 #endif // CONTENT_BROWSER_FRAME_HOST_RENDER_FRAME_HOST_MANAGER_H_ | 826 #endif // CONTENT_BROWSER_FRAME_HOST_RENDER_FRAME_HOST_MANAGER_H_ |
| OLD | NEW |