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

Unified Diff: content/browser/web_contents/web_contents_impl.h

Issue 10171018: Create swapped-out opener RVHs after a process swap. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove parameter comments. Created 8 years, 8 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 side-by-side diff with in-line comments
Download patch
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 a2fcba70c531afd15b044b28188b341da42c0610..b330375ff7866bf269b66ad59f70c13a54a88622 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -19,6 +19,8 @@
#include "content/browser/web_contents/navigation_controller_impl.h"
#include "content/browser/web_contents/render_view_host_manager.h"
#include "content/common/content_export.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
#include "content/public/browser/render_view_host_delegate.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/renderer_preferences.h"
@@ -56,13 +58,15 @@ struct WebIntentData;
class CONTENT_EXPORT WebContentsImpl
: public NON_EXPORTED_BASE(content::WebContents),
public content::RenderViewHostDelegate,
- public RenderViewHostManager::Delegate {
+ public RenderViewHostManager::Delegate,
+ public content::NotificationObserver {
public:
// See WebContents::Create for a description of these parameters.
WebContentsImpl(content::BrowserContext* browser_context,
content::SiteInstance* site_instance,
int routing_id,
const WebContentsImpl* base_web_contents,
+ WebContentsImpl* opener,
SessionStorageNamespaceImpl* session_storage_namespace);
virtual ~WebContentsImpl();
@@ -117,10 +121,6 @@ class CONTENT_EXPORT WebContentsImpl
opener_web_ui_type_ = opener_web_ui_type;
}
- void set_has_opener(bool has_opener) {
- has_opener_ = has_opener;
- }
-
JavaBridgeDispatcherHostManager* java_bridge_dispatcher_host_manager() const {
return java_bridge_dispatcher_host_manager_.get();
}
@@ -340,7 +340,7 @@ class CONTENT_EXPORT WebContentsImpl
// RenderViewHostManager::Delegate -------------------------------------------
virtual bool CreateRenderViewForRenderManager(
- content::RenderViewHost* render_view_host) OVERRIDE;
+ content::RenderViewHost* render_view_host, int opener_route_id) OVERRIDE;
virtual void BeforeUnloadFiredFromRenderManager(
bool proceed,
bool* proceed_to_fire_unload) OVERRIDE;
@@ -350,6 +350,8 @@ class CONTENT_EXPORT WebContentsImpl
content::RenderViewHost* render_view_host) OVERRIDE;
virtual void UpdateRenderViewSizeForRenderManager() OVERRIDE;
virtual void NotifySwappedFromRenderManager() OVERRIDE;
+ virtual int CreateOpenerRenderViewsForRenderManager(
+ content::SiteInstance* instance) OVERRIDE;
virtual NavigationControllerImpl& GetControllerForRenderManager() OVERRIDE;
virtual WebUIImpl* CreateWebUIForRenderManager(const GURL& url) OVERRIDE;
virtual content::NavigationEntry*
@@ -359,6 +361,12 @@ class CONTENT_EXPORT WebContentsImpl
virtual void CreateViewAndSetSizeForRVH(
content::RenderViewHost* rvh) OVERRIDE;
+ // content::NotificationObserver ---------------------------------------------
+
+ virtual void Observe(int type,
+ const content::NotificationSource& source,
+ const content::NotificationDetails& details) OVERRIDE;
+
protected:
friend class content::WebContentsObserver;
@@ -386,6 +394,9 @@ class CONTENT_EXPORT WebContentsImpl
// TODO(brettw) TestWebContents shouldn't exist!
friend class content::TestWebContents;
+ // Clears this tab's opener if it has been closed.
+ void OnWebContentsDestroyed(content::WebContents* web_contents);
+
// Callback function when showing JS dialogs.
void OnDialogClosed(content::RenderViewHost* rvh,
IPC::Message* reply_msg,
@@ -512,6 +523,12 @@ class CONTENT_EXPORT WebContentsImpl
int merge_history_length,
int32 minimum_page_id);
+ // Recursively creates swapped out RenderViews for this tab's opener chain
+ // (including this tab) in the given SiteInstance, allowing other tabs to send
+ // cross-process JavaScript calls to their opener(s). Returns the route ID of
+ // this tab's RenderView for |instance|.
+ int CreateOpenerRenderViews(content::SiteInstance* instance);
+
// Misc non-view stuff -------------------------------------------------------
// Helper functions for sending notifications.
@@ -530,6 +547,9 @@ class CONTENT_EXPORT WebContentsImpl
// WARNING: this needs to be deleted after NavigationController.
base::PropertyBag property_bag_;
+ // Listen for notifications as well.
+ content::NotificationRegistrar registrar_;
+
// Data for core operation ---------------------------------------------------
// Delegate for notifying our owner about stuff. Not owned by us.
@@ -547,6 +567,10 @@ class CONTENT_EXPORT WebContentsImpl
// the observer list then.
ObserverList<content::WebContentsObserver> observers_;
+ // The tab that opened this tab, if any. Will be set to null if the opener
+ // is closed.
+ WebContentsImpl* opener_;
+
// Helper classes ------------------------------------------------------------
// Manages creation and swapping of render views.
@@ -674,9 +698,6 @@ class CONTENT_EXPORT WebContentsImpl
// Our view type. Default is VIEW_TYPE_WEB_CONTENTS.
content::ViewType view_type_;
- // Is there an opener associated with this?
- bool has_opener_;
-
// Color chooser that was opened by this tab.
content::ColorChooser* color_chooser_;
« no previous file with comments | « content/browser/web_contents/web_contents_delegate_unittest.cc ('k') | content/browser/web_contents/web_contents_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698