summaryrefslogtreecommitdiffstats
path: root/chrome/browser/prerender/prerender_handle.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/prerender/prerender_handle.h')
-rw-r--r--chrome/browser/prerender/prerender_handle.h58
1 files changed, 39 insertions, 19 deletions
diff --git a/chrome/browser/prerender/prerender_handle.h b/chrome/browser/prerender/prerender_handle.h
index 90a9dcc..156b92d 100644
--- a/chrome/browser/prerender/prerender_handle.h
+++ b/chrome/browser/prerender/prerender_handle.h
@@ -23,20 +23,40 @@ class PrerenderContents;
// A class representing a running prerender to a client of the PrerenderManager.
// Methods on PrerenderManager which start prerenders return a caller-owned
// PrerenderHandle* to the client (or NULL if they are unable to start a
-// prerender). Because the PrerenderManager can stop running prerenders at any
-// time, callers may wish to check PrerenderHandle::IsValid() before operating
-// on their prerenders.
-class PrerenderHandle : public base::NonThreadSafe {
+// prerender). Calls on the handle of a prerender that is not running at no-ops.
+// Destroying a handle before a prerender starts will prevent it from ever
+// starting. Destroying a handle while a prerendering is running will stop the
+// prerender, without making any calls to the observer.
+class PrerenderHandle : public base::NonThreadSafe,
+ public PrerenderContents::Observer {
public:
+ class Observer {
+ public:
+ // Signals that the prerender has started running.
+ virtual void OnPrerenderStart(PrerenderHandle* handle) = 0;
+
+ // Signals that the prerender has stopped running.
+ virtual void OnPrerenderStop(PrerenderHandle* handle) = 0;
+
+ // Signals the discovery, through redirects, of a new alias for this
+ // prerender.
+ virtual void OnPrerenderAddAlias(PrerenderHandle* handle,
+ const GURL& alias_url) = 0;
+
+ protected:
+ Observer();
+ virtual ~Observer();
+ };
+
// Before calling the destructor, the caller must invalidate the handle by
// calling either OnNavigateAway or OnCancel.
- ~PrerenderHandle();
+ virtual ~PrerenderHandle();
+
+ void SetObserver(Observer* observer);
// The launcher is navigating away from the context that launched this
// prerender. The prerender will likely stay alive briefly though, in case we
- // are going through a redirect chain that will target it. This call
- // invalidates the handle. If the prerender handle is already invalid, this
- // call does nothing.
+ // are going through a redirect chain that will target it.
void OnNavigateAway();
// The launcher has taken explicit action to remove this prerender (for
@@ -45,16 +65,6 @@ class PrerenderHandle : public base::NonThreadSafe {
// nothing.
void OnCancel();
- // True if the prerender handle is still connected to a (pending or running)
- // prerender. Handles can become invalid through explicit requests by the
- // client, such as calling OnCancel() or OnNavigateAway(), and handles
- // also become invalid when the PrerenderManager cancels prerenders.
- bool IsValid() const;
-
- // True if this prerender was launched by a page that was itself being
- // prerendered, and so has not yet been started.
- bool IsPending() const;
-
// True if this prerender is currently active.
bool IsPrerendering() const;
@@ -66,7 +76,17 @@ class PrerenderHandle : public base::NonThreadSafe {
explicit PrerenderHandle(PrerenderManager::PrerenderData* prerender_data);
- void SwapPrerenderDataWith(PrerenderHandle* other_prerender_handle);
+ void AdoptPrerenderDataFrom(PrerenderHandle* other_handle);
+
+ // From PrerenderContents::Observer:
+ virtual void OnPrerenderStart(PrerenderContents* prerender_contents) OVERRIDE;
+ virtual void OnPrerenderStop(PrerenderContents* prerender_contents) OVERRIDE;
+ virtual void OnPrerenderAddAlias(PrerenderContents* prerender_contents,
+ const GURL& alias_url) OVERRIDE;
+ virtual void OnPrerenderCreatedMatchCompleteReplacement(
+ PrerenderContents* contents, PrerenderContents* replacement) OVERRIDE;
+
+ Observer* observer_;
base::WeakPtr<PrerenderManager::PrerenderData> prerender_data_;
base::WeakPtrFactory<PrerenderHandle> weak_ptr_factory_;