[deep link] Add logic to validate ios domain errors in controller (#7984)
* 1
* add flag
* resolve comments
* lint
* Update deep_links_controller.dart
* lint
diff --git a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_controller.dart b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_controller.dart
index 63ba3de..10aa74f 100644
--- a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_controller.dart
+++ b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_controller.dart
@@ -441,30 +441,34 @@
}
}
- Future<List<LinkData>> _validateAndroidDomain(
+ Future<List<LinkData>> _validateDomain(
List<LinkData> linkdatas,
) async {
final domains = linkdatas
.where(
- (linkdata) =>
- linkdata.os.contains(PlatformOS.android) &&
- linkdata.domain != null,
+ (linkdata) => linkdata.domain != null,
)
.map((linkdata) => linkdata.domain!)
.toSet()
.toList();
- late final Map<String, List<DomainError>> domainErrors;
-
+ late final Map<String, List<DomainError>> androidDomainErrors;
+ Map<String, List<DomainError>> iosDomainErrors =
+ <String, List<DomainError>>{};
try {
- final result = await deepLinksServices.validateAndroidDomain(
+ final androidResult = await deepLinksServices.validateAndroidDomain(
domains: domains,
applicationId: applicationId,
localFingerprint: localFingerprint.value,
);
- domainErrors = result.domainErrors;
+ androidDomainErrors = androidResult.domainErrors;
googlePlayFingerprintsAvailability.value =
- result.googlePlayFingerprintsAvailability;
+ androidResult.googlePlayFingerprintsAvailability;
+ if (FeatureFlags.deepLinkIosCheck) {
+ iosDomainErrors = await deepLinksServices.validateIosDomain(
+ domains: domains,
+ );
+ }
} catch (_) {
//TODO(hangyujin): Add more error handling for cases like RPC error and invalid json.
pagePhase.value = PagePhase.validationErrorPage;
@@ -472,8 +476,11 @@
}
return linkdatas.map((linkdata) {
- final errors = domainErrors[linkdata.domain];
- if (errors != null && errors.isNotEmpty) {
+ final errors = <DomainError>[
+ ...(androidDomainErrors[linkdata.domain] ?? []),
+ ...(iosDomainErrors[linkdata.domain] ?? []),
+ ];
+ if (errors.isNotEmpty) {
return LinkData(
domain: linkdata.domain,
domainErrors: errors,
@@ -535,7 +542,7 @@
gac.deeplink,
gac.AnalyzeFlutterProject.flutterHasAppLinks.name,
);
- linkdata = await _validateAndroidDomain(linkdata);
+ linkdata = await _validateDomain(linkdata);
if (pagePhase.value == PagePhase.validationErrorPage) {
return;
}
diff --git a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_services.dart b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_services.dart
index af9af82..622f912 100644
--- a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_services.dart
+++ b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_services.dart
@@ -118,6 +118,17 @@
);
}
+ Future<Map<String, List<DomainError>>> validateIosDomain({
+ required List<String> domains,
+ }) async {
+ //TODO(hangyujin): This is just a fake response, implement the iOS domain validation when the API is available.
+ final domainErrors = <String, List<DomainError>>{
+ for (final domain in domains)
+ domain: <DomainError>[IosDomainError.existence],
+ };
+ return domainErrors;
+ }
+
Future<GenerateAssetLinksResult> generateAssetLinks({
required String applicationId,
required String domain,