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

Unified Diff: chrome/browser/prerender/prerender_handle.h

Issue 11316311: Make PrerenderHandle an observer of PrerenderContents. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase trunk & add upstream remediation Created 8 years 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: 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_;

Powered by Google App Engine
This is Rietveld 408576698