172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_temp_dir.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/message_loop.h"
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/path_service.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/stl_util-inl.h"
93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string_number_conversions.h"
10201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "base/stringprintf.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_prefs.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/test_extension_prefs.h"
1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/prefs/pref_change_registrar.h"
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/prefs/scoped_user_pref_update.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_paths.h"
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension_constants.h"
17dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_details.h"
18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_observer_mock.h"
19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_source.h"
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/browser/browser_thread.h"
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing base::Time;
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing base::TimeDelta;
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace {
2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
2821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenconst char kPref1[] = "path1.subpath";
2921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenconst char kPref2[] = "path2";
3021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenconst char kPref3[] = "path3";
3121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenconst char kPref4[] = "path4";
3221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
3321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Default values in case an extension pref value is not overridden.
3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenconst char kDefaultPref1[] = "default pref 1";
3521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenconst char kDefaultPref2[] = "default pref 2";
3621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenconst char kDefaultPref3[] = "default pref 3";
3721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenconst char kDefaultPref4[] = "default pref 4";
3821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
3972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}  // namespace
4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
41201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochstatic void AddPattern(ExtensionExtent* extent, const std::string& pattern) {
42201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  int schemes = URLPattern::SCHEME_ALL;
43201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  extent->AddPattern(URLPattern(schemes, pattern));
44201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}
45201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
46201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochstatic void AssertEqualExtents(ExtensionExtent* extent1,
47201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                               ExtensionExtent* extent2) {
48201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::vector<URLPattern> patterns1 = extent1->patterns();
49201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::vector<URLPattern> patterns2 = extent2->patterns();
50201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::set<std::string> strings1;
51201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  EXPECT_EQ(patterns1.size(), patterns2.size());
52201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
53201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  for (size_t i = 0; i < patterns1.size(); ++i)
54201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    strings1.insert(patterns1.at(i).GetAsString());
55201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
56201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::set<std::string> strings2;
57201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  for (size_t i = 0; i < patterns2.size(); ++i)
58201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    strings2.insert(patterns2.at(i).GetAsString());
59201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
60201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  EXPECT_EQ(strings1, strings2);
61201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}
62201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Base class for tests.
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsTest : public testing::Test {
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ExtensionPrefsTest()
67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      : ui_thread_(BrowserThread::UI, &message_loop_),
68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        file_thread_(BrowserThread::FILE, &message_loop_) {
69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This function will get called once, and is the right place to do operations
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // on ExtensionPrefs that write data.
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() = 0;
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This function will be called twice - once while the original ExtensionPrefs
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // object is still alive, and once after recreation. Thus, it tests that
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // things don't break after any ExtensionPrefs startup work.
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() = 0;
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
8021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // This function is called to Register preference default values.
8121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void RegisterPreferences() {}
8221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetUp() {
8421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    RegisterPreferences();
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Initialize();
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void TearDown() {
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Verify();
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Reset ExtensionPrefs, and re-verify.
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs_.RecreateExtensionPrefs();
9321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    RegisterPreferences();
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Verify();
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ExtensionPrefs* prefs() { return prefs_.prefs(); }
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  MessageLoop message_loop_;
101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  BrowserThread ui_thread_;
102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  BrowserThread file_thread_;
103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestExtensionPrefs prefs_;
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(ExtensionPrefsTest);
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests the LastPingDay/SetLastPingDay functions.
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsLastPingDay : public ExtensionPrefsTest {
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ExtensionPrefsLastPingDay()
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      : extension_time_(Time::Now() - TimeDelta::FromHours(4)),
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        blacklist_time_(Time::Now() - TimeDelta::FromHours(2)) {}
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    extension_id_ = prefs_.AddExtensionAndReturnId("last_ping_day");
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(prefs()->LastPingDay(extension_id_).is_null());
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->SetLastPingDay(extension_id_, extension_time_);
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->SetBlacklistLastPingDay(blacklist_time_);
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Time result = prefs()->LastPingDay(extension_id_);
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(result.is_null());
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(result == extension_time_);
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    result = prefs()->BlacklistLastPingDay();
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(result.is_null());
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(result == blacklist_time_);
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Time extension_time_;
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Time blacklist_time_;
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string extension_id_;
137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsLastPingDay, LastPingDay) {}
139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests the GetToolbarOrder/SetToolbarOrder functions.
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsToolbarOrder : public ExtensionPrefsTest {
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    list_.push_back(prefs_.AddExtensionAndReturnId("1"));
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    list_.push_back(prefs_.AddExtensionAndReturnId("2"));
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    list_.push_back(prefs_.AddExtensionAndReturnId("3"));
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::vector<std::string> before_list = prefs()->GetToolbarOrder();
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(before_list.empty());
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->SetToolbarOrder(list_);
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::vector<std::string> result = prefs()->GetToolbarOrder();
155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_EQ(list_.size(), result.size());
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (size_t i = 0; i < list_.size(); i++) {
157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      EXPECT_EQ(list_[i], result[i]);
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::vector<std::string> list_;
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsToolbarOrder, ToolbarOrder) {}
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests the GetExtensionState/SetExtensionState functions.
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsExtensionState : public ExtensionPrefsTest {
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
171513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    extension = prefs_.AddExtension("test");
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->SetExtensionState(extension.get(), Extension::DISABLED);
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(Extension::DISABLED, prefs()->GetExtensionState(extension->id()));
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
180513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_refptr<Extension> extension;
181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
182c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsExtensionState, ExtensionState) {}
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsEscalatePermissions : public ExtensionPrefsTest {
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
188513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    extension = prefs_.AddExtension("test");
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->SetDidExtensionEscalatePermissions(extension.get(), true);
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
19372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_TRUE(prefs()->DidExtensionEscalatePermissions(extension->id()));
194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
197513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_refptr<Extension> extension;
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsEscalatePermissions, EscalatePermissions) {}
200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
201201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Tests the AddGrantedPermissions / GetGrantedPermissions functions.
202201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass ExtensionPrefsGrantedPermissions : public ExtensionPrefsTest {
203201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public:
204201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void Initialize() {
205201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    extension_id_ = prefs_.AddExtensionAndReturnId("test");
206201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
207201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    api_perm_set1_.insert("tabs");
208201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    api_perm_set1_.insert("bookmarks");
209201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    api_perm_set1_.insert("something_random");
210201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
211201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    api_perm_set2_.insert("history");
212201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    api_perm_set2_.insert("unknown2");
213201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
214201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_perm_set1_, "http://*.google.com/*");
215201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_perm_set1_, "http://example.com/*");
216201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_perm_set1_, "chrome://favicon/*");
217201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
218201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_perm_set2_, "https://*.google.com/*");
219201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // with duplicate:
220201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_perm_set2_, "http://*.google.com/*");
221201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
222201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    std::set_union(api_perm_set1_.begin(), api_perm_set1_.end(),
223201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                   api_perm_set2_.begin(), api_perm_set2_.end(),
224201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                   std::inserter(api_permissions_, api_permissions_.begin()));
225201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
226201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_permissions_, "http://*.google.com/*");
227201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_permissions_, "http://example.com/*");
228201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_permissions_, "chrome://favicon/*");
229201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_permissions_, "https://*.google.com/*");
230201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
231201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    std::set<std::string> empty_set;
232201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    std::set<std::string> api_perms;
233201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    bool full_access = false;
234201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    ExtensionExtent host_perms;
235201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    ExtensionExtent empty_extent;
236201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
237201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // Make sure both granted api and host permissions start empty.
238201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_FALSE(prefs()->GetGrantedPermissions(
239201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        extension_id_, &full_access, &api_perms, &host_perms));
240201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
241201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(api_perms.empty());
242201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(host_perms.is_empty());
243201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
244201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // Add part of the api permissions.
245201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    prefs()->AddGrantedPermissions(
246201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        extension_id_, false, api_perm_set1_, empty_extent);
247201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(prefs()->GetGrantedPermissions(
248201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        extension_id_, &full_access, &api_perms, &host_perms));
249201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_EQ(api_perm_set1_, api_perms);
250201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(host_perms.is_empty());
251201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_FALSE(full_access);
252201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    host_perms.ClearPaths();
253201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    api_perms.clear();
254201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
255201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // Add part of the host permissions.
256201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    prefs()->AddGrantedPermissions(
257201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        extension_id_, false, empty_set, host_perm_set1_);
258201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(prefs()->GetGrantedPermissions(
259201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        extension_id_, &full_access, &api_perms, &host_perms));
260201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_FALSE(full_access);
261201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_EQ(api_perm_set1_, api_perms);
262201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AssertEqualExtents(&host_perm_set1_, &host_perms);
263201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    host_perms.ClearPaths();
264201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    api_perms.clear();
265201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
266201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // Add the rest of both the api and host permissions.
267201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    prefs()->AddGrantedPermissions(extension_id_,
268201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                   true,
269201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                   api_perm_set2_,
270201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                   host_perm_set2_);
271201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
272201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(prefs()->GetGrantedPermissions(
273201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        extension_id_, &full_access, &api_perms, &host_perms));
274201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(full_access);
275201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_EQ(api_permissions_, api_perms);
276201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AssertEqualExtents(&host_permissions_, &host_perms);
277201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  }
278201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
279201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void Verify() {
280201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    std::set<std::string> api_perms;
281201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    ExtensionExtent host_perms;
282201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    bool full_access;
283201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
284201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(prefs()->GetGrantedPermissions(
285201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        extension_id_, &full_access, &api_perms, &host_perms));
286201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_EQ(api_permissions_, api_perms);
287201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(full_access);
288201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AssertEqualExtents(&host_permissions_, &host_perms);
289201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  }
290201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
291201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch private:
292201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::string extension_id_;
293201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::set<std::string> api_perm_set1_;
294201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::set<std::string> api_perm_set2_;
295201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  ExtensionExtent host_perm_set1_;
296201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  ExtensionExtent host_perm_set2_;
297201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
298201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
299201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::set<std::string> api_permissions_;
300201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  ExtensionExtent host_permissions_;
301201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch};
302201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochTEST_F(ExtensionPrefsGrantedPermissions, GrantedPermissions) {}
303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests the GetVersionString function.
305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsVersionString : public ExtensionPrefsTest {
306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
308513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    extension = prefs_.AddExtension("test");
309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("0.1", prefs()->GetVersionString(extension->id()));
310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->OnExtensionUninstalled(extension->id(),
311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                    Extension::INTERNAL, false);
312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("", prefs()->GetVersionString(extension->id()));
316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
319513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_refptr<Extension> extension;
320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
321c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsVersionString, VersionString) {}
322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests various areas of blacklist functionality.
324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsBlacklist : public ExtensionPrefsTest {
325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    not_installed_id_ = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Install 5 extensions.
330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (int i = 0; i < 5; i++) {
3313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      std::string name = "test" + base::IntToString(i);
332513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      extensions_.push_back(prefs_.AddExtension(name));
333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(NULL, prefs()->GetInstalledExtensionInfo(not_installed_id_));
335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
336513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    ExtensionList::const_iterator iter;
337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (iter = extensions_.begin(); iter != extensions_.end(); ++iter) {
338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      EXPECT_FALSE(prefs()->IsExtensionBlacklisted((*iter)->id()));
339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Blacklist one installed and one not-installed extension id.
341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::set<std::string> blacklisted_ids;
342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    blacklisted_ids.insert(extensions_[0]->id());
343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    blacklisted_ids.insert(not_installed_id_);
344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->UpdateBlacklist(blacklisted_ids);
345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Make sure the two id's we expect to be blacklisted are.
349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(prefs()->IsExtensionBlacklisted(extensions_[0]->id()));
350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(prefs()->IsExtensionBlacklisted(not_installed_id_));
351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Make sure the other id's are not blacklisted.
353513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    ExtensionList::const_iterator iter;
354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (iter = extensions_.begin() + 1; iter != extensions_.end(); ++iter) {
355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      EXPECT_FALSE(prefs()->IsExtensionBlacklisted((*iter)->id()));
356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Make sure GetInstalledExtensionsInfo returns only the non-blacklisted
359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // extensions data.
360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    scoped_ptr<ExtensionPrefs::ExtensionsInfo> info(
361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        prefs()->GetInstalledExtensionsInfo());
362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(4u, info->size());
363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ExtensionPrefs::ExtensionsInfo::iterator info_iter;
364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (info_iter = info->begin(); info_iter != info->end(); ++info_iter) {
365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      ExtensionInfo* extension_info = info_iter->get();
366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      EXPECT_NE(extensions_[0]->id(), extension_info->extension_id);
367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
371513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  ExtensionList extensions_;
372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // An id we'll make up that doesn't match any installed extension id.
374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string not_installed_id_;
375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
376c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsBlacklist, Blacklist) {}
377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
378201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Tests force hiding browser actions.
379201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass ExtensionPrefsHidingBrowserActions : public ExtensionPrefsTest {
380201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public:
381201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void Initialize() {
382201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // Install 5 extensions.
383201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    for (int i = 0; i < 5; i++) {
384201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      std::string name = "test" + base::IntToString(i);
385201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      extensions_.push_back(prefs_.AddExtension(name));
386201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    }
387201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
388201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    ExtensionList::const_iterator iter;
389201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    for (iter = extensions_.begin(); iter != extensions_.end(); ++iter)
390201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      EXPECT_TRUE(prefs()->GetBrowserActionVisibility(*iter));
391201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
392201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    prefs()->SetBrowserActionVisibility(extensions_[0], false);
393201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    prefs()->SetBrowserActionVisibility(extensions_[1], true);
394201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  }
395201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
396201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void Verify() {
397201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // Make sure the one we hid is hidden.
398201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_FALSE(prefs()->GetBrowserActionVisibility(extensions_[0]));
399201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
400201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // Make sure the other id's are not hidden.
401201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    ExtensionList::const_iterator iter = extensions_.begin() + 1;
402201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    for (; iter != extensions_.end(); ++iter) {
403201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      SCOPED_TRACE(base::StringPrintf("Loop %d ",
404201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                       static_cast<int>(iter - extensions_.begin())));
405201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      EXPECT_TRUE(prefs()->GetBrowserActionVisibility(*iter));
406201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    }
407201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  }
408201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
409201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch private:
410201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  ExtensionList extensions_;
411201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch};
412201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochTEST_F(ExtensionPrefsHidingBrowserActions, ForceHide) {}
413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests the idle install information functions.
415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsIdleInstallInfo : public ExtensionPrefsTest {
416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Sets idle install information for one test extension.
418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetIdleInfo(std::string id, int num) {
4193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    prefs()->SetIdleInstallInfo(id,
4203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                basedir_.AppendASCII(base::IntToString(num)),
4213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                "1." + base::IntToString(num),
422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                now_ + TimeDelta::FromSeconds(num));
423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Verifies that we get back expected idle install information previously
426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // set by SetIdleInfo.
427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void VerifyIdleInfo(std::string id, int num) {
428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    FilePath crx_path;
429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::string version;
430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    base::Time fetch_time;
431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(prefs()->GetIdleInstallInfo(id, &crx_path, &version,
432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                            &fetch_time));
433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_EQ(crx_path.value(),
4343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              basedir_.AppendASCII(base::IntToString(num)).value());
4353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    ASSERT_EQ("1." + base::IntToString(num), version);
436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(fetch_time == now_ + TimeDelta::FromSeconds(num));
437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    PathService::Get(chrome::DIR_TEST_DATA, &basedir_);
441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    now_ = Time::Now();
442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    id1_ = prefs_.AddExtensionAndReturnId("1");
443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    id2_ = prefs_.AddExtensionAndReturnId("2");
444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    id3_ = prefs_.AddExtensionAndReturnId("3");
445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    id4_ = prefs_.AddExtensionAndReturnId("4");
446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Set info for two extensions, then remove it.
448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id1_, 1);
449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id2_, 2);
450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id1_, 1);
451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id2_, 2);
452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::set<std::string> ids = prefs()->GetIdleInstallInfoIds();
453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(2u, ids.size());
454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ContainsKey(ids, id1_));
455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ContainsKey(ids, id2_));
456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->RemoveIdleInstallInfo(id1_);
457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->RemoveIdleInstallInfo(id2_);
458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ids = prefs()->GetIdleInstallInfoIds();
459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ids.empty());
460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Try getting/removing info for an id that used to have info set.
462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->GetIdleInstallInfo(id1_, NULL, NULL, NULL));
463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->RemoveIdleInstallInfo(id1_));
464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Try getting/removing info for an id that has not yet had any info set.
466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->GetIdleInstallInfo(id3_, NULL, NULL, NULL));
467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->RemoveIdleInstallInfo(id3_));
468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Set info for 4 extensions, then remove for one of them.
470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id1_, 1);
471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id2_, 2);
472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id3_, 3);
473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id4_, 4);
474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id1_, 1);
475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id2_, 2);
476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id3_, 3);
477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id4_, 4);
478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->RemoveIdleInstallInfo(id3_);
479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Make sure the info for the 3 extensions we expect is present.
483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::set<std::string> ids = prefs()->GetIdleInstallInfoIds();
484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(3u, ids.size());
485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ContainsKey(ids, id1_));
486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ContainsKey(ids, id2_));
487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ContainsKey(ids, id4_));
488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id1_, 1);
489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id2_, 2);
490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id4_, 4);
491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
492c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Make sure there isn't info the for the one extension id we removed.
493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->GetIdleInstallInfo(id3_, NULL, NULL, NULL));
494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Time now_;
498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  FilePath basedir_;
499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string id1_;
500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string id2_;
501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string id3_;
502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string id4_;
503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
504c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsIdleInstallInfo, IdleInstallInfo) {}
505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsOnExtensionInstalled : public ExtensionPrefsTest {
507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
509513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    extension_ = prefs_.AddExtension("on_extension_installed");
510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(Extension::ENABLED,
511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              prefs()->GetExtensionState(extension_->id()));
512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->IsIncognitoEnabled(extension_->id()));
513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->OnExtensionInstalled(extension_.get(),
514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                  Extension::DISABLED, true);
515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(Extension::DISABLED,
519c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              prefs()->GetExtensionState(extension_->id()));
520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(prefs()->IsIncognitoEnabled(extension_->id()));
521c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
524513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_refptr<Extension> extension_;
525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
526c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsOnExtensionInstalled,
527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch       ExtensionPrefsOnExtensionInstalled) {}
528731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
529731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass ExtensionPrefsAppLaunchIndex : public ExtensionPrefsTest {
530201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public:
531731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual void Initialize() {
532731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    // No extensions yet.
533731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_EQ(0, prefs()->GetNextAppLaunchIndex());
534731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
535513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    extension_ = prefs_.AddExtension("on_extension_installed");
536731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_EQ(Extension::ENABLED,
537731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        prefs()->GetExtensionState(extension_->id()));
538731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    prefs()->OnExtensionInstalled(extension_.get(),
539731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        Extension::ENABLED, false);
540731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  }
541731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
542731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual void Verify() {
543731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    int launch_index = prefs()->GetAppLaunchIndex(extension_->id());
544731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    // Extension should have been assigned a launch index > 0.
545731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_GT(launch_index, 0);
546731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_EQ(launch_index + 1, prefs()->GetNextAppLaunchIndex());
547731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    // Set a new launch index of one higher and verify.
548731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    prefs()->SetAppLaunchIndex(extension_->id(),
549731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        prefs()->GetNextAppLaunchIndex());
550731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    int new_launch_index = prefs()->GetAppLaunchIndex(extension_->id());
551731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_EQ(launch_index + 1, new_launch_index);
552731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
553731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    // This extension doesn't exist, so it should return -1.
554731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_EQ(-1, prefs()->GetAppLaunchIndex("foo"));
555731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  }
556731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
557201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch private:
558513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_refptr<Extension> extension_;
559731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick};
560731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickTEST_F(ExtensionPrefsAppLaunchIndex, ExtensionPrefsAppLaunchIndex) {}
56121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
562dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass ExtensionPrefsPageIndex : public ExtensionPrefsTest {
563dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public:
564dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void Initialize() {
565dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    extension_id_ = prefs_.AddExtensionAndReturnId("page_index");
566dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
567dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    int page_index = prefs()->GetPageIndex(extension_id_);
568dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    // Extension should not have been assigned a page
569dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    EXPECT_EQ(page_index, -1);
570dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
571dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    // Set the page index
572dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    prefs()->SetPageIndex(extension_id_, 2);
573dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  }
574dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
575dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void Verify() {
576dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    // Verify the page index.
577dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    int page_index = prefs()->GetPageIndex(extension_id_);
578dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    EXPECT_EQ(page_index, 2);
579dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
580dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    // This extension doesn't exist, so it should return -1.
581dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    EXPECT_EQ(-1, prefs()->GetPageIndex("foo"));
582dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  }
583dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
584dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen private:
585dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  std::string extension_id_;
586dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen};
587dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(ExtensionPrefsPageIndex, ExtensionPrefsPageIndex) {}
588dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
589dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass ExtensionPrefsAppDraggedByUser : public ExtensionPrefsTest {
590dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public:
591dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void Initialize() {
592dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    extension_ = prefs_.AddExtension("on_extension_installed");
593dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    EXPECT_FALSE(prefs()->WasAppDraggedByUser(extension_->id()));
594dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    prefs()->OnExtensionInstalled(extension_.get(),
595dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen        Extension::ENABLED, false);
596dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  }
597dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
598dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void Verify() {
599dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    // Set the flag and see if it persisted.
600dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    prefs()->SetAppDraggedByUser(extension_->id());
601dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    EXPECT_TRUE(prefs()->WasAppDraggedByUser(extension_->id()));
602dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
603dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    // Make sure it doesn't change on consecutive calls.
604dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    prefs()->SetAppDraggedByUser(extension_->id());
605dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    EXPECT_TRUE(prefs()->WasAppDraggedByUser(extension_->id()));
606dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  }
607dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
608dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen private:
609dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_refptr<Extension> extension_;
610dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen};
611dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(ExtensionPrefsAppDraggedByUser, ExtensionPrefsAppDraggedByUser) {}
612dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
61321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsennamespace keys = extension_manifest_keys;
61421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
615ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Tests that we gracefully handle changes in the ID generation function for
616ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// unpacked extensions.
617ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ExtensionPrefsIdChange : public ExtensionPrefsTest {
618ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public:
619ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void Initialize() {
620ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    DictionaryValue manifest;
621ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    manifest.SetString(keys::kVersion, "1.0.0.0");
622ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    manifest.SetString(keys::kName, "unused");
623ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
624ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    extension_ = prefs_.AddExtensionWithManifest(
625ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        manifest, Extension::LOAD);
626ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    extension_id_ = extension_->id();
627ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
628ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    DictionaryPrefUpdate extensions_dict_update(
629ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        prefs()->pref_service(), ExtensionPrefs::kExtensionsPref);
630ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
631ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    Value* extension_prefs;
632ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    ASSERT_TRUE(extensions_dict_update->RemoveWithoutPathExpansion(
633ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        extension_id_, &extension_prefs));
634ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    extensions_dict_update->SetWithoutPathExpansion(
635ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", extension_prefs);
636ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
637ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
638ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void Verify() {
639ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    prefs_.RecreateExtensionPrefs();
640ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    prefs()->SetExtensionState(extension_.get(), Extension::DISABLED);
641ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    ExtensionPrefs::ExtensionIdSet extension_ids;
642ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    prefs()->GetExtensions(&extension_ids);
643ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    EXPECT_EQ(1U, extension_ids.size());
644ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    EXPECT_EQ(extension_id_, extension_ids[0]);
645ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
646ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
647ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private:
648ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_refptr<Extension> extension_;
649ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::string extension_id_;
650ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen};
651ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(ExtensionPrefsIdChange, IdChange) {}
652ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
65321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass ExtensionPrefsPreferencesBase : public ExtensionPrefsTest {
65421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen public:
65521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  ExtensionPrefsPreferencesBase()
65621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      : ExtensionPrefsTest(),
65721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        ext1_(NULL),
65821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        ext2_(NULL),
65921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        ext3_(NULL),
66021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        installed() {
66121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    DictionaryValue simple_dict;
66221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    std::string error;
66321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
66421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    simple_dict.SetString(keys::kVersion, "1.0.0.0");
66521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    simple_dict.SetString(keys::kName, "unused");
66621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
66721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ext1_scoped_ = Extension::Create(
66872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        prefs_.temp_dir().AppendASCII("ext1_"), Extension::EXTERNAL_PREF,
669ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        simple_dict, Extension::STRICT_ERROR_CHECKS, &error);
67021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ext2_scoped_ = Extension::Create(
67172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        prefs_.temp_dir().AppendASCII("ext2_"), Extension::EXTERNAL_PREF,
672ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        simple_dict, Extension::STRICT_ERROR_CHECKS, &error);
67321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ext3_scoped_ = Extension::Create(
67472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        prefs_.temp_dir().AppendASCII("ext3_"), Extension::EXTERNAL_PREF,
675ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        simple_dict, Extension::STRICT_ERROR_CHECKS, &error);
67621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
67721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ext1_ = ext1_scoped_.get();
67821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ext2_ = ext2_scoped_.get();
67921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ext3_ = ext3_scoped_.get();
68021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
68121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    for (size_t i = 0; i < arraysize(installed); ++i)
68221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      installed[i] = false;
68321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
68421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
68521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  void RegisterPreferences() {
68621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    prefs()->pref_service()->RegisterStringPref(kPref1, kDefaultPref1);
68721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    prefs()->pref_service()->RegisterStringPref(kPref2, kDefaultPref2);
68821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    prefs()->pref_service()->RegisterStringPref(kPref3, kDefaultPref3);
68921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    prefs()->pref_service()->RegisterStringPref(kPref4, kDefaultPref4);
69021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
69121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
69221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  void InstallExtControlledPref(Extension *ext,
69321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                                const std::string& key,
69421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                                Value* val) {
69572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EnsureExtensionInstalled(ext);
69672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    prefs()->SetExtensionControlledPref(ext->id(), key, false, val);
69772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  }
69872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
69972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void InstallExtControlledPrefIncognito(Extension *ext,
70072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                                         const std::string& key,
70172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                                         Value* val) {
70272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EnsureExtensionInstalled(ext);
70372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    prefs()->SetExtensionControlledPref(ext->id(), key, true, val);
70472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  }
70521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
70672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void InstallExtension(Extension *ext) {
70772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EnsureExtensionInstalled(ext);
70821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
70921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
71021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  void UninstallExtension(const std::string& extension_id) {
71172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EnsureExtensionUninstalled(extension_id);
71221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
71321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
71421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Weak references, for convenience.
71521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  Extension* ext1_;
71621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  Extension* ext2_;
71721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  Extension* ext3_;
71821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
71921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Flags indicating whether each of the extensions has been installed, yet.
72021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  bool installed[3];
72121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
72221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen private:
72372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void EnsureExtensionInstalled(Extension *ext) {
72472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    // Install extension the first time a preference is set for it.
72572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    Extension* extensions[] = {ext1_, ext2_, ext3_};
72672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    for (int i = 0; i < 3; ++i) {
72772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      if (ext == extensions[i] && !installed[i]) {
72872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        prefs()->OnExtensionInstalled(ext, Extension::ENABLED, true);
72972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        installed[i] = true;
73072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        break;
73172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      }
73272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    }
73372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  }
73472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
73572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void EnsureExtensionUninstalled(const std::string& extension_id) {
73672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    Extension* extensions[] = {ext1_, ext2_, ext3_};
73772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    for (int i = 0; i < 3; ++i) {
73872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      if (extensions[i]->id() == extension_id) {
73972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        installed[i] = false;
74072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        break;
74172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      }
74272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    }
74372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    prefs()->OnExtensionUninstalled(extension_id, Extension::INTERNAL, false);
74472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  }
74572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
74621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  scoped_refptr<Extension> ext1_scoped_;
74721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  scoped_refptr<Extension> ext2_scoped_;
74821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  scoped_refptr<Extension> ext3_scoped_;
74921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen};
75021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
75121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass ExtensionPrefsInstallOneExtension
75221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    : public ExtensionPrefsPreferencesBase {
75321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Initialize() {
75421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    InstallExtControlledPref(ext1_, kPref1, Value::CreateStringValue("val1"));
75521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
75621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Verify() {
75721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    std::string actual = prefs()->pref_service()->GetString(kPref1);
75821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    EXPECT_EQ("val1", actual);
75921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
76021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen};
76121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenTEST_F(ExtensionPrefsInstallOneExtension, ExtensionPrefsInstallOneExtension) {}
76221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
76372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Check that we forget incognito values after a reload.
76472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass ExtensionPrefsInstallIncognito
76521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    : public ExtensionPrefsPreferencesBase {
76672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public:
76772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ExtensionPrefsInstallIncognito() : iteration_(0) {}
76821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
76921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Initialize() {
77021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    InstallExtControlledPref(ext1_, kPref1, Value::CreateStringValue("val1"));
77172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    InstallExtControlledPrefIncognito(ext1_, kPref1,
77272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                                      Value::CreateStringValue("val2"));
77372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService());
77472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    std::string actual = incog_prefs->GetString(kPref1);
77572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_EQ("val2", actual);
77621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
77721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Verify() {
77872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    // Main pref service shall see only non-incognito settings.
77972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    std::string actual = prefs()->pref_service()->GetString(kPref1);
78072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_EQ("val1", actual);
78172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    // Incognito pref service shall see incognito values only during first run.
78272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    // Once the pref service was reloaded, all values shall be discarded.
78372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService());
78472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    actual = incog_prefs->GetString(kPref1);
78572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    if (iteration_ == 0) {
78672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      EXPECT_EQ("val2", actual);
78772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    } else {
78872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      EXPECT_EQ("val1", actual);
78972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    }
79072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ++iteration_;
79121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
79272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  int iteration_;
79321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen};
79472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(ExtensionPrefsInstallIncognito, ExtensionPrefsInstallOneExtension) {}
79521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
79672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass ExtensionPrefsUninstallExtension
79721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    : public ExtensionPrefsPreferencesBase {
79821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Initialize() {
79921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    InstallExtControlledPref(ext1_, kPref1, Value::CreateStringValue("val1"));
80021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    InstallExtControlledPref(ext1_, kPref2, Value::CreateStringValue("val2"));
80121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
80221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    UninstallExtension(ext1_->id());
80321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
80421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Verify() {
80521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    std::string actual;
80621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    actual = prefs()->pref_service()->GetString(kPref1);
80721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    EXPECT_EQ(kDefaultPref1, actual);
80821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    actual = prefs()->pref_service()->GetString(kPref2);
80921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    EXPECT_EQ(kDefaultPref2, actual);
81021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
81121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen};
81272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(ExtensionPrefsUninstallExtension,
81372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    ExtensionPrefsUninstallExtension) {}
81421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
81572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Tests triggering of notifications to registered observers.
81621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass ExtensionPrefsNotifyWhenNeeded
81721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    : public ExtensionPrefsPreferencesBase {
81821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Initialize() {
81921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    using testing::_;
82021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    using testing::Mock;
82121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    using testing::StrEq;
82221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
82372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    NotificationObserverMock observer;
82421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    PrefChangeRegistrar registrar;
82521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    registrar.Init(prefs()->pref_service());
82672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    registrar.Add(kPref1, &observer);
82721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
82872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    NotificationObserverMock incognito_observer;
82972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    scoped_ptr<PrefService> incog_prefs(prefs_.CreateIncognitoPrefService());
83072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    PrefChangeRegistrar incognito_registrar;
83172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    incognito_registrar.Init(incog_prefs.get());
83272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    incognito_registrar.Add(kPref1, &incognito_observer);
83372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
83472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    // Write value and check notification.
83572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_CALL(observer, Observe(_, _, _));
83672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_CALL(incognito_observer, Observe(_, _, _));
83721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    InstallExtControlledPref(ext1_, kPref1,
83821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        Value::CreateStringValue("https://www.chromium.org"));
83972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    Mock::VerifyAndClearExpectations(&observer);
84072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    Mock::VerifyAndClearExpectations(&incognito_observer);
84121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
84272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    // Write same value.
84372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_CALL(observer, Observe(_, _, _)).Times(0);
84472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_CALL(incognito_observer, Observe(_, _, _)).Times(0);
84521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    InstallExtControlledPref(ext1_, kPref1,
84621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        Value::CreateStringValue("https://www.chromium.org"));
84772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    Mock::VerifyAndClearExpectations(&observer);
84872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    Mock::VerifyAndClearExpectations(&incognito_observer);
84921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
85072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    // Change value.
85172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_CALL(observer, Observe(_, _, _));
85272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_CALL(incognito_observer, Observe(_, _, _));
85321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    InstallExtControlledPref(ext1_, kPref1,
85421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen        Value::CreateStringValue("chrome://newtab"));
85572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    Mock::VerifyAndClearExpectations(&observer);
85672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    Mock::VerifyAndClearExpectations(&incognito_observer);
85772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
85872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    // Change only incognito value.
85972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_CALL(observer, Observe(_, _, _)).Times(0);
86072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_CALL(incognito_observer, Observe(_, _, _));
86172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    InstallExtControlledPrefIncognito(ext1_, kPref1,
86272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        Value::CreateStringValue("chrome://newtab2"));
86372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    Mock::VerifyAndClearExpectations(&observer);
86472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    Mock::VerifyAndClearExpectations(&incognito_observer);
86572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
86672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    // Uninstall.
86772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_CALL(observer, Observe(_, _, _));
86872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_CALL(incognito_observer, Observe(_, _, _));
86921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    UninstallExtension(ext1_->id());
87072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    Mock::VerifyAndClearExpectations(&observer);
87172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    Mock::VerifyAndClearExpectations(&incognito_observer);
87272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
87372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    registrar.Remove(kPref1, &observer);
87472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    incognito_registrar.Remove(kPref1, &incognito_observer);
87521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
87621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Verify() {
87721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    std::string actual = prefs()->pref_service()->GetString(kPref1);
87821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    EXPECT_EQ(kDefaultPref1, actual);
87921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
88021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen};
88121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenTEST_F(ExtensionPrefsNotifyWhenNeeded,
88221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ExtensionPrefsNotifyWhenNeeded) {}
88321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
88472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Tests disabling an extension.
88521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass ExtensionPrefsDisableExt
88621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    : public ExtensionPrefsPreferencesBase {
88721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Initialize() {
88821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    InstallExtControlledPref(ext1_, kPref1, Value::CreateStringValue("val1"));
88921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    std::string actual = prefs()->pref_service()->GetString(kPref1);
89021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    EXPECT_EQ("val1", actual);
89121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    prefs()->SetExtensionState(ext1_, Extension::DISABLED);
89221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
89321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Verify() {
89421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    std::string actual = prefs()->pref_service()->GetString(kPref1);
89521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    EXPECT_EQ(kDefaultPref1, actual);
89621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
89721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen};
89821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenTEST_F(ExtensionPrefsDisableExt,  ExtensionPrefsDisableExt) {}
89921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
90072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Tests disabling and reenabling an extension.
90121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass ExtensionPrefsReenableExt
90221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    : public ExtensionPrefsPreferencesBase {
90321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Initialize() {
90421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    InstallExtControlledPref(ext1_, kPref1, Value::CreateStringValue("val1"));
90521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    prefs()->SetExtensionState(ext1_, Extension::DISABLED);
90621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    prefs()->SetExtensionState(ext1_, Extension::ENABLED);
90721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
90821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Verify() {
90921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    std::string actual = prefs()->pref_service()->GetString(kPref1);
91021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    EXPECT_EQ("val1", actual);
91121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
91221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen};
91321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenTEST_F(ExtensionPrefsDisableExt,  ExtensionPrefsReenableExt) {}
91421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
91521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Mock class to test whether objects are deleted correctly.
91621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass MockStringValue : public StringValue {
91721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen public:
91821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  explicit MockStringValue(const std::string& in_value)
91921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      : StringValue(in_value) {
92021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
92121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual ~MockStringValue() {
92221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    Die();
92321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
92421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  MOCK_METHOD0(Die, void());
92521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen};
92621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
92721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass ExtensionPrefsSetExtensionControlledPref
92821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    : public ExtensionPrefsPreferencesBase {
92921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen public:
93021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Initialize() {
93121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    MockStringValue* v1 = new MockStringValue("https://www.chromium.org");
93221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    MockStringValue* v2 = new MockStringValue("https://www.chromium.org");
93372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    MockStringValue* v1i = new MockStringValue("https://www.chromium.org");
93472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    MockStringValue* v2i = new MockStringValue("https://www.chromium.org");
93521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // Ownership is taken, value shall not be deleted.
93621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    EXPECT_CALL(*v1, Die()).Times(0);
93772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_CALL(*v1i, Die()).Times(0);
93821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    InstallExtControlledPref(ext1_, kPref1, v1);
93972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    InstallExtControlledPrefIncognito(ext1_, kPref1, v1i);
94021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    testing::Mock::VerifyAndClearExpectations(v1);
94172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    testing::Mock::VerifyAndClearExpectations(v1i);
94221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // Make sure there is no memory leak and both values are deleted.
94321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    EXPECT_CALL(*v1, Die()).Times(1);
94472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_CALL(*v1i, Die()).Times(1);
94572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_CALL(*v2, Die()).Times(1);
94672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    EXPECT_CALL(*v2i, Die()).Times(1);
94721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    InstallExtControlledPref(ext1_, kPref1, v2);
94872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    InstallExtControlledPrefIncognito(ext1_, kPref1, v2i);
94921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    prefs_.RecreateExtensionPrefs();
95072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    testing::Mock::VerifyAndClearExpectations(v1);
95172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    testing::Mock::VerifyAndClearExpectations(v1i);
95272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    testing::Mock::VerifyAndClearExpectations(v2);
95372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    testing::Mock::VerifyAndClearExpectations(v2i);
95421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
95521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
95621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void Verify() {
95721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
95821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen};
95921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenTEST_F(ExtensionPrefsSetExtensionControlledPref,
96021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ExtensionPrefsSetExtensionControlledPref) {}
961