blob: c14a10a37c2d188df0389d5b0b732f61bc932430 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_NTP_SNIPPETS_SESSIONS_TAB_DELEGATE_SYNC_ADAPTER_H_
#define COMPONENTS_NTP_SNIPPETS_SESSIONS_TAB_DELEGATE_SYNC_ADAPTER_H_
#include <vector>
#include "base/callback.h"
#include "base/callback_forward.h"
#include "base/macros.h"
#include "components/ntp_snippets/sessions/foreign_sessions_suggestions_provider.h"
#include "components/sync/driver/sync_service_observer.h"
namespace syncer {
class SyncService;
} // namespace syncer
namespace ntp_snippets {
// Adapter that sits on top of SyncService and OpenTabsUIDelegate and provides
// simplified notifications and accessors for foreign tabs data.
class TabDelegateSyncAdapter : public syncer::SyncServiceObserver,
public ForeignSessionsProvider {
public:
explicit TabDelegateSyncAdapter(syncer::SyncService* sync_service);
~TabDelegateSyncAdapter() override;
// ForeignSessionsProvider implementation.
bool HasSessionsData() override;
std::vector<const sync_sessions::SyncedSession*> GetAllForeignSessions()
override;
void SubscribeForForeignTabChange(
const base::Closure& change_callback) override;
private:
// syncer::SyncServiceObserver implementation.
void OnStateChanged(syncer::SyncService* sync) override;
void OnSyncConfigurationCompleted(syncer::SyncService* sync) override;
void OnForeignSessionUpdated(syncer::SyncService* sync) override;
void InvokeCallback();
syncer::SyncService* sync_service_;
base::Closure change_callback_;
// Represents whether there was session data the last time |change_callback_|
// was invoked.
bool had_session_data_ = false;
DISALLOW_COPY_AND_ASSIGN(TabDelegateSyncAdapter);
};
} // namespace ntp_snippets
#endif // COMPONENTS_NTP_SNIPPETS_SESSIONS_TAB_DELEGATE_SYNC_ADAPTER_H_