electron_extensions_browser_client.h 7.1 KB

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