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

Unified Diff: components/autofill/core/browser/personal_data_manager_mac.mm

Issue 329293002: Revert "Revert 3 mac autofill CLs." (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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: components/autofill/core/browser/personal_data_manager_mac.mm
diff --git a/components/autofill/core/browser/personal_data_manager_mac.mm b/components/autofill/core/browser/personal_data_manager_mac.mm
index 8cae978ac4549911e691aacc3eac7b4dad3c29fc..2be22fca949233856cad780c6f9aa4a3b575c3b0 100644
--- a/components/autofill/core/browser/personal_data_manager_mac.mm
+++ b/components/autofill/core/browser/personal_data_manager_mac.mm
@@ -21,8 +21,10 @@
#include "components/autofill/core/browser/autofill_country.h"
#include "components/autofill/core/browser/autofill_profile.h"
#include "components/autofill/core/browser/autofill_type.h"
+#include "components/autofill/core/browser/form_structure.h"
#include "components/autofill/core/browser/phone_number.h"
#include "components/autofill/core/common/autofill_pref_names.h"
+#include "components/autofill/core/common/form_data.h"
#include "grit/components_strings.h"
#include "ui/base/l10n/l10n_util_mac.h"
@@ -31,6 +33,39 @@ namespace {
const char kAddressBookOrigin[] = "OS X Address Book";
+// Whether Chrome has prompted the user for permission to access the user's
+// address book.
+bool HasPromptedForAccessToAddressBook(PrefService* pref_service) {
+ return pref_service->GetBoolean(prefs::kAutofillMacAddressBookQueried);
+}
+
+// Whether the user wants Chrome to use the AddressBook to populate Autofill
+// entries.
+bool ShouldUseAddressBook(PrefService* pref_service) {
+ return pref_service->GetBoolean(prefs::kAutofillUseMacAddressBook);
+}
+
+ABAddressBook* GetAddressBook(PrefService* pref_service) {
+ bool first_access = !HasPromptedForAccessToAddressBook(pref_service);
+
+ // +[ABAddressBook sharedAddressBook] throws an exception internally in
+ // circumstances that aren't clear. The exceptions are only observed in crash
+ // reports, so it is unknown whether they would be caught by AppKit and nil
+ // returned, or if they would take down the app. In either case, avoid
+ // crashing. http://crbug.com/129022
+ ABAddressBook* addressBook = base::mac::RunBlockIgnoringExceptions(
+ ^{ return [ABAddressBook sharedAddressBook]; });
+ UMA_HISTOGRAM_BOOLEAN("Autofill.AddressBookAvailable", addressBook != nil);
+
+ if (first_access) {
+ UMA_HISTOGRAM_BOOLEAN("Autofill.AddressBookAvailableOnFirstAttempt",
+ addressBook != nil);
+ }
+
+ pref_service->SetBoolean(prefs::kAutofillMacAddressBookQueried, true);
+ return addressBook;
+}
+
// This implementation makes use of the Address Book API. Profiles are
// generated that correspond to addresses in the "me" card that reside in the
// user's Address Book. The caller passes a vector of profiles into the
@@ -81,20 +116,12 @@ void AuxiliaryProfilesImpl::GetAddressBookMeCard(const std::string& app_locale,
PrefService* pref_service) {
profiles_.clear();
- // +[ABAddressBook sharedAddressBook] throws an exception internally in
- // circumstances that aren't clear. The exceptions are only observed in crash
- // reports, so it is unknown whether they would be caught by AppKit and nil
- // returned, or if they would take down the app. In either case, avoid
- // crashing. http://crbug.com/129022
- ABAddressBook* addressBook = base::mac::RunBlockIgnoringExceptions(^{
- return [ABAddressBook sharedAddressBook];
- });
- UMA_HISTOGRAM_BOOLEAN("Autofill.AddressBookAvailable", addressBook != nil);
- if (!pref_service->GetBoolean(prefs::kAutofillAuxiliaryProfilesQueried)) {
- pref_service->SetBoolean(prefs::kAutofillAuxiliaryProfilesQueried, true);
- UMA_HISTOGRAM_BOOLEAN("Autofill.AddressBookAvailableOnFirstAttempt",
- addressBook != nil);
- }
+ // The user does not want Chrome to use the AddressBook to populate Autofill
+ // entries.
+ if (!ShouldUseAddressBook(pref_service))
+ return;
+
+ ABAddressBook* addressBook = GetAddressBook(pref_service);
ABPerson* me = [addressBook me];
if (!me)
@@ -281,4 +308,39 @@ void PersonalDataManager::LoadAuxiliaryProfiles() const {
impl.GetAddressBookMeCard(app_locale_, pref_service_);
}
+bool PersonalDataManager::AccessAddressBook() {
+ // The user is attempting to give Chrome access to the user's Address Book.
+ // This implicitly acknowledges that the user wants to use auxiliary
+ // profiles.
+ pref_service_->SetBoolean(prefs::kAutofillUseMacAddressBook, true);
+
+ // Request permissions.
+ GetAddressBook(pref_service_);
+ return true;
+}
+
+bool PersonalDataManager::ShouldShowAccessAddressBookSuggestion(
+ AutofillType type) {
+ if (HasPromptedForAccessToAddressBook(pref_service_))
+ return false;
+
+ switch (type.group()) {
+ case ADDRESS_BILLING:
+ case ADDRESS_HOME:
+ case EMAIL:
+ case NAME:
+ case NAME_BILLING:
+ case PHONE_BILLING:
+ case PHONE_HOME:
+ return true;
+ case NO_GROUP:
+ case COMPANY:
+ case CREDIT_CARD:
+ case PASSWORD_FIELD:
+ return false;
+ }
+
+ return false;
+}
+
} // namespace autofill
« no previous file with comments | « components/autofill/core/browser/personal_data_manager.cc ('k') | components/autofill/core/browser/popup_item_ids.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698