summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorshishir@chromium.org <shishir@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-09 21:31:10 +0000
committershishir@chromium.org <shishir@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-09 21:31:10 +0000
commit3a6bf369258265d279cafdd95119382e71c8add0 (patch)
tree24cb6cdbd5d08da78e70f8d8c55d82b8d6ec3a57 /chrome
parent2755179b2322a31a8f63a00e4913c4fafbd74574 (diff)
downloadchromium_src-3a6bf369258265d279cafdd95119382e71c8add0.zip
chromium_src-3a6bf369258265d279cafdd95119382e71c8add0.tar.gz
chromium_src-3a6bf369258265d279cafdd95119382e71c8add0.tar.bz2
Making PrerenderContents::Destroy() public and using it to cleanup
PrerenderContents in the PrerenderManager. BUG=82028 TEST=Existing tests Review URL: http://codereview.chromium.org/6948008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@84686 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/prerender/prerender_contents.h8
-rw-r--r--chrome/browser/prerender/prerender_manager.cc13
2 files changed, 8 insertions, 13 deletions
diff --git a/chrome/browser/prerender/prerender_contents.h b/chrome/browser/prerender/prerender_contents.h
index 5bbc90d..33c5225 100644
--- a/chrome/browser/prerender/prerender_contents.h
+++ b/chrome/browser/prerender/prerender_contents.h
@@ -236,6 +236,10 @@ class PrerenderContents : public RenderViewHostDelegate,
// derived classes to clean up.
virtual void OnDestroy() {}
+ // Sets the final status, calls OnDestroy and adds |this| to the
+ // PrerenderManager's pending deletes list.
+ void Destroy(FinalStatus reason);
+
// Indicates whether to use the legacy code doing prerendering via
// a RenderViewHost (false), or whether the new TabContent based prerendering
// is to be used (true).
@@ -267,10 +271,6 @@ class PrerenderContents : public RenderViewHostDelegate,
void OnUpdateFaviconURL(int32 page_id, const std::vector<FaviconURL>& urls);
void OnMaybeCancelPrerenderForHTML5Media();
- // Remove |this| from the PrerenderManager, set a final status, and
- // delete |this|.
- void Destroy(FinalStatus reason);
-
// Returns the RenderViewHost Delegate for this prerender.
RenderViewHostDelegate* GetRenderViewHostDelegate();
diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc
index f76ae79..ad9efda 100644
--- a/chrome/browser/prerender/prerender_manager.cc
+++ b/chrome/browser/prerender/prerender_manager.cc
@@ -214,8 +214,7 @@ PrerenderManager::~PrerenderManager() {
while (!prerender_list_.empty()) {
PrerenderContentsData data = prerender_list_.front();
prerender_list_.pop_front();
- data.contents_->set_final_status(FINAL_STATUS_MANAGER_SHUTDOWN);
- delete data.contents_;
+ data.contents_->Destroy(FINAL_STATUS_MANAGER_SHUTDOWN);
}
DeletePendingDeleteEntries();
}
@@ -300,8 +299,7 @@ bool PrerenderManager::AddPreload(
while (prerender_list_.size() > max_elements_) {
data = prerender_list_.front();
prerender_list_.pop_front();
- data.contents_->set_final_status(FINAL_STATUS_EVICTED);
- delete data.contents_;
+ data.contents_->Destroy(FINAL_STATUS_EVICTED);
}
StartSchedulingPeriodicCleanups();
return true;
@@ -369,9 +367,7 @@ void PrerenderManager::DestroyPreloadForChildRouteIdPair(
FindPrerenderContentsForChildRouteIdPair(child_route_id_pair);
if (it != prerender_list_.end()) {
PrerenderContents* prerender_contents = it->contents_;
- prerender_contents->set_final_status(final_status);
- prerender_contents->OnDestroy();
- MoveEntryToPendingDelete(prerender_contents);
+ prerender_contents->Destroy(final_status);
}
}
@@ -382,8 +378,7 @@ void PrerenderManager::DeleteOldEntries() {
if (IsPrerenderElementFresh(data.start_time_))
return;
prerender_list_.pop_front();
- data.contents_->set_final_status(FINAL_STATUS_TIMED_OUT);
- delete data.contents_;
+ data.contents_->Destroy(FINAL_STATUS_TIMED_OUT);
}
MaybeStopSchedulingPeriodicCleanups();
}