web_engine_browser_context.cc 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. // Copyright 2018 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. #include "fuchsia_web/webengine/browser/web_engine_browser_context.h"
  5. #include <lib/fdio/namespace.h>
  6. #include <memory>
  7. #include <utility>
  8. #include "base/command_line.h"
  9. #include "base/files/file_path.h"
  10. #include "base/files/file_util.h"
  11. #include "base/fuchsia/fuchsia_logging.h"
  12. #include "base/path_service.h"
  13. #include "base/threading/thread_restrictions.h"
  14. #include "components/client_hints/browser/in_memory_client_hints_controller_delegate.h"
  15. #include "components/embedder_support/user_agent_utils.h"
  16. #include "components/keyed_service/content/browser_context_dependency_manager.h"
  17. #include "components/keyed_service/core/simple_key_map.h"
  18. #include "components/profile_metrics/browser_profile_type.h"
  19. #include "components/site_isolation/site_isolation_policy.h"
  20. #include "content/public/browser/browser_task_traits.h"
  21. #include "content/public/browser/browser_thread.h"
  22. #include "content/public/browser/client_hints_controller_delegate.h"
  23. #include "content/public/browser/resource_context.h"
  24. #include "fuchsia_web/webengine/browser/web_engine_net_log_observer.h"
  25. #include "fuchsia_web/webengine/switches.h"
  26. #include "media/capabilities/in_memory_video_decode_stats_db_impl.h"
  27. #include "media/mojo/services/video_decode_perf_history.h"
  28. #include "services/network/public/cpp/network_switches.h"
  29. namespace {
  30. std::unique_ptr<WebEngineNetLogObserver> CreateNetLogObserver() {
  31. std::unique_ptr<WebEngineNetLogObserver> result;
  32. const base::CommandLine* command_line =
  33. base::CommandLine::ForCurrentProcess();
  34. if (command_line->HasSwitch(network::switches::kLogNetLog)) {
  35. base::FilePath log_path =
  36. command_line->GetSwitchValuePath(network::switches::kLogNetLog);
  37. result = std::make_unique<WebEngineNetLogObserver>(log_path);
  38. }
  39. return result;
  40. }
  41. } // namespace
  42. class WebEngineBrowserContext::ResourceContext
  43. : public content::ResourceContext {
  44. public:
  45. ResourceContext() = default;
  46. ResourceContext(const ResourceContext&) = delete;
  47. ResourceContext& operator=(const ResourceContext&) = delete;
  48. ~ResourceContext() override = default;
  49. };
  50. // static
  51. std::unique_ptr<WebEngineBrowserContext>
  52. WebEngineBrowserContext::CreatePersistent(
  53. base::FilePath data_directory,
  54. network::NetworkQualityTracker* network_quality_tracker) {
  55. return base::WrapUnique(new WebEngineBrowserContext(std::move(data_directory),
  56. network_quality_tracker));
  57. }
  58. // static
  59. std::unique_ptr<WebEngineBrowserContext>
  60. WebEngineBrowserContext::CreateIncognito(
  61. network::NetworkQualityTracker* network_quality_tracker) {
  62. return base::WrapUnique(
  63. new WebEngineBrowserContext({}, network_quality_tracker));
  64. }
  65. WebEngineBrowserContext::~WebEngineBrowserContext() {
  66. SimpleKeyMap::GetInstance()->Dissociate(this);
  67. NotifyWillBeDestroyed();
  68. if (resource_context_) {
  69. content::GetIOThreadTaskRunner({})->DeleteSoon(
  70. FROM_HERE, std::move(resource_context_));
  71. }
  72. BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices(
  73. this);
  74. ShutdownStoragePartitions();
  75. }
  76. std::unique_ptr<content::ZoomLevelDelegate>
  77. WebEngineBrowserContext::CreateZoomLevelDelegate(
  78. const base::FilePath& partition_path) {
  79. return nullptr;
  80. }
  81. base::FilePath WebEngineBrowserContext::GetPath() {
  82. return data_dir_path_;
  83. }
  84. bool WebEngineBrowserContext::IsOffTheRecord() {
  85. return data_dir_path_.empty();
  86. }
  87. content::ResourceContext* WebEngineBrowserContext::GetResourceContext() {
  88. return resource_context_.get();
  89. }
  90. content::DownloadManagerDelegate*
  91. WebEngineBrowserContext::GetDownloadManagerDelegate() {
  92. NOTIMPLEMENTED();
  93. return nullptr;
  94. }
  95. content::BrowserPluginGuestManager* WebEngineBrowserContext::GetGuestManager() {
  96. return nullptr;
  97. }
  98. storage::SpecialStoragePolicy*
  99. WebEngineBrowserContext::GetSpecialStoragePolicy() {
  100. return nullptr;
  101. }
  102. content::PlatformNotificationService*
  103. WebEngineBrowserContext::GetPlatformNotificationService() {
  104. return nullptr;
  105. }
  106. content::PushMessagingService*
  107. WebEngineBrowserContext::GetPushMessagingService() {
  108. return nullptr;
  109. }
  110. content::StorageNotificationService*
  111. WebEngineBrowserContext::GetStorageNotificationService() {
  112. return nullptr;
  113. }
  114. content::SSLHostStateDelegate*
  115. WebEngineBrowserContext::GetSSLHostStateDelegate() {
  116. return nullptr;
  117. }
  118. content::PermissionControllerDelegate*
  119. WebEngineBrowserContext::GetPermissionControllerDelegate() {
  120. return &permission_delegate_;
  121. }
  122. content::ClientHintsControllerDelegate*
  123. WebEngineBrowserContext::GetClientHintsControllerDelegate() {
  124. return &client_hints_delegate_;
  125. }
  126. content::BackgroundFetchDelegate*
  127. WebEngineBrowserContext::GetBackgroundFetchDelegate() {
  128. return nullptr;
  129. }
  130. content::BackgroundSyncController*
  131. WebEngineBrowserContext::GetBackgroundSyncController() {
  132. return nullptr;
  133. }
  134. content::BrowsingDataRemoverDelegate*
  135. WebEngineBrowserContext::GetBrowsingDataRemoverDelegate() {
  136. return nullptr;
  137. }
  138. content::ReduceAcceptLanguageControllerDelegate*
  139. WebEngineBrowserContext::GetReduceAcceptLanguageControllerDelegate() {
  140. // There is no delegate since WebEngine doesn't support persistence.
  141. return nullptr;
  142. }
  143. std::unique_ptr<media::VideoDecodePerfHistory>
  144. WebEngineBrowserContext::CreateVideoDecodePerfHistory() {
  145. if (!IsOffTheRecord()) {
  146. // Delegate to the base class for stateful VideoDecodePerfHistory DB
  147. // creation.
  148. return BrowserContext::CreateVideoDecodePerfHistory();
  149. }
  150. // Return in-memory VideoDecodePerfHistory.
  151. return std::make_unique<media::VideoDecodePerfHistory>(
  152. std::make_unique<media::InMemoryVideoDecodeStatsDBImpl>(
  153. nullptr /* seed_db_provider */),
  154. media::learning::FeatureProviderFactoryCB());
  155. }
  156. base::RepeatingCallback<bool(const GURL&)> IsJavaScriptAllowedCallback() {
  157. // WebEngine does not provide a way to disable JavaScript.
  158. return base::BindRepeating([](const GURL&) { return true; });
  159. }
  160. base::RepeatingCallback<bool(const GURL&)>
  161. AreThirdPartyCookiesBlockedCallback() {
  162. // WebEngine does not provide a way to block third-party cookies.
  163. return base::BindRepeating([](const GURL&) { return false; });
  164. }
  165. WebEngineBrowserContext::WebEngineBrowserContext(
  166. base::FilePath data_directory,
  167. network::NetworkQualityTracker* network_quality_tracker)
  168. : data_dir_path_(std::move(data_directory)),
  169. net_log_observer_(CreateNetLogObserver()),
  170. simple_factory_key_(GetPath(), IsOffTheRecord()),
  171. resource_context_(std::make_unique<ResourceContext>()),
  172. client_hints_delegate_(network_quality_tracker,
  173. IsJavaScriptAllowedCallback(),
  174. AreThirdPartyCookiesBlockedCallback(),
  175. embedder_support::GetUserAgentMetadata()) {
  176. SimpleKeyMap::GetInstance()->Associate(this, &simple_factory_key_);
  177. profile_metrics::SetBrowserProfileType(
  178. this, IsOffTheRecord() ? profile_metrics::BrowserProfileType::kIncognito
  179. : profile_metrics::BrowserProfileType::kRegular);
  180. BrowserContextDependencyManager::GetInstance()->MarkBrowserContextLive(this);
  181. // TODO(crbug.com/1181156): Should apply any persisted isolated origins here.
  182. // However, since WebEngine does not persist any, that would currently be a
  183. // no-op.
  184. }