Commit 4ca3c99e authored by Viktor Semeniuk's avatar Viktor Semeniuk Committed by Commit Bot

[iOS][Password Check] Showing new password details from Passwords

This change shows new Password Details screen from Passwords screen  in
the scope of Password Check feature.

Bug: 1075494
Change-Id: Ic103bce25166beae8eff42b5c3281ace39d1b965
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2359130
Commit-Queue: Viktor Semeniuk <vsemeniuk@google.com>
Reviewed-by: default avatarSergio Collazos <sczs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#800121}
parent 18c23b63
...@@ -51,6 +51,8 @@ ...@@ -51,6 +51,8 @@
#import "ios/chrome/browser/ui/settings/elements/enterprise_info_popover_view_controller.h" #import "ios/chrome/browser/ui/settings/elements/enterprise_info_popover_view_controller.h"
#import "ios/chrome/browser/ui/settings/password/legacy_password_details_table_view_controller.h" #import "ios/chrome/browser/ui/settings/password/legacy_password_details_table_view_controller.h"
#import "ios/chrome/browser/ui/settings/password/legacy_password_details_table_view_controller_delegate.h" #import "ios/chrome/browser/ui/settings/password/legacy_password_details_table_view_controller_delegate.h"
#import "ios/chrome/browser/ui/settings/password/password_details/password_details_coordinator.h"
#import "ios/chrome/browser/ui/settings/password/password_details/password_details_coordinator_delegate.h"
#import "ios/chrome/browser/ui/settings/password/password_exporter.h" #import "ios/chrome/browser/ui/settings/password/password_exporter.h"
#import "ios/chrome/browser/ui/settings/password/password_issues_coordinator.h" #import "ios/chrome/browser/ui/settings/password/password_issues_coordinator.h"
#import "ios/chrome/browser/ui/settings/password/passwords_consumer.h" #import "ios/chrome/browser/ui/settings/password/passwords_consumer.h"
...@@ -178,6 +180,7 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf( ...@@ -178,6 +180,7 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf(
BooleanObserver, BooleanObserver,
ChromeIdentityServiceObserver, ChromeIdentityServiceObserver,
LegacyPasswordDetailsTableViewControllerDelegate, LegacyPasswordDetailsTableViewControllerDelegate,
PasswordDetailsCoordinatorDelegate,
PasswordExporterDelegate, PasswordExporterDelegate,
PasswordExportActivityViewControllerDelegate, PasswordExportActivityViewControllerDelegate,
PasswordsConsumer, PasswordsConsumer,
...@@ -262,6 +265,10 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf( ...@@ -262,6 +265,10 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf(
// Current state of the Password Check. // Current state of the Password Check.
@property(nonatomic, assign) PasswordCheckUIState passwordCheckState; @property(nonatomic, assign) PasswordCheckUIState passwordCheckState;
// Coordinator for password details.
@property(nonatomic, strong)
PasswordDetailsCoordinator* passwordDetailsCoordinator;
@end @end
@implementation PasswordsTableViewController @implementation PasswordsTableViewController
...@@ -536,6 +543,10 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf( ...@@ -536,6 +543,10 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf(
[_passwordIssuesCoordinator stop]; [_passwordIssuesCoordinator stop];
_passwordIssuesCoordinator.delegate = nil; _passwordIssuesCoordinator.delegate = nil;
_passwordIssuesCoordinator = nil; _passwordIssuesCoordinator = nil;
[self.passwordDetailsCoordinator stop];
self.passwordDetailsCoordinator.delegate = nil;
self.passwordDetailsCoordinator = nil;
} }
#pragma mark - Items #pragma mark - Items
...@@ -896,7 +907,7 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf( ...@@ -896,7 +907,7 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf(
} }
- (BOOL)willHandlePasswordDeletion:(const autofill::PasswordForm&)password { - (BOOL)willHandlePasswordDeletion:(const autofill::PasswordForm&)password {
[self passwordDetailsTableViewController:nil deletePassword:password]; [self deletePasswordForm:password];
return YES; return YES;
} }
...@@ -1208,13 +1219,27 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf( ...@@ -1208,13 +1219,27 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf(
} }
- (void)openDetailedViewForForm:(const autofill::PasswordForm&)form { - (void)openDetailedViewForForm:(const autofill::PasswordForm&)form {
LegacyPasswordDetailsTableViewController* controller = if (base::FeatureList::IsEnabled(
[[LegacyPasswordDetailsTableViewController alloc] password_manager::features::kPasswordCheck)) {
initWithPasswordForm:form DCHECK(!self.passwordDetailsCoordinator);
delegate:self self.passwordDetailsCoordinator = [[PasswordDetailsCoordinator alloc]
reauthenticationModule:_reauthenticationModule]; initWithBaseNavigationController:self.navigationController
controller.dispatcher = self.dispatcher; browser:_browser
[self.navigationController pushViewController:controller animated:YES]; password:form
reauthModule:_reauthenticationModule
passwordCheckManager:_passwordCheck.get()];
self.passwordDetailsCoordinator.dispatcher = self.dispatcher;
self.passwordDetailsCoordinator.delegate = self;
[self.passwordDetailsCoordinator start];
} else {
LegacyPasswordDetailsTableViewController* controller =
[[LegacyPasswordDetailsTableViewController alloc]
initWithPasswordForm:form
delegate:self
reauthenticationModule:_reauthenticationModule];
controller.dispatcher = self.dispatcher;
[self.navigationController pushViewController:controller animated:YES];
}
} }
- (void)deleteItemAtIndexPaths:(NSArray<NSIndexPath*>*)indexPaths { - (void)deleteItemAtIndexPaths:(NSArray<NSIndexPath*>*)indexPaths {
...@@ -1470,37 +1495,28 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf( ...@@ -1470,37 +1495,28 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf(
return cell; return cell;
} }
#pragma mark PasswordDetailsCoordinatorDelegate
- (void)passwordDetailsCoordinatorDidRemove:
(PasswordDetailsCoordinator*)coordinator {
DCHECK_EQ(self.passwordDetailsCoordinator, coordinator);
[self.passwordDetailsCoordinator stop];
self.passwordDetailsCoordinator.delegate = nil;
self.passwordDetailsCoordinator = nil;
}
- (void)passwordDetailsCoordinator:(PasswordDetailsCoordinator*)coordinator
deletePassword:(const autofill::PasswordForm&)password {
DCHECK_EQ(self.passwordDetailsCoordinator, coordinator);
[self deletePasswordForm:password];
}
#pragma mark LegacyPasswordDetailsTableViewControllerDelegate #pragma mark LegacyPasswordDetailsTableViewControllerDelegate
- (void)passwordDetailsTableViewController: - (void)passwordDetailsTableViewController:
(LegacyPasswordDetailsTableViewController*)controller (LegacyPasswordDetailsTableViewController*)controller
deletePassword:(const autofill::PasswordForm&)form { deletePassword:(const autofill::PasswordForm&)form {
_passwordStore->RemoveLogin(form); [self deletePasswordForm:form];
std::vector<std::unique_ptr<autofill::PasswordForm>>& forms =
form.blocked_by_user ? _blockedForms : _savedForms;
auto iterator = std::find_if(
forms.begin(), forms.end(),
[&form](const std::unique_ptr<autofill::PasswordForm>& value) {
return *value == form;
});
DCHECK(iterator != forms.end());
forms.erase(iterator);
password_manager::DuplicatesMap& duplicates = form.blocked_by_user
? _blockedPasswordDuplicates
: _savedPasswordDuplicates;
std::string key = password_manager::CreateSortKey(form);
auto duplicatesRange = duplicates.equal_range(key);
for (auto iterator = duplicatesRange.first;
iterator != duplicatesRange.second; ++iterator) {
_passwordStore->RemoveLogin(*(iterator->second));
}
duplicates.erase(key);
[self updateUIForEditState];
[self reloadData];
[self.navigationController popViewControllerAnimated:YES];
} }
#pragma mark SuccessfulReauthTimeAccessor #pragma mark SuccessfulReauthTimeAccessor
...@@ -1661,6 +1677,38 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf( ...@@ -1661,6 +1677,38 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf(
} }
} }
// Deletes passed password form and updates list accordingly.
- (void)deletePasswordForm:(const autofill::PasswordForm&)form {
_passwordStore->RemoveLogin(form);
std::vector<std::unique_ptr<autofill::PasswordForm>>& forms =
form.blocked_by_user ? _blockedForms : _savedForms;
auto iterator = std::find_if(
forms.begin(), forms.end(),
[&form](const std::unique_ptr<autofill::PasswordForm>& value) {
return *value == form;
});
DCHECK(iterator != forms.end());
forms.erase(iterator);
password_manager::DuplicatesMap& duplicates = form.blocked_by_user
? _blockedPasswordDuplicates
: _savedPasswordDuplicates;
std::string key = password_manager::CreateSortKey(form);
auto duplicatesRange = duplicates.equal_range(key);
for (auto iterator = duplicatesRange.first;
iterator != duplicatesRange.second; ++iterator) {
_passwordStore->RemoveLogin(*(iterator->second));
}
duplicates.erase(key);
[self updateUIForEditState];
[self reloadData];
// TODO(crbug.com/1096986): Delete this once
// LegacyPasswordDetailsTableViewController is removed.
[self.navigationController popViewControllerAnimated:YES];
}
#pragma mark - Testing #pragma mark - Testing
- (void)setReauthenticationModuleForExporter: - (void)setReauthenticationModuleForExporter:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment