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

Side by Side Diff: components/sync/tools/sync_client.cc

Issue 2130453004: [Sync] Move //sync to //components/sync. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 4 years, 4 months 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdint.h> 5 #include <stdint.h>
6 6
7 #include <cstddef> 7 #include <cstddef>
8 #include <cstdio> 8 #include <cstdio>
9 #include <memory> 9 #include <memory>
10 #include <string> 10 #include <string>
(...skipping 10 matching lines...) Expand all
21 #include "base/memory/ref_counted.h" 21 #include "base/memory/ref_counted.h"
22 #include "base/memory/weak_ptr.h" 22 #include "base/memory/weak_ptr.h"
23 #include "base/message_loop/message_loop.h" 23 #include "base/message_loop/message_loop.h"
24 #include "base/rand_util.h" 24 #include "base/rand_util.h"
25 #include "base/run_loop.h" 25 #include "base/run_loop.h"
26 #include "base/task_runner.h" 26 #include "base/task_runner.h"
27 #include "base/threading/thread.h" 27 #include "base/threading/thread.h"
28 #include "build/build_config.h" 28 #include "build/build_config.h"
29 #include "components/invalidation/impl/non_blocking_invalidator.h" 29 #include "components/invalidation/impl/non_blocking_invalidator.h"
30 #include "components/invalidation/public/object_id_invalidation_map.h" 30 #include "components/invalidation/public/object_id_invalidation_map.h"
31 #include "components/sync/base/cancelation_signal.h"
32 #include "components/sync/base/model_type.h"
33 #include "components/sync/base/unrecoverable_error_handler.h"
34 #include "components/sync/base/weak_handle.h"
35 #include "components/sync/core/base_node.h"
36 #include "components/sync/core/http_bridge.h"
37 #include "components/sync/core/http_post_provider_factory.h"
38 #include "components/sync/core/internal_components_factory_impl.h"
39 #include "components/sync/core/read_node.h"
40 #include "components/sync/core/sync_manager.h"
41 #include "components/sync/core/sync_manager_factory.h"
42 #include "components/sync/engine/passive_model_worker.h"
43 #include "components/sync/js/js_event_details.h"
44 #include "components/sync/js/js_event_handler.h"
45 #include "components/sync/test/fake_encryptor.h"
46 #include "components/sync/tools/null_invalidation_state_tracker.h"
31 #include "components/sync_driver/invalidation_helper.h" 47 #include "components/sync_driver/invalidation_helper.h"
32 #include "jingle/notifier/base/notification_method.h" 48 #include "jingle/notifier/base/notification_method.h"
33 #include "jingle/notifier/base/notifier_options.h" 49 #include "jingle/notifier/base/notifier_options.h"
34 #include "net/base/host_port_pair.h" 50 #include "net/base/host_port_pair.h"
35 #include "net/base/network_change_notifier.h" 51 #include "net/base/network_change_notifier.h"
36 #include "net/dns/host_resolver.h" 52 #include "net/dns/host_resolver.h"
37 #include "net/http/transport_security_state.h" 53 #include "net/http/transport_security_state.h"
38 #include "net/url_request/url_request_test_util.h" 54 #include "net/url_request/url_request_test_util.h"
39 #include "sync/internal_api/public/base/cancelation_signal.h"
40 #include "sync/internal_api/public/base/model_type.h"
41 #include "sync/internal_api/public/base_node.h"
42 #include "sync/internal_api/public/engine/passive_model_worker.h"
43 #include "sync/internal_api/public/http_bridge.h"
44 #include "sync/internal_api/public/http_post_provider_factory.h"
45 #include "sync/internal_api/public/internal_components_factory_impl.h"
46 #include "sync/internal_api/public/read_node.h"
47 #include "sync/internal_api/public/sync_manager.h"
48 #include "sync/internal_api/public/sync_manager_factory.h"
49 #include "sync/internal_api/public/util/unrecoverable_error_handler.h"
50 #include "sync/internal_api/public/util/weak_handle.h"
51 #include "sync/js/js_event_details.h"
52 #include "sync/js/js_event_handler.h"
53 #include "sync/test/fake_encryptor.h"
54 #include "sync/tools/null_invalidation_state_tracker.h"
55 #include "url/gurl.h" 55 #include "url/gurl.h"
56 56
57 #if defined(OS_MACOSX) 57 #if defined(OS_MACOSX)
58 #include "base/mac/scoped_nsautorelease_pool.h" 58 #include "base/mac/scoped_nsautorelease_pool.h"
59 #endif 59 #endif
60 60
61 // This is a simple utility that initializes a sync client and 61 // This is a simple utility that initializes a sync client and
62 // prints out any events. 62 // prints out any events.
63 63
64 // TODO(akalin): Refactor to combine shared code with 64 // TODO(akalin): Refactor to combine shared code with
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 } 133 }
134 134
135 class LoggingChangeDelegate : public SyncManager::ChangeDelegate { 135 class LoggingChangeDelegate : public SyncManager::ChangeDelegate {
136 public: 136 public:
137 ~LoggingChangeDelegate() override {} 137 ~LoggingChangeDelegate() override {}
138 138
139 void OnChangesApplied(ModelType model_type, 139 void OnChangesApplied(ModelType model_type,
140 int64_t model_version, 140 int64_t model_version,
141 const BaseTransaction* trans, 141 const BaseTransaction* trans,
142 const ImmutableChangeRecordList& changes) override { 142 const ImmutableChangeRecordList& changes) override {
143 LOG(INFO) << "Changes applied for " 143 LOG(INFO) << "Changes applied for " << ModelTypeToString(model_type);
144 << ModelTypeToString(model_type);
145 size_t i = 1; 144 size_t i = 1;
146 size_t change_count = changes.Get().size(); 145 size_t change_count = changes.Get().size();
147 for (ChangeRecordList::const_iterator it = 146 for (ChangeRecordList::const_iterator it = changes.Get().begin();
148 changes.Get().begin(); it != changes.Get().end(); ++it) { 147 it != changes.Get().end(); ++it) {
149 std::unique_ptr<base::DictionaryValue> change_value(it->ToValue()); 148 std::unique_ptr<base::DictionaryValue> change_value(it->ToValue());
150 LOG(INFO) << "Change (" << i << "/" << change_count << "): " 149 LOG(INFO) << "Change (" << i << "/" << change_count
151 << ValueToString(*change_value); 150 << "): " << ValueToString(*change_value);
152 if (it->action != ChangeRecord::ACTION_DELETE) { 151 if (it->action != ChangeRecord::ACTION_DELETE) {
153 ReadNode node(trans); 152 ReadNode node(trans);
154 CHECK_EQ(node.InitByIdLookup(it->id), BaseNode::INIT_OK); 153 CHECK_EQ(node.InitByIdLookup(it->id), BaseNode::INIT_OK);
155 std::unique_ptr<base::DictionaryValue> details(node.ToValue()); 154 std::unique_ptr<base::DictionaryValue> details(node.ToValue());
156 VLOG(1) << "Details: " << ValueToString(*details); 155 VLOG(1) << "Details: " << ValueToString(*details);
157 } 156 }
158 ++i; 157 ++i;
159 } 158 }
160 } 159 }
161 160
162 void OnChangesComplete(ModelType model_type) override { 161 void OnChangesComplete(ModelType model_type) override {
163 LOG(INFO) << "Changes complete for " 162 LOG(INFO) << "Changes complete for " << ModelTypeToString(model_type);
164 << ModelTypeToString(model_type);
165 } 163 }
166 }; 164 };
167 165
168 class LoggingUnrecoverableErrorHandler 166 class LoggingUnrecoverableErrorHandler : public UnrecoverableErrorHandler {
169 : public UnrecoverableErrorHandler {
170 public: 167 public:
171 ~LoggingUnrecoverableErrorHandler() override {} 168 ~LoggingUnrecoverableErrorHandler() override {}
172 169
173 void OnUnrecoverableError(const tracked_objects::Location& from_here, 170 void OnUnrecoverableError(const tracked_objects::Location& from_here,
174 const std::string& message) override { 171 const std::string& message) override {
175 if (LOG_IS_ON(ERROR)) { 172 if (LOG_IS_ON(ERROR)) {
176 logging::LogMessage(from_here.file_name(), from_here.line_number(), 173 logging::LogMessage(from_here.file_name(), from_here.line_number(),
177 logging::LOG_ERROR).stream() 174 logging::LOG_ERROR)
175 .stream()
178 << message; 176 << message;
179 } 177 }
180 } 178 }
181 }; 179 };
182 180
183 class LoggingJsEventHandler 181 class LoggingJsEventHandler
184 : public JsEventHandler, 182 : public JsEventHandler,
185 public base::SupportsWeakPtr<LoggingJsEventHandler> { 183 public base::SupportsWeakPtr<LoggingJsEventHandler> {
186 public: 184 public:
187 ~LoggingJsEventHandler() override {} 185 ~LoggingJsEventHandler() override {}
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 : sync_manager_(sync_manager) {} 220 : sync_manager_(sync_manager) {}
223 221
224 void OnInvalidatorStateChange(InvalidatorState state) override { 222 void OnInvalidatorStateChange(InvalidatorState state) override {
225 sync_manager_->SetInvalidatorEnabled(state == INVALIDATIONS_ENABLED); 223 sync_manager_->SetInvalidatorEnabled(state == INVALIDATIONS_ENABLED);
226 } 224 }
227 225
228 void OnIncomingInvalidation( 226 void OnIncomingInvalidation(
229 const ObjectIdInvalidationMap& invalidation_map) override { 227 const ObjectIdInvalidationMap& invalidation_map) override {
230 syncer::ObjectIdSet ids = invalidation_map.GetObjectIds(); 228 syncer::ObjectIdSet ids = invalidation_map.GetObjectIds();
231 for (syncer::ObjectIdSet::const_iterator ids_it = ids.begin(); 229 for (syncer::ObjectIdSet::const_iterator ids_it = ids.begin();
232 ids_it != ids.end(); 230 ids_it != ids.end(); ++ids_it) {
233 ++ids_it) {
234 syncer::ModelType type; 231 syncer::ModelType type;
235 if (!NotificationTypeToRealModelType(ids_it->name(), &type)) { 232 if (!NotificationTypeToRealModelType(ids_it->name(), &type)) {
236 DLOG(WARNING) << "Notification has invalid id: " 233 DLOG(WARNING) << "Notification has invalid id: "
237 << syncer::ObjectIdToString(*ids_it); 234 << syncer::ObjectIdToString(*ids_it);
238 } else { 235 } else {
239 syncer::SingleObjectInvalidationSet invalidation_set = 236 syncer::SingleObjectInvalidationSet invalidation_set =
240 invalidation_map.ForObject(*ids_it); 237 invalidation_map.ForObject(*ids_it);
241 for (syncer::SingleObjectInvalidationSet::const_iterator inv_it = 238 for (syncer::SingleObjectInvalidationSet::const_iterator inv_it =
242 invalidation_set.begin(); 239 invalidation_set.begin();
243 inv_it != invalidation_set.end(); 240 inv_it != invalidation_set.end(); ++inv_it) {
244 ++inv_it) {
245 std::unique_ptr<syncer::InvalidationInterface> inv_adapter( 241 std::unique_ptr<syncer::InvalidationInterface> inv_adapter(
246 new InvalidationAdapter(*inv_it)); 242 new InvalidationAdapter(*inv_it));
247 sync_manager_->OnIncomingInvalidation(type, std::move(inv_adapter)); 243 sync_manager_->OnIncomingInvalidation(type, std::move(inv_adapter));
248 } 244 }
249 } 245 }
250 } 246 }
251 } 247 }
252 248
253 std::string GetOwnerName() const override { return "InvalidatorShim"; } 249 std::string GetOwnerName() const override { return "InvalidatorShim"; }
254 250
255 private: 251 private:
256 SyncManager* sync_manager_; 252 SyncManager* sync_manager_;
257 }; 253 };
258 254
259 void LogUnrecoverableErrorContext() { 255 void LogUnrecoverableErrorContext() {
260 base::debug::StackTrace().Print(); 256 base::debug::StackTrace().Print();
261 } 257 }
262 258
263 notifier::NotifierOptions ParseNotifierOptions( 259 notifier::NotifierOptions ParseNotifierOptions(
264 const base::CommandLine& command_line, 260 const base::CommandLine& command_line,
265 const scoped_refptr<net::URLRequestContextGetter>& request_context_getter) { 261 const scoped_refptr<net::URLRequestContextGetter>& request_context_getter) {
266 notifier::NotifierOptions notifier_options; 262 notifier::NotifierOptions notifier_options;
267 notifier_options.request_context_getter = request_context_getter; 263 notifier_options.request_context_getter = request_context_getter;
268 notifier_options.auth_mechanism = "X-OAUTH2"; 264 notifier_options.auth_mechanism = "X-OAUTH2";
269 265
270 if (command_line.HasSwitch(kXmppHostPortSwitch)) { 266 if (command_line.HasSwitch(kXmppHostPortSwitch)) {
271 notifier_options.xmpp_host_port = 267 notifier_options.xmpp_host_port = net::HostPortPair::FromString(
272 net::HostPortPair::FromString( 268 command_line.GetSwitchValueASCII(kXmppHostPortSwitch));
273 command_line.GetSwitchValueASCII(kXmppHostPortSwitch));
274 LOG(INFO) << "Using " << notifier_options.xmpp_host_port.ToString() 269 LOG(INFO) << "Using " << notifier_options.xmpp_host_port.ToString()
275 << " for test sync notification server."; 270 << " for test sync notification server.";
276 } 271 }
277 272
278 notifier_options.try_ssltcp_first = 273 notifier_options.try_ssltcp_first =
279 command_line.HasSwitch(kXmppTrySslTcpFirstSwitch); 274 command_line.HasSwitch(kXmppTrySslTcpFirstSwitch);
280 LOG_IF(INFO, notifier_options.try_ssltcp_first) 275 LOG_IF(INFO, notifier_options.try_ssltcp_first)
281 << "Trying SSL/TCP port before XMPP port for notifications."; 276 << "Trying SSL/TCP port before XMPP port for notifications.";
282 277
283 notifier_options.allow_insecure_connection = 278 notifier_options.allow_insecure_connection =
284 command_line.HasSwitch(kXmppAllowInsecureConnectionSwitch); 279 command_line.HasSwitch(kXmppAllowInsecureConnectionSwitch);
285 LOG_IF(INFO, notifier_options.allow_insecure_connection) 280 LOG_IF(INFO, notifier_options.allow_insecure_connection)
286 << "Allowing insecure XMPP connections."; 281 << "Allowing insecure XMPP connections.";
287 282
288 return notifier_options; 283 return notifier_options;
289 } 284 }
290 285
291 void StubNetworkTimeUpdateCallback(const base::Time&, 286 void StubNetworkTimeUpdateCallback(const base::Time&,
292 const base::TimeDelta&, 287 const base::TimeDelta&,
293 const base::TimeDelta&) { 288 const base::TimeDelta&) {}
294 }
295 289
296 int SyncClientMain(int argc, char* argv[]) { 290 int SyncClientMain(int argc, char* argv[]) {
297 #if defined(OS_MACOSX) 291 #if defined(OS_MACOSX)
298 base::mac::ScopedNSAutoreleasePool pool; 292 base::mac::ScopedNSAutoreleasePool pool;
299 #endif 293 #endif
300 base::AtExitManager exit_manager; 294 base::AtExitManager exit_manager;
301 base::CommandLine::Init(argc, argv); 295 base::CommandLine::Init(argc, argv);
302 logging::LoggingSettings settings; 296 logging::LoggingSettings settings;
303 settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; 297 settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
304 logging::InitLogging(settings); 298 logging::InitLogging(settings);
305 299
306 base::MessageLoop sync_loop; 300 base::MessageLoop sync_loop;
307 base::Thread io_thread("IO thread"); 301 base::Thread io_thread("IO thread");
308 base::Thread::Options options; 302 base::Thread::Options options;
309 options.message_loop_type = base::MessageLoop::TYPE_IO; 303 options.message_loop_type = base::MessageLoop::TYPE_IO;
310 io_thread.StartWithOptions(options); 304 io_thread.StartWithOptions(options);
311 305
312 // Parse command line. 306 // Parse command line.
313 const base::CommandLine& command_line = 307 const base::CommandLine& command_line =
314 *base::CommandLine::ForCurrentProcess(); 308 *base::CommandLine::ForCurrentProcess();
315 SyncCredentials credentials; 309 SyncCredentials credentials;
316 credentials.account_id = command_line.GetSwitchValueASCII(kEmailSwitch); 310 credentials.account_id = command_line.GetSwitchValueASCII(kEmailSwitch);
317 credentials.email = command_line.GetSwitchValueASCII(kEmailSwitch); 311 credentials.email = command_line.GetSwitchValueASCII(kEmailSwitch);
318 credentials.sync_token = command_line.GetSwitchValueASCII(kTokenSwitch); 312 credentials.sync_token = command_line.GetSwitchValueASCII(kTokenSwitch);
319 // TODO(akalin): Write a wrapper script that gets a token for an 313 // TODO(akalin): Write a wrapper script that gets a token for an
320 // email and password and passes that in to this utility. 314 // email and password and passes that in to this utility.
321 if (credentials.email.empty() || credentials.sync_token.empty()) { 315 if (credentials.email.empty() || credentials.sync_token.empty()) {
322 std::printf("Usage: %s --%s=foo@bar.com --%s=token\n" 316 std::printf(
323 "[--%s=host:port] [--%s] [--%s]\n" 317 "Usage: %s --%s=foo@bar.com --%s=token\n"
324 "Run chrome and set a breakpoint on\n" 318 "[--%s=host:port] [--%s] [--%s]\n"
325 "syncer::SyncManagerImpl::UpdateCredentials() " 319 "Run chrome and set a breakpoint on\n"
326 "after logging into\n" 320 "syncer::SyncManagerImpl::UpdateCredentials() "
327 "sync to get the token to pass into this utility.\n", 321 "after logging into\n"
328 argv[0], 322 "sync to get the token to pass into this utility.\n",
329 kEmailSwitch, kTokenSwitch, kXmppHostPortSwitch, 323 argv[0], kEmailSwitch, kTokenSwitch, kXmppHostPortSwitch,
330 kXmppTrySslTcpFirstSwitch, 324 kXmppTrySslTcpFirstSwitch, kXmppAllowInsecureConnectionSwitch);
331 kXmppAllowInsecureConnectionSwitch);
332 return -1; 325 return -1;
333 } 326 }
334 327
335 // Set up objects that monitor the network. 328 // Set up objects that monitor the network.
336 std::unique_ptr<net::NetworkChangeNotifier> network_change_notifier( 329 std::unique_ptr<net::NetworkChangeNotifier> network_change_notifier(
337 net::NetworkChangeNotifier::Create()); 330 net::NetworkChangeNotifier::Create());
338 331
339 // Set up sync notifier factory. 332 // Set up sync notifier factory.
340 const scoped_refptr<MyTestURLRequestContextGetter> context_getter = 333 const scoped_refptr<MyTestURLRequestContextGetter> context_getter =
341 new MyTestURLRequestContextGetter(io_thread.task_runner()); 334 new MyTestURLRequestContextGetter(io_thread.task_runner());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 model_types.Put(SYNCED_NOTIFICATIONS); 373 model_types.Put(SYNCED_NOTIFICATIONS);
381 model_types.Put(SYNCED_NOTIFICATION_APP_INFO); 374 model_types.Put(SYNCED_NOTIFICATION_APP_INFO);
382 model_types.Put(DEVICE_INFO); 375 model_types.Put(DEVICE_INFO);
383 model_types.Put(EXPERIMENTS); 376 model_types.Put(EXPERIMENTS);
384 model_types.Put(PRIORITY_PREFERENCES); 377 model_types.Put(PRIORITY_PREFERENCES);
385 model_types.Put(DICTIONARY); 378 model_types.Put(DICTIONARY);
386 model_types.Put(FAVICON_IMAGES); 379 model_types.Put(FAVICON_IMAGES);
387 model_types.Put(FAVICON_TRACKING); 380 model_types.Put(FAVICON_TRACKING);
388 381
389 ModelSafeRoutingInfo routing_info; 382 ModelSafeRoutingInfo routing_info;
390 for (ModelTypeSet::Iterator it = model_types.First(); 383 for (ModelTypeSet::Iterator it = model_types.First(); it.Good(); it.Inc()) {
391 it.Good(); it.Inc()) {
392 routing_info[it.Get()] = GROUP_PASSIVE; 384 routing_info[it.Get()] = GROUP_PASSIVE;
393 } 385 }
394 scoped_refptr<PassiveModelWorker> passive_model_safe_worker = 386 scoped_refptr<PassiveModelWorker> passive_model_safe_worker =
395 new PassiveModelWorker(nullptr); 387 new PassiveModelWorker(nullptr);
396 std::vector<scoped_refptr<ModelSafeWorker> > workers; 388 std::vector<scoped_refptr<ModelSafeWorker>> workers;
397 workers.push_back(passive_model_safe_worker); 389 workers.push_back(passive_model_safe_worker);
398 390
399 // Set up sync manager. 391 // Set up sync manager.
400 SyncManagerFactory sync_manager_factory; 392 SyncManagerFactory sync_manager_factory;
401 std::unique_ptr<SyncManager> sync_manager = 393 std::unique_ptr<SyncManager> sync_manager =
402 sync_manager_factory.CreateSyncManager("sync_client manager"); 394 sync_manager_factory.CreateSyncManager("sync_client manager");
403 LoggingJsEventHandler js_event_handler; 395 LoggingJsEventHandler js_event_handler;
404 // Used only by InitialProcessMetadata(), so it's okay to leave this as NULL. 396 // Used only by InitialProcessMetadata(), so it's okay to leave this as NULL.
405 const scoped_refptr<base::TaskRunner> blocking_task_runner = NULL; 397 const scoped_refptr<base::TaskRunner> blocking_task_runner = NULL;
406 const char kUserAgent[] = "sync_client"; 398 const char kUserAgent[] = "sync_client";
407 // TODO(akalin): Replace this with just the context getter once 399 // TODO(akalin): Replace this with just the context getter once
408 // HttpPostProviderFactory is removed. 400 // HttpPostProviderFactory is removed.
409 CancelationSignal factory_cancelation_signal; 401 CancelationSignal factory_cancelation_signal;
410 std::unique_ptr<HttpPostProviderFactory> post_factory(new HttpBridgeFactory( 402 std::unique_ptr<HttpPostProviderFactory> post_factory(new HttpBridgeFactory(
411 context_getter.get(), base::Bind(&StubNetworkTimeUpdateCallback), 403 context_getter.get(), base::Bind(&StubNetworkTimeUpdateCallback),
412 &factory_cancelation_signal)); 404 &factory_cancelation_signal));
413 post_factory->Init(kUserAgent, BindToTrackerCallback()); 405 post_factory->Init(kUserAgent, BindToTrackerCallback());
414 // Used only when committing bookmarks, so it's okay to leave this 406 // Used only when committing bookmarks, so it's okay to leave this
415 // as NULL. 407 // as NULL.
416 ExtensionsActivity* extensions_activity = NULL; 408 ExtensionsActivity* extensions_activity = NULL;
417 LoggingChangeDelegate change_delegate; 409 LoggingChangeDelegate change_delegate;
418 const char kRestoredKeyForBootstrapping[] = ""; 410 const char kRestoredKeyForBootstrapping[] = "";
419 const char kRestoredKeystoreKeyForBootstrapping[] = ""; 411 const char kRestoredKeystoreKeyForBootstrapping[] = "";
420 NullEncryptor null_encryptor; 412 NullEncryptor null_encryptor;
421 InternalComponentsFactoryImpl::Switches factory_switches = { 413 InternalComponentsFactoryImpl::Switches factory_switches = {
422 InternalComponentsFactory::ENCRYPTION_KEYSTORE, 414 InternalComponentsFactory::ENCRYPTION_KEYSTORE,
423 InternalComponentsFactory::BACKOFF_NORMAL 415 InternalComponentsFactory::BACKOFF_NORMAL};
424 };
425 CancelationSignal scm_cancelation_signal; 416 CancelationSignal scm_cancelation_signal;
426 417
427 SyncManager::InitArgs args; 418 SyncManager::InitArgs args;
428 args.database_location = database_dir.path(); 419 args.database_location = database_dir.path();
429 args.event_handler = WeakHandle<JsEventHandler>(js_event_handler.AsWeakPtr()); 420 args.event_handler = WeakHandle<JsEventHandler>(js_event_handler.AsWeakPtr());
430 args.service_url = GURL(kSyncServiceURL); 421 args.service_url = GURL(kSyncServiceURL);
431 args.post_factory = std::move(post_factory); 422 args.post_factory = std::move(post_factory);
432 args.workers = workers; 423 args.workers = workers;
433 args.extensions_activity = extensions_activity; 424 args.extensions_activity = extensions_activity;
434 args.change_delegate = &change_delegate; 425 args.change_delegate = &change_delegate;
(...skipping 25 matching lines...) Expand all
460 io_thread.Stop(); 451 io_thread.Stop();
461 return 0; 452 return 0;
462 } 453 }
463 454
464 } // namespace 455 } // namespace
465 } // namespace syncer 456 } // namespace syncer
466 457
467 int main(int argc, char* argv[]) { 458 int main(int argc, char* argv[]) {
468 return syncer::SyncClientMain(argc, argv); 459 return syncer::SyncClientMain(argc, argv);
469 } 460 }
OLDNEW
« no previous file with comments | « components/sync/tools/null_invalidation_state_tracker.cc ('k') | components/sync/tools/sync_listen_notifications.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698