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

Unified Diff: chrome/browser/renderer_host/resource_dispatcher_host_observer.cc

Issue 6966017: Remove a chrome dependency by removing Prerender from ResourceDispatcherHost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added generic resource_dispatcher_host_observer 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: chrome/browser/renderer_host/resource_dispatcher_host_observer.cc
diff --git a/chrome/browser/renderer_host/resource_dispatcher_host_observer.cc b/chrome/browser/renderer_host/resource_dispatcher_host_observer.cc
new file mode 100644
index 0000000000000000000000000000000000000000..92113092f4ce46e48dce37cd76bc7a6436bda199
--- /dev/null
+++ b/chrome/browser/renderer_host/resource_dispatcher_host_observer.cc
@@ -0,0 +1,80 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/logging.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/prerender/prerender_manager.h"
+#include "chrome/browser/prerender/prerender_tracker.h"
+#include "chrome/browser/renderer_host/resource_dispatcher_host_observer.h"
+#include "content/browser/browser_thread.h"
+#include "content/browser/resource_context.h"
+#include "content/common/resource_messages.h"
+#include "net/base/load_flags.h"
+
+ResourceDispatcherHostObserver::ResourceDispatcherHostObserver() {
+}
+
+ResourceDispatcherHostObserver::~ResourceDispatcherHostObserver() {
+}
+
+bool ResourceDispatcherHostObserver::ShouldBeginRequest(
+ int child_id, int route_id,
+ const ResourceHostMsg_Request& request_data,
+ const content::ResourceContext& resource_context,
+ const GURL& referrer) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+ bool is_prerendering =
+ g_browser_process->prerender_tracker()->IsPrerenderingOnIOThread(
+ child_id, route_id);
+
+ // Handle a PREFETCH resource type.
+ if (request_data.resource_type == ResourceType::PREFETCH) {
+ // All PREFETCH requests should be GETs, but be defensive about it.
+ if (request_data.method != "GET")
+ return false;
+
+ // If prefetch is disabled, kill the request.
+ if (!ResourceDispatcherHost::is_prefetch_enabled())
+ return false;
+
+ // If prerendering is enabled, trigger a prerender for the URL and abort the
+ // request to prevent double-gets.
+ if (prerender::PrerenderManager::IsPrerenderingPossible()) {
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+ NewRunnableFunction(prerender::HandlePrefetchTag,
+ resource_context.prerender_manager(),
+ child_id,
+ route_id,
+ request_data.url,
+ referrer,
+ is_prerendering));
+ return false;
+ }
+ }
+
+ // 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));
+ return false;
+ }
+
+ return true;
+}
+
+void ResourceDispatcherHostObserver::MutateLoadFlags(int child_id,
+ int route_id,
+ int* load_flags) {
+ DCHECK(load_flags);
+ if (g_browser_process->prerender_tracker()->IsPrerenderingOnIOThread(
+ child_id, route_id)) {
+ *load_flags |= net::LOAD_PRERENDER;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698