mock_extension_system.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. // Copyright 2014 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef EXTENSIONS_BROWSER_MOCK_EXTENSION_SYSTEM_H_
  5. #define EXTENSIONS_BROWSER_MOCK_EXTENSION_SYSTEM_H_
  6. #include "base/memory/raw_ptr.h"
  7. #include "base/one_shot_event.h"
  8. #include "components/keyed_service/content/browser_context_dependency_manager.h"
  9. #include "extensions/browser/extension_registry_factory.h"
  10. #include "extensions/browser/extension_system.h"
  11. #include "extensions/browser/extension_system_provider.h"
  12. namespace extensions {
  13. // An empty ExtensionSystem for testing. Tests that need only specific
  14. // parts of ExtensionSystem should derive from this class and override
  15. // functions as needed. To use this, use
  16. // TestExtensionsBrowserClient::set_extension_system_factory
  17. // with the MockExtensionSystemFactory below.
  18. class MockExtensionSystem : public ExtensionSystem {
  19. public:
  20. using InstallUpdateCallback = ExtensionSystem::InstallUpdateCallback;
  21. explicit MockExtensionSystem(content::BrowserContext* context);
  22. MockExtensionSystem(const MockExtensionSystem&) = delete;
  23. MockExtensionSystem& operator=(const MockExtensionSystem&) = delete;
  24. ~MockExtensionSystem() override;
  25. content::BrowserContext* browser_context() { return browser_context_; }
  26. void SetReady();
  27. // ExtensionSystem overrides:
  28. void InitForRegularProfile(bool extensions_enabled) override;
  29. ExtensionService* extension_service() override;
  30. ManagementPolicy* management_policy() override;
  31. ServiceWorkerManager* service_worker_manager() override;
  32. UserScriptManager* user_script_manager() override;
  33. StateStore* state_store() override;
  34. StateStore* rules_store() override;
  35. StateStore* dynamic_user_scripts_store() override;
  36. scoped_refptr<value_store::ValueStoreFactory> store_factory() override;
  37. InfoMap* info_map() override;
  38. QuotaService* quota_service() override;
  39. AppSorting* app_sorting() override;
  40. const base::OneShotEvent& ready() const override;
  41. bool is_ready() const override;
  42. ContentVerifier* content_verifier() override;
  43. std::unique_ptr<ExtensionSet> GetDependentExtensions(
  44. const Extension* extension) override;
  45. void InstallUpdate(const std::string& extension_id,
  46. const std::string& public_key,
  47. const base::FilePath& temp_dir,
  48. bool install_immediately,
  49. InstallUpdateCallback install_update_callback) override;
  50. void PerformActionBasedOnOmahaAttributes(
  51. const std::string& extension_id,
  52. const base::Value& attributes) override;
  53. bool FinishDelayedInstallationIfReady(const std::string& extension_id,
  54. bool install_immediately) override;
  55. private:
  56. raw_ptr<content::BrowserContext> browser_context_;
  57. base::OneShotEvent ready_;
  58. };
  59. // A factory to create a MockExtensionSystem. Sample use:
  60. //
  61. // MockExtensionSystemFactory<MockExtensionSystemSubclass> factory;
  62. // TestExtensionsBrowserClient::set_extension_system_factory(factory);
  63. template <typename T>
  64. class MockExtensionSystemFactory : public ExtensionSystemProvider {
  65. public:
  66. MockExtensionSystemFactory()
  67. : ExtensionSystemProvider(
  68. "MockExtensionSystem",
  69. BrowserContextDependencyManager::GetInstance()) {
  70. DependsOn(ExtensionRegistryFactory::GetInstance());
  71. }
  72. MockExtensionSystemFactory(const MockExtensionSystemFactory&) = delete;
  73. MockExtensionSystemFactory& operator=(const MockExtensionSystemFactory&) =
  74. delete;
  75. ~MockExtensionSystemFactory() override {}
  76. // BrowserContextKeyedServiceFactory overrides:
  77. KeyedService* BuildServiceInstanceFor(
  78. content::BrowserContext* context) const override {
  79. return new T(context);
  80. }
  81. content::BrowserContext* GetBrowserContextToUse(
  82. content::BrowserContext* context) const override {
  83. // Separate instance in incognito.
  84. return context;
  85. }
  86. // ExtensionSystemProvider overrides:
  87. ExtensionSystem* GetForBrowserContext(
  88. content::BrowserContext* context) override {
  89. return static_cast<ExtensionSystem*>(
  90. GetServiceForBrowserContext(context, true));
  91. }
  92. };
  93. } // namespace extensions
  94. #endif // EXTENSIONS_BROWSER_MOCK_EXTENSION_SYSTEM_H_