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 |
11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" |
12 #include "base/logging.h" | 12 #include "base/logging.h" |
13 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
14 #include "base/memory/weak_ptr.h" | 14 #include "base/memory/weak_ptr.h" |
15 #include "content/browser/frame_host/render_frame_host_impl.h" | |
16 #include "content/browser/renderer_host/render_view_host_delegate.h" | 15 #include "content/browser/renderer_host/render_view_host_delegate.h" |
17 #include "content/browser/site_instance_impl.h" | 16 #include "content/browser/site_instance_impl.h" |
18 #include "content/common/content_export.h" | 17 #include "content/common/content_export.h" |
19 #include "content/public/browser/global_request_id.h" | 18 #include "content/public/browser/global_request_id.h" |
20 #include "content/public/common/referrer.h" | 19 #include "content/public/common/referrer.h" |
21 #include "ui/base/page_transition_types.h" | 20 #include "ui/base/page_transition_types.h" |
22 #include "url/origin.h" | 21 #include "url/origin.h" |
23 | 22 |
24 namespace content { | 23 namespace content { |
25 class BrowserContext; | 24 class BrowserContext; |
26 class CrossProcessFrameConnector; | 25 class CrossProcessFrameConnector; |
27 class CrossSiteTransferringRequest; | 26 class CrossSiteTransferringRequest; |
28 class FrameNavigationEntry; | 27 class FrameNavigationEntry; |
29 class FrameTreeNode; | 28 class FrameTreeNode; |
30 class InterstitialPageImpl; | 29 class InterstitialPageImpl; |
31 class NavigationControllerImpl; | 30 class NavigationControllerImpl; |
32 class NavigationEntry; | 31 class NavigationEntry; |
33 class NavigationEntryImpl; | 32 class NavigationEntryImpl; |
34 class NavigationHandleImpl; | 33 class NavigationHandleImpl; |
35 class NavigationRequest; | 34 class NavigationRequest; |
36 class NavigatorTestWithBrowserSideNavigation; | 35 class NavigatorTestWithBrowserSideNavigation; |
| 36 class RenderFrameHost; |
37 class RenderFrameHostDelegate; | 37 class RenderFrameHostDelegate; |
| 38 class RenderFrameHostImpl; |
38 class RenderFrameHostManagerTest; | 39 class RenderFrameHostManagerTest; |
39 class RenderFrameProxyHost; | 40 class RenderFrameProxyHost; |
40 class RenderViewHost; | 41 class RenderViewHost; |
41 class RenderViewHostImpl; | 42 class RenderViewHostImpl; |
42 class RenderWidgetHostDelegate; | 43 class RenderWidgetHostDelegate; |
43 class RenderWidgetHostView; | 44 class RenderWidgetHostView; |
44 class TestWebContents; | 45 class TestWebContents; |
45 class WebUIImpl; | 46 class WebUIImpl; |
46 struct CommonNavigationParams; | 47 struct CommonNavigationParams; |
47 struct FrameReplicationState; | 48 struct FrameReplicationState; |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 RenderFrameHost* new_host, | 141 RenderFrameHost* new_host, |
141 bool is_main_frame) = 0; | 142 bool is_main_frame) = 0; |
142 // TODO(nasko): This should be removed once extensions no longer use | 143 // TODO(nasko): This should be removed once extensions no longer use |
143 // NotificationService. See https://crbug.com/462682. | 144 // NotificationService. See https://crbug.com/462682. |
144 virtual void NotifyMainFrameSwappedFromRenderManager( | 145 virtual void NotifyMainFrameSwappedFromRenderManager( |
145 RenderViewHost* old_host, | 146 RenderViewHost* old_host, |
146 RenderViewHost* new_host) = 0; | 147 RenderViewHost* new_host) = 0; |
147 virtual NavigationControllerImpl& | 148 virtual NavigationControllerImpl& |
148 GetControllerForRenderManager() = 0; | 149 GetControllerForRenderManager() = 0; |
149 | 150 |
| 151 // Creates a WebUI object for the given URL if one applies. Ownership of the |
| 152 // returned pointer will be passed to the caller. If no WebUI applies, |
| 153 // returns NULL. |
| 154 virtual scoped_ptr<WebUIImpl> CreateWebUIForRenderManager( |
| 155 const GURL& url) = 0; |
| 156 |
150 // Returns the navigation entry of the current navigation, or NULL if there | 157 // Returns the navigation entry of the current navigation, or NULL if there |
151 // is none. | 158 // is none. |
152 virtual NavigationEntry* | 159 virtual NavigationEntry* |
153 GetLastCommittedNavigationEntryForRenderManager() = 0; | 160 GetLastCommittedNavigationEntryForRenderManager() = 0; |
154 | 161 |
155 // Returns true if the location bar should be focused by default rather than | 162 // Returns true if the location bar should be focused by default rather than |
156 // the page contents. The view calls this function when the tab is focused | 163 // the page contents. The view calls this function when the tab is focused |
157 // to see what it should do. | 164 // to see what it should do. |
158 virtual bool FocusLocationBarByDefault() = 0; | 165 virtual bool FocusLocationBarByDefault() = 0; |
159 | 166 |
(...skipping 12 matching lines...) Expand all Loading... |
172 | 179 |
173 protected: | 180 protected: |
174 virtual ~Delegate() {} | 181 virtual ~Delegate() {} |
175 }; | 182 }; |
176 | 183 |
177 // Used with FrameTree::ForEach to delete RenderFrameHosts pending shutdown | 184 // Used with FrameTree::ForEach to delete RenderFrameHosts pending shutdown |
178 // from a FrameTreeNode's RenderFrameHostManager. Used during destruction of | 185 // from a FrameTreeNode's RenderFrameHostManager. Used during destruction of |
179 // WebContentsImpl. | 186 // WebContentsImpl. |
180 static bool ClearRFHsPendingShutdown(FrameTreeNode* node); | 187 static bool ClearRFHsPendingShutdown(FrameTreeNode* node); |
181 | 188 |
182 // Used with FrameTree::ForEach to destroy all WebUI instances associated with | |
183 // RenderFrameHosts. | |
184 static bool ClearWebUIInstances(FrameTreeNode* node); | |
185 | |
186 // All three delegate pointers must be non-NULL and are not owned by this | 189 // All three delegate pointers must be non-NULL and are not owned by this |
187 // class. They must outlive this class. The RenderViewHostDelegate and | 190 // class. They must outlive this class. The RenderViewHostDelegate and |
188 // RenderWidgetHostDelegate are what will be installed into all | 191 // RenderWidgetHostDelegate are what will be installed into all |
189 // RenderViewHosts that are created. | 192 // RenderViewHosts that are created. |
190 // | 193 // |
191 // You must call Init() before using this class. | 194 // You must call Init() before using this class. |
192 RenderFrameHostManager( | 195 RenderFrameHostManager( |
193 FrameTreeNode* frame_tree_node, | 196 FrameTreeNode* frame_tree_node, |
194 RenderFrameHostDelegate* render_frame_delegate, | 197 RenderFrameHostDelegate* render_frame_delegate, |
195 RenderViewHostDelegate* render_view_delegate, | 198 RenderViewHostDelegate* render_view_delegate, |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 // SiteInstance. Returns nullptr if this WebContents isn't part of inner/outer | 242 // SiteInstance. Returns nullptr if this WebContents isn't part of inner/outer |
240 // relationship. | 243 // relationship. |
241 RenderFrameProxyHost* GetProxyToOuterDelegate(); | 244 RenderFrameProxyHost* GetProxyToOuterDelegate(); |
242 | 245 |
243 // Removes the FrameTreeNode in the outer WebContents that represents this | 246 // Removes the FrameTreeNode in the outer WebContents that represents this |
244 // FrameTreeNode. | 247 // FrameTreeNode. |
245 // TODO(lazyboy): This does not belong to RenderFrameHostManager, move it to | 248 // TODO(lazyboy): This does not belong to RenderFrameHostManager, move it to |
246 // somehwere else. | 249 // somehwere else. |
247 void RemoveOuterDelegateFrame(); | 250 void RemoveOuterDelegateFrame(); |
248 | 251 |
249 // Returns the pending RenderFrameHost, or null if there is no pending one. | 252 // Returns the pending RenderFrameHost, or NULL if there is no pending one. |
250 RenderFrameHostImpl* pending_frame_host() const { | 253 RenderFrameHostImpl* pending_frame_host() const { |
251 return pending_render_frame_host_.get(); | 254 return pending_render_frame_host_.get(); |
252 } | 255 } |
253 | 256 |
254 // Returns the speculative RenderFrameHost, or null if there is no speculative | 257 // Returns the speculative RenderFrameHost, or null if there is no speculative |
255 // one. | 258 // one. |
256 RenderFrameHostImpl* speculative_frame_host() const { | 259 RenderFrameHostImpl* speculative_frame_host() const { |
257 return speculative_render_frame_host_.get(); | 260 return speculative_render_frame_host_.get(); |
258 } | 261 } |
259 | 262 |
260 // TODO(creis): Remove this when we no longer use RVH for navigation. | 263 // TODO(creis): Remove this when we no longer use RVH for navigation. |
261 RenderViewHostImpl* pending_render_view_host() const; | 264 RenderViewHostImpl* pending_render_view_host() const; |
262 | 265 |
263 // Returns the WebUI associated with the ongoing navigation, it being either | 266 // Returns the current committed Web UI or NULL if none applies. |
264 // the active or the pending one from the navigating RenderFrameHost. Returns | 267 WebUIImpl* web_ui() const { return web_ui_.get(); } |
265 // null if there's no ongoing navigation or if no WebUI applies. | 268 |
266 WebUIImpl* GetNavigatingWebUI() const; | 269 // Returns the Web UI for the pending navigation, or NULL of none applies. |
| 270 WebUIImpl* pending_web_ui() const { |
| 271 return pending_web_ui_.get() ? pending_web_ui_.get() : |
| 272 pending_and_current_web_ui_.get(); |
| 273 } |
| 274 |
| 275 // PlzNavigate |
| 276 // Returns the speculative WebUI for the navigation (a newly created one or |
| 277 // the current one if it should be reused). If none is set returns nullptr. |
| 278 WebUIImpl* speculative_web_ui() const { |
| 279 return should_reuse_web_ui_ ? web_ui_.get() : speculative_web_ui_.get(); |
| 280 } |
267 | 281 |
268 // Called when we want to instruct the renderer to navigate to the given | 282 // Called when we want to instruct the renderer to navigate to the given |
269 // navigation entry. It may create a new RenderFrameHost or re-use an existing | 283 // navigation entry. It may create a new RenderFrameHost or re-use an existing |
270 // one. The RenderFrameHost to navigate will be returned. Returns NULL if one | 284 // one. The RenderFrameHost to navigate will be returned. Returns NULL if one |
271 // could not be created. |dest_url| takes precedence over the |frame_entry|'s | 285 // could not be created. |dest_url| takes precedence over the |frame_entry|'s |
272 // url (this is necessary because ReloadOriginalRequest navigates to a | 286 // url (this is necessary because ReloadOriginalRequest navigates to a |
273 // different URL than the last committed entry, without modifying it). | 287 // different URL than the last committed entry, without modifying it). |
274 RenderFrameHostImpl* Navigate(const GURL& dest_url, | 288 RenderFrameHostImpl* Navigate(const GURL& dest_url, |
275 const FrameNavigationEntry& frame_entry, | 289 const FrameNavigationEntry& frame_entry, |
276 const NavigationEntryImpl& entry); | 290 const NavigationEntryImpl& entry); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 | 346 |
333 // Called when this frame's opener is changed to the frame specified by | 347 // Called when this frame's opener is changed to the frame specified by |
334 // |opener_routing_id| in |source_site_instance|'s process. This change | 348 // |opener_routing_id| in |source_site_instance|'s process. This change |
335 // could come from either the current RenderFrameHost or one of the | 349 // could come from either the current RenderFrameHost or one of the |
336 // proxies (e.g., window.open that targets a RemoteFrame by name). The | 350 // proxies (e.g., window.open that targets a RemoteFrame by name). The |
337 // updated opener will be forwarded to any other RenderFrameProxies and | 351 // updated opener will be forwarded to any other RenderFrameProxies and |
338 // RenderFrames for this FrameTreeNode. | 352 // RenderFrames for this FrameTreeNode. |
339 void DidChangeOpener(int opener_routing_id, | 353 void DidChangeOpener(int opener_routing_id, |
340 SiteInstance* source_site_instance); | 354 SiteInstance* source_site_instance); |
341 | 355 |
342 // Creates and initializes a RenderFrameHost. If |flags| has the | 356 // Sets the pending Web UI for the pending navigation, ensuring that the |
| 357 // bindings are appropriate compared to |bindings|. |
| 358 void SetPendingWebUI(const GURL& url, int bindings); |
| 359 |
| 360 // Creates and initializes a RenderFrameHost. The |web_ui| is an optional |
| 361 // input parameter used to double check bindings when swapping back in a |
| 362 // previously existing RenderFrameHost. If |flags| has the |
343 // CREATE_RF_SWAPPED_OUT bit set from the CreateRenderFrameFlags enum, it will | 363 // CREATE_RF_SWAPPED_OUT bit set from the CreateRenderFrameFlags enum, it will |
344 // initially be placed on the swapped out hosts list. If |view_routing_id_ptr| | 364 // initially be placed on the swapped out hosts list. If |view_routing_id_ptr| |
345 // is not nullptr it will be set to the routing id of the view associated with | 365 // is not nullptr it will be set to the routing id of the view associated with |
346 // the frame. | 366 // the frame. |
347 scoped_ptr<RenderFrameHostImpl> CreateRenderFrame(SiteInstance* instance, | 367 scoped_ptr<RenderFrameHostImpl> CreateRenderFrame(SiteInstance* instance, |
| 368 WebUIImpl* web_ui, |
348 int flags, | 369 int flags, |
349 int* view_routing_id_ptr); | 370 int* view_routing_id_ptr); |
350 | 371 |
351 // Helper method to create and initialize a RenderFrameProxyHost and return | 372 // Helper method to create and initialize a RenderFrameProxyHost and return |
352 // its routing id. | 373 // its routing id. |
353 int CreateRenderFrameProxy(SiteInstance* instance); | 374 int CreateRenderFrameProxy(SiteInstance* instance); |
354 | 375 |
355 // Creates proxies for a new child frame at FrameTreeNode |child| in all | 376 // Creates proxies for a new child frame at FrameTreeNode |child| in all |
356 // SiteInstances for which the current frame has proxies. This method is | 377 // SiteInstances for which the current frame has proxies. This method is |
357 // called on the parent of a new child frame before the child leaves the | 378 // called on the parent of a new child frame before the child leaves the |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
540 // SiteInstance's site and when we later call IsSameWebSite. If there is no | 561 // SiteInstance's site and when we later call IsSameWebSite. If there is no |
541 // current NavigationEntry, check the current SiteInstance's site, which might | 562 // current NavigationEntry, check the current SiteInstance's site, which might |
542 // already be committed to a Web UI URL (such as the NTP). | 563 // already be committed to a Web UI URL (such as the NTP). |
543 bool ShouldSwapBrowsingInstancesForNavigation( | 564 bool ShouldSwapBrowsingInstancesForNavigation( |
544 const GURL& current_effective_url, | 565 const GURL& current_effective_url, |
545 bool current_is_view_source_mode, | 566 bool current_is_view_source_mode, |
546 SiteInstance* new_site_instance, | 567 SiteInstance* new_site_instance, |
547 const GURL& new_effective_url, | 568 const GURL& new_effective_url, |
548 bool new_is_view_source_mode) const; | 569 bool new_is_view_source_mode) const; |
549 | 570 |
| 571 // Creates a new Web UI, ensuring that the bindings are appropriate compared |
| 572 // to |bindings|. |
| 573 scoped_ptr<WebUIImpl> CreateWebUI(const GURL& url, int bindings); |
| 574 |
| 575 // Returns true if it is safe to reuse the current WebUI when navigating from |
| 576 // |current_entry| to |new_url|. |
| 577 bool ShouldReuseWebUI( |
| 578 const NavigationEntry* current_entry, |
| 579 const GURL& new_url) const; |
| 580 |
550 // Returns the SiteInstance to use for the navigation. | 581 // Returns the SiteInstance to use for the navigation. |
551 SiteInstance* GetSiteInstanceForNavigation(const GURL& dest_url, | 582 SiteInstance* GetSiteInstanceForNavigation(const GURL& dest_url, |
552 SiteInstance* source_instance, | 583 SiteInstance* source_instance, |
553 SiteInstance* dest_instance, | 584 SiteInstance* dest_instance, |
554 SiteInstance* candidate_instance, | 585 SiteInstance* candidate_instance, |
555 ui::PageTransition transition, | 586 ui::PageTransition transition, |
556 bool dest_is_restore, | 587 bool dest_is_restore, |
557 bool dest_is_view_source_mode); | 588 bool dest_is_view_source_mode); |
558 | 589 |
559 // Returns a descriptor of the appropriate SiteInstance object for the given | 590 // Returns a descriptor of the appropriate SiteInstance object for the given |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
626 FrameTreeNode* skip_this_node); | 657 FrameTreeNode* skip_this_node); |
627 | 658 |
628 // Creates a RenderFrameHost and corresponding RenderViewHost if necessary. | 659 // Creates a RenderFrameHost and corresponding RenderViewHost if necessary. |
629 scoped_ptr<RenderFrameHostImpl> CreateRenderFrameHost(SiteInstance* instance, | 660 scoped_ptr<RenderFrameHostImpl> CreateRenderFrameHost(SiteInstance* instance, |
630 int32 view_routing_id, | 661 int32 view_routing_id, |
631 int32 frame_routing_id, | 662 int32 frame_routing_id, |
632 int32 widget_routing_id, | 663 int32 widget_routing_id, |
633 int flags); | 664 int flags); |
634 | 665 |
635 // PlzNavigate | 666 // PlzNavigate |
636 // Create and initialize a speculative RenderFrameHost for an ongoing | 667 // Creates and initializes a speculative RenderFrameHost and/or WebUI for an |
637 // navigation. It might be destroyed and re-created later if the navigation | 668 // ongoing navigation. They might be destroyed and re-created later if the |
638 // is redirected to a different SiteInstance. | 669 // navigation is redirected to a different SiteInstance. |
639 bool CreateSpeculativeRenderFrameHost(SiteInstance* old_instance, | 670 bool CreateSpeculativeRenderFrameHost(const GURL& url, |
640 SiteInstance* new_instance); | 671 SiteInstance* old_instance, |
| 672 SiteInstance* new_instance, |
| 673 int bindings); |
641 | 674 |
642 // Sets up the necessary state for a new RenderViewHost. If |proxy| is not | 675 // Sets up the necessary state for a new RenderViewHost. If |proxy| is not |
643 // null, it creates a RenderFrameProxy in the target renderer process which is | 676 // null, it creates a RenderFrameProxy in the target renderer process which is |
644 // used to route IPC messages when in swapped out state. Returns early if the | 677 // used to route IPC messages when in swapped out state. Returns early if the |
645 // RenderViewHost has already been initialized for another RenderFrameHost. | 678 // RenderViewHost has already been initialized for another RenderFrameHost. |
646 bool InitRenderView(RenderViewHostImpl* render_view_host, | 679 bool InitRenderView(RenderViewHostImpl* render_view_host, |
647 RenderFrameProxyHost* proxy); | 680 RenderFrameProxyHost* proxy); |
648 | 681 |
649 // Initialization for RenderFrameHost uses the same sequence as InitRenderView | 682 // Initialization for RenderFrameHost uses the same sequence as InitRenderView |
650 // above. | 683 // above. |
651 bool InitRenderFrame(RenderFrameHostImpl* render_frame_host); | 684 bool InitRenderFrame(RenderFrameHostImpl* render_frame_host); |
652 | 685 |
653 // Sets the pending RenderFrameHost to be the active one. If the current one | 686 // Sets the pending RenderFrameHost/WebUI to be the active one. Note that this |
654 // is being reused this method might update its active WebUI. Call this for | 687 // doesn't require the pending render_frame_host_ pointer to be non-NULL, |
655 // every commit. | 688 // since there could be Web UI switching as well. Call this for every commit. |
656 // If PlzNavigate is enabled the method will set the speculative (not pending) | 689 // If PlzNavigate is enabled the method will set the speculative (not pending) |
657 // RenderFrameHost to be the active one. | 690 // RenderFrameHost to be the active one. |
658 void CommitPending(); | 691 void CommitPending(); |
659 | 692 |
660 // Helper to call CommitPending() in all necessary cases. | 693 // Helper to call CommitPending() in all necessary cases. |
661 void CommitPendingIfNecessary(RenderFrameHostImpl* render_frame_host, | 694 void CommitPendingIfNecessary(RenderFrameHostImpl* render_frame_host, |
662 bool was_caused_by_user_gesture); | 695 bool was_caused_by_user_gesture); |
663 | 696 |
664 // Commits any pending sandbox flag updates when the renderer's frame | 697 // Commits any pending sandbox flag updates when the renderer's frame |
665 // navigates. | 698 // navigates. |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
701 RenderFrameHostImpl* UpdateStateForNavigate( | 734 RenderFrameHostImpl* UpdateStateForNavigate( |
702 const GURL& dest_url, | 735 const GURL& dest_url, |
703 SiteInstance* source_instance, | 736 SiteInstance* source_instance, |
704 SiteInstance* dest_instance, | 737 SiteInstance* dest_instance, |
705 ui::PageTransition transition, | 738 ui::PageTransition transition, |
706 bool dest_is_restore, | 739 bool dest_is_restore, |
707 bool dest_is_view_source_mode, | 740 bool dest_is_view_source_mode, |
708 const GlobalRequestID& transferred_request_id, | 741 const GlobalRequestID& transferred_request_id, |
709 int bindings); | 742 int bindings); |
710 | 743 |
711 // Updates the pending WebUI of the current RenderFrameHost for a same-site | |
712 // navigation. | |
713 void UpdatePendingWebUIOnCurrentFrameHost(const GURL& dest_url, | |
714 int entry_bindings); | |
715 | |
716 // Called when a renderer process is starting to close. We should not | 744 // Called when a renderer process is starting to close. We should not |
717 // schedule new navigations in its swapped out RenderFrameHosts after this. | 745 // schedule new navigations in its swapped out RenderFrameHosts after this. |
718 void RendererProcessClosing(RenderProcessHost* render_process_host); | 746 void RendererProcessClosing(RenderProcessHost* render_process_host); |
719 | 747 |
720 // For use in creating RenderFrameHosts. | 748 // For use in creating RenderFrameHosts. |
721 FrameTreeNode* frame_tree_node_; | 749 FrameTreeNode* frame_tree_node_; |
722 | 750 |
723 // Our delegate, not owned by us. Guaranteed non-NULL. | 751 // Our delegate, not owned by us. Guaranteed non-NULL. |
724 Delegate* delegate_; | 752 Delegate* delegate_; |
725 | 753 |
726 // Implemented by the owner of this class. These delegates are installed into | 754 // Implemented by the owner of this class. These delegates are installed into |
727 // all the RenderFrameHosts that we create. | 755 // all the RenderFrameHosts that we create. |
728 RenderFrameHostDelegate* render_frame_delegate_; | 756 RenderFrameHostDelegate* render_frame_delegate_; |
729 RenderViewHostDelegate* render_view_delegate_; | 757 RenderViewHostDelegate* render_view_delegate_; |
730 RenderWidgetHostDelegate* render_widget_delegate_; | 758 RenderWidgetHostDelegate* render_widget_delegate_; |
731 | 759 |
732 // Our RenderFrameHost which is responsible for all communication with a child | 760 // Our RenderFrameHost and its associated Web UI (if any, will be NULL for |
733 // RenderFrame instance. | 761 // non-WebUI pages). This object is responsible for all communication with |
| 762 // a child RenderFrame instance. |
734 // For now, RenderFrameHost keeps a RenderViewHost in its SiteInstance alive. | 763 // For now, RenderFrameHost keeps a RenderViewHost in its SiteInstance alive. |
735 // Eventually, RenderViewHost will be replaced with a page context. | 764 // Eventually, RenderViewHost will be replaced with a page context. |
736 scoped_ptr<RenderFrameHostImpl> render_frame_host_; | 765 scoped_ptr<RenderFrameHostImpl> render_frame_host_; |
| 766 scoped_ptr<WebUIImpl> web_ui_; |
737 | 767 |
738 // A RenderFrameHost used to load a cross-site page. This remains hidden | 768 // A RenderFrameHost used to load a cross-site page. This remains hidden |
739 // while a cross-site request is pending until it calls DidNavigate. | 769 // while a cross-site request is pending until it calls DidNavigate. It may |
740 // Note: This member is not used in PlzNavigate. | 770 // have an associated Web UI, in which case the Web UI pointer will be non- |
| 771 // NULL. |
| 772 // |
| 773 // The |pending_web_ui_| may be non-NULL even when the |
| 774 // |pending_render_frame_host_| is NULL. This will happen when we're |
| 775 // transitioning between two Web UI pages: the RFH won't be swapped, so the |
| 776 // pending pointer will be unused, but there will be a pending Web UI |
| 777 // associated with the navigation. |
| 778 // Note: This is not used in PlzNavigate. |
741 scoped_ptr<RenderFrameHostImpl> pending_render_frame_host_; | 779 scoped_ptr<RenderFrameHostImpl> pending_render_frame_host_; |
742 | 780 |
743 // If a pending request needs to be transferred to another process, this | 781 // If a pending request needs to be transferred to another process, this |
744 // owns the request until it's transferred to the new process, so it will be | 782 // owns the request until it's transferred to the new process, so it will be |
745 // cleaned up if the navigation is cancelled. Otherwise, this is NULL. | 783 // cleaned up if the navigation is cancelled. Otherwise, this is NULL. |
746 scoped_ptr<CrossSiteTransferringRequest> cross_site_transferring_request_; | 784 scoped_ptr<CrossSiteTransferringRequest> cross_site_transferring_request_; |
747 | 785 |
748 // This is used to temporarily store the NavigationHandle during | 786 // This is used to temporarily store the NavigationHandle during |
749 // transferring navigations. The handle needs to be stored because the old | 787 // transferring navigations. The handle needs to be stored because the old |
750 // RenderFrameHost may be discarded before a new RenderFrameHost is created | 788 // RenderFrameHost may be discarded before a new RenderFrameHost is created |
751 // for the navigation. | 789 // for the navigation. |
752 // PlzNavigate: this will never be set since there are no transferring | 790 // PlzNavigate: this will never be set since there are no transferring |
753 // navigations in PlzNavigate. | 791 // navigations in PlzNavigate. |
754 scoped_ptr<NavigationHandleImpl> transfer_navigation_handle_; | 792 scoped_ptr<NavigationHandleImpl> transfer_navigation_handle_; |
755 | 793 |
| 794 // If either of these is non-NULL, the pending navigation is to a chrome: |
| 795 // page. The scoped_ptr is used if pending_web_ui_ != web_ui_, the WeakPtr is |
| 796 // used for when they reference the same object. If either is non-NULL, the |
| 797 // other should be NULL. |
| 798 // Note: These are not used in PlzNavigate. |
| 799 scoped_ptr<WebUIImpl> pending_web_ui_; |
| 800 base::WeakPtr<WebUIImpl> pending_and_current_web_ui_; |
| 801 |
756 class RenderFrameProxyHostMap; | 802 class RenderFrameProxyHostMap; |
757 scoped_ptr<RenderFrameProxyHostMap> proxy_hosts_; | 803 scoped_ptr<RenderFrameProxyHostMap> proxy_hosts_; |
758 | 804 |
759 // A list of RenderFrameHosts waiting to shut down after swapping out. We use | 805 // A list of RenderFrameHosts waiting to shut down after swapping out. We use |
760 // a linked list since we expect frequent deletes and no indexed access, and | 806 // a linked list since we expect frequent deletes and no indexed access, and |
761 // because sets don't appear to support linked_ptrs. | 807 // because sets don't appear to support linked_ptrs. |
762 typedef std::list<linked_ptr<RenderFrameHostImpl> > RFHPendingDeleteList; | 808 typedef std::list<linked_ptr<RenderFrameHostImpl> > RFHPendingDeleteList; |
763 RFHPendingDeleteList pending_delete_hosts_; | 809 RFHPendingDeleteList pending_delete_hosts_; |
764 | 810 |
765 // The intersitial page currently shown if any, not own by this class | 811 // The intersitial page currently shown if any, not own by this class |
766 // (the InterstitialPage is self-owned, it deletes itself when hidden). | 812 // (the InterstitialPage is self-owned, it deletes itself when hidden). |
767 InterstitialPageImpl* interstitial_page_; | 813 InterstitialPageImpl* interstitial_page_; |
768 | 814 |
769 // PlzNavigate | 815 // PlzNavigate |
770 // Stores a speculative RenderFrameHost which is created early in a navigation | 816 // These members store a speculative RenderFrameHost and WebUI. They are |
771 // so a renderer process can be started in parallel, if needed. | 817 // created early in a navigation so a renderer process can be started in |
772 // This is purely a performance optimization and is not required for correct | 818 // parallel, if needed. This is purely a performance optimization and is not |
773 // behavior. The speculative RenderFrameHost might be discarded later on if | 819 // required for correct behavior. The created RenderFrameHost might be |
774 // the final URL's SiteInstance isn't compatible with the one used to create | 820 // discarded later on if the final URL's SiteInstance isn't compatible with |
775 // it. | 821 // what was used to create it. |
776 // Note: PlzNavigate only uses the speculative RenderFrameHost, not the | 822 // Note: PlzNavigate only uses speculative RenderFrameHost and WebUI, not |
777 // pending one. | 823 // the pending ones. |
778 scoped_ptr<RenderFrameHostImpl> speculative_render_frame_host_; | 824 scoped_ptr<RenderFrameHostImpl> speculative_render_frame_host_; |
| 825 scoped_ptr<WebUIImpl> speculative_web_ui_; |
| 826 |
| 827 // PlzNavigate |
| 828 // If true at navigation commit time the current WebUI will be kept instead of |
| 829 // creating a new one. |
| 830 bool should_reuse_web_ui_; |
779 | 831 |
780 base::WeakPtrFactory<RenderFrameHostManager> weak_factory_; | 832 base::WeakPtrFactory<RenderFrameHostManager> weak_factory_; |
781 | 833 |
782 DISALLOW_COPY_AND_ASSIGN(RenderFrameHostManager); | 834 DISALLOW_COPY_AND_ASSIGN(RenderFrameHostManager); |
783 }; | 835 }; |
784 | 836 |
785 } // namespace content | 837 } // namespace content |
786 | 838 |
787 #endif // CONTENT_BROWSER_FRAME_HOST_RENDER_FRAME_HOST_MANAGER_H_ | 839 #endif // CONTENT_BROWSER_FRAME_HOST_RENDER_FRAME_HOST_MANAGER_H_ |
OLD | NEW |