diff --git a/ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.mm b/ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.mm index 95452a0c750c8c..1b0b5613a9a0c0 100644 --- a/ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.mm +++ b/ios/chrome/browser/ui/settings/google_services/google_services_settings_coordinator.mm @@ -205,7 +205,7 @@ - (void)openReauthDialogAsSyncIsInAuthError { - (void)openPassphraseDialog { SyncEncryptionPassphraseTableViewController* controller = [[SyncEncryptionPassphraseTableViewController alloc] - initWithBrowserState:self.browser->GetBrowserState()]; + initWithBrowser:self.browser]; // TODO(crbug.com/1045047): Use HandlerForProtocol after commands protocol // clean up. controller.dispatcher = static_cast< diff --git a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.mm b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.mm index 860d7f303a4f74..575b8e35df90bd 100644 --- a/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.mm +++ b/ios/chrome/browser/ui/settings/google_services/manage_sync_settings_coordinator.mm @@ -144,10 +144,10 @@ - (void)openPassphraseDialog { // Otherwise, show the full encryption options. if (self.syncService->GetUserSettings()->IsPassphraseRequired()) { controllerToPush = [[SyncEncryptionPassphraseTableViewController alloc] - initWithBrowserState:self.browser->GetBrowserState()]; + initWithBrowser:self.browser]; } else { controllerToPush = [[SyncEncryptionTableViewController alloc] - initWithBrowserState:self.browser->GetBrowserState()]; + initWithBrowser:self.browser]; } // TODO(crbug.com/1045047): Use HandlerForProtocol after commands protocol // clean up. diff --git a/ios/chrome/browser/ui/settings/settings_navigation_controller.mm b/ios/chrome/browser/ui/settings/settings_navigation_controller.mm index 12e1b26db88152..b88529fcfc7171 100644 --- a/ios/chrome/browser/ui/settings/settings_navigation_controller.mm +++ b/ios/chrome/browser/ui/settings/settings_navigation_controller.mm @@ -127,7 +127,7 @@ @implementation SettingsNavigationController DCHECK(browser); SyncEncryptionPassphraseTableViewController* controller = [[SyncEncryptionPassphraseTableViewController alloc] - initWithBrowserState:browser->GetBrowserState()]; + initWithBrowser:browser]; controller.dispatcher = [delegate handlerForSettings]; SettingsNavigationController* nc = [[SettingsNavigationController alloc] initWithRootViewController:controller @@ -513,7 +513,7 @@ - (void)showSyncPassphraseSettingsFromViewController: (UIViewController*)baseViewController { SyncEncryptionPassphraseTableViewController* controller = [[SyncEncryptionPassphraseTableViewController alloc] - initWithBrowserState:self.browser->GetBrowserState()]; + initWithBrowser:self.browser]; controller.dispatcher = [self.settingsNavigationDelegate handlerForSettings]; [self pushViewController:controller animated:YES]; } diff --git a/ios/chrome/browser/ui/settings/sync/BUILD.gn b/ios/chrome/browser/ui/settings/sync/BUILD.gn index a573d2acc30fe3..f832148d732b72 100644 --- a/ios/chrome/browser/ui/settings/sync/BUILD.gn +++ b/ios/chrome/browser/ui/settings/sync/BUILD.gn @@ -26,6 +26,7 @@ source_set("sync") { "//ios/chrome/browser", "//ios/chrome/browser", "//ios/chrome/browser/browser_state", + "//ios/chrome/browser/main:public", "//ios/chrome/browser/signin", "//ios/chrome/browser/sync", "//ios/chrome/browser/ui:feature_flags", @@ -74,6 +75,7 @@ source_set("unit_tests") { "//ios/chrome/browser", "//ios/chrome/browser", "//ios/chrome/browser/browser_state:test_support", + "//ios/chrome/browser/main:test_support", "//ios/chrome/browser/prefs", "//ios/chrome/browser/prefs:browser_prefs", "//ios/chrome/browser/sync", diff --git a/ios/chrome/browser/ui/settings/sync/sync_create_passphrase_table_view_controller.mm b/ios/chrome/browser/ui/settings/sync/sync_create_passphrase_table_view_controller.mm index 3ee69f18b2962a..e4d2a88a9941ed 100644 --- a/ios/chrome/browser/ui/settings/sync/sync_create_passphrase_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/sync/sync_create_passphrase_table_view_controller.mm @@ -30,8 +30,8 @@ - (TableViewItem*)confirmPassphraseItem; @implementation SyncCreatePassphraseTableViewController -- (instancetype)initWithBrowserState:(ChromeBrowserState*)browserState { - self = [super initWithBrowserState:browserState]; +- (instancetype)initWithBrowser:(Browser*)browser { + self = [super initWithBrowser:browser]; if (self) { self.title = l10n_util::GetNSString(IDS_IOS_SYNC_ENCRYPTION_CREATE_PASSPHRASE); diff --git a/ios/chrome/browser/ui/settings/sync/sync_create_passphrase_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/sync/sync_create_passphrase_table_view_controller_unittest.mm index 73c07c5b1804f7..f76597cb137d6f 100644 --- a/ios/chrome/browser/ui/settings/sync/sync_create_passphrase_table_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/settings/sync/sync_create_passphrase_table_view_controller_unittest.mm @@ -44,7 +44,7 @@ void TearDown() override { ChromeTableViewController* InstantiateController() override { return [[SyncCreatePassphraseTableViewController alloc] - initWithBrowserState:chrome_browser_state_.get()]; + initWithBrowser:browser_.get()]; } SyncCreatePassphraseTableViewController* SyncController() { diff --git a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.h b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.h index 401f2d02a908c4..cf6271cc6cba03 100644 --- a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.h +++ b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.h @@ -10,7 +10,7 @@ #import "ios/chrome/browser/sync/sync_observer_bridge.h" #import "ios/chrome/browser/ui/settings/settings_root_table_view_controller.h" -class ChromeBrowserState; +class Browser; namespace sync_encryption_passphrase { typedef NS_ENUM(NSInteger, SectionIdentifier) { @@ -36,8 +36,7 @@ typedef NS_ENUM(NSInteger, ItemType) { @property(nonatomic, copy) NSString* syncErrorMessage; // |browserState| must not be nil. -- (instancetype)initWithBrowserState:(ChromeBrowserState*)browserState - NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithBrowser:(Browser*)browser NS_DESIGNATED_INITIALIZER; - (instancetype)initWithStyle:(UITableViewStyle)style NS_UNAVAILABLE; @end diff --git a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm index 9cacdbb5cdd9c4..ddb4538daf9a51 100644 --- a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller.mm @@ -19,6 +19,7 @@ #include "ios/chrome/browser/application_context.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/chrome_url_constants.h" +#import "ios/chrome/browser/main/browser.h" #import "ios/chrome/browser/signin/authentication_service.h" #include "ios/chrome/browser/signin/authentication_service_factory.h" #include "ios/chrome/browser/signin/identity_manager_factory.h" @@ -60,7 +61,6 @@ @interface SyncEncryptionPassphraseTableViewController () < IdentityManagerObserverBridgeDelegate, SettingsControllerProtocol> { - ChromeBrowserState* _browserState; // Whether the decryption progress is currently being shown. BOOL _isDecryptionProgressShown; NSString* _savedTitle; @@ -71,26 +71,31 @@ @interface SyncEncryptionPassphraseTableViewController () < UITextField* _passphrase; } +@property(nonatomic, assign, readonly) Browser* browser; + @end @implementation SyncEncryptionPassphraseTableViewController -- (instancetype)initWithBrowserState:(ChromeBrowserState*)browserState { - DCHECK(browserState); +@synthesize browser = _browser; + +- (instancetype)initWithBrowser:(Browser*)browser { + DCHECK(browser); UITableViewStyle style = base::FeatureList::IsEnabled(kSettingsRefresh) ? UITableViewStylePlain : UITableViewStyleGrouped; self = [super initWithStyle:style]; if (self) { + _browser = browser; + ChromeBrowserState* browserState = self.browser->GetBrowserState(); self.title = l10n_util::GetNSString(IDS_IOS_SYNC_ENTER_PASSPHRASE_TITLE); self.shouldHideDoneButton = YES; - _browserState = browserState; NSString* userEmail = - [AuthenticationServiceFactory::GetForBrowserState(_browserState) + [AuthenticationServiceFactory::GetForBrowserState(browserState) ->GetAuthenticatedIdentity() userEmail]; DCHECK(userEmail); syncer::SyncService* service = - ProfileSyncServiceFactory::GetForBrowserState(_browserState); + ProfileSyncServiceFactory::GetForBrowserState(browserState); if (service->IsEngineInitialized() && service->GetUserSettings()->IsUsingSecondaryPassphrase()) { base::Time passphrase_time = @@ -115,7 +120,7 @@ - (instancetype)initWithBrowserState:(ChromeBrowserState*)browserState { _identityManagerObserver = std::make_unique( - IdentityManagerFactory::GetForBrowserState(_browserState), self); + IdentityManagerFactory::GetForBrowserState(browserState), self); } return self; } @@ -127,8 +132,9 @@ - (UITextField*)passphrase { - (NSString*)syncErrorMessage { if (_syncErrorMessage) return _syncErrorMessage; + ChromeBrowserState* browserState = self.browser->GetBrowserState(); SyncSetupService* service = - SyncSetupServiceFactory::GetForBrowserState(_browserState); + SyncSetupServiceFactory::GetForBrowserState(browserState); DCHECK(service); SyncSetupService::SyncServiceState syncServiceState = service->GetSyncServiceState(); @@ -137,7 +143,7 @@ - (NSString*)syncErrorMessage { if (syncServiceState == SyncSetupService::kSyncServiceNeedsPassphrase) return nil; - return GetSyncErrorMessageForBrowserState(_browserState); + return GetSyncErrorMessageForBrowserState(browserState); } #pragma mark - View lifecycle @@ -279,17 +285,18 @@ - (BOOL)forDecryption { - (void)signInPressed { DCHECK([_passphrase text].length); + ChromeBrowserState* browserState = self.browser->GetBrowserState(); if (!_syncObserver.get()) { _syncObserver.reset(new SyncObserverBridge( - self, ProfileSyncServiceFactory::GetForBrowserState(_browserState))); + self, ProfileSyncServiceFactory::GetForBrowserState(browserState))); } // Clear out the error message. self.syncErrorMessage = nil; syncer::SyncService* service = - ProfileSyncServiceFactory::GetForBrowserState(_browserState); + ProfileSyncServiceFactory::GetForBrowserState(browserState); DCHECK(service); // It is possible for a race condition to happen where a user is allowed // to call the backend with the passphrase before the backend is @@ -468,8 +475,9 @@ - (void)textFieldDidEndEditing:(id)sender { #pragma mark - SyncObserverModelBridge - (void)onSyncStateChanged { + ChromeBrowserState* browserState = self.browser->GetBrowserState(); syncer::SyncService* service = - ProfileSyncServiceFactory::GetForBrowserState(_browserState); + ProfileSyncServiceFactory::GetForBrowserState(browserState); if (!service->IsEngineInitialized()) { return; @@ -498,7 +506,8 @@ - (void)onSyncStateChanged { #pragma mark - IdentityManagerObserverBridgeDelegate - (void)onEndBatchOfRefreshTokenStateChanges { - if (AuthenticationServiceFactory::GetForBrowserState(_browserState) + ChromeBrowserState* browserState = self.browser->GetBrowserState(); + if (AuthenticationServiceFactory::GetForBrowserState(browserState) ->IsAuthenticated()) { return; } diff --git a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller_unittest.mm index f4b441d5a72e1d..0c40cbb4b14880 100644 --- a/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/settings/sync/sync_encryption_passphrase_table_view_controller_unittest.mm @@ -88,7 +88,7 @@ void TearDown() override { ChromeTableViewController* InstantiateController() override { return [[SyncEncryptionPassphraseTableViewController alloc] - initWithBrowserState:chrome_browser_state_.get()]; + initWithBrowser:browser_.get()]; } SyncEncryptionPassphraseTableViewController* SyncController() { diff --git a/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller.h b/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller.h index 6959dfee045bc2..eda2df2bfde140 100644 --- a/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller.h +++ b/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller.h @@ -7,14 +7,13 @@ #import "ios/chrome/browser/ui/settings/settings_root_table_view_controller.h" -class ChromeBrowserState; +class Browser; // Controller to allow user to specify encryption passphrase for Sync. @interface SyncEncryptionTableViewController : SettingsRootTableViewController // Designated initializer. |browserState| must not be nil. -- (instancetype)initWithBrowserState:(ChromeBrowserState*)browserState - NS_DESIGNATED_INITIALIZER; +- (instancetype)initWithBrowser:(Browser*)browser NS_DESIGNATED_INITIALIZER; - (instancetype)initWithStyle:(UITableViewStyle)style NS_UNAVAILABLE; @end diff --git a/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller.mm b/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller.mm index 7a932b301a1912..22c45ddfd177bb 100644 --- a/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller.mm +++ b/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller.mm @@ -17,6 +17,7 @@ #include "ios/chrome/browser/application_context.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/chrome_url_constants.h" +#import "ios/chrome/browser/main/browser.h" #include "ios/chrome/browser/sync/profile_sync_service_factory.h" #import "ios/chrome/browser/sync/sync_observer_bridge.h" #import "ios/chrome/browser/ui/settings/sync/sync_create_passphrase_table_view_controller.h" @@ -53,25 +54,30 @@ typedef NS_ENUM(NSInteger, ItemType) { } // namespace @interface SyncEncryptionTableViewController () { - ChromeBrowserState* _browserState; std::unique_ptr _syncObserver; BOOL _isUsingSecondaryPassphrase; } + +@property(nonatomic, assign, readonly) Browser* browser; + @end @implementation SyncEncryptionTableViewController -- (instancetype)initWithBrowserState:(ChromeBrowserState*)browserState { - DCHECK(browserState); +@synthesize browser = _browser; + +- (instancetype)initWithBrowser:(Browser*)browser { + DCHECK(browser); UITableViewStyle style = base::FeatureList::IsEnabled(kSettingsRefresh) ? UITableViewStylePlain : UITableViewStyleGrouped; self = [super initWithStyle:style]; if (self) { + _browser = browser; + ChromeBrowserState* browserState = self.browser->GetBrowserState(); self.title = l10n_util::GetNSString(IDS_IOS_SYNC_ENCRYPTION_TITLE); - _browserState = browserState; syncer::SyncService* syncService = - ProfileSyncServiceFactory::GetForBrowserState(_browserState); + ProfileSyncServiceFactory::GetForBrowserState(browserState); _isUsingSecondaryPassphrase = syncService->IsEngineInitialized() && syncService->GetUserSettings()->IsUsingSecondaryPassphrase(); @@ -165,13 +171,14 @@ - (void)tableView:(UITableView*)tableView switch (item.type) { case ItemTypePassphrase: { DCHECK(switches::IsSyncAllowedByFlag()); + ChromeBrowserState* browserState = self.browser->GetBrowserState(); syncer::SyncService* service = - ProfileSyncServiceFactory::GetForBrowserState(_browserState); + ProfileSyncServiceFactory::GetForBrowserState(browserState); if (service->IsEngineInitialized() && !service->GetUserSettings()->IsUsingSecondaryPassphrase()) { SyncCreatePassphraseTableViewController* controller = [[SyncCreatePassphraseTableViewController alloc] - initWithBrowserState:_browserState]; + initWithBrowser:self.browser]; if (controller) { controller.dispatcher = self.dispatcher; [self.navigationController pushViewController:controller @@ -192,8 +199,9 @@ - (void)tableView:(UITableView*)tableView #pragma mark SyncObserverModelBridge - (void)onSyncStateChanged { + ChromeBrowserState* browserState = self.browser->GetBrowserState(); syncer::SyncService* service = - ProfileSyncServiceFactory::GetForBrowserState(_browserState); + ProfileSyncServiceFactory::GetForBrowserState(browserState); BOOL isNowUsingSecondaryPassphrase = service->IsEngineInitialized() && service->GetUserSettings()->IsUsingSecondaryPassphrase(); diff --git a/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller_unittest.mm index de23d4beb2f41d..0f78711aa5fa77 100644 --- a/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/settings/sync/sync_encryption_table_view_controller_unittest.mm @@ -11,6 +11,7 @@ #include "components/strings/grit/components_strings.h" #include "components/sync/driver/test_sync_service.h" #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" +#import "ios/chrome/browser/main/test_browser.h" #include "ios/chrome/browser/sync/profile_sync_service_factory.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_text_item.h" #import "ios/chrome/browser/ui/table_view/chrome_table_view_controller_test.h" @@ -39,13 +40,13 @@ void SetUp() override { test_cbs_builder.AddTestingFactory( ProfileSyncServiceFactory::GetInstance(), base::BindRepeating(&CreateTestSyncService)); - chrome_browser_state_ = test_cbs_builder.Build(); + browser_ = std::make_unique(); ChromeTableViewControllerTest::SetUp(); + ChromeBrowserState* browserState = browser_.get()->GetBrowserState(); syncer::TestSyncService* test_sync_service = static_cast( - ProfileSyncServiceFactory::GetForBrowserState( - chrome_browser_state_.get())); + ProfileSyncServiceFactory::GetForBrowserState(browserState)); test_sync_service->SetIsUsingSecondaryPassphrase(true); CreateController(); @@ -53,11 +54,11 @@ void SetUp() override { ChromeTableViewController* InstantiateController() override { return [[SyncEncryptionTableViewController alloc] - initWithBrowserState:chrome_browser_state_.get()]; + initWithBrowser:browser_.get()]; } web::WebTaskEnvironment task_environment_; - std::unique_ptr chrome_browser_state_; + std::unique_ptr browser_; }; TEST_F(SyncEncryptionTableViewControllerTest, TestModel) {