file_task_executor.h revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_DRIVE_FILE_TASK_EXECUTOR_H_
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_DRIVE_FILE_TASK_EXECUTOR_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/callback.h"
127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/memory/weak_ptr.h"
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_errors.h"
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chromeos/file_manager/file_tasks.h"
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/gdata_errorcode.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace drive {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ResourceEntry;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class implements an "executor" class that will execute tasks for
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// third party Drive apps that store data in Drive itself.  To do that, it
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// needs to find the file resource IDs and pass them to a server-side function
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that will authorize the app to open the given document and return a URL
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for opening the document in that app directly.
267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class FileTaskExecutor {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  FileTaskExecutor(Profile* profile, const std::string& app_id);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Executes file tasks, runs |done| and deletes |this|.
31a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  void Execute(
32a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      const std::vector<fileapi::FileSystemURL>& file_urls,
33a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      const file_manager::file_tasks::FileTaskFinishedCallback& done);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private:
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ~FileTaskExecutor();
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void OnFileEntryFetched(FileError error, scoped_ptr<ResourceEntry> entry);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnAppAuthorized(const std::string& resource_id,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       google_apis::GDataErrorCode error,
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       const GURL& open_link);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // Calls |done_| with |success| status and deletes |this|.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Done(bool success);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Profile* profile_;
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  std::string app_id_;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int current_index_;
49a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  file_manager::file_tasks::FileTaskFinishedCallback done_;
507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::WeakPtrFactory<FileTaskExecutor> weak_ptr_factory_;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace drive
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_DRIVE_FILE_TASK_EXECUTOR_H_
57