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

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

Issue 2253233005: Change ScopedVector to vector<unique_ptr> in the password's UI code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: android+ Created 4 years, 4 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"
(...skipping 21 matching lines...) Expand all
32 using base::android::AttachCurrentThread; 32 using base::android::AttachCurrentThread;
33 using base::android::ConvertUTF16ToJavaString; 33 using base::android::ConvertUTF16ToJavaString;
34 using base::android::JavaParamRef; 34 using base::android::JavaParamRef;
35 using base::android::ScopedJavaLocalRef; 35 using base::android::ScopedJavaLocalRef;
36 36
37 namespace { 37 namespace {
38 38
39 void AddElementsToJavaCredentialArray( 39 void AddElementsToJavaCredentialArray(
40 JNIEnv* env, 40 JNIEnv* env,
41 ScopedJavaLocalRef<jobjectArray> java_credentials_array, 41 ScopedJavaLocalRef<jobjectArray> java_credentials_array,
42 const std::vector<const autofill::PasswordForm*>& password_forms, 42 const std::vector<std::unique_ptr<autofill::PasswordForm>>& password_forms,
43 password_manager::CredentialType type, 43 password_manager::CredentialType type,
44 int indexStart = 0) { 44 int indexStart = 0) {
45 int index = indexStart; 45 int index = indexStart;
46 for (auto* password_form : password_forms) { 46 for (const auto& password_form : password_forms) {
47 ScopedJavaLocalRef<jobject> java_credential = CreateNativeCredential( 47 ScopedJavaLocalRef<jobject> java_credential = CreateNativeCredential(
48 env, *password_form, index - indexStart, static_cast<int>(type)); 48 env, *password_form, index - indexStart, static_cast<int>(type));
49 env->SetObjectArrayElement(java_credentials_array.obj(), index, 49 env->SetObjectArrayElement(java_credentials_array.obj(), index,
50 java_credential.obj()); 50 java_credential.obj());
51 index++; 51 index++;
52 } 52 }
53 } 53 }
54 54
55 class AvatarFetcherAndroid : public AccountAvatarFetcher { 55 class AvatarFetcherAndroid : public AccountAvatarFetcher {
56 public: 56 public:
(...skipping 28 matching lines...) Expand all
85 base::android::ScopedJavaLocalRef<jobject> java_bitmap = 85 base::android::ScopedJavaLocalRef<jobject> java_bitmap =
86 gfx::ConvertToJavaBitmap(bitmap); 86 gfx::ConvertToJavaBitmap(bitmap);
87 Java_AccountChooserDialog_imageFetchComplete( 87 Java_AccountChooserDialog_imageFetchComplete(
88 AttachCurrentThread(), java_dialog_, index_, java_bitmap); 88 AttachCurrentThread(), java_dialog_, index_, java_bitmap);
89 } 89 }
90 delete this; 90 delete this;
91 } 91 }
92 92
93 void FetchAvatars( 93 void FetchAvatars(
94 const base::android::ScopedJavaGlobalRef<jobject>& java_dialog, 94 const base::android::ScopedJavaGlobalRef<jobject>& java_dialog,
95 const std::vector<const autofill::PasswordForm*>& password_forms, 95 const std::vector<std::unique_ptr<autofill::PasswordForm>>& password_forms,
96 int index, 96 int index,
97 net::URLRequestContextGetter* request_context) { 97 net::URLRequestContextGetter* request_context) {
98 for (auto* password_form : password_forms) { 98 for (const auto& password_form : password_forms) {
99 if (!password_form->icon_url.is_valid()) 99 if (!password_form->icon_url.is_valid())
100 continue; 100 continue;
101 // Fetcher deletes itself once fetching is finished. 101 // Fetcher deletes itself once fetching is finished.
102 auto* fetcher = 102 auto* fetcher =
103 new AvatarFetcherAndroid(password_form->icon_url, index, java_dialog); 103 new AvatarFetcherAndroid(password_form->icon_url, index, java_dialog);
104 fetcher->Start(request_context); 104 fetcher->Start(request_context);
105 ++index; 105 ++index;
106 } 106 }
107 } 107 }
108 108
109 }; // namespace 109 }; // namespace
110 110
111 AccountChooserDialogAndroid::AccountChooserDialogAndroid( 111 AccountChooserDialogAndroid::AccountChooserDialogAndroid(
112 content::WebContents* web_contents, 112 content::WebContents* web_contents,
113 ScopedVector<autofill::PasswordForm> local_credentials, 113 std::vector<std::unique_ptr<autofill::PasswordForm>> local_credentials,
114 ScopedVector<autofill::PasswordForm> federated_credentials, 114 std::vector<std::unique_ptr<autofill::PasswordForm>> federated_credentials,
115 const GURL& origin, 115 const GURL& origin,
116 const ManagePasswordsState::CredentialsCallback& callback) 116 const ManagePasswordsState::CredentialsCallback& callback)
117 : content::WebContentsObserver(web_contents), 117 : content::WebContentsObserver(web_contents),
118 web_contents_(web_contents), 118 web_contents_(web_contents),
119 origin_(origin) { 119 origin_(origin) {
120 passwords_data_.set_client( 120 passwords_data_.set_client(
121 ChromePasswordManagerClient::FromWebContents(web_contents_)); 121 ChromePasswordManagerClient::FromWebContents(web_contents_));
122 passwords_data_.OnRequestCredentials( 122 passwords_data_.OnRequestCredentials(
123 std::move(local_credentials), std::move(federated_credentials), origin); 123 std::move(local_credentials), std::move(federated_credentials), origin);
124 passwords_data_.set_credentials_callback(callback); 124 passwords_data_.set_credentials_callback(callback);
125 } 125 }
126 126
127 AccountChooserDialogAndroid::~AccountChooserDialogAndroid() {} 127 AccountChooserDialogAndroid::~AccountChooserDialogAndroid() {}
128 128
129 void AccountChooserDialogAndroid::ShowDialog() { 129 void AccountChooserDialogAndroid::ShowDialog() {
130 JNIEnv* env = AttachCurrentThread(); 130 JNIEnv* env = AttachCurrentThread();
131 bool is_smartlock_branding_enabled = 131 bool is_smartlock_branding_enabled =
132 password_bubble_experiment::IsSmartLockUser( 132 password_bubble_experiment::IsSmartLockUser(
133 ProfileSyncServiceFactory::GetForProfile( 133 ProfileSyncServiceFactory::GetForProfile(
134 Profile::FromBrowserContext(web_contents_->GetBrowserContext()))); 134 Profile::FromBrowserContext(web_contents_->GetBrowserContext())));
135 base::string16 title; 135 base::string16 title;
136 gfx::Range title_link_range = gfx::Range(); 136 gfx::Range title_link_range = gfx::Range();
137 GetAccountChooserDialogTitleTextAndLinkRange( 137 GetAccountChooserDialogTitleTextAndLinkRange(
138 is_smartlock_branding_enabled, local_credentials_forms().size() > 1, 138 is_smartlock_branding_enabled, local_credentials_forms().size() > 1,
139 &title, &title_link_range); 139 &title, &title_link_range);
140 gfx::NativeWindow native_window = web_contents_->GetTopLevelNativeWindow(); 140 gfx::NativeWindow native_window = web_contents_->GetTopLevelNativeWindow();
141 size_t credential_array_size = 141 size_t credential_array_size =
142 local_credentials_forms().size() + federated_credentials_forms().size(); 142 local_credentials_forms().size() + federation_providers_forms().size();
143 ScopedJavaLocalRef<jobjectArray> java_credentials_array = 143 ScopedJavaLocalRef<jobjectArray> java_credentials_array =
144 CreateNativeCredentialArray(env, credential_array_size); 144 CreateNativeCredentialArray(env, credential_array_size);
145 AddElementsToJavaCredentialArray( 145 AddElementsToJavaCredentialArray(
146 env, java_credentials_array, local_credentials_forms(), 146 env, java_credentials_array, local_credentials_forms(),
147 password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); 147 password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD);
148 AddElementsToJavaCredentialArray( 148 AddElementsToJavaCredentialArray(
149 env, java_credentials_array, federated_credentials_forms(), 149 env, java_credentials_array, federation_providers_forms(),
150 password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED, 150 password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED,
151 local_credentials_forms().size()); 151 local_credentials_forms().size());
152 base::android::ScopedJavaGlobalRef<jobject> java_dialog_global; 152 base::android::ScopedJavaGlobalRef<jobject> java_dialog_global;
153 const std::string origin = password_manager::GetShownOrigin(origin_); 153 const std::string origin = password_manager::GetShownOrigin(origin_);
154 base::string16 signin_button; 154 base::string16 signin_button;
155 if (local_credentials_forms().size() == 1) { 155 if (local_credentials_forms().size() == 1) {
156 signin_button = 156 signin_button =
157 l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_ACCOUNT_CHOOSER_SIGN_IN); 157 l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_ACCOUNT_CHOOSER_SIGN_IN);
158 } 158 }
159 dialog_jobject_.Reset(Java_AccountChooserDialog_createAndShowAccountChooser( 159 dialog_jobject_.Reset(Java_AccountChooserDialog_createAndShowAccountChooser(
160 env, native_window->GetJavaObject(), reinterpret_cast<intptr_t>(this), 160 env, native_window->GetJavaObject(), reinterpret_cast<intptr_t>(this),
161 java_credentials_array, 161 java_credentials_array,
162 base::android::ConvertUTF16ToJavaString(env, title), 162 base::android::ConvertUTF16ToJavaString(env, title),
163 title_link_range.start(), title_link_range.end(), 163 title_link_range.start(), title_link_range.end(),
164 base::android::ConvertUTF8ToJavaString(env, origin), 164 base::android::ConvertUTF8ToJavaString(env, origin),
165 base::android::ConvertUTF16ToJavaString(env, signin_button))); 165 base::android::ConvertUTF16ToJavaString(env, signin_button)));
166 net::URLRequestContextGetter* request_context = 166 net::URLRequestContextGetter* request_context =
167 Profile::FromBrowserContext(web_contents_->GetBrowserContext()) 167 Profile::FromBrowserContext(web_contents_->GetBrowserContext())
168 ->GetRequestContext(); 168 ->GetRequestContext();
169 FetchAvatars(dialog_jobject_, local_credentials_forms(), 0, request_context); 169 FetchAvatars(dialog_jobject_, local_credentials_forms(), 0, request_context);
170 FetchAvatars(dialog_jobject_, federated_credentials_forms(), 170 FetchAvatars(dialog_jobject_, federation_providers_forms(),
171 local_credentials_forms().size(), request_context); 171 local_credentials_forms().size(), request_context);
172 } 172 }
173 173
174 void AccountChooserDialogAndroid::OnCredentialClicked( 174 void AccountChooserDialogAndroid::OnCredentialClicked(
175 JNIEnv* env, 175 JNIEnv* env,
176 const JavaParamRef<jobject>& obj, 176 const JavaParamRef<jobject>& obj,
177 jint credential_item, 177 jint credential_item,
178 jint credential_type, 178 jint credential_type,
179 jboolean signin_button_clicked) { 179 jboolean signin_button_clicked) {
180 ChooseCredential( 180 ChooseCredential(
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 OnDialogCancel(); 214 OnDialogCancel();
215 JNIEnv* env = AttachCurrentThread(); 215 JNIEnv* env = AttachCurrentThread();
216 Java_AccountChooserDialog_dismissDialog(env, dialog_jobject_); 216 Java_AccountChooserDialog_dismissDialog(env, dialog_jobject_);
217 } 217 }
218 218
219 void AccountChooserDialogAndroid::OnDialogCancel() { 219 void AccountChooserDialogAndroid::OnDialogCancel() {
220 ChooseCredential(-1, password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY, 220 ChooseCredential(-1, password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY,
221 false /* signin_button_clicked */); 221 false /* signin_button_clicked */);
222 } 222 }
223 223
224 const std::vector<const autofill::PasswordForm*>& 224 const std::vector<std::unique_ptr<autofill::PasswordForm>>&
225 AccountChooserDialogAndroid::local_credentials_forms() const { 225 AccountChooserDialogAndroid::local_credentials_forms() const {
226 return passwords_data_.GetCurrentForms(); 226 return passwords_data_.GetCurrentForms();
227 } 227 }
228 228
229 const std::vector<const autofill::PasswordForm*>& 229 const std::vector<std::unique_ptr<autofill::PasswordForm>>&
230 AccountChooserDialogAndroid::federated_credentials_forms() const { 230 AccountChooserDialogAndroid::federation_providers_forms() const {
231 return passwords_data_.federated_credentials_forms(); 231 return passwords_data_.federation_providers_forms();
232 } 232 }
233 233
234 void AccountChooserDialogAndroid::ChooseCredential( 234 void AccountChooserDialogAndroid::ChooseCredential(
235 size_t index, 235 size_t index,
236 password_manager::CredentialType type, 236 password_manager::CredentialType type,
237 bool signin_button_clicked) { 237 bool signin_button_clicked) {
238 using namespace password_manager; 238 using namespace password_manager;
239 password_manager::metrics_util::AccountChooserUserAction action; 239 password_manager::metrics_util::AccountChooserUserAction action;
240 if (type == CredentialType::CREDENTIAL_TYPE_EMPTY) { 240 if (type == CredentialType::CREDENTIAL_TYPE_EMPTY) {
241 passwords_data_.ChooseCredential(nullptr); 241 passwords_data_.ChooseCredential(nullptr);
242 action = metrics_util::ACCOUNT_CHOOSER_DISMISSED; 242 action = metrics_util::ACCOUNT_CHOOSER_DISMISSED;
243 } else { 243 } else {
244 action = signin_button_clicked 244 action = signin_button_clicked
245 ? metrics_util::ACCOUNT_CHOOSER_SIGN_IN 245 ? metrics_util::ACCOUNT_CHOOSER_SIGN_IN
246 : metrics_util::ACCOUNT_CHOOSER_CREDENTIAL_CHOSEN; 246 : metrics_util::ACCOUNT_CHOOSER_CREDENTIAL_CHOSEN;
247 const auto& credentials_forms = 247 const auto& credentials_forms =
248 (type == CredentialType::CREDENTIAL_TYPE_PASSWORD) 248 (type == CredentialType::CREDENTIAL_TYPE_PASSWORD)
249 ? local_credentials_forms() 249 ? local_credentials_forms()
250 : federated_credentials_forms(); 250 : federation_providers_forms();
251 if (index < credentials_forms.size()) { 251 if (index < credentials_forms.size()) {
252 passwords_data_.ChooseCredential(credentials_forms[index]); 252 passwords_data_.ChooseCredential(credentials_forms[index].get());
253 } 253 }
254 } 254 }
255 255
256 if (local_credentials_forms().size() == 1) { 256 if (local_credentials_forms().size() == 1) {
257 password_manager::metrics_util::LogAccountChooserUserActionOneAccount( 257 password_manager::metrics_util::LogAccountChooserUserActionOneAccount(
258 action); 258 action);
259 } else { 259 } else {
260 password_manager::metrics_util::LogAccountChooserUserActionManyAccounts( 260 password_manager::metrics_util::LogAccountChooserUserActionManyAccounts(
261 action); 261 action);
262 } 262 }
263 } 263 }
264 264
265 bool RegisterAccountChooserDialogAndroid(JNIEnv* env) { 265 bool RegisterAccountChooserDialogAndroid(JNIEnv* env) {
266 return RegisterNativesImpl(env); 266 return RegisterNativesImpl(env);
267 } 267 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698