Index: ios/chrome/browser/ui/payments/address_edit_mediator.mm |
diff --git a/ios/chrome/browser/ui/payments/address_edit_mediator.mm b/ios/chrome/browser/ui/payments/address_edit_mediator.mm |
index 568608fb8338ecb9c4b46d5c49626704c24134e4..19a2834e4a32e8cc85f4f058409c3fe70d4a16d5 100644 |
--- a/ios/chrome/browser/ui/payments/address_edit_mediator.mm |
+++ b/ios/chrome/browser/ui/payments/address_edit_mediator.mm |
@@ -10,6 +10,7 @@ |
#include <utility> |
#include "base/callback.h" |
+#include "base/logging.h" |
#include "base/memory/ptr_util.h" |
#include "base/strings/sys_string_conversions.h" |
#include "base/values.h" |
@@ -68,7 +69,6 @@ |
@synthesize consumer = _consumer; |
@synthesize countries = _countries; |
@synthesize selectedCountryCode = _selectedCountryCode; |
-@synthesize regions = _regions; |
@synthesize paymentRequest = _paymentRequest; |
@synthesize address = _address; |
@synthesize fieldsMap = _fieldsMap; |
@@ -126,28 +126,32 @@ |
#pragma mark - RegionDataLoaderConsumer |
- (void)regionDataLoaderDidSucceedWithRegions: |
- (NSMutableArray<NSString*>*)regions { |
- self.regions = regions; |
+ (NSDictionary<NSString*, NSString*>*)regions { |
// Enable the previously disabled field. |
self.regionField.enabled = YES; |
- // If an address is being edited and it has a valid region, the field value is |
- // set to that region. Otherwise, set the field value to nil. If creating an |
- // address, set the first available region as the field value, if possible. |
+ // An autofill profile may have a region code or a region name stored as the |
+ // autofill::ADDRESS_HOME_STATE. If an address is being edited whose value for |
+ // that field type is a valid region code or a valid region name, the editor |
+ // field value is set to the respective region code. Otherwise, it is set to |
+ // nil. |
+ self.regionField.value = nil; |
if (self.address) { |
NSString* region = |
[self fieldValueFromProfile:self.address |
fieldType:autofill::ADDRESS_HOME_STATE]; |
- self.regionField.value = |
- [self.regions containsObject:region] ? region : nil; |
- } else { |
- self.regionField.value = regions.count ? regions[0] : nil; |
+ if ([regions objectForKey:region]) { |
+ self.regionField.value = region; |
+ } else if ([[regions allKeysForObject:region] count]) { |
+ DCHECK(1 == [[regions allKeysForObject:region] count]); |
+ self.regionField.value = [regions allKeysForObject:region][0]; |
+ } |
} |
// Notify the view controller asynchronously to allow for the view to update. |
__weak AddressEditMediator* weakSelf = self; |
dispatch_async(dispatch_get_main_queue(), ^{ |
- [weakSelf.consumer setOptions:weakSelf.regions |
+ [weakSelf.consumer setOptions:[regions allKeys] |
forEditorField:weakSelf.regionField]; |
}); |
} |