aw_content_browser_client.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. // Copyright (c) 2012 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 ANDROID_WEBVIEW_BROWSER_AW_CONTENT_BROWSER_CLIENT_H_
  5. #define ANDROID_WEBVIEW_BROWSER_AW_CONTENT_BROWSER_CLIENT_H_
  6. #include <stddef.h>
  7. #include <memory>
  8. #include <string>
  9. #include <vector>
  10. #include "base/memory/raw_ptr.h"
  11. #include "base/memory/ref_counted.h"
  12. #include "content/public/browser/content_browser_client.h"
  13. #include "content/public/browser/web_contents.h"
  14. #include "mojo/public/cpp/bindings/pending_receiver.h"
  15. #include "mojo/public/cpp/bindings/pending_remote.h"
  16. #include "mojo/public/cpp/bindings/remote.h"
  17. #include "services/metrics/public/cpp/ukm_source_id.h"
  18. #include "storage/browser/quota/quota_settings.h"
  19. namespace content {
  20. class RenderFrameHost;
  21. } // namespace content
  22. namespace safe_browsing {
  23. class UrlCheckerDelegate;
  24. } // namespace safe_browsing
  25. namespace net {
  26. class IsolationInfo;
  27. } // namespace net
  28. namespace android_webview {
  29. class AwBrowserContext;
  30. class AwFeatureListCreator;
  31. std::string GetProduct();
  32. std::string GetUserAgent();
  33. class AwContentBrowserClient : public content::ContentBrowserClient {
  34. public:
  35. // This is what AwContentBrowserClient::GetAcceptLangs uses.
  36. static std::string GetAcceptLangsImpl();
  37. // Sets whether the net stack should check the cleartext policy from the
  38. // platform. For details, see
  39. // https://developer.android.com/reference/android/security/NetworkSecurityPolicy.html#isCleartextTrafficPermitted().
  40. static void set_check_cleartext_permitted(bool permitted);
  41. static bool get_check_cleartext_permitted();
  42. // |aw_feature_list_creator| should not be null.
  43. explicit AwContentBrowserClient(
  44. AwFeatureListCreator* aw_feature_list_creator);
  45. AwContentBrowserClient(const AwContentBrowserClient&) = delete;
  46. AwContentBrowserClient& operator=(const AwContentBrowserClient&) = delete;
  47. ~AwContentBrowserClient() override;
  48. // Allows AwBrowserMainParts to initialize a BrowserContext at the right
  49. // moment during startup. AwContentBrowserClient owns the result.
  50. AwBrowserContext* InitBrowserContext();
  51. // content::ContentBrowserClient:
  52. void OnNetworkServiceCreated(
  53. network::mojom::NetworkService* network_service) override;
  54. void ConfigureNetworkContextParams(
  55. content::BrowserContext* context,
  56. bool in_memory,
  57. const base::FilePath& relative_partition_path,
  58. network::mojom::NetworkContextParams* network_context_params,
  59. cert_verifier::mojom::CertVerifierCreationParams*
  60. cert_verifier_creation_params) override;
  61. std::unique_ptr<content::BrowserMainParts> CreateBrowserMainParts(
  62. bool is_integration_test) override;
  63. std::unique_ptr<content::WebContentsViewDelegate> GetWebContentsViewDelegate(
  64. content::WebContents* web_contents) override;
  65. void RenderProcessWillLaunch(content::RenderProcessHost* host) override;
  66. bool IsExplicitNavigation(ui::PageTransition transition) override;
  67. bool IsHandledURL(const GURL& url) override;
  68. bool ForceSniffingFileUrlsForHtml() override;
  69. void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
  70. int child_process_id) override;
  71. std::string GetApplicationLocale() override;
  72. std::string GetAcceptLangs(content::BrowserContext* context) override;
  73. gfx::ImageSkia GetDefaultFavicon() override;
  74. scoped_refptr<content::QuotaPermissionContext> CreateQuotaPermissionContext()
  75. override;
  76. content::GeneratedCodeCacheSettings GetGeneratedCodeCacheSettings(
  77. content::BrowserContext* context) override;
  78. void AllowCertificateError(
  79. content::WebContents* web_contents,
  80. int cert_error,
  81. const net::SSLInfo& ssl_info,
  82. const GURL& request_url,
  83. bool is_primary_main_frame_request,
  84. bool strict_enforcement,
  85. base::OnceCallback<void(content::CertificateRequestResultType)> callback)
  86. override;
  87. base::OnceClosure SelectClientCertificate(
  88. content::WebContents* web_contents,
  89. net::SSLCertRequestInfo* cert_request_info,
  90. net::ClientCertIdentityList client_certs,
  91. std::unique_ptr<content::ClientCertificateDelegate> delegate) override;
  92. bool CanCreateWindow(content::RenderFrameHost* opener,
  93. const GURL& opener_url,
  94. const GURL& opener_top_level_frame_url,
  95. const url::Origin& source_origin,
  96. content::mojom::WindowContainerType container_type,
  97. const GURL& target_url,
  98. const content::Referrer& referrer,
  99. const std::string& frame_name,
  100. WindowOpenDisposition disposition,
  101. const blink::mojom::WindowFeatures& features,
  102. bool user_gesture,
  103. bool opener_suppressed,
  104. bool* no_javascript_access) override;
  105. base::FilePath GetDefaultDownloadDirectory() override;
  106. std::string GetDefaultDownloadName() override;
  107. void DidCreatePpapiPlugin(content::BrowserPpapiHost* browser_host) override;
  108. bool AllowPepperSocketAPI(
  109. content::BrowserContext* browser_context,
  110. const GURL& url,
  111. bool private_api,
  112. const content::SocketPermissionRequest* params) override;
  113. bool IsPepperVpnProviderAPIAllowed(content::BrowserContext* browser_context,
  114. const GURL& url) override;
  115. content::TracingDelegate* GetTracingDelegate() override;
  116. void GetAdditionalMappedFilesForChildProcess(
  117. const base::CommandLine& command_line,
  118. int child_process_id,
  119. content::PosixFileDescriptorInfo* mappings) override;
  120. void OverrideWebkitPrefs(content::WebContents* web_contents,
  121. blink::web_pref::WebPreferences* web_prefs) override;
  122. std::vector<std::unique_ptr<content::NavigationThrottle>>
  123. CreateThrottlesForNavigation(
  124. content::NavigationHandle* navigation_handle) override;
  125. std::unique_ptr<content::DevToolsManagerDelegate>
  126. CreateDevToolsManagerDelegate() override;
  127. void RegisterAssociatedInterfaceBindersForRenderFrameHost(
  128. content::RenderFrameHost& render_frame_host,
  129. blink::AssociatedInterfaceRegistry& associated_registry) override;
  130. void ExposeInterfacesToRenderer(
  131. service_manager::BinderRegistry* registry,
  132. blink::AssociatedInterfaceRegistry* associated_registry,
  133. content::RenderProcessHost* render_process_host) override;
  134. void BindMediaServiceReceiver(content::RenderFrameHost* render_frame_host,
  135. mojo::GenericPendingReceiver receiver) override;
  136. std::vector<std::unique_ptr<blink::URLLoaderThrottle>>
  137. CreateURLLoaderThrottles(
  138. const network::ResourceRequest& request,
  139. content::BrowserContext* browser_context,
  140. const base::RepeatingCallback<content::WebContents*()>& wc_getter,
  141. content::NavigationUIData* navigation_ui_data,
  142. int frame_tree_node_id) override;
  143. bool ShouldOverrideUrlLoading(int frame_tree_node_id,
  144. bool browser_initiated,
  145. const GURL& gurl,
  146. const std::string& request_method,
  147. bool has_user_gesture,
  148. bool is_redirect,
  149. bool is_outermost_main_frame,
  150. ui::PageTransition transition,
  151. bool* ignore_navigation) override;
  152. bool
  153. ShouldIgnoreInitialNavigationEntryNavigationStateChangedForLegacySupport()
  154. override;
  155. bool SupportsAvoidUnnecessaryBeforeUnloadCheckSync() override;
  156. bool CreateThreadPool(base::StringPiece name) override;
  157. std::unique_ptr<content::LoginDelegate> CreateLoginDelegate(
  158. const net::AuthChallengeInfo& auth_info,
  159. content::WebContents* web_contents,
  160. const content::GlobalRequestID& request_id,
  161. bool is_request_for_primary_main_frame,
  162. const GURL& url,
  163. scoped_refptr<net::HttpResponseHeaders> response_headers,
  164. bool first_auth_attempt,
  165. LoginAuthRequiredCallback auth_required_callback) override;
  166. bool HandleExternalProtocol(
  167. const GURL& url,
  168. content::WebContents::Getter web_contents_getter,
  169. int frame_tree_node_id,
  170. content::NavigationUIData* navigation_data,
  171. bool is_primary_main_frame,
  172. bool is_in_fenced_frame_tree,
  173. network::mojom::WebSandboxFlags sandbox_flags,
  174. ui::PageTransition page_transition,
  175. bool has_user_gesture,
  176. const absl::optional<url::Origin>& initiating_origin,
  177. content::RenderFrameHost* initiator_document,
  178. mojo::PendingRemote<network::mojom::URLLoaderFactory>* out_factory)
  179. override;
  180. void RegisterNonNetworkSubresourceURLLoaderFactories(
  181. int render_process_id,
  182. int render_frame_id,
  183. const absl::optional<url::Origin>& request_initiator_origin,
  184. NonNetworkURLLoaderFactoryMap* factories) override;
  185. bool ShouldAllowNoLongerUsedProcessToExit() override;
  186. bool ShouldIsolateErrorPage(bool in_main_frame) override;
  187. bool ShouldEnableStrictSiteIsolation() override;
  188. bool ShouldDisableSiteIsolation(
  189. content::SiteIsolationMode site_isolation_mode) override;
  190. bool ShouldLockProcessToSite(content::BrowserContext* browser_context,
  191. const GURL& effective_url) override;
  192. size_t GetMaxRendererProcessCountOverride() override;
  193. bool WillCreateURLLoaderFactory(
  194. content::BrowserContext* browser_context,
  195. content::RenderFrameHost* frame,
  196. int render_process_id,
  197. URLLoaderFactoryType type,
  198. const url::Origin& request_initiator,
  199. absl::optional<int64_t> navigation_id,
  200. ukm::SourceIdObj ukm_source_id,
  201. mojo::PendingReceiver<network::mojom::URLLoaderFactory>* factory_receiver,
  202. mojo::PendingRemote<network::mojom::TrustedURLLoaderHeaderClient>*
  203. header_client,
  204. bool* bypass_redirect_checks,
  205. bool* disable_secure_dns,
  206. network::mojom::URLLoaderFactoryOverridePtr* factory_override) override;
  207. uint32_t GetWebSocketOptions(content::RenderFrameHost* frame) override;
  208. bool WillCreateRestrictedCookieManager(
  209. network::mojom::RestrictedCookieManagerRole role,
  210. content::BrowserContext* browser_context,
  211. const url::Origin& origin,
  212. const net::IsolationInfo& isolation_info,
  213. bool is_service_worker,
  214. int process_id,
  215. int routing_id,
  216. mojo::PendingReceiver<network::mojom::RestrictedCookieManager>* receiver)
  217. override;
  218. std::string GetProduct() override;
  219. std::string GetUserAgent() override;
  220. ContentBrowserClient::WideColorGamutHeuristic GetWideColorGamutHeuristic()
  221. override;
  222. void LogWebFeatureForCurrentPage(content::RenderFrameHost* render_frame_host,
  223. blink::mojom::WebFeature feature) override;
  224. bool ShouldAllowInsecurePrivateNetworkRequests(
  225. content::BrowserContext* browser_context,
  226. const url::Origin& origin) override;
  227. content::SpeechRecognitionManagerDelegate*
  228. CreateSpeechRecognitionManagerDelegate() override;
  229. bool HasErrorPage(int http_status_code) override;
  230. bool SuppressDifferentOriginSubframeJSDialogs(
  231. content::BrowserContext* browser_context) override;
  232. AwFeatureListCreator* aw_feature_list_creator() {
  233. return aw_feature_list_creator_;
  234. }
  235. static void DisableCreatingThreadPool();
  236. private:
  237. scoped_refptr<safe_browsing::UrlCheckerDelegate>
  238. GetSafeBrowsingUrlCheckerDelegate();
  239. // Android WebView currently has a single global (non-off-the-record) browser
  240. // context.
  241. std::unique_ptr<AwBrowserContext> browser_context_;
  242. scoped_refptr<safe_browsing::UrlCheckerDelegate>
  243. safe_browsing_url_checker_delegate_;
  244. const bool sniff_file_urls_;
  245. // The AwFeatureListCreator is owned by AwMainDelegate.
  246. const raw_ptr<AwFeatureListCreator> aw_feature_list_creator_;
  247. };
  248. } // namespace android_webview
  249. #endif // ANDROID_WEBVIEW_BROWSER_AW_CONTENT_BROWSER_CLIENT_H_