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

Unified Diff: chrome/browser/autocomplete/autocomplete_result.h

Issue 10699032: autocomplete: Extract AutocompleteResult from autocomplete.*. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: move comments Created 8 years, 6 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/autocomplete/autocomplete_result.h
diff --git a/chrome/browser/autocomplete/autocomplete_result.h b/chrome/browser/autocomplete/autocomplete_result.h
new file mode 100644
index 0000000000000000000000000000000000000000..1d69b094752b3a49f512daf169ce6c4adf9a921c
--- /dev/null
+++ b/chrome/browser/autocomplete/autocomplete_result.h
@@ -0,0 +1,162 @@
+// Copyright (c) 2012 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.
+
+#ifndef CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_RESULT_H_
+#define CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_RESULT_H_
+#pragma once
+
+#include <stddef.h>
+
+#include <map>
+
+#include "base/basictypes.h"
+#include "chrome/browser/autocomplete/autocomplete_types.h"
+#include "googleurl/src/gurl.h"
+
+class AutocompleteInput;
+struct AutocompleteMatch;
+class AutocompleteProvider;
+
+// All matches from all providers for a particular query. This also tracks
+// what the default match should be if the user doesn't manually select another
+// match.
+class AutocompleteResult {
+ public:
+ typedef ACMatches::const_iterator const_iterator;
+ typedef ACMatches::iterator iterator;
+
+ // The "Selection" struct is the information we need to select the same match
+ // in one result set that was selected in another.
+ struct Selection {
+ Selection()
+ : provider_affinity(NULL),
+ is_history_what_you_typed_match(false) {
+ }
+
+ // Clear the selection entirely.
+ void Clear();
+
+ // True when the selection is empty.
+ bool empty() const {
+ return destination_url.is_empty() && !provider_affinity &&
+ !is_history_what_you_typed_match;
+ }
+
+ // The desired destination URL.
+ GURL destination_url;
+
+ // The desired provider. If we can't find a match with the specified
+ // |destination_url|, we'll use the best match from this provider.
+ const AutocompleteProvider* provider_affinity;
+
+ // True when this is the HistoryURLProvider's "what you typed" match. This
+ // can't be tracked using |destination_url| because its URL changes on every
+ // keystroke, so if this is set, we'll preserve the selection by simply
+ // choosing the new "what you typed" entry and ignoring |destination_url|.
+ bool is_history_what_you_typed_match;
+ };
+
+ // Max number of matches we'll show from the various providers.
+ static const size_t kMaxMatches;
+
+ // The lowest score a match can have and still potentially become the default
+ // match for the result set.
+ static const int kLowestDefaultScore;
+
+ AutocompleteResult();
+ ~AutocompleteResult();
+
+ // operator=() by another name.
+ void CopyFrom(const AutocompleteResult& rhs);
+
+ // Copies matches from |old_matches| to provide a consistant result set. See
+ // comments in code for specifics.
+ void CopyOldMatches(const AutocompleteInput& input,
+ const AutocompleteResult& old_matches);
+
+ // Adds a single match. The match is inserted at the appropriate position
+ // based on relevancy and display order. This is ONLY for use after
+ // SortAndCull() has been invoked, and preserves default_match_.
+ void AddMatch(const AutocompleteMatch& match);
+
+ // Adds a new set of matches to the result set. Does not re-sort.
+ void AppendMatches(const ACMatches& matches);
+
+ // Removes duplicates, puts the list in sorted order and culls to leave only
+ // the best kMaxMatches matches. Sets the default match to the best match
+ // and updates the alternate nav URL.
+ void SortAndCull(const AutocompleteInput& input);
+
+ // Returns true if at least one match was copied from the last result.
+ bool HasCopiedMatches() const;
+
+ // Vector-style accessors/operators.
+ size_t size() const;
+ bool empty() const;
+ const_iterator begin() const;
+ iterator begin();
+ const_iterator end() const;
+ iterator end();
+
+ // Returns the match at the given index.
+ const AutocompleteMatch& match_at(size_t index) const;
+ AutocompleteMatch* match_at(size_t index);
+
+ // Get the default match for the query (not necessarily the first). Returns
+ // end() if there is no default match.
+ const_iterator default_match() const { return default_match_; }
+
+ const GURL& alternate_nav_url() const { return alternate_nav_url_; }
+
+ // Clears the matches for this result set.
+ void Reset();
+
+ void Swap(AutocompleteResult* other);
+
+#ifndef NDEBUG
+ // Does a data integrity check on this result.
+ void Validate() const;
+#endif
+
+ private:
+ typedef std::map<AutocompleteProvider*, ACMatches> ProviderToMatches;
+
+#if defined(OS_ANDROID)
+ // iterator::difference_type is not defined in the STL that we compile with on
+ // Android.
+ typedef int matches_difference_type;
+#else
+ typedef ACMatches::iterator::difference_type matches_difference_type;
+#endif
+
+ // Populates |provider_to_matches| from |matches_|.
+ void BuildProviderToMatches(ProviderToMatches* provider_to_matches) const;
+
+ // Returns true if |matches| contains a match with the same destination as
+ // |match|.
+ static bool HasMatchByDestination(const AutocompleteMatch& match,
+ const ACMatches& matches);
+
+ // Copies matches into this result. |old_matches| gives the matches from the
+ // last result, and |new_matches| the results from this result.
+ void MergeMatchesByProvider(const ACMatches& old_matches,
+ const ACMatches& new_matches);
+
+ ACMatches matches_;
+
+ const_iterator default_match_;
+
+ // The "alternate navigation URL", if any, for this result set. This is a URL
+ // to try offering as a navigational option in case the user navigated to the
+ // URL of the default match but intended something else. For example, if the
+ // user's local intranet contains site "foo", and the user types "foo", we
+ // default to searching for "foo" when the user may have meant to navigate
+ // there. In cases like this, the default match will point to the "search for
+ // 'foo'" result, and this will contain "http://foo/".
+ GURL alternate_nav_url_;
+
+ DISALLOW_COPY_AND_ASSIGN(AutocompleteResult);
+};
+
+#endif // CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_RESULT_H_
« no previous file with comments | « chrome/browser/autocomplete/autocomplete_provider.h ('k') | chrome/browser/autocomplete/autocomplete_result.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698