OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_LOCAL_PREDICTOR_H_ | 5 #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_LOCAL_PREDICTOR_H_ |
6 #define CHROME_BROWSER_PRERENDER_PRERENDER_LOCAL_PREDICTOR_H_ | 6 #define CHROME_BROWSER_PRERENDER_PRERENDER_LOCAL_PREDICTOR_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/containers/hash_tables.h" | 11 #include "base/containers/hash_tables.h" |
12 #include "base/memory/scoped_vector.h" | 12 #include "base/memory/scoped_vector.h" |
13 #include "base/memory/weak_ptr.h" | 13 #include "base/memory/weak_ptr.h" |
14 #include "base/scoped_observer.h" | 14 #include "base/scoped_observer.h" |
15 #include "base/task/cancelable_task_tracker.h" | 15 #include "base/task/cancelable_task_tracker.h" |
16 #include "base/timer/timer.h" | 16 #include "base/timer/timer.h" |
17 #include "components/history/core/browser/history_service_observer.h" | 17 #include "components/history/core/browser/history_service_observer.h" |
18 #include "components/history/core/browser/visit_database.h" | 18 #include "components/history/core/browser/visit_database.h" |
19 #include "content/public/browser/session_storage_namespace.h" | |
20 #include "net/url_request/url_fetcher_delegate.h" | 19 #include "net/url_request/url_fetcher_delegate.h" |
21 #include "url/gurl.h" | 20 #include "url/gurl.h" |
22 | 21 |
23 class HistoryService; | 22 class HistoryService; |
24 | 23 |
25 namespace base { | 24 namespace base { |
26 class DictionaryValue; | 25 class DictionaryValue; |
27 } | 26 } |
28 | 27 |
29 namespace content { | 28 namespace content { |
30 class WebContents; | 29 class WebContents; |
31 } | 30 } |
32 | 31 |
33 namespace gfx { | 32 namespace gfx { |
34 class Size; | 33 class Size; |
35 } | 34 } |
36 | 35 |
37 namespace prerender { | 36 namespace prerender { |
38 | 37 |
39 class PrerenderHandle; | 38 class PrerenderHandle; |
40 class PrerenderManager; | 39 class PrerenderManager; |
41 | 40 |
42 // PrerenderLocalPredictor maintains local browsing history to make prerender | 41 // PrerenderLocalPredictor maintains local browsing history to make prerender |
43 // predictions. | 42 // predictions. |
44 // At this point, the class is not actually creating prerenders, but just | 43 // At this point, the class is not actually creating prerenders, but just |
45 // recording timing stats about the effect prerendering would have. | 44 // recording timing stats about the effect prerendering would have. |
| 45 // |
| 46 // TODO(davidben): Prune this class down to only what it's still being used for. |
46 class PrerenderLocalPredictor : public history::HistoryServiceObserver, | 47 class PrerenderLocalPredictor : public history::HistoryServiceObserver, |
47 public net::URLFetcherDelegate { | 48 public net::URLFetcherDelegate { |
48 public: | 49 public: |
49 struct LocalPredictorURLInfo; | 50 struct LocalPredictorURLInfo; |
50 struct CandidatePrerenderInfo; | 51 struct CandidatePrerenderInfo; |
51 // A class simulating a set of URLs prefetched, for statistical purposes. | 52 // A class simulating a set of URLs prefetched, for statistical purposes. |
52 class PrefetchList; | 53 class PrefetchList; |
53 enum Event { | 54 enum Event { |
54 EVENT_CONSTRUCTED = 0, | 55 EVENT_CONSTRUCTED = 0, |
55 EVENT_INIT_SCHEDULED = 1, | 56 EVENT_INIT_SCHEDULED = 1, |
56 EVENT_INIT_STARTED = 2, | 57 EVENT_INIT_STARTED = 2, |
57 EVENT_INIT_FAILED_NO_HISTORY = 3, | 58 EVENT_INIT_FAILED_NO_HISTORY = 3, |
58 EVENT_INIT_SUCCEEDED = 4, | 59 EVENT_INIT_SUCCEEDED = 4, |
59 EVENT_ADD_VISIT = 5, | 60 EVENT_ADD_VISIT = 5, |
60 EVENT_ADD_VISIT_INITIALIZED = 6, | 61 EVENT_ADD_VISIT_INITIALIZED = 6, |
61 EVENT_ADD_VISIT_PRERENDER_IDENTIFIED = 7, | 62 EVENT_ADD_VISIT_PRERENDER_IDENTIFIED = 7, |
62 EVENT_ADD_VISIT_RELEVANT_TRANSITION = 8, | 63 EVENT_ADD_VISIT_RELEVANT_TRANSITION = 8, |
63 EVENT_ADD_VISIT_IDENTIFIED_PRERENDER_CANDIDATE = 9, | 64 EVENT_ADD_VISIT_IDENTIFIED_PRERENDER_CANDIDATE = 9, |
64 EVENT_ADD_VISIT_PRERENDERING = 10, | 65 EVENT_ADD_VISIT_PRERENDERING = 10, |
65 EVENT_GOT_PRERENDER_URL = 11, | 66 // Obsolete: EVENT_GOT_PRERENDER_URL = 11, |
66 EVENT_ERROR_NO_PRERENDER_URL_FOR_PLT = 12, | 67 EVENT_ERROR_NO_PRERENDER_URL_FOR_PLT = 12, |
67 EVENT_ADD_VISIT_PRERENDERING_EXTENDED = 13, | 68 EVENT_ADD_VISIT_PRERENDERING_EXTENDED = 13, |
68 EVENT_PRERENDER_URL_LOOKUP_RESULT = 14, | 69 EVENT_PRERENDER_URL_LOOKUP_RESULT = 14, |
69 EVENT_PRERENDER_URL_LOOKUP_RESULT_ROOT_PAGE = 15, | 70 EVENT_PRERENDER_URL_LOOKUP_RESULT_ROOT_PAGE = 15, |
70 EVENT_PRERENDER_URL_LOOKUP_RESULT_IS_HTTP = 16, | 71 EVENT_PRERENDER_URL_LOOKUP_RESULT_IS_HTTP = 16, |
71 EVENT_PRERENDER_URL_LOOKUP_RESULT_HAS_QUERY_STRING = 17, | 72 EVENT_PRERENDER_URL_LOOKUP_RESULT_HAS_QUERY_STRING = 17, |
72 EVENT_PRERENDER_URL_LOOKUP_RESULT_CONTAINS_LOGOUT = 18, | 73 EVENT_PRERENDER_URL_LOOKUP_RESULT_CONTAINS_LOGOUT = 18, |
73 EVENT_PRERENDER_URL_LOOKUP_RESULT_CONTAINS_LOGIN = 19, | 74 EVENT_PRERENDER_URL_LOOKUP_RESULT_CONTAINS_LOGIN = 19, |
74 EVENT_START_URL_LOOKUP = 20, | 75 EVENT_START_URL_LOOKUP = 20, |
75 EVENT_ADD_VISIT_NOT_ROOTPAGE = 21, | 76 // Obsolete: EVENT_ADD_VISIT_NOT_ROOTPAGE = 21, |
76 EVENT_URL_WHITELIST_ERROR = 22, | 77 EVENT_URL_WHITELIST_ERROR = 22, |
77 EVENT_URL_WHITELIST_OK = 23, | 78 EVENT_URL_WHITELIST_OK = 23, |
78 EVENT_PRERENDER_URL_LOOKUP_RESULT_ON_WHITELIST = 24, | 79 EVENT_PRERENDER_URL_LOOKUP_RESULT_ON_WHITELIST = 24, |
79 EVENT_PRERENDER_URL_LOOKUP_RESULT_ON_WHITELIST_ROOT_PAGE = 25, | 80 EVENT_PRERENDER_URL_LOOKUP_RESULT_ON_WHITELIST_ROOT_PAGE = 25, |
80 EVENT_PRERENDER_URL_LOOKUP_RESULT_EXTENDED_ROOT_PAGE = 26, | 81 EVENT_PRERENDER_URL_LOOKUP_RESULT_EXTENDED_ROOT_PAGE = 26, |
81 EVENT_PRERENDER_URL_LOOKUP_RESULT_ROOT_PAGE_HTTP = 27, | 82 EVENT_PRERENDER_URL_LOOKUP_RESULT_ROOT_PAGE_HTTP = 27, |
82 EVENT_PRERENDER_URL_LOOKUP_FAILED = 28, | 83 EVENT_PRERENDER_URL_LOOKUP_FAILED = 28, |
83 EVENT_PRERENDER_URL_LOOKUP_NO_SOURCE_WEBCONTENTS_FOUND = 29, | 84 EVENT_PRERENDER_URL_LOOKUP_NO_SOURCE_WEBCONTENTS_FOUND = 29, |
84 EVENT_PRERENDER_URL_LOOKUP_NO_LOGGED_IN_TABLE_FOUND = 30, | 85 EVENT_PRERENDER_URL_LOOKUP_NO_LOGGED_IN_TABLE_FOUND = 30, |
85 EVENT_PRERENDER_URL_LOOKUP_ISSUING_LOGGED_IN_LOOKUP = 31, | 86 EVENT_PRERENDER_URL_LOOKUP_ISSUING_LOGGED_IN_LOOKUP = 31, |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 EVENT_PRERENDER_SERVICE_PARSE_ERROR = 63, | 118 EVENT_PRERENDER_SERVICE_PARSE_ERROR = 63, |
118 EVENT_PRERENDER_SERVICE_PARSE_ERROR_INCORRECT_JSON = 64, | 119 EVENT_PRERENDER_SERVICE_PARSE_ERROR_INCORRECT_JSON = 64, |
119 EVENT_PRERENDER_SERVICE_HINTING_TIMED_OUT = 65, | 120 EVENT_PRERENDER_SERVICE_HINTING_TIMED_OUT = 65, |
120 EVENT_PRERENDER_SERVICE_HINTING_URL_LOOKUP_TIMED_OUT = 66, | 121 EVENT_PRERENDER_SERVICE_HINTING_URL_LOOKUP_TIMED_OUT = 66, |
121 EVENT_PRERENDER_SERVICE_CANDIDATE_URL_LOOKUP_TIMED_OUT = 67, | 122 EVENT_PRERENDER_SERVICE_CANDIDATE_URL_LOOKUP_TIMED_OUT = 67, |
122 EVENT_CONTINUE_PRERENDER_CHECK_ON_SERVICE_WHITELIST = 68, | 123 EVENT_CONTINUE_PRERENDER_CHECK_ON_SERVICE_WHITELIST = 68, |
123 EVENT_CONTINUE_PRERENDER_CHECK_EXAMINE_NEXT_URL_LOCAL = 69, | 124 EVENT_CONTINUE_PRERENDER_CHECK_EXAMINE_NEXT_URL_LOCAL = 69, |
124 EVENT_CONTINUE_PRERENDER_CHECK_EXAMINE_NEXT_URL_SERVICE = 70, | 125 EVENT_CONTINUE_PRERENDER_CHECK_EXAMINE_NEXT_URL_SERVICE = 70, |
125 EVENT_ADD_VISIT_RELEVANT_TRANSITION_REPEAT_URL = 71, | 126 EVENT_ADD_VISIT_RELEVANT_TRANSITION_REPEAT_URL = 71, |
126 EVENT_ADD_VISIT_RELEVANT_TRANSITION_NEW_URL = 72, | 127 EVENT_ADD_VISIT_RELEVANT_TRANSITION_NEW_URL = 72, |
127 EVENT_TAB_HELPER_URL_SEEN_NAMESPACE_MISMATCH_NO_NAMESPACE = 73, | 128 // Obsolete: EVENT_TAB_HELPER_URL_SEEN_NAMESPACE_MISMATCH_NO_NAMESPACE = 73, |
128 EVENT_TAB_HELPER_URL_SEEN_NAMESPACE_MISMATCH_MERGE_ISSUED = 74, | 129 // Obsolete: EVENT_TAB_HELPER_URL_SEEN_NAMESPACE_MISMATCH_MERGE_ISSUED = 74, |
129 EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_RECEIVED = 75, | 130 // Obsolete: EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_RECEIVED = 75, |
130 EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_NAMESPACE_NOT_FOUND = 76, | 131 // Obsolete: EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_NAMESPACE_NOT_FOUND = 76, |
131 EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_NOT_LOGGING = 77, | 132 // Obsolete: EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_NOT_LOGGING = 77, |
132 EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_NO_TRANSACTIONS = 78, | 133 // Obsolete: EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_NO_TRANSACTIONS = 78, |
133 EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_TOO_MANY_TRANSACTIONS = 79, | 134 // Obsolete: EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_TOO_MANY_TRANSACTIONS = 7
9, |
134 EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_NOT_MERGEABLE = 80, | 135 // Obsolete: EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_NOT_MERGEABLE = 80, |
135 EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_MERGEABLE = 81, | 136 // Obsolete: EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_MERGEABLE = 81, |
136 EVENT_INIT_FAILED_UNENCRYPTED_SYNC_NOT_ENABLED = 82, | 137 EVENT_INIT_FAILED_UNENCRYPTED_SYNC_NOT_ENABLED = 82, |
137 EVENT_CONTINUE_PRERENDER_CHECK_EXAMINE_NEXT_URL_NOT_SKIPPED = 83, | 138 EVENT_CONTINUE_PRERENDER_CHECK_EXAMINE_NEXT_URL_NOT_SKIPPED = 83, |
138 EVENT_PRERENDER_SERVICE_RETURNED_HINTING_CANDIDATES = 84, | 139 EVENT_PRERENDER_SERVICE_RETURNED_HINTING_CANDIDATES = 84, |
139 EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_NAMESPACE_NOT_ALIAS = 85, | 140 // Obsolete: EVENT_NAMESPACE_MISMATCH_MERGE_RESULT_NAMESPACE_NOT_ALIAS = 85, |
140 EVENT_TAB_HELPER_URL_SEEN_MATCH_ENTRY = 86, | 141 EVENT_TAB_HELPER_URL_SEEN_MATCH_ENTRY = 86, |
141 EVENT_TAB_HELPER_URL_SEEN_MATCH_BROWSER_NAVIGATE = 87, | 142 EVENT_TAB_HELPER_URL_SEEN_MATCH_BROWSER_NAVIGATE = 87, |
142 EVENT_TAB_HELPER_URL_SEEN_NAMESPACE_MATCH_ENTRY = 88, | 143 EVENT_TAB_HELPER_URL_SEEN_NAMESPACE_MATCH_ENTRY = 88, |
143 EVENT_TAB_HELPER_URL_SEEN_NAMESPACE_MATCH_BROWSER_NAVIGATE = 89, | 144 EVENT_TAB_HELPER_URL_SEEN_NAMESPACE_MATCH_BROWSER_NAVIGATE = 89, |
144 EVENT_PREFETCH_LIST_ADDED = 90, | 145 EVENT_PREFETCH_LIST_ADDED = 90, |
145 EVENT_PREFETCH_LIST_SEEN_TABCONTENTS = 91, | 146 EVENT_PREFETCH_LIST_SEEN_TABCONTENTS = 91, |
146 EVENT_PREFETCH_LIST_SEEN_HISTORY = 92, | 147 EVENT_PREFETCH_LIST_SEEN_HISTORY = 92, |
147 EVENT_ISSUE_PRERENDER_CALLED = 93, | 148 EVENT_ISSUE_PRERENDER_CALLED = 93, |
148 EVENT_ISSUE_PRERENDER_PREFETCH_ENABLED = 94, | 149 EVENT_ISSUE_PRERENDER_PREFETCH_ENABLED = 94, |
149 EVENT_ISSUE_PRERENDER_PREFETCH_ISSUED = 95, | 150 EVENT_ISSUE_PRERENDER_PREFETCH_ISSUED = 95, |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 LocalPredictorURLInfo* url_info); | 203 LocalPredictorURLInfo* url_info); |
203 void MaybeCancelURLFetcher(net::URLFetcher* fetcher); | 204 void MaybeCancelURLFetcher(net::URLFetcher* fetcher); |
204 // Returns true if the parsed response is semantically correct and could | 205 // Returns true if the parsed response is semantically correct and could |
205 // be fully applied. | 206 // be fully applied. |
206 bool ApplyParsedPrerenderServiceResponse( | 207 bool ApplyParsedPrerenderServiceResponse( |
207 base::DictionaryValue* dict, | 208 base::DictionaryValue* dict, |
208 CandidatePrerenderInfo* info, | 209 CandidatePrerenderInfo* info, |
209 bool* hinting_timed_out, | 210 bool* hinting_timed_out, |
210 bool* hinting_url_lookup_timed_out, | 211 bool* hinting_url_lookup_timed_out, |
211 bool* candidate_url_lookup_timed_out); | 212 bool* candidate_url_lookup_timed_out); |
212 void ProcessNamespaceMergeResult( | |
213 content::SessionStorageNamespace::MergeResult result); | |
214 typedef std::map<net::URLFetcher*, CandidatePrerenderInfo*> | 213 typedef std::map<net::URLFetcher*, CandidatePrerenderInfo*> |
215 OutstandingFetchers; | 214 OutstandingFetchers; |
216 OutstandingFetchers outstanding_prerender_service_requests_; | 215 OutstandingFetchers outstanding_prerender_service_requests_; |
217 PrerenderManager* prerender_manager_; | 216 PrerenderManager* prerender_manager_; |
218 base::OneShotTimer<PrerenderLocalPredictor> timer_; | 217 base::OneShotTimer<PrerenderLocalPredictor> timer_; |
219 | 218 |
220 // Delay after which to initialize, to avoid putting to much load on the | 219 // Delay after which to initialize, to avoid putting to much load on the |
221 // database thread early on when Chrome is starting up. | 220 // database thread early on when Chrome is starting up. |
222 static const int kInitDelayMs = 5 * 1000; | 221 static const int kInitDelayMs = 5 * 1000; |
223 | 222 |
(...skipping 14 matching lines...) Expand all Loading... |
238 history_service_observer_; | 237 history_service_observer_; |
239 | 238 |
240 base::WeakPtrFactory<PrerenderLocalPredictor> weak_factory_; | 239 base::WeakPtrFactory<PrerenderLocalPredictor> weak_factory_; |
241 | 240 |
242 DISALLOW_COPY_AND_ASSIGN(PrerenderLocalPredictor); | 241 DISALLOW_COPY_AND_ASSIGN(PrerenderLocalPredictor); |
243 }; | 242 }; |
244 | 243 |
245 } // namespace prerender | 244 } // namespace prerender |
246 | 245 |
247 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_LOCAL_PREDICTOR_H_ | 246 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_LOCAL_PREDICTOR_H_ |
OLD | NEW |