blob: 8eafbd6d8b38c5e15bcce648a3ce5b762e4d4d2a [file] [log] [blame]
// Copyright (c) 2012 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 CHROME_BROWSER_SYNC_TEST_PROFILE_SYNC_SERVICE_H_
#define CHROME_BROWSER_SYNC_TEST_PROFILE_SYNC_SERVICE_H_
#include <string>
#include "base/callback.h"
#include "base/compiler_specific.h"
#include "base/memory/weak_ptr.h"
#include "components/browser_sync/browser/profile_sync_service.h"
#include "components/signin/core/browser/profile_oauth2_token_service.h"
#include "components/sync_driver/data_type_manager_impl.h"
#include "components/sync_driver/glue/sync_backend_host_impl.h"
#include "components/sync_driver/sync_client.h"
#include "components/sync_driver/sync_prefs.h"
#include "content/public/browser/browser_context.h"
#include "sync/test/engine/test_id_factory.h"
#include "testing/gmock/include/gmock/gmock.h"
class Profile;
class ProfileOAuth2TokenService;
class SyncApiComponentFactoryMock;
ACTION(ReturnNewDataTypeManager) {
return new sync_driver::DataTypeManagerImpl(arg0, arg1, arg2, arg3, arg4);
}
namespace browser_sync {
class SyncBackendHostForProfileSyncTest : public SyncBackendHostImpl {
public:
SyncBackendHostForProfileSyncTest(
Profile* profile,
sync_driver::SyncClient* sync_client,
const scoped_refptr<base::SingleThreadTaskRunner>& ui_thread,
invalidation::InvalidationService* invalidator,
const base::WeakPtr<sync_driver::SyncPrefs>& sync_prefs,
base::Closure callback);
~SyncBackendHostForProfileSyncTest() override;
void RequestConfigureSyncer(
syncer::ConfigureReason reason,
syncer::ModelTypeSet to_download,
syncer::ModelTypeSet to_purge,
syncer::ModelTypeSet to_journal,
syncer::ModelTypeSet to_unapply,
syncer::ModelTypeSet to_ignore,
const syncer::ModelSafeRoutingInfo& routing_info,
const base::Callback<void(syncer::ModelTypeSet, syncer::ModelTypeSet)>&
ready_task,
const base::Closure& retry_callback) override;
protected:
void InitCore(scoped_ptr<DoInitializeOptions> options) override;
private:
// Invoked at the start of HandleSyncManagerInitializationOnFrontendLoop.
// Allows extra initialization work to be performed before the backend comes
// up.
base::Closure callback_;
};
} // namespace browser_sync
class TestProfileSyncService : public ProfileSyncService {
public:
// TODO(tim): Add ability to inject TokenService alongside SigninManager.
// TODO(rogerta): what does above comment mean?
TestProfileSyncService(
Profile* profile,
SigninManagerBase* signin,
ProfileOAuth2TokenService* oauth2_token_service,
browser_sync::ProfileSyncServiceStartBehavior behavior);
~TestProfileSyncService() override;
void OnConfigureDone(
const sync_driver::DataTypeManager::ConfigureResult& result) override;
// We implement our own version to avoid some DCHECKs.
syncer::UserShare* GetUserShare() const override;
static TestProfileSyncService* BuildAutoStartAsyncInit(
Profile* profile, base::Closure callback);
SyncApiComponentFactoryMock* GetSyncApiComponentFactoryMock();
syncer::TestIdFactory* id_factory();
// Raise visibility to ease testing.
using ProfileSyncService::NotifyObservers;
protected:
static scoped_ptr<KeyedService> TestFactoryFunction(
content::BrowserContext* profile);
// Return NULL handle to use in backend initialization to avoid receiving
// js messages on UI loop when it's being destroyed, which are not deleted
// and cause memory leak in test.
syncer::WeakHandle<syncer::JsEventHandler> GetJsEventHandler() override;
bool NeedBackup() const override;
private:
syncer::TestIdFactory id_factory_;
};
#endif // CHROME_BROWSER_SYNC_TEST_PROFILE_SYNC_SERVICE_H_