Home | History | Annotate | Download | only in drive
      1 // Copyright (c) 2012 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_CHROMEOS_DRIVE_FILE_TASK_EXECUTOR_H_
      6 #define CHROME_BROWSER_CHROMEOS_DRIVE_FILE_TASK_EXECUTOR_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/callback.h"
     12 #include "base/memory/weak_ptr.h"
     13 #include "chrome/browser/chromeos/drive/file_errors.h"
     14 #include "chrome/browser/chromeos/file_manager/file_tasks.h"
     15 #include "google_apis/drive/gdata_errorcode.h"
     16 
     17 namespace drive {
     18 
     19 class DriveServiceInterface;
     20 class FileSystemInterface;
     21 class ResourceEntry;
     22 
     23 // Delegate class for hooking fake instances and behaviors for testing.
     24 class FileTaskExecutorDelegate {
     25  public:
     26   virtual ~FileTaskExecutorDelegate() {}
     27 
     28   virtual FileSystemInterface* GetFileSystem() = 0;
     29   virtual DriveServiceInterface* GetDriveService() = 0;
     30   virtual void OpenBrowserWindow(const GURL& open_link) = 0;
     31 };
     32 
     33 // This class implements an "executor" class that will execute tasks for
     34 // third party Drive apps that store data in Drive itself.  To do that, it
     35 // needs to find the file resource IDs and pass them to a server-side function
     36 // that will authorize the app to open the given document and return a URL
     37 // for opening the document in that app directly.
     38 class FileTaskExecutor {
     39  public:
     40   // Creates FileTaskExecutor with delegate derived from |profile|. Used in
     41   // product environment.
     42   FileTaskExecutor(Profile* profile, const std::string& app_id);
     43 
     44   // Creates FileTaskExecutor with a specific delegate.
     45   FileTaskExecutor(scoped_ptr<FileTaskExecutorDelegate> delegate,
     46                    const std::string& app_id);
     47 
     48   // Executes file tasks, runs |done| and deletes |this|.
     49   void Execute(const std::vector<storage::FileSystemURL>& file_urls,
     50                const file_manager::file_tasks::FileTaskFinishedCallback& done);
     51 
     52  private:
     53   ~FileTaskExecutor();
     54 
     55   void OnFileEntryFetched(FileError error, scoped_ptr<ResourceEntry> entry);
     56   void OnAppAuthorized(const std::string& resource_id,
     57                        google_apis::GDataErrorCode error,
     58                        const GURL& open_link);
     59 
     60   // Calls |done_| with |success| status and deletes |this|.
     61   void Done(bool success);
     62 
     63   scoped_ptr<FileTaskExecutorDelegate> delegate_;
     64   std::string app_id_;
     65   int current_index_;
     66   file_manager::file_tasks::FileTaskFinishedCallback done_;
     67 
     68   base::WeakPtrFactory<FileTaskExecutor> weak_ptr_factory_;
     69 };
     70 
     71 }  // namespace drive
     72 
     73 #endif  // CHROME_BROWSER_CHROMEOS_DRIVE_FILE_TASK_EXECUTOR_H_
     74