| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_util.h" | 5 #include "chrome/browser/ui/desktop_ios_promotion/desktop_ios_promotion_util.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/i18n/rtl.h" | 8 #include "base/i18n/rtl.h" |
| 9 #include "base/metrics/field_trial_params.h" | 9 #include "base/metrics/field_trial_params.h" |
| 10 #include "base/metrics/histogram_macros.h" | 10 #include "base/metrics/histogram_macros.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 #include "ui/gfx/color_utils.h" | 25 #include "ui/gfx/color_utils.h" |
| 26 #include "ui/gfx/paint_vector_icon.h" | 26 #include "ui/gfx/paint_vector_icon.h" |
| 27 #include "ui/native_theme/native_theme.h" | 27 #include "ui/native_theme/native_theme.h" |
| 28 | 28 |
| 29 using i18n::phonenumbers::PhoneNumber; | 29 using i18n::phonenumbers::PhoneNumber; |
| 30 using i18n::phonenumbers::PhoneNumberUtil; | 30 using i18n::phonenumbers::PhoneNumberUtil; |
| 31 | 31 |
| 32 namespace desktop_ios_promotion { | 32 namespace desktop_ios_promotion { |
| 33 | 33 |
| 34 // Default Impression cap. for each entry point. | 34 // Default Impression cap. for each entry point. |
| 35 const int kEntryPointImpressionCap[] = {2, 2, 5, 10}; | 35 const int kEntryPointImpressionCap[] = {0, 2, 2, 5, 10}; |
| 36 | 36 |
| 37 const char* kEntrypointHistogramPrefix[] = { | 37 const char* kEntrypointHistogramPrefix[] = { |
| 38 "SavePasswordsNewBubble", "BookmarksNewBubble", "BookmarksFootNote", | 38 "", // Padding as PromotionEntryPoints values starts from 1. |
| 39 "SavePasswordsNewBubble", |
| 40 "BookmarksNewBubble", |
| 41 "BookmarksFootNote", |
| 39 "HistoryPage", | 42 "HistoryPage", |
| 40 }; | 43 }; |
| 41 | 44 |
| 42 // Entry point string names, used to check which entry point is targeted from | 45 // Entry point string names, used to check which entry point is targeted from |
| 43 // finch parameters. | 46 // finch parameters. |
| 44 const char* kPromotionEntryPointNames[] = { | 47 const char* kPromotionEntryPointNames[] = { |
| 45 "", "SavePasswordsBubblePromotion", "BookmarksBubblePromotion", | 48 "", "SavePasswordsBubblePromotion", "BookmarksBubblePromotion", |
| 46 "BookmarksFootnotePromotion", "HistoryPagePromotion"}; | 49 "BookmarksFootnotePromotion", "HistoryPagePromotion"}; |
| 47 | 50 |
| 48 // Text used on the promotion body, the first dimension is the text version | 51 // Text used on the promotion bubble body when the phone number is present, |
| 49 // specified by body_text_id Finch parameter, and the second dimension is for | 52 // this array is indexed by the text version specified by body_text_id Finch |
| 50 // specifying if the phone number is available or not. | 53 // parameter. |
| 51 // TODO(crbug.com/676655): Add another dimension for entry points when needed. | 54 const int kBubbleBodyTextNoPhoneNumberId[2] = { |
| 52 const int kBodyTextId[2][2] = { | 55 IDS_PASSWORD_MANAGER_DESKTOP_TO_IOS_PROMO_TEXT, |
| 53 {IDS_PASSWORD_MANAGER_DESKTOP_TO_IOS_PROMO_TEXT, | 56 IDS_PASSWORD_MANAGER_DESKTOP_TO_IOS_PROMO_TEXT_V2}; |
| 54 IDS_PASSWORD_MANAGER_DESKTOP_TO_IOS_PROMO_TEXT_WITH_PHONE_NUMBER}, | |
| 55 {IDS_PASSWORD_MANAGER_DESKTOP_TO_IOS_PROMO_TEXT_V2, | |
| 56 IDS_PASSWORD_MANAGER_DESKTOP_TO_IOS_PROMO_TEXT_WITH_PHONE_NUMBER_V2}}; | |
| 57 | 57 |
| 58 // Text used on the promotion title, This array is indexed by the text version | 58 // Text used on the promotion bubble body when the phone number is not present, |
| 59 // specified by title_text_id Finch parameter. | 59 // this array is indexed by the text version specified by body_text_id Finch |
| 60 // TODO(crbug.com/676655): Add another dimension for entry points when needed. | 60 // parameter. |
| 61 const int kTitleTextId[3] = { | 61 const int kBubbleBodyTextWithPhoneNumberId[2] = { |
| 62 IDS_PASSWORD_MANAGER_DESKTOP_TO_IOS_PROMO_TITLE, | 62 IDS_PASSWORD_MANAGER_DESKTOP_TO_IOS_PROMO_TEXT_WITH_PHONE_NUMBER, |
| 63 IDS_PASSWORD_MANAGER_DESKTOP_TO_IOS_PROMO_TITLE_V2, | 63 IDS_PASSWORD_MANAGER_DESKTOP_TO_IOS_PROMO_TEXT_WITH_PHONE_NUMBER_V2}; |
| 64 IDS_PASSWORD_MANAGER_DESKTOP_TO_IOS_PROMO_TITLE_V3}; | 64 |
| 65 // Text used on the promotion bubble title, The first dimension is the entry |
| 66 // point, and the second is the text version specified by title_text_id Finch |
| 67 // parameter. |
| 68 const int kBubbleTitleTextId[3][3] = { |
| 69 {0, 0, 0}, // Padding as PromotionEntryPoints values starts from 1. |
| 70 {IDS_PASSWORD_MANAGER_DESKTOP_TO_IOS_PROMO_TITLE, |
| 71 IDS_PASSWORD_MANAGER_DESKTOP_TO_IOS_PROMO_TITLE_V2, |
| 72 IDS_PASSWORD_MANAGER_DESKTOP_TO_IOS_PROMO_TITLE_V3}, |
| 73 {IDS_BOOKMARK_BUBBLE_DESKTOP_TO_IOS_PROMO_TITLE, |
| 74 IDS_BOOKMARK_BUBBLE_DESKTOP_TO_IOS_PROMO_TITLE_V2, |
| 75 IDS_BOOKMARK_BUBBLE_DESKTOP_TO_IOS_PROMO_TITLE_V3}}; |
| 65 | 76 |
| 66 bool IsEligibleForIOSPromotion( | 77 bool IsEligibleForIOSPromotion( |
| 67 PrefService* prefs, | 78 PrefService* prefs, |
| 68 const syncer::SyncService* sync_service, | 79 const syncer::SyncService* sync_service, |
| 69 desktop_ios_promotion::PromotionEntryPoint entry_point) { | 80 desktop_ios_promotion::PromotionEntryPoint entry_point) { |
| 70 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 81 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 71 switches::kForceDesktopIOSPromotion)) { | 82 switches::kForceDesktopIOSPromotion)) { |
| 72 return true; | 83 return true; |
| 73 } | 84 } |
| 74 | 85 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 gfx::ImageSkia icon = gfx::CreateVectorIcon( | 129 gfx::ImageSkia icon = gfx::CreateVectorIcon( |
| 119 kOpenInPhoneIcon, color_utils::DeriveDefaultIconColor(color)); | 130 kOpenInPhoneIcon, color_utils::DeriveDefaultIconColor(color)); |
| 120 return icon; | 131 return icon; |
| 121 } | 132 } |
| 122 | 133 |
| 123 base::string16 GetPromoText( | 134 base::string16 GetPromoText( |
| 124 desktop_ios_promotion::PromotionEntryPoint entry_point, | 135 desktop_ios_promotion::PromotionEntryPoint entry_point, |
| 125 const std::string& phone_number) { | 136 const std::string& phone_number) { |
| 126 int text_id_from_finch = base::GetFieldTrialParamByFeatureAsInt( | 137 int text_id_from_finch = base::GetFieldTrialParamByFeatureAsInt( |
| 127 features::kDesktopIOSPromotion, "body_text_id", 0); | 138 features::kDesktopIOSPromotion, "body_text_id", 0); |
| 128 int body_text_i10_id = kBodyTextId[text_id_from_finch][!phone_number.empty()]; | 139 int body_text_i10_id = kBubbleBodyTextWithPhoneNumberId[text_id_from_finch]; |
| 129 if (phone_number.empty()) { | 140 if (phone_number.empty()) { |
| 141 body_text_i10_id = kBubbleBodyTextNoPhoneNumberId[text_id_from_finch]; |
| 130 return l10n_util::GetStringUTF16(body_text_i10_id) | 142 return l10n_util::GetStringUTF16(body_text_i10_id) |
| 131 .append(base::string16(13, ' ')); | 143 .append(base::string16(13, ' ')); |
| 132 } | 144 } |
| 133 return l10n_util::GetStringFUTF16(body_text_i10_id, | 145 return l10n_util::GetStringFUTF16(body_text_i10_id, |
| 134 base::UTF8ToUTF16(phone_number)); | 146 base::UTF8ToUTF16(phone_number)); |
| 135 } | 147 } |
| 136 | 148 |
| 137 base::string16 GetPromoTitle( | 149 base::string16 GetPromoTitle( |
| 138 desktop_ios_promotion::PromotionEntryPoint entry_point) { | 150 desktop_ios_promotion::PromotionEntryPoint entry_point) { |
| 139 int text_id_from_finch = base::GetFieldTrialParamByFeatureAsInt( | 151 int text_id_from_finch = base::GetFieldTrialParamByFeatureAsInt( |
| 140 features::kDesktopIOSPromotion, "title_text_id", 0); | 152 features::kDesktopIOSPromotion, "title_text_id", 0); |
| 141 return l10n_util::GetStringUTF16(kTitleTextId[text_id_from_finch]); | 153 return l10n_util::GetStringUTF16( |
| 154 kBubbleTitleTextId[static_cast<int>(entry_point)][text_id_from_finch]); |
| 142 } | 155 } |
| 143 | 156 |
| 144 std::string GetSMSID() { | 157 std::string GetSMSID() { |
| 145 const std::string default_sms_message_id = "19001507"; | 158 const std::string default_sms_message_id = "19001507"; |
| 146 // Get the SMS message id from the finch group. | 159 // Get the SMS message id from the finch group. |
| 147 std::string finch_sms_id = base::GetFieldTrialParamValueByFeature( | 160 std::string finch_sms_id = base::GetFieldTrialParamValueByFeature( |
| 148 features::kDesktopIOSPromotion, "sms_id"); | 161 features::kDesktopIOSPromotion, "sms_id"); |
| 149 return finch_sms_id.empty() ? default_sms_message_id : finch_sms_id; | 162 return finch_sms_id.empty() ? default_sms_message_id : finch_sms_id; |
| 150 } | 163 } |
| 151 | 164 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 entry_point)]), | 224 entry_point)]), |
| 212 dismissal_reason_min, | 225 dismissal_reason_min, |
| 213 static_cast<int>(PromotionDismissalReason::DISMISSAL_REASON_MAX_VALUE), | 226 static_cast<int>(PromotionDismissalReason::DISMISSAL_REASON_MAX_VALUE), |
| 214 static_cast<int>(PromotionDismissalReason::DISMISSAL_REASON_MAX_VALUE) + | 227 static_cast<int>(PromotionDismissalReason::DISMISSAL_REASON_MAX_VALUE) + |
| 215 1, | 228 1, |
| 216 base::HistogramBase::kUmaTargetedHistogramFlag) | 229 base::HistogramBase::kUmaTargetedHistogramFlag) |
| 217 ->Add(static_cast<int>(reason)); | 230 ->Add(static_cast<int>(reason)); |
| 218 } | 231 } |
| 219 | 232 |
| 220 } // namespace desktop_ios_promotion | 233 } // namespace desktop_ios_promotion |
| OLD | NEW |