| Index: chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.h | 
| diff --git a/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.h b/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..c034207d76125f62da0d691e4a7ff3454fe139ac | 
| --- /dev/null | 
| +++ b/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.h | 
| @@ -0,0 +1,134 @@ | 
| +// Copyright 2015 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +#ifndef CHROME_BROWSER_UI_LIBGTK2UI_SELECT_FILE_DIALOG_IMPL_GTK2_H_ | 
| +#define CHROME_BROWSER_UI_LIBGTK2UI_SELECT_FILE_DIALOG_IMPL_GTK2_H_ | 
| + | 
| +#include "base/macros.h" | 
| +#include "chrome/browser/ui/libgtk2ui/gtk2_signal.h" | 
| +#include "chrome/browser/ui/libgtk2ui/gtk2_util.h" | 
| +#include "chrome/browser/ui/libgtk2ui/select_file_dialog_impl.h" | 
| + | 
| +namespace libgtk2ui { | 
| + | 
| +// Implementation of SelectFileDialog that shows a Gtk common dialog for | 
| +// choosing a file or folder. This acts as a modal dialog. | 
| +class SelectFileDialogImplGTK : public SelectFileDialogImpl, | 
| +                                public aura::WindowObserver { | 
| + public: | 
| +  SelectFileDialogImplGTK(Listener* listener, | 
| +                          ui::SelectFilePolicy* policy); | 
| + | 
| + protected: | 
| +  ~SelectFileDialogImplGTK() override; | 
| + | 
| +  // BaseShellDialog implementation: | 
| +  bool IsRunning(gfx::NativeWindow parent_window) const override; | 
| + | 
| +  // SelectFileDialog implementation. | 
| +  // |params| is user data we pass back via the Listener interface. | 
| +  void SelectFileImpl(Type type, | 
| +                      const base::string16& title, | 
| +                      const base::FilePath& default_path, | 
| +                      const FileTypeInfo* file_types, | 
| +                      int file_type_index, | 
| +                      const base::FilePath::StringType& default_extension, | 
| +                      gfx::NativeWindow owning_window, | 
| +                      void* params) override; | 
| + | 
| + private: | 
| +  friend class FilePicker; | 
| +  bool HasMultipleFileTypeChoicesImpl() override; | 
| + | 
| +  // Overridden from aura::WindowObserver: | 
| +  void OnWindowDestroying(aura::Window* window) override; | 
| + | 
| +  // Add the filters from |file_types_| to |chooser|. | 
| +  void AddFilters(GtkFileChooser* chooser); | 
| + | 
| +  // Notifies the listener that a single file was chosen. | 
| +  void FileSelected(GtkWidget* dialog, const base::FilePath& path); | 
| + | 
| +  // Notifies the listener that multiple files were chosen. | 
| +  void MultiFilesSelected(GtkWidget* dialog, | 
| +                          const std::vector<base::FilePath>& files); | 
| + | 
| +  // Notifies the listener that no file was chosen (the action was canceled). | 
| +  // Dialog is passed so we can find that |params| pointer that was passed to | 
| +  // us when we were told to show the dialog. | 
| +  void FileNotSelected(GtkWidget* dialog); | 
| + | 
| +  GtkWidget* CreateSelectFolderDialog( | 
| +      Type type, | 
| +      const std::string& title, | 
| +      const base::FilePath& default_path, | 
| +      gfx::NativeWindow parent); | 
| + | 
| +  GtkWidget* CreateFileOpenDialog(const std::string& title, | 
| +      const base::FilePath& default_path, gfx::NativeWindow parent); | 
| + | 
| +  GtkWidget* CreateMultiFileOpenDialog(const std::string& title, | 
| +      const base::FilePath& default_path, gfx::NativeWindow parent); | 
| + | 
| +  GtkWidget* CreateSaveAsDialog(const std::string& title, | 
| +      const base::FilePath& default_path, gfx::NativeWindow parent); | 
| + | 
| +  // Removes and returns the |params| associated with |dialog| from | 
| +  // |params_map_|. | 
| +  void* PopParamsForDialog(GtkWidget* dialog); | 
| + | 
| +  // Take care of internal data structures when a file dialog is destroyed. | 
| +  void FileDialogDestroyed(GtkWidget* dialog); | 
| + | 
| +  // Check whether response_id corresponds to the user cancelling/closing the | 
| +  // dialog. Used as a helper for the below callbacks. | 
| +  bool IsCancelResponse(gint response_id); | 
| + | 
| +  // Common function for OnSelectSingleFileDialogResponse and | 
| +  // OnSelectSingleFolderDialogResponse. | 
| +  void SelectSingleFileHelper(GtkWidget* dialog, | 
| +                              gint response_id, | 
| +                              bool allow_folder); | 
| + | 
| +  // Common function for CreateFileOpenDialog and CreateMultiFileOpenDialog. | 
| +  GtkWidget* CreateFileOpenHelper(const std::string& title, | 
| +                                  const base::FilePath& default_path, | 
| +                                  gfx::NativeWindow parent); | 
| + | 
| +  // Callback for when the user responds to a Save As or Open File dialog. | 
| +  CHROMEGTK_CALLBACK_1(SelectFileDialogImplGTK, void, | 
| +                       OnSelectSingleFileDialogResponse, int); | 
| + | 
| +  // Callback for when the user responds to a Select Folder dialog. | 
| +  CHROMEGTK_CALLBACK_1(SelectFileDialogImplGTK, void, | 
| +                       OnSelectSingleFolderDialogResponse, int); | 
| + | 
| +  // Callback for when the user responds to a Open Multiple Files dialog. | 
| +  CHROMEGTK_CALLBACK_1(SelectFileDialogImplGTK, void, | 
| +                       OnSelectMultiFileDialogResponse, int); | 
| + | 
| +  // Callback for when the file chooser gets destroyed. | 
| +  CHROMEGTK_CALLBACK_0(SelectFileDialogImplGTK, void, OnFileChooserDestroy); | 
| + | 
| +  // Callback for when we update the preview for the selection. | 
| +  CHROMEGTK_CALLBACK_0(SelectFileDialogImplGTK, void, OnUpdatePreview); | 
| + | 
| +  // A map from dialog windows to the |params| user data associated with them. | 
| +  std::map<GtkWidget*, void*> params_map_; | 
| + | 
| +  // The GtkImage widget for showing previews of selected images. | 
| +  GtkWidget* preview_; | 
| + | 
| +  // All our dialogs. | 
| +  std::set<GtkWidget*> dialogs_; | 
| + | 
| +  // The set of all parent windows for which we are currently running dialogs. | 
| +  std::set<aura::Window*> parents_; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(SelectFileDialogImplGTK); | 
| +}; | 
| + | 
| +}  // namespace libgtk2ui | 
| + | 
| +#endif  // CHROME_BROWSER_UI_LIBGTK2UI_SELECT_FILE_DIALOG_IMPL_GTK2_H_ | 
|  |