folder_creator.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_FOLDER_CREATOR_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_FOLDER_CREATOR_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_vector.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync_file_system/sync_callbacks.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "google_apis/drive/gdata_errorcode.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace drive {
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DriveServiceInterface;
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace google_apis {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ResourceEntry;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ResourceList;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace sync_file_system {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace drive_backend {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MetadataDatabase;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SyncEngineContext;
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FolderCreator {
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  typedef base::Callback<void(const std::string& file_id,
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              SyncStatusCode status)> FileIDCallback;
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FolderCreator(drive::DriveServiceInterface* drive_service,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                MetadataDatabase* metadata_database,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                const std::string& parent_folder_id,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                const std::string& title);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~FolderCreator();
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Run(const FileIDCallback& callback);
43
44 private:
45  void DidCreateFolder(const FileIDCallback& callback,
46                       google_apis::GDataErrorCode error,
47                       scoped_ptr<google_apis::ResourceEntry> entry);
48  void DidListFolders(const FileIDCallback& callback,
49                      ScopedVector<google_apis::ResourceEntry> candidates,
50                      google_apis::GDataErrorCode error,
51                      scoped_ptr<google_apis::ResourceList> resource_list);
52  void DidUpdateDatabase(const std::string& file_id,
53                         const FileIDCallback& callback,
54                         SyncStatusCode status);
55
56  drive::DriveServiceInterface* drive_service_;
57  MetadataDatabase* metadata_database_;
58
59  const std::string parent_folder_id_;
60  const std::string title_;
61
62  base::WeakPtrFactory<FolderCreator> weak_ptr_factory_;
63
64  DISALLOW_COPY_AND_ASSIGN(FolderCreator);
65};
66
67}  // namespace drive_backend
68}  // namespace sync_file_system
69
70#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_FOLDER_CREATOR_H_
71