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