test_extensions_browser_client.h 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  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_TEST_EXTENSIONS_BROWSER_CLIENT_H_
  5. #define EXTENSIONS_BROWSER_TEST_EXTENSIONS_BROWSER_CLIENT_H_
  6. #include <memory>
  7. #include <string>
  8. #include <utility>
  9. #include <vector>
  10. #include "base/callback.h"
  11. #include "base/compiler_specific.h"
  12. #include "base/memory/raw_ptr.h"
  13. #include "base/memory/ref_counted.h"
  14. #include "build/build_config.h"
  15. #include "build/chromeos_buildflags.h"
  16. #include "components/update_client/update_client.h"
  17. #include "extensions/browser/extensions_browser_client.h"
  18. #include "extensions/browser/updater/extension_cache.h"
  19. #include "mojo/public/cpp/bindings/pending_receiver.h"
  20. #include "mojo/public/cpp/bindings/pending_remote.h"
  21. #include "services/network/public/mojom/fetch_api.mojom.h"
  22. namespace extensions {
  23. class KioskDelegate;
  24. // A simplified ExtensionsBrowserClient for a single normal browser context and
  25. // an optional incognito browser context associated with it. A test that uses
  26. // this class should call ExtensionsBrowserClient::Set() with its instance.
  27. class TestExtensionsBrowserClient : public ExtensionsBrowserClient {
  28. public:
  29. // If provided, |main_context| must not be an incognito context.
  30. explicit TestExtensionsBrowserClient(content::BrowserContext* main_context);
  31. // Alternate constructor allowing |main_context_| to be set later.
  32. TestExtensionsBrowserClient();
  33. TestExtensionsBrowserClient(const TestExtensionsBrowserClient&) = delete;
  34. TestExtensionsBrowserClient& operator=(const TestExtensionsBrowserClient&) =
  35. delete;
  36. ~TestExtensionsBrowserClient() override;
  37. void set_process_manager_delegate(ProcessManagerDelegate* delegate) {
  38. process_manager_delegate_ = delegate;
  39. }
  40. void set_extension_system_factory(ExtensionSystemProvider* factory) {
  41. extension_system_factory_ = factory;
  42. }
  43. void set_pref_service(PrefService* pref_service) {
  44. pref_service_ = pref_service;
  45. }
  46. void set_extension_cache(std::unique_ptr<ExtensionCache> extension_cache) {
  47. extension_cache_ = std::move(extension_cache);
  48. }
  49. void set_lock_screen_context(content::BrowserContext* context) {
  50. lock_screen_context_ = context;
  51. }
  52. // Sets a factory to respond to calls of the CreateUpdateClient method.
  53. void SetUpdateClientFactory(
  54. base::RepeatingCallback<update_client::UpdateClient*(void)> factory);
  55. // Sets the main browser context. Only call if a BrowserContext was not
  56. // already provided. |main_context| must not be an incognito context.
  57. void SetMainContext(content::BrowserContext* main_context);
  58. // Associates an incognito context with |main_context_|.
  59. void SetIncognitoContext(content::BrowserContext* incognito_context);
  60. // ExtensionsBrowserClient overrides:
  61. bool IsShuttingDown() override;
  62. bool AreExtensionsDisabled(const base::CommandLine& command_line,
  63. content::BrowserContext* context) override;
  64. bool IsValidContext(content::BrowserContext* context) override;
  65. bool IsSameContext(content::BrowserContext* first,
  66. content::BrowserContext* second) override;
  67. bool HasOffTheRecordContext(content::BrowserContext* context) override;
  68. content::BrowserContext* GetOffTheRecordContext(
  69. content::BrowserContext* context) override;
  70. content::BrowserContext* GetOriginalContext(
  71. content::BrowserContext* context) override;
  72. #if BUILDFLAG(IS_CHROMEOS_ASH)
  73. std::string GetUserIdHashFromContext(
  74. content::BrowserContext* context) override;
  75. #endif
  76. #if BUILDFLAG(IS_CHROMEOS_LACROS)
  77. bool IsFromMainProfile(content::BrowserContext* context) override;
  78. #endif
  79. bool IsGuestSession(content::BrowserContext* context) const override;
  80. bool IsExtensionIncognitoEnabled(
  81. const std::string& extension_id,
  82. content::BrowserContext* context) const override;
  83. bool CanExtensionCrossIncognito(
  84. const extensions::Extension* extension,
  85. content::BrowserContext* context) const override;
  86. base::FilePath GetBundleResourcePath(
  87. const network::ResourceRequest& request,
  88. const base::FilePath& extension_resources_path,
  89. int* resource_id) const override;
  90. void LoadResourceFromResourceBundle(
  91. const network::ResourceRequest& request,
  92. mojo::PendingReceiver<network::mojom::URLLoader> loader,
  93. const base::FilePath& resource_relative_path,
  94. int resource_id,
  95. scoped_refptr<net::HttpResponseHeaders> headers,
  96. mojo::PendingRemote<network::mojom::URLLoaderClient> client) override;
  97. bool AllowCrossRendererResourceLoad(
  98. const network::ResourceRequest& request,
  99. network::mojom::RequestDestination destination,
  100. ui::PageTransition page_transition,
  101. int child_id,
  102. bool is_incognito,
  103. const Extension* extension,
  104. const ExtensionSet& extensions,
  105. const ProcessMap& process_map) override;
  106. PrefService* GetPrefServiceForContext(
  107. content::BrowserContext* context) override;
  108. void GetEarlyExtensionPrefsObservers(
  109. content::BrowserContext* context,
  110. std::vector<EarlyExtensionPrefsObserver*>* observers) const override;
  111. ProcessManagerDelegate* GetProcessManagerDelegate() const override;
  112. std::unique_ptr<ExtensionHostDelegate> CreateExtensionHostDelegate() override;
  113. bool DidVersionUpdate(content::BrowserContext* context) override;
  114. void PermitExternalProtocolHandler() override;
  115. bool IsInDemoMode() override;
  116. bool IsScreensaverInDemoMode(const std::string& app_id) override;
  117. bool IsRunningInForcedAppMode() override;
  118. bool IsAppModeForcedForApp(const ExtensionId& extension_id) override;
  119. bool IsLoggedInAsPublicAccount() override;
  120. ExtensionSystemProvider* GetExtensionSystemFactory() override;
  121. void RegisterBrowserInterfaceBindersForFrame(
  122. mojo::BinderMapWithContext<content::RenderFrameHost*>* binder_map,
  123. content::RenderFrameHost* render_frame_host,
  124. const Extension* extension) const override;
  125. std::unique_ptr<RuntimeAPIDelegate> CreateRuntimeAPIDelegate(
  126. content::BrowserContext* context) const override;
  127. const ComponentExtensionResourceManager*
  128. GetComponentExtensionResourceManager() override;
  129. void BroadcastEventToRenderers(
  130. events::HistogramValue histogram_value,
  131. const std::string& event_name,
  132. base::Value::List args,
  133. bool dispatch_to_off_the_record_profiles) override;
  134. ExtensionCache* GetExtensionCache() override;
  135. bool IsBackgroundUpdateAllowed() override;
  136. bool IsMinBrowserVersionSupported(const std::string& min_version) override;
  137. ExtensionWebContentsObserver* GetExtensionWebContentsObserver(
  138. content::WebContents* web_contents) override;
  139. KioskDelegate* GetKioskDelegate() override;
  140. scoped_refptr<update_client::UpdateClient> CreateUpdateClient(
  141. content::BrowserContext* context) override;
  142. bool IsLockScreenContext(content::BrowserContext* context) override;
  143. std::string GetApplicationLocale() override;
  144. ExtensionSystemProvider* extension_system_factory() {
  145. return extension_system_factory_;
  146. }
  147. private:
  148. // Not owned.
  149. raw_ptr<content::BrowserContext> main_context_ = nullptr;
  150. // Not owned.
  151. raw_ptr<content::BrowserContext> incognito_context_ = nullptr;
  152. // Not owned.
  153. raw_ptr<content::BrowserContext> lock_screen_context_ = nullptr;
  154. // Not owned.
  155. raw_ptr<ProcessManagerDelegate> process_manager_delegate_ = nullptr;
  156. // Not owned.
  157. raw_ptr<ExtensionSystemProvider> extension_system_factory_ = nullptr;
  158. // Not owned.
  159. raw_ptr<PrefService> pref_service_ = nullptr;
  160. std::unique_ptr<ExtensionCache> extension_cache_;
  161. base::RepeatingCallback<update_client::UpdateClient*(void)>
  162. update_client_factory_;
  163. };
  164. } // namespace extensions
  165. #endif // EXTENSIONS_BROWSER_TEST_EXTENSIONS_BROWSER_CLIENT_H_