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

Side by Side Diff: ios/chrome/browser/ui/settings/save_passwords_collection_view_controller.mm

Issue 2813223002: [ObjC ARC] Converts ios/chrome/browser/ui/settings:settings to ARC. (Closed)
Patch Set: reabse Created 3 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #import "ios/chrome/browser/ui/settings/save_passwords_collection_view_controlle r.h" 5 #import "ios/chrome/browser/ui/settings/save_passwords_collection_view_controlle r.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/ios/ios_util.h" 10 #include "base/ios/ios_util.h"
11 #import "base/ios/weak_nsobject.h"
12 #include "base/logging.h" 11 #include "base/logging.h"
13 #include "base/mac/foundation_util.h" 12 #include "base/mac/foundation_util.h"
14 #import "base/mac/objc_property_releaser.h" 13
15 #import "base/mac/scoped_nsobject.h"
16 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
17 #include "base/numerics/safe_conversions.h" 15 #include "base/numerics/safe_conversions.h"
18 #include "base/strings/sys_string_conversions.h" 16 #include "base/strings/sys_string_conversions.h"
19 #include "base/strings/utf_string_conversions.h" 17 #include "base/strings/utf_string_conversions.h"
20 #include "components/autofill/core/common/password_form.h" 18 #include "components/autofill/core/common/password_form.h"
21 #include "components/google/core/browser/google_util.h" 19 #include "components/google/core/browser/google_util.h"
22 #include "components/keyed_service/core/service_access_type.h" 20 #include "components/keyed_service/core/service_access_type.h"
23 #include "components/password_manager/core/browser/affiliation_utils.h" 21 #include "components/password_manager/core/browser/affiliation_utils.h"
24 #include "components/password_manager/core/browser/password_manager_constants.h" 22 #include "components/password_manager/core/browser/password_manager_constants.h"
25 #include "components/password_manager/core/browser/password_store.h" 23 #include "components/password_manager/core/browser/password_store.h"
(...skipping 15 matching lines...) Expand all
41 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h" 39 #import "ios/chrome/browser/ui/collection_view/collection_view_model.h"
42 #import "ios/chrome/browser/ui/settings/password_details_collection_view_control ler.h" 40 #import "ios/chrome/browser/ui/settings/password_details_collection_view_control ler.h"
43 #import "ios/chrome/browser/ui/settings/reauthentication_module.h" 41 #import "ios/chrome/browser/ui/settings/reauthentication_module.h"
44 #import "ios/chrome/browser/ui/settings/settings_utils.h" 42 #import "ios/chrome/browser/ui/settings/settings_utils.h"
45 #import "ios/chrome/browser/ui/settings/utils/pref_backed_boolean.h" 43 #import "ios/chrome/browser/ui/settings/utils/pref_backed_boolean.h"
46 #include "ios/chrome/grit/ios_strings.h" 44 #include "ios/chrome/grit/ios_strings.h"
47 #import "ios/third_party/material_components_ios/src/components/Palettes/src/Mat erialPalettes.h" 45 #import "ios/third_party/material_components_ios/src/components/Palettes/src/Mat erialPalettes.h"
48 #include "ui/base/l10n/l10n_util_mac.h" 46 #include "ui/base/l10n/l10n_util_mac.h"
49 #include "url/gurl.h" 47 #include "url/gurl.h"
50 48
49 #if !defined(__has_feature) || !__has_feature(objc_arc)
50 #error "This file requires ARC support."
51 #endif
52
51 namespace { 53 namespace {
52 54
53 typedef NS_ENUM(NSInteger, SectionIdentifier) { 55 typedef NS_ENUM(NSInteger, SectionIdentifier) {
54 SectionIdentifierMessage = kSectionIdentifierEnumZero, 56 SectionIdentifierMessage = kSectionIdentifierEnumZero,
55 SectionIdentifierSavePasswordsSwitch, 57 SectionIdentifierSavePasswordsSwitch,
56 SectionIdentifierSavedPasswords, 58 SectionIdentifierSavedPasswords,
57 SectionIdentifierBlacklist, 59 SectionIdentifierBlacklist,
58 }; 60 };
59 61
60 typedef NS_ENUM(NSInteger, ItemType) { 62 typedef NS_ENUM(NSInteger, ItemType) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 @end 126 @end
125 @implementation BlacklistedFormContentItem 127 @implementation BlacklistedFormContentItem
126 @end 128 @end
127 129
128 @interface SavePasswordsCollectionViewController ()< 130 @interface SavePasswordsCollectionViewController ()<
129 BooleanObserver, 131 BooleanObserver,
130 PasswordDetailsCollectionViewControllerDelegate, 132 PasswordDetailsCollectionViewControllerDelegate,
131 SuccessfulReauthTimeAccessor> { 133 SuccessfulReauthTimeAccessor> {
132 // The observable boolean that binds to the password manager setting state. 134 // The observable boolean that binds to the password manager setting state.
133 // Saved passwords are only on if the password manager is enabled. 135 // Saved passwords are only on if the password manager is enabled.
134 base::scoped_nsobject<PrefBackedBoolean> passwordManagerEnabled_; 136 PrefBackedBoolean* passwordManagerEnabled_;
135 // The item related to the switch for the password manager setting. 137 // The item related to the switch for the password manager setting.
136 base::scoped_nsobject<CollectionViewSwitchItem> savePasswordsItem_; 138 CollectionViewSwitchItem* savePasswordsItem_;
137 // The interface for getting and manipulating a user's saved passwords. 139 // The interface for getting and manipulating a user's saved passwords.
138 scoped_refptr<password_manager::PasswordStore> passwordStore_; 140 scoped_refptr<password_manager::PasswordStore> passwordStore_;
139 // A helper object for passing data about saved passwords from a finished 141 // A helper object for passing data about saved passwords from a finished
140 // password store request to the SavePasswordsCollectionViewController. 142 // password store request to the SavePasswordsCollectionViewController.
141 std::unique_ptr<password_manager::SavePasswordsConsumer> 143 std::unique_ptr<password_manager::SavePasswordsConsumer>
142 savedPasswordsConsumer_; 144 savedPasswordsConsumer_;
143 // A helper object for passing data about blacklisted sites from a finished 145 // A helper object for passing data about blacklisted sites from a finished
144 // password store request to the SavePasswordsCollectionViewController. 146 // password store request to the SavePasswordsCollectionViewController.
145 std::unique_ptr<password_manager::SavePasswordsConsumer> 147 std::unique_ptr<password_manager::SavePasswordsConsumer>
146 blacklistPasswordsConsumer_; 148 blacklistPasswordsConsumer_;
147 // The list of the user's saved passwords. 149 // The list of the user's saved passwords.
148 std::vector<std::unique_ptr<autofill::PasswordForm>> savedForms_; 150 std::vector<std::unique_ptr<autofill::PasswordForm>> savedForms_;
149 // The list of the user's blacklisted sites. 151 // The list of the user's blacklisted sites.
150 std::vector<std::unique_ptr<autofill::PasswordForm>> blacklistedForms_; 152 std::vector<std::unique_ptr<autofill::PasswordForm>> blacklistedForms_;
151 // Deletion of password being asynchronous, and the method taking a reference 153 // Deletion of password being asynchronous, and the method taking a reference
152 // to the PasswordForm, the PasswordForm must outlive the calls to 154 // to the PasswordForm, the PasswordForm must outlive the calls to
153 // RemoveLogin. This vector will ensure this. 155 // RemoveLogin. This vector will ensure this.
154 std::vector<std::unique_ptr<autofill::PasswordForm>> deletedForms_; 156 std::vector<std::unique_ptr<autofill::PasswordForm>> deletedForms_;
155 // The current Chrome browser state. 157 // The current Chrome browser state.
156 ios::ChromeBrowserState* browserState_; 158 ios::ChromeBrowserState* browserState_;
157 // Object storing the time of the previous successful re-authentication. 159 // Object storing the time of the previous successful re-authentication.
158 // This is meant to be used by the |ReauthenticationModule| for keeping 160 // This is meant to be used by the |ReauthenticationModule| for keeping
159 // re-authentications valid for a certain time interval within the scope 161 // re-authentications valid for a certain time interval within the scope
160 // of the Save Passwords Settings. 162 // of the Save Passwords Settings.
161 base::scoped_nsobject<NSDate> successfulReauthTime_; 163 NSDate* successfulReauthTime_;
162 // Module containing the reauthentication mechanism for viewing and copying 164 // Module containing the reauthentication mechanism for viewing and copying
163 // passwords. 165 // passwords.
164 base::scoped_nsobject<ReauthenticationModule> reauthenticationModule_; 166 ReauthenticationModule* reauthenticationModule_;
165
166 base::mac::ObjCPropertyReleaser
167 propertyReleaser_SavePasswordsCollectionViewController_;
168 } 167 }
169 // Kick off async request to get logins from password store. 168 // Kick off async request to get logins from password store.
170 - (void)getLoginsFromPasswordStore; 169 - (void)getLoginsFromPasswordStore;
171 @end 170 @end
172 171
173 @implementation SavePasswordsCollectionViewController 172 @implementation SavePasswordsCollectionViewController
174 173
175 #pragma mark - Initialization 174 #pragma mark - Initialization
176 175
177 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState { 176 - (instancetype)initWithBrowserState:(ios::ChromeBrowserState*)browserState {
178 DCHECK(browserState); 177 DCHECK(browserState);
179 self = [super initWithStyle:CollectionViewControllerStyleAppBar]; 178 self = [super initWithStyle:CollectionViewControllerStyleAppBar];
180 if (self) { 179 if (self) {
181 browserState_ = browserState; 180 browserState_ = browserState;
182 reauthenticationModule_.reset([[ReauthenticationModule alloc] 181 reauthenticationModule_ = [[ReauthenticationModule alloc]
183 initWithSuccessfulReauthTimeAccessor:self]); 182 initWithSuccessfulReauthTimeAccessor:self];
184 self.title = l10n_util::GetNSString(IDS_IOS_SAVE_PASSWORDS); 183 self.title = l10n_util::GetNSString(IDS_IOS_SAVE_PASSWORDS);
185 self.shouldHideDoneButton = YES; 184 self.shouldHideDoneButton = YES;
186 passwordStore_ = IOSChromePasswordStoreFactory::GetForBrowserState( 185 passwordStore_ = IOSChromePasswordStoreFactory::GetForBrowserState(
187 browserState_, ServiceAccessType::EXPLICIT_ACCESS); 186 browserState_, ServiceAccessType::EXPLICIT_ACCESS);
188 DCHECK(passwordStore_); 187 DCHECK(passwordStore_);
189 passwordManagerEnabled_.reset([[PrefBackedBoolean alloc] 188 passwordManagerEnabled_ = [[PrefBackedBoolean alloc]
190 initWithPrefService:browserState_->GetPrefs() 189 initWithPrefService:browserState_->GetPrefs()
191 prefName:password_manager::prefs:: 190 prefName:password_manager::prefs::
192 kPasswordManagerSavingEnabled]); 191 kPasswordManagerSavingEnabled];
193 [passwordManagerEnabled_ setObserver:self]; 192 [passwordManagerEnabled_ setObserver:self];
194 [self getLoginsFromPasswordStore]; 193 [self getLoginsFromPasswordStore];
195 [self updateEditButton]; 194 [self updateEditButton];
196 [self loadModel]; 195 [self loadModel];
197
198 propertyReleaser_SavePasswordsCollectionViewController_.Init(
199 self, [SavePasswordsCollectionViewController class]);
200 } 196 }
201 return self; 197 return self;
202 } 198 }
203 199
204 - (void)dealloc { 200 - (void)dealloc {
205 [passwordManagerEnabled_ setObserver:nil]; 201 [passwordManagerEnabled_ setObserver:nil];
206 [super dealloc];
207 } 202 }
208 203
209 #pragma mark - SettingsRootCollectionViewController 204 #pragma mark - SettingsRootCollectionViewController
210 205
211 - (void)loadModel { 206 - (void)loadModel {
212 [super loadModel]; 207 [super loadModel];
213 CollectionViewModel* model = self.collectionViewModel; 208 CollectionViewModel* model = self.collectionViewModel;
214 209
215 // Manage account message. 210 // Manage account message.
216 CollectionViewItem* manageAccountLinkItem = [self manageAccountLinkItem]; 211 CollectionViewItem* manageAccountLinkItem = [self manageAccountLinkItem];
217 if (manageAccountLinkItem) { 212 if (manageAccountLinkItem) {
218 [model addSectionWithIdentifier:SectionIdentifierMessage]; 213 [model addSectionWithIdentifier:SectionIdentifierMessage];
219 [model addItem:manageAccountLinkItem 214 [model addItem:manageAccountLinkItem
220 toSectionWithIdentifier:SectionIdentifierMessage]; 215 toSectionWithIdentifier:SectionIdentifierMessage];
221 } 216 }
222 217
223 // Save passwords switch. 218 // Save passwords switch.
224 [model addSectionWithIdentifier:SectionIdentifierSavePasswordsSwitch]; 219 [model addSectionWithIdentifier:SectionIdentifierSavePasswordsSwitch];
225 savePasswordsItem_.reset([[self savePasswordsItem] retain]); 220 savePasswordsItem_ = [self savePasswordsItem];
226 [model addItem:savePasswordsItem_ 221 [model addItem:savePasswordsItem_
227 toSectionWithIdentifier:SectionIdentifierSavePasswordsSwitch]; 222 toSectionWithIdentifier:SectionIdentifierSavePasswordsSwitch];
228 223
229 // Saved passwords. 224 // Saved passwords.
230 if ([passwordManagerEnabled_ value]) { 225 if ([passwordManagerEnabled_ value]) {
231 if (!savedForms_.empty()) { 226 if (!savedForms_.empty()) {
232 [model addSectionWithIdentifier:SectionIdentifierSavedPasswords]; 227 [model addSectionWithIdentifier:SectionIdentifierSavedPasswords];
233 CollectionViewTextItem* headerItem = [[[CollectionViewTextItem alloc] 228 CollectionViewTextItem* headerItem =
234 initWithType:ItemTypeHeader] autorelease]; 229 [[CollectionViewTextItem alloc] initWithType:ItemTypeHeader];
235 headerItem.text = 230 headerItem.text =
236 l10n_util::GetNSString(IDS_PASSWORD_MANAGER_SHOW_PASSWORDS_TAB_TITLE); 231 l10n_util::GetNSString(IDS_PASSWORD_MANAGER_SHOW_PASSWORDS_TAB_TITLE);
237 headerItem.textColor = [[MDCPalette greyPalette] tint500]; 232 headerItem.textColor = [[MDCPalette greyPalette] tint500];
238 [model setHeader:headerItem 233 [model setHeader:headerItem
239 forSectionWithIdentifier:SectionIdentifierSavedPasswords]; 234 forSectionWithIdentifier:SectionIdentifierSavedPasswords];
240 for (const auto& form : savedForms_) { 235 for (const auto& form : savedForms_) {
241 [model addItem:[self savedFormItemWithForm:form.get()] 236 [model addItem:[self savedFormItemWithForm:form.get()]
242 toSectionWithIdentifier:SectionIdentifierSavedPasswords]; 237 toSectionWithIdentifier:SectionIdentifierSavedPasswords];
243 } 238 }
244 } 239 }
245 if (!blacklistedForms_.empty()) { 240 if (!blacklistedForms_.empty()) {
246 [model addSectionWithIdentifier:SectionIdentifierBlacklist]; 241 [model addSectionWithIdentifier:SectionIdentifierBlacklist];
247 CollectionViewTextItem* headerItem = [[[CollectionViewTextItem alloc] 242 CollectionViewTextItem* headerItem =
248 initWithType:ItemTypeHeader] autorelease]; 243 [[CollectionViewTextItem alloc] initWithType:ItemTypeHeader];
249 headerItem.text = 244 headerItem.text =
250 l10n_util::GetNSString(IDS_PASSWORD_MANAGER_EXCEPTIONS_TAB_TITLE); 245 l10n_util::GetNSString(IDS_PASSWORD_MANAGER_EXCEPTIONS_TAB_TITLE);
251 headerItem.textColor = [[MDCPalette greyPalette] tint500]; 246 headerItem.textColor = [[MDCPalette greyPalette] tint500];
252 [model setHeader:headerItem 247 [model setHeader:headerItem
253 forSectionWithIdentifier:SectionIdentifierBlacklist]; 248 forSectionWithIdentifier:SectionIdentifierBlacklist];
254 for (const auto& form : blacklistedForms_) { 249 for (const auto& form : blacklistedForms_) {
255 [model addItem:[self blacklistedFormItemWithForm:form.get()] 250 [model addItem:[self blacklistedFormItemWithForm:form.get()]
256 toSectionWithIdentifier:SectionIdentifierBlacklist]; 251 toSectionWithIdentifier:SectionIdentifierBlacklist];
257 } 252 }
258 } 253 }
259 } 254 }
260 } 255 }
261 256
262 #pragma mark - Items 257 #pragma mark - Items
263 258
264 - (CollectionViewItem*)manageAccountLinkItem { 259 - (CollectionViewItem*)manageAccountLinkItem {
265 CollectionViewFooterItem* footerItem = [[[CollectionViewFooterItem alloc] 260 CollectionViewFooterItem* footerItem =
266 initWithType:ItemTypeManageAccount] autorelease]; 261 [[CollectionViewFooterItem alloc] initWithType:ItemTypeManageAccount];
267 footerItem.text = 262 footerItem.text =
268 l10n_util::GetNSString(IDS_IOS_SAVE_PASSWORDS_MANAGE_ACCOUNT); 263 l10n_util::GetNSString(IDS_IOS_SAVE_PASSWORDS_MANAGE_ACCOUNT);
269 footerItem.linkURL = google_util::AppendGoogleLocaleParam( 264 footerItem.linkURL = google_util::AppendGoogleLocaleParam(
270 GURL(password_manager::kPasswordManagerAccountDashboardURL), 265 GURL(password_manager::kPasswordManagerAccountDashboardURL),
271 GetApplicationContext()->GetApplicationLocale()); 266 GetApplicationContext()->GetApplicationLocale());
272 footerItem.linkDelegate = self; 267 footerItem.linkDelegate = self;
273 return footerItem; 268 return footerItem;
274 } 269 }
275 270
276 - (CollectionViewSwitchItem*)savePasswordsItem { 271 - (CollectionViewSwitchItem*)savePasswordsItem {
277 CollectionViewSwitchItem* savePasswordsItem = 272 CollectionViewSwitchItem* savePasswordsItem =
278 [[[CollectionViewSwitchItem alloc] 273 [[CollectionViewSwitchItem alloc]
279 initWithType:ItemTypeSavePasswordsSwitch] autorelease]; 274 initWithType:ItemTypeSavePasswordsSwitch];
280 savePasswordsItem.text = l10n_util::GetNSString(IDS_IOS_SAVE_PASSWORDS); 275 savePasswordsItem.text = l10n_util::GetNSString(IDS_IOS_SAVE_PASSWORDS);
281 savePasswordsItem.on = [passwordManagerEnabled_ value]; 276 savePasswordsItem.on = [passwordManagerEnabled_ value];
282 return savePasswordsItem; 277 return savePasswordsItem;
283 } 278 }
284 279
285 - (SavedFormContentItem*)savedFormItemWithForm:(autofill::PasswordForm*)form { 280 - (SavedFormContentItem*)savedFormItemWithForm:(autofill::PasswordForm*)form {
286 SavedFormContentItem* passwordItem = [[[SavedFormContentItem alloc] 281 SavedFormContentItem* passwordItem =
287 initWithType:ItemTypeSavedPassword] autorelease]; 282 [[SavedFormContentItem alloc] initWithType:ItemTypeSavedPassword];
288 passwordItem.text = 283 passwordItem.text =
289 base::SysUTF8ToNSString(GetHumanReadableOriginCopy(*form)); 284 base::SysUTF8ToNSString(GetHumanReadableOriginCopy(*form));
290 passwordItem.detailText = base::SysUTF16ToNSString(form->username_value); 285 passwordItem.detailText = base::SysUTF16ToNSString(form->username_value);
291 if (experimental_flags::IsViewCopyPasswordsEnabled()) { 286 if (experimental_flags::IsViewCopyPasswordsEnabled()) {
292 passwordItem.accessibilityTraits |= UIAccessibilityTraitButton; 287 passwordItem.accessibilityTraits |= UIAccessibilityTraitButton;
293 passwordItem.accessoryType = 288 passwordItem.accessoryType =
294 MDCCollectionViewCellAccessoryDisclosureIndicator; 289 MDCCollectionViewCellAccessoryDisclosureIndicator;
295 } 290 }
296 return passwordItem; 291 return passwordItem;
297 } 292 }
298 293
299 - (BlacklistedFormContentItem*)blacklistedFormItemWithForm: 294 - (BlacklistedFormContentItem*)blacklistedFormItemWithForm:
300 (autofill::PasswordForm*)form { 295 (autofill::PasswordForm*)form {
301 BlacklistedFormContentItem* passwordItem = 296 BlacklistedFormContentItem* passwordItem =
302 [[[BlacklistedFormContentItem alloc] initWithType:ItemTypeBlacklisted] 297 [[BlacklistedFormContentItem alloc] initWithType:ItemTypeBlacklisted];
303 autorelease];
304 passwordItem.text = 298 passwordItem.text =
305 base::SysUTF8ToNSString(GetHumanReadableOriginCopy(*form)); 299 base::SysUTF8ToNSString(GetHumanReadableOriginCopy(*form));
306 return passwordItem; 300 return passwordItem;
307 } 301 }
308 302
309 #pragma mark - MDCCollectionViewEditingDelegate 303 #pragma mark - MDCCollectionViewEditingDelegate
310 304
311 - (BOOL)collectionViewAllowsEditing:(UICollectionView*)collectionView { 305 - (BOOL)collectionViewAllowsEditing:(UICollectionView*)collectionView {
312 return YES; 306 return YES;
313 } 307 }
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 [switchCell.switchView addTarget:self 376 [switchCell.switchView addTarget:self
383 action:@selector(savePasswordsSwitchChanged:) 377 action:@selector(savePasswordsSwitchChanged:)
384 forControlEvents:UIControlEventValueChanged]; 378 forControlEvents:UIControlEventValueChanged];
385 } 379 }
386 return cell; 380 return cell;
387 } 381 }
388 382
389 #pragma mark - BooleanObserver 383 #pragma mark - BooleanObserver
390 384
391 - (void)booleanDidChange:(id<ObservableBoolean>)observableBoolean { 385 - (void)booleanDidChange:(id<ObservableBoolean>)observableBoolean {
392 DCHECK_EQ(observableBoolean, passwordManagerEnabled_.get()); 386 DCHECK_EQ(observableBoolean, passwordManagerEnabled_);
393 387
394 // Update the item. 388 // Update the item.
395 savePasswordsItem_.get().on = [passwordManagerEnabled_ value]; 389 savePasswordsItem_.on = [passwordManagerEnabled_ value];
396 390
397 // Update the cell. 391 // Update the cell.
398 [self reconfigureCellsForItems:@[ savePasswordsItem_ ]]; 392 [self reconfigureCellsForItems:@[ savePasswordsItem_ ]];
399 393
400 // Update the rest of the UI. 394 // Update the rest of the UI.
401 [self.editor setEditing:NO]; 395 [self.editor setEditing:NO];
402 [self updateEditButton]; 396 [self updateEditButton];
403 [self reloadData]; 397 [self reloadData];
404 } 398 }
405 399
406 #pragma mark - Actions 400 #pragma mark - Actions
407 401
408 - (void)savePasswordsSwitchChanged:(UISwitch*)switchView { 402 - (void)savePasswordsSwitchChanged:(UISwitch*)switchView {
409 // Update the setting. 403 // Update the setting.
410 [passwordManagerEnabled_ setValue:switchView.on]; 404 [passwordManagerEnabled_ setValue:switchView.on];
411 405
412 // Update the item. 406 // Update the item.
413 savePasswordsItem_.get().on = [passwordManagerEnabled_ value]; 407 savePasswordsItem_.on = [passwordManagerEnabled_ value];
414 408
415 // Update the rest of the UI. 409 // Update the rest of the UI.
416 [self.editor setEditing:NO]; 410 [self.editor setEditing:NO];
417 [self updateEditButton]; 411 [self updateEditButton];
418 [self reloadData]; 412 [self reloadData];
419 } 413 }
420 414
421 #pragma mark - Private methods 415 #pragma mark - Private methods
422 416
423 - (void)getLoginsFromPasswordStore { 417 - (void)getLoginsFromPasswordStore {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 if ([model itemTypeForIndexPath:indexPath] == ItemTypeSavedPassword) { 462 if ([model itemTypeForIndexPath:indexPath] == ItemTypeSavedPassword) {
469 DCHECK_EQ([model sectionIdentifierForSection:indexPath.section], 463 DCHECK_EQ([model sectionIdentifierForSection:indexPath.section],
470 SectionIdentifierSavedPasswords); 464 SectionIdentifierSavedPasswords);
471 if (experimental_flags::IsViewCopyPasswordsEnabled()) { 465 if (experimental_flags::IsViewCopyPasswordsEnabled()) {
472 DCHECK_LT(base::checked_cast<size_t>(indexPath.item), savedForms_.size()); 466 DCHECK_LT(base::checked_cast<size_t>(indexPath.item), savedForms_.size());
473 autofill::PasswordForm* form = savedForms_[indexPath.item].get(); 467 autofill::PasswordForm* form = savedForms_[indexPath.item].get();
474 NSString* username = base::SysUTF16ToNSString(form->username_value); 468 NSString* username = base::SysUTF16ToNSString(form->username_value);
475 NSString* password = base::SysUTF16ToNSString(form->password_value); 469 NSString* password = base::SysUTF16ToNSString(form->password_value);
476 NSString* origin = 470 NSString* origin =
477 base::SysUTF8ToNSString(GetHumanReadableOriginCopy(*form)); 471 base::SysUTF8ToNSString(GetHumanReadableOriginCopy(*form));
478 base::scoped_nsobject<UIViewController> controller( 472 UIViewController* controller =
479 [[PasswordDetailsCollectionViewController alloc] 473 [[PasswordDetailsCollectionViewController alloc]
480 initWithPasswordForm:*form 474 initWithPasswordForm:*form
481 delegate:self 475 delegate:self
482 reauthenticationModule:reauthenticationModule_ 476 reauthenticationModule:reauthenticationModule_
483 username:username 477 username:username
484 password:password 478 password:password
485 origin:origin]); 479 origin:origin];
486 [self.navigationController pushViewController:controller animated:YES]; 480 [self.navigationController pushViewController:controller animated:YES];
487 } 481 }
488 } 482 }
489 } 483 }
490 484
491 #pragma mark MDCCollectionViewEditingDelegate 485 #pragma mark MDCCollectionViewEditingDelegate
492 486
493 - (BOOL)collectionView:(UICollectionView*)collectionView 487 - (BOOL)collectionView:(UICollectionView*)collectionView
494 canEditItemAtIndexPath:(NSIndexPath*)indexPath { 488 canEditItemAtIndexPath:(NSIndexPath*)indexPath {
495 // Only password cells are editable. 489 // Only password cells are editable.
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 NSMutableOrderedSet* sectionsToRemove = [NSMutableOrderedSet orderedSet]; 536 NSMutableOrderedSet* sectionsToRemove = [NSMutableOrderedSet orderedSet];
543 // Sort and enumerate in reverse order to delete the items from the collection 537 // Sort and enumerate in reverse order to delete the items from the collection
544 // view model. 538 // view model.
545 NSArray* sortedIndexPaths = 539 NSArray* sortedIndexPaths =
546 [indexPaths sortedArrayUsingSelector:@selector(compare:)]; 540 [indexPaths sortedArrayUsingSelector:@selector(compare:)];
547 for (NSIndexPath* indexPath in [sortedIndexPaths reverseObjectEnumerator]) { 541 for (NSIndexPath* indexPath in [sortedIndexPaths reverseObjectEnumerator]) {
548 if ([collectionView numberOfItemsInSection:indexPath.section] == 0) { 542 if ([collectionView numberOfItemsInSection:indexPath.section] == 0) {
549 [sectionsToRemove addObject:@(indexPath.section)]; 543 [sectionsToRemove addObject:@(indexPath.section)];
550 } 544 }
551 } 545 }
552 base::WeakNSObject<SavePasswordsCollectionViewController> weakSelf(self); 546 __weak SavePasswordsCollectionViewController* weakSelf = self;
553 [self.collectionView performBatchUpdates:^{ 547 [self.collectionView performBatchUpdates:^{
554 base::scoped_nsobject<SavePasswordsCollectionViewController> strongSelf( 548 SavePasswordsCollectionViewController* strongSelf = weakSelf;
555 [weakSelf retain]);
556 if (!strongSelf) 549 if (!strongSelf)
557 return; 550 return;
558 for (NSNumber* sectionNumber in sectionsToRemove) { 551 for (NSNumber* sectionNumber in sectionsToRemove) {
559 NSInteger section = [sectionNumber integerValue]; 552 NSInteger section = [sectionNumber integerValue];
560 NSInteger sectionIdentifier = [[strongSelf collectionViewModel] 553 NSInteger sectionIdentifier = [[strongSelf collectionViewModel]
561 sectionIdentifierForSection:section]; 554 sectionIdentifierForSection:section];
562 [[strongSelf collectionViewModel] 555 [[strongSelf collectionViewModel]
563 removeSectionWithIdentifier:sectionIdentifier]; 556 removeSectionWithIdentifier:sectionIdentifier];
564 [[strongSelf collectionView] 557 [[strongSelf collectionView]
565 deleteSections:[NSIndexSet indexSetWithIndex:section]]; 558 deleteSections:[NSIndexSet indexSetWithIndex:section]];
566 } 559 }
567 } 560 }
568 completion:^(BOOL finished) { 561 completion:^(BOOL finished) {
569 base::scoped_nsobject<SavePasswordsCollectionViewController> strongSelf( 562 SavePasswordsCollectionViewController* strongSelf = weakSelf;
570 [weakSelf retain]);
571 if (!strongSelf) 563 if (!strongSelf)
572 return; 564 return;
573 if (![strongSelf editButtonEnabled]) { 565 if (![strongSelf editButtonEnabled]) {
574 [strongSelf setEditing:NO]; 566 [strongSelf setEditing:NO];
575 } 567 }
576 [strongSelf updateEditButton]; 568 [strongSelf updateEditButton];
577 }]; 569 }];
578 } 570 }
579 571
580 #pragma mark PasswordDetailsCollectionViewControllerDelegate 572 #pragma mark PasswordDetailsCollectionViewControllerDelegate
581 573
582 - (void)deletePassword:(const autofill::PasswordForm&)form { 574 - (void)deletePassword:(const autofill::PasswordForm&)form {
583 passwordStore_->RemoveLogin(form); 575 passwordStore_->RemoveLogin(form);
584 for (auto it = savedForms_.begin(); it != savedForms_.end(); ++it) { 576 for (auto it = savedForms_.begin(); it != savedForms_.end(); ++it) {
585 if (**it == form) { 577 if (**it == form) {
586 savedForms_.erase(it); 578 savedForms_.erase(it);
587 return; 579 return;
588 } 580 }
589 } 581 }
590 [self.navigationController popViewControllerAnimated:YES]; 582 [self.navigationController popViewControllerAnimated:YES];
591 } 583 }
592 584
593 #pragma mark SuccessfulReauthTimeAccessor 585 #pragma mark SuccessfulReauthTimeAccessor
594 586
595 - (void)updateSuccessfulReauthTime { 587 - (void)updateSuccessfulReauthTime {
596 successfulReauthTime_.reset([[NSDate alloc] init]); 588 successfulReauthTime_ = [[NSDate alloc] init];
597 } 589 }
598 590
599 - (NSDate*)lastSuccessfulReauthTime { 591 - (NSDate*)lastSuccessfulReauthTime {
600 return successfulReauthTime_.get(); 592 return successfulReauthTime_;
601 } 593 }
602 594
603 @end 595 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698