// 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 "base/metrics/field_trial.h" #include "base/strings/utf_string_conversions.h" #include "chrome/common/render_messages.h" #include "content/public/renderer/render_thread.h" using blink::WebPrescientNetworking; const char kMouseEventPreconnectFieldTrialName[] = "MouseEventPreconnect"; const char kMouseEventPreconnectFieldTrialMouseDownGroup[] = "MouseDown"; const char kMouseEventPreconnectFieldTrialMouseOverGroup[] = "MouseOver"; const char kMouseEventPreconnectFieldTrialTapUnconfirmedGroup[] = "TapUnconfirmed"; const char kMouseEventPreconnectFieldTrialTapDownGroup[] = "TapDown"; namespace { // Returns true if preconnect is enabled for given motivation. // The preconnect via {mouse,gesture} event is enabled for limited userbase // for Finch field trial. bool isPreconnectEnabledForMotivation( blink::WebPreconnectMotivation motivation) { std::string group = base::FieldTrialList::FindFullName(kMouseEventPreconnectFieldTrialName); switch (motivation) { case blink::WebPreconnectMotivationLinkMouseDown: return group == kMouseEventPreconnectFieldTrialMouseDownGroup; case blink::WebPreconnectMotivationLinkMouseOver: return group == kMouseEventPreconnectFieldTrialMouseOverGroup; case blink::WebPreconnectMotivationLinkTapUnconfirmed: return group == kMouseEventPreconnectFieldTrialTapUnconfirmedGroup; case blink::WebPreconnectMotivationLinkTapDown: return group == kMouseEventPreconnectFieldTrialTapDownGroup; default: return false; } } } // namespace PrescientNetworkingDispatcher::PrescientNetworkingDispatcher() { } PrescientNetworkingDispatcher::~PrescientNetworkingDispatcher() { } void PrescientNetworkingDispatcher::prefetchDNS( const blink::WebString& hostname) { if (hostname.isEmpty()) return; std::string hostname_utf8 = UTF16ToUTF8(hostname); net_predictor_.Resolve(hostname_utf8.data(), hostname_utf8.length()); } void PrescientNetworkingDispatcher::preconnect( const blink::WebURL& url, blink::WebPreconnectMotivation motivation) { if (isPreconnectEnabledForMotivation(motivation)) content::RenderThread::Get()->Send(new ChromeViewHostMsg_Preconnect(url)); }