0

[ios] Build variants for cpe app extension

Extend the extension_bundle_data target to support "variants" and
configure //ios/chrome/app:chrome to pick the correct variant of
the cpe app extension for the variant of the app.

Bug: 355041765
Change-Id: I030ebbd689ac002e46842fd7d01026a3831f6336
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5901842
Reviewed-by: Alexis Hétu <sugoi@chromium.org>
Commit-Queue: Sylvain Defresne <sdefresne@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1362956}
This commit is contained in:
Sylvain Defresne
2024-10-02 11:10:27 +00:00
committed by Chromium LUCI CQ
parent fa64d0e258
commit 2875c3fdb0
3 changed files with 71 additions and 10 deletions
build/ios
ios/chrome
app
credential_provider_extension

@ -28,8 +28,40 @@ template("extension_bundle_data") {
_extension_dir = invoker.extension_dir
}
forward_variables_from(invoker, [ "testonly" ])
bundle_data(target_name) {
if (defined(invoker.variants) && invoker.variants != []) {
_variants = []
foreach(_variant, invoker.variants) {
_variants += [
{
name = _variant.name
},
]
}
} else {
_variants = []
}
_target_name = target_name
if (_variants != []) {
foreach(_variant, _variants) {
_extension_target =
get_label_info(invoker.extension_target, "label_no_toolchain") +
"_variants_${_variant.name}" + "(" +
get_label_info(invoker.extension_target, "toolchain") + ")"
bundle_data("${_target_name}_variants_${_variant.name}") {
forward_variables_from(invoker, [ "testonly" ])
public_deps = [ _extension_target ]
outputs =
[ "{{bundle_contents_dir}}/$_extension_dir/{{source_file_part}}" ]
sources = [ get_label_info(_extension_target, "root_out_dir") +
"/variants/${_variant.name}/$_extension_name" ]
}
}
}
bundle_data(_target_name) {
forward_variables_from(invoker, [ "testonly" ])
public_deps = [ invoker.extension_target ]
outputs = [ "{{bundle_contents_dir}}/$_extension_dir/{{source_file_part}}" ]
sources = [ get_label_info(invoker.extension_target, "root_out_dir") +

@ -753,6 +753,14 @@ chrome_app("chrome") {
_variants += [
{
forward_variables_from(_variant, "*", [ "cpe_bundle_deps" ])
if (ios_enable_credential_provider_extension) {
if (!defined(bundle_deps)) {
bundle_deps = []
}
bundle_deps += [
":credential_provider_extension_bundle_variants_${_variant.name}",
]
}
},
]
}
@ -778,28 +786,30 @@ chrome_app("chrome") {
if (current_toolchain == default_toolchain) {
if (ios_enable_search_widget_extension) {
deps += [ ":search_widget_extension_bundle" ]
bundle_deps += [ ":search_widget_extension_bundle" ]
}
if (ios_enable_content_widget_extension) {
deps += [ ":content_widget_extension_bundle" ]
bundle_deps += [ ":content_widget_extension_bundle" ]
}
if (ios_enable_share_extension) {
deps += [ ":share_extension_bundle" ]
bundle_deps += [ ":share_extension_bundle" ]
}
if (ios_enable_open_extension) {
deps += [ ":open_extension_bundle" ]
bundle_deps += [ ":open_extension_bundle" ]
}
if (ios_enable_credential_provider_extension) {
deps += [ ":credential_provider_extension_bundle" ]
if (!is_chrome_branded || ios_chrome_app_variants == []) {
bundle_deps += [ ":credential_provider_extension_bundle" ]
}
}
if (ios_enable_widget_kit_extension) {
deps += [ ":widget_kit_extension_bundle" ]
bundle_deps += [ ":widget_kit_extension_bundle" ]
}
if (ios_enable_intents_extension) {
deps += [ ":intents_extension_bundle" ]
bundle_deps += [ ":intents_extension_bundle" ]
}
if (ios_enable_push_notification_service_extension) {
deps += [ ":push_notification_service_extension_bundle" ]
bundle_deps += [ ":push_notification_service_extension_bundle" ]
}
}
@ -884,6 +894,9 @@ if (current_toolchain == default_toolchain && !ios_chrome_generate_order_file) {
extension_bundle_data("credential_provider_extension_bundle") {
extension_name = "credential_provider_extension.appex"
extension_target = "//ios/chrome/credential_provider_extension/appex(${_extension_toolchain})"
if (is_chrome_branded && ios_chrome_app_variants != []) {
variants = ios_chrome_app_variants
}
}
}

@ -7,6 +7,7 @@ import("//build/apple/tweak_info_plist.gni")
import("//build/config/ios/rules.gni")
import("//ios/build/chrome_build.gni")
import("//ios/build/config.gni")
import("//ios/public/provider/chrome/browser/build_config.gni")
assert(
ios_enable_credential_provider_extension,
@ -45,6 +46,21 @@ ios_appex_bundle("appex") {
deps += [ ":privacy_manifest" ]
}
if (!is_chrome_branded || ios_chrome_app_variants == []) {
bundle_deps = ios_providers_cpe_resources_targets
} else {
_variants = []
foreach(_variant, ios_chrome_app_variants) {
_variants += [
{
name = _variant.name
bundle_deps = _variant.cpe_bundle_deps
},
]
}
variants = _variants
}
bundle_deps_filter = [ "//third_party/icu:icudata" ]
assert_no_deps = ios_extension_assert_no_deps