| Index: chrome/browser/net/predictor_tab_helper.cc
|
| diff --git a/chrome/browser/net/predictor_tab_helper.cc b/chrome/browser/net/predictor_tab_helper.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..76980523ea301cec11a3f614f97d7cb52cb69ec0
|
| --- /dev/null
|
| +++ b/chrome/browser/net/predictor_tab_helper.cc
|
| @@ -0,0 +1,63 @@
|
| +// Copyright (c) 2012 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/browser/net/predictor_tab_helper.h"
|
| +
|
| +#include "chrome/browser/net/predictor.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
| +#include "content/public/browser/browser_thread.h"
|
| +#include "content/public/common/frame_navigate_params.h"
|
| +
|
| +DEFINE_WEB_CONTENTS_USER_DATA_KEY(chrome_browser_net::PredictorTabHelper);
|
| +
|
| +using content::BrowserThread;
|
| +
|
| +namespace {
|
| +
|
| +bool IsUserLinkNavigationRequest(content::PageTransition page_transition) {
|
| + bool is_link = (content::PageTransitionStripQualifier(page_transition) ==
|
| + content::PAGE_TRANSITION_LINK);
|
| + bool is_forward_back = (page_transition &
|
| + content::PAGE_TRANSITION_FORWARD_BACK) != 0;
|
| + bool is_prerender = (page_transition &
|
| + content::PAGE_TRANSITION_PRERENDER) != 0;
|
| + // Tracking navigation session including client-side redirect
|
| + // is currently not supported.
|
| + bool is_client_redirect = (page_transition &
|
| + content::PAGE_TRANSITION_CLIENT_REDIRECT) != 0;
|
| + return is_link && !is_forward_back && !is_prerender && !is_client_redirect;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +namespace chrome_browser_net {
|
| +
|
| +PredictorTabHelper::PredictorTabHelper(content::WebContents* web_contents)
|
| + : content::WebContentsObserver(web_contents) {
|
| +}
|
| +
|
| +PredictorTabHelper::~PredictorTabHelper() {
|
| +}
|
| +
|
| +void PredictorTabHelper::DidNavigateMainFrame(
|
| + const content::LoadCommittedDetails& details,
|
| + const content::FrameNavigateParams& params) {
|
| + if (!IsUserLinkNavigationRequest(params.transition) ||
|
| + !(params.url.SchemeIs("http") || params.url.SchemeIs("https")))
|
| + return;
|
| +
|
| + Profile* profile = Profile::FromBrowserContext(
|
| + web_contents()->GetBrowserContext());
|
| + Predictor* predictor = profile->GetNetworkPredictor();
|
| + if (predictor) {
|
| + BrowserThread::PostTask(
|
| + BrowserThread::IO,
|
| + FROM_HERE,
|
| + base::Bind(&Predictor::RecordLinkNavigation,
|
| + base::Unretained(predictor),
|
| + params.url));
|
| + }
|
| +}
|
| +
|
| +} // namespace chrome_browser_net
|
|
|