1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file.
4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/file_util.h"
6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/path_service.h"
7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/string_number_conversions.h"
8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/time.h"
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/utf_string_conversions.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/common/chrome_paths.h"
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/search_engines/template_url.h"
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/webdata/web_database.h"
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "testing/gtest/include/gtest/gtest.h"
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing base::Time;
16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass KeywordTableTest : public testing::Test {
18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public:
19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  KeywordTableTest() {}
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual ~KeywordTableTest() {}
21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected:
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void SetUp() {
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    PathService::Get(chrome::DIR_TEST_DATA, &file_);
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    const std::string test_db = "TestWebDatabase" +
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        base::Int64ToString(Time::Now().ToTimeT()) +
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        ".db";
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    file_ = file_.AppendASCII(test_db);
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    file_util::Delete(file_, false);
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void TearDown() {
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    file_util::Delete(file_, false);
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  static int64 GetID(const TemplateURL* url) {
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return url->id();
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  static void SetID(int64 new_id, TemplateURL* url) {
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    url->set_id(new_id);
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  static void set_prepopulate_id(TemplateURL* url, int id) {
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    url->set_prepopulate_id(id);
46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  static void set_logo_id(TemplateURL* url, int id) {
49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    url->set_logo_id(id);
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  FilePath file_;
53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private:
55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DISALLOW_COPY_AND_ASSIGN(KeywordTableTest);
56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen};
57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(KeywordTableTest, Keywords) {
60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  WebDatabase db;
61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_EQ(sql::INIT_OK, db.Init(file_));
63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TemplateURL template_url;
65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.set_short_name(ASCIIToUTF16("short_name"));
66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.set_keyword(ASCIIToUTF16("keyword"));
67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  GURL favicon_url("http://favicon.url/");
68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  GURL originating_url("http://google.com/");
69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.SetFaviconURL(favicon_url);
70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.SetURL("http://url/", 0, 0);
71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.set_safe_for_autoreplace(true);
72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  Time created_time = Time::Now();
73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.set_date_created(created_time);
74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.set_show_in_default_list(true);
75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.set_originating_url(originating_url);
76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.set_usage_count(32);
77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.add_input_encoding("UTF-8");
78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.add_input_encoding("UTF-16");
79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  set_prepopulate_id(&template_url, 10);
80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  set_logo_id(&template_url, 1000);
81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.set_created_by_policy(true);
82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.SetInstantURL("http://instant/", 0, 0);
83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  SetID(1, &template_url);
84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(db.GetKeywordTable()->AddKeyword(template_url));
86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::vector<TemplateURL*> template_urls;
88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(db.GetKeywordTable()->GetKeywords(&template_urls));
89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(1U, template_urls.size());
91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const TemplateURL* restored_url = template_urls.front();
92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(template_url.short_name(), restored_url->short_name());
94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(template_url.keyword(), restored_url->keyword());
96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_FALSE(restored_url->autogenerate_keyword());
98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(favicon_url == restored_url->GetFaviconURL());
100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(restored_url->safe_for_autoreplace());
102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // The database stores time only at the resolution of a second.
104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(created_time.ToTimeT(), restored_url->date_created().ToTimeT());
105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(restored_url->show_in_default_list());
107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(GetID(&template_url), GetID(restored_url));
109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(originating_url == restored_url->originating_url());
111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(32, restored_url->usage_count());
113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_EQ(2U, restored_url->input_encodings().size());
115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ("UTF-8", restored_url->input_encodings()[0]);
116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ("UTF-16", restored_url->input_encodings()[1]);
117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(10, restored_url->prepopulate_id());
119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(1000, restored_url->logo_id());
121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(restored_url->created_by_policy());
123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_TRUE(restored_url->instant_url());
125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ("http://instant/", restored_url->instant_url()->url());
126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(db.GetKeywordTable()->RemoveKeyword(restored_url->id()));
128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_urls.clear();
130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(db.GetKeywordTable()->GetKeywords(&template_urls));
131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(0U, template_urls.size());
133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  delete restored_url;
135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(KeywordTableTest, KeywordMisc) {
138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  WebDatabase db;
139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_EQ(sql::INIT_OK, db.Init(file_));
141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_EQ(0, db.GetKeywordTable()->GetDefaulSearchProviderID());
143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_EQ(0, db.GetKeywordTable()->GetBuitinKeywordVersion());
144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  db.GetKeywordTable()->SetDefaultSearchProviderID(10);
146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  db.GetKeywordTable()->SetBuitinKeywordVersion(11);
147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_EQ(10, db.GetKeywordTable()->GetDefaulSearchProviderID());
149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_EQ(11, db.GetKeywordTable()->GetBuitinKeywordVersion());
150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(KeywordTableTest, UpdateKeyword) {
153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  WebDatabase db;
154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_EQ(sql::INIT_OK, db.Init(file_));
156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TemplateURL template_url;
158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.set_short_name(ASCIIToUTF16("short_name"));
159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.set_keyword(ASCIIToUTF16("keyword"));
160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  GURL favicon_url("http://favicon.url/");
161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  GURL originating_url("http://originating.url/");
162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.SetFaviconURL(favicon_url);
163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.SetURL("http://url/", 0, 0);
164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.set_safe_for_autoreplace(true);
165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.set_show_in_default_list(true);
166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.SetSuggestionsURL("url2", 0, 0);
167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  SetID(1, &template_url);
168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(db.GetKeywordTable()->AddKeyword(template_url));
170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  GURL originating_url2("http://originating.url/");
172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.set_originating_url(originating_url2);
173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.set_autogenerate_keyword(true);
174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(ASCIIToUTF16("url"), template_url.keyword());
175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.add_input_encoding("Shift_JIS");
176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  set_prepopulate_id(&template_url, 5);
177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  set_logo_id(&template_url, 2000);
178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.SetInstantURL("http://instant2/", 0, 0);
179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(db.GetKeywordTable()->UpdateKeyword(template_url));
180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::vector<TemplateURL*> template_urls;
182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(db.GetKeywordTable()->GetKeywords(&template_urls));
183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(1U, template_urls.size());
185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const TemplateURL* restored_url = template_urls.front();
186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(template_url.short_name(), restored_url->short_name());
188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(template_url.keyword(), restored_url->keyword());
190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(restored_url->autogenerate_keyword());
192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(favicon_url == restored_url->GetFaviconURL());
194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(restored_url->safe_for_autoreplace());
196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(restored_url->show_in_default_list());
198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(GetID(&template_url), GetID(restored_url));
200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(originating_url2 == restored_url->originating_url());
202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_EQ(1U, restored_url->input_encodings().size());
204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_EQ("Shift_JIS", restored_url->input_encodings()[0]);
205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(template_url.suggestions_url()->url(),
207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            restored_url->suggestions_url()->url());
208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(template_url.id(), restored_url->id());
210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(template_url.prepopulate_id(), restored_url->prepopulate_id());
212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(template_url.logo_id(), restored_url->logo_id());
214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(restored_url->instant_url());
216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(template_url.instant_url()->url(),
217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            restored_url->instant_url()->url());
218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  delete restored_url;
220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(KeywordTableTest, KeywordWithNoFavicon) {
223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  WebDatabase db;
224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_EQ(sql::INIT_OK, db.Init(file_));
226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TemplateURL template_url;
228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.set_short_name(ASCIIToUTF16("short_name"));
229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.set_keyword(ASCIIToUTF16("keyword"));
230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.SetURL("http://url/", 0, 0);
231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  template_url.set_safe_for_autoreplace(true);
232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  SetID(-100, &template_url);
233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(db.GetKeywordTable()->AddKeyword(template_url));
235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
236ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::vector<TemplateURL*> template_urls;
237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(db.GetKeywordTable()->GetKeywords(&template_urls));
238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(1U, template_urls.size());
239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const TemplateURL* restored_url = template_urls.front();
240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(template_url.short_name(), restored_url->short_name());
242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(template_url.keyword(), restored_url->keyword());
243ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(!restored_url->GetFaviconURL().is_valid());
244ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(restored_url->safe_for_autoreplace());
245ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(GetID(&template_url), GetID(restored_url));
246ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  delete restored_url;
247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
248