diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/net/predictor.cc | 23 | ||||
-rw-r--r-- | chrome/browser/renderer_host/chrome_render_message_filter.cc | 6 | ||||
-rw-r--r-- | chrome/browser/renderer_host/chrome_render_message_filter.h | 1 | ||||
-rw-r--r-- | chrome/chrome_renderer.gypi | 2 | ||||
-rw-r--r-- | chrome/common/render_messages.h | 4 | ||||
-rw-r--r-- | chrome/renderer/chrome_content_renderer_client.cc | 7 | ||||
-rw-r--r-- | chrome/renderer/chrome_content_renderer_client.h | 3 | ||||
-rw-r--r-- | chrome/renderer/net/prescient_networking_dispatcher.cc | 22 | ||||
-rw-r--r-- | chrome/renderer/net/prescient_networking_dispatcher.h | 19 |
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_ |