test_extension_system.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
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)
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/scoped_vector.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/common/one_shot_event.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class Profile;
1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class TestingValueStore;
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class CommandLine;
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FilePath;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Time;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace content {
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class BrowserContext;
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class DeclarativeUserScriptMaster;
2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class ExtensionPrefs;
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class RuntimeData;
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class SharedUserScriptMaster;
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class StandardManagementPolicyProvider;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test ExtensionSystem, for use with TestingProfile.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestExtensionSystem : public ExtensionSystem {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit TestExtensionSystem(Profile* profile);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~TestExtensionSystem();
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // KeyedService implementation.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Shutdown() OVERRIDE;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Creates an ExtensionPrefs with the testing profile and returns it.
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Useful for tests that need to modify prefs before creating the
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // ExtensionService.
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ExtensionPrefs* CreateExtensionPrefs(const base::CommandLine* command_line,
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                       const base::FilePath& install_directory);
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates an ExtensionService initialized with the testing profile and
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // returns it, and creates ExtensionPrefs if it hasn't been created yet.
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ExtensionService* CreateExtensionService(
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const base::CommandLine* command_line,
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const base::FilePath& install_directory,
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      bool autoupdate_enabled);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Creates a ProcessManager. If not invoked, the ProcessManager is NULL.
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void CreateProcessManager();
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Allows the ProcessManager to be overriden, for example by a stub
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // implementation. Takes ownership of |manager|.
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SetProcessManager(ProcessManager* manager);
601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateSocketManager();
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void InitForRegularProfile(bool extensions_enabled) OVERRIDE {}
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetExtensionService(ExtensionService* service);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ExtensionService* extension_service() OVERRIDE;
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual RuntimeData* runtime_data() OVERRIDE;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ManagementPolicy* management_policy() OVERRIDE;
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual SharedUserScriptMaster* shared_user_script_master() OVERRIDE;
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual ProcessManager* process_manager() OVERRIDE;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual StateStore* state_store() OVERRIDE;
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual StateStore* rules_store() OVERRIDE;
7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  TestingValueStore* value_store() { return value_store_; }
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual InfoMap* info_map() OVERRIDE;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual LazyBackgroundTaskQueue* lazy_background_task_queue() OVERRIDE;
75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void SetEventRouter(scoped_ptr<EventRouter> event_router);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual EventRouter* event_router() OVERRIDE;
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual WarningService* warning_service() OVERRIDE;
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual Blacklist* blacklist() OVERRIDE;
79558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  virtual ErrorConsole* error_console() OVERRIDE;
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual InstallVerifier* install_verifier() OVERRIDE;
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual QuotaService* quota_service() OVERRIDE;
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual const OneShotEvent& ready() const OVERRIDE;
83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual ContentVerifier* content_verifier() OVERRIDE;
84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual scoped_ptr<ExtensionSet> GetDependentExtensions(
85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const Extension* extension) OVERRIDE;
866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual DeclarativeUserScriptMaster*
876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      GetDeclarativeUserScriptMasterByExtension(
886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          const ExtensionId& extension_id) OVERRIDE;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Note that you probably want to use base::RunLoop().RunUntilIdle() right
9103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // after this to run all the accumulated tasks.
9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void SetReady() { ready_.Signal(); }
937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Factory method for tests to use with SetTestingProfile.
95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  static KeyedService* Build(content::BrowserContext* profile);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Profile* profile_;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<StateStore> state_store_;
10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // A pointer to the TestingValueStore owned by |state_store_|.
10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  TestingValueStore* value_store_;
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ScopedVector<DeclarativeUserScriptMaster> declarative_user_script_masters_;
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Blacklist> blacklist_;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<ManagementPolicy> management_policy_;
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<RuntimeData> runtime_data_;
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ExtensionService> extension_service_;
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<ProcessManager> process_manager_;
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_refptr<InfoMap> info_map_;
111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_ptr<EventRouter> event_router_;
112558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch  scoped_ptr<ErrorConsole> error_console_;
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<InstallVerifier> install_verifier_;
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<QuotaService> quota_service_;
11590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  OneShotEvent ready_;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_EXTENSIONS_TEST_EXTENSION_SYSTEM_H_
121