Convert Android WebView manifest overlays to C++
Removes JSON manifest overlays from android_webview/browser and
replaces them with C++ Manifest object definitions.
TBR: estade@chromium.org
Bug: 895616
Change-Id: I7fb46141f9c43349cf4b98011014eaea7b717eab
Reviewed-on: https://chromium-review.googlesource.com/c/1404750
Commit-Queue: Ken Rockot <rockot@google.com>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Bo <boliu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#623766}
diff --git a/android_webview/BUILD.gn b/android_webview/BUILD.gn
index 8bbf041..efd1397 100644
--- a/android_webview/BUILD.gn
+++ b/android_webview/BUILD.gn
@@ -477,6 +477,12 @@
"browser/aw_browser_terminator.h",
"browser/aw_content_browser_client.cc",
"browser/aw_content_browser_client.h",
+ "browser/aw_content_browser_overlay_manifest.cc",
+ "browser/aw_content_browser_overlay_manifest.h",
+ "browser/aw_content_renderer_overlay_manifest.cc",
+ "browser/aw_content_renderer_overlay_manifest.h",
+ "browser/aw_content_utility_overlay_manifest.cc",
+ "browser/aw_content_utility_overlay_manifest.h",
"browser/aw_contents.cc",
"browser/aw_contents.h",
"browser/aw_contents_client_bridge.cc",
@@ -735,6 +741,7 @@
"//base/third_party/dynamic_annotations:dynamic_annotations",
"//components/autofill/android:provider",
"//components/autofill/content/browser",
+ "//components/autofill/content/common:mojo_interfaces",
"//components/autofill/content/renderer",
"//components/cdm/browser",
"//components/cdm/renderer",
@@ -774,6 +781,7 @@
"//components/services/heap_profiling/public/cpp",
"//components/services/heap_profiling/public/mojom",
"//components/spellcheck:buildflags",
+ "//components/spellcheck/common:interfaces",
"//components/supervised_user_error_page",
"//components/supervised_user_error_page:gin",
"//components/url_matcher",
@@ -784,6 +792,7 @@
"//components/visitedlink/renderer",
"//components/viz/service",
"//components/web_restrictions:browser",
+ "//components/web_restrictions:interfaces",
"//content",
"//content/public/app:both",
"//content/public/browser",
@@ -811,6 +820,7 @@
"//storage/browser",
"//storage/common",
"//third_party/blink/public:blink",
+ "//third_party/blink/public/common",
"//third_party/crashpad/crashpad/client",
"//ui/base",
"//ui/events:gesture_detection",
diff --git a/android_webview/browser/DEPS b/android_webview/browser/DEPS
index 7310d64..b5e30d9 100644
--- a/android_webview/browser/DEPS
+++ b/android_webview/browser/DEPS
@@ -8,6 +8,7 @@
"+cc",
"+components/autofill/android",
"+components/autofill/content/browser",
+ "+components/autofill/content/common",
"+components/autofill/core/browser",
"+components/autofill/core/common",
"+components/cdm/browser",
@@ -83,5 +84,7 @@
# For find-in-page
"+third_party/blink/public/mojom/frame",
# Required for the Web Speech API.
- "+third_party/blink/public/mojom/speech"
+ "+third_party/blink/public/mojom/speech",
+ # For the content_browser overlay manifest
+ "+third_party/blink/public/platform",
]
diff --git a/android_webview/browser/OWNERS b/android_webview/browser/OWNERS
index 14ba18b..0aa62a2 100644
--- a/android_webview/browser/OWNERS
+++ b/android_webview/browser/OWNERS
@@ -1,10 +1,14 @@
-per-file aw_browser_manifest_overlay.json=set noparent
-per-file aw_browser_manifest_overlay.json=file://ipc/SECURITY_OWNERS
-
-per-file aw_renderer_manifest_overlay.json=set noparent
-per-file aw_renderer_manifest_overlay.json=file://ipc/SECURITY_OWNERS
-
-per-file aw_utility_manifest_overlay.json=set noparent
-per-file aw_utility_manifest_overlay.json=file://ipc/SECURITY_OWNERS
-
per-file aw_safe_browsing*=ntfschr@chromium.org
+
+per-file aw_content_utility_overlay_manifest.cc=set noparent
+per-file aw_content_utility_overlay_manifest.cc=file://ipc/SECURITY_OWNERS
+per-file aw_content_renderer_overlay_manifest.cc=set noparent
+per-file aw_content_renderer_overlay_manifest.cc=file://ipc/SECURITY_OWNERS
+per-file aw_content_browser_overlay_manifest.h=set noparent
+per-file aw_content_browser_overlay_manifest.h=file://ipc/SECURITY_OWNERS
+per-file aw_content_renderer_overlay_manifest.h=set noparent
+per-file aw_content_renderer_overlay_manifest.h=file://ipc/SECURITY_OWNERS
+per-file aw_content_browser_overlay_manifest.cc=set noparent
+per-file aw_content_browser_overlay_manifest.cc=file://ipc/SECURITY_OWNERS
+per-file aw_content_utility_overlay_manifest.h=set noparent
+per-file aw_content_utility_overlay_manifest.h=file://ipc/SECURITY_OWNERS
diff --git a/android_webview/browser/aw_browser_manifest_overlay.json b/android_webview/browser/aw_browser_manifest_overlay.json
deleted file mode 100644
index ae928e1..0000000
--- a/android_webview/browser/aw_browser_manifest_overlay.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "name": "content_browser",
- "interface_provider_specs": {
- "service_manager:connector": {
- "provides": {
- "renderer": [
- "safe_browsing.mojom.SafeBrowsing",
- "spellcheck.mojom.SpellCheckHost"
- ],
- "profiling_client": [
- "heap_profiling.mojom.ProfilingClient"
- ]
- },
- "requires": {
- "content_browser": [ "profiling_client" ],
- "heap_profiling": [ "profiling", "heap_profiler" ]
- }
- },
- "navigation:frame": {
- "provides": {
- "renderer": [
- "autofill.mojom.AutofillDriver",
- "autofill.mojom.PasswordManagerDriver",
- "blink.mojom.TextSuggestionHost",
- "web_restrictions.mojom.WebRestrictions"
- ]
- }
- }
- }
-}
diff --git a/android_webview/browser/aw_content_browser_client.cc b/android_webview/browser/aw_content_browser_client.cc
index aa532fc..f762a0b 100644
--- a/android_webview/browser/aw_content_browser_client.cc
+++ b/android_webview/browser/aw_content_browser_client.cc
@@ -10,6 +10,9 @@
#include "android_webview/browser/aw_browser_context.h"
#include "android_webview/browser/aw_browser_main_parts.h"
+#include "android_webview/browser/aw_content_browser_overlay_manifest.h"
+#include "android_webview/browser/aw_content_renderer_overlay_manifest.h"
+#include "android_webview/browser/aw_content_utility_overlay_manifest.h"
#include "android_webview/browser/aw_contents.h"
#include "android_webview/browser/aw_contents_client_bridge.h"
#include "android_webview/browser/aw_contents_io_thread_client.h"
@@ -42,7 +45,6 @@
#include "base/command_line.h"
#include "base/feature_list.h"
#include "base/files/scoped_file.h"
-#include "base/json/json_reader.h"
#include "base/memory/ptr_util.h"
#include "base/path_service.h"
#include "base/stl_util.h"
@@ -671,21 +673,13 @@
base::Optional<service_manager::Manifest>
AwContentBrowserClient::GetServiceManifestOverlay(base::StringPiece name) {
- int id = -1;
if (name == content::mojom::kBrowserServiceName)
- id = IDR_AW_BROWSER_MANIFEST_OVERLAY;
+ return GetAWContentBrowserOverlayManifest();
else if (name == content::mojom::kRendererServiceName)
- id = IDR_AW_RENDERER_MANIFEST_OVERLAY;
+ return GetAWContentRendererOverlayManifest();
else if (name == content::mojom::kUtilityServiceName)
- id = IDR_AW_UTILITY_MANIFEST_OVERLAY;
- if (id == -1)
- return base::nullopt;
-
- base::StringPiece manifest_contents =
- ui::ResourceBundle::GetSharedInstance().GetRawDataResourceForScale(
- id, ui::ScaleFactor::SCALE_FACTOR_NONE);
- return service_manager::Manifest::FromValueDeprecated(
- base::JSONReader::Read(manifest_contents));
+ return GetAWContentUtilityOverlayManifest();
+ return base::nullopt;
}
void AwContentBrowserClient::BindInterfaceRequestFromFrame(
diff --git a/android_webview/browser/aw_content_browser_overlay_manifest.cc b/android_webview/browser/aw_content_browser_overlay_manifest.cc
new file mode 100644
index 0000000..50987664
--- /dev/null
+++ b/android_webview/browser/aw_content_browser_overlay_manifest.cc
@@ -0,0 +1,42 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "android_webview/browser/aw_content_browser_overlay_manifest.h"
+
+#include "base/no_destructor.h"
+#include "components/autofill/content/common/autofill_driver.mojom.h"
+#include "components/safe_browsing/common/safe_browsing.mojom.h"
+#include "components/services/heap_profiling/public/mojom/heap_profiling_client.mojom.h"
+#include "components/spellcheck/common/spellcheck.mojom.h"
+#include "components/web_restrictions/interfaces/web_restrictions.mojom.h"
+#include "services/service_manager/public/cpp/manifest_builder.h"
+#include "third_party/blink/public/platform/input_host.mojom.h"
+
+namespace android_webview {
+
+const service_manager::Manifest& GetAWContentBrowserOverlayManifest() {
+ static base::NoDestructor<service_manager::Manifest> manifest{
+ service_manager::ManifestBuilder()
+ .ExposeCapability("renderer",
+ service_manager::Manifest::InterfaceList<
+ safe_browsing::mojom::SafeBrowsing,
+ spellcheck::mojom::SpellCheckHost>())
+ .ExposeCapability("profiling_client",
+ service_manager::Manifest::InterfaceList<
+ heap_profiling::mojom::ProfilingClient>())
+ .RequireCapability("content_browser", "profiling_client")
+ .RequireCapability("heap_profiling", "profiling")
+ .RequireCapability("heap_profiling", "heap_profiler")
+ .ExposeInterfaceFilterCapability_Deprecated(
+ "navigation:frame", "renderer",
+ service_manager::Manifest::InterfaceList<
+ autofill::mojom::AutofillDriver,
+ autofill::mojom::PasswordManagerDriver,
+ blink::mojom::TextSuggestionHost,
+ web_restrictions::mojom::WebRestrictions>())
+ .Build()};
+ return *manifest;
+}
+
+} // namespace android_webview
diff --git a/android_webview/browser/aw_content_browser_overlay_manifest.h b/android_webview/browser/aw_content_browser_overlay_manifest.h
new file mode 100644
index 0000000..5e94fa2
--- /dev/null
+++ b/android_webview/browser/aw_content_browser_overlay_manifest.h
@@ -0,0 +1,20 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ANDROID_WEBVIEW_BROWSER_AW_CONTENT_BROWSER_OVERLAY_MANIFEST_H_
+#define ANDROID_WEBVIEW_BROWSER_AW_CONTENT_BROWSER_OVERLAY_MANIFEST_H_
+
+#include "services/service_manager/public/cpp/manifest.h"
+
+namespace android_webview {
+
+// Returns the manifest Android WebView amends to Content's content_browser
+// service manifest. This allows WebView to extend the capabilities exposed
+// and/or required by content_browser service instances, as well as declaring
+// any additional in- and out-of-process per-profile packaged services.
+const service_manager::Manifest& GetAWContentBrowserOverlayManifest();
+
+} // namespace android_webview
+
+#endif // ANDROID_WEBVIEW_BROWSER_AW_CONTENT_BROWSER_OVERLAY_MANIFEST_H_
diff --git a/android_webview/browser/aw_content_renderer_overlay_manifest.cc b/android_webview/browser/aw_content_renderer_overlay_manifest.cc
new file mode 100644
index 0000000..e80f785
--- /dev/null
+++ b/android_webview/browser/aw_content_renderer_overlay_manifest.cc
@@ -0,0 +1,28 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "android_webview/browser/aw_content_renderer_overlay_manifest.h"
+
+#include "base/no_destructor.h"
+#include "components/autofill/content/common/autofill_agent.mojom.h"
+#include "components/safe_browsing/common/safe_browsing.mojom.h"
+#include "services/service_manager/public/cpp/manifest_builder.h"
+
+namespace android_webview {
+
+const service_manager::Manifest& GetAWContentRendererOverlayManifest() {
+ static base::NoDestructor<service_manager::Manifest> manifest{
+ service_manager::ManifestBuilder()
+ .ExposeInterfaceFilterCapability_Deprecated(
+ "navigation:frame", "browser",
+ service_manager::Manifest::InterfaceList<
+ autofill::mojom::AutofillAgent,
+ autofill::mojom::PasswordAutofillAgent,
+ autofill::mojom::PasswordGenerationAgent,
+ safe_browsing::mojom::ThreatReporter>())
+ .Build()};
+ return *manifest;
+}
+
+} // namespace android_webview
diff --git a/android_webview/browser/aw_content_renderer_overlay_manifest.h b/android_webview/browser/aw_content_renderer_overlay_manifest.h
new file mode 100644
index 0000000..a4202dc
--- /dev/null
+++ b/android_webview/browser/aw_content_renderer_overlay_manifest.h
@@ -0,0 +1,19 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ANDROID_WEBVIEW_BROWSER_AW_CONTENT_RENDERER_OVERLAY_MANIFEST_H_
+#define ANDROID_WEBVIEW_BROWSER_AW_CONTENT_RENDERER_OVERLAY_MANIFEST_H_
+
+#include "services/service_manager/public/cpp/manifest.h"
+
+namespace android_webview {
+
+// Returns the manifest Android WebView amends to Content's content_renderer
+// service manifest. This allows WebView to extend the capabilities exposed
+// and/or required by content_renderer service instances.
+const service_manager::Manifest& GetAWContentRendererOverlayManifest();
+
+} // namespace android_webview
+
+#endif // ANDROID_WEBVIEW_BROWSER_AW_CONTENT_RENDERER_OVERLAY_MANIFEST_H_
diff --git a/android_webview/browser/aw_content_utility_overlay_manifest.cc b/android_webview/browser/aw_content_utility_overlay_manifest.cc
new file mode 100644
index 0000000..ff61e90
--- /dev/null
+++ b/android_webview/browser/aw_content_utility_overlay_manifest.cc
@@ -0,0 +1,19 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "android_webview/browser/aw_content_utility_overlay_manifest.h"
+
+#include "base/no_destructor.h"
+#include "components/services/heap_profiling/public/mojom/heap_profiling_client.mojom.h"
+#include "services/service_manager/public/cpp/manifest_builder.h"
+
+const service_manager::Manifest& GetAWContentUtilityOverlayManifest() {
+ static base::NoDestructor<service_manager::Manifest> manifest{
+ service_manager::ManifestBuilder()
+ .ExposeCapability("browser",
+ service_manager::Manifest::InterfaceList<
+ heap_profiling::mojom::ProfilingClient>())
+ .Build()};
+ return *manifest;
+}
diff --git a/android_webview/browser/aw_content_utility_overlay_manifest.h b/android_webview/browser/aw_content_utility_overlay_manifest.h
new file mode 100644
index 0000000..12a54b0
--- /dev/null
+++ b/android_webview/browser/aw_content_utility_overlay_manifest.h
@@ -0,0 +1,15 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ANDROID_WEBVIEW_BROWSER_AW_CONTENT_UTILITY_OVERLAY_MANIFEST_H_
+#define ANDROID_WEBVIEW_BROWSER_AW_CONTENT_UTILITY_OVERLAY_MANIFEST_H_
+
+#include "services/service_manager/public/cpp/manifest.h"
+
+// Returns the Manifest Android WebView amends to Contents's content_utility
+// service manifest. This allows WebView to extend the capabilities exposed
+// and/or // required by content_utility service instances
+const service_manager::Manifest& GetAWContentUtilityOverlayManifest();
+
+#endif // ANDROID_WEBVIEW_BROWSER_AW_CONTENT_UTILITY_OVERLAY_MANIFEST_H_
diff --git a/android_webview/browser/aw_renderer_manifest_overlay.json b/android_webview/browser/aw_renderer_manifest_overlay.json
deleted file mode 100644
index ef3340e7..0000000
--- a/android_webview/browser/aw_renderer_manifest_overlay.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "name": "content_renderer",
- "interface_provider_specs": {
- "navigation:frame": {
- "provides": {
- "browser": [
- "autofill.mojom.AutofillAgent",
- "autofill.mojom.PasswordAutofillAgent",
- "autofill.mojom.PasswordGenerationAgent",
- // TODO(crbug.com/811567): Remove this once AwSafeBrowsingBlockingPage
- // no longer sends a GetThreatDOMDetails IPC.
- "safe_browsing.mojom.ThreatReporter"
- ]
- }
- }
- }
-}
diff --git a/android_webview/browser/aw_utility_manifest_overlay.json b/android_webview/browser/aw_utility_manifest_overlay.json
deleted file mode 100644
index 24a09c7..0000000
--- a/android_webview/browser/aw_utility_manifest_overlay.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "name": "content_utility",
- "interface_provider_specs": {
- "service_manager:connector": {
- "provides": {
- "browser": [
- "heap_profiling.mojom.ProfilingClient"
- ]
- }
- }
- }
-}
diff --git a/android_webview/ui/aw_resources.grd b/android_webview/ui/aw_resources.grd
index ffe0f2f..35f5e180 100644
--- a/android_webview/ui/aw_resources.grd
+++ b/android_webview/ui/aw_resources.grd
@@ -9,9 +9,6 @@
<release seq="1">
<includes>
<include name="IDR_AW_LOAD_ERROR_HTML" file="resources\load_error.html" flattenhtml="true" type="BINDATA" />
- <include name="IDR_AW_BROWSER_MANIFEST_OVERLAY" file="../browser/aw_browser_manifest_overlay.json" type="BINDATA" />
- <include name="IDR_AW_RENDERER_MANIFEST_OVERLAY" file="../browser/aw_renderer_manifest_overlay.json" type="BINDATA" />
- <include name="IDR_AW_UTILITY_MANIFEST_OVERLAY" file="../browser/aw_utility_manifest_overlay.json" type="BINDATA" />
</includes>
</release>
</grit>