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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/autofill/autofill_dialog_controller_impl.h" 5 #include "chrome/browser/ui/autofill/autofill_dialog_controller_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/base64.h"
10 #include "base/bind.h" 11 #include "base/bind.h"
11 #include "base/logging.h" 12 #include "base/logging.h"
12 #include "base/prefs/pref_service.h" 13 #include "base/prefs/pref_service.h"
13 #include "base/string_util.h" 14 #include "base/string_util.h"
14 #include "base/strings/string_number_conversions.h" 15 #include "base/strings/string_number_conversions.h"
15 #include "base/strings/string_split.h" 16 #include "base/strings/string_split.h"
16 #include "base/time.h" 17 #include "base/time.h"
17 #include "base/utf_string_conversions.h" 18 #include "base/utf_string_conversions.h"
18 #include "chrome/browser/autofill/personal_data_manager_factory.h" 19 #include "chrome/browser/autofill/personal_data_manager_factory.h"
19 #include "chrome/browser/browser_process.h" 20 #include "chrome/browser/browser_process.h"
(...skipping 1391 matching lines...) Expand 10 before | Expand all | Expand 10 after
1411 1412
1412 const AutofillMetrics& AutofillDialogControllerImpl::GetMetricLogger() const { 1413 const AutofillMetrics& AutofillDialogControllerImpl::GetMetricLogger() const {
1413 return metric_logger_; 1414 return metric_logger_;
1414 } 1415 }
1415 1416
1416 DialogType AutofillDialogControllerImpl::GetDialogType() const { 1417 DialogType AutofillDialogControllerImpl::GetDialogType() const {
1417 return dialog_type_; 1418 return dialog_type_;
1418 } 1419 }
1419 1420
1420 std::string AutofillDialogControllerImpl::GetRiskData() const { 1421 std::string AutofillDialogControllerImpl::GetRiskData() const {
1421 // TODO(dbeam): Implement this. 1422 // TODO(dbeam): remove the server restriction that this must not be empty.
1422 return "risky business"; 1423 return risk_data_.empty() ? "risky business" : risk_data_;
Ilya Sherman 2013/05/03 07:38:31 Why can risk_data_ be empty? We shouldn't issue r
Dan Beam 2013/05/03 09:24:47 Failed encoding, not loaded yet (there's nothing t
Ilya Sherman 2013/05/07 00:59:30 We should structure the code so that it's guarante
1423 } 1424 }
1424 1425
1425 void AutofillDialogControllerImpl::OnDidAcceptLegalDocuments() { 1426 void AutofillDialogControllerImpl::OnDidAcceptLegalDocuments() {
1426 // TODO(dbeam): Don't send risk params until legal documents are accepted: 1427 legal_docs_current_ = true;
1427 // http://crbug.com/173505 1428 LoadRiskFingerprintData();
1428 } 1429 }
1429 1430
1430 void AutofillDialogControllerImpl::OnDidAuthenticateInstrument(bool success) { 1431 void AutofillDialogControllerImpl::OnDidAuthenticateInstrument(bool success) {
1431 DCHECK(is_submitting_ && IsPayingWithWallet()); 1432 DCHECK(is_submitting_ && IsPayingWithWallet());
1432 1433
1433 // TODO(dbeam): use the returned full wallet. b/8332329 1434 // TODO(dbeam): use the returned full wallet. b/8332329
1434 if (success) 1435 if (success)
1435 GetFullWallet(); 1436 GetFullWallet();
1436 else 1437 else
1437 DisableWallet(); 1438 DisableWallet();
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1496 } 1497 }
1497 1498
1498 void AutofillDialogControllerImpl::OnDidGetWalletItems( 1499 void AutofillDialogControllerImpl::OnDidGetWalletItems(
1499 scoped_ptr<wallet::WalletItems> wallet_items) { 1500 scoped_ptr<wallet::WalletItems> wallet_items) {
1500 DCHECK(account_chooser_model_.WalletIsSelected()); 1501 DCHECK(account_chooser_model_.WalletIsSelected());
1501 legal_documents_text_.clear(); 1502 legal_documents_text_.clear();
1502 legal_document_link_ranges_.clear(); 1503 legal_document_link_ranges_.clear();
1503 1504
1504 // TODO(dbeam): verify items support kCartCurrency? http://crbug.com/232952 1505 // TODO(dbeam): verify items support kCartCurrency? http://crbug.com/232952
1505 wallet_items_ = wallet_items.Pass(); 1506 wallet_items_ = wallet_items.Pass();
1507
1508 legal_docs_current_ = wallet_items_->legal_documents().empty();
1509 if (legal_docs_current_)
1510 LoadRiskFingerprintData();
1511
1506 OnWalletOrSigninUpdate(); 1512 OnWalletOrSigninUpdate();
1507 } 1513 }
1508 1514
1509 void AutofillDialogControllerImpl::OnDidSaveAddress( 1515 void AutofillDialogControllerImpl::OnDidSaveAddress(
1510 const std::string& address_id, 1516 const std::string& address_id,
1511 const std::vector<wallet::RequiredAction>& required_actions) { 1517 const std::vector<wallet::RequiredAction>& required_actions) {
1512 // TODO(dbeam): handle required actions. http://crbug.com/163508 1518 // TODO(dbeam): handle required actions. http://crbug.com/163508
1513 active_address_id_ = address_id; 1519 active_address_id_ = address_id;
1514 GetFullWallet(); 1520 GetFullWallet();
1515 } 1521 }
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
1695 1701
1696 bool AutofillDialogControllerImpl::IsPayingWithWallet() const { 1702 bool AutofillDialogControllerImpl::IsPayingWithWallet() const {
1697 return account_chooser_model_.WalletIsSelected() && 1703 return account_chooser_model_.WalletIsSelected() &&
1698 SignedInState() == SIGNED_IN; 1704 SignedInState() == SIGNED_IN;
1699 } 1705 }
1700 1706
1701 bool AutofillDialogControllerImpl::IsFirstRun() const { 1707 bool AutofillDialogControllerImpl::IsFirstRun() const {
1702 return is_first_run_; 1708 return is_first_run_;
1703 } 1709 }
1704 1710
1711 void AutofillDialogControllerImpl::LoadRiskFingerprintData() {
1712 if (!legal_docs_current_)
1713 return;
Ilya Sherman 2013/05/03 07:38:31 Can this be a DCHECK instead?
Dan Beam 2013/05/03 09:24:47 A DCHECK() is not a strong assurance in release bu
Ilya Sherman 2013/05/07 00:59:30 DCHECKs are used to document expected state. Unle
Dan Beam 2013/05/07 04:02:50 Done.
1714
1715 uint64 obfuscated_gaia_id = 0;
1716 bool success = base::StringToUint64(wallet_items_->obfuscated_gaia_id(),
1717 &obfuscated_gaia_id);
1718 DCHECK(success);
1719
1720 gfx::Rect window_bounds =
1721 GetBaseWindowForWebContents(web_contents())->GetBounds();
1722
1723 PrefService* user_prefs = profile_->GetPrefs();
1724 std::string charset = user_prefs->GetString(::prefs::kDefaultCharset);
1725 std::string accept_languages =
1726 user_prefs->GetString(::prefs::kAcceptLanguages);
1727 base::Time install_time = base::Time::FromTimeT(
1728 g_browser_process->local_state()->GetInt64(::prefs::kInstallDate));
1729
1730 risk::GetFingerprint(
1731 obfuscated_gaia_id, window_bounds, *web_contents(),
1732 chrome::VersionInfo().Version(), charset, accept_languages, install_time,
1733 dialog_type_, g_browser_process->GetApplicationLocale(),
1734 base::Bind(&AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData,
1735 weak_ptr_factory_.GetWeakPtr()));
1736 }
1737
1738 void AutofillDialogControllerImpl::SerializeFingerprint(
1739 risk::Fingerprint* fingerprint, std::string* data) {
1740 fingerprint->SerializeToString(data);
1741 }
1742
1705 void AutofillDialogControllerImpl::DisableWallet() { 1743 void AutofillDialogControllerImpl::DisableWallet() {
1706 signin_helper_.reset(); 1744 signin_helper_.reset();
1707 account_chooser_model_.SetHadWalletError(); 1745 account_chooser_model_.SetHadWalletError();
1708 GetWalletClient()->CancelRequests(); 1746 GetWalletClient()->CancelRequests();
1709 wallet_items_.reset(); 1747 wallet_items_.reset();
1710 full_wallet_.reset(); 1748 full_wallet_.reset();
1711 SetIsSubmitting(false); 1749 SetIsSubmitting(false);
1712 } 1750 }
1713 1751
1714 void AutofillDialogControllerImpl::SuggestionsUpdated() { 1752 void AutofillDialogControllerImpl::SuggestionsUpdated() {
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
2016 DialogSection section) { 2054 DialogSection section) {
2017 return const_cast<DetailInputs*>(&RequestedFieldsForSection(section)); 2055 return const_cast<DetailInputs*>(&RequestedFieldsForSection(section));
2018 } 2056 }
2019 2057
2020 void AutofillDialogControllerImpl::HidePopup() { 2058 void AutofillDialogControllerImpl::HidePopup() {
2021 if (popup_controller_) 2059 if (popup_controller_)
2022 popup_controller_->Hide(); 2060 popup_controller_->Hide();
2023 input_showing_popup_ = NULL; 2061 input_showing_popup_ = NULL;
2024 } 2062 }
2025 2063
2026 void AutofillDialogControllerImpl::LoadRiskFingerprintData() {
2027 // TODO(dbeam): Add a CHECK or otherwise strong guarantee that the ToS have
2028 // been accepted prior to calling into this method. Also, ensure that the UI
2029 // contains a clear indication to the user as to what data will be collected.
2030 // Until then, this code should not be called. http://crbug.com/173505
2031
2032 int64 gaia_id = 0;
2033 bool success =
2034 base::StringToInt64(wallet_items_->obfuscated_gaia_id(), &gaia_id);
2035 DCHECK(success);
2036
2037 gfx::Rect window_bounds =
2038 GetBaseWindowForWebContents(web_contents())->GetBounds();
2039
2040 PrefService* user_prefs = profile_->GetPrefs();
2041 std::string charset = user_prefs->GetString(::prefs::kDefaultCharset);
2042 std::string accept_languages =
2043 user_prefs->GetString(::prefs::kAcceptLanguages);
2044 base::Time install_time = base::Time::FromTimeT(
2045 g_browser_process->local_state()->GetInt64(::prefs::kInstallDate));
2046
2047 risk::GetFingerprint(
2048 gaia_id, window_bounds, *web_contents(), chrome::VersionInfo().Version(),
2049 charset, accept_languages, install_time, dialog_type_,
2050 g_browser_process->GetApplicationLocale(),
2051 base::Bind(&AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData,
2052 weak_ptr_factory_.GetWeakPtr()));
2053 }
2054
2055 void AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData( 2064 void AutofillDialogControllerImpl::OnDidLoadRiskFingerprintData(
2056 scoped_ptr<risk::Fingerprint> fingerprint) { 2065 scoped_ptr<risk::Fingerprint> fingerprint) {
2057 NOTIMPLEMENTED(); 2066 if (!legal_docs_current_)
2067 return;
2068
2069 std::string proto_data;
2070 SerializeFingerprint(fingerprint.get(), &proto_data);
2071
2072 if (!base::Base64Encode(proto_data, &risk_data_))
Dan Beam 2013/05/03 07:29:09 btw, I have no idea how this could fail, but it do
Ilya Sherman 2013/05/03 07:38:31 Yeah, I'm also uncertain. I think a DCHECK might
Dan Beam 2013/05/03 09:24:47 Maybe for this... I just don't understand why this
2073 risk_data_.clear();
2058 } 2074 }
2059 2075
2060 bool AutofillDialogControllerImpl::IsManuallyEditingSection( 2076 bool AutofillDialogControllerImpl::IsManuallyEditingSection(
2061 DialogSection section) const { 2077 DialogSection section) const {
2062 std::map<DialogSection, bool>::const_iterator it = 2078 std::map<DialogSection, bool>::const_iterator it =
2063 section_editing_state_.find(section); 2079 section_editing_state_.find(section);
2064 return (it != section_editing_state_.end() && it->second) || 2080 return (it != section_editing_state_.end() && it->second) ||
2065 SuggestionsMenuModelForSection(section)-> 2081 SuggestionsMenuModelForSection(section)->
2066 GetItemKeyForCheckedItem() == kAddNewItemKey; 2082 GetItemKeyForCheckedItem() == kAddNewItemKey;
2067 } 2083 }
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
2384 url, 2400 url,
2385 content::PAGE_TRANSITION_AUTO_BOOKMARK); 2401 content::PAGE_TRANSITION_AUTO_BOOKMARK);
2386 params.disposition = NEW_FOREGROUND_TAB; 2402 params.disposition = NEW_FOREGROUND_TAB;
2387 chrome::Navigate(&params); 2403 chrome::Navigate(&params);
2388 #else 2404 #else
2389 // TODO(estade): use TabModelList? 2405 // TODO(estade): use TabModelList?
2390 #endif 2406 #endif
2391 } 2407 }
2392 2408
2393 } // namespace autofill 2409 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698