file_task_executor.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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)
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_errors.h"
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/extensions/file_manager/file_handler_util.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/google_apis/gdata_errorcode.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace drive {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ResourceEntry;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class implements an "executor" class that will execute tasks for
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// third party Drive apps that store data in Drive itself.  To do that, it
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// needs to find the file resource IDs and pass them to a server-side function
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that will authorize the app to open the given document and return a URL
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for opening the document in that app directly.
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FileTaskExecutor : public file_handler_util::FileTaskExecutor {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // FileTaskExecutor overrides
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ExecuteAndNotify(
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::vector<fileapi::FileSystemURL>& file_urls,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const file_handler_util::FileTaskFinishedCallback& done) OVERRIDE;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // FileTaskExecutor is the only class allowed to create one.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class file_handler_util::FileTaskExecutor;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FileTaskExecutor(Profile* profile,
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                   const std::string& app_id,
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                   const std::string& action_id);
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual ~FileTaskExecutor();
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void OnFileEntryFetched(FileError error,
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          scoped_ptr<ResourceEntry> entry);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnAppAuthorized(const std::string& resource_id,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       google_apis::GDataErrorCode error,
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       const GURL& open_link);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Calls |done_| with |success| status.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Done(bool success);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GURL source_url_;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string action_id_;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int current_index_;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file_handler_util::FileTaskFinishedCallback done_;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace drive
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_DRIVE_FILE_TASK_EXECUTOR_H_
58