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

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

Issue 98373010: Refactor prerender pending swap logic. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: I can order correctly words Created 7 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
« no previous file with comments | « chrome/browser/prerender/prerender_events.h ('k') | chrome/browser/prerender/prerender_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/prerender/prerender_manager.h
diff --git a/chrome/browser/prerender/prerender_manager.h b/chrome/browser/prerender/prerender_manager.h
index ba26731692f6cbc87762760ec931df56eb63ca16..b7f338b9c235a638dfb454a26c4fea8bc86490af 100644
--- a/chrome/browser/prerender/prerender_manager.h
+++ b/chrome/browser/prerender/prerender_manager.h
@@ -11,7 +11,6 @@
#include <utility>
#include <vector>
-#include "base/cancelable_callback.h"
#include "base/containers/hash_tables.h"
#include "base/gtest_prod_util.h"
#include "base/memory/scoped_ptr.h"
@@ -429,17 +428,17 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>,
// delayed, and handles all conditions which would cancel a pending swap.
class PendingSwap : public content::WebContentsObserver {
public:
- PendingSwap(PrerenderTracker* prerender_tracker,
+ PendingSwap(PrerenderManager* manager,
content::WebContents* target_contents,
PrerenderData* prerender_data,
- const GURL& url,
- const base::Closure& timeout_cb,
- const content::SessionStorageNamespace::MergeResultCallback&
- merge_result_cb);
+ const GURL& url);
virtual ~PendingSwap();
- const base::Closure& GetTimeoutCallback();
- const content::SessionStorageNamespace::MergeResultCallback&
- GetMergeResultCallback();
+
+ void set_swap_successful(bool swap_successful) {
+ swap_successful_ = swap_successful;
+ }
+
+ void BeginSwap();
// content::WebContentsObserver implementation.
virtual void ProvisionalChangeToMainFrameUrl(
@@ -465,21 +464,22 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>,
virtual void WebContentsDestroyed(content::WebContents* web_contents)
OVERRIDE;
- base::TimeDelta GetElapsedTime();
- void SwapSuccessful();
- const GURL& url() const { return url_; }
- content::WebContents* target_contents() const { return target_contents_; }
-
private:
- PrerenderTracker* prerender_tracker_;
+ void RecordEvent(PrerenderEvent event) const;
+
+ void OnMergeCompleted(content::SessionStorageNamespace::MergeResult result);
+ void OnMergeTimeout();
+
+ PrerenderManager* manager_;
content::WebContents* target_contents_;
PrerenderData* prerender_data_;
GURL url_;
- base::CancelableClosure timeout_cb_;
- base::CancelableCallback<
- void(content::SessionStorageNamespace::MergeResult)> merge_result_cb_;
base::TimeTicks start_time_;
std::vector<PrerenderTracker::ChildRouteIdPair> rvh_ids_;
+ base::OneShotTimer<PendingSwap> merge_timeout_;
+ bool swap_successful_;
+
+ base::WeakPtrFactory<PendingSwap> weak_factory_;
};
void SetPrerenderContentsFactory(
@@ -656,23 +656,14 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>,
bool cookies_exist);
void LoggedInPredictorDataReceived(scoped_ptr<LoggedInStateMap> new_map);
- void ProcessMergeResult(PrerenderData* prerender_data,
- bool timed_out,
- content::SessionStorageNamespace::MergeResult result);
-
void RecordEvent(PrerenderContents* contents, PrerenderEvent event) const;
- // Swaps a prerender for |url| into the tab, replacing |web_contents|.
- // Returns the new WebContents that was swapped in, or NULL if a swap-in
- // was not possible. Optionally, a |swap_candidate| can be specified.
- // Must be supplied if a merge has completed and we retry swap.
- // That's because we must skip the check whether a PrerenderData object that
- // could be swapped in is used for a pending merge, if the PrerenderData
- // object being considered is the one for which the merge has just completed
- // and which is intended to be swapped in.
+ // Swaps a prerender |prerender_data| for |url| into the tab, replacing
+ // |web_contents|. Returns the new WebContents that was swapped in, or NULL
+ // if a swap-in was not possible.
content::WebContents* SwapInternal(const GURL& url,
content::WebContents* web_contents,
- PrerenderData* swap_candidate);
+ PrerenderData* prerender_data);
// The configuration.
Config config_;
« no previous file with comments | « chrome/browser/prerender/prerender_events.h ('k') | chrome/browser/prerender/prerender_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698