sync_task_token.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_TASK_TOKEN_H_ 6#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_TASK_TOKEN_H_ 7 8#include "base/callback.h" 9#include "base/location.h" 10#include "base/memory/scoped_ptr.h" 11#include "base/memory/weak_ptr.h" 12#include "chrome/browser/sync_file_system/sync_callbacks.h" 13 14namespace sync_file_system { 15namespace drive_backend { 16 17class SyncTaskManager; 18 19// Represents a running sequence of SyncTasks. Owned by a callback chain that 20// should run exclusively, and held by SyncTaskManager when no task is running. 21class SyncTaskToken { 22 public: 23 explicit SyncTaskToken(const base::WeakPtr<SyncTaskManager>& manager); 24 25 void UpdateTask(const tracked_objects::Location& location, 26 const SyncStatusCallback& callback); 27 28 const tracked_objects::Location& location() const { return location_; } 29 ~SyncTaskToken(); 30 31 SyncTaskManager* manager() { return manager_.get(); } 32 const SyncStatusCallback& callback() { return callback_; } 33 void clear_callback() { callback_.Reset(); } 34 35 static SyncStatusCallback WrapToCallback(scoped_ptr<SyncTaskToken> token); 36 37 private: 38 base::WeakPtr<SyncTaskManager> manager_; 39 tracked_objects::Location location_; 40 SyncStatusCallback callback_; 41 42 DISALLOW_COPY_AND_ASSIGN(SyncTaskToken); 43}; 44 45 46} // namespace drive_backend 47} // namespace sync_file_system 48 49#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_TASK_TOKEN_H_ 50