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

Unified Diff: content/browser/renderer_host/resource_dispatcher_host.cc

Issue 7038012: Safely cancel prerenders on threads other than the UI thread (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: sync 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
Index: content/browser/renderer_host/resource_dispatcher_host.cc
===================================================================
--- content/browser/renderer_host/resource_dispatcher_host.cc (revision 86075)
+++ content/browser/renderer_host/resource_dispatcher_host.cc (working copy)
@@ -26,6 +26,7 @@
#include "chrome/browser/external_protocol_handler.h"
#include "chrome/browser/net/url_request_tracking.h"
#include "chrome/browser/prerender/prerender_manager.h"
+#include "chrome/browser/prerender/prerender_tracker.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/renderer_host/download_resource_handler.h"
#include "chrome/browser/renderer_host/safe_browsing_resource_handler.h"
@@ -432,7 +433,9 @@
}
const GURL referrer = MaybeStripReferrer(request_data.referrer);
- const bool is_prerendering = IsPrerenderingChildRoutePair(child_id, route_id);
+ const bool is_prerendering =
+ prerender::PrerenderTracker::GetInstance()->IsPrerenderingOnIOThread(
+ child_id, route_id);
// Handle a PREFETCH resource type. If prefetch is disabled, squelch the
// request. If prerendering is enabled, trigger a prerender for the URL
@@ -467,16 +470,11 @@
// Abort any prerenders that spawn requests that use invalid HTTP methods.
if (is_prerendering &&
!prerender::PrerenderManager::IsValidHttpMethod(request_data.method)) {
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- NewRunnableFunction(
- prerender::DestroyPreloadForRenderView,
- resource_context.prerender_manager(),
- child_id,
- route_id,
- prerender::FINAL_STATUS_INVALID_HTTP_METHOD));
- AbortRequestBeforeItStarts(filter_, sync_result, route_id, request_id);
- return;
+ if (prerender::PrerenderTracker::GetInstance()->TryCancelOnIOThread(
+ child_id, route_id, prerender::FINAL_STATUS_INVALID_HTTP_METHOD)) {
+ AbortRequestBeforeItStarts(filter_, sync_result, route_id, request_id);
+ return;
+ }
}
// Construct the event handler.
@@ -2036,29 +2034,7 @@
}
}
-void ResourceDispatcherHost::AddPrerenderChildRoutePair(int child_id,
- int route_id) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- DCHECK(!IsPrerenderingChildRoutePair(child_id, route_id));
- prerender_child_route_pairs_.insert(std::make_pair(child_id, route_id));
-}
-void ResourceDispatcherHost::RemovePrerenderChildRoutePair(int child_id,
- int route_id) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- DCHECK(IsPrerenderingChildRoutePair(child_id, route_id));
- prerender_child_route_pairs_.erase(std::make_pair(child_id, route_id));
-}
-
-bool ResourceDispatcherHost::IsPrerenderingChildRoutePair(int child_id,
- int route_id) const {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- std::pair<int, int> c_r_pair = std::make_pair(child_id, route_id);
- return (prerender_child_route_pairs_.find(c_r_pair) !=
- prerender_child_route_pairs_.end());
-}
-
-
// static
bool ResourceDispatcherHost::is_prefetch_enabled() {
return is_prefetch_enabled_;

Powered by Google App Engine
This is Rietveld 408576698