| Index: chrome/browser/prerender/prerender_handle.h
|
| diff --git a/chrome/browser/prerender/prerender_handle.h b/chrome/browser/prerender/prerender_handle.h
|
| index 90a9dcc3f1eb0dd4e2e4a35676d2512f4ccc359b..cb90a84ff43d17eda7bd2eddd29fc43cbf3d171c 100644
|
| --- a/chrome/browser/prerender/prerender_handle.h
|
| +++ b/chrome/browser/prerender/prerender_handle.h
|
| @@ -7,6 +7,7 @@
|
|
|
| #include "base/basictypes.h"
|
| #include "base/memory/weak_ptr.h"
|
| +#include "base/observer_list.h"
|
| #include "base/threading/non_thread_safe.h"
|
| #include "chrome/browser/prerender/prerender_manager.h"
|
|
|
| @@ -26,11 +27,34 @@ class PrerenderContents;
|
| // 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 {
|
| +class PrerenderHandle : public base::NonThreadSafe,
|
| + public PrerenderContents::Observer {
|
| public:
|
| + class Observer {
|
| + public:
|
| + virtual ~Observer();
|
| +
|
| + // 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();
|
| + };
|
| +
|
| // Before calling the destructor, the caller must invalidate the handle by
|
| // calling either OnNavigateAway or OnCancel.
|
| - ~PrerenderHandle();
|
| + virtual ~PrerenderHandle();
|
| +
|
| + void AddObserver(Observer* observer);
|
| + void RemoveObserver(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
|
| @@ -45,15 +69,14 @@ 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 handle has been canceled.
|
| + bool has_been_canceled() const {
|
| + return has_been_canceled_;
|
| + }
|
|
|
| - // 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 handle has associated prerender data. It is false
|
| + // for canceled prerenders, and also for pending prerenders.
|
| + bool IsValid() const;
|
|
|
| // True if this prerender is currently active.
|
| bool IsPrerendering() const;
|
| @@ -66,8 +89,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;
|
| +
|
| + ObserverList<Observer> observer_list_;
|
|
|
| + bool has_been_canceled_;
|
| base::WeakPtr<PrerenderManager::PrerenderData> prerender_data_;
|
| base::WeakPtrFactory<PrerenderHandle> weak_ptr_factory_;
|
|
|
|
|