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

Side by Side Diff: chrome/browser/sync_file_system/drive_backend/sync_engine.cc

Issue 1873683002: Convert //chrome/browser/sync_file_system from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "chrome/browser/sync_file_system/drive_backend/sync_engine.h" 5 #include "chrome/browser/sync_file_system/drive_backend/sync_engine.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "base/memory/ptr_util.h"
12 #include "base/metrics/histogram.h" 13 #include "base/metrics/histogram.h"
13 #include "base/thread_task_runner_handle.h" 14 #include "base/thread_task_runner_handle.h"
14 #include "base/threading/sequenced_worker_pool.h" 15 #include "base/threading/sequenced_worker_pool.h"
15 #include "base/time/time.h" 16 #include "base/time/time.h"
16 #include "base/values.h" 17 #include "base/values.h"
17 #include "chrome/browser/drive/drive_notification_manager_factory.h" 18 #include "chrome/browser/drive/drive_notification_manager_factory.h"
18 #include "chrome/browser/extensions/extension_service.h" 19 #include "chrome/browser/extensions/extension_service.h"
19 #include "chrome/browser/profiles/profile.h" 20 #include "chrome/browser/profiles/profile.h"
20 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 21 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
21 #include "chrome/browser/signin/signin_manager_factory.h" 22 #include "chrome/browser/signin/signin_manager_factory.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 #include "net/url_request/url_request_context_getter.h" 58 #include "net/url_request/url_request_context_getter.h"
58 #include "storage/browser/blob/scoped_file.h" 59 #include "storage/browser/blob/scoped_file.h"
59 #include "storage/common/fileapi/file_system_util.h" 60 #include "storage/common/fileapi/file_system_util.h"
60 61
61 namespace sync_file_system { 62 namespace sync_file_system {
62 63
63 class RemoteChangeProcessor; 64 class RemoteChangeProcessor;
64 65
65 namespace drive_backend { 66 namespace drive_backend {
66 67
67 scoped_ptr<drive::DriveServiceInterface> 68 std::unique_ptr<drive::DriveServiceInterface>
68 SyncEngine::DriveServiceFactory::CreateDriveService( 69 SyncEngine::DriveServiceFactory::CreateDriveService(
69 OAuth2TokenService* oauth2_token_service, 70 OAuth2TokenService* oauth2_token_service,
70 net::URLRequestContextGetter* url_request_context_getter, 71 net::URLRequestContextGetter* url_request_context_getter,
71 base::SequencedTaskRunner* blocking_task_runner) { 72 base::SequencedTaskRunner* blocking_task_runner) {
72 return scoped_ptr<drive::DriveServiceInterface>( 73 return std::unique_ptr<
73 new drive::DriveAPIService( 74 drive::DriveServiceInterface>(new drive::DriveAPIService(
74 oauth2_token_service, 75 oauth2_token_service, url_request_context_getter, blocking_task_runner,
75 url_request_context_getter, 76 GURL(google_apis::DriveApiUrlGenerator::kBaseUrlForProduction),
76 blocking_task_runner, 77 GURL(google_apis::DriveApiUrlGenerator::kBaseDownloadUrlForProduction),
77 GURL(google_apis::DriveApiUrlGenerator::kBaseUrlForProduction), 78 GURL(google_apis::DriveApiUrlGenerator::kBaseThumbnailUrlForProduction),
78 GURL(google_apis::DriveApiUrlGenerator:: 79 std::string() /* custom_user_agent */));
79 kBaseDownloadUrlForProduction),
80 GURL(google_apis::DriveApiUrlGenerator::
81 kBaseThumbnailUrlForProduction),
82 std::string() /* custom_user_agent */));
83 } 80 }
84 81
85 class SyncEngine::WorkerObserver : public SyncWorkerInterface::Observer { 82 class SyncEngine::WorkerObserver : public SyncWorkerInterface::Observer {
86 public: 83 public:
87 WorkerObserver(base::SequencedTaskRunner* ui_task_runner, 84 WorkerObserver(base::SequencedTaskRunner* ui_task_runner,
88 base::WeakPtr<SyncEngine> sync_engine) 85 base::WeakPtr<SyncEngine> sync_engine)
89 : ui_task_runner_(ui_task_runner), 86 : ui_task_runner_(ui_task_runner),
90 sync_engine_(sync_engine) { 87 sync_engine_(sync_engine) {
91 sequence_checker_.DetachFromSequence(); 88 sequence_checker_.DetachFromSequence();
92 } 89 }
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 void DidRegisterOrigin(const base::TimeTicks& start_time, 160 void DidRegisterOrigin(const base::TimeTicks& start_time,
164 const SyncStatusCallback& callback, 161 const SyncStatusCallback& callback,
165 SyncStatusCode status) { 162 SyncStatusCode status) {
166 base::TimeDelta delta(base::TimeTicks::Now() - start_time); 163 base::TimeDelta delta(base::TimeTicks::Now() - start_time);
167 LOCAL_HISTOGRAM_TIMES("SyncFileSystem.RegisterOriginTime", delta); 164 LOCAL_HISTOGRAM_TIMES("SyncFileSystem.RegisterOriginTime", delta);
168 callback.Run(status); 165 callback.Run(status);
169 } 166 }
170 167
171 } // namespace 168 } // namespace
172 169
173 scoped_ptr<SyncEngine> SyncEngine::CreateForBrowserContext( 170 std::unique_ptr<SyncEngine> SyncEngine::CreateForBrowserContext(
174 content::BrowserContext* context, 171 content::BrowserContext* context,
175 TaskLogger* task_logger) { 172 TaskLogger* task_logger) {
176 scoped_refptr<base::SequencedWorkerPool> worker_pool = 173 scoped_refptr<base::SequencedWorkerPool> worker_pool =
177 content::BrowserThread::GetBlockingPool(); 174 content::BrowserThread::GetBlockingPool();
178 175
179 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner = 176 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner =
180 base::ThreadTaskRunnerHandle::Get(); 177 base::ThreadTaskRunnerHandle::Get();
181 scoped_refptr<base::SequencedTaskRunner> worker_task_runner = 178 scoped_refptr<base::SequencedTaskRunner> worker_task_runner =
182 worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( 179 worker_pool->GetSequencedTaskRunnerWithShutdownBehavior(
183 worker_pool->GetSequenceToken(), 180 worker_pool->GetSequenceToken(),
184 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); 181 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN);
185 scoped_refptr<base::SequencedTaskRunner> drive_task_runner = 182 scoped_refptr<base::SequencedTaskRunner> drive_task_runner =
186 worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( 183 worker_pool->GetSequencedTaskRunnerWithShutdownBehavior(
187 worker_pool->GetSequenceToken(), 184 worker_pool->GetSequenceToken(),
188 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); 185 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN);
189 186
190 Profile* profile = Profile::FromBrowserContext(context); 187 Profile* profile = Profile::FromBrowserContext(context);
191 drive::DriveNotificationManager* notification_manager = 188 drive::DriveNotificationManager* notification_manager =
192 drive::DriveNotificationManagerFactory::GetForBrowserContext(context); 189 drive::DriveNotificationManagerFactory::GetForBrowserContext(context);
193 ExtensionService* extension_service = 190 ExtensionService* extension_service =
194 extensions::ExtensionSystem::Get(context)->extension_service(); 191 extensions::ExtensionSystem::Get(context)->extension_service();
195 SigninManagerBase* signin_manager = 192 SigninManagerBase* signin_manager =
196 SigninManagerFactory::GetForProfile(profile); 193 SigninManagerFactory::GetForProfile(profile);
197 OAuth2TokenService* token_service = 194 OAuth2TokenService* token_service =
198 ProfileOAuth2TokenServiceFactory::GetForProfile(profile); 195 ProfileOAuth2TokenServiceFactory::GetForProfile(profile);
199 scoped_refptr<net::URLRequestContextGetter> request_context = 196 scoped_refptr<net::URLRequestContextGetter> request_context =
200 context->GetRequestContext(); 197 context->GetRequestContext();
201 198
202 scoped_ptr<drive_backend::SyncEngine> sync_engine( 199 std::unique_ptr<drive_backend::SyncEngine> sync_engine(new SyncEngine(
203 new SyncEngine(ui_task_runner.get(), 200 ui_task_runner.get(), worker_task_runner.get(), drive_task_runner.get(),
204 worker_task_runner.get(), 201 worker_pool.get(), GetSyncFileSystemDir(context->GetPath()), task_logger,
205 drive_task_runner.get(), 202 notification_manager, extension_service, signin_manager, token_service,
206 worker_pool.get(), 203 request_context.get(), base::WrapUnique(new DriveServiceFactory()),
207 GetSyncFileSystemDir(context->GetPath()), 204 nullptr /* env_override */));
208 task_logger,
209 notification_manager,
210 extension_service,
211 signin_manager,
212 token_service,
213 request_context.get(),
214 make_scoped_ptr(new DriveServiceFactory()),
215 nullptr /* env_override */));
216 205
217 sync_engine->Initialize(); 206 sync_engine->Initialize();
218 return sync_engine; 207 return sync_engine;
219 } 208 }
220 209
221 void SyncEngine::AppendDependsOnFactories( 210 void SyncEngine::AppendDependsOnFactories(
222 std::set<BrowserContextKeyedServiceFactory*>* factories) { 211 std::set<BrowserContextKeyedServiceFactory*>* factories) {
223 DCHECK(factories); 212 DCHECK(factories);
224 factories->insert(drive::DriveNotificationManagerFactory::GetInstance()); 213 factories->insert(drive::DriveNotificationManagerFactory::GetInstance());
225 factories->insert(SigninManagerFactory::GetInstance()); 214 factories->insert(SigninManagerFactory::GetInstance());
(...skipping 29 matching lines...) Expand all
255 callback_tracker_.AbortAll(); 244 callback_tracker_.AbortAll();
256 } 245 }
257 246
258 void SyncEngine::Initialize() { 247 void SyncEngine::Initialize() {
259 Reset(); 248 Reset();
260 249
261 if (!signin_manager_ || !signin_manager_->IsAuthenticated()) 250 if (!signin_manager_ || !signin_manager_->IsAuthenticated())
262 return; 251 return;
263 252
264 DCHECK(drive_service_factory_); 253 DCHECK(drive_service_factory_);
265 scoped_ptr<drive::DriveServiceInterface> drive_service = 254 std::unique_ptr<drive::DriveServiceInterface> drive_service =
266 drive_service_factory_->CreateDriveService( 255 drive_service_factory_->CreateDriveService(
267 token_service_, request_context_.get(), drive_task_runner_.get()); 256 token_service_, request_context_.get(), drive_task_runner_.get());
268 scoped_ptr<drive::DriveUploaderInterface> drive_uploader( 257 std::unique_ptr<drive::DriveUploaderInterface> drive_uploader(
269 new drive::DriveUploader(drive_service.get(), drive_task_runner_.get())); 258 new drive::DriveUploader(drive_service.get(), drive_task_runner_.get()));
270 259
271 InitializeInternal(std::move(drive_service), std::move(drive_uploader), 260 InitializeInternal(std::move(drive_service), std::move(drive_uploader),
272 nullptr); 261 nullptr);
273 } 262 }
274 263
275 void SyncEngine::InitializeForTesting( 264 void SyncEngine::InitializeForTesting(
276 scoped_ptr<drive::DriveServiceInterface> drive_service, 265 std::unique_ptr<drive::DriveServiceInterface> drive_service,
277 scoped_ptr<drive::DriveUploaderInterface> drive_uploader, 266 std::unique_ptr<drive::DriveUploaderInterface> drive_uploader,
278 scoped_ptr<SyncWorkerInterface> sync_worker) { 267 std::unique_ptr<SyncWorkerInterface> sync_worker) {
279 Reset(); 268 Reset();
280 InitializeInternal(std::move(drive_service), std::move(drive_uploader), 269 InitializeInternal(std::move(drive_service), std::move(drive_uploader),
281 std::move(sync_worker)); 270 std::move(sync_worker));
282 } 271 }
283 272
284 void SyncEngine::InitializeInternal( 273 void SyncEngine::InitializeInternal(
285 scoped_ptr<drive::DriveServiceInterface> drive_service, 274 std::unique_ptr<drive::DriveServiceInterface> drive_service,
286 scoped_ptr<drive::DriveUploaderInterface> drive_uploader, 275 std::unique_ptr<drive::DriveUploaderInterface> drive_uploader,
287 scoped_ptr<SyncWorkerInterface> sync_worker) { 276 std::unique_ptr<SyncWorkerInterface> sync_worker) {
288 drive_service_ = std::move(drive_service); 277 drive_service_ = std::move(drive_service);
289 drive_service_wrapper_.reset(new DriveServiceWrapper(drive_service_.get())); 278 drive_service_wrapper_.reset(new DriveServiceWrapper(drive_service_.get()));
290 279
291 std::string account_id; 280 std::string account_id;
292 if (signin_manager_) 281 if (signin_manager_)
293 account_id = signin_manager_->GetAuthenticatedAccountId(); 282 account_id = signin_manager_->GetAuthenticatedAccountId();
294 drive_service_->Initialize(account_id); 283 drive_service_->Initialize(account_id);
295 284
296 drive_uploader_ = std::move(drive_uploader); 285 drive_uploader_ = std::move(drive_uploader);
297 drive_uploader_wrapper_.reset( 286 drive_uploader_wrapper_.reset(
298 new DriveUploaderWrapper(drive_uploader_.get())); 287 new DriveUploaderWrapper(drive_uploader_.get()));
299 288
300 // DriveServiceWrapper and DriveServiceOnWorker relay communications 289 // DriveServiceWrapper and DriveServiceOnWorker relay communications
301 // between DriveService and syncers in SyncWorker. 290 // between DriveService and syncers in SyncWorker.
302 scoped_ptr<drive::DriveServiceInterface> drive_service_on_worker( 291 std::unique_ptr<drive::DriveServiceInterface> drive_service_on_worker(
303 new DriveServiceOnWorker(drive_service_wrapper_->AsWeakPtr(), 292 new DriveServiceOnWorker(drive_service_wrapper_->AsWeakPtr(),
304 ui_task_runner_.get(), 293 ui_task_runner_.get(),
305 worker_task_runner_.get())); 294 worker_task_runner_.get()));
306 scoped_ptr<drive::DriveUploaderInterface> drive_uploader_on_worker( 295 std::unique_ptr<drive::DriveUploaderInterface> drive_uploader_on_worker(
307 new DriveUploaderOnWorker(drive_uploader_wrapper_->AsWeakPtr(), 296 new DriveUploaderOnWorker(drive_uploader_wrapper_->AsWeakPtr(),
308 ui_task_runner_.get(), 297 ui_task_runner_.get(),
309 worker_task_runner_.get())); 298 worker_task_runner_.get()));
310 scoped_ptr<SyncEngineContext> sync_engine_context(new SyncEngineContext( 299 std::unique_ptr<SyncEngineContext> sync_engine_context(new SyncEngineContext(
311 std::move(drive_service_on_worker), std::move(drive_uploader_on_worker), 300 std::move(drive_service_on_worker), std::move(drive_uploader_on_worker),
312 task_logger_, ui_task_runner_.get(), worker_task_runner_.get(), 301 task_logger_, ui_task_runner_.get(), worker_task_runner_.get(),
313 worker_pool_.get())); 302 worker_pool_.get()));
314 303
315 worker_observer_.reset(new WorkerObserver(ui_task_runner_.get(), 304 worker_observer_.reset(new WorkerObserver(ui_task_runner_.get(),
316 weak_ptr_factory_.GetWeakPtr())); 305 weak_ptr_factory_.GetWeakPtr()));
317 306
318 base::WeakPtr<ExtensionServiceInterface> extension_service_weak_ptr; 307 base::WeakPtr<ExtensionServiceInterface> extension_service_weak_ptr;
319 if (extension_service_) 308 if (extension_service_)
320 extension_service_weak_ptr = extension_service_->AsWeakPtr(); 309 extension_service_weak_ptr = extension_service_->AsWeakPtr();
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 RemoteServiceState SyncEngine::GetCurrentState() const { 479 RemoteServiceState SyncEngine::GetCurrentState() const {
491 if (!sync_enabled_) 480 if (!sync_enabled_)
492 return REMOTE_SERVICE_DISABLED; 481 return REMOTE_SERVICE_DISABLED;
493 if (!has_refresh_token_) 482 if (!has_refresh_token_)
494 return REMOTE_SERVICE_AUTHENTICATION_REQUIRED; 483 return REMOTE_SERVICE_AUTHENTICATION_REQUIRED;
495 return service_state_; 484 return service_state_;
496 } 485 }
497 486
498 void SyncEngine::GetOriginStatusMap(const StatusMapCallback& callback) { 487 void SyncEngine::GetOriginStatusMap(const StatusMapCallback& callback) {
499 base::Closure abort_closure = 488 base::Closure abort_closure =
500 base::Bind(callback, base::Passed(scoped_ptr<OriginStatusMap>())); 489 base::Bind(callback, base::Passed(std::unique_ptr<OriginStatusMap>()));
501 490
502 if (!sync_worker_) { 491 if (!sync_worker_) {
503 abort_closure.Run(); 492 abort_closure.Run();
504 return; 493 return;
505 } 494 }
506 495
507 StatusMapCallback tracked_callback = 496 StatusMapCallback tracked_callback =
508 callback_tracker_.Register(abort_closure, callback); 497 callback_tracker_.Register(abort_closure, callback);
509 StatusMapCallback relayed_callback = 498 StatusMapCallback relayed_callback =
510 RelayCallbackToCurrentThread(FROM_HERE, tracked_callback); 499 RelayCallbackToCurrentThread(FROM_HERE, tracked_callback);
511 500
512 worker_task_runner_->PostTask( 501 worker_task_runner_->PostTask(
513 FROM_HERE, 502 FROM_HERE,
514 base::Bind(&SyncWorkerInterface::GetOriginStatusMap, 503 base::Bind(&SyncWorkerInterface::GetOriginStatusMap,
515 base::Unretained(sync_worker_.get()), 504 base::Unretained(sync_worker_.get()),
516 relayed_callback)); 505 relayed_callback));
517 } 506 }
518 507
519 void SyncEngine::DumpFiles(const GURL& origin, 508 void SyncEngine::DumpFiles(const GURL& origin,
520 const ListCallback& callback) { 509 const ListCallback& callback) {
521 base::Closure abort_closure = 510 base::Closure abort_closure =
522 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())); 511 base::Bind(callback, base::Passed(std::unique_ptr<base::ListValue>()));
523 512
524 if (!sync_worker_) { 513 if (!sync_worker_) {
525 abort_closure.Run(); 514 abort_closure.Run();
526 return; 515 return;
527 } 516 }
528 517
529 ListCallback tracked_callback = 518 ListCallback tracked_callback =
530 callback_tracker_.Register(abort_closure, callback); 519 callback_tracker_.Register(abort_closure, callback);
531 520
532 PostTaskAndReplyWithResult(worker_task_runner_.get(), 521 PostTaskAndReplyWithResult(worker_task_runner_.get(),
533 FROM_HERE, 522 FROM_HERE,
534 base::Bind(&SyncWorkerInterface::DumpFiles, 523 base::Bind(&SyncWorkerInterface::DumpFiles,
535 base::Unretained(sync_worker_.get()), 524 base::Unretained(sync_worker_.get()),
536 origin), 525 origin),
537 tracked_callback); 526 tracked_callback);
538 } 527 }
539 528
540 void SyncEngine::DumpDatabase(const ListCallback& callback) { 529 void SyncEngine::DumpDatabase(const ListCallback& callback) {
541 base::Closure abort_closure = 530 base::Closure abort_closure =
542 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())); 531 base::Bind(callback, base::Passed(std::unique_ptr<base::ListValue>()));
543 532
544 if (!sync_worker_) { 533 if (!sync_worker_) {
545 abort_closure.Run(); 534 abort_closure.Run();
546 return; 535 return;
547 } 536 }
548 537
549 ListCallback tracked_callback = 538 ListCallback tracked_callback =
550 callback_tracker_.Register(abort_closure, callback); 539 callback_tracker_.Register(abort_closure, callback);
551 540
552 PostTaskAndReplyWithResult(worker_task_runner_.get(), 541 PostTaskAndReplyWithResult(worker_task_runner_.get(),
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 const scoped_refptr<base::SequencedTaskRunner>& worker_task_runner, 710 const scoped_refptr<base::SequencedTaskRunner>& worker_task_runner,
722 const scoped_refptr<base::SequencedTaskRunner>& drive_task_runner, 711 const scoped_refptr<base::SequencedTaskRunner>& drive_task_runner,
723 const scoped_refptr<base::SequencedWorkerPool>& worker_pool, 712 const scoped_refptr<base::SequencedWorkerPool>& worker_pool,
724 const base::FilePath& sync_file_system_dir, 713 const base::FilePath& sync_file_system_dir,
725 TaskLogger* task_logger, 714 TaskLogger* task_logger,
726 drive::DriveNotificationManager* notification_manager, 715 drive::DriveNotificationManager* notification_manager,
727 ExtensionServiceInterface* extension_service, 716 ExtensionServiceInterface* extension_service,
728 SigninManagerBase* signin_manager, 717 SigninManagerBase* signin_manager,
729 OAuth2TokenService* token_service, 718 OAuth2TokenService* token_service,
730 net::URLRequestContextGetter* request_context, 719 net::URLRequestContextGetter* request_context,
731 scoped_ptr<DriveServiceFactory> drive_service_factory, 720 std::unique_ptr<DriveServiceFactory> drive_service_factory,
732 leveldb::Env* env_override) 721 leveldb::Env* env_override)
733 : ui_task_runner_(ui_task_runner), 722 : ui_task_runner_(ui_task_runner),
734 worker_task_runner_(worker_task_runner), 723 worker_task_runner_(worker_task_runner),
735 drive_task_runner_(drive_task_runner), 724 drive_task_runner_(drive_task_runner),
736 worker_pool_(worker_pool), 725 worker_pool_(worker_pool),
737 sync_file_system_dir_(sync_file_system_dir), 726 sync_file_system_dir_(sync_file_system_dir),
738 task_logger_(task_logger), 727 task_logger_(task_logger),
739 notification_manager_(notification_manager), 728 notification_manager_(notification_manager),
740 extension_service_(extension_service), 729 extension_service_(extension_service),
741 signin_manager_(signin_manager), 730 signin_manager_(signin_manager),
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 775
787 SyncStatusCallback SyncEngine::TrackCallback( 776 SyncStatusCallback SyncEngine::TrackCallback(
788 const SyncStatusCallback& callback) { 777 const SyncStatusCallback& callback) {
789 return callback_tracker_.Register( 778 return callback_tracker_.Register(
790 base::Bind(callback, SYNC_STATUS_ABORT), 779 base::Bind(callback, SYNC_STATUS_ABORT),
791 callback); 780 callback);
792 } 781 }
793 782
794 } // namespace drive_backend 783 } // namespace drive_backend
795 } // namespace sync_file_system 784 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698