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

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

Issue 7017014: Fix issues when PrerenderContents::Destroy() is called during TabContents destruction. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Remove unnecessary function call Created 9 years, 7 months 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_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/prerender/prerender_manager.cc
===================================================================
--- chrome/browser/prerender/prerender_manager.cc (revision 85626)
+++ chrome/browser/prerender/prerender_manager.cc (working copy)
@@ -284,13 +284,16 @@
PrerenderContents* prerender_contents =
CreatePrerenderContents(url, referrer);
- if (!prerender_contents || !prerender_contents->Init())
+ if (!prerender_contents)
return false;
// TODO(cbentzel): Move invalid checks here instead of PrerenderContents?
PrerenderContentsData data(prerender_contents, GetCurrentTime());
+ prerender_list_.push_back(data);
- prerender_list_.push_back(data);
+ if (!prerender_contents->Init())
+ return false;
+
if (IsControlGroup()) {
data.contents_->set_final_status(FINAL_STATUS_CONTROL_GROUP);
} else {
@@ -574,7 +577,7 @@
return true;
}
-void PrerenderManager::MoveEntryToPendingDelete(PrerenderContents* entry) {
+bool PrerenderManager::MoveEntryToPendingDelete(PrerenderContents* entry) {
DCHECK(CalledOnValidThread());
DCHECK(!IsPendingDelete(entry));
for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin();
@@ -583,14 +586,17 @@
if (it->contents_ == entry) {
RemovePendingPreload(entry);
prerender_list_.erase(it);
- break;
+ pending_delete_list_.push_back(entry);
Shishir 2011/05/18 18:34:32 I had initially pushed this outside the loop becau
mmenke 2011/05/18 18:50:37 Ok... Seems like the simplest way to do this robu
+
+ // Destroy the old TabContents relatively promptly to reduce resource
+ // usage, and in the case of HTML5 media, reduce the chance of playing
+ // any sound.
+ PostCleanupTask();
+
+ return true;
}
}
- pending_delete_list_.push_back(entry);
-
- // Destroy the old TabContents relatively promptly to reduce resource usage,
- // and in the case of HTML5 media, reduce the change of playing any sound.
- PostCleanupTask();
+ return false;
}
bool PrerenderManager::IsPendingDelete(PrerenderContents* entry) const {
« no previous file with comments | « chrome/browser/prerender/prerender_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698