test_extension_system.h revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// Copyright (c) 2012 The Chromium Authors. All rights reserved.
28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// Use of this source code is governed by a BSD-style license that can be
3fb79edc9df1f20461e90e478363d207348213d35Dmitry Shmidt// found in the LICENSE file.
48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt#ifndef CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_SYSTEM_H_
6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt#define CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_SYSTEM_H_
78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "extensions/browser/extension_system.h"
98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "extensions/common/one_shot_event.h"
108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass Profile;
128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass TestingValueStore;
138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtnamespace base {
158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass CommandLine;
16a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidtclass FilePath;
1704f534e89ed127da4077485376f24debc50d80d5Dmitry Shmidtclass Time;
188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
201f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtnamespace content {
211f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtclass BrowserContext;
221f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt}
231f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
241f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtnamespace extensions {
251f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtclass DeclarativeUserScriptMaster;
261f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtclass ExtensionPrefs;
278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass RuntimeData;
288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass SharedUserScriptMaster;
298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass StandardManagementPolicyProvider;
308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt// Test ExtensionSystem, for use with TestingProfile.
328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtclass TestExtensionSystem : public ExtensionSystem {
338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt public:
348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  explicit TestExtensionSystem(Profile* profile);
35c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidt  virtual ~TestExtensionSystem();
36c2ebb4b85d69b65f552fee71ac68f44e8d87b39eDmitry Shmidt
378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  // KeyedService implementation.
388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual void Shutdown() OVERRIDE;
398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  // Creates an ExtensionPrefs with the testing profile and returns it.
411f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt  // Useful for tests that need to modify prefs before creating the
42a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt  // ExtensionService.
43bd14a57187b024f49f5b9ace55ef457d8d04650aDmitry Shmidt  ExtensionPrefs* CreateExtensionPrefs(const base::CommandLine* command_line,
448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt                                       const base::FilePath& install_directory);
458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  // Creates an ExtensionService initialized with the testing profile and
478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  // returns it, and creates ExtensionPrefs if it hasn't been created yet.
488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  ExtensionService* CreateExtensionService(
498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const base::CommandLine* command_line,
508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const base::FilePath& install_directory,
518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      bool autoupdate_enabled);
52cce06667447b5aec83452adb0c15100ada531095Dmitry Shmidt
538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  // Creates a ProcessManager. If not invoked, the ProcessManager is NULL.
548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  void CreateProcessManager();
558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  // Allows the ProcessManager to be overriden, for example by a stub
578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  // implementation. Takes ownership of |manager|.
588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  void SetProcessManager(ProcessManager* manager);
598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  void CreateSocketManager();
61a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt
62a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt  virtual void InitForRegularProfile(bool extensions_enabled) OVERRIDE {}
63a54fa5fb807eaeff45464139b5a7759f060cec68Dmitry Shmidt  void SetExtensionService(ExtensionService* service);
648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual ExtensionService* extension_service() OVERRIDE;
658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual RuntimeData* runtime_data() OVERRIDE;
668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual ManagementPolicy* management_policy() OVERRIDE;
678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual SharedUserScriptMaster* shared_user_script_master() OVERRIDE;
688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual ProcessManager* process_manager() OVERRIDE;
698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual StateStore* state_store() OVERRIDE;
708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual StateStore* rules_store() OVERRIDE;
718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  TestingValueStore* value_store() { return value_store_; }
728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual InfoMap* info_map() OVERRIDE;
738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual LazyBackgroundTaskQueue* lazy_background_task_queue() OVERRIDE;
748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  void SetEventRouter(scoped_ptr<EventRouter> event_router);
758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual EventRouter* event_router() OVERRIDE;
768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual ExtensionWarningService* warning_service() OVERRIDE;
778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual Blacklist* blacklist() OVERRIDE;
788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual ErrorConsole* error_console() OVERRIDE;
798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual InstallVerifier* install_verifier() OVERRIDE;
808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual QuotaService* quota_service() OVERRIDE;
818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual const OneShotEvent& ready() const OVERRIDE;
828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual ContentVerifier* content_verifier() OVERRIDE;
838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual scoped_ptr<ExtensionSet> GetDependentExtensions(
848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      const Extension* extension) OVERRIDE;
858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  virtual DeclarativeUserScriptMaster*
868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt      GetDeclarativeUserScriptMasterByExtension(
878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt          const ExtensionId& extension_id) OVERRIDE;
888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
891f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt  void SetReady() {
908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt    LOG(INFO) << "SetReady()";
918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt    ready_.Signal();
928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  }
938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
9404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt  // Factory method for tests to use with SetTestingProfile.
9504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt  static KeyedService* Build(content::BrowserContext* profile);
9604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
971f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt protected:
981f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt  Profile* profile_;
991f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
1001f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt private:
1011f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt  scoped_ptr<StateStore> state_store_;
1021f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt  // A pointer to the TestingValueStore owned by |state_store_|.
1031f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt  TestingValueStore* value_store_;
1041f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt  scoped_ptr<Blacklist> blacklist_;
105cce06667447b5aec83452adb0c15100ada531095Dmitry Shmidt  scoped_ptr<StandardManagementPolicyProvider>
106051af73b8f8014eff33330aead0f36944b3403e6Dmitry Shmidt      standard_management_policy_provider_;
107051af73b8f8014eff33330aead0f36944b3403e6Dmitry Shmidt  scoped_ptr<ManagementPolicy> management_policy_;
108051af73b8f8014eff33330aead0f36944b3403e6Dmitry Shmidt  scoped_ptr<RuntimeData> runtime_data_;
10904f534e89ed127da4077485376f24debc50d80d5Dmitry Shmidt  scoped_ptr<ExtensionService> extension_service_;
11004f534e89ed127da4077485376f24debc50d80d5Dmitry Shmidt  scoped_ptr<ProcessManager> process_manager_;
11104f534e89ed127da4077485376f24debc50d80d5Dmitry Shmidt  scoped_refptr<InfoMap> info_map_;
11204f534e89ed127da4077485376f24debc50d80d5Dmitry Shmidt  scoped_ptr<EventRouter> event_router_;
11304f534e89ed127da4077485376f24debc50d80d5Dmitry Shmidt  scoped_ptr<ErrorConsole> error_console_;
1148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  scoped_ptr<InstallVerifier> install_verifier_;
1158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  scoped_ptr<QuotaService> quota_service_;
1168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt  OneShotEvent ready_;
1178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt};
11861d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt
11961d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt}  // namespace extensions
12061d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt
12161d9df3e62aaa0e87ad05452fcb95142159a17b6Dmitry Shmidt#endif  // CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_SYSTEM_H_
122051af73b8f8014eff33330aead0f36944b3403e6Dmitry Shmidt