1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/predictors/resource_prefetch_predictor_tab_helper.h"
6
7#include "chrome/browser/predictors/resource_prefetch_predictor.h"
8#include "chrome/browser/predictors/resource_prefetch_predictor_factory.h"
9#include "chrome/browser/profiles/profile.h"
10#include "content/public/browser/browser_thread.h"
11#include "content/public/browser/load_from_memory_cache_details.h"
12
13DEFINE_WEB_CONTENTS_USER_DATA_KEY(
14    predictors::ResourcePrefetchPredictorTabHelper);
15
16using content::BrowserThread;
17
18namespace predictors {
19
20ResourcePrefetchPredictorTabHelper::ResourcePrefetchPredictorTabHelper(
21    content::WebContents* web_contents)
22    : content::WebContentsObserver(web_contents) {
23}
24
25ResourcePrefetchPredictorTabHelper::~ResourcePrefetchPredictorTabHelper() {
26}
27
28void ResourcePrefetchPredictorTabHelper::DocumentOnLoadCompletedInMainFrame(
29    int32 page_id) {
30  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
31
32  ResourcePrefetchPredictor* predictor =
33      ResourcePrefetchPredictorFactory::GetForProfile(
34          web_contents()->GetBrowserContext());
35  if (!predictor)
36    return;
37
38  NavigationID navigation_id(web_contents());
39  predictor->RecordMainFrameLoadComplete(navigation_id);
40}
41
42void ResourcePrefetchPredictorTabHelper::DidLoadResourceFromMemoryCache(
43    const content::LoadFromMemoryCacheDetails& details) {
44  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
45
46  ResourcePrefetchPredictor* predictor =
47      ResourcePrefetchPredictorFactory::GetForProfile(
48          web_contents()->GetBrowserContext());
49  if (!predictor)
50    return;
51
52  ResourcePrefetchPredictor::URLRequestSummary summary;
53  summary.navigation_id = NavigationID(web_contents());
54  summary.resource_url = details.url;
55  summary.mime_type = details.mime_type;
56  summary.resource_type =
57      ResourcePrefetchPredictor::GetResourceTypeFromMimeType(
58          details.mime_type, details.resource_type);
59  summary.was_cached = true;
60  predictor->RecordURLResponse(summary);
61}
62
63}  // namespace predictors
64