Chromium Code Reviews| 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 #include "chrome/browser/autocomplete/network_action_predictor.h" | 5 #include "chrome/browser/autocomplete/network_action_predictor.h" |
| 6 | 6 |
| 7 #include <math.h> | 7 #include <math.h> |
| 8 | 8 |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 49 | 49 |
| 50 HistoryService* history_service = | 50 HistoryService* history_service = |
| 51 profile->GetHistoryService(Profile::EXPLICIT_ACCESS); | 51 profile->GetHistoryService(Profile::EXPLICIT_ACCESS); |
| 52 if (!history_service) | 52 if (!history_service) |
| 53 return false; | 53 return false; |
| 54 | 54 |
| 55 history::URLDatabase* url_db = history_service->InMemoryDatabase(); | 55 history::URLDatabase* url_db = history_service->InMemoryDatabase(); |
| 56 return url_db && (url_db->GetRowForURL(match.destination_url, url_row) != 0); | 56 return url_db && (url_db->GetRowForURL(match.destination_url, url_row) != 0); |
| 57 } | 57 } |
| 58 | 58 |
| 59 // Return true if the suggestion type is a 'search' type. | |
| 60 bool IsSearchType(const AutocompleteMatch::Type& type) { | |
|
Peter Kasting
2012/01/09 20:47:37
Nit: I wonder if this is consistent with other pla
dominich
2012/01/09 22:43:43
Hmm. On the other side of this, when we swap in th
Peter Kasting
2012/01/09 22:51:30
In the abstract, yes; the fact that we have many o
| |
| 61 switch (type) { | |
| 62 // Matches using the user's default search engine. | |
| 63 case AutocompleteMatch::SEARCH_WHAT_YOU_TYPED: | |
| 64 case AutocompleteMatch::SEARCH_HISTORY: | |
| 65 case AutocompleteMatch::SEARCH_SUGGEST: | |
| 66 // A match that uses a non-default search engine (e.g. for tab-to-search). | |
|
Peter Kasting
2012/01/09 20:47:37
Nit: Unindent 2.
dominich
2012/01/09 22:43:43
Done.
| |
| 67 case AutocompleteMatch::SEARCH_OTHER_ENGINE: | |
| 68 return true; | |
| 69 | |
| 70 default: | |
| 71 return false; | |
| 72 } | |
| 73 } | |
| 74 | |
| 59 } | 75 } |
| 60 | 76 |
| 61 const int NetworkActionPredictor::kMaximumDaysToKeepEntry = 14; | 77 const int NetworkActionPredictor::kMaximumDaysToKeepEntry = 14; |
| 62 | 78 |
| 63 NetworkActionPredictor::NetworkActionPredictor(Profile* profile) | 79 NetworkActionPredictor::NetworkActionPredictor(Profile* profile) |
| 64 : profile_(profile), | 80 : profile_(profile), |
| 65 db_(new NetworkActionPredictorDatabase(profile)), | 81 db_(new NetworkActionPredictorDatabase(profile)), |
| 66 initialized_(false) { | 82 initialized_(false) { |
| 67 content::BrowserThread::PostTask(content::BrowserThread::DB, FROM_HERE, | 83 content::BrowserThread::PostTask(content::BrowserThread::DB, FROM_HERE, |
| 68 base::Bind(&NetworkActionPredictorDatabase::Initialize, db_)); | 84 base::Bind(&NetworkActionPredictorDatabase::Initialize, db_)); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 143 for (int i = 0; i < LAST_PREDICT_ACTION; ++i) { | 159 for (int i = 0; i < LAST_PREDICT_ACTION; ++i) { |
| 144 if (confidence >= kConfidenceCutoff[i]) { | 160 if (confidence >= kConfidenceCutoff[i]) { |
| 145 action = static_cast<Action>(i); | 161 action = static_cast<Action>(i); |
| 146 break; | 162 break; |
| 147 } | 163 } |
| 148 } | 164 } |
| 149 | 165 |
| 150 // Downgrade prerender to preconnect if this is a search match or if omnibox | 166 // Downgrade prerender to preconnect if this is a search match or if omnibox |
| 151 // prerendering is disabled. | 167 // prerendering is disabled. |
| 152 if (action == ACTION_PRERENDER && | 168 if (action == ACTION_PRERENDER && |
| 153 ((match.type == AutocompleteMatch::SEARCH_WHAT_YOU_TYPED || | 169 (IsPreconnectable(match) || !prerender::IsOmniboxEnabled(profile_))) { |
| 154 match.type == AutocompleteMatch::SEARCH_SUGGEST || | |
| 155 match.type == AutocompleteMatch::SEARCH_OTHER_ENGINE) || | |
| 156 !prerender::IsOmniboxEnabled(profile_))) { | |
| 157 action = ACTION_PRECONNECT; | 170 action = ACTION_PRECONNECT; |
| 158 } | 171 } |
| 159 | 172 |
| 160 return action; | 173 return action; |
| 161 } | 174 } |
| 162 | 175 |
| 163 // Return true if the suggestion type warrants a TCP/IP preconnection. | 176 // Return true if the suggestion type warrants a TCP/IP preconnection. |
| 164 // i.e., it is now quite likely that the user will select the related domain. | 177 // i.e., it is now quite likely that the user will select the related domain. |
| 165 // static | 178 // static |
| 166 bool NetworkActionPredictor::IsPreconnectable(const AutocompleteMatch& match) { | 179 bool NetworkActionPredictor::IsPreconnectable(const AutocompleteMatch& match) { |
| 167 switch (match.type) { | 180 return IsSearchType(match.type); |
| 168 // Matches using the user's default search engine. | |
| 169 case AutocompleteMatch::SEARCH_WHAT_YOU_TYPED: | |
| 170 case AutocompleteMatch::SEARCH_HISTORY: | |
| 171 case AutocompleteMatch::SEARCH_SUGGEST: | |
| 172 // A match that uses a non-default search engine (e.g. for tab-to-search). | |
| 173 case AutocompleteMatch::SEARCH_OTHER_ENGINE: | |
| 174 return true; | |
| 175 | |
| 176 default: | |
| 177 return false; | |
| 178 } | |
| 179 } | 181 } |
| 180 | 182 |
| 181 void NetworkActionPredictor::Shutdown() { | 183 void NetworkActionPredictor::Shutdown() { |
| 182 db_->OnPredictorDestroyed(); | 184 db_->OnPredictorDestroyed(); |
| 183 } | 185 } |
| 184 | 186 |
| 185 void NetworkActionPredictor::Observe( | 187 void NetworkActionPredictor::Observe( |
| 186 int type, | 188 int type, |
| 187 const content::NotificationSource& source, | 189 const content::NotificationSource& source, |
| 188 const content::NotificationDetails& details) { | 190 const content::NotificationDetails& details) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 224 default: | 226 default: |
| 225 NOTREACHED() << "Unexpected notification observed."; | 227 NOTREACHED() << "Unexpected notification observed."; |
| 226 break; | 228 break; |
| 227 } | 229 } |
| 228 } | 230 } |
| 229 | 231 |
| 230 void NetworkActionPredictor::OnOmniboxOpenedUrl(const AutocompleteLog& log) { | 232 void NetworkActionPredictor::OnOmniboxOpenedUrl(const AutocompleteLog& log) { |
| 231 if (log.text.length() < kMinimumUserTextLength) | 233 if (log.text.length() < kMinimumUserTextLength) |
| 232 return; | 234 return; |
| 233 | 235 |
| 234 UMA_HISTOGRAM_COUNTS("NetworkActionPredictor.NavigationCount", 1); | 236 const AutocompleteMatch& match = log.result.match_at(log.selected_index); |
| 235 | 237 |
| 236 const GURL& opened_url = | 238 UMA_HISTOGRAM_BOOLEAN("Prerender.OmniboxNavigationsCouldPrerender", |
| 237 log.result.match_at(log.selected_index).destination_url; | 239 prerender::IsOmniboxEnabled(profile_) && !IsSearchType(match.type)); |
| 240 | |
| 241 const GURL& opened_url = match.destination_url; | |
| 238 | 242 |
| 239 const string16 lower_user_text(base::i18n::ToLower(log.text)); | 243 const string16 lower_user_text(base::i18n::ToLower(log.text)); |
| 240 | 244 |
| 241 BeginTransaction(); | 245 BeginTransaction(); |
| 242 // Traverse transitional matches for those that have a user_text that is a | 246 // Traverse transitional matches for those that have a user_text that is a |
| 243 // prefix of |lower_user_text|. | 247 // prefix of |lower_user_text|. |
| 244 for (std::vector<TransitionalMatch>::const_iterator it = | 248 for (std::vector<TransitionalMatch>::const_iterator it = |
| 245 transitional_matches_.begin(); it != transitional_matches_.end(); | 249 transitional_matches_.begin(); it != transitional_matches_.end(); |
| 246 ++it) { | 250 ++it) { |
| 247 if (!StartsWith(lower_user_text, it->user_text, true)) | 251 if (!StartsWith(lower_user_text, it->user_text, true)) |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 474 | 478 |
| 475 content::BrowserThread::PostTask(content::BrowserThread::DB, FROM_HERE, | 479 content::BrowserThread::PostTask(content::BrowserThread::DB, FROM_HERE, |
| 476 base::Bind(&NetworkActionPredictorDatabase::CommitTransaction, db_)); | 480 base::Bind(&NetworkActionPredictorDatabase::CommitTransaction, db_)); |
| 477 } | 481 } |
| 478 | 482 |
| 479 NetworkActionPredictor::TransitionalMatch::TransitionalMatch() { | 483 NetworkActionPredictor::TransitionalMatch::TransitionalMatch() { |
| 480 } | 484 } |
| 481 | 485 |
| 482 NetworkActionPredictor::TransitionalMatch::~TransitionalMatch() { | 486 NetworkActionPredictor::TransitionalMatch::~TransitionalMatch() { |
| 483 } | 487 } |
| OLD | NEW |