test_extension_system.h revision 1e9bf3e0803691d0a228da41fc608347b6db4340
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_SYSTEM_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_SYSTEM_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_system.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CommandLine;
1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class TestingValueStore;
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FilePath;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Time;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace content {
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class BrowserContext;
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class ExtensionPrefs;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test ExtensionSystem, for use with TestingProfile.
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestExtensionSystem : public ExtensionSystem {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit TestExtensionSystem(Profile* profile);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~TestExtensionSystem();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // BrowserContextKeyedService implementation.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Shutdown() OVERRIDE;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Creates an ExtensionPrefs with the testing profile and returns it.
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Useful for tests that need to modify prefs before creating the
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // ExtensionService.
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ExtensionPrefs* CreateExtensionPrefs(const CommandLine* command_line,
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                       const base::FilePath& install_directory);
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates an ExtensionService initialized with the testing profile and
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // returns it, and creates ExtensionPrefs if it hasn't been created yet.
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ExtensionService* CreateExtensionService(
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const CommandLine* command_line,
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const base::FilePath& install_directory,
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      bool autoupdate_enabled);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates an ExtensionProcessManager. If not invoked, the
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ExtensionProcessManager is NULL.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateExtensionProcessManager();
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Allows the ExtensionProcessManager to be overriden, for example by a
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // stub implementation. Takes ownership of |manager|.
531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  void SetExtensionProcessManager(ExtensionProcessManager* manager);
541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateSocketManager();
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void InitForRegularProfile(bool extensions_enabled,
5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                     bool defer_background_creation) OVERRIDE {}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetExtensionService(ExtensionService* service);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ExtensionService* extension_service() OVERRIDE;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ManagementPolicy* management_policy() OVERRIDE;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual UserScriptMaster* user_script_master() OVERRIDE;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ExtensionProcessManager* process_manager() OVERRIDE;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual StateStore* state_store() OVERRIDE;
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual StateStore* rules_store() OVERRIDE;
6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  TestingValueStore* value_store() { return value_store_; }
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ExtensionInfoMap* info_map() OVERRIDE;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual LazyBackgroundTaskQueue* lazy_background_task_queue() OVERRIDE;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual EventRouter* event_router() OVERRIDE;
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ExtensionWarningService* warning_service() OVERRIDE;
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual Blacklist* blacklist() OVERRIDE;
7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual const OneShotEvent& ready() const OVERRIDE;
73558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  virtual ErrorConsole* error_console() OVERRIDE;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void SetReady() {
767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    LOG(INFO) << "SetReady()";
777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    ready_.Signal();
787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Factory method for tests to use with SetTestingProfile.
8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  static BrowserContextKeyedService* Build(content::BrowserContext* profile);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_;
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<StateStore> state_store_;
8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // A pointer to the TestingValueStore owned by |state_store_|.
8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  TestingValueStore* value_store_;
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Blacklist> blacklist_;
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<StandardManagementPolicyProvider>
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      standard_management_policy_provider_;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<ManagementPolicy> management_policy_;
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ExtensionService> extension_service_;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<ExtensionProcessManager> extension_process_manager_;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<ExtensionInfoMap> info_map_;
97558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  scoped_ptr<ErrorConsole> error_console_;
9890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  OneShotEvent ready_;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_SYSTEM_H_
104