| Index: ios/chrome/browser/ui/activity_services/activity_type_util.mm
|
| diff --git a/ios/chrome/browser/ui/activity_services/activity_type_util.mm b/ios/chrome/browser/ui/activity_services/activity_type_util.mm
|
| index 8a8378ef3f7e8d98f24e62d4a1183afd1d46f52f..2ea4ef815836dcb2a6b60e237e70676ad95c9f0b 100644
|
| --- a/ios/chrome/browser/ui/activity_services/activity_type_util.mm
|
| +++ b/ios/chrome/browser/ui/activity_services/activity_type_util.mm
|
| @@ -17,13 +17,46 @@
|
| #endif
|
|
|
| namespace {
|
| +
|
| // A substring to identify activity strings that are from Password Management
|
| // App Extensions. This string is intentionally without the leading and
|
| // trailing "." so it can be used as a prefix, suffix, or substring of the
|
| // App Extension's bundle ID.
|
| NSString* const kFindLoginActionBundleSubstring = @"find-login-action";
|
| +
|
| +// Returns whether |activityString| refers to a supported Password Management
|
| +// App Extension. Supported extensions are listed in
|
| +// PasswordManagerExtensions.plist as an array of dictionaries. Each
|
| +// dictionary entry contains the following key-value pairs:
|
| +// App: Name of app
|
| +// BundleId: Full or leading substring of Password Manager extension bundle ID
|
| +// ExactMatch: Boolean value of whether BundleId requires exact match
|
| +bool IsPasswordManagerActivity(NSString* activityString) {
|
| + static NSArray<NSDictionary*>* allPasswordManagerApps;
|
| + static dispatch_once_t once;
|
| + dispatch_once(&once, ^{
|
| + NSString* path =
|
| + [[NSBundle mainBundle] pathForResource:@"PasswordManagerExtensions"
|
| + ofType:@"plist"];
|
| + allPasswordManagerApps = [NSArray arrayWithContentsOfFile:path];
|
| + });
|
| +
|
| + for (NSDictionary* app in allPasswordManagerApps) {
|
| + NSString* bundleId = app[@"BundleId"];
|
| + BOOL requestsExactMatch = [app[@"ExactMatch"] boolValue];
|
| + if (requestsExactMatch) {
|
| + if ([activityString isEqualToString:bundleId])
|
| + return true;
|
| + } else {
|
| + if ([activityString hasPrefix:bundleId])
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| }
|
|
|
| +} // namespace
|
| +
|
| namespace activity_type_util {
|
|
|
| struct PrefixTypeAssociation {
|
| @@ -60,13 +93,7 @@ const PrefixTypeAssociation prefixTypeAssociations[] = {
|
| {THIRD_PARTY_PINTEREST, @"pinterest.", false},
|
| {THIRD_PARTY_POCKET, @"com.ideashower.ReadItLaterPro.", false},
|
| {THIRD_PARTY_READABILITY, @"com.readability.ReadabilityMobile.", false},
|
| - {THIRD_PARTY_INSTAPAPER, @"com.marcoarment.instapaperpro.", false},
|
| - {APPEX_PASSWORD_MANAGEMENT_1PASSWORD,
|
| - activity_services::kAppExtensionOnePassword, true},
|
| - {APPEX_PASSWORD_MANAGEMENT_LASTPASS,
|
| - activity_services::kAppExtensionLastPass, true},
|
| - {APPEX_PASSWORD_MANAGEMENT_DASHLANE,
|
| - activity_services::kAppExtensionDashlanePrefix, false}};
|
| + {THIRD_PARTY_INSTAPAPER, @"com.marcoarment.instapaperpro.", false}};
|
|
|
| ActivityType TypeFromString(NSString* activityString) {
|
| DCHECK(activityString);
|
| @@ -75,7 +102,7 @@ ActivityType TypeFromString(NSString* activityString) {
|
| NSRange found =
|
| [activityString rangeOfString:kFindLoginActionBundleSubstring];
|
| if (found.length)
|
| - return APPEX_PASSWORD_MANAGEMENT_OTHERS;
|
| + return APPEX_PASSWORD_MANAGEMENT;
|
| for (auto const& assocation : prefixTypeAssociations) {
|
| if (assocation.requiresExactMatch_) {
|
| if ([activityString isEqualToString:assocation.prefix_])
|
| @@ -85,15 +112,15 @@ ActivityType TypeFromString(NSString* activityString) {
|
| return assocation.type_;
|
| }
|
| }
|
| + if (IsPasswordManagerActivity(activityString)) {
|
| + return APPEX_PASSWORD_MANAGEMENT;
|
| + }
|
| return UNKNOWN;
|
| }
|
|
|
| NSNumber* PasswordAppExActivityVersion(NSString* activityString) {
|
| switch (TypeFromString(activityString)) {
|
| - case APPEX_PASSWORD_MANAGEMENT_1PASSWORD:
|
| - case APPEX_PASSWORD_MANAGEMENT_LASTPASS:
|
| - case APPEX_PASSWORD_MANAGEMENT_DASHLANE:
|
| - case APPEX_PASSWORD_MANAGEMENT_OTHERS:
|
| + case APPEX_PASSWORD_MANAGEMENT:
|
| return activity_services::kPasswordAppExVersionNumber;
|
| default:
|
| return nil;
|
| @@ -111,10 +138,7 @@ NSString* CompletionMessageForActivity(ActivityType type) {
|
| switch (type) {
|
| case NATIVE_CLIPBOARD:
|
| return l10n_util::GetNSString(IDS_IOS_SHARE_TO_CLIPBOARD_SUCCESS);
|
| - case APPEX_PASSWORD_MANAGEMENT_1PASSWORD:
|
| - case APPEX_PASSWORD_MANAGEMENT_LASTPASS:
|
| - case APPEX_PASSWORD_MANAGEMENT_DASHLANE:
|
| - case APPEX_PASSWORD_MANAGEMENT_OTHERS:
|
| + case APPEX_PASSWORD_MANAGEMENT:
|
| return l10n_util::GetNSString(IDS_IOS_APPEX_PASSWORD_FORM_FILLED_SUCCESS);
|
| default:
|
| return nil;
|
| @@ -182,10 +206,7 @@ void RecordMetricForActivity(ActivityType type) {
|
| base::RecordAction(
|
| base::UserMetricsAction("MobileShareMenuToContentApp"));
|
| break;
|
| - case APPEX_PASSWORD_MANAGEMENT_1PASSWORD:
|
| - case APPEX_PASSWORD_MANAGEMENT_LASTPASS:
|
| - case APPEX_PASSWORD_MANAGEMENT_DASHLANE:
|
| - case APPEX_PASSWORD_MANAGEMENT_OTHERS:
|
| + case APPEX_PASSWORD_MANAGEMENT:
|
| base::RecordAction(
|
| base::UserMetricsAction("MobileAppExFormFilledByPasswordManager"));
|
| break;
|
|
|