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