electron_extensions_browser_client.h 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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 ELECTRON_SHELL_BROWSER_EXTENSIONS_ELECTRON_EXTENSIONS_BROWSER_CLIENT_H_
  5. #define ELECTRON_SHELL_BROWSER_EXTENSIONS_ELECTRON_EXTENSIONS_BROWSER_CLIENT_H_
  6. #include <memory>
  7. #include <string>
  8. #include <vector>
  9. #include "build/build_config.h"
  10. #include "extensions/browser/extensions_browser_client.h"
  11. #include "extensions/browser/kiosk/kiosk_delegate.h"
  12. #include "mojo/public/cpp/bindings/pending_remote.h"
  13. #include "services/network/public/cpp/resource_request.h"
  14. #include "services/network/public/mojom/fetch_api.mojom.h"
  15. #include "url/origin.h"
  16. class PrefService;
  17. namespace extensions {
  18. class ExtensionsAPIClient;
  19. class KioskDelegate;
  20. class ProcessManagerDelegate;
  21. class ElectronProcessManagerDelegate;
  22. class ProcessMap;
  23. class ElectronComponentExtensionResourceManager;
  24. } // namespace extensions
  25. namespace electron {
  26. // An ExtensionsBrowserClient that supports a single content::BrowserContext
  27. // with no related incognito context.
  28. class ElectronExtensionsBrowserClient
  29. : public extensions::ExtensionsBrowserClient {
  30. public:
  31. ElectronExtensionsBrowserClient();
  32. ~ElectronExtensionsBrowserClient() override;
  33. // disable copy
  34. ElectronExtensionsBrowserClient(const ElectronExtensionsBrowserClient&) =
  35. delete;
  36. ElectronExtensionsBrowserClient& operator=(
  37. const ElectronExtensionsBrowserClient&) = delete;
  38. // ExtensionsBrowserClient overrides:
  39. bool IsShuttingDown() override;
  40. bool AreExtensionsDisabled(const base::CommandLine& command_line,
  41. content::BrowserContext* context) override;
  42. bool IsValidContext(void* context) override;
  43. bool IsSameContext(content::BrowserContext* first,
  44. content::BrowserContext* second) override;
  45. bool HasOffTheRecordContext(content::BrowserContext* context) override;
  46. content::BrowserContext* GetOffTheRecordContext(
  47. content::BrowserContext* context) override;
  48. content::BrowserContext* GetOriginalContext(
  49. content::BrowserContext* context) override;
  50. content::BrowserContext* GetContextRedirectedToOriginal(
  51. content::BrowserContext* context,
  52. bool force_guest_profile) override;
  53. content::BrowserContext* GetContextOwnInstance(
  54. content::BrowserContext* context,
  55. bool force_guest_profile) override;
  56. content::BrowserContext* GetContextForOriginalOnly(
  57. content::BrowserContext* context,
  58. bool force_guest_profile) override;
  59. bool AreExtensionsDisabledForContext(
  60. content::BrowserContext* context) override;
  61. bool IsGuestSession(content::BrowserContext* context) const override;
  62. bool IsExtensionIncognitoEnabled(
  63. const std::string& extension_id,
  64. content::BrowserContext* context) const override;
  65. bool CanExtensionCrossIncognito(
  66. const extensions::Extension* extension,
  67. content::BrowserContext* context) const override;
  68. base::FilePath GetBundleResourcePath(
  69. const network::ResourceRequest& request,
  70. const base::FilePath& extension_resources_path,
  71. int* resource_id) const override;
  72. void LoadResourceFromResourceBundle(
  73. const network::ResourceRequest& request,
  74. mojo::PendingReceiver<network::mojom::URLLoader> loader,
  75. const base::FilePath& resource_relative_path,
  76. int resource_id,
  77. scoped_refptr<net::HttpResponseHeaders> headers,
  78. mojo::PendingRemote<network::mojom::URLLoaderClient> client) override;
  79. bool AllowCrossRendererResourceLoad(
  80. const network::ResourceRequest& request,
  81. network::mojom::RequestDestination destination,
  82. ui::PageTransition page_transition,
  83. int child_id,
  84. bool is_incognito,
  85. const extensions::Extension* extension,
  86. const extensions::ExtensionSet& extensions,
  87. const extensions::ProcessMap& process_map) override;
  88. PrefService* GetPrefServiceForContext(
  89. content::BrowserContext* context) override;
  90. void GetEarlyExtensionPrefsObservers(
  91. content::BrowserContext* context,
  92. std::vector<extensions::EarlyExtensionPrefsObserver*>* observers)
  93. const override;
  94. extensions::ProcessManagerDelegate* GetProcessManagerDelegate()
  95. const override;
  96. mojo::PendingRemote<network::mojom::URLLoaderFactory>
  97. GetControlledFrameEmbedderURLLoader(
  98. const url::Origin& app_origin,
  99. int frame_tree_node_id,
  100. content::BrowserContext* browser_context) override;
  101. std::unique_ptr<extensions::ExtensionHostDelegate>
  102. CreateExtensionHostDelegate() override;
  103. bool DidVersionUpdate(content::BrowserContext* context) override;
  104. void PermitExternalProtocolHandler() override;
  105. bool IsInDemoMode() override;
  106. bool IsScreensaverInDemoMode(const std::string& app_id) override;
  107. bool IsRunningInForcedAppMode() override;
  108. bool IsAppModeForcedForApp(
  109. const extensions::ExtensionId& extension_id) override;
  110. bool IsLoggedInAsPublicAccount() override;
  111. extensions::ExtensionSystemProvider* GetExtensionSystemFactory() override;
  112. std::unique_ptr<extensions::RuntimeAPIDelegate> CreateRuntimeAPIDelegate(
  113. content::BrowserContext* context) const override;
  114. const extensions::ComponentExtensionResourceManager*
  115. GetComponentExtensionResourceManager() override;
  116. void BroadcastEventToRenderers(
  117. extensions::events::HistogramValue histogram_value,
  118. const std::string& event_name,
  119. base::Value::List args,
  120. bool dispatch_to_off_the_record_profiles) override;
  121. extensions::ExtensionCache* GetExtensionCache() override;
  122. bool IsBackgroundUpdateAllowed() override;
  123. bool IsMinBrowserVersionSupported(const std::string& min_version) override;
  124. extensions::ExtensionWebContentsObserver* GetExtensionWebContentsObserver(
  125. content::WebContents* web_contents) override;
  126. extensions::KioskDelegate* GetKioskDelegate() override;
  127. bool IsLockScreenContext(content::BrowserContext* context) override;
  128. std::string GetApplicationLocale() override;
  129. std::string GetUserAgent() const override;
  130. void RegisterBrowserInterfaceBindersForFrame(
  131. mojo::BinderMapWithContext<content::RenderFrameHost*>* map,
  132. content::RenderFrameHost* render_frame_host,
  133. const extensions::Extension* extension) const override;
  134. // Sets the API client.
  135. void SetAPIClientForTest(extensions::ExtensionsAPIClient* api_client);
  136. private:
  137. // Support for extension APIs.
  138. std::unique_ptr<extensions::ExtensionsAPIClient> api_client_;
  139. // Support for ProcessManager.
  140. std::unique_ptr<extensions::ElectronProcessManagerDelegate>
  141. process_manager_delegate_;
  142. // The extension cache used for download and installation.
  143. std::unique_ptr<extensions::ExtensionCache> extension_cache_;
  144. std::unique_ptr<extensions::KioskDelegate> kiosk_delegate_;
  145. std::unique_ptr<extensions::ElectronComponentExtensionResourceManager>
  146. resource_manager_;
  147. };
  148. } // namespace electron
  149. #endif // ELECTRON_SHELL_BROWSER_EXTENSIONS_ELECTRON_EXTENSIONS_BROWSER_CLIENT_H_