aw_content_client.cc 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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. #include "android_webview/common/aw_content_client.h"
  5. #include "android_webview/common/aw_features.h"
  6. #include "android_webview/common/aw_media_drm_bridge_client.h"
  7. #include "android_webview/common/aw_resource.h"
  8. #include "android_webview/common/crash_reporter/crash_keys.h"
  9. #include "android_webview/common/url_constants.h"
  10. #include "base/bind.h"
  11. #include "base/command_line.h"
  12. #include "base/debug/crash_logging.h"
  13. #include "base/no_destructor.h"
  14. #include "components/embedder_support/origin_trials/origin_trial_policy_impl.h"
  15. #include "components/services/heap_profiling/public/cpp/profiling_client.h"
  16. #include "components/version_info/version_info.h"
  17. #include "content/public/common/content_switches.h"
  18. #include "gpu/config/gpu_info.h"
  19. #include "gpu/config/gpu_util.h"
  20. #include "mojo/public/cpp/bindings/binder_map.h"
  21. #include "mojo/public/cpp/bindings/pending_receiver.h"
  22. #include "ui/base/l10n/l10n_util.h"
  23. #include "ui/base/resource/resource_bundle.h"
  24. namespace android_webview {
  25. AwContentClient::AwContentClient() = default;
  26. AwContentClient::~AwContentClient() = default;
  27. void AwContentClient::AddAdditionalSchemes(Schemes* schemes) {
  28. schemes->local_schemes.push_back(url::kContentScheme);
  29. schemes->secure_schemes.push_back(
  30. android_webview::kAndroidWebViewVideoPosterScheme);
  31. schemes->csp_bypassing_schemes.push_back(
  32. android_webview::kAndroidWebViewVideoPosterScheme);
  33. schemes->allow_non_standard_schemes_in_origins = true;
  34. }
  35. std::u16string AwContentClient::GetLocalizedString(int message_id) {
  36. // TODO(boliu): Used only by WebKit, so only bundle those resources for
  37. // Android WebView.
  38. return l10n_util::GetStringUTF16(message_id);
  39. }
  40. base::StringPiece AwContentClient::GetDataResource(
  41. int resource_id,
  42. ui::ResourceScaleFactor scale_factor) {
  43. // TODO(boliu): Used only by WebKit, so only bundle those resources for
  44. // Android WebView.
  45. return ui::ResourceBundle::GetSharedInstance().GetRawDataResourceForScale(
  46. resource_id, scale_factor);
  47. }
  48. base::RefCountedMemory* AwContentClient::GetDataResourceBytes(int resource_id) {
  49. return ui::ResourceBundle::GetSharedInstance().LoadDataResourceBytes(
  50. resource_id);
  51. }
  52. std::string AwContentClient::GetDataResourceString(int resource_id) {
  53. return ui::ResourceBundle::GetSharedInstance().LoadDataResourceString(
  54. resource_id);
  55. }
  56. void AwContentClient::SetGpuInfo(const gpu::GPUInfo& gpu_info) {
  57. gpu::SetKeysForCrashLogging(gpu_info);
  58. }
  59. bool AwContentClient::UsingSynchronousCompositing() {
  60. return true;
  61. }
  62. media::MediaDrmBridgeClient* AwContentClient::GetMediaDrmBridgeClient() {
  63. return new AwMediaDrmBridgeClient(
  64. AwResource::GetConfigKeySystemUuidMapping());
  65. }
  66. void AwContentClient::ExposeInterfacesToBrowser(
  67. scoped_refptr<base::SequencedTaskRunner> io_task_runner,
  68. mojo::BinderMap* binders) {
  69. // This creates a process-wide heap_profiling::ProfilingClient that listens
  70. // for requests from the HeapProfilingService to start profiling the current
  71. // process.
  72. binders->Add<heap_profiling::mojom::ProfilingClient>(
  73. base::BindRepeating(
  74. [](mojo::PendingReceiver<heap_profiling::mojom::ProfilingClient>
  75. receiver) {
  76. static base::NoDestructor<heap_profiling::ProfilingClient>
  77. profiling_client;
  78. profiling_client->BindToInterface(std::move(receiver));
  79. }),
  80. io_task_runner);
  81. }
  82. blink::OriginTrialPolicy* AwContentClient::GetOriginTrialPolicy() {
  83. if (!base::FeatureList::IsEnabled(features::kWebViewOriginTrials)) {
  84. return nullptr;
  85. }
  86. // Prevent initialization race (see crbug.com/721144). There may be a
  87. // race when the policy is needed for worker startup (which happens on a
  88. // separate worker thread).
  89. base::AutoLock auto_lock(origin_trial_policy_lock_);
  90. if (!origin_trial_policy_)
  91. origin_trial_policy_ =
  92. std::make_unique<embedder_support::OriginTrialPolicyImpl>();
  93. return origin_trial_policy_.get();
  94. }
  95. } // namespace android_webview