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