1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#ifndef COMPONENTS_SEARCH_ENGINES_TEMPLATE_URL_DATA_H_ 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define COMPONENTS_SEARCH_ENGINES_TEMPLATE_URL_DATA_H_ 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <string> 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include <vector> 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/strings/string16.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/time/time.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/search_engines/template_url_id.h" 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "url/gurl.h" 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// The data for the TemplateURL. Separating this into its own class allows most 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// users to do SSA-style usage of TemplateURL: construct a TemplateURLData with 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// whatever fields are desired, then create an immutable TemplateURL from it. 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)struct TemplateURLData { 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURLData(); 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ~TemplateURLData(); 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // A short description of the template. This is the name we show to the user 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // in various places that use TemplateURLs. For example, the location bar 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // shows this when the user selects a substituting match. 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::string16 short_name; 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // The shortcut for this TemplateURL. |keyword| must be non-empty. 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void SetKeyword(const base::string16& keyword); 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const base::string16& keyword() const { return keyword_; } 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // The raw URL for the TemplateURL, which may not be valid as-is (e.g. because 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // it requires substitutions first). This must be non-empty. 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void SetURL(const std::string& url); 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& url() const { return url_; } 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Optional additional raw URLs. 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string suggestions_url; 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string instant_url; 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string image_url; 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string new_tab_url; 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string contextual_search_url; 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // The following post_params are comma-separated lists used to specify the 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // post parameters for the corresponding URL. 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string search_url_post_params; 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string suggestions_url_post_params; 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string instant_url_post_params; 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string image_url_post_params; 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Optional favicon for the TemplateURL. 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GURL favicon_url; 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // URL to the OSD file this came from. May be empty. 55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GURL originating_url; 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Whether this TemplateURL is shown in the default list of search providers. 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // This is just a property and does not indicate whether the TemplateURL has a 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TemplateURLRef that supports replacement. Use 60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TemplateURL::ShowInDefaultList() to test both. 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool show_in_default_list; 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Whether it's safe for auto-modification code (the autogenerator and the 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // code that imports data from other browsers) to replace the TemplateURL. 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // This should be set to false for any TemplateURL the user edits, or any 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TemplateURL that the user clearly manually edited in the past, like a 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // bookmark keyword from another browser. 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool safe_for_autoreplace; 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // The list of supported encodings for the search terms. This may be empty, 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // which indicates the terms should be encoded with UTF-8. 72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::vector<std::string> input_encodings; 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Unique identifier of this TemplateURL. The unique ID is set by the 75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TemplateURLService when the TemplateURL is added to it. 76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TemplateURLID id; 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Date this TemplateURL was created. 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // 80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // NOTE: this may be 0, which indicates the TemplateURL was created before we 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // started tracking creation time. 82f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Time date_created; 83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // The last time this TemplateURL was modified by a user, since creation. 85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // 86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // NOTE: Like date_created above, this may be 0. 87f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::Time last_modified; 88f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // True if this TemplateURL was automatically created by the administrator via 90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // group policy. 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool created_by_policy; 92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Number of times this TemplateURL has been explicitly used to load a URL. 94f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // We don't increment this for uses as the "default search engine" since 95f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // that's not really "explicit" usage and incrementing would result in pinning 96f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // the user's default search engine(s) to the top of the list of searches on 97f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // the New Tab page, de-emphasizing the omnibox as "where you go to search". 98f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int usage_count; 99f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 100f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // If this TemplateURL comes from prepopulated data the prepopulate_id is > 0. 101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int prepopulate_id; 102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // The primary unique identifier for Sync. This set on all TemplateURLs 104f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // regardless of whether they have been associated with Sync. 105f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string sync_guid; 106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // A list of URL patterns that can be used, in addition to |url_|, to extract 108f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // search terms from a URL. 109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::vector<std::string> alternate_urls; 110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 111f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // A parameter that, if present in the query or ref parameters of a search_url 112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // or instant_url, causes Chrome to replace the URL with the search term. 113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string search_terms_replacement_key; 114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 115f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Private so we can enforce using the setters and thus enforce that these 117f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // fields are never empty. 118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::string16 keyword_; 119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string url_; 120f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 121f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 122f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif // COMPONENTS_SEARCH_ENGINES_TEMPLATE_URL_DATA_H_ 123