blob: caa0451d320ede7c41f19413ef222de2a32220ce [file] [log] [blame]
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_TASK_H_
#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_TASK_H_
#include <memory>
#include "base/memory/weak_ptr.h"
#include "chrome/browser/sync_file_system/sync_callbacks.h"
namespace sync_file_system {
namespace drive_backend {
class SyncTaskToken;
class SyncTask {
public:
SyncTask() : used_network_(false) {}
SyncTask(const SyncTask&) = delete;
SyncTask& operator=(const SyncTask&) = delete;
virtual ~SyncTask() = default;
virtual void RunPreflight(std::unique_ptr<SyncTaskToken> token) = 0;
bool used_network() { return used_network_; }
protected:
void set_used_network(bool used_network) {
used_network_ = used_network;
}
private:
bool used_network_;
};
class ExclusiveTask : public SyncTask {
public:
ExclusiveTask();
ExclusiveTask(const ExclusiveTask&) = delete;
ExclusiveTask& operator=(const ExclusiveTask&) = delete;
~ExclusiveTask() override;
void RunPreflight(std::unique_ptr<SyncTaskToken> token) final;
virtual void RunExclusive(SyncStatusCallback callback) = 0;
private:
base::WeakPtrFactory<ExclusiveTask> weak_ptr_factory_{this};
};
} // namespace drive_backend
} // namespace sync_file_system
#endif // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_SYNC_TASK_H_