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 #include "chrome/browser/autocomplete/history_url_provider.h" | 5 #include "chrome/browser/autocomplete/history_url_provider.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/histogram.h" | 10 #include "base/histogram.h" |
11 #include "base/message_loop.h" | 11 #include "base/message_loop.h" |
12 #include "base/string_util.h" | 12 #include "base/string_util.h" |
13 #include "base/utf_string_conversions.h" | 13 #include "base/utf_string_conversions.h" |
14 #include "chrome/browser/history/history.h" | 14 #include "chrome/browser/history/history.h" |
15 #include "chrome/browser/history/history_backend.h" | 15 #include "chrome/browser/history/history_backend.h" |
16 #include "chrome/browser/history/history_database.h" | 16 #include "chrome/browser/history/history_database.h" |
17 #include "chrome/browser/net/url_fixer_upper.h" | 17 #include "chrome/browser/net/url_fixer_upper.h" |
18 #include "chrome/browser/pref_service.h" | 18 #include "chrome/browser/pref_service.h" |
19 #include "chrome/browser/profile.h" | 19 #include "chrome/browser/profile.h" |
20 #include "chrome/common/pref_names.h" | 20 #include "chrome/common/pref_names.h" |
21 #include "chrome/common/url_constants.h" | 21 #include "chrome/common/url_constants.h" |
22 #include "googleurl/src/gurl.h" | 22 #include "googleurl/src/gurl.h" |
23 #include "googleurl/src/url_parse.h" | 23 #include "googleurl/src/url_parse.h" |
24 #include "googleurl/src/url_util.h" | 24 #include "googleurl/src/url_util.h" |
25 #include "net/base/net_util.h" | 25 #include "net/base/net_util.h" |
26 | 26 |
27 using base::Time; | 27 using base::Time; |
28 using base::TimeDelta; | 28 using base::TimeDelta; |
29 using base::TimeTicks; | 29 using base::TimeTicks; |
30 // TODO(mrossetti): Move these to a more appropriate place. | |
31 using history::Prefix; | 30 using history::Prefix; |
32 using history::Prefixes; | 31 using history::Prefixes; |
33 using history::HistoryMatch; | 32 using history::HistoryMatch; |
34 using history::HistoryMatches; | 33 using history::HistoryMatches; |
35 | 34 |
36 namespace history { | 35 namespace history { |
37 | 36 |
38 // Returns true if |url| is just a host (e.g. "http://www.google.com/") and | 37 // Returns true if |url| is just a host (e.g. "http://www.google.com/") and |
39 // not some other subpage (e.g. "http://www.google.com/foo.html"). | 38 // not some other subpage (e.g. "http://www.google.com/foo.html"). |
40 bool IsHostOnly(const GURL& url) { | 39 bool IsHostOnly(const GURL& url) { |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 bool trim_http, | 106 bool trim_http, |
108 const std::wstring& languages) | 107 const std::wstring& languages) |
109 : message_loop(MessageLoop::current()), | 108 : message_loop(MessageLoop::current()), |
110 input(input), | 109 input(input), |
111 trim_http(trim_http), | 110 trim_http(trim_http), |
112 cancel(false), | 111 cancel(false), |
113 failed(false), | 112 failed(false), |
114 languages(languages) { | 113 languages(languages) { |
115 } | 114 } |
116 | 115 |
| 116 HistoryURLProvider::HistoryURLProvider(ACProviderListener* listener, |
| 117 Profile* profile) |
| 118 : AutocompleteProvider(listener, profile, "HistoryURL"), |
| 119 prefixes_(GetPrefixes()), |
| 120 params_(NULL) { |
| 121 } |
| 122 |
117 void HistoryURLProvider::Start(const AutocompleteInput& input, | 123 void HistoryURLProvider::Start(const AutocompleteInput& input, |
118 bool minimal_changes) { | 124 bool minimal_changes) { |
119 // NOTE: We could try hard to do less work in the |minimal_changes| case | 125 // NOTE: We could try hard to do less work in the |minimal_changes| case |
120 // here; some clever caching would let us reuse the raw matches from the | 126 // here; some clever caching would let us reuse the raw matches from the |
121 // history DB without re-querying. However, we'd still have to go back to | 127 // history DB without re-querying. However, we'd still have to go back to |
122 // the history thread to mark these up properly, and if pass 2 is currently | 128 // the history thread to mark these up properly, and if pass 2 is currently |
123 // running, we'd need to wait for it to return to the main thread before | 129 // running, we'd need to wait for it to return to the main thread before |
124 // doing this (we can't just write new data for it to read due to thread | 130 // doing this (we can't just write new data for it to read due to thread |
125 // safety issues). At that point it's just as fast, and easier, to simply | 131 // safety issues). At that point it's just as fast, and easier, to simply |
126 // re-run the query from scratch and ignore |minimal_changes|. | 132 // re-run the query from scratch and ignore |minimal_changes|. |
(...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
777 else | 783 else |
778 ++j; | 784 ++j; |
779 } | 785 } |
780 } | 786 } |
781 } | 787 } |
782 | 788 |
783 void HistoryURLProvider::CullPoorMatches(HistoryMatches* matches) const { | 789 void HistoryURLProvider::CullPoorMatches(HistoryMatches* matches) const { |
784 Time recent_threshold = history::AutocompleteAgeThreshold(); | 790 Time recent_threshold = history::AutocompleteAgeThreshold(); |
785 for (HistoryMatches::iterator i(matches->begin()); i != matches->end();) { | 791 for (HistoryMatches::iterator i(matches->begin()); i != matches->end();) { |
786 const history::URLRow& url_info(i->url_info); | 792 const history::URLRow& url_info(i->url_info); |
787 if ((url_info.typed_count() <= | 793 if ((url_info.typed_count() <= history::kLowQualityMatchTypedLimit) && |
788 history::kLowQualityMatchTypedLimit) && | 794 (url_info.visit_count() <= history::kLowQualityMatchVisitLimit) && |
789 (url_info.visit_count() <= | |
790 history::kLowQualityMatchVisitLimit) && | |
791 (url_info.last_visit() < recent_threshold)) { | 795 (url_info.last_visit() < recent_threshold)) { |
792 i = matches->erase(i); | 796 i = matches->erase(i); |
793 } else { | 797 } else { |
794 ++i; | 798 ++i; |
795 } | 799 } |
796 } | 800 } |
797 } | 801 } |
798 | 802 |
799 void HistoryURLProvider::CullRedirects(history::HistoryBackend* backend, | 803 void HistoryURLProvider::CullRedirects(history::HistoryBackend* backend, |
800 HistoryMatches* matches, | 804 HistoryMatches* matches, |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
898 &match.contents_class); | 902 &match.contents_class); |
899 } | 903 } |
900 match.description = UTF16ToWide(info.title()); | 904 match.description = UTF16ToWide(info.title()); |
901 AutocompleteMatch::ClassifyMatchInString(params->input.text(), | 905 AutocompleteMatch::ClassifyMatchInString(params->input.text(), |
902 UTF16ToWide(info.title()), | 906 UTF16ToWide(info.title()), |
903 ACMatchClassification::NONE, | 907 ACMatchClassification::NONE, |
904 &match.description_class); | 908 &match.description_class); |
905 | 909 |
906 return match; | 910 return match; |
907 } | 911 } |
OLD | NEW |