| 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 | 
|---|