Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(162)

Side by Side Diff: chrome/browser/password_manager/account_chooser_dialog_android.cc

Issue 2126353003: [CM API] Account Chooser with Sign in button for single account (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/password_manager/account_chooser_dialog_android.h" 5 #include "chrome/browser/password_manager/account_chooser_dialog_android.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/android/jni_android.h" 9 #include "base/android/jni_android.h"
10 #include "base/android/jni_string.h" 10 #include "base/android/jni_string.h"
11 #include "base/android/scoped_java_ref.h" 11 #include "base/android/scoped_java_ref.h"
12 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "chrome/browser/password_manager/chrome_password_manager_client.h" 13 #include "chrome/browser/password_manager/chrome_password_manager_client.h"
14 #include "chrome/browser/password_manager/credential_android.h" 14 #include "chrome/browser/password_manager/credential_android.h"
15 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/sync/profile_sync_service_factory.h" 16 #include "chrome/browser/sync/profile_sync_service_factory.h"
17 #include "chrome/browser/ui/passwords/account_avatar_fetcher.h" 17 #include "chrome/browser/ui/passwords/account_avatar_fetcher.h"
18 #include "chrome/browser/ui/passwords/manage_passwords_view_utils.h" 18 #include "chrome/browser/ui/passwords/manage_passwords_view_utils.h"
19 #include "chrome/grit/generated_resources.h" 19 #include "chrome/grit/generated_resources.h"
20 #include "components/browser_sync/browser/profile_sync_service.h" 20 #include "components/browser_sync/browser/profile_sync_service.h"
21 #include "components/password_manager/core/browser/password_bubble_experiment.h" 21 #include "components/password_manager/core/browser/password_bubble_experiment.h"
22 #include "components/password_manager/core/browser/password_manager_constants.h" 22 #include "components/password_manager/core/browser/password_manager_constants.h"
23 #include "components/password_manager/core/browser/password_manager_metrics_util .h" 23 #include "components/password_manager/core/browser/password_manager_metrics_util .h"
24 #include "components/password_manager/core/browser/password_ui_utils.h" 24 #include "components/password_manager/core/browser/password_ui_utils.h"
25 #include "components/password_manager/core/common/credential_manager_types.h" 25 #include "components/password_manager/core/common/credential_manager_types.h"
26 #include "jni/AccountChooserDialog_jni.h" 26 #include "jni/AccountChooserDialog_jni.h"
27 #include "ui/android/window_android.h" 27 #include "ui/android/window_android.h"
28 #include "ui/base/l10n/l10n_util.h"
28 #include "ui/gfx/android/java_bitmap.h" 29 #include "ui/gfx/android/java_bitmap.h"
29 #include "ui/gfx/range/range.h" 30 #include "ui/gfx/range/range.h"
30 31
31 using base::android::AttachCurrentThread; 32 using base::android::AttachCurrentThread;
32 using base::android::ConvertUTF16ToJavaString; 33 using base::android::ConvertUTF16ToJavaString;
33 34
34 namespace { 35 namespace {
35 36
36 void AddElementsToJavaCredentialArray( 37 void AddElementsToJavaCredentialArray(
37 JNIEnv* env, 38 JNIEnv* env,
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 ScopedJavaLocalRef<jobjectArray> java_credentials_array = 141 ScopedJavaLocalRef<jobjectArray> java_credentials_array =
141 CreateNativeCredentialArray(env, credential_array_size); 142 CreateNativeCredentialArray(env, credential_array_size);
142 AddElementsToJavaCredentialArray( 143 AddElementsToJavaCredentialArray(
143 env, java_credentials_array, local_credentials_forms(), 144 env, java_credentials_array, local_credentials_forms(),
144 password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); 145 password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD);
145 AddElementsToJavaCredentialArray( 146 AddElementsToJavaCredentialArray(
146 env, java_credentials_array, federated_credentials_forms(), 147 env, java_credentials_array, federated_credentials_forms(),
147 password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED, 148 password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED,
148 local_credentials_forms().size()); 149 local_credentials_forms().size());
149 base::android::ScopedJavaGlobalRef<jobject> java_dialog_global; 150 base::android::ScopedJavaGlobalRef<jobject> java_dialog_global;
151 const std::string origin = password_manager::GetShownOrigin(origin_);
152 base::string16 signin_button;
153 if (local_credentials_forms().size() == 1) {
154 signin_button =
155 l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_ACCOUNT_CHOOSER_SIGN_IN);
156 }
150 dialog_jobject_.Reset(Java_AccountChooserDialog_createAndShowAccountChooser( 157 dialog_jobject_.Reset(Java_AccountChooserDialog_createAndShowAccountChooser(
151 env, native_window->GetJavaObject().obj(), 158 env, native_window->GetJavaObject().obj(),
152 reinterpret_cast<intptr_t>(this), java_credentials_array.obj(), 159 reinterpret_cast<intptr_t>(this), java_credentials_array.obj(),
153 base::android::ConvertUTF16ToJavaString(env, title).obj(), 160 base::android::ConvertUTF16ToJavaString(env, title).obj(),
154 title_link_range.start(), title_link_range.end(), 161 title_link_range.start(), title_link_range.end(),
155 base::android::ConvertUTF8ToJavaString( 162 base::android::ConvertUTF8ToJavaString(env, origin).obj(),
156 env, password_manager::GetShownOrigin(origin_)) 163 base::android::ConvertUTF16ToJavaString(env, signin_button).obj()));
157 .obj()));
158 net::URLRequestContextGetter* request_context = 164 net::URLRequestContextGetter* request_context =
159 Profile::FromBrowserContext(web_contents_->GetBrowserContext()) 165 Profile::FromBrowserContext(web_contents_->GetBrowserContext())
160 ->GetRequestContext(); 166 ->GetRequestContext();
161 FetchAvatars(dialog_jobject_, local_credentials_forms(), 0, request_context); 167 FetchAvatars(dialog_jobject_, local_credentials_forms(), 0, request_context);
162 FetchAvatars(dialog_jobject_, federated_credentials_forms(), 168 FetchAvatars(dialog_jobject_, federated_credentials_forms(),
163 local_credentials_forms().size(), request_context); 169 local_credentials_forms().size(), request_context);
164 } 170 }
165 171
166 void AccountChooserDialogAndroid::OnCredentialClicked( 172 void AccountChooserDialogAndroid::OnCredentialClicked(
167 JNIEnv* env, 173 JNIEnv* env,
168 const JavaParamRef<jobject>& obj, 174 const JavaParamRef<jobject>& obj,
169 jint credential_item, 175 jint credential_item,
170 jint credential_type) { 176 jint credential_type,
177 jboolean signin_button_clicked) {
171 ChooseCredential( 178 ChooseCredential(
172 credential_item, 179 credential_item,
173 static_cast<password_manager::CredentialType>(credential_type)); 180 static_cast<password_manager::CredentialType>(credential_type),
181 signin_button_clicked);
174 } 182 }
175 183
176 void AccountChooserDialogAndroid::Destroy(JNIEnv* env, 184 void AccountChooserDialogAndroid::Destroy(JNIEnv* env,
177 const JavaParamRef<jobject>& obj) { 185 const JavaParamRef<jobject>& obj) {
178 delete this; 186 delete this;
179 } 187 }
180 188
181 void AccountChooserDialogAndroid::CancelDialog( 189 void AccountChooserDialogAndroid::CancelDialog(
182 JNIEnv* env, 190 JNIEnv* env,
183 const JavaParamRef<jobject>& obj) { 191 const JavaParamRef<jobject>& obj) {
(...skipping 16 matching lines...) Expand all
200 208
201 void AccountChooserDialogAndroid::WasHidden() { 209 void AccountChooserDialogAndroid::WasHidden() {
202 // TODO(https://crbug.com/610700): once bug is fixed, this code should be 210 // TODO(https://crbug.com/610700): once bug is fixed, this code should be
203 // gone. 211 // gone.
204 OnDialogCancel(); 212 OnDialogCancel();
205 JNIEnv* env = AttachCurrentThread(); 213 JNIEnv* env = AttachCurrentThread();
206 Java_AccountChooserDialog_dismissDialog(env, dialog_jobject_.obj()); 214 Java_AccountChooserDialog_dismissDialog(env, dialog_jobject_.obj());
207 } 215 }
208 216
209 void AccountChooserDialogAndroid::OnDialogCancel() { 217 void AccountChooserDialogAndroid::OnDialogCancel() {
210 ChooseCredential(-1, password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY); 218 ChooseCredential(-1, password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY,
219 false /* signin_button_clicked */);
211 } 220 }
212 221
213 const std::vector<const autofill::PasswordForm*>& 222 const std::vector<const autofill::PasswordForm*>&
214 AccountChooserDialogAndroid::local_credentials_forms() const { 223 AccountChooserDialogAndroid::local_credentials_forms() const {
215 return passwords_data_.GetCurrentForms(); 224 return passwords_data_.GetCurrentForms();
216 } 225 }
217 226
218 const std::vector<const autofill::PasswordForm*>& 227 const std::vector<const autofill::PasswordForm*>&
219 AccountChooserDialogAndroid::federated_credentials_forms() const { 228 AccountChooserDialogAndroid::federated_credentials_forms() const {
220 return passwords_data_.federated_credentials_forms(); 229 return passwords_data_.federated_credentials_forms();
221 } 230 }
222 231
223 void AccountChooserDialogAndroid::ChooseCredential( 232 void AccountChooserDialogAndroid::ChooseCredential(
224 size_t index, 233 size_t index,
225 password_manager::CredentialType type) { 234 password_manager::CredentialType type,
235 bool signin_button_clicked) {
226 using namespace password_manager; 236 using namespace password_manager;
227 password_manager::metrics_util::AccountChooserUserAction action; 237 password_manager::metrics_util::AccountChooserUserAction action;
228 if (type == CredentialType::CREDENTIAL_TYPE_EMPTY) { 238 if (type == CredentialType::CREDENTIAL_TYPE_EMPTY) {
229 passwords_data_.ChooseCredential(nullptr); 239 passwords_data_.ChooseCredential(nullptr);
230 action = password_manager::metrics_util::ACCOUNT_CHOOSER_DISMISSED; 240 action = metrics_util::ACCOUNT_CHOOSER_DISMISSED;
231 } else { 241 } else {
232 action = password_manager::metrics_util::ACCOUNT_CHOOSER_CREDENTIAL_CHOSEN; 242 action = signin_button_clicked
243 ? metrics_util::ACCOUNT_CHOOSER_SIGN_IN
244 : metrics_util::ACCOUNT_CHOOSER_CREDENTIAL_CHOSEN;
233 const auto& credentials_forms = 245 const auto& credentials_forms =
234 (type == CredentialType::CREDENTIAL_TYPE_PASSWORD) 246 (type == CredentialType::CREDENTIAL_TYPE_PASSWORD)
235 ? local_credentials_forms() 247 ? local_credentials_forms()
236 : federated_credentials_forms(); 248 : federated_credentials_forms();
237 if (index < credentials_forms.size()) { 249 if (index < credentials_forms.size()) {
238 passwords_data_.ChooseCredential(credentials_forms[index]); 250 passwords_data_.ChooseCredential(credentials_forms[index]);
239 } 251 }
240 } 252 }
241 253
242 if (local_credentials_forms().size() == 1) { 254 if (local_credentials_forms().size() == 1) {
243 password_manager::metrics_util::LogAccountChooserUserActionOneAccount( 255 password_manager::metrics_util::LogAccountChooserUserActionOneAccount(
244 action); 256 action);
245 } else { 257 } else {
246 password_manager::metrics_util::LogAccountChooserUserActionManyAccounts( 258 password_manager::metrics_util::LogAccountChooserUserActionManyAccounts(
247 action); 259 action);
248 } 260 }
249 } 261 }
250 262
251 bool RegisterAccountChooserDialogAndroid(JNIEnv* env) { 263 bool RegisterAccountChooserDialogAndroid(JNIEnv* env) {
252 return RegisterNativesImpl(env); 264 return RegisterNativesImpl(env);
253 } 265 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698