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