diff options
author | gavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-14 15:56:14 +0000 |
---|---|---|
committer | gavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-14 15:56:14 +0000 |
commit | b7259b68a9ecc222e18ed1875bdee4ff746365b6 (patch) | |
tree | 4d21567f6037e68babc66814530ff830d343bc92 /chrome/browser/prerender/prerender_handle.h | |
parent | f2f0fbb9b67423446f4cde83d189523edfab9ee8 (diff) | |
download | chromium_src-b7259b68a9ecc222e18ed1875bdee4ff746365b6.zip chromium_src-b7259b68a9ecc222e18ed1875bdee4ff746365b6.tar.gz chromium_src-b7259b68a9ecc222e18ed1875bdee4ff746365b6.tar.bz2 |
Handle interface to prerenders.
The prerender_manager now returns a PrerenderHandle* when creating a prerender; this is a useful object for canceling the prerender, as well as signaling navigation, etc...
BUG=None
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=146735
Review URL: https://chromiumcodereview.appspot.com/10553029
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@146740 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/prerender/prerender_handle.h')
-rw-r--r-- | chrome/browser/prerender/prerender_handle.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/chrome/browser/prerender/prerender_handle.h b/chrome/browser/prerender/prerender_handle.h new file mode 100644 index 0000000..90a9dcc --- /dev/null +++ b/chrome/browser/prerender/prerender_handle.h @@ -0,0 +1,79 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_PRERENDER_PRERENDER_HANDLE_H_ +#define CHROME_BROWSER_PRERENDER_PRERENDER_HANDLE_H_ + +#include "base/basictypes.h" +#include "base/memory/weak_ptr.h" +#include "base/threading/non_thread_safe.h" +#include "chrome/browser/prerender/prerender_manager.h" + +class GURL; + +namespace content { +class SessionStorageNamespace; +} + +namespace prerender { + +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 { + public: + // Before calling the destructor, the caller must invalidate the handle by + // calling either OnNavigateAway or OnCancel. + ~PrerenderHandle(); + + // 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. + void OnNavigateAway(); + + // The launcher has taken explicit action to remove this prerender (for + // instance, removing a link element from a document). This call invalidates + // the handle. If the prerender handle is already invalid, this call does + // 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; + + // True if we started a prerender, and it has finished loading. + bool IsFinishedLoading() const; + + private: + friend class PrerenderManager; + + explicit PrerenderHandle(PrerenderManager::PrerenderData* prerender_data); + + void SwapPrerenderDataWith(PrerenderHandle* other_prerender_handle); + + base::WeakPtr<PrerenderManager::PrerenderData> prerender_data_; + base::WeakPtrFactory<PrerenderHandle> weak_ptr_factory_; + + DISALLOW_COPY_AND_ASSIGN(PrerenderHandle); +}; + +} // namespace prerender + +#endif // CHROME_BROWSER_PRERENDER_PRERENDER_HANDLE_H_ |