OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/android/autofill/autofill_dialog_controller_android.
h" | 5 #include "chrome/browser/ui/android/autofill/autofill_dialog_controller_android.
h" |
6 | 6 |
7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
8 #include "base/android/jni_array.h" | 8 #include "base/android/jni_array.h" |
9 #include "base/android/jni_string.h" | 9 #include "base/android/jni_string.h" |
10 #include "base/android/scoped_java_ref.h" | 10 #include "base/android/scoped_java_ref.h" |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 jmerchant_domain.obj())); | 286 jmerchant_domain.obj())); |
287 } | 287 } |
288 | 288 |
289 void AutofillDialogControllerAndroid::Hide() { | 289 void AutofillDialogControllerAndroid::Hide() { |
290 // TODO(aruslan): http://crbug.com/177373 Autocheckout. | 290 // TODO(aruslan): http://crbug.com/177373 Autocheckout. |
291 NOTIMPLEMENTED(); | 291 NOTIMPLEMENTED(); |
292 } | 292 } |
293 | 293 |
294 void AutofillDialogControllerAndroid::TabActivated() {} | 294 void AutofillDialogControllerAndroid::TabActivated() {} |
295 | 295 |
296 void AutofillDialogControllerAndroid::AddAutocheckoutStep( | |
297 AutocheckoutStepType step_type) { | |
298 // TODO(aruslan): http://crbug.com/177373 Autocheckout. | |
299 NOTIMPLEMENTED() << " step_type = " << step_type; | |
300 } | |
301 | |
302 void AutofillDialogControllerAndroid::UpdateAutocheckoutStep( | |
303 AutocheckoutStepType step_type, | |
304 AutocheckoutStepStatus step_status) { | |
305 // TODO(aruslan): http://crbug.com/177373 Autocheckout. | |
306 NOTIMPLEMENTED() << " step_type=" << step_type | |
307 << " step_status=" << step_status; | |
308 } | |
309 | |
310 void AutofillDialogControllerAndroid::OnAutocheckoutError() { | |
311 // TODO(aruslan): http://crbug.com/177373 Autocheckout. | |
312 NOTIMPLEMENTED(); | |
313 DCHECK_EQ(AUTOCHECKOUT_IN_PROGRESS, autocheckout_state_); | |
314 GetMetricLogger().LogAutocheckoutDuration( | |
315 base::Time::Now() - autocheckout_started_timestamp_, | |
316 AutofillMetrics::AUTOCHECKOUT_FAILED); | |
317 SetAutocheckoutState(AUTOCHECKOUT_ERROR); | |
318 autocheckout_started_timestamp_ = base::Time(); | |
319 } | |
320 | |
321 void AutofillDialogControllerAndroid::OnAutocheckoutSuccess() { | |
322 // TODO(aruslan): http://crbug.com/177373 Autocheckout. | |
323 NOTIMPLEMENTED(); | |
324 DCHECK_EQ(AUTOCHECKOUT_IN_PROGRESS, autocheckout_state_); | |
325 GetMetricLogger().LogAutocheckoutDuration( | |
326 base::Time::Now() - autocheckout_started_timestamp_, | |
327 AutofillMetrics::AUTOCHECKOUT_SUCCEEDED); | |
328 SetAutocheckoutState(AUTOCHECKOUT_SUCCESS); | |
329 autocheckout_started_timestamp_ = base::Time(); | |
330 } | |
331 | |
332 DialogType AutofillDialogControllerAndroid::GetDialogType() const { | 296 DialogType AutofillDialogControllerAndroid::GetDialogType() const { |
333 return dialog_type_; | 297 return dialog_type_; |
334 } | 298 } |
335 | 299 |
336 // static | 300 // static |
337 bool AutofillDialogControllerAndroid:: | 301 bool AutofillDialogControllerAndroid:: |
338 RegisterAutofillDialogControllerAndroid(JNIEnv* env) { | 302 RegisterAutofillDialogControllerAndroid(JNIEnv* env) { |
339 return RegisterNativesImpl(env); | 303 return RegisterNativesImpl(env); |
340 } | 304 } |
341 | 305 |
342 void AutofillDialogControllerAndroid::DialogCancel(JNIEnv* env, | 306 void AutofillDialogControllerAndroid::DialogCancel(JNIEnv* env, |
343 jobject obj) { | 307 jobject obj) { |
344 if (autocheckout_state_ == AUTOCHECKOUT_NOT_STARTED) | 308 LogOnCancelMetrics(); |
345 LogOnCancelMetrics(); | |
346 | |
347 if (autocheckout_state_ == AUTOCHECKOUT_IN_PROGRESS) { | |
348 GetMetricLogger().LogAutocheckoutDuration( | |
349 base::Time::Now() - autocheckout_started_timestamp_, | |
350 AutofillMetrics::AUTOCHECKOUT_CANCELLED); | |
351 } | |
352 | |
353 callback_.Run(NULL, std::string()); | 309 callback_.Run(NULL, std::string()); |
354 } | 310 } |
355 | 311 |
356 void AutofillDialogControllerAndroid::DialogContinue( | 312 void AutofillDialogControllerAndroid::DialogContinue( |
357 JNIEnv* env, | 313 JNIEnv* env, |
358 jobject obj, | 314 jobject obj, |
359 jobject wallet, | 315 jobject wallet, |
360 jboolean jlast_used_choice_is_autofill, | 316 jboolean jlast_used_choice_is_autofill, |
361 jstring jlast_used_account_name, | 317 jstring jlast_used_account_name, |
362 jstring jlast_used_billing, | 318 jstring jlast_used_billing, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 defaults->SetString(kLastUsedBillingAddressGuid, last_used_billing); | 353 defaults->SetString(kLastUsedBillingAddressGuid, last_used_billing); |
398 if (!last_used_shipping.empty()) | 354 if (!last_used_shipping.empty()) |
399 defaults->SetString(kLastUsedShippingAddressGuid, last_used_shipping); | 355 defaults->SetString(kLastUsedShippingAddressGuid, last_used_shipping); |
400 if (!last_used_card.empty()) | 356 if (!last_used_card.empty()) |
401 defaults->SetString(kLastUsedCreditCardGuid, last_used_card); | 357 defaults->SetString(kLastUsedCreditCardGuid, last_used_card); |
402 } else { | 358 } else { |
403 LOG(ERROR) << "Failed to save AutofillDialog preferences"; | 359 LOG(ERROR) << "Failed to save AutofillDialog preferences"; |
404 } | 360 } |
405 } | 361 } |
406 | 362 |
407 if (GetDialogType() == DIALOG_TYPE_AUTOCHECKOUT) { | |
408 autocheckout_started_timestamp_ = base::Time::Now(); | |
409 SetAutocheckoutState(AUTOCHECKOUT_IN_PROGRESS); | |
410 } | |
411 | |
412 LogOnFinishSubmitMetrics(); | 363 LogOnFinishSubmitMetrics(); |
413 | 364 |
414 // Callback should be called as late as possible. | 365 // Callback should be called as late as possible. |
415 callback_.Run(&form_structure_, google_transaction_id); | 366 callback_.Run(&form_structure_, google_transaction_id); |
416 | 367 |
417 // This might delete us. | 368 // This might delete us. |
418 if (GetDialogType() == DIALOG_TYPE_REQUEST_AUTOCOMPLETE) | 369 if (GetDialogType() == DIALOG_TYPE_REQUEST_AUTOCOMPLETE) |
419 Hide(); | 370 Hide(); |
420 } | 371 } |
421 | 372 |
422 AutofillDialogControllerAndroid::AutofillDialogControllerAndroid( | 373 AutofillDialogControllerAndroid::AutofillDialogControllerAndroid( |
423 content::WebContents* contents, | 374 content::WebContents* contents, |
424 const FormData& form_structure, | 375 const FormData& form_structure, |
425 const GURL& source_url, | 376 const GURL& source_url, |
426 const DialogType dialog_type, | 377 const DialogType dialog_type, |
427 const base::Callback<void(const FormStructure*, | 378 const base::Callback<void(const FormStructure*, |
428 const std::string&)>& callback) | 379 const std::string&)>& callback) |
429 : profile_(Profile::FromBrowserContext(contents->GetBrowserContext())), | 380 : profile_(Profile::FromBrowserContext(contents->GetBrowserContext())), |
430 contents_(contents), | 381 contents_(contents), |
431 initial_user_state_(AutofillMetrics::DIALOG_USER_STATE_UNKNOWN), | 382 initial_user_state_(AutofillMetrics::DIALOG_USER_STATE_UNKNOWN), |
432 dialog_type_(dialog_type), | 383 dialog_type_(dialog_type), |
433 form_structure_(form_structure, std::string()), | 384 form_structure_(form_structure), |
434 invoked_from_same_origin_(true), | 385 invoked_from_same_origin_(true), |
435 source_url_(source_url), | 386 source_url_(source_url), |
436 callback_(callback), | 387 callback_(callback), |
437 cares_about_shipping_(true), | 388 cares_about_shipping_(true), |
438 weak_ptr_factory_(this), | 389 weak_ptr_factory_(this), |
439 autocheckout_state_(AUTOCHECKOUT_NOT_STARTED), | |
440 was_ui_latency_logged_(false) { | 390 was_ui_latency_logged_(false) { |
441 DCHECK(!callback_.is_null()); | 391 DCHECK(!callback_.is_null()); |
442 } | 392 } |
443 | 393 |
444 bool AutofillDialogControllerAndroid::RequestingCreditCardInfo() const { | 394 bool AutofillDialogControllerAndroid::RequestingCreditCardInfo() const { |
445 DCHECK_GT(form_structure_.field_count(), 0U); | 395 DCHECK_GT(form_structure_.field_count(), 0U); |
446 | 396 |
447 for (size_t i = 0; i < form_structure_.field_count(); ++i) { | 397 for (size_t i = 0; i < form_structure_.field_count(); ++i) { |
448 AutofillType type = form_structure_.field(i)->Type(); | 398 AutofillType type = form_structure_.field(i)->Type(); |
449 if (common::IsCreditCardType(type.GetStorableType())) | 399 if (common::IsCreditCardType(type.GetStorableType())) |
450 return true; | 400 return true; |
451 } | 401 } |
452 | 402 |
453 return false; | 403 return false; |
454 } | 404 } |
455 | 405 |
456 bool AutofillDialogControllerAndroid::TransmissionWillBeSecure() const { | 406 bool AutofillDialogControllerAndroid::TransmissionWillBeSecure() const { |
457 return source_url_.SchemeIs(chrome::kHttpsScheme); | 407 return source_url_.SchemeIs(chrome::kHttpsScheme); |
458 } | 408 } |
459 | 409 |
460 void AutofillDialogControllerAndroid::SetAutocheckoutState( | |
461 AutocheckoutState autocheckout_state) { | |
462 if (autocheckout_state_ == autocheckout_state) | |
463 return; | |
464 | |
465 autocheckout_state_ = autocheckout_state; | |
466 } | |
467 | |
468 void AutofillDialogControllerAndroid::LogOnFinishSubmitMetrics() { | 410 void AutofillDialogControllerAndroid::LogOnFinishSubmitMetrics() { |
469 GetMetricLogger().LogDialogUiDuration( | 411 GetMetricLogger().LogDialogUiDuration( |
470 base::Time::Now() - dialog_shown_timestamp_, | 412 base::Time::Now() - dialog_shown_timestamp_, |
471 GetDialogType(), | 413 GetDialogType(), |
472 AutofillMetrics::DIALOG_ACCEPTED); | 414 AutofillMetrics::DIALOG_ACCEPTED); |
473 | 415 |
474 GetMetricLogger().LogDialogUiEvent( | 416 GetMetricLogger().LogDialogUiEvent( |
475 GetDialogType(), AutofillMetrics::DIALOG_UI_ACCEPTED); | 417 GetDialogType(), AutofillMetrics::DIALOG_UI_ACCEPTED); |
476 } | 418 } |
477 | 419 |
478 void AutofillDialogControllerAndroid::LogOnCancelMetrics() { | 420 void AutofillDialogControllerAndroid::LogOnCancelMetrics() { |
479 GetMetricLogger().LogDialogUiDuration( | 421 GetMetricLogger().LogDialogUiDuration( |
480 base::Time::Now() - dialog_shown_timestamp_, | 422 base::Time::Now() - dialog_shown_timestamp_, |
481 GetDialogType(), | 423 GetDialogType(), |
482 AutofillMetrics::DIALOG_CANCELED); | 424 AutofillMetrics::DIALOG_CANCELED); |
483 | 425 |
484 GetMetricLogger().LogDialogUiEvent( | 426 GetMetricLogger().LogDialogUiEvent( |
485 GetDialogType(), AutofillMetrics::DIALOG_UI_CANCELED); | 427 GetDialogType(), AutofillMetrics::DIALOG_UI_CANCELED); |
486 } | 428 } |
487 | 429 |
488 } // namespace autofill | 430 } // namespace autofill |
OLD | NEW |