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