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

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

Issue 6901128: Cancel prerenders that spawn post requests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 8 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
Index: chrome/browser/prerender/prerender_manager.cc
diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc
index 2b80186a016af74f55beef070ac690160af1de9f..e12dead1031180caa82144c3b46d4acb1ace5216 100644
--- a/chrome/browser/prerender/prerender_manager.cc
+++ b/chrome/browser/prerender/prerender_manager.cc
@@ -147,6 +147,18 @@ void HandlePrefetchTagOnUIThread(
prerender_manager->AddPreload(child_route_id_pair, url, referrer);
}
+void DestroyPreloadForChildRouteIdPairOnUIThread(
+ const base::WeakPtr<PrerenderManager>& prerender_manager_weak_ptr,
+ const std::pair<int, int>& child_route_id_pair,
+ FinalStatus final_status) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ PrerenderManager* prerender_manager = prerender_manager_weak_ptr.get();
+ if (!prerender_manager || !prerender_manager->is_enabled())
cbentzel 2011/04/29 20:00:30 In this case, you should call even if the prerende
dominich 2011/04/29 21:13:52 Done.
+ return;
+ prerender_manager->DestroyPreloadForChildRouteIdPair(child_route_id_pair,
+ final_status);
+}
+
PrerenderManager::PrerenderManager(Profile* profile)
: rate_limit_enabled_(true),
enabled_(true),
@@ -306,6 +318,33 @@ void PrerenderManager::AddPendingPreload(
it->second.push_back(PendingContentsData(url, referrer));
}
+void PrerenderManager::DestroyPreloadForChildRouteIdPair(
+ const std::pair<int, int>& child_route_id_pair,
+ FinalStatus final_status) {
+ DCHECK(CalledOnValidThread());
+ for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin();
cbentzel 2011/04/29 20:00:30 There should only be on PrerenderContents per chil
dominich 2011/04/29 21:13:52 Done.
+ it != prerender_list_.end();) {
+ PrerenderContents* prerender_contents = it->contents_;
+
+ int child_id;
+ int route_id;
+ bool has_child_id = prerender_contents->GetChildId(&child_id);
+ bool has_route_id = has_child_id &&
+ prerender_contents->GetRouteId(&route_id);
+
+ if (has_child_id && has_route_id &&
+ child_id == child_route_id_pair.first &&
+ route_id == child_route_id_pair.second) {
+ prerender_contents->set_final_status(final_status);
+ RemovePendingPreload(prerender_contents);
+ delete prerender_contents;
+ it = prerender_list_.erase(it);
+ } else {
+ ++it;
+ }
+ }
+}
+
void PrerenderManager::DeleteOldEntries() {
DCHECK(CalledOnValidThread());
while (!prerender_list_.empty()) {

Powered by Google App Engine
This is Rietveld 408576698