1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_CHROME_SELECT_FILE_DIALOG_FACTORY_WIN_H_ 6#define CHROME_BROWSER_CHROME_SELECT_FILE_DIALOG_FACTORY_WIN_H_ 7 8#include "base/compiler_specific.h" 9#include "base/macros.h" 10#include "base/memory/ref_counted.h" 11#include "ui/shell_dialogs/select_file_dialog_factory.h" 12 13namespace base { 14class SequencedTaskRunner; 15} // namespace base 16 17// Implements a Select File dialog that delegates to a Metro file picker on 18// Metro and to a utility process otherwise. The utility process is used in 19// order to isolate the Chrome browser process from potential instability 20// caused by Shell extension modules loaded by GetOpenFileName. 21class ChromeSelectFileDialogFactory : public ui::SelectFileDialogFactory { 22 public: 23 // Uses |blocking_task_runner| to perform IPC with the utility process. 24 explicit ChromeSelectFileDialogFactory( 25 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner); 26 virtual ~ChromeSelectFileDialogFactory(); 27 28 // ui::SelectFileDialogFactory implementation 29 virtual ui::SelectFileDialog* Create(ui::SelectFileDialog::Listener* listener, 30 ui::SelectFilePolicy* policy) OVERRIDE; 31 32 private: 33 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_; 34 35 DISALLOW_COPY_AND_ASSIGN(ChromeSelectFileDialogFactory); 36}; 37 38#endif // CHROME_BROWSER_CHROME_SELECT_FILE_DIALOG_FACTORY_WIN_H_ 39