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

Unified Diff: chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc

Issue 14904002: Load and send Wallet Risk params after user has agreed (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
index f6a40c6ea0e5c136ad09e43b6d2f13092fd048ce..2cdf1c214d69ff17209b58950eebba241c468a71 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
@@ -7,6 +7,7 @@
#include <algorithm>
#include <string>
+#include "base/base64.h"
#include "base/bind.h"
#include "base/logging.h"
#include "base/prefs/pref_service.h"
@@ -1532,13 +1533,14 @@ DialogType AutofillDialogControllerImpl::GetDialogType() const {
}
std::string AutofillDialogControllerImpl::GetRiskData() const {
- // TODO(dbeam): Implement this.
- return "risky business";
+ return risk_data_;
}
void AutofillDialogControllerImpl::OnDidAcceptLegalDocuments() {
- // TODO(dbeam): Don't send risk params until legal documents are accepted:
- // http://crbug.com/173505
+ DCHECK(is_submitting_ && IsPayingWithWallet());
+
+ has_accepted_legal_documents_ = true;
+ LoadRiskFingerprintData();
}
void AutofillDialogControllerImpl::OnDidAuthenticateInstrument(bool success) {
@@ -1613,6 +1615,7 @@ void AutofillDialogControllerImpl::OnDidGetWalletItems(
scoped_ptr<wallet::WalletItems> wallet_items) {
legal_documents_text_.clear();
legal_document_link_ranges_.clear();
+ has_accepted_legal_documents_ = false;
// TODO(dbeam): verify items support kCartCurrency? http://crbug.com/232952
wallet_items_ = wallet_items.Pass();
@@ -1626,8 +1629,7 @@ void AutofillDialogControllerImpl::OnDidSaveAddress(
if (required_actions.empty()) {
active_address_id_ = address_id;
- if (!active_instrument_id_.empty())
- GetFullWallet();
+ GetFullWalletIfReady();
} else {
HandleSaveOrUpdateRequiredActions(required_actions);
}
@@ -1640,8 +1642,7 @@ void AutofillDialogControllerImpl::OnDidSaveInstrument(
if (required_actions.empty()) {
active_instrument_id_ = instrument_id;
- if (!active_address_id_.empty())
- GetFullWallet();
+ GetFullWalletIfReady();
} else {
HandleSaveOrUpdateRequiredActions(required_actions);
}
@@ -1652,7 +1653,9 @@ void AutofillDialogControllerImpl::OnDidSaveInstrumentAndAddress(
const std::string& address_id,
const std::vector<wallet::RequiredAction>& required_actions) {
OnDidSaveInstrument(instrument_id, required_actions);
- OnDidSaveAddress(address_id, required_actions);
+ // |is_submitting_| can change while in |OnDidSaveInstrument()|.
+ if (is_submitting_)
+ OnDidSaveAddress(address_id, required_actions);
}
void AutofillDialogControllerImpl::OnDidUpdateAddress(
@@ -1763,6 +1766,7 @@ AutofillDialogControllerImpl::AutofillDialogControllerImpl(
weak_ptr_factory_(this),
is_first_run_(!profile_->GetPrefs()->HasPrefPath(
::prefs::kAutofillDialogPayWithoutWallet)),
+ has_accepted_legal_documents_(false),
is_submitting_(false),
wallet_server_validation_error_(false),
autocheckout_state_(AUTOCHECKOUT_NOT_STARTED),
@@ -1792,6 +1796,53 @@ bool AutofillDialogControllerImpl::IsFirstRun() const {
return is_first_run_;
}
+void AutofillDialogControllerImpl::LoadRiskFingerprintData() {
+ DCHECK(AreLegalDocumentsCurrent());
+
+ // Clear potential stale data to ensure |GetFullWalletIfReady()| triggers only
+ // when a new fingerprint is loaded.
+ risk_data_.clear();
+
+ uint64 obfuscated_gaia_id = 0;
+ bool success = base::StringToUint64(wallet_items_->obfuscated_gaia_id(),
+ &obfuscated_gaia_id);
+ DCHECK(success);
+
+ gfx::Rect window_bounds;
+#if !defined(OS_ANDROID)
+ window_bounds = GetBaseWindowForWebContents(web_contents())->GetBounds();
+#else
+ // TODO(dbeam): figure out the correct browser window size to pass along for
+ // android.
+#endif
+
+ PrefService* user_prefs = profile_->GetPrefs();
+ std::string charset = user_prefs->GetString(::prefs::kDefaultCharset);
+ std::string accept_languages =
+ user_prefs->GetString(::prefs::kAcceptLanguages);
+ base::Time install_time = base::Time::FromTimeT(
+ g_browser_process->local_state()->GetInt64(::prefs::kInstallDate));
+
+ risk::GetFingerprint(
+ obfuscated_gaia_id, window_bounds, *web_contents(),
+ chrome::VersionInfo().Version(), charset, accept_languages, install_time,
+ dialog_type_, g_browser_process->GetApplicationLocale(),
+ base::Bind(&AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData,
+ weak_ptr_factory_.GetWeakPtr()));
+}
+
+void AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData(
+ scoped_ptr<risk::Fingerprint> fingerprint) {
+ DCHECK(AreLegalDocumentsCurrent());
+
+ std::string proto_data;
+ fingerprint->SerializeToString(&proto_data);
+ bool success = base::Base64Encode(proto_data, &risk_data_);
+ DCHECK(success);
+
+ GetFullWalletIfReady();
+}
+
void AutofillDialogControllerImpl::OpenTabWithUrl(const GURL& url) {
#if !defined(OS_ANDROID)
chrome::NavigateParams params(
@@ -2146,40 +2197,6 @@ void AutofillDialogControllerImpl::HidePopup() {
input_showing_popup_ = NULL;
}
-void AutofillDialogControllerImpl::LoadRiskFingerprintData() {
- // TODO(dbeam): Add a CHECK or otherwise strong guarantee that the ToS have
- // been accepted prior to calling into this method. Also, ensure that the UI
- // contains a clear indication to the user as to what data will be collected.
- // Until then, this code should not be called. http://crbug.com/173505
-
- uint64 obfuscated_gaia_id = 0;
- bool success = base::StringToUint64(wallet_items_->obfuscated_gaia_id(),
- &obfuscated_gaia_id);
- DCHECK(success);
-
- gfx::Rect window_bounds =
- GetBaseWindowForWebContents(web_contents())->GetBounds();
-
- PrefService* user_prefs = profile_->GetPrefs();
- std::string charset = user_prefs->GetString(::prefs::kDefaultCharset);
- std::string accept_languages =
- user_prefs->GetString(::prefs::kAcceptLanguages);
- base::Time install_time = base::Time::FromTimeT(
- g_browser_process->local_state()->GetInt64(::prefs::kInstallDate));
-
- risk::GetFingerprint(
- obfuscated_gaia_id, window_bounds, *web_contents(),
- chrome::VersionInfo().Version(), charset, accept_languages, install_time,
- GetDialogType(), g_browser_process->GetApplicationLocale(),
- base::Bind(&AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData,
- weak_ptr_factory_.GetWeakPtr()));
-}
-
-void AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData(
- scoped_ptr<risk::Fingerprint> fingerprint) {
- NOTIMPLEMENTED();
-}
-
bool AutofillDialogControllerImpl::IsManuallyEditingSection(
DialogSection section) const {
std::map<DialogSection, bool>::const_iterator it =
@@ -2285,6 +2302,11 @@ void AutofillDialogControllerImpl::SetIsSubmitting(bool submitting) {
}
}
+bool AutofillDialogControllerImpl::AreLegalDocumentsCurrent() const {
+ return has_accepted_legal_documents_ ||
+ (wallet_items_ && wallet_items_->legal_documents().empty());
+}
+
void AutofillDialogControllerImpl::SubmitWithWallet() {
// TODO(dbeam): disallow interacting with the dialog while submitting.
// http://crbug.com/230932
@@ -2302,6 +2324,9 @@ void AutofillDialogControllerImpl::SubmitWithWallet() {
wallet_items_->google_transaction_id(),
source_url_);
+ if (AreLegalDocumentsCurrent())
+ LoadRiskFingerprintData();
+
SuggestionsMenuModel* billing =
SuggestionsMenuModelForSection(SECTION_CC_BILLING);
int instrument_index = -1;
@@ -2325,10 +2350,10 @@ void AutofillDialogControllerImpl::SubmitWithWallet() {
DCHECK(!active_address_id_.empty());
}
- if (!active_instrument_id_.empty() && !active_address_id_.empty()) {
- GetFullWallet();
+ // If there's neither an address nor instrument to save, |GetFullWallet()|
+ // is called when the risk fingerprint is loaded.
+ if (!active_instrument_id_.empty() && !active_address_id_.empty())
return;
- }
scoped_ptr<wallet::Instrument> inputted_instrument =
CreateTransientInstrument();
@@ -2453,6 +2478,16 @@ void AutofillDialogControllerImpl::GetFullWallet() {
capabilities));
}
+void AutofillDialogControllerImpl::GetFullWalletIfReady() {
+ DCHECK(is_submitting_);
+ DCHECK(IsPayingWithWallet());
+
+ if (!active_instrument_id_.empty() && !active_address_id_.empty() &&
+ !risk_data_.empty()) {
+ GetFullWallet();
+ }
+}
+
void AutofillDialogControllerImpl::HandleSaveOrUpdateRequiredActions(
const std::vector<wallet::RequiredAction>& required_actions) {
DCHECK(!required_actions.empty());

Powered by Google App Engine
This is Rietveld 408576698