Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5529)

Unified Diff: chrome/browser/history/chrome_scored_history_match_client.cc

Issue 903493002: Componentize ScoredHistoryMatch (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/history/chrome_scored_history_match_client.cc
diff --git a/chrome/browser/history/chrome_scored_history_match_client.cc b/chrome/browser/history/chrome_scored_history_match_client.cc
new file mode 100644
index 0000000000000000000000000000000000000000..52366efc99c1a34bb2a3dac9ad76f7f335b852ea
--- /dev/null
+++ b/chrome/browser/history/chrome_scored_history_match_client.cc
@@ -0,0 +1,100 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/history/chrome_scored_history_match_client.h"
+
+#include "base/strings/utf_string_conversions.h"
+#include "components/bookmarks/browser/bookmark_model.h"
+#include "components/bookmarks/browser/bookmark_utils.h"
+#include "components/omnibox/omnibox_field_trial.h"
+#include "components/omnibox/url_prefix.h"
+
+ChromeScoredHistoryMatchClient::ChromeScoredHistoryMatchClient(
+ bookmarks::BookmarkModel* bookmark_model)
+ : bookmark_model_(bookmark_model) {
+}
+
+ChromeScoredHistoryMatchClient::~ChromeScoredHistoryMatchClient() {
+}
+
+bool ChromeScoredHistoryMatchClient::IsBoomarked(const GURL& url) const {
+ return bookmark_model_ && bookmark_model_->IsBookmarked(url);
+}
+
+int ChromeScoredHistoryMatchClient::BookmarkValue() const {
+ return OmniboxFieldTrial::HQPBookmarkValue();
+}
+
+bool ChromeScoredHistoryMatchClient::AllowTldMatches() const {
+ return OmniboxFieldTrial::HQPAllowMatchInTLDValue();
+}
+
+bool ChromeScoredHistoryMatchClient::AllowSchemeMatches() const {
+ return OmniboxFieldTrial::HQPAllowMatchInSchemeValue();
+}
+
+bool ChromeScoredHistoryMatchClient::CanInlineAutocompleteMatch(
+ const GURL& url,
+ const base::string16& term,
+ bool* innermost_match) const {
+ // We can inline autocomplete a match if:
+ // 1) there is only one search term
+ // 2) AND the match begins immediately after one of the prefixes in
+ // URLPrefix such as http://www and https:// (note that one of these
+ // is the empty prefix, for cases where the user has typed the scheme)
+ // 3) AND the search string does not end in whitespace (making it look to
+ // the IMUI as though there is a single search term when actually there
+ // is a second, empty term).
+ // |best_inlineable_prefix| stores the inlineable prefix computed in
+ // clause (2) or null if no such prefix exists. (The URL is not inlineable.)
+ // Note that using the best prefix here means that when multiple
+ // prefixes match, we'll choose to inline following the longest one.
+ // For a URL like "http://www.washingtonmutual.com", this means
+ // typing "w" will inline "ashington..." instead of "ww.washington...".
+ base::string16 url_spec = base::UTF8ToUTF16(url.spec());
+ const URLPrefix* best_inlineable_prefix =
+ URLPrefix::BestURLPrefix(url_spec, term);
+ if (best_inlineable_prefix && innermost_match) {
+ // Initialize innermost_match.
+ // The idea here is that matches that occur in the scheme or
+ // "www." are worse than matches which don't. For the URLs
+ // "http://www.google.com" and "http://wellsfargo.com", we want
+ // the omnibox input "w" to cause the latter URL to rank higher
+ // than the former. Note that this is not the same as checking
+ // whether one match's inlinable prefix has more components than
+ // the other match's, since in this example, both matches would
+ // have an inlinable prefix of "http://", which is one component.
+ //
+ // Instead, we look for the overall best (i.e., most components)
+ // prefix of the current URL, and then check whether the inlinable
+ // prefix has that many components. If it does, this is an
+ // "innermost" match, and should be boosted. In the example
+ // above, the best prefixes for the two URLs have two and one
+ // components respectively, while the inlinable prefixes each
+ // have one component; this means the first match is not innermost
+ // and the second match is innermost, resulting in us boosting the
+ // second match.
+ //
+ // Now, the code that implements this.
+ // The deepest prefix for this URL regardless of where the match is.
+ const URLPrefix* best_prefix =
+ URLPrefix::BestURLPrefix(url_spec, base::string16());
+ DCHECK(best_prefix);
+ // If the URL is inlineable, we must have a match. Note the prefix that
+ // makes it inlineable may be empty.
+ *innermost_match = (best_inlineable_prefix->num_components ==
+ best_prefix->num_components);
+ }
+ return best_inlineable_prefix != nullptr;
+}
+
+base::string16 ChromeScoredHistoryMatchClient::CleanUpUrlAndTitleForMatching(
+ const GURL& url,
+ const std::string& languages,
+ base::OffsetAdjuster::Adjustments* adjustments,
+ base::string16* title) const {
+ if (title)
+ *title = bookmarks::CleanUpTitleForMatching(*title);
+ return bookmarks::CleanUpUrlForMatching(url, languages, adjustments);
+}
« no previous file with comments | « chrome/browser/history/chrome_scored_history_match_client.h ('k') | chrome/browser/history/history_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698