1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file.
4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_FILE_BROWSER_PRIVATE_API_H_
6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#define CHROME_BROWSER_EXTENSIONS_EXTENSION_FILE_BROWSER_PRIVATE_API_H_
7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#pragma once
8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <map>
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <string>
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <vector>
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/platform_file.h"
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/extensions/extension_function.h"
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/shell_dialogs.h"
16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "googleurl/src/url_util.h"
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "webkit/fileapi/file_system_callback_dispatcher.h"
18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass GURL;
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass HtmlDialogView;
21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Implements the chrome.fileBrowserPrivate.requestLocalFileSystem method.
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass RequestLocalFileSystemFunction : public AsyncExtensionFunction {
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected:
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  friend class LocalFileSystemCallbackDispatcher;
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // AsyncExtensionFunction overrides.
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual bool RunImpl() OVERRIDE;
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void RespondSuccessOnUIThread(const std::string& name,
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                const GURL& root_path);
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void RespondFailedOnUIThread(base::PlatformFileError error_code);
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void RequestOnFileThread(const GURL& source_url, int child_id);
32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.requestLocalFileSystem");
33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen};
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Implements the chrome.fileBrowserPrivate.getFileTasks method.
36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass GetFileTasksFileBrowserFunction : public AsyncExtensionFunction {
37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected:
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // AsyncExtensionFunction overrides.
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual bool RunImpl() OVERRIDE;
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private:
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.getFileTasks");
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen};
44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Implements the chrome.fileBrowserPrivate.executeTask method.
47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ExecuteTasksFileBrowserFunction : public AsyncExtensionFunction {
48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected:
49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // AsyncExtensionFunction overrides.
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual bool RunImpl() OVERRIDE;
51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private:
53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  struct FileDefinition {
54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    GURL target_file_url;
55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    FilePath virtual_path;
56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    bool is_directory;
57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  };
58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  typedef std::vector<FileDefinition> FileDefinitionList;
59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  friend class ExecuteTasksFileSystemCallbackDispatcher;
60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Initates execution of context menu tasks identified with |task_id| for
61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // each element of |files_list|.
62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool InitiateFileTaskExecution(const std::string& task_id,
63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                 ListValue* files_list);
64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void RequestFileEntryOnFileThread(const GURL& source_url,
65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                    const std::string& task_id,
66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                    const std::vector<GURL>& file_urls);
67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void RespondFailedOnUIThread(base::PlatformFileError error_code);
68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void ExecuteFileActionsOnUIThread(const std::string& task_id,
69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                    const std::string& file_system_name,
70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                    const GURL& file_system_root,
71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                    const FileDefinitionList& file_list);
72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void ExecuteFailedOnUIThread();
73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.executeTask");
74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen};
75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Parent class for the chromium extension APIs for the file dialog.
77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass FileDialogFunction
78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    : public AsyncExtensionFunction {
79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public:
80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  FileDialogFunction();
81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Register/unregister callbacks.
83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // When file selection events occur in a tab, we'll call back the
84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // appropriate listener with the right params.
85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  class Callback {
86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen   public:
87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    Callback(SelectFileDialog::Listener* listener,
88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen             HtmlDialogView* dialog,
89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen             void* params)
90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        : listener_(listener),
91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          dialog_(dialog),
92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          params_(params) {
93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    }
94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    SelectFileDialog::Listener* listener() const { return listener_; }
95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    HtmlDialogView* dialog() const { return dialog_; }
96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    void* params() const { return params_; }
97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    bool IsNull() const { return listener_ == NULL; }
98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    static void Add(int32 tab_id,
100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                    SelectFileDialog::Listener* listener,
101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                    HtmlDialogView* dialog,
102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                    void* params);
103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    static void Remove(int32 tab_id);
104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    static const Callback& Find(int32 tab_id);
105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    static const Callback& null() { return null_; }
106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen   private:
108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    SelectFileDialog::Listener* listener_;
110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    HtmlDialogView* dialog_;
111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    void* params_;
112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // statics.
114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    typedef std::map<int32, Callback> Map;
115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    static Map map_;
116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    static Callback null_;
117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  };
118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected:
120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  typedef std::vector<GURL> UrlList;
121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  typedef std::vector<FilePath> FilePathList;
122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual ~FileDialogFunction();
124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Convert virtual paths to local paths on the file thread.
126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void GetLocalPathsOnFileThread(const UrlList& file_urls,
127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                 const std::string& internal_task_id);
128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Callback with converted local paths.
130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void GetLocalPathsResponseOnUIThread(const FilePathList& files,
131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      const std::string& internal_task_id) {}
132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Get the callback for the hosting tab.
134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const Callback& GetCallback() const;
135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Closes the dialog window containing the file dialog HtmlDialogView.
137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void CloseDialog(HtmlDialogView* dialog);
138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private:
140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Figure out the tab_id of the hosting tab.
141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  int32 GetTabId() const;
142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen};
143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Select a single file.  Closes the dialog window.
145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass SelectFileFunction
146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    : public FileDialogFunction {
147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public:
148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  SelectFileFunction() {}
149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected:
151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual ~SelectFileFunction() {}
152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // AsyncExtensionFunction overrides.
154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual bool RunImpl() OVERRIDE;
155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // FileDialogFunction overrides.
157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void GetLocalPathsResponseOnUIThread(
158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      const FilePathList& files, const std::string& internal_task_id) OVERRIDE;
159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private:
161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.selectFile");
162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen};
163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// View multiple selected files.  Window stays open.
165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ViewFilesFunction
166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    : public FileDialogFunction {
167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public:
168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ViewFilesFunction();
169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected:
171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual ~ViewFilesFunction();
172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // AsyncExtensionFunction overrides.
174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual bool RunImpl() OVERRIDE;
175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // FileDialogFunction overrides.
177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void GetLocalPathsResponseOnUIThread(
178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      const FilePathList& files, const std::string& internal_task_id) OVERRIDE;
179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private:
181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.viewFiles");
182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen};
183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Select multiple files.  Closes the dialog window.
185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass SelectFilesFunction
186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    : public FileDialogFunction {
187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public:
188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  SelectFilesFunction();
189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected:
191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual ~SelectFilesFunction();
192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // AsyncExtensionFunction overrides.
194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual bool RunImpl() OVERRIDE;
195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // FileDialogFunction overrides.
197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void GetLocalPathsResponseOnUIThread(
198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      const FilePathList& files, const std::string& internal_task_id) OVERRIDE;
199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private:
201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.selectFiles");
202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen};
203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Cancel file selection Dialog.  Closes the dialog window.
205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass CancelFileDialogFunction
206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    : public FileDialogFunction {
207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public:
208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  CancelFileDialogFunction() {}
209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected:
211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual ~CancelFileDialogFunction() {}
212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // AsyncExtensionFunction overrides.
214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual bool RunImpl() OVERRIDE;
215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private:
217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.cancelDialog");
218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen};
219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// File Dialog Strings.
221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass FileDialogStringsFunction : public SyncExtensionFunction {
222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public:
223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  FileDialogStringsFunction() {}
224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected:
226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual ~FileDialogStringsFunction() {}
227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // SyncExtensionFunction overrides.
229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual bool RunImpl() OVERRIDE;
230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private:
232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DECLARE_EXTENSION_FUNCTION_NAME("fileBrowserPrivate.getStrings");
233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen};
234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_FILE_BROWSER_PRIVATE_API_H_
236