| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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_AUTOCOMPLETE_HISTORY_URL_PROVIDER_H_ | 5 #ifndef CHROME_BROWSER_AUTOCOMPLETE_HISTORY_URL_PROVIDER_H_ |
| 6 #define CHROME_BROWSER_AUTOCOMPLETE_HISTORY_URL_PROVIDER_H_ | 6 #define CHROME_BROWSER_AUTOCOMPLETE_HISTORY_URL_PROVIDER_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <vector> | |
| 10 | |
| 11 #include "chrome/browser/autocomplete/autocomplete.h" | 9 #include "chrome/browser/autocomplete/autocomplete.h" |
| 12 #include "chrome/browser/history/history_types.h" | 10 #include "chrome/browser/autocomplete/history_provider_util.h" |
| 13 | 11 |
| 14 class MessageLoop; | 12 class MessageLoop; |
| 15 class Profile; | 13 class Profile; |
| 16 | 14 |
| 17 namespace history { | 15 namespace history { |
| 18 class HistoryBackend; | 16 |
| 17 class HistoryBackend; |
| 18 class URLDatabase; |
| 19 class URLRow; |
| 20 |
| 19 } // namespace history | 21 } // namespace history |
| 20 | 22 |
| 21 // How history autocomplete works | 23 // How history autocomplete works |
| 22 // ============================== | 24 // ============================== |
| 23 // | 25 // |
| 24 // Read down this diagram for temporal ordering. | 26 // Read down this diagram for temporal ordering. |
| 25 // | 27 // |
| 26 // Main thread History thread | 28 // Main thread History thread |
| 27 // ----------- -------------- | 29 // ----------- -------------- |
| 28 // AutocompleteController::Start | 30 // AutocompleteController::Start |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 // | 126 // |
| 125 // Note: This object can get leaked on shutdown if there are pending | 127 // Note: This object can get leaked on shutdown if there are pending |
| 126 // requests on the database (which hold a reference to us). Normally, these | 128 // requests on the database (which hold a reference to us). Normally, these |
| 127 // messages get flushed for each thread. We do a round trip from main, to | 129 // messages get flushed for each thread. We do a round trip from main, to |
| 128 // history, back to main while holding a reference. If the main thread | 130 // history, back to main while holding a reference. If the main thread |
| 129 // completes before the history thread, the message to delegate back to the | 131 // completes before the history thread, the message to delegate back to the |
| 130 // main thread will not run and the reference will leak. Therefore, don't do | 132 // main thread will not run and the reference will leak. Therefore, don't do |
| 131 // anything on destruction. | 133 // anything on destruction. |
| 132 class HistoryURLProvider : public AutocompleteProvider { | 134 class HistoryURLProvider : public AutocompleteProvider { |
| 133 public: | 135 public: |
| 134 HistoryURLProvider(ACProviderListener* listener, Profile* profile) | 136 HistoryURLProvider(ACProviderListener* listener, Profile* profile); |
| 135 : AutocompleteProvider(listener, profile, "HistoryURL"), | |
| 136 prefixes_(GetPrefixes()), | |
| 137 params_(NULL) { | |
| 138 } | |
| 139 | 137 |
| 140 #ifdef UNIT_TEST | 138 #ifdef UNIT_TEST |
| 141 HistoryURLProvider(ACProviderListener* listener, | 139 HistoryURLProvider(ACProviderListener* listener, |
| 142 Profile* profile, | 140 Profile* profile, |
| 143 const std::wstring& languages) | 141 const std::wstring& languages) |
| 144 : AutocompleteProvider(listener, profile, "History"), | 142 : AutocompleteProvider(listener, profile, "History"), |
| 145 prefixes_(GetPrefixes()), | 143 prefixes_(GetPrefixes()), |
| 146 params_(NULL), | 144 params_(NULL), |
| 147 languages_(languages) { | 145 languages_(languages) {} |
| 148 } | |
| 149 #endif | 146 #endif |
| 150 // no destructor (see note above) | 147 // no destructor (see note above) |
| 151 | 148 |
| 152 // AutocompleteProvider | 149 // AutocompleteProvider |
| 153 virtual void Start(const AutocompleteInput& input, | 150 virtual void Start(const AutocompleteInput& input, |
| 154 bool minimal_changes); | 151 bool minimal_changes); |
| 155 virtual void Stop(); | 152 virtual void Stop(); |
| 156 virtual void DeleteMatch(const AutocompleteMatch& match); | 153 virtual void DeleteMatch(const AutocompleteMatch& match); |
| 157 | 154 |
| 158 // Runs the history query on the history thread, called by the history | 155 // Runs the history query on the history thread, called by the history |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 size_t max_results) const; | 291 size_t max_results) const; |
| 295 | 292 |
| 296 // Helper function for CullRedirects, this removes all but the first | 293 // Helper function for CullRedirects, this removes all but the first |
| 297 // occurance of [any of the set of strings in |remove|] from the |matches| | 294 // occurance of [any of the set of strings in |remove|] from the |matches| |
| 298 // list. | 295 // list. |
| 299 // | 296 // |
| 300 // The return value is the index of the item that is after the item in the | 297 // The return value is the index of the item that is after the item in the |
| 301 // input identified by |source_index|. If |source_index| or an item before | 298 // input identified by |source_index|. If |source_index| or an item before |
| 302 // is removed, the next item will be shifted, and this allows the caller to | 299 // is removed, the next item will be shifted, and this allows the caller to |
| 303 // pick up on the next one when this happens. | 300 // pick up on the next one when this happens. |
| 304 size_t RemoveSubsequentMatchesOf( | 301 size_t RemoveSubsequentMatchesOf(history::HistoryMatches* matches, |
| 305 history::HistoryMatches* matches, | 302 size_t source_index, |
| 306 size_t source_index, | 303 const std::vector<GURL>& remove) const; |
| 307 const std::vector<GURL>& remove) const; | |
| 308 | 304 |
| 309 // Converts a line from the database into an autocomplete match for display. | 305 // Converts a line from the database into an autocomplete match for display. |
| 310 AutocompleteMatch HistoryMatchToACMatch( | 306 AutocompleteMatch HistoryMatchToACMatch( |
| 311 HistoryURLProviderParams* params, | 307 HistoryURLProviderParams* params, |
| 312 const history::HistoryMatch& history_match, | 308 const history::HistoryMatch& history_match, |
| 313 MatchType match_type, | 309 MatchType match_type, |
| 314 size_t match_number); | 310 size_t match_number); |
| 315 | 311 |
| 316 // Prefixes to try appending to user input when looking for a match. | 312 // Prefixes to try appending to user input when looking for a match. |
| 317 const history::Prefixes prefixes_; | 313 const history::Prefixes prefixes_; |
| 318 | 314 |
| 319 // Params for the current query. The provider should not free this directly; | 315 // Params for the current query. The provider should not free this directly; |
| 320 // instead, it is passed as a parameter through the history backend, and the | 316 // instead, it is passed as a parameter through the history backend, and the |
| 321 // parameter itself is freed once it's no longer needed. The only reason we | 317 // parameter itself is freed once it's no longer needed. The only reason we |
| 322 // keep this member is so we can set the cancel bit on it. | 318 // keep this member is so we can set the cancel bit on it. |
| 323 HistoryURLProviderParams* params_; | 319 HistoryURLProviderParams* params_; |
| 324 | 320 |
| 325 // Only used by unittests; if non-empty, overrides accept-languages in the | 321 // Only used by unittests; if non-empty, overrides accept-languages in the |
| 326 // profile's pref system. | 322 // profile's pref system. |
| 327 std::wstring languages_; | 323 std::wstring languages_; |
| 328 }; | 324 }; |
| 329 | 325 |
| 330 #endif // CHROME_BROWSER_AUTOCOMPLETE_HISTORY_URL_PROVIDER_H_ | 326 #endif // CHROME_BROWSER_AUTOCOMPLETE_HISTORY_URL_PROVIDER_H_ |
| OLD | NEW |