| Index: chrome/browser/search_engines/template_url.h
|
| ===================================================================
|
| --- chrome/browser/search_engines/template_url.h (revision 131175)
|
| +++ chrome/browser/search_engines/template_url.h (working copy)
|
| @@ -14,31 +14,20 @@
|
| #include "chrome/browser/search_engines/template_url_id.h"
|
| #include "googleurl/src/gurl.h"
|
|
|
| -class PrefService;
|
| class Profile;
|
| class SearchTermsData;
|
| class TemplateURL;
|
| -class TemplateURLParsingContext;
|
| -class WebDataService;
|
|
|
| -// TemplateURL represents the relevant portions of the Open Search Description
|
| -// Document (http://www.opensearch.org/Specifications/OpenSearch).
|
| -// The main use case for TemplateURL is to use the TemplateURLRef returned by
|
| -// suggestions_url or url for keyword/suggestion expansion:
|
| -// . suggestions_url describes a URL that is ideal for as you type suggestions.
|
| -// The returned results are in the mime type application/x-suggestions+json.
|
| -// . url describes a URL that may be used as a shortcut. Returned results are
|
| -// are text/html.
|
| -// Before using either one, make sure it's non-NULL, and if you intend to use
|
| -// it to replace search terms, make sure SupportsReplacement returns true.
|
| -// To use either URL invoke the ReplaceSearchTerms method on the corresponding
|
| -// TemplateURLRef.
|
| +
|
| +// TemplateURLRef -------------------------------------------------------------
|
| +
|
| +// A TemplateURLRef represents a single URL within the larger TemplateURL class
|
| +// (which represents an entire "search engine", see below). If
|
| +// SupportsReplacement() is true, this URL has placeholders in it, for which
|
| +// callers can substitute values to get a "real" URL using ReplaceSearchTerms().
|
| //
|
| -// For files parsed from the Web, be sure and invoke IsValid. IsValid returns
|
| -// true if the URL could be parsed.
|
| -//
|
| -// Both TemplateURL and TemplateURLRef have value semantics. This allows the
|
| -// UI to create a copy while the user modifies the values.
|
| +// TemplateURLRefs always have a non-NULL |owner_| TemplateURL, which they
|
| +// access in order to get at important data like the underlying URL string.
|
| class TemplateURLRef {
|
| public:
|
| // Magic numbers to pass to ReplaceSearchTerms() for the |accepted_suggestion|
|
| @@ -246,157 +235,190 @@
|
| DISALLOW_COPY_AND_ASSIGN(TemplateURLRef);
|
| };
|
|
|
| -// Describes the relevant portions of a single OSD document.
|
| -class TemplateURL {
|
| - public:
|
| - TemplateURL();
|
|
|
| - TemplateURL(const TemplateURL& other);
|
| - TemplateURL& operator=(const TemplateURL& other);
|
| +// TemplateURLData ------------------------------------------------------------
|
|
|
| - ~TemplateURL();
|
| +// The data for the TemplateURL. Separating this into its own class allows most
|
| +// users to do SSA-style usage of TemplateURL: construct a TemplateURLData with
|
| +// whatever fields are desired, then create an immutable TemplateURL from it.
|
| +struct TemplateURLData {
|
| + TemplateURLData();
|
| + ~TemplateURLData();
|
|
|
| - // Generates a favicon URL from the specified url.
|
| - static GURL GenerateFaviconURL(const GURL& url);
|
| -
|
| // A short description of the template. This is the name we show to the user
|
| - // in various places that use keywords. For example, the location bar shows
|
| - // this when the user selects the keyword.
|
| - void set_short_name(const string16& short_name) {
|
| - short_name_ = short_name;
|
| - }
|
| - const string16& short_name() const { return short_name_; }
|
| - // An accessor for the short_name, but adjusted so it can be appropriately
|
| - // displayed even if it is LTR and the UI is RTL.
|
| - string16 AdjustedShortNameForLocaleDirection() const;
|
| + // in various places that use TemplateURLs. For example, the location bar
|
| + // shows this when the user selects a substituting match.
|
| + string16 short_name;
|
|
|
| - // Parameterized URL for providing the results.
|
| - void SetURL(const std::string& url);
|
| - const std::string& url() const { return url_; }
|
| + // The shortcut for this TemplateURL. May be empty.
|
| + void SetKeyword(const string16& keyword) const;
|
| + const string16& keyword(const TemplateURL* t_url) const;
|
| + // TODO(pkasting): This should only be necessary until we eliminate keyword
|
| + // autogeneration.
|
| + const string16& raw_keyword() const { return keyword_; }
|
|
|
| - // URL providing JSON results. This is typically used to provide suggestions
|
| - // as you type.
|
| - void SetSuggestionsURL(const std::string& url);
|
| - const std::string& suggestions_url() const { return suggestions_url_; }
|
| -
|
| - // Parameterized URL for instant results.
|
| - void SetInstantURL(const std::string& url);
|
| - const std::string& instant_url() const { return instant_url_; }
|
| -
|
| - // URL to the OSD file this came from. May be empty.
|
| - void set_originating_url(const GURL& url) {
|
| - originating_url_ = url;
|
| - }
|
| - const GURL& originating_url() const { return originating_url_; }
|
| -
|
| - // The shortcut for this template url. May be empty.
|
| - void set_keyword(const string16& keyword);
|
| - const string16& keyword() const;
|
| -
|
| - // Whether to autogenerate a keyword from the url() in GetKeyword(). Most
|
| + // Whether to autogenerate a keyword in TemplateURL::GetKeyword(). Most
|
| // consumers should not need this.
|
| - // NOTE: Calling set_keyword() turns this back off. Manual and automatic
|
| + // NOTE: Calling SetKeyword() turns this back off. Manual and automatic
|
| // keywords are mutually exclusive.
|
| - void set_autogenerate_keyword(bool autogenerate_keyword) {
|
| - autogenerate_keyword_ = autogenerate_keyword;
|
| - if (autogenerate_keyword_) {
|
| - keyword_.clear();
|
| - keyword_generated_ = false;
|
| - }
|
| - }
|
| - bool autogenerate_keyword() const {
|
| - return autogenerate_keyword_;
|
| - }
|
| + void SetAutogenerateKeyword(bool autogenerate_keyword) const;
|
| + bool autogenerate_keyword() const { return autogenerate_keyword_; }
|
|
|
| // Ensures that the keyword is generated. Most consumers should not need this
|
| // because it is done automatically. Use this method on the UI thread, so
|
| // the keyword may be accessed on another thread.
|
| - void EnsureKeyword() const;
|
| + void EnsureKeyword(const TemplateURL* t_url) const;
|
|
|
| - // Whether this keyword is shown in the default list of search providers. This
|
| - // is just a property and does not indicate whether this TemplateURL has
|
| - // a TemplateURLRef that supports replacement. Use ShowInDefaultList to
|
| - // test both.
|
| - // The default value is false.
|
| - void set_show_in_default_list(bool show_in_default_list) {
|
| - show_in_default_list_ = show_in_default_list;
|
| - }
|
| - bool show_in_default_list() const { return show_in_default_list_; }
|
| + // The raw URL for the TemplateURL, which may not be valid as-is (e.g. because
|
| + // it requires substitutions first).
|
| + void SetURL(const std::string& url);
|
| + const std::string& url() const { return url_; }
|
|
|
| - // Returns true if show_in_default_list() is true and this TemplateURL has a
|
| - // TemplateURLRef that supports replacement.
|
| - bool ShowInDefaultList() const;
|
| + // Optional additional raw URLs.
|
| + std::string suggestions_url;
|
| + std::string instant_url;
|
|
|
| + // Optional favicon for the TemplateURL.
|
| + GURL favicon_url;
|
| +
|
| + // URL to the OSD file this came from. May be empty.
|
| + GURL originating_url;
|
| +
|
| + // Whether this TemplateURL is shown in the default list of search providers.
|
| + // This is just a property and does not indicate whether the TemplateURL has a
|
| + // TemplateURLRef that supports replacement. Use
|
| + // TemplateURL::ShowInDefaultList() to test both.
|
| + bool show_in_default_list;
|
| +
|
| // Whether it's safe for auto-modification code (the autogenerator and the
|
| // code that imports data from other browsers) to replace the TemplateURL.
|
| - // This should be set to false for any keyword the user edits, or any keyword
|
| - // that the user clearly manually edited in the past, like a bookmark keyword
|
| - // from another browser.
|
| - void set_safe_for_autoreplace(bool safe_for_autoreplace) {
|
| - safe_for_autoreplace_ = safe_for_autoreplace;
|
| - }
|
| - bool safe_for_autoreplace() const { return safe_for_autoreplace_; }
|
| + // This should be set to false for any TemplateURL the user edits, or any
|
| + // TemplateURL that the user clearly manually edited in the past, like a
|
| + // bookmark keyword from another browser.
|
| + bool safe_for_autoreplace;
|
|
|
| - // The favicon. This is optional.
|
| - void set_favicon_url(const GURL& url) { favicon_url_ = url; }
|
| - const GURL& favicon_url() const { return favicon_url_; }
|
| + // The list of supported encodings for the search terms. This may be empty,
|
| + // which indicates the terms should be encoded with UTF-8.
|
| + std::vector<std::string> input_encodings;
|
|
|
| - // Date this keyword was created.
|
| + // Unique identifier of this TemplateURL. The unique ID is set by the
|
| + // TemplateURLService when the TemplateURL is added to it.
|
| + TemplateURLID id;
|
| +
|
| + // Date this TemplateURL was created.
|
| //
|
| - // NOTE: this may be 0, which indicates the keyword was created before we
|
| + // NOTE: this may be 0, which indicates the TemplateURL was created before we
|
| // started tracking creation time.
|
| - void set_date_created(base::Time time) { date_created_ = time; }
|
| - base::Time date_created() const { return date_created_; }
|
| + base::Time date_created;
|
|
|
| - // The last time this keyword was modified by a user, since creation.
|
| + // The last time this TemplateURL was modified by a user, since creation.
|
| //
|
| // NOTE: Like date_created above, this may be 0.
|
| - void set_last_modified(base::Time time) { last_modified_ = time; }
|
| - base::Time last_modified() const { return last_modified_; }
|
| + base::Time last_modified;
|
|
|
| // True if this TemplateURL was automatically created by the administrator via
|
| // group policy.
|
| - void set_created_by_policy(bool created_by_policy) {
|
| - created_by_policy_ = created_by_policy;
|
| + bool created_by_policy;
|
| +
|
| + // Number of times this TemplateURL has been explicitly used to load a URL.
|
| + // We don't increment this for uses as the "default search engine" since
|
| + // that's not really "explicit" usage and incrementing would result in pinning
|
| + // the user's default search engine(s) to the top of the list of searches on
|
| + // the New Tab page, de-emphasizing the omnibox as "where you go to search".
|
| + int usage_count;
|
| +
|
| + // If this TemplateURL comes from prepopulated data the prepopulate_id is > 0.
|
| + int prepopulate_id;
|
| +
|
| + // The primary unique identifier for Sync. This set on all TemplateURLs
|
| + // regardless of whether they have been associated with Sync.
|
| + std::string sync_guid;
|
| +
|
| + private:
|
| + // Private so we can enforce using the setters.
|
| + // TODO(pkasting): For now these setters are not critical, but later we will
|
| + // begin using them to ensure that these fields are non-empty.
|
| + mutable string16 keyword_;
|
| + std::string url_;
|
| +
|
| + // TODO(pkasting): These fields will go away soon.
|
| + mutable bool autogenerate_keyword_;
|
| + // True if the keyword was generated. This is used to avoid multiple attempts
|
| + // if generating a keyword failed.
|
| + mutable bool keyword_generated_;
|
| +};
|
| +
|
| +
|
| +// TemplateURL ----------------------------------------------------------------
|
| +
|
| +// A TemplateURL represents a single "search engine", defined primarily as a
|
| +// subset of the Open Search Description Document
|
| +// (http://www.opensearch.org/Specifications/OpenSearch) plus some extensions.
|
| +// One TemplateURL contains several TemplateURLRefs, which correspond to various
|
| +// different capabilities (e.g. doing searches or getting suggestions), as well
|
| +// as a TemplateURLData containing other details like the name, keyword, etc.
|
| +//
|
| +// TemplateURLs are intended to be read-only for most users; the only public
|
| +// non-const method is the Profile getter, which returns a non-const Profile*.
|
| +// The TemplateURLService, which handles storing and manipulating TemplateURLs,
|
| +// is made a friend so that it can be the exception to this pattern.
|
| +class TemplateURL {
|
| + public:
|
| + explicit TemplateURL(const TemplateURLData& data);
|
| +
|
| + TemplateURL(const TemplateURL& other);
|
| + TemplateURL& operator=(const TemplateURL& other);
|
| +
|
| + ~TemplateURL();
|
| +
|
| + // Generates a favicon URL from the specified url.
|
| + static GURL GenerateFaviconURL(const GURL& url);
|
| +
|
| + const TemplateURLData& data() const { return data_; }
|
| +
|
| + const string16& short_name() const { return data_.short_name; }
|
| + // An accessor for the short_name, but adjusted so it can be appropriately
|
| + // displayed even if it is LTR and the UI is RTL.
|
| + string16 AdjustedShortNameForLocaleDirection() const;
|
| +
|
| + const string16& keyword() const { return data_.keyword(this); }
|
| + bool autogenerate_keyword() const {
|
| + return data_.autogenerate_keyword();
|
| }
|
| - bool created_by_policy() const { return created_by_policy_; }
|
| + void EnsureKeyword() const { data_.EnsureKeyword(this); }
|
|
|
| - // Number of times this keyword has been explicitly used to load a URL. We
|
| - // don't increment this for uses as the "default search engine" since that's
|
| - // not really "explicit" usage and incrementing would result in pinning the
|
| - // user's default search engine(s) to the top of the list of searches on the
|
| - // New Tab page, de-emphasizing the omnibox as "where you go to search".
|
| - void set_usage_count(int count) { usage_count_ = count; }
|
| - int usage_count() const { return usage_count_; }
|
| + const std::string& url() const { return data_.url(); }
|
| + const std::string& suggestions_url() const { return data_.suggestions_url; }
|
| + const std::string& instant_url() const { return data_.instant_url; }
|
| + const GURL& favicon_url() const { return data_.favicon_url; }
|
|
|
| - // The list of supported encodings for the search terms. This may be empty,
|
| - // which indicates the terms should be encoded with UTF-8.
|
| - void set_input_encodings(const std::vector<std::string>& encodings) {
|
| - input_encodings_ = encodings;
|
| - }
|
| - void add_input_encoding(const std::string& encoding) {
|
| - input_encodings_.push_back(encoding);
|
| - }
|
| + const GURL& originating_url() const { return data_.originating_url; }
|
| +
|
| + bool show_in_default_list() const { return data_.show_in_default_list; }
|
| +
|
| + // Returns true if show_in_default_list() is true and this TemplateURL has a
|
| + // TemplateURLRef that supports replacement.
|
| + bool ShowInDefaultList() const;
|
| +
|
| + bool safe_for_autoreplace() const { return data_.safe_for_autoreplace; }
|
| +
|
| const std::vector<std::string>& input_encodings() const {
|
| - return input_encodings_;
|
| + return data_.input_encodings;
|
| }
|
|
|
| - // Returns the unique identifier of this TemplateURL. The unique ID is set
|
| - // by the TemplateURLService when the TemplateURL is added to it.
|
| - TemplateURLID id() const { return id_; }
|
| + TemplateURLID id() const { return data_.id; }
|
|
|
| - // Copies the data from |other|'s TemplateURLRef members into |this|.
|
| - void CopyURLRefs(const TemplateURL& other);
|
| + base::Time date_created() const { return data_.date_created; }
|
| + base::Time last_modified() const { return data_.last_modified; }
|
|
|
| - // If this TemplateURL comes from prepopulated data the prepopulate_id is > 0.
|
| - // SetPrepopulateId also sets any TemplateURLRef's prepopulated flag to true
|
| - // if |id| > 0 and false otherwise.
|
| - void SetPrepopulateId(int id);
|
| - int prepopulate_id() const { return prepopulate_id_; }
|
| + bool created_by_policy() const { return data_.created_by_policy; }
|
|
|
| - const std::string& sync_guid() const { return sync_guid_; }
|
| - void set_sync_guid(const std::string& guid) { sync_guid_ = guid; }
|
| + int usage_count() const { return data_.usage_count; }
|
|
|
| + int prepopulate_id() const { return data_.prepopulate_id; }
|
| +
|
| + const std::string& sync_guid() const { return data_.sync_guid; }
|
| +
|
| const TemplateURLRef& url_ref() const { return url_ref_; }
|
| const TemplateURLRef& suggestions_url_ref() const {
|
| return suggestions_url_ref_;
|
| @@ -414,51 +436,15 @@
|
| bool IsExtensionKeyword() const;
|
|
|
| private:
|
| - friend void MergeEnginesFromPrepopulateData(
|
| - PrefService* prefs,
|
| - WebDataService* service,
|
| - std::vector<TemplateURL*>* template_urls,
|
| - const TemplateURL** default_search_provider);
|
| - friend class KeywordTable;
|
| - friend class KeywordTableTest;
|
| - friend class SearchHostToURLsMap;
|
| - friend class TemplateURLParsingContext;
|
| friend class TemplateURLService;
|
| - FRIEND_TEST_ALL_PREFIXES(TemplateURLServiceSyncTest,
|
| - ResolveSyncKeywordConflict);
|
|
|
| + void SetURL(const std::string& url);
|
| + void SetPrepopulateId(int id);
|
| +
|
| // Invalidates cached values on this object and its child TemplateURLRefs.
|
| void InvalidateCachedValues() const;
|
|
|
| - // Unique identifier, used when archived to the database.
|
| - void set_id(TemplateURLID id) { id_ = id; }
|
| -
|
| - string16 short_name_;
|
| - std::string url_;
|
| - std::string suggestions_url_;
|
| - std::string instant_url_;
|
| - GURL originating_url_;
|
| - mutable string16 keyword_;
|
| - bool autogenerate_keyword_; // If this is set, |keyword_| holds the cached
|
| - // generated keyword if available.
|
| - mutable bool keyword_generated_; // True if the keyword was generated. This
|
| - // is used to avoid multiple attempts if
|
| - // generating a keyword failed.
|
| - bool show_in_default_list_;
|
| - bool safe_for_autoreplace_;
|
| - GURL favicon_url_;
|
| - // List of supported input encodings.
|
| - std::vector<std::string> input_encodings_;
|
| - TemplateURLID id_;
|
| - base::Time date_created_;
|
| - base::Time last_modified_;
|
| - bool created_by_policy_;
|
| - int usage_count_;
|
| - int prepopulate_id_;
|
| - // The primary unique identifier for Sync. This is only set on TemplateURLs
|
| - // that have been associated with Sync.
|
| - std::string sync_guid_;
|
| -
|
| + TemplateURLData data_;
|
| TemplateURLRef url_ref_;
|
| TemplateURLRef suggestions_url_ref_;
|
| TemplateURLRef instant_url_ref_;
|
|
|