| Index: content/browser/web_contents/web_contents_impl.h | 
| diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h | 
| index bffa888df9ff1d3da747d2bdef9ff9017f8c13e1..6c1439b11d0dcbc7f21c6d29a47cea0cf530581f 100644 | 
| --- a/content/browser/web_contents/web_contents_impl.h | 
| +++ b/content/browser/web_contents/web_contents_impl.h | 
| @@ -283,6 +283,9 @@ class CONTENT_EXPORT WebContentsImpl | 
| void WasHidden() override; | 
| bool NeedToFireBeforeUnload() override; | 
| void DispatchBeforeUnload(bool for_cross_site_transition) override; | 
| +  void AttachToOuterWebContentsFrame( | 
| +      WebContents* outer_web_contents, | 
| +      RenderFrameHost* outer_contents_frame) override; | 
| void Stop() override; | 
| WebContents* Clone() override; | 
| void ReloadFocusedFrame(bool ignore_cache) override; | 
| @@ -599,6 +602,7 @@ class CONTENT_EXPORT WebContentsImpl | 
| bool FocusLocationBarByDefault() override; | 
| void SetFocusToLocationBar(bool select_all) override; | 
| bool IsHidden() override; | 
| +  int GetOuterDelegateFrameTreeNodeID() override; | 
|  | 
| // NotificationObserver ------------------------------------------------------ | 
|  | 
| @@ -730,6 +734,34 @@ class CONTENT_EXPORT WebContentsImpl | 
|  | 
| class DestructionObserver; | 
|  | 
| +  // Represents a WebContents node in a tree of WebContents structure. | 
| +  // | 
| +  // Two WebContents with separate FrameTrees can be connected by | 
| +  // outer/inner relationship using this class. Note that their FrameTrees | 
| +  // still remain disjoint. | 
| +  // The root is referred to as "outer WebContents" and the descendents are | 
| +  // referred to as "inner WebContents". | 
| +  struct WebContentsTreeNode { | 
| +   public: | 
| +    WebContentsTreeNode(); | 
| +    ~WebContentsTreeNode(); | 
| + | 
| +    typedef std::set<WebContentsTreeNode*> ChildrenSet; | 
| + | 
| +    void ConnectToOuterWebContents(WebContentsImpl* outer_web_contents, | 
| +                                   RenderFrameHostImpl* outer_contents_frame); | 
| + | 
| +    int outer_contents_frame_tree_node_id() { | 
| +      return outer_contents_frame_tree_node_id_; | 
| +    } | 
| +    WebContentsImpl* outer_web_contents() { return outer_web_contents_; } | 
| + | 
| +   private: | 
| +    int outer_contents_frame_tree_node_id_; | 
| +    WebContentsImpl* outer_web_contents_; | 
| +    ChildrenSet inner_web_contents_tree_nodes_; | 
| +  }; | 
| + | 
| // See WebContents::Create for a description of these parameters. | 
| WebContentsImpl(BrowserContext* browser_context, | 
| WebContentsImpl* opener); | 
| @@ -1046,6 +1078,10 @@ class CONTENT_EXPORT WebContentsImpl | 
| // Manages the frame tree of the page and process swaps in each node. | 
| FrameTree frame_tree_; | 
|  | 
| +  // If this WebContents is part of a "tree of WebContents", then this contains | 
| +  // information about the structure. | 
| +  scoped_ptr<WebContentsTreeNode> node_; | 
| + | 
| // SavePackage, lazily created. | 
| scoped_refptr<SavePackage> save_package_; | 
|  | 
|  |