11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/predictors/resource_prefetch_predictor_tab_helper.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/predictors/resource_prefetch_predictor.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/predictors/resource_prefetch_predictor_factory.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/profiles/profile.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/browser_thread.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/load_from_memory_cache_details.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciDEFINE_WEB_CONTENTS_USER_DATA_KEY(
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    predictors::ResourcePrefetchPredictorTabHelper);
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing content::BrowserThread;
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace predictors {
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciResourcePrefetchPredictorTabHelper::ResourcePrefetchPredictorTabHelper(
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    content::WebContents* web_contents)
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : content::WebContentsObserver(web_contents) {
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciResourcePrefetchPredictorTabHelper::~ResourcePrefetchPredictorTabHelper() {
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ResourcePrefetchPredictorTabHelper::DocumentOnLoadCompletedInMainFrame() {
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK_CURRENTLY_ON(BrowserThread::UI);
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ResourcePrefetchPredictor* predictor =
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ResourcePrefetchPredictorFactory::GetForProfile(
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          web_contents()->GetBrowserContext());
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!predictor)
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return;
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  NavigationID navigation_id(web_contents());
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  predictor->RecordMainFrameLoadComplete(navigation_id);
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ResourcePrefetchPredictorTabHelper::DidLoadResourceFromMemoryCache(
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const content::LoadFromMemoryCacheDetails& details) {
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK_CURRENTLY_ON(BrowserThread::UI);
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ResourcePrefetchPredictor* predictor =
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ResourcePrefetchPredictorFactory::GetForProfile(
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          web_contents()->GetBrowserContext());
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (!predictor)
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return;
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ResourcePrefetchPredictor::URLRequestSummary summary;
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  summary.navigation_id = NavigationID(web_contents());
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  summary.resource_url = details.url;
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  summary.mime_type = details.mime_type;
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  summary.resource_type =
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ResourcePrefetchPredictor::GetResourceTypeFromMimeType(
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          details.mime_type, details.resource_type);
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  summary.was_cached = true;
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  predictor->RecordURLResponse(summary);
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace predictors
63