summaryrefslogtreecommitdiffstats
path: root/chrome/browser/prerender/prerender_tracker.cc
diff options
context:
space:
mode:
authormmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-23 21:27:58 +0000
committermmenke@chromium.org <mmenke@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-23 21:27:58 +0000
commit33bb16efa9e0c384d7b15b41fbffac3c62aebd13 (patch)
tree4aaed77a7c140df0b0e812d1502824d6ad388c90 /chrome/browser/prerender/prerender_tracker.cc
parentf9df5354fcb1ec28f06ac3cac00aba8962cb1cce (diff)
downloadchromium_src-33bb16efa9e0c384d7b15b41fbffac3c62aebd13.zip
chromium_src-33bb16efa9e0c384d7b15b41fbffac3c62aebd13.tar.gz
chromium_src-33bb16efa9e0c384d7b15b41fbffac3c62aebd13.tar.bz2
Cleanup PrerenderTracker in response to comments in
http://codereview.chromium.org/7038012/. BUG=83062 TEST=PrerenderStatusManagerTests, PrerenderBrowserTests Review URL: http://codereview.chromium.org/7060012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86342 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/prerender/prerender_tracker.cc')
-rw-r--r--chrome/browser/prerender/prerender_tracker.cc49
1 files changed, 30 insertions, 19 deletions
diff --git a/chrome/browser/prerender/prerender_tracker.cc b/chrome/browser/prerender/prerender_tracker.cc
index c82acd3..f191e8c 100644
--- a/chrome/browser/prerender/prerender_tracker.cc
+++ b/chrome/browser/prerender/prerender_tracker.cc
@@ -46,9 +46,7 @@ PrerenderTracker* PrerenderTracker::GetInstance() {
bool PrerenderTracker::TryUse(int child_id, int route_id) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- FinalStatus final_status = SetFinalStatus(child_id, route_id,
- FINAL_STATUS_USED);
- return final_status == FINAL_STATUS_USED;
+ return SetFinalStatus(child_id, route_id, FINAL_STATUS_USED, NULL);
}
bool PrerenderTracker::TryCancel(
@@ -58,8 +56,10 @@ bool PrerenderTracker::TryCancel(
DCHECK_NE(FINAL_STATUS_USED, final_status);
DCHECK(final_status >= 0 && final_status < FINAL_STATUS_MAX);
- final_status = SetFinalStatus(child_id, route_id, final_status);
- return final_status != FINAL_STATUS_USED && final_status != FINAL_STATUS_MAX;
+ FinalStatus actual_final_status;
+ SetFinalStatus(child_id, route_id, final_status, &actual_final_status);
+ return actual_final_status != FINAL_STATUS_USED &&
+ actual_final_status != FINAL_STATUS_MAX;
}
bool PrerenderTracker::TryCancelOnIOThread(
@@ -118,6 +118,12 @@ void PrerenderTracker::OnPrerenderingStarted(
std::make_pair(child_route_id_pair, RenderViewInfo(prerender_manager)));
}
+PrerenderTracker::PrerenderTracker() {
+}
+
+PrerenderTracker::~PrerenderTracker() {
+}
+
void PrerenderTracker::OnPrerenderingFinished(int child_id, int route_id) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK_GE(child_id, 0);
@@ -134,15 +140,11 @@ void PrerenderTracker::OnPrerenderingFinished(int child_id, int route_id) {
DCHECK_EQ(1u, num_erased);
}
-PrerenderTracker::PrerenderTracker() {
-}
-
-PrerenderTracker::~PrerenderTracker() {
-}
-
-FinalStatus PrerenderTracker::SetFinalStatus(int child_id, int route_id,
- FinalStatus final_status) {
- DCHECK(final_status >= FINAL_STATUS_USED && final_status < FINAL_STATUS_MAX);
+bool PrerenderTracker::SetFinalStatus(int child_id, int route_id,
+ FinalStatus desired_final_status,
+ FinalStatus* actual_final_status) {
+ DCHECK(desired_final_status >= FINAL_STATUS_USED &&
+ desired_final_status < FINAL_STATUS_MAX);
ChildRouteIdPair child_route_id_pair(child_id, route_id);
@@ -151,22 +153,31 @@ FinalStatus PrerenderTracker::SetFinalStatus(int child_id, int route_id,
final_status_map_.find(child_route_id_pair);
if (final_status_it == final_status_map_.end()) {
// The RenderView has already been either used or destroyed.
- return FINAL_STATUS_MAX;
+ if (actual_final_status)
+ *actual_final_status = FINAL_STATUS_MAX;
+ return false;
}
if (final_status_it->second.final_status == FINAL_STATUS_MAX) {
- final_status_it->second.final_status = final_status;
- if (final_status != FINAL_STATUS_USED) {
+ final_status_it->second.final_status = desired_final_status;
+ if (desired_final_status != FINAL_STATUS_USED) {
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
NewRunnableFunction(&DestroyPreloadForRenderView,
final_status_it->second.prerender_manager,
child_id,
route_id,
- final_status));
+ desired_final_status));
}
+
+ if (actual_final_status)
+ *actual_final_status = desired_final_status;
+ return true;
}
- return final_status_it->second.final_status;
+
+ if (actual_final_status)
+ *actual_final_status = final_status_it->second.final_status;
+ return false;
}
void PrerenderTracker::AddPrerenderOnIOThread(