18ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen// Copyright 2014 The Chromium Authors. All rights reserved. 28ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen// Use of this source code is governed by a BSD-style license that can be 38ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen// found in the LICENSE file. 48ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 58ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_MANAGEMENT_TEST_UTIL_H_ 68ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen#define CHROME_BROWSER_EXTENSIONS_EXTENSION_MANAGEMENT_TEST_UTIL_H_ 78ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 88ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen#include <string> 98ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 108ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen#include "base/macros.h" 118ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen#include "base/memory/scoped_ptr.h" 128ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen#include "base/values.h" 138ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen#include "chrome/browser/extensions/extension_management_constants.h" 14344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen#include "extensions/browser/pref_names.h" 158ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen#include "extensions/common/extension.h" 168ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 178ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksennamespace extensions { 188ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 198ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen// Base class for essential routines on preference manipulation. 20344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksenclass ExtensionManagementPrefUpdaterBase { 218ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen public: 228ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen ExtensionManagementPrefUpdaterBase(); 238ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen virtual ~ExtensionManagementPrefUpdaterBase(); 24344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen 25344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen // Helper functions for per extension settings. 26344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen void UnsetPerExtensionSettings(const ExtensionId& id); 27344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen void ClearPerExtensionSettings(const ExtensionId& id); 28344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen 298ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen // Helper functions for 'installation_mode' manipulation. 308ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen void SetBlacklistedByDefault(bool value); 318ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen void ClearInstallationModesForIndividualExtensions(); 328ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen void SetIndividualExtensionInstallationAllowed(const ExtensionId& id, 338ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen bool allowed); 348ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen void SetIndividualExtensionAutoInstalled(const ExtensionId& id, 358ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen const std::string& update_url, 368ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen bool forced); 378ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 388ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen // Helper functions for 'install_sources' manipulation. 398ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen void UnsetInstallSources(); 408ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen void ClearInstallSources(); 418ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen void AddInstallSource(const std::string& install_source); 428ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen void RemoveInstallSource(const std::string& install_source); 438ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 448ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen // Helper functions for 'allowed_types' manipulation. 458ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen void UnsetAllowedTypes(); 468ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen void ClearAllowedTypes(); 4746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen void AddAllowedType(const std::string& allowed_type); 488ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen void RemoveAllowedType(const std::string& allowd_type); 498ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 508ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen // Expose a read-only preference to user. 518ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen const base::DictionaryValue* GetPref(); 528ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 5346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen protected: 548ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen // Set the preference with |pref|, pass the ownership of it as well. 558ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen // This function must be called before accessing publicly exposed functions, 568ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen // for example in constructor of subclass. 578ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen void SetPref(base::DictionaryValue* pref); 588ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 5946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen // Take the preference. Caller takes ownership of it as well. 608ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen // This function must be called after accessing publicly exposed functions, 618ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen // for example in destructor of subclass. 628ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen scoped_ptr<base::DictionaryValue> TakePref(); 638ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 64957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen private: 6546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen // Helper functions for manipulating sub properties like list of strings. 668ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen void ClearList(const std::string& path); 678ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen void AddStringToList(const std::string& path, const std::string& str); 688ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen void RemoveStringFromList(const std::string& path, const std::string& str); 698ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 7046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen scoped_ptr<base::DictionaryValue> pref_; 718ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 728ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen DISALLOW_COPY_AND_ASSIGN(ExtensionManagementPrefUpdaterBase); 738ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen}; 748ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 758ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen// A helper class to manipulate the extension management preference in unit 7646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen// tests. 778ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksentemplate <class TestingPrefService> 788ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenclass ExtensionManagementPrefUpdater 798ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen : public ExtensionManagementPrefUpdaterBase { 808ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen public: 818ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen explicit ExtensionManagementPrefUpdater(TestingPrefService* service) 82957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen : service_(service) { 8346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen const base::Value* pref_value = 848ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen service_->GetManagedPref(pref_names::kExtensionManagement); 858ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen if (pref_value) { 868ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen const base::DictionaryValue* dict_value = NULL; 878ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen pref_value->GetAsDictionary(&dict_value); 888ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen SetPref(dict_value->DeepCopy()); 898ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen } else { 908ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen SetPref(new base::DictionaryValue); 91957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen } 92957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen } 9346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 948ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen virtual ~ExtensionManagementPrefUpdater() { 958ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen service_->SetManagedPref(pref_names::kExtensionManagement, 968ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen TakePref().release()); 978ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen } 988ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 99957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen private: 10046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen TestingPrefService* service_; 1018ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 1028ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen DISALLOW_COPY_AND_ASSIGN(ExtensionManagementPrefUpdater); 1038ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen}; 1048ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 1058ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen} // namespace extensions 1068ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen 1078ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_MANAGEMENT_TEST_UTIL_H_ 108957f9fe1cce0957bcde4a1093da83e17aaec6764Gordon Henriksen