| 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 a7a408b6e6817a810fa4fe124f0c3824af86f896..ad3b7103a51efea8e41b586e3ef9fdb7fda47538 100644 | 
| --- a/content/browser/web_contents/web_contents_impl.h | 
| +++ b/content/browser/web_contents/web_contents_impl.h | 
| @@ -504,6 +504,8 @@ class CONTENT_EXPORT WebContentsImpl | 
| // TODO(brettw) TestWebContents shouldn't exist! | 
| friend class TestWebContents; | 
|  | 
| +  class DestructionObserver; | 
| + | 
| // See WebContents::Create for a description of these parameters. | 
| WebContentsImpl(BrowserContext* browser_context, | 
| WebContentsImpl* opener); | 
| @@ -516,7 +518,15 @@ class CONTENT_EXPORT WebContentsImpl | 
| void RemoveObserver(WebContentsObserver* observer); | 
|  | 
| // Clears this tab's opener if it has been closed. | 
| -  void OnWebContentsDestroyed(WebContents* web_contents); | 
| +  void OnWebContentsDestroyed(WebContentsImpl* web_contents); | 
| + | 
| +  // Creats and adds to the map a destruction observer watching |web_contents|. | 
| +  // No-op if such an observer already exists. | 
| +  void AddDestructionObserver(WebContentsImpl* web_contents); | 
| + | 
| +  // Deletes and removes from the map a destruction observer | 
| +  // watching |web_contents|. No-op if there is no such observer. | 
| +  void RemoveDestructionObserver(WebContentsImpl* web_contents); | 
|  | 
| // Callback function when showing JS dialogs. | 
| void OnDialogClosed(RenderViewHost* rvh, | 
| @@ -737,6 +747,9 @@ class CONTENT_EXPORT WebContentsImpl | 
| typedef std::map<int, RenderWidgetHostView*> PendingWidgetViews; | 
| PendingWidgetViews pending_widget_views_; | 
|  | 
| +  typedef std::map<WebContentsImpl*, DestructionObserver*> DestructionObservers; | 
| +  DestructionObservers destruction_observers_; | 
| + | 
| // A list of observers notified when page state changes. Weak references. | 
| // This MUST be listed above render_manager_ since at destruction time the | 
| // latter might cause RenderViewHost's destructor to call us and we might use | 
|  |