Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(815)

Side by Side Diff: chrome/browser/predictors/resource_prefetcher_manager.cc

Issue 10817004: Adds speculative prefetching of resources. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Addressing Dominich's comments. Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2012 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_prefetcher_manager.h"
6
7 #include "base/bind.h"
8 #include "base/stl_util.h"
9 #include "chrome/browser/predictors/resource_prefetch_predictor.h"
10 #include "content/public/browser/browser_thread.h"
11 #include "net/url_request/url_request.h"
12 #include "net/url_request/url_request_context_getter.h"
13
14 using content::BrowserThread;
15
16 namespace predictors {
17
18 ResourcePrefetcherManager::ResourcePrefetcherManager(
19 ResourcePrefetchPredictor* predcitor,
dominich 2012/08/02 15:00:50 nit: predictor
Shishir 2012/08/02 22:06:54 Done.
20 const ResourcePrefetchPredictorConfig& config,
21 net::URLRequestContextGetter* context_getter)
22 : predictor_(predcitor),
23 config_(config),
24 context_getter_(context_getter),
25 prefetcher_map_deleter_(&prefetcher_map_) {
26 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
27 CHECK(predictor_);
28 CHECK(context_getter_);
29 }
30
31 ResourcePrefetcherManager::~ResourcePrefetcherManager() {
32 }
33
34 void ResourcePrefetcherManager::ShutdownOnUIThread() {
35 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
36
37 predictor_ = NULL;
38 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
39 base::Bind(&ResourcePrefetcherManager::ShutdownOnIOThread,
40 this));
41 }
42
43 void ResourcePrefetcherManager::ShutdownOnIOThread() {
44 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
45 }
46
47 void ResourcePrefetcherManager::MaybeAddPrefetch(
48 const NavigationID& navigation_id,
49 scoped_ptr<ResourcePrefetcher::RequestVector> requests) {
50 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
51
52 const GURL& main_frame_url = navigation_id.main_frame_url;
53 if (prefetcher_map_.find(main_frame_url) != prefetcher_map_.end())
dominich 2012/08/02 15:00:50 Avoiding the double lookup: PrefetcherMap::iterat
Shishir 2012/08/02 22:06:54 Done.
54 return;
55
56 ResourcePrefetcher* prefetcher = new ResourcePrefetcher(
57 this, config_, navigation_id, requests.Pass());
58 prefetcher_map_[main_frame_url] = prefetcher;
59 prefetcher->Start();
60 }
61
62 void ResourcePrefetcherManager::MaybeRemovePrefetch(
63 const NavigationID& navigation_id) {
64 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
65
66 PrefetcherMap::iterator it = prefetcher_map_.find(
67 navigation_id.main_frame_url);
68 if (it != prefetcher_map_.end() &&
69 it->second->navigation_id() == navigation_id) {
70 it->second->Stop();
71 }
72 }
73
74 void ResourcePrefetcherManager::ResourcePrefetcherFinished(
75 ResourcePrefetcher* resource_prefetcher,
76 ResourcePrefetcher::RequestVector* requests) {
77 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
78
79 // 'predictor_' can only be accessed from the UI thread.
dominich 2012/08/02 15:00:50 nit: variable refs in comments use || in chromium
Shishir 2012/08/02 22:06:54 Done.
80 scoped_ptr<ResourcePrefetcher::RequestVector> requests_ptr(requests);
81 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
82 base::Bind(&ResourcePrefetcherManager::ResourcePrefetcherFinishedOnUI,
83 this,
84 resource_prefetcher->navigation_id(),
85 base::Passed(requests_ptr.Pass())));
dominich 2012/08/02 15:00:50 i believe &requests_ptr might be less verbose
Shishir 2012/08/02 22:06:54 Ah syntactic sugar.
86
87 const GURL& main_frame_url =
88 resource_prefetcher->navigation_id().main_frame_url;
89 PrefetcherMap::iterator it = prefetcher_map_.find(main_frame_url);
90 DCHECK(it != prefetcher_map_.end());
91 delete it->second;
92 prefetcher_map_.erase(main_frame_url);
93 }
94
95 void ResourcePrefetcherManager::ResourcePrefetcherFinishedOnUI(
96 const NavigationID& navigation_id,
97 scoped_ptr<ResourcePrefetcher::RequestVector> requests) {
98 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
99
100 // Notify the 'predictor_'.
dominich 2012/08/02 15:00:50 nit: variable name in comment uses ||
Shishir 2012/08/02 22:06:54 Done.
101 if (predictor_)
102 predictor_->FinishedPrefetchForNavigation(navigation_id,
103 requests.Pass());
104 }
105
106 net::URLRequestContext* ResourcePrefetcherManager::GetURLRequestContext() {
107 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
108
109 return context_getter_->GetURLRequestContext();
110 }
111
112 } // namespace predictors
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698