Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Unified Diff: trunk/src/chrome/browser/sync/test_profile_sync_service.cc

Issue 98323003: Revert 238348 "Clean up TestProfileSyncService and related tests" (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: trunk/src/chrome/browser/sync/test_profile_sync_service.cc
===================================================================
--- trunk/src/chrome/browser/sync/test_profile_sync_service.cc (revision 238367)
+++ trunk/src/chrome/browser/sync/test_profile_sync_service.cc (working copy)
@@ -5,21 +5,19 @@
#include "chrome/browser/sync/test_profile_sync_service.h"
#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
#include "chrome/browser/signin/signin_manager.h"
#include "chrome/browser/signin/signin_manager_factory.h"
#include "chrome/browser/sync/glue/sync_backend_host.h"
#include "chrome/browser/sync/glue/sync_backend_host_core.h"
#include "chrome/browser/sync/profile_sync_components_factory.h"
-#include "chrome/browser/sync/profile_sync_components_factory_mock.h"
#include "chrome/browser/sync/test/test_http_bridge_factory.h"
#include "sync/internal_api/public/test/sync_manager_factory_for_profile_sync_test.h"
-#include "sync/internal_api/public/test/test_internal_components_factory.h"
#include "sync/internal_api/public/user_share.h"
#include "sync/js/js_reply_handler.h"
#include "sync/protocol/encryption.pb.h"
using syncer::InternalComponentsFactory;
+using syncer::ModelSafeRoutingInfo;
using syncer::TestInternalComponentsFactory;
using syncer::UserShare;
@@ -28,23 +26,42 @@
SyncBackendHostForProfileSyncTest::SyncBackendHostForProfileSyncTest(
Profile* profile,
const base::WeakPtr<SyncPrefs>& sync_prefs,
- base::Closure& callback)
+ base::Closure& callback,
+ bool set_initial_sync_ended_on_init,
+ bool synchronous_init,
+ bool fail_initial_download,
+ syncer::StorageOption storage_option)
: browser_sync::SyncBackendHostImpl(
profile->GetDebugName(), profile, sync_prefs),
- callback_(callback) {}
+ callback_(callback),
+ fail_initial_download_(fail_initial_download),
+ set_initial_sync_ended_on_init_(set_initial_sync_ended_on_init),
+ synchronous_init_(synchronous_init),
+ storage_option_(storage_option),
+ weak_ptr_factory_(this) {}
SyncBackendHostForProfileSyncTest::~SyncBackendHostForProfileSyncTest() {}
+namespace {
+
+scoped_ptr<syncer::HttpPostProviderFactory> MakeTestHttpBridgeFactory() {
+ return scoped_ptr<syncer::HttpPostProviderFactory>(
+ new browser_sync::TestHttpBridgeFactory());
+}
+
+} // namespace
+
void SyncBackendHostForProfileSyncTest::InitCore(
scoped_ptr<DoInitializeOptions> options) {
- options->http_bridge_factory =
- scoped_ptr<syncer::HttpPostProviderFactory>(
- new browser_sync::TestHttpBridgeFactory());
+ options->http_bridge_factory = MakeTestHttpBridgeFactory();
options->sync_manager_factory.reset(
- new syncer::SyncManagerFactoryForProfileSyncTest(callback_));
+ new syncer::SyncManagerFactoryForProfileSyncTest(
+ callback_,
+ set_initial_sync_ended_on_init_));
options->credentials.email = "testuser@gmail.com";
options->credentials.sync_token = "token";
options->restored_key_for_bootstrapping = "";
+ syncer::StorageOption storage = storage_option_;
// It'd be nice if we avoided creating the InternalComponentsFactory in the
// first place, but SyncBackendHost will have created one by now so we must
@@ -52,12 +69,25 @@
InternalComponentsFactory::Switches factory_switches =
options->internal_components_factory->GetSwitches();
options->internal_components_factory.reset(
- new TestInternalComponentsFactory(factory_switches,
- syncer::STORAGE_IN_MEMORY));
+ new TestInternalComponentsFactory(factory_switches, storage));
SyncBackendHostImpl::InitCore(options.Pass());
+ if (synchronous_init_ && !base::MessageLoop::current()->is_running()) {
+ // The SyncBackend posts a task to the current loop when
+ // initialization completes.
+ base::MessageLoop::current()->Run();
+ }
}
+void SyncBackendHostForProfileSyncTest::UpdateCredentials(
+ const syncer::SyncCredentials& credentials) {
+ // If we had failed the initial download, complete initialization now.
+ if (!initial_download_closure_.is_null()) {
+ initial_download_closure_.Run();
+ initial_download_closure_.Reset();
+ }
+}
+
void SyncBackendHostForProfileSyncTest::RequestConfigureSyncer(
syncer::ConfigureReason reason,
syncer::ModelTypeSet to_download,
@@ -70,6 +100,8 @@
syncer::ModelTypeSet)>& ready_task,
const base::Closure& retry_callback) {
syncer::ModelTypeSet failed_configuration_types;
+ if (fail_initial_download_)
+ failed_configuration_types = to_download;
// The first parameter there should be the set of enabled types. That's not
// something we have access to from this strange test harness. We'll just
@@ -82,12 +114,41 @@
ready_task);
}
+void
+SyncBackendHostForProfileSyncTest::HandleInitializationSuccessOnFrontendLoop(
+ const syncer::WeakHandle<syncer::JsBackend> js_backend,
+ const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>
+ debug_info_listener) {
+ if (fail_initial_download_) {
+ // We interrupt this successful init to bring you a simulated failure.
+ initial_download_closure_ = base::Bind(
+ &SyncBackendHostForProfileSyncTest::
+ HandleInitializationSuccessOnFrontendLoop,
+ weak_ptr_factory_.GetWeakPtr(),
+ js_backend,
+ debug_info_listener);
+ HandleControlTypesDownloadRetry();
+ if (synchronous_init_)
+ base::MessageLoop::current()->Quit();
+ } else {
+ SyncBackendHostImpl::HandleInitializationSuccessOnFrontendLoop(
+ js_backend,
+ debug_info_listener);
+ }
+}
+
} // namespace browser_sync
syncer::TestIdFactory* TestProfileSyncService::id_factory() {
return &id_factory_;
}
+browser_sync::SyncBackendHostForProfileSyncTest*
+ TestProfileSyncService::GetBackendForTest() {
+ return static_cast<browser_sync::SyncBackendHostForProfileSyncTest*>(
+ ProfileSyncService::GetBackendForTest());
+}
+
syncer::WeakHandle<syncer::JsEventHandler>
TestProfileSyncService::GetJsEventHandler() {
return syncer::WeakHandle<syncer::JsEventHandler>();
@@ -98,12 +159,19 @@
Profile* profile,
SigninManagerBase* signin,
ProfileOAuth2TokenService* oauth2_token_service,
- ProfileSyncService::StartBehavior behavior)
+ ProfileSyncService::StartBehavior behavior,
+ bool synchronous_backend_initialization)
: ProfileSyncService(factory,
profile,
signin,
oauth2_token_service,
- behavior) {
+ behavior),
+ synchronous_backend_initialization_(
+ synchronous_backend_initialization),
+ synchronous_sync_configuration_(false),
+ set_initial_sync_ended_on_init_(true),
+ fail_initial_download_(false),
+ storage_option_(syncer::STORAGE_IN_MEMORY) {
SetSyncSetupCompleted();
}
@@ -124,7 +192,8 @@
profile,
signin,
oauth2_token_service,
- ProfileSyncService::AUTO_START);
+ ProfileSyncService::AUTO_START,
+ false);
}
ProfileSyncComponentsFactoryMock*
@@ -133,20 +202,82 @@
return static_cast<ProfileSyncComponentsFactoryMock*>(factory());
}
+void TestProfileSyncService::RequestAccessToken() {
+ ProfileSyncService::RequestAccessToken();
+ if (synchronous_backend_initialization_) {
+ base::MessageLoop::current()->Run();
+ }
+}
+
+void TestProfileSyncService::OnGetTokenSuccess(
+ const OAuth2TokenService::Request* request,
+ const std::string& access_token,
+ const base::Time& expiration_time) {
+ ProfileSyncService::OnGetTokenSuccess(request, access_token,
+ expiration_time);
+ if (synchronous_backend_initialization_) {
+ base::MessageLoop::current()->Quit();
+ }
+}
+
+void TestProfileSyncService::OnGetTokenFailure(
+ const OAuth2TokenService::Request* request,
+ const GoogleServiceAuthError& error) {
+ ProfileSyncService::OnGetTokenFailure(request, error);
+ if (synchronous_backend_initialization_) {
+ base::MessageLoop::current()->Quit();
+ }
+}
+
+
+void TestProfileSyncService::OnBackendInitialized(
+ const syncer::WeakHandle<syncer::JsBackend>& backend,
+ const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>&
+ debug_info_listener,
+ bool success) {
+ ProfileSyncService::OnBackendInitialized(backend,
+ debug_info_listener,
+ success);
+
+ // TODO(akalin): Figure out a better way to do this.
+ if (synchronous_backend_initialization_) {
+ base::MessageLoop::current()->Quit();
+ }
+}
+
void TestProfileSyncService::OnConfigureDone(
const browser_sync::DataTypeManager::ConfigureResult& result) {
ProfileSyncService::OnConfigureDone(result);
- base::MessageLoop::current()->Quit();
+ if (!synchronous_sync_configuration_)
+ base::MessageLoop::current()->Quit();
}
UserShare* TestProfileSyncService::GetUserShare() const {
return backend_->GetUserShare();
}
+void TestProfileSyncService::dont_set_initial_sync_ended_on_init() {
+ set_initial_sync_ended_on_init_ = false;
+}
+void TestProfileSyncService::set_synchronous_sync_configuration() {
+ synchronous_sync_configuration_ = true;
+}
+void TestProfileSyncService::fail_initial_download() {
+ fail_initial_download_ = true;
+}
+void TestProfileSyncService::set_storage_option(
+ syncer::StorageOption storage_option) {
+ storage_option_ = storage_option;
+}
+
void TestProfileSyncService::CreateBackend() {
backend_.reset(new browser_sync::SyncBackendHostForProfileSyncTest(
profile(),
sync_prefs_.AsWeakPtr(),
- callback_));
+ callback_,
+ set_initial_sync_ended_on_init_,
+ synchronous_backend_initialization_,
+ fail_initial_download_,
+ storage_option_));
}

Powered by Google App Engine
This is Rietveld 408576698