Commit cbf0f912 authored by Mikel Astiz's avatar Mikel Astiz Committed by Commit Bot

Simplify ios session sync logic

SessionSyncService's API is sufficient to achieve the desired
behavior, i.e. distinguish the exact state for tab sync: off,
initial download in progress and done. It also issues a
notification every time that state changes, so there's no need to
monitor updates from ProfileSyncService directly.

Bug: 895455
Change-Id: Icf66328fdde97f833e178f0571dedb248c91beca
Reviewed-on: https://chromium-review.googlesource.com/c/1344029Reviewed-by: default avatarSergio Collazos <sczs@chromium.org>
Commit-Queue: Mikel Astiz <mastiz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#612077}
parent 742582a3
...@@ -73,7 +73,7 @@ void SyncSetupService::SetDataTypeEnabled(syncer::ModelType datatype, ...@@ -73,7 +73,7 @@ void SyncSetupService::SetDataTypeEnabled(syncer::ModelType datatype,
SetSyncEnabled(false); SetSyncEnabled(false);
} }
bool SyncSetupService::UserActionIsRequiredToHaveSyncWork() { bool SyncSetupService::UserActionIsRequiredToHaveTabSyncWork() {
if (!IsSyncEnabled() || !IsDataTypePreferred(syncer::PROXY_TABS)) { if (!IsSyncEnabled() || !IsDataTypePreferred(syncer::PROXY_TABS)) {
return true; return true;
} }
......
...@@ -44,7 +44,7 @@ class SyncSetupService : public KeyedService { ...@@ -44,7 +44,7 @@ class SyncSetupService : public KeyedService {
kNumberOfSyncableDatatypes kNumberOfSyncableDatatypes
}; };
SyncSetupService(syncer::SyncService* sync_service); explicit SyncSetupService(syncer::SyncService* sync_service);
~SyncSetupService() override; ~SyncSetupService() override;
// Returns the |syncer::ModelType| associated to the given // Returns the |syncer::ModelType| associated to the given
...@@ -72,8 +72,8 @@ class SyncSetupService : public KeyedService { ...@@ -72,8 +72,8 @@ class SyncSetupService : public KeyedService {
void SetDataTypeEnabled(syncer::ModelType datatype, bool enabled); void SetDataTypeEnabled(syncer::ModelType datatype, bool enabled);
// Returns whether the user needs to enter a passphrase or enable sync to make // Returns whether the user needs to enter a passphrase or enable sync to make
// sync work. // tab sync work.
bool UserActionIsRequiredToHaveSyncWork(); bool UserActionIsRequiredToHaveTabSyncWork();
// Returns whether all datatypes are being synced. // Returns whether all datatypes are being synced.
virtual bool IsSyncingAllDataTypes() const; virtual bool IsSyncingAllDataTypes() const;
......
...@@ -18,7 +18,6 @@ source_set("recent_tabs") { ...@@ -18,7 +18,6 @@ source_set("recent_tabs") {
":recent_tabs_ui", ":recent_tabs_ui",
"resources:show_history", "resources:show_history",
"//base", "//base",
"//components/browser_sync",
"//components/sessions", "//components/sessions",
"//components/sync", "//components/sync",
"//ios/chrome/app/strings", "//ios/chrome/app/strings",
...@@ -58,7 +57,6 @@ source_set("recent_tabs_ui") { ...@@ -58,7 +57,6 @@ source_set("recent_tabs_ui") {
] ]
deps = [ deps = [
"//base", "//base",
"//components/browser_sync",
"//components/sessions", "//components/sessions",
"//components/strings", "//components/strings",
"//components/sync", "//components/sync",
...@@ -97,7 +95,7 @@ source_set("unit_tests") { ...@@ -97,7 +95,7 @@ source_set("unit_tests") {
":recent_tabs_ui", ":recent_tabs_ui",
"//base", "//base",
"//components/browser_sync", "//components/browser_sync",
"//components/browser_sync:test_support", "//components/sync:test_support_model",
"//components/sync_sessions", "//components/sync_sessions",
"//ios/chrome/browser/browser_state:test_support", "//ios/chrome/browser/browser_state:test_support",
"//ios/chrome/browser/signin", "//ios/chrome/browser/signin",
......
...@@ -9,11 +9,12 @@ ...@@ -9,11 +9,12 @@
#include <memory> #include <memory>
#include "components/browser_sync/profile_sync_service.h" #include "components/browser_sync/profile_sync_service.h"
#include "components/browser_sync/profile_sync_service_mock.h" #include "components/sync/model/fake_model_type_controller_delegate.h"
#include "components/sync_sessions/open_tabs_ui_delegate.h" #include "components/sync_sessions/open_tabs_ui_delegate.h"
#include "components/sync_sessions/session_sync_service.h"
#include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h"
#include "ios/chrome/browser/sync/ios_chrome_profile_sync_test_util.h"
#include "ios/chrome/browser/sync/profile_sync_service_factory.h" #include "ios/chrome/browser/sync/profile_sync_service_factory.h"
#include "ios/chrome/browser/sync/session_sync_service_factory.h"
#include "ios/chrome/browser/sync/sync_setup_service.h" #include "ios/chrome/browser/sync/sync_setup_service.h"
#include "ios/chrome/browser/sync/sync_setup_service_factory.h" #include "ios/chrome/browser/sync/sync_setup_service_factory.h"
#include "ios/chrome/browser/sync/sync_setup_service_mock.h" #include "ios/chrome/browser/sync/sync_setup_service_mock.h"
...@@ -32,7 +33,6 @@ ...@@ -32,7 +33,6 @@
#endif #endif
using testing::_; using testing::_;
using testing::AtLeast;
using testing::Return; using testing::Return;
namespace { namespace {
...@@ -43,26 +43,35 @@ std::unique_ptr<KeyedService> CreateSyncSetupService( ...@@ -43,26 +43,35 @@ std::unique_ptr<KeyedService> CreateSyncSetupService(
ios::ChromeBrowserState::FromBrowserState(context); ios::ChromeBrowserState::FromBrowserState(context);
syncer::SyncService* sync_service = syncer::SyncService* sync_service =
ProfileSyncServiceFactory::GetForBrowserState(chrome_browser_state); ProfileSyncServiceFactory::GetForBrowserState(chrome_browser_state);
return std::make_unique<SyncSetupServiceMock>(sync_service); return std::make_unique<testing::NiceMock<SyncSetupServiceMock>>(
sync_service);
} }
class ProfileSyncServiceMockForRecentTabsTableCoordinator class SessionSyncServiceMockForRecentTabsTableCoordinator
: public browser_sync::ProfileSyncServiceMock { : public sync_sessions::SessionSyncService {
public: public:
explicit ProfileSyncServiceMockForRecentTabsTableCoordinator( SessionSyncServiceMockForRecentTabsTableCoordinator() {}
InitParams init_params) ~SessionSyncServiceMockForRecentTabsTableCoordinator() override {}
: browser_sync::ProfileSyncServiceMock(std::move(init_params)) {}
~ProfileSyncServiceMockForRecentTabsTableCoordinator() override {}
MOCK_CONST_METHOD0(GetGlobalIdMapper, syncer::GlobalIdMapper*());
MOCK_METHOD0(GetOpenTabsUIDelegate, sync_sessions::OpenTabsUIDelegate*()); MOCK_METHOD0(GetOpenTabsUIDelegate, sync_sessions::OpenTabsUIDelegate*());
MOCK_METHOD1(SubscribeToForeignSessionsChanged,
std::unique_ptr<base::CallbackList<void()>::Subscription>(
const base::RepeatingClosure& cb));
MOCK_METHOD0(ScheduleGarbageCollection, void());
MOCK_METHOD0(GetControllerDelegate,
base::WeakPtr<syncer::ModelTypeControllerDelegate>());
MOCK_METHOD0(GetFaviconCache, sync_sessions::FaviconCache*());
MOCK_METHOD1(ProxyTabsStateChanged,
void(syncer::DataTypeController::State state));
MOCK_METHOD1(SetSyncSessionsGUID, void(const std::string& guid));
}; };
std::unique_ptr<KeyedService> std::unique_ptr<KeyedService>
BuildMockProfileSyncServiceForRecentTabsTableCoordinator( BuildMockSessionSyncServiceForRecentTabsTableCoordinator(
web::BrowserState* context) { web::BrowserState* context) {
return std::make_unique<ProfileSyncServiceMockForRecentTabsTableCoordinator>( return std::make_unique<
CreateProfileSyncServiceParamsForTest( testing::NiceMock<SessionSyncServiceMockForRecentTabsTableCoordinator>>();
nullptr, ios::ChromeBrowserState::FromBrowserState(context)));
} }
class OpenTabsUIDelegateMock : public sync_sessions::OpenTabsUIDelegate { class OpenTabsUIDelegateMock : public sync_sessions::OpenTabsUIDelegate {
...@@ -93,7 +102,9 @@ class OpenTabsUIDelegateMock : public sync_sessions::OpenTabsUIDelegate { ...@@ -93,7 +102,9 @@ class OpenTabsUIDelegateMock : public sync_sessions::OpenTabsUIDelegate {
class RecentTabsTableCoordinatorTest : public BlockCleanupTest { class RecentTabsTableCoordinatorTest : public BlockCleanupTest {
public: public:
RecentTabsTableCoordinatorTest() : no_error_(GoogleServiceAuthError::NONE) {} RecentTabsTableCoordinatorTest()
: no_error_(GoogleServiceAuthError::NONE),
fake_controller_delegate_(syncer::SESSIONS) {}
protected: protected:
void SetUp() override { void SetUp() override {
...@@ -104,24 +115,10 @@ class RecentTabsTableCoordinatorTest : public BlockCleanupTest { ...@@ -104,24 +115,10 @@ class RecentTabsTableCoordinatorTest : public BlockCleanupTest {
SyncSetupServiceFactory::GetInstance(), SyncSetupServiceFactory::GetInstance(),
base::BindRepeating(&CreateSyncSetupService)); base::BindRepeating(&CreateSyncSetupService));
test_cbs_builder.AddTestingFactory( test_cbs_builder.AddTestingFactory(
ProfileSyncServiceFactory::GetInstance(), SessionSyncServiceFactory::GetInstance(),
base::BindRepeating( base::BindRepeating(
&BuildMockProfileSyncServiceForRecentTabsTableCoordinator)); &BuildMockSessionSyncServiceForRecentTabsTableCoordinator));
chrome_browser_state_ = test_cbs_builder.Build(); chrome_browser_state_ = test_cbs_builder.Build();
ProfileSyncServiceMockForRecentTabsTableCoordinator* sync_service =
static_cast<ProfileSyncServiceMockForRecentTabsTableCoordinator*>(
ProfileSyncServiceFactory::GetForBrowserState(
chrome_browser_state_.get()));
EXPECT_CALL(*sync_service, GetAuthError())
.WillRepeatedly(::testing::ReturnRef(no_error_));
ON_CALL(*sync_service, GetRegisteredDataTypes())
.WillByDefault(Return(syncer::ModelTypeSet()));
sync_service->Initialize();
EXPECT_CALL(*sync_service, GetTransportState())
.WillRepeatedly(Return(syncer::SyncService::TransportState::ACTIVE));
EXPECT_CALL(*sync_service, GetOpenTabsUIDelegate())
.WillRepeatedly(Return(nullptr));
} }
void TearDown() override { void TearDown() override {
...@@ -133,6 +130,7 @@ class RecentTabsTableCoordinatorTest : public BlockCleanupTest { ...@@ -133,6 +130,7 @@ class RecentTabsTableCoordinatorTest : public BlockCleanupTest {
void SetupSyncState(BOOL signedIn, void SetupSyncState(BOOL signedIn,
BOOL syncEnabled, BOOL syncEnabled,
BOOL syncCompleted,
BOOL hasForeignSessions) { BOOL hasForeignSessions) {
if (signedIn) { if (signedIn) {
identity_test_env_.MakePrimaryAccountAvailable("test@test.com"); identity_test_env_.MakePrimaryAccountAvailable("test@test.com");
...@@ -143,39 +141,35 @@ class RecentTabsTableCoordinatorTest : public BlockCleanupTest { ...@@ -143,39 +141,35 @@ class RecentTabsTableCoordinatorTest : public BlockCleanupTest {
signin_metrics::SignoutDelete::IGNORE_METRIC); signin_metrics::SignoutDelete::IGNORE_METRIC);
} }
SessionSyncServiceMockForRecentTabsTableCoordinator* session_sync_service =
static_cast<SessionSyncServiceMockForRecentTabsTableCoordinator*>(
SessionSyncServiceFactory::GetForBrowserState(
chrome_browser_state_.get()));
// Needed by ProfileSyncService's initialization, triggered during
// initialization of SyncSetupServiceMock.
ON_CALL(*session_sync_service, GetControllerDelegate())
.WillByDefault(Return(fake_controller_delegate_.GetWeakPtr()));
SyncSetupServiceMock* syncSetupService = static_cast<SyncSetupServiceMock*>( SyncSetupServiceMock* syncSetupService = static_cast<SyncSetupServiceMock*>(
SyncSetupServiceFactory::GetForBrowserState( SyncSetupServiceFactory::GetForBrowserState(
chrome_browser_state_.get())); chrome_browser_state_.get()));
EXPECT_CALL(*syncSetupService, IsSyncEnabled()) ON_CALL(*syncSetupService, IsSyncEnabled())
.WillRepeatedly(Return(syncEnabled)); .WillByDefault(Return(syncEnabled));
EXPECT_CALL(*syncSetupService, IsDataTypePreferred(syncer::PROXY_TABS)) ON_CALL(*syncSetupService, IsDataTypePreferred(syncer::PROXY_TABS))
.WillRepeatedly(Return(true)); .WillByDefault(Return(true));
EXPECT_CALL(*syncSetupService, GetSyncServiceState()) ON_CALL(*syncSetupService, GetSyncServiceState())
.WillRepeatedly(Return(SyncSetupService::kNoSyncServiceError)); .WillByDefault(Return(SyncSetupService::kNoSyncServiceError));
if (syncEnabled) { if (syncCompleted) {
ProfileSyncServiceMockForRecentTabsTableCoordinator* sync_service = ON_CALL(*session_sync_service, GetOpenTabsUIDelegate())
static_cast<ProfileSyncServiceMockForRecentTabsTableCoordinator*>( .WillByDefault(Return(&open_tabs_ui_delegate_));
ProfileSyncServiceFactory::GetForBrowserState( ON_CALL(open_tabs_ui_delegate_, GetAllForeignSessions(_))
chrome_browser_state_.get())); .WillByDefault(Return(hasForeignSessions));
open_tabs_ui_delegate_.reset(new OpenTabsUIDelegateMock());
EXPECT_CALL(*sync_service, GetOpenTabsUIDelegate())
.WillRepeatedly(Return(open_tabs_ui_delegate_.get()));
EXPECT_CALL(*open_tabs_ui_delegate_, GetAllForeignSessions(_))
.WillRepeatedly(Return(hasForeignSessions));
} }
} }
void CreateController() { void CreateController() {
// Sets up the test expectations for the Sync Service Observer Bridge.
// RecentTabsTableCoordinator must be added as an observer of
// ProfileSyncService changes and removed when it is destroyed.
browser_sync::ProfileSyncServiceMock* sync_service =
static_cast<browser_sync::ProfileSyncServiceMock*>(
ProfileSyncServiceFactory::GetForBrowserState(
chrome_browser_state_.get()));
EXPECT_CALL(*sync_service, AddObserver(_)).Times(AtLeast(1));
EXPECT_CALL(*sync_service, RemoveObserver(_)).Times(AtLeast(1));
coordinator_ = [[RecentTabsCoordinator alloc] coordinator_ = [[RecentTabsCoordinator alloc]
initWithBaseViewController:nil initWithBaseViewController:nil
browserState:chrome_browser_state_.get()]; browserState:chrome_browser_state_.get()];
...@@ -188,8 +182,9 @@ class RecentTabsTableCoordinatorTest : public BlockCleanupTest { ...@@ -188,8 +182,9 @@ class RecentTabsTableCoordinatorTest : public BlockCleanupTest {
IOSChromeScopedTestingLocalState local_state_; IOSChromeScopedTestingLocalState local_state_;
identity::IdentityTestEnvironment identity_test_env_; identity::IdentityTestEnvironment identity_test_env_;
syncer::FakeModelTypeControllerDelegate fake_controller_delegate_;
testing::NiceMock<OpenTabsUIDelegateMock> open_tabs_ui_delegate_;
std::unique_ptr<TestChromeBrowserState> chrome_browser_state_; std::unique_ptr<TestChromeBrowserState> chrome_browser_state_;
std::unique_ptr<OpenTabsUIDelegateMock> open_tabs_ui_delegate_;
// Must be declared *after* |chrome_browser_state_| so it can outlive it. // Must be declared *after* |chrome_browser_state_| so it can outlive it.
RecentTabsCoordinator* coordinator_; RecentTabsCoordinator* coordinator_;
...@@ -201,22 +196,31 @@ TEST_F(RecentTabsTableCoordinatorTest, TestConstructorDestructor) { ...@@ -201,22 +196,31 @@ TEST_F(RecentTabsTableCoordinatorTest, TestConstructorDestructor) {
} }
TEST_F(RecentTabsTableCoordinatorTest, TestUserSignedOut) { TEST_F(RecentTabsTableCoordinatorTest, TestUserSignedOut) {
SetupSyncState(NO, NO, NO); // TODO(crbug.com/907495): Actual test expectations are missing below.
SetupSyncState(NO, NO, NO, NO);
CreateController(); CreateController();
} }
TEST_F(RecentTabsTableCoordinatorTest, TestUserSignedInSyncOff) { TEST_F(RecentTabsTableCoordinatorTest, TestUserSignedInSyncOff) {
SetupSyncState(YES, NO, NO); // TODO(crbug.com/907495): Actual test expectations are missing below.
SetupSyncState(YES, NO, NO, NO);
CreateController(); CreateController();
} }
TEST_F(RecentTabsTableCoordinatorTest, TestUserSignedInSyncInProgress) { TEST_F(RecentTabsTableCoordinatorTest, TestUserSignedInSyncInProgress) {
SetupSyncState(YES, YES, NO); // TODO(crbug.com/907495): Actual test expectations are missing below.
SetupSyncState(YES, YES, NO, NO);
CreateController();
}
TEST_F(RecentTabsTableCoordinatorTest, TestUserSignedInSyncOnWithoutSessions) {
// TODO(crbug.com/907495): Actual test expectations are missing below.
SetupSyncState(YES, YES, YES, NO);
CreateController(); CreateController();
} }
TEST_F(RecentTabsTableCoordinatorTest, TestUserSignedInSyncOnWithSessions) { TEST_F(RecentTabsTableCoordinatorTest, TestUserSignedInSyncOnWithSessions) {
SetupSyncState(YES, YES, YES); // TODO(crbug.com/907495): Actual test expectations are missing below.
SetupSyncState(YES, YES, YES, YES);
CreateController(); CreateController();
} }
......
...@@ -139,7 +139,7 @@ const CGFloat kFaviconMinWidthHeight = 16; ...@@ -139,7 +139,7 @@ const CGFloat kFaviconMinWidthHeight = 16;
DCHECK([self isSignedIn]); DCHECK([self isSignedIn]);
SyncSetupService* service = SyncSetupService* service =
SyncSetupServiceFactory::GetForBrowserState(_browserState); SyncSetupServiceFactory::GetForBrowserState(_browserState);
return !service->UserActionIsRequiredToHaveSyncWork(); return !service->UserActionIsRequiredToHaveTabSyncWork();
} }
// Returns whether this profile has any foreign sessions to sync. // Returns whether this profile has any foreign sessions to sync.
...@@ -148,25 +148,29 @@ const CGFloat kFaviconMinWidthHeight = 16; ...@@ -148,25 +148,29 @@ const CGFloat kFaviconMinWidthHeight = 16;
return SessionsSyncUserState::USER_SIGNED_OUT; return SessionsSyncUserState::USER_SIGNED_OUT;
if (![self isSyncTabsEnabled]) if (![self isSyncTabsEnabled])
return SessionsSyncUserState::USER_SIGNED_IN_SYNC_OFF; return SessionsSyncUserState::USER_SIGNED_IN_SYNC_OFF;
if ([self hasForeignSessions])
return SessionsSyncUserState::USER_SIGNED_IN_SYNC_ON_WITH_SESSIONS;
if (![self isSyncCompleted]) if (![self isSyncCompleted])
return SessionsSyncUserState::USER_SIGNED_IN_SYNC_IN_PROGRESS; return SessionsSyncUserState::USER_SIGNED_IN_SYNC_IN_PROGRESS;
if ([self hasForeignSessions])
return SessionsSyncUserState::USER_SIGNED_IN_SYNC_ON_WITH_SESSIONS;
return SessionsSyncUserState::USER_SIGNED_IN_SYNC_ON_NO_SESSIONS; return SessionsSyncUserState::USER_SIGNED_IN_SYNC_ON_NO_SESSIONS;
} }
- (BOOL)isSyncCompleted {
sync_sessions::SessionSyncService* service =
SessionSyncServiceFactory::GetForBrowserState(_browserState);
DCHECK(service);
return service->GetOpenTabsUIDelegate() != nullptr;
}
- (BOOL)hasForeignSessions { - (BOOL)hasForeignSessions {
sync_sessions::SessionSyncService* service = sync_sessions::SessionSyncService* service =
SessionSyncServiceFactory::GetForBrowserState(_browserState); SessionSyncServiceFactory::GetForBrowserState(_browserState);
DCHECK(service); DCHECK(service);
sync_sessions::OpenTabsUIDelegate* openTabs = sync_sessions::OpenTabsUIDelegate* openTabs =
service->GetOpenTabsUIDelegate(); service->GetOpenTabsUIDelegate();
DCHECK(openTabs);
std::vector<const sync_sessions::SyncedSession*> sessions; std::vector<const sync_sessions::SyncedSession*> sessions;
return openTabs ? openTabs->GetAllForeignSessions(&sessions) : NO; return openTabs->GetAllForeignSessions(&sessions);
}
- (BOOL)isSyncCompleted {
return _syncedSessionsObserver->IsFirstSyncCycleCompleted();
} }
#pragma mark - RecentTabsTableViewControllerDelegate #pragma mark - RecentTabsTableViewControllerDelegate
......
...@@ -11,8 +11,6 @@ ...@@ -11,8 +11,6 @@
#include "base/callback_list.h" #include "base/callback_list.h"
#include "base/macros.h" #include "base/macros.h"
#include "components/sync/driver/sync_service_observer.h"
#import "ios/chrome/browser/sync/sync_observer_bridge.h"
#include "services/identity/public/cpp/identity_manager.h" #include "services/identity/public/cpp/identity_manager.h"
namespace ios { namespace ios {
...@@ -23,7 +21,7 @@ namespace identity { ...@@ -23,7 +21,7 @@ namespace identity {
class IdentityManager; class IdentityManager;
} }
@protocol SyncedSessionsObserver<SyncObserverModelBridge> @protocol SyncedSessionsObserver
// Reloads the session data. // Reloads the session data.
- (void)reloadSessions; - (void)reloadSessions;
@end @end
...@@ -33,21 +31,15 @@ namespace synced_sessions { ...@@ -33,21 +31,15 @@ namespace synced_sessions {
// Bridge class that will notify the panel when the remote sessions content // Bridge class that will notify the panel when the remote sessions content
// change. // change.
class SyncedSessionsObserverBridge class SyncedSessionsObserverBridge
: public SyncObserverBridge, : public identity::IdentityManager::Observer {
public identity::IdentityManager::Observer {
public: public:
SyncedSessionsObserverBridge(id<SyncedSessionsObserver> owner, SyncedSessionsObserverBridge(id<SyncedSessionsObserver> owner,
ios::ChromeBrowserState* browserState); ios::ChromeBrowserState* browserState);
~SyncedSessionsObserverBridge() override; ~SyncedSessionsObserverBridge() override;
// SyncObserverBridge implementation.
void OnSyncConfigurationCompleted(syncer::SyncService* sync) override;
// identity::IdentityManager::Observer implementation. // identity::IdentityManager::Observer implementation.
void OnPrimaryAccountCleared( void OnPrimaryAccountCleared(
const AccountInfo& previous_primary_account_info) override; const AccountInfo& previous_primary_account_info) override;
// Returns true if the first sync cycle that contains session information is
// completed. Returns false otherwise.
bool IsFirstSyncCycleCompleted();
// Returns true if user is signed in. // Returns true if user is signed in.
bool IsSignedIn(); bool IsSignedIn();
...@@ -56,7 +48,6 @@ class SyncedSessionsObserverBridge ...@@ -56,7 +48,6 @@ class SyncedSessionsObserverBridge
__weak id<SyncedSessionsObserver> owner_ = nil; __weak id<SyncedSessionsObserver> owner_ = nil;
identity::IdentityManager* identity_manager_ = nullptr; identity::IdentityManager* identity_manager_ = nullptr;
ios::ChromeBrowserState* browser_state_;
ScopedObserver<identity::IdentityManager, identity::IdentityManager::Observer> ScopedObserver<identity::IdentityManager, identity::IdentityManager::Observer>
identity_manager_observer_; identity_manager_observer_;
std::unique_ptr<base::CallbackList<void()>::Subscription> std::unique_ptr<base::CallbackList<void()>::Subscription>
...@@ -67,4 +58,4 @@ class SyncedSessionsObserverBridge ...@@ -67,4 +58,4 @@ class SyncedSessionsObserverBridge
} // namespace synced_sessions } // namespace synced_sessions
#endif // IOS_CHROME_BROWSER_SYNC_SYNCED_SESSIONS_BRIDGE_H_ #endif // IOS_CHROME_BROWSER_UI_RECENT_TABS_SYNCED_SESSIONS_BRIDGE_H_
...@@ -4,14 +4,10 @@ ...@@ -4,14 +4,10 @@
#import "ios/chrome/browser/ui/recent_tabs/synced_sessions_bridge.h" #import "ios/chrome/browser/ui/recent_tabs/synced_sessions_bridge.h"
#include "components/browser_sync/profile_sync_service.h"
#include "components/sync_sessions/session_sync_service.h" #include "components/sync_sessions/session_sync_service.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h" #include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#include "ios/chrome/browser/signin/identity_manager_factory.h" #include "ios/chrome/browser/signin/identity_manager_factory.h"
#include "ios/chrome/browser/sync/profile_sync_service_factory.h"
#include "ios/chrome/browser/sync/session_sync_service_factory.h" #include "ios/chrome/browser/sync/session_sync_service_factory.h"
#include "ios/chrome/browser/sync/sync_setup_service.h"
#include "ios/chrome/browser/sync/sync_setup_service_factory.h"
#include "services/identity/public/cpp/identity_manager.h" #include "services/identity/public/cpp/identity_manager.h"
#if !defined(__has_feature) || !__has_feature(objc_arc) #if !defined(__has_feature) || !__has_feature(objc_arc)
...@@ -25,13 +21,9 @@ namespace synced_sessions { ...@@ -25,13 +21,9 @@ namespace synced_sessions {
SyncedSessionsObserverBridge::SyncedSessionsObserverBridge( SyncedSessionsObserverBridge::SyncedSessionsObserverBridge(
id<SyncedSessionsObserver> owner, id<SyncedSessionsObserver> owner,
ios::ChromeBrowserState* browserState) ios::ChromeBrowserState* browserState)
: SyncObserverBridge( : owner_(owner),
owner,
ProfileSyncServiceFactory::GetForBrowserState(browserState)),
owner_(owner),
identity_manager_( identity_manager_(
IdentityManagerFactory::GetForBrowserState(browserState)), IdentityManagerFactory::GetForBrowserState(browserState)),
browser_state_(browserState),
identity_manager_observer_(this) { identity_manager_observer_(this) {
identity_manager_observer_.Add(identity_manager_); identity_manager_observer_.Add(identity_manager_);
...@@ -46,24 +38,6 @@ SyncedSessionsObserverBridge::SyncedSessionsObserverBridge( ...@@ -46,24 +38,6 @@ SyncedSessionsObserverBridge::SyncedSessionsObserverBridge(
SyncedSessionsObserverBridge::~SyncedSessionsObserverBridge() {} SyncedSessionsObserverBridge::~SyncedSessionsObserverBridge() {}
#pragma mark - SyncObserverBridge
void SyncedSessionsObserverBridge::OnSyncConfigurationCompleted(
syncer::SyncService* sync) {
// TODO(crbug.com/895455): This notification seems redundant because
// OnForeignSessionChanged() should be called when the initial sync is
// completed.
[owner_ reloadSessions];
}
bool SyncedSessionsObserverBridge::IsFirstSyncCycleCompleted() {
// TODO(crbug.com/895455): This could probably be implemented via
// SessionSyncService directly and possibly remove all dependencies to
// SyncService/SyncSetupService.
return SyncSetupServiceFactory::GetForBrowserState(browser_state_)
->IsDataTypeActive(syncer::SESSIONS);
}
#pragma mark - identity::IdentityManager::Observer #pragma mark - identity::IdentityManager::Observer
void SyncedSessionsObserverBridge::OnPrimaryAccountCleared( void SyncedSessionsObserverBridge::OnPrimaryAccountCleared(
......
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