// Copyright 2014 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 COMPONENTS_SEARCH_ENGINES_TEMPLATE_URL_DATA_H_ #define COMPONENTS_SEARCH_ENGINES_TEMPLATE_URL_DATA_H_ #include #include #include "base/strings/string16.h" #include "base/time/time.h" #include "components/search_engines/template_url_id.h" #include "url/gurl.h" namespace base { class ListValue; } // 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(const TemplateURLData& other); // Creates a TemplateURLData suitable for prepopulated engines. // Note that unlike in the default constructor, |safe_for_autoreplace| will // be set to true. date_created and last_modified will be set to null time // value, instead of current time. // StringPiece in arguments is used to pass const char* pointer members // of PrepopulatedEngine structure which can be nullptr. TemplateURLData(const base::string16& name, const base::string16& keyword, base::StringPiece search_url, base::StringPiece suggest_url, base::StringPiece image_url, base::StringPiece new_tab_url, base::StringPiece contextual_search_url, base::StringPiece logo_url, base::StringPiece doodle_url, base::StringPiece search_url_post_params, base::StringPiece suggest_url_post_params, base::StringPiece image_url_post_params, base::StringPiece favicon_url, base::StringPiece encoding, const base::ListValue& alternate_urls_list, int prepopulate_id); ~TemplateURLData(); // A short description of the template. This is the name we show to the user // in various places that use TemplateURLs. For example, the location bar // shows this when the user selects a substituting match. void SetShortName(const base::string16& short_name); const base::string16& short_name() const { return short_name_; } // The shortcut for this TemplateURL. |keyword| must be non-empty. void SetKeyword(const base::string16& keyword); const base::string16& keyword() const { return keyword_; } // The raw URL for the TemplateURL, which may not be valid as-is (e.g. because // it requires substitutions first). This must be non-empty. void SetURL(const std::string& url); const std::string& url() const { return url_; } // Estimates dynamic memory usage. // See base/trace_event/memory_usage_estimator.h for more info. size_t EstimateMemoryUsage() const; // Optional additional raw URLs. std::string suggestions_url; std::string image_url; std::string new_tab_url; std::string contextual_search_url; // Optional URL for the logo. GURL logo_url; // Optional URL for the Doodle. GURL doodle_url; // The following post_params are comma-separated lists used to specify the // post parameters for the corresponding URL. std::string search_url_post_params; std::string suggestions_url_post_params; std::string image_url_post_params; // Favicon for the TemplateURL. GURL favicon_url; // URL to the OSD file this came from. May be empty. GURL originating_url; // 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 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 list of supported encodings for the search terms. This may be empty, // which indicates the terms should be encoded with UTF-8. std::vector input_encodings; // 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 TemplateURL was created before we // started tracking creation time. base::Time date_created; // The last time this TemplateURL was modified by a user, since creation. // // NOTE: Like date_created above, this may be 0. base::Time last_modified; // Date when this TemplateURL was last visited. // // NOTE: This might be 0 if the TemplateURL has never been visited. base::Time last_visited; // True if this TemplateURL was automatically created by the administrator via // group 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; // A list of URL patterns that can be used, in addition to |url_|, to extract // search terms from a URL. std::vector alternate_urls; private: // Private so we can enforce using the setters and thus enforce that these // fields are never empty. base::string16 short_name_; base::string16 keyword_; std::string url_; }; #endif // COMPONENTS_SEARCH_ENGINES_TEMPLATE_URL_DATA_H_