extension_prefs_unittest.cc revision 201ade2fbba22bfb27ae029f4d23fca6ded109a0
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 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
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/message_loop.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/path_service.h"
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/scoped_temp_dir.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/stl_util-inl.h"
93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string_number_conversions.h"
10201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "base/stringprintf.h"
11731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/browser_thread.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_prefs.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/test_extension_prefs.h"
143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/prefs/pref_service.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_paths.h"
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension_constants.h"
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing base::Time;
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing base::TimeDelta;
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
22201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochstatic void AddPattern(ExtensionExtent* extent, const std::string& pattern) {
23201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  int schemes = URLPattern::SCHEME_ALL;
24201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  extent->AddPattern(URLPattern(schemes, pattern));
25201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}
26201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
27201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochstatic void AssertEqualExtents(ExtensionExtent* extent1,
28201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                               ExtensionExtent* extent2) {
29201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::vector<URLPattern> patterns1 = extent1->patterns();
30201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::vector<URLPattern> patterns2 = extent2->patterns();
31201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::set<std::string> strings1;
32201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  EXPECT_EQ(patterns1.size(), patterns2.size());
33201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
34201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  for (size_t i = 0; i < patterns1.size(); ++i)
35201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    strings1.insert(patterns1.at(i).GetAsString());
36201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
37201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::set<std::string> strings2;
38201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  for (size_t i = 0; i < patterns2.size(); ++i)
39201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    strings2.insert(patterns2.at(i).GetAsString());
40201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
41201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  EXPECT_EQ(strings1, strings2);
42201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}
43201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Base class for tests.
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsTest : public testing::Test {
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ExtensionPrefsTest() {}
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This function will get called once, and is the right place to do operations
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // on ExtensionPrefs that write data.
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() = 0;
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This function will be called twice - once while the original ExtensionPrefs
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // object is still alive, and once after recreation. Thus, it tests that
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // things don't break after any ExtensionPrefs startup work.
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() = 0;
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetUp() {
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Initialize();
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void TearDown() {
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Verify();
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Reset ExtensionPrefs, and re-verify.
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs_.RecreateExtensionPrefs();
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Verify();
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ExtensionPrefs* prefs() { return prefs_.prefs(); }
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestExtensionPrefs prefs_;
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(ExtensionPrefsTest);
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests the LastPingDay/SetLastPingDay functions.
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsLastPingDay : public ExtensionPrefsTest {
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ExtensionPrefsLastPingDay()
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      : extension_time_(Time::Now() - TimeDelta::FromHours(4)),
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        blacklist_time_(Time::Now() - TimeDelta::FromHours(2)) {}
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    extension_id_ = prefs_.AddExtensionAndReturnId("last_ping_day");
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(prefs()->LastPingDay(extension_id_).is_null());
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->SetLastPingDay(extension_id_, extension_time_);
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->SetBlacklistLastPingDay(blacklist_time_);
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Time result = prefs()->LastPingDay(extension_id_);
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(result.is_null());
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(result == extension_time_);
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    result = prefs()->BlacklistLastPingDay();
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(result.is_null());
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(result == blacklist_time_);
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Time extension_time_;
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Time blacklist_time_;
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string extension_id_;
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsLastPingDay, LastPingDay) {}
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests the GetToolbarOrder/SetToolbarOrder functions.
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsToolbarOrder : public ExtensionPrefsTest {
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    list_.push_back(prefs_.AddExtensionAndReturnId("1"));
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    list_.push_back(prefs_.AddExtensionAndReturnId("2"));
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    list_.push_back(prefs_.AddExtensionAndReturnId("3"));
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::vector<std::string> before_list = prefs()->GetToolbarOrder();
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(before_list.empty());
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->SetToolbarOrder(list_);
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::vector<std::string> result = prefs()->GetToolbarOrder();
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_EQ(list_.size(), result.size());
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (size_t i = 0; i < list_.size(); i++) {
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      EXPECT_EQ(list_[i], result[i]);
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::vector<std::string> list_;
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsToolbarOrder, ToolbarOrder) {}
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests the GetExtensionState/SetExtensionState functions.
137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsExtensionState : public ExtensionPrefsTest {
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
140513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    extension = prefs_.AddExtension("test");
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->SetExtensionState(extension.get(), Extension::DISABLED);
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(Extension::DISABLED, prefs()->GetExtensionState(extension->id()));
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
149513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_refptr<Extension> extension;
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsExtensionState, ExtensionState) {}
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsEscalatePermissions : public ExtensionPrefsTest {
155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
157513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    extension = prefs_.AddExtension("test");
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->SetDidExtensionEscalatePermissions(extension.get(), true);
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(true, prefs()->DidExtensionEscalatePermissions(extension->id()));
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
166513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_refptr<Extension> extension;
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsEscalatePermissions, EscalatePermissions) {}
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
170201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Tests the AddGrantedPermissions / GetGrantedPermissions functions.
171201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass ExtensionPrefsGrantedPermissions : public ExtensionPrefsTest {
172201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public:
173201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void Initialize() {
174201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    extension_id_ = prefs_.AddExtensionAndReturnId("test");
175201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
176201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    api_perm_set1_.insert("tabs");
177201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    api_perm_set1_.insert("bookmarks");
178201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    api_perm_set1_.insert("something_random");
179201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
180201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    api_perm_set2_.insert("history");
181201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    api_perm_set2_.insert("unknown2");
182201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
183201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_perm_set1_, "http://*.google.com/*");
184201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_perm_set1_, "http://example.com/*");
185201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_perm_set1_, "chrome://favicon/*");
186201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
187201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_perm_set2_, "https://*.google.com/*");
188201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // with duplicate:
189201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_perm_set2_, "http://*.google.com/*");
190201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
191201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    std::set_union(api_perm_set1_.begin(), api_perm_set1_.end(),
192201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                   api_perm_set2_.begin(), api_perm_set2_.end(),
193201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                   std::inserter(api_permissions_, api_permissions_.begin()));
194201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
195201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_permissions_, "http://*.google.com/*");
196201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_permissions_, "http://example.com/*");
197201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_permissions_, "chrome://favicon/*");
198201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddPattern(&host_permissions_, "https://*.google.com/*");
199201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
200201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    std::set<std::string> empty_set;
201201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    std::set<std::string> api_perms;
202201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    bool full_access = false;
203201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    ExtensionExtent host_perms;
204201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    ExtensionExtent empty_extent;
205201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
206201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // Make sure both granted api and host permissions start empty.
207201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_FALSE(prefs()->GetGrantedPermissions(
208201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        extension_id_, &full_access, &api_perms, &host_perms));
209201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
210201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(api_perms.empty());
211201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(host_perms.is_empty());
212201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
213201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // Add part of the api permissions.
214201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    prefs()->AddGrantedPermissions(
215201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        extension_id_, false, api_perm_set1_, empty_extent);
216201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(prefs()->GetGrantedPermissions(
217201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        extension_id_, &full_access, &api_perms, &host_perms));
218201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_EQ(api_perm_set1_, api_perms);
219201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(host_perms.is_empty());
220201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_FALSE(full_access);
221201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    host_perms.ClearPaths();
222201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    api_perms.clear();
223201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
224201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // Add part of the host permissions.
225201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    prefs()->AddGrantedPermissions(
226201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        extension_id_, false, empty_set, host_perm_set1_);
227201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(prefs()->GetGrantedPermissions(
228201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        extension_id_, &full_access, &api_perms, &host_perms));
229201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_FALSE(full_access);
230201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_EQ(api_perm_set1_, api_perms);
231201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AssertEqualExtents(&host_perm_set1_, &host_perms);
232201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    host_perms.ClearPaths();
233201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    api_perms.clear();
234201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
235201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // Add the rest of both the api and host permissions.
236201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    prefs()->AddGrantedPermissions(extension_id_,
237201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                   true,
238201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                   api_perm_set2_,
239201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                   host_perm_set2_);
240201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
241201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(prefs()->GetGrantedPermissions(
242201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        extension_id_, &full_access, &api_perms, &host_perms));
243201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(full_access);
244201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_EQ(api_permissions_, api_perms);
245201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AssertEqualExtents(&host_permissions_, &host_perms);
246201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  }
247201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
248201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void Verify() {
249201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    std::set<std::string> api_perms;
250201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    ExtensionExtent host_perms;
251201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    bool full_access;
252201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
253201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(prefs()->GetGrantedPermissions(
254201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        extension_id_, &full_access, &api_perms, &host_perms));
255201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_EQ(api_permissions_, api_perms);
256201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_TRUE(full_access);
257201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AssertEqualExtents(&host_permissions_, &host_perms);
258201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  }
259201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
260201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch private:
261201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::string extension_id_;
262201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::set<std::string> api_perm_set1_;
263201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::set<std::string> api_perm_set2_;
264201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  ExtensionExtent host_perm_set1_;
265201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  ExtensionExtent host_perm_set2_;
266201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
267201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
268201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::set<std::string> api_permissions_;
269201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  ExtensionExtent host_permissions_;
270201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch};
271201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochTEST_F(ExtensionPrefsGrantedPermissions, GrantedPermissions) {}
272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests the GetVersionString function.
274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsVersionString : public ExtensionPrefsTest {
275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
277513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    extension = prefs_.AddExtension("test");
278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("0.1", prefs()->GetVersionString(extension->id()));
279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->OnExtensionUninstalled(extension->id(),
280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                    Extension::INTERNAL, false);
281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("", prefs()->GetVersionString(extension->id()));
285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
288513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_refptr<Extension> extension;
289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
290c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsVersionString, VersionString) {}
291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests various areas of blacklist functionality.
293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsBlacklist : public ExtensionPrefsTest {
294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    not_installed_id_ = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Install 5 extensions.
299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (int i = 0; i < 5; i++) {
3003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      std::string name = "test" + base::IntToString(i);
301513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      extensions_.push_back(prefs_.AddExtension(name));
302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(NULL, prefs()->GetInstalledExtensionInfo(not_installed_id_));
304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
305513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    ExtensionList::const_iterator iter;
306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (iter = extensions_.begin(); iter != extensions_.end(); ++iter) {
307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      EXPECT_FALSE(prefs()->IsExtensionBlacklisted((*iter)->id()));
308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Blacklist one installed and one not-installed extension id.
310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::set<std::string> blacklisted_ids;
311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    blacklisted_ids.insert(extensions_[0]->id());
312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    blacklisted_ids.insert(not_installed_id_);
313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->UpdateBlacklist(blacklisted_ids);
314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Make sure the two id's we expect to be blacklisted are.
318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(prefs()->IsExtensionBlacklisted(extensions_[0]->id()));
319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(prefs()->IsExtensionBlacklisted(not_installed_id_));
320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Make sure the other id's are not blacklisted.
322513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    ExtensionList::const_iterator iter;
323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (iter = extensions_.begin() + 1; iter != extensions_.end(); ++iter) {
324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      EXPECT_FALSE(prefs()->IsExtensionBlacklisted((*iter)->id()));
325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Make sure GetInstalledExtensionsInfo returns only the non-blacklisted
328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // extensions data.
329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    scoped_ptr<ExtensionPrefs::ExtensionsInfo> info(
330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        prefs()->GetInstalledExtensionsInfo());
331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(4u, info->size());
332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ExtensionPrefs::ExtensionsInfo::iterator info_iter;
333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (info_iter = info->begin(); info_iter != info->end(); ++info_iter) {
334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      ExtensionInfo* extension_info = info_iter->get();
335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      EXPECT_NE(extensions_[0]->id(), extension_info->extension_id);
336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
340513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  ExtensionList extensions_;
341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // An id we'll make up that doesn't match any installed extension id.
343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string not_installed_id_;
344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
345c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsBlacklist, Blacklist) {}
346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
347201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Tests force hiding browser actions.
348201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass ExtensionPrefsHidingBrowserActions : public ExtensionPrefsTest {
349201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public:
350201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void Initialize() {
351201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // Install 5 extensions.
352201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    for (int i = 0; i < 5; i++) {
353201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      std::string name = "test" + base::IntToString(i);
354201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      extensions_.push_back(prefs_.AddExtension(name));
355201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    }
356201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
357201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    ExtensionList::const_iterator iter;
358201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    for (iter = extensions_.begin(); iter != extensions_.end(); ++iter)
359201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      EXPECT_TRUE(prefs()->GetBrowserActionVisibility(*iter));
360201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
361201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    prefs()->SetBrowserActionVisibility(extensions_[0], false);
362201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    prefs()->SetBrowserActionVisibility(extensions_[1], true);
363201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  }
364201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
365201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void Verify() {
366201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // Make sure the one we hid is hidden.
367201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    EXPECT_FALSE(prefs()->GetBrowserActionVisibility(extensions_[0]));
368201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
369201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    // Make sure the other id's are not hidden.
370201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    ExtensionList::const_iterator iter = extensions_.begin() + 1;
371201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    for (; iter != extensions_.end(); ++iter) {
372201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      SCOPED_TRACE(base::StringPrintf("Loop %d ",
373201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                       static_cast<int>(iter - extensions_.begin())));
374201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      EXPECT_TRUE(prefs()->GetBrowserActionVisibility(*iter));
375201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    }
376201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  }
377201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
378201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch private:
379201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  ExtensionList extensions_;
380201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch};
381201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochTEST_F(ExtensionPrefsHidingBrowserActions, ForceHide) {}
382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests the idle install information functions.
384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsIdleInstallInfo : public ExtensionPrefsTest {
385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Sets idle install information for one test extension.
387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetIdleInfo(std::string id, int num) {
3883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    prefs()->SetIdleInstallInfo(id,
3893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                basedir_.AppendASCII(base::IntToString(num)),
3903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                "1." + base::IntToString(num),
391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                now_ + TimeDelta::FromSeconds(num));
392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Verifies that we get back expected idle install information previously
395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // set by SetIdleInfo.
396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void VerifyIdleInfo(std::string id, int num) {
397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    FilePath crx_path;
398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::string version;
399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    base::Time fetch_time;
400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(prefs()->GetIdleInstallInfo(id, &crx_path, &version,
401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                            &fetch_time));
402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_EQ(crx_path.value(),
4033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              basedir_.AppendASCII(base::IntToString(num)).value());
4043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    ASSERT_EQ("1." + base::IntToString(num), version);
405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(fetch_time == now_ + TimeDelta::FromSeconds(num));
406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    PathService::Get(chrome::DIR_TEST_DATA, &basedir_);
410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    now_ = Time::Now();
411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    id1_ = prefs_.AddExtensionAndReturnId("1");
412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    id2_ = prefs_.AddExtensionAndReturnId("2");
413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    id3_ = prefs_.AddExtensionAndReturnId("3");
414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    id4_ = prefs_.AddExtensionAndReturnId("4");
415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Set info for two extensions, then remove it.
417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id1_, 1);
418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id2_, 2);
419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id1_, 1);
420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id2_, 2);
421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::set<std::string> ids = prefs()->GetIdleInstallInfoIds();
422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(2u, ids.size());
423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ContainsKey(ids, id1_));
424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ContainsKey(ids, id2_));
425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->RemoveIdleInstallInfo(id1_);
426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->RemoveIdleInstallInfo(id2_);
427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ids = prefs()->GetIdleInstallInfoIds();
428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ids.empty());
429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Try getting/removing info for an id that used to have info set.
431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->GetIdleInstallInfo(id1_, NULL, NULL, NULL));
432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->RemoveIdleInstallInfo(id1_));
433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Try getting/removing info for an id that has not yet had any info set.
435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->GetIdleInstallInfo(id3_, NULL, NULL, NULL));
436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->RemoveIdleInstallInfo(id3_));
437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Set info for 4 extensions, then remove for one of them.
439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id1_, 1);
440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id2_, 2);
441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id3_, 3);
442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id4_, 4);
443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id1_, 1);
444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id2_, 2);
445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id3_, 3);
446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id4_, 4);
447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->RemoveIdleInstallInfo(id3_);
448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Make sure the info for the 3 extensions we expect is present.
452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::set<std::string> ids = prefs()->GetIdleInstallInfoIds();
453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(3u, ids.size());
454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ContainsKey(ids, id1_));
455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ContainsKey(ids, id2_));
456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ContainsKey(ids, id4_));
457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id1_, 1);
458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id2_, 2);
459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id4_, 4);
460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Make sure there isn't info the for the one extension id we removed.
462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->GetIdleInstallInfo(id3_, NULL, NULL, NULL));
463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Time now_;
467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  FilePath basedir_;
468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string id1_;
469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string id2_;
470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string id3_;
471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string id4_;
472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
473c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsIdleInstallInfo, IdleInstallInfo) {}
474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsOnExtensionInstalled : public ExtensionPrefsTest {
476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
478513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    extension_ = prefs_.AddExtension("on_extension_installed");
479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(Extension::ENABLED,
480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              prefs()->GetExtensionState(extension_->id()));
481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->IsIncognitoEnabled(extension_->id()));
482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->OnExtensionInstalled(extension_.get(),
483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                  Extension::DISABLED, true);
484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(Extension::DISABLED,
488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              prefs()->GetExtensionState(extension_->id()));
489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(prefs()->IsIncognitoEnabled(extension_->id()));
490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
492c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
493513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_refptr<Extension> extension_;
494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
495c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsOnExtensionInstalled,
496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch       ExtensionPrefsOnExtensionInstalled) {}
497731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
498731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass ExtensionPrefsAppLaunchIndex : public ExtensionPrefsTest {
499201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public:
500731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual void Initialize() {
501731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    // No extensions yet.
502731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_EQ(0, prefs()->GetNextAppLaunchIndex());
503731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
504513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    extension_ = prefs_.AddExtension("on_extension_installed");
505731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_EQ(Extension::ENABLED,
506731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        prefs()->GetExtensionState(extension_->id()));
507731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    prefs()->OnExtensionInstalled(extension_.get(),
508731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        Extension::ENABLED, false);
509731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  }
510731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
511731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual void Verify() {
512731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    int launch_index = prefs()->GetAppLaunchIndex(extension_->id());
513731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    // Extension should have been assigned a launch index > 0.
514731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_GT(launch_index, 0);
515731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_EQ(launch_index + 1, prefs()->GetNextAppLaunchIndex());
516731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    // Set a new launch index of one higher and verify.
517731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    prefs()->SetAppLaunchIndex(extension_->id(),
518731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        prefs()->GetNextAppLaunchIndex());
519731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    int new_launch_index = prefs()->GetAppLaunchIndex(extension_->id());
520731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_EQ(launch_index + 1, new_launch_index);
521731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
522731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    // This extension doesn't exist, so it should return -1.
523731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    EXPECT_EQ(-1, prefs()->GetAppLaunchIndex("foo"));
524731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  }
525731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
526201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch private:
527513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_refptr<Extension> extension_;
528731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick};
529731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickTEST_F(ExtensionPrefsAppLaunchIndex, ExtensionPrefsAppLaunchIndex) {}
530