15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_PREFS_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_PREFS_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "extensions/common/manifest.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionPrefValueMap; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrefService; 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefServiceSyncable; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DictionaryValue; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SequencedTaskRunner; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace user_prefs { 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PrefRegistrySyncable; 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Extension; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionPrefs; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is a test class intended to make it easier to work with ExtensionPrefs 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in tests. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestExtensionPrefs { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci explicit TestExtensionPrefs( 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const scoped_refptr<base::SequencedTaskRunner>& task_runner); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestExtensionPrefs(); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionPrefs* prefs() { return prefs_.get(); } 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ExtensionPrefs& const_prefs() const { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return *prefs_.get(); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefService* pref_service(); 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const scoped_refptr<user_prefs::PrefRegistrySyncable>& pref_registry(); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ResetPrefRegistry(); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& temp_dir() const { return temp_dir_.path(); } 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& extensions_dir() const { return extensions_dir_; } 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ExtensionPrefValueMap* extension_pref_value_map() { 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return extension_pref_value_map_.get(); 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This will cause the ExtensionPrefs to be deleted and recreated, based on 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // any existing backing file we had previously created. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RecreateExtensionPrefs(); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a new Extension with the given name in our temp dir, adds it to 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // our ExtensionPrefs, and returns it. 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_refptr<Extension> AddExtension(const std::string& name); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // As above, but the extension is an app. 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_refptr<Extension> AddApp(const std::string& name); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Similar to AddExtension, but takes a dictionary with manifest values. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Extension> AddExtensionWithManifest( 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue& manifest, 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Manifest::Location location); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Similar to AddExtension, but takes a dictionary with manifest values 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and extension flags. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Extension> AddExtensionWithManifestAndFlags( 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue& manifest, 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Manifest::Location location, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int extra_flags); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Similar to AddExtension, this adds a new test Extension. This is useful for 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // cases when you don't need the Extension object, but just the id it was 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // assigned. 795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::string AddExtensionAndReturnId(const std::string& name); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* CreateIncognitoPrefService() const; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allows disabling the loading of preferences of extensions. Becomes 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // active after calling RecreateExtensionPrefs(). Defaults to false. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_extensions_disabled(bool extensions_disabled); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir_; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath preferences_file_; 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath extensions_dir_; 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<user_prefs::PrefRegistrySyncable> pref_registry_; 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<PrefServiceSyncable> pref_service_; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ExtensionPrefs> prefs_; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ExtensionPrefValueMap> extension_pref_value_map_; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const scoped_refptr<base::SequencedTaskRunner> task_runner_; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool extensions_disabled_; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestExtensionPrefs); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_PREFS_H_ 105