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
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_UNINSTALL_APP_TASK_H_
6#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_UNINSTALL_APP_TASK_H_
7
8#include <string>
9
10#include "base/memory/scoped_ptr.h"
11#include "base/memory/weak_ptr.h"
12#include "chrome/browser/sync_file_system/drive_backend/sync_task.h"
13#include "chrome/browser/sync_file_system/remote_file_sync_service.h"
14#include "chrome/browser/sync_file_system/sync_callbacks.h"
15#include "google_apis/drive/gdata_errorcode.h"
16
17namespace drive {
18class DriveServiceInterface;
19}
20
21namespace google_apis {
22class ResourceEntry;
23class ResourceList;
24}
25
26namespace sync_file_system {
27namespace drive_backend {
28
29class FileTracker;
30class MetadataDatabase;
31class SyncEngineContext;
32class TrackerSet;
33
34class UninstallAppTask : public ExclusiveTask {
35 public:
36  typedef RemoteFileSyncService::UninstallFlag UninstallFlag;
37  UninstallAppTask(SyncEngineContext* sync_context,
38                   const std::string& app_id,
39                   UninstallFlag uninstall_flag);
40  virtual ~UninstallAppTask();
41
42  virtual void RunExclusive(const SyncStatusCallback& callback) OVERRIDE;
43
44 private:
45  void DidDeleteAppRoot(const SyncStatusCallback& callback,
46                        int64 change_id,
47                        google_apis::GDataErrorCode error);
48
49  bool IsContextReady();
50  MetadataDatabase* metadata_database();
51  drive::DriveServiceInterface* drive_service();
52
53  SyncEngineContext* sync_context_;  // Not owned.
54
55  std::string app_id_;
56  UninstallFlag uninstall_flag_;
57  int64 app_root_tracker_id_;
58
59  base::WeakPtrFactory<UninstallAppTask> weak_ptr_factory_;
60
61  DISALLOW_COPY_AND_ASSIGN(UninstallAppTask);
62};
63
64}  // namespace drive_backend
65}  // namespace sync_file_system
66
67#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_UNINSTALL_APP_TASK_H_
68