| 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/history/url_index_private_data.h" | 5 #include "chrome/browser/history/url_index_private_data.h" |
| 6 | 6 |
| 7 #include <functional> | 7 #include <functional> |
| 8 #include <iterator> | 8 #include <iterator> |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <numeric> | 10 #include <numeric> |
| 11 #include <string> | 11 #include <string> |
| 12 #include <vector> | 12 #include <vector> |
| 13 | 13 |
| 14 #include "base/basictypes.h" | 14 #include "base/basictypes.h" |
| 15 #include "base/file_util.h" | 15 #include "base/file_util.h" |
| 16 #include "base/i18n/break_iterator.h" | 16 #include "base/i18n/break_iterator.h" |
| 17 #include "base/i18n/case_conversion.h" | 17 #include "base/i18n/case_conversion.h" |
| 18 #include "base/metrics/histogram.h" | 18 #include "base/metrics/histogram.h" |
| 19 #include "base/strings/string_util.h" | 19 #include "base/strings/string_util.h" |
| 20 #include "base/strings/utf_string_conversions.h" | 20 #include "base/strings/utf_string_conversions.h" |
| 21 #include "base/time/time.h" | 21 #include "base/time/time.h" |
| 22 #include "chrome/browser/autocomplete/autocomplete_provider.h" | |
| 23 #include "chrome/browser/history/history_database.h" | 22 #include "chrome/browser/history/history_database.h" |
| 24 #include "chrome/browser/history/history_db_task.h" | 23 #include "chrome/browser/history/history_db_task.h" |
| 25 #include "chrome/browser/history/history_service.h" | 24 #include "chrome/browser/history/history_service.h" |
| 26 #include "chrome/browser/history/in_memory_url_index.h" | 25 #include "chrome/browser/history/in_memory_url_index.h" |
| 27 #include "components/bookmarks/browser/bookmark_service.h" | 26 #include "components/bookmarks/browser/bookmark_service.h" |
| 28 #include "components/bookmarks/browser/bookmark_utils.h" | 27 #include "components/bookmarks/browser/bookmark_utils.h" |
| 29 #include "net/base/net_util.h" | 28 #include "net/base/net_util.h" |
| 30 | 29 |
| 31 #if defined(USE_SYSTEM_PROTOBUF) | 30 #if defined(USE_SYSTEM_PROTOBUF) |
| 32 #include <google/protobuf/repeated_field.h> | 31 #include <google/protobuf/repeated_field.h> |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 : restored_cache_version_(0), | 142 : restored_cache_version_(0), |
| 144 saved_cache_version_(kCurrentCacheFileVersion), | 143 saved_cache_version_(kCurrentCacheFileVersion), |
| 145 pre_filter_item_count_(0), | 144 pre_filter_item_count_(0), |
| 146 post_filter_item_count_(0), | 145 post_filter_item_count_(0), |
| 147 post_scoring_item_count_(0) { | 146 post_scoring_item_count_(0) { |
| 148 } | 147 } |
| 149 | 148 |
| 150 ScoredHistoryMatches URLIndexPrivateData::HistoryItemsForTerms( | 149 ScoredHistoryMatches URLIndexPrivateData::HistoryItemsForTerms( |
| 151 base::string16 search_string, | 150 base::string16 search_string, |
| 152 size_t cursor_position, | 151 size_t cursor_position, |
| 152 size_t max_matches, |
| 153 const std::string& languages, | 153 const std::string& languages, |
| 154 BookmarkService* bookmark_service) { | 154 BookmarkService* bookmark_service) { |
| 155 // If cursor position is set and useful (not at either end of the | 155 // If cursor position is set and useful (not at either end of the |
| 156 // string), allow the search string to be broken at cursor position. | 156 // string), allow the search string to be broken at cursor position. |
| 157 // We do this by pretending there's a space where the cursor is. | 157 // We do this by pretending there's a space where the cursor is. |
| 158 if ((cursor_position != base::string16::npos) && | 158 if ((cursor_position != base::string16::npos) && |
| 159 (cursor_position < search_string.length()) && | 159 (cursor_position < search_string.length()) && |
| 160 (cursor_position > 0)) { | 160 (cursor_position > 0)) { |
| 161 search_string.insert(cursor_position, base::ASCIIToUTF16(" ")); | 161 search_string.insert(cursor_position, base::ASCIIToUTF16(" ")); |
| 162 } | 162 } |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 239 // excludes a long list of whitespace.) One could write a scoring | 239 // excludes a long list of whitespace.) One could write a scoring |
| 240 // function that gives a reasonable order to matches when there | 240 // function that gives a reasonable order to matches when there |
| 241 // are no terms (i.e., all the words are some form of whitespace), | 241 // are no terms (i.e., all the words are some form of whitespace), |
| 242 // but this is such a rare edge case that it's not worth the time. | 242 // but this is such a rare edge case that it's not worth the time. |
| 243 return scored_items; | 243 return scored_items; |
| 244 } | 244 } |
| 245 scored_items = std::for_each(history_id_set.begin(), history_id_set.end(), | 245 scored_items = std::for_each(history_id_set.begin(), history_id_set.end(), |
| 246 AddHistoryMatch(*this, languages, bookmark_service, lower_raw_string, | 246 AddHistoryMatch(*this, languages, bookmark_service, lower_raw_string, |
| 247 lower_raw_terms, base::Time::Now())).ScoredMatches(); | 247 lower_raw_terms, base::Time::Now())).ScoredMatches(); |
| 248 | 248 |
| 249 // Select and sort only the top kMaxMatches results. | 249 // Select and sort only the top |max_matches| results. |
| 250 if (scored_items.size() > AutocompleteProvider::kMaxMatches) { | 250 if (scored_items.size() > max_matches) { |
| 251 std::partial_sort(scored_items.begin(), | 251 std::partial_sort(scored_items.begin(), |
| 252 scored_items.begin() + | 252 scored_items.begin() + |
| 253 AutocompleteProvider::kMaxMatches, | 253 max_matches, |
| 254 scored_items.end(), | 254 scored_items.end(), |
| 255 ScoredHistoryMatch::MatchScoreGreater); | 255 ScoredHistoryMatch::MatchScoreGreater); |
| 256 scored_items.resize(AutocompleteProvider::kMaxMatches); | 256 scored_items.resize(max_matches); |
| 257 } else { | 257 } else { |
| 258 std::sort(scored_items.begin(), scored_items.end(), | 258 std::sort(scored_items.begin(), scored_items.end(), |
| 259 ScoredHistoryMatch::MatchScoreGreater); | 259 ScoredHistoryMatch::MatchScoreGreater); |
| 260 } | 260 } |
| 261 post_scoring_item_count_ = scored_items.size(); | 261 post_scoring_item_count_ = scored_items.size(); |
| 262 | 262 |
| 263 if (was_trimmed) { | 263 if (was_trimmed) { |
| 264 search_term_cache_.clear(); // Invalidate the term cache. | 264 search_term_cache_.clear(); // Invalidate the term cache. |
| 265 } else { | 265 } else { |
| 266 // Remove any stale SearchTermCacheItems. | 266 // Remove any stale SearchTermCacheItems. |
| (...skipping 1070 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1337 // recently visited (within the last 12/24 hours) as highly important. Get | 1337 // recently visited (within the last 12/24 hours) as highly important. Get |
| 1338 // input from mpearson. | 1338 // input from mpearson. |
| 1339 if (r1.typed_count() != r2.typed_count()) | 1339 if (r1.typed_count() != r2.typed_count()) |
| 1340 return (r1.typed_count() > r2.typed_count()); | 1340 return (r1.typed_count() > r2.typed_count()); |
| 1341 if (r1.visit_count() != r2.visit_count()) | 1341 if (r1.visit_count() != r2.visit_count()) |
| 1342 return (r1.visit_count() > r2.visit_count()); | 1342 return (r1.visit_count() > r2.visit_count()); |
| 1343 return (r1.last_visit() > r2.last_visit()); | 1343 return (r1.last_visit() > r2.last_visit()); |
| 1344 } | 1344 } |
| 1345 | 1345 |
| 1346 } // namespace history | 1346 } // namespace history |
| OLD | NEW |