extension_prefs_unittest.cc revision 3345a6884c488ff3a535c2c9acdd33d74b37e311
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"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chrome_thread.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_prefs.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/test_extension_prefs.h"
133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/prefs/pref_service.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/chrome_paths.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension_constants.h"
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing base::Time;
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing base::TimeDelta;
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Base class for tests.
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsTest : public testing::Test {
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ExtensionPrefsTest() {}
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This function will get called once, and is the right place to do operations
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // on ExtensionPrefs that write data.
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() = 0;
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This function will be called twice - once while the original ExtensionPrefs
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // object is still alive, and once after recreation. Thus, it tests that
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // things don't break after any ExtensionPrefs startup work.
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() = 0;
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetUp() {
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Initialize();
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void TearDown() {
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Verify();
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Reset ExtensionPrefs, and re-verify.
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs_.RecreateExtensionPrefs();
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Verify();
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ExtensionPrefs* prefs() { return prefs_.prefs(); }
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TestExtensionPrefs prefs_;
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(ExtensionPrefsTest);
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests the LastPingDay/SetLastPingDay functions.
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsLastPingDay : public ExtensionPrefsTest {
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ExtensionPrefsLastPingDay()
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      : extension_time_(Time::Now() - TimeDelta::FromHours(4)),
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        blacklist_time_(Time::Now() - TimeDelta::FromHours(2)) {}
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    extension_id_ = prefs_.AddExtensionAndReturnId("last_ping_day");
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(prefs()->LastPingDay(extension_id_).is_null());
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->SetLastPingDay(extension_id_, extension_time_);
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->SetBlacklistLastPingDay(blacklist_time_);
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Time result = prefs()->LastPingDay(extension_id_);
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(result.is_null());
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(result == extension_time_);
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    result = prefs()->BlacklistLastPingDay();
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(result.is_null());
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(result == blacklist_time_);
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Time extension_time_;
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Time blacklist_time_;
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string extension_id_;
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsLastPingDay, LastPingDay) {}
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests the GetToolbarOrder/SetToolbarOrder functions.
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsToolbarOrder : public ExtensionPrefsTest {
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    list_.push_back(prefs_.AddExtensionAndReturnId("1"));
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    list_.push_back(prefs_.AddExtensionAndReturnId("2"));
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    list_.push_back(prefs_.AddExtensionAndReturnId("3"));
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::vector<std::string> before_list = prefs()->GetToolbarOrder();
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(before_list.empty());
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->SetToolbarOrder(list_);
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::vector<std::string> result = prefs()->GetToolbarOrder();
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_EQ(list_.size(), result.size());
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (size_t i = 0; i < list_.size(); i++) {
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      EXPECT_EQ(list_[i], result[i]);
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::vector<std::string> list_;
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsToolbarOrder, ToolbarOrder) {}
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests the GetExtensionState/SetExtensionState functions.
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsExtensionState : public ExtensionPrefsTest {
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    extension.reset(prefs_.AddExtension("test"));
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->SetExtensionState(extension.get(), Extension::DISABLED);
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(Extension::DISABLED, prefs()->GetExtensionState(extension->id()));
123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<Extension> extension;
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsExtensionState, ExtensionState) {}
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsEscalatePermissions : public ExtensionPrefsTest {
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    extension.reset(prefs_.AddExtension("test"));
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->SetDidExtensionEscalatePermissions(extension.get(), true);
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(true, prefs()->DidExtensionEscalatePermissions(extension->id()));
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<Extension> extension;
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsEscalatePermissions, EscalatePermissions) {}
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests the GetVersionString function.
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsVersionString : public ExtensionPrefsTest {
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    extension.reset(prefs_.AddExtension("test"));
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("0.1", prefs()->GetVersionString(extension->id()));
154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->OnExtensionUninstalled(extension->id(),
155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                    Extension::INTERNAL, false);
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ("", prefs()->GetVersionString(extension->id()));
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<Extension> extension;
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsVersionString, VersionString) {}
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests various areas of blacklist functionality.
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsBlacklist : public ExtensionPrefsTest {
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    not_installed_id_ = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Install 5 extensions.
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (int i = 0; i < 5; i++) {
1753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      std::string name = "test" + base::IntToString(i);
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      extensions_.push_back(linked_ptr<Extension>(prefs_.AddExtension(name)));
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(NULL, prefs()->GetInstalledExtensionInfo(not_installed_id_));
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::vector<linked_ptr<Extension> >::const_iterator iter;
181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (iter = extensions_.begin(); iter != extensions_.end(); ++iter) {
182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      EXPECT_FALSE(prefs()->IsExtensionBlacklisted((*iter)->id()));
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Blacklist one installed and one not-installed extension id.
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::set<std::string> blacklisted_ids;
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    blacklisted_ids.insert(extensions_[0]->id());
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    blacklisted_ids.insert(not_installed_id_);
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->UpdateBlacklist(blacklisted_ids);
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Make sure the two id's we expect to be blacklisted are.
193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(prefs()->IsExtensionBlacklisted(extensions_[0]->id()));
194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(prefs()->IsExtensionBlacklisted(not_installed_id_));
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Make sure the other id's are not blacklisted.
197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::vector<linked_ptr<Extension> >::const_iterator iter;
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (iter = extensions_.begin() + 1; iter != extensions_.end(); ++iter) {
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      EXPECT_FALSE(prefs()->IsExtensionBlacklisted((*iter)->id()));
200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Make sure GetInstalledExtensionsInfo returns only the non-blacklisted
203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // extensions data.
204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    scoped_ptr<ExtensionPrefs::ExtensionsInfo> info(
205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        prefs()->GetInstalledExtensionsInfo());
206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(4u, info->size());
207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ExtensionPrefs::ExtensionsInfo::iterator info_iter;
208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    for (info_iter = info->begin(); info_iter != info->end(); ++info_iter) {
209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      ExtensionInfo* extension_info = info_iter->get();
210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      EXPECT_NE(extensions_[0]->id(), extension_info->extension_id);
211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::vector<linked_ptr<Extension> > extensions_;
216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // An id we'll make up that doesn't match any installed extension id.
218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string not_installed_id_;
219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
220c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsBlacklist, Blacklist) {}
221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tests the idle install information functions.
224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsIdleInstallInfo : public ExtensionPrefsTest {
225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Sets idle install information for one test extension.
227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetIdleInfo(std::string id, int num) {
2283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    prefs()->SetIdleInstallInfo(id,
2293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                basedir_.AppendASCII(base::IntToString(num)),
2303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                "1." + base::IntToString(num),
231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                now_ + TimeDelta::FromSeconds(num));
232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Verifies that we get back expected idle install information previously
235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // set by SetIdleInfo.
236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void VerifyIdleInfo(std::string id, int num) {
237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    FilePath crx_path;
238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::string version;
239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    base::Time fetch_time;
240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(prefs()->GetIdleInstallInfo(id, &crx_path, &version,
241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                            &fetch_time));
242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_EQ(crx_path.value(),
2433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              basedir_.AppendASCII(base::IntToString(num)).value());
2443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    ASSERT_EQ("1." + base::IntToString(num), version);
245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(fetch_time == now_ + TimeDelta::FromSeconds(num));
246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    PathService::Get(chrome::DIR_TEST_DATA, &basedir_);
250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    now_ = Time::Now();
251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    id1_ = prefs_.AddExtensionAndReturnId("1");
252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    id2_ = prefs_.AddExtensionAndReturnId("2");
253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    id3_ = prefs_.AddExtensionAndReturnId("3");
254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    id4_ = prefs_.AddExtensionAndReturnId("4");
255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Set info for two extensions, then remove it.
257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id1_, 1);
258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id2_, 2);
259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id1_, 1);
260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id2_, 2);
261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::set<std::string> ids = prefs()->GetIdleInstallInfoIds();
262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(2u, ids.size());
263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ContainsKey(ids, id1_));
264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ContainsKey(ids, id2_));
265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->RemoveIdleInstallInfo(id1_);
266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->RemoveIdleInstallInfo(id2_);
267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ids = prefs()->GetIdleInstallInfoIds();
268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ids.empty());
269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Try getting/removing info for an id that used to have info set.
271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->GetIdleInstallInfo(id1_, NULL, NULL, NULL));
272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->RemoveIdleInstallInfo(id1_));
273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Try getting/removing info for an id that has not yet had any info set.
275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->GetIdleInstallInfo(id3_, NULL, NULL, NULL));
276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->RemoveIdleInstallInfo(id3_));
277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Set info for 4 extensions, then remove for one of them.
279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id1_, 1);
280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id2_, 2);
281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id3_, 3);
282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetIdleInfo(id4_, 4);
283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id1_, 1);
284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id2_, 2);
285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id3_, 3);
286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id4_, 4);
287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->RemoveIdleInstallInfo(id3_);
288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Make sure the info for the 3 extensions we expect is present.
292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::set<std::string> ids = prefs()->GetIdleInstallInfoIds();
293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(3u, ids.size());
294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ContainsKey(ids, id1_));
295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ContainsKey(ids, id2_));
296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(ContainsKey(ids, id4_));
297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id1_, 1);
298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id2_, 2);
299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    VerifyIdleInfo(id4_, 4);
300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // Make sure there isn't info the for the one extension id we removed.
302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->GetIdleInstallInfo(id3_, NULL, NULL, NULL));
303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Time now_;
307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  FilePath basedir_;
308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string id1_;
309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string id2_;
310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string id3_;
311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string id4_;
312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
313c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsIdleInstallInfo, IdleInstallInfo) {}
314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefsOnExtensionInstalled : public ExtensionPrefsTest {
316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Initialize() {
318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    extension_.reset(prefs_.AddExtension("on_extension_installed"));
319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(Extension::ENABLED,
320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              prefs()->GetExtensionState(extension_->id()));
321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_FALSE(prefs()->IsIncognitoEnabled(extension_->id()));
322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    prefs()->OnExtensionInstalled(extension_.get(),
323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                  Extension::DISABLED, true);
324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Verify() {
327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_EQ(Extension::DISABLED,
328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              prefs()->GetExtensionState(extension_->id()));
329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_TRUE(prefs()->IsIncognitoEnabled(extension_->id()));
330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<Extension> extension_;
334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
335c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ExtensionPrefsOnExtensionInstalled,
336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch       ExtensionPrefsOnExtensionInstalled) {}
337