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