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 @@
#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_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_issues_coordinator.h"
#import "ios/chrome/browser/ui/settings/password/passwords_consumer.h"
......@@ -178,6 +180,7 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf(
BooleanObserver,
ChromeIdentityServiceObserver,
LegacyPasswordDetailsTableViewControllerDelegate,
PasswordDetailsCoordinatorDelegate,
PasswordExporterDelegate,
PasswordExportActivityViewControllerDelegate,
PasswordsConsumer,
......@@ -262,6 +265,10 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf(
// Current state of the Password Check.
@property(nonatomic, assign) PasswordCheckUIState passwordCheckState;
// Coordinator for password details.
@property(nonatomic, strong)
PasswordDetailsCoordinator* passwordDetailsCoordinator;
@end
@implementation PasswordsTableViewController
......@@ -536,6 +543,10 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf(
[_passwordIssuesCoordinator stop];
_passwordIssuesCoordinator.delegate = nil;
_passwordIssuesCoordinator = nil;
[self.passwordDetailsCoordinator stop];
self.passwordDetailsCoordinator.delegate = nil;
self.passwordDetailsCoordinator = nil;
}
#pragma mark - Items
......@@ -896,7 +907,7 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf(
}
- (BOOL)willHandlePasswordDeletion:(const autofill::PasswordForm&)password {
[self passwordDetailsTableViewController:nil deletePassword:password];
[self deletePasswordForm:password];
return YES;
}
......@@ -1208,13 +1219,27 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf(
}
- (void)openDetailedViewForForm:(const autofill::PasswordForm&)form {
LegacyPasswordDetailsTableViewController* controller =
[[LegacyPasswordDetailsTableViewController alloc]
initWithPasswordForm:form
delegate:self
reauthenticationModule:_reauthenticationModule];
controller.dispatcher = self.dispatcher;
[self.navigationController pushViewController:controller animated:YES];
if (base::FeatureList::IsEnabled(
password_manager::features::kPasswordCheck)) {
DCHECK(!self.passwordDetailsCoordinator);
self.passwordDetailsCoordinator = [[PasswordDetailsCoordinator alloc]
initWithBaseNavigationController:self.navigationController
browser:_browser
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 {
......@@ -1470,37 +1495,28 @@ std::vector<std::unique_ptr<autofill::PasswordForm>> CopyOf(
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
- (void)passwordDetailsTableViewController:
(LegacyPasswordDetailsTableViewController*)controller
deletePassword:(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];
[self.navigationController popViewControllerAnimated:YES];
[self deletePasswordForm:form];
}
#pragma mark SuccessfulReauthTimeAccessor
......@@ -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
- (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