summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/net/predictor.cc23
-rw-r--r--chrome/browser/renderer_host/chrome_render_message_filter.cc6
-rw-r--r--chrome/browser/renderer_host/chrome_render_message_filter.h1
-rw-r--r--chrome/chrome_renderer.gypi2
-rw-r--r--chrome/common/render_messages.h4
-rw-r--r--chrome/renderer/chrome_content_renderer_client.cc7
-rw-r--r--chrome/renderer/chrome_content_renderer_client.h3
-rw-r--r--chrome/renderer/net/prescient_networking_dispatcher.cc22
-rw-r--r--chrome/renderer/net/prescient_networking_dispatcher.h19
9 files changed, 78 insertions, 9 deletions
diff --git a/chrome/browser/net/predictor.cc b/chrome/browser/net/predictor.cc
index 3af1cf3..0b132b0 100644
--- a/chrome/browser/net/predictor.cc
+++ b/chrome/browser/net/predictor.cc
@@ -275,20 +275,25 @@ void Predictor::AnticipateOmniboxUrl(const GURL& url, bool preconnectable) {
void Predictor::PreconnectUrlAndSubresources(const GURL& url,
const GURL& first_party_for_cookies) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- if (!predictor_enabled_)
- return;
- if (!url.is_valid() || !url.has_host())
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) ||
+ BrowserThread::CurrentlyOn(BrowserThread::IO));
+ if (!predictor_enabled_ || !preconnect_enabled() ||
+ !url.is_valid() || !url.has_host())
return;
- if (preconnect_enabled()) {
- std::string host = url.HostNoBrackets();
- UrlInfo::ResolutionMotivation motivation(UrlInfo::EARLY_LOAD_MOTIVATED);
- const int kConnectionsNeeded = 1;
+
+ std::string host = url.HostNoBrackets();
+ UrlInfo::ResolutionMotivation motivation(UrlInfo::EARLY_LOAD_MOTIVATED);
+ const int kConnectionsNeeded = 1;
+ if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
PreconnectOnUIThread(CanonicalizeUrl(url), first_party_for_cookies,
motivation, kConnectionsNeeded,
url_request_context_getter_);
- PredictFrameSubresources(url.GetWithEmptyPath(), first_party_for_cookies);
+ } else {
+ PreconnectOnIOThread(CanonicalizeUrl(url), first_party_for_cookies,
+ motivation, kConnectionsNeeded,
+ url_request_context_getter_);
}
+ PredictFrameSubresources(url.GetWithEmptyPath(), first_party_for_cookies);
}
UrlList Predictor::GetPredictedUrlListAtStartup(
diff --git a/chrome/browser/renderer_host/chrome_render_message_filter.cc b/chrome/browser/renderer_host/chrome_render_message_filter.cc
index 5b6a546..481d6a9 100644
--- a/chrome/browser/renderer_host/chrome_render_message_filter.cc
+++ b/chrome/browser/renderer_host/chrome_render_message_filter.cc
@@ -179,6 +179,7 @@ bool ChromeRenderMessageFilter::OnMessageReceived(const IPC::Message& message,
OnOpenNaClExecutable)
#endif
IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DnsPrefetch, OnDnsPrefetch)
+ IPC_MESSAGE_HANDLER(ChromeViewHostMsg_Preconnect, OnPreconnect)
IPC_MESSAGE_HANDLER(ChromeViewHostMsg_ResourceTypeStats,
OnResourceTypeStats)
IPC_MESSAGE_HANDLER(ChromeViewHostMsg_UpdatedCacheStats,
@@ -324,6 +325,11 @@ void ChromeRenderMessageFilter::OnDnsPrefetch(
profile_->GetNetworkPredictor()->DnsPrefetchList(hostnames);
}
+void ChromeRenderMessageFilter::OnPreconnect(const GURL& url) {
+ if (profile_->GetNetworkPredictor())
+ profile_->GetNetworkPredictor()->PreconnectUrlAndSubresources(url, GURL());
+}
+
void ChromeRenderMessageFilter::OnResourceTypeStats(
const WebCache::ResourceTypeStats& stats) {
HISTOGRAM_COUNTS("WebCoreCache.ImagesSizeKB",
diff --git a/chrome/browser/renderer_host/chrome_render_message_filter.h b/chrome/browser/renderer_host/chrome_render_message_filter.h
index d046abd..1c4ed0d 100644
--- a/chrome/browser/renderer_host/chrome_render_message_filter.h
+++ b/chrome/browser/renderer_host/chrome_render_message_filter.h
@@ -96,6 +96,7 @@ class ChromeRenderMessageFilter : public content::BrowserMessageFilter {
IPC::Message* reply_msg);
#endif
void OnDnsPrefetch(const std::vector<std::string>& hostnames);
+ void OnPreconnect(const GURL& url);
void OnResourceTypeStats(const WebKit::WebCache::ResourceTypeStats& stats);
void OnUpdatedCacheStats(const WebKit::WebCache::UsageStats& stats);
void OnFPS(int routing_id, float fps);
diff --git a/chrome/chrome_renderer.gypi b/chrome/chrome_renderer.gypi
index c7bfc3d..c9d55b5 100644
--- a/chrome/chrome_renderer.gypi
+++ b/chrome/chrome_renderer.gypi
@@ -148,6 +148,8 @@
'renderer/net/net_error_helper.h',
'renderer/net/predictor_queue.cc',
'renderer/net/predictor_queue.h',
+ 'renderer/net/prescient_networking_dispatcher.cc',
+ 'renderer/net/prescient_networking_dispatcher.h',
'renderer/net/renderer_net_predictor.cc',
'renderer/net/renderer_net_predictor.h',
'renderer/net_benchmarking_extension.cc',
diff --git a/chrome/common/render_messages.h b/chrome/common/render_messages.h
index 5a946e3..3b85195 100644
--- a/chrome/common/render_messages.h
+++ b/chrome/common/render_messages.h
@@ -644,6 +644,10 @@ IPC_MESSAGE_CONTROL2(ChromeViewHostMsg_V8HeapStats,
IPC_MESSAGE_CONTROL1(ChromeViewHostMsg_DnsPrefetch,
std::vector<std::string> /* hostnames */)
+// Request for preconnect to host providing resource specified by URL
+IPC_MESSAGE_CONTROL1(ChromeViewHostMsg_Preconnect,
+ GURL /* preconnect target url */)
+
// Notifies when a plugin couldn't be loaded because it's outdated.
IPC_MESSAGE_ROUTED2(ChromeViewHostMsg_BlockedOutdatedPlugin,
int /* placeholder ID */,
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
index 61683ff..5f16fbb 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -41,6 +41,7 @@
#include "chrome/renderer/external_extension.h"
#include "chrome/renderer/loadtimes_extension_bindings.h"
#include "chrome/renderer/net/net_error_helper.h"
+#include "chrome/renderer/net/prescient_networking_dispatcher.h"
#include "chrome/renderer/net/renderer_net_predictor.h"
#include "chrome/renderer/net_benchmarking_extension.h"
#include "chrome/renderer/one_click_signin_agent.h"
@@ -213,6 +214,7 @@ void ChromeContentRendererClient::RenderThreadStarted() {
extension_dispatcher_.reset(new extensions::Dispatcher());
permissions_policy_delegate_.reset(
new extensions::RendererPermissionsPolicyDelegate());
+ prescient_networking_dispatcher_.reset(new PrescientNetworkingDispatcher());
net_predictor_.reset(new RendererNetPredictor());
spellcheck_.reset(new SpellCheck());
visited_link_slave_.reset(new visitedlink::VisitedLinkSlave());
@@ -1011,6 +1013,11 @@ void ChromeContentRendererClient::PrefetchHostName(const char* hostname,
net_predictor_->Resolve(hostname, length);
}
+WebKit::WebPrescientNetworking*
+ChromeContentRendererClient::GetPrescientNetworking() {
+ return prescient_networking_dispatcher_.get();
+}
+
bool ChromeContentRendererClient::ShouldOverridePageVisibilityState(
const content::RenderView* render_view,
WebKit::WebPageVisibilityState* override_state) const {
diff --git a/chrome/renderer/chrome_content_renderer_client.h b/chrome/renderer/chrome_content_renderer_client.h
index 68f78ec..8726c8a 100644
--- a/chrome/renderer/chrome_content_renderer_client.h
+++ b/chrome/renderer/chrome_content_renderer_client.h
@@ -15,6 +15,7 @@
class ChromeRenderProcessObserver;
class ExtensionSet;
+class PrescientNetworkingDispatcher;
class RendererNetPredictor;
class SpellCheck;
class SpellCheckProvider;
@@ -106,6 +107,7 @@ class ChromeContentRendererClient : public content::ContentRendererClient {
size_t length) OVERRIDE;
virtual bool IsLinkVisited(unsigned long long link_hash) OVERRIDE;
virtual void PrefetchHostName(const char* hostname, size_t length) OVERRIDE;
+ virtual WebKit::WebPrescientNetworking* GetPrescientNetworking() OVERRIDE;
virtual bool ShouldOverridePageVisibilityState(
const content::RenderView* render_view,
WebKit::WebPageVisibilityState* override_state) const OVERRIDE;
@@ -175,6 +177,7 @@ class ChromeContentRendererClient : public content::ContentRendererClient {
scoped_ptr<extensions::Dispatcher> extension_dispatcher_;
scoped_ptr<extensions::RendererPermissionsPolicyDelegate>
permissions_policy_delegate_;
+ scoped_ptr<PrescientNetworkingDispatcher> prescient_networking_dispatcher_;
scoped_ptr<RendererNetPredictor> net_predictor_;
scoped_ptr<SpellCheck> spellcheck_;
scoped_ptr<visitedlink::VisitedLinkSlave> visited_link_slave_;
diff --git a/chrome/renderer/net/prescient_networking_dispatcher.cc b/chrome/renderer/net/prescient_networking_dispatcher.cc
new file mode 100644
index 0000000..e97c167
--- /dev/null
+++ b/chrome/renderer/net/prescient_networking_dispatcher.cc
@@ -0,0 +1,22 @@
+// Copyright 2013 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 "chrome/renderer/net/prescient_networking_dispatcher.h"
+
+#include "chrome/common/render_messages.h"
+#include "content/public/renderer/render_thread.h"
+
+using WebKit::WebPrescientNetworking;
+
+PrescientNetworkingDispatcher::~PrescientNetworkingDispatcher() {
+}
+
+void PrescientNetworkingDispatcher::preconnect(
+ const WebKit::WebURL& url,
+ WebKit::WebPreconnectMotivation motivation) {
+ // FIXME(kouhei) actual pre-connecting is currently disabled.
+ // This should shortly be enabled via Finch field trials in upcoming patch.
+ // content::RenderThread::Get()->Send(new ChromeViewHostMsg_Preconnect(url));
+}
+
diff --git a/chrome/renderer/net/prescient_networking_dispatcher.h b/chrome/renderer/net/prescient_networking_dispatcher.h
new file mode 100644
index 0000000..bb0fbf9
--- /dev/null
+++ b/chrome/renderer/net/prescient_networking_dispatcher.h
@@ -0,0 +1,19 @@
+// Copyright 2013 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.
+
+#ifndef CHROME_RENDERER_NET_PRESCIENT_NETWORKING_DISPATCHER_H_
+#define CHROME_RENDERER_NET_PRESCIENT_NETWORKING_DISPATCHER_H_
+
+#include "base/compiler_specific.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebPrescientNetworking.h"
+
+class PrescientNetworkingDispatcher : public WebKit::WebPrescientNetworking {
+ public:
+ virtual ~PrescientNetworkingDispatcher();
+
+ virtual void preconnect(const WebKit::WebURL& url,
+ WebKit::WebPreconnectMotivation motivation) OVERRIDE;
+};
+
+#endif // CHROME_RENDERER_NET_PRESCIENT_NETWORKING_DISPATCHER_H_