1// Copyright (c) 2011 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// A dialog box that tells the user that we can't write to the specified user 6// data directory. Provides the user a chance to pick a different directory. 7 8#ifndef CHROME_BROWSER_UI_VIEWS_USER_DATA_DIR_DIALOG_H_ 9#define CHROME_BROWSER_UI_VIEWS_USER_DATA_DIR_DIALOG_H_ 10#pragma once 11 12#include "base/basictypes.h" 13#include "base/message_loop.h" 14#include "chrome/browser/ui/shell_dialogs.h" 15#include "views/window/dialog_delegate.h" 16 17class FilePath; 18 19namespace views { 20class MessageBoxView; 21class Window; 22} 23 24class UserDataDirDialog : public views::DialogDelegate, 25 public MessageLoopForUI::Dispatcher, 26 public SelectFileDialog::Listener { 27 public: 28 // Creates and runs a user data directory picker dialog. The method blocks 29 // while the dialog is showing. If the user picks a directory, this method 30 // returns the chosen directory. |user_data_dir| is the value of the 31 // directory we were not able to use. 32 static FilePath RunUserDataDirDialog(const FilePath& user_data_dir); 33 virtual ~UserDataDirDialog(); 34 35 FilePath user_data_dir() const { return user_data_dir_; } 36 37 // views::DialogDelegate Methods: 38 virtual std::wstring GetDialogButtonLabel( 39 MessageBoxFlags::DialogButton button) const; 40 virtual std::wstring GetWindowTitle() const; 41 virtual void DeleteDelegate(); 42 virtual bool Accept(); 43 virtual bool Cancel(); 44 45 // views::WindowDelegate Methods: 46 virtual bool IsAlwaysOnTop() const { return false; } 47 virtual bool IsModal() const { return false; } 48 virtual views::View* GetContentsView(); 49 50 // MessageLoop::Dispatcher Method: 51 virtual bool Dispatch(const MSG& msg); 52 53 // SelectFileDialog::Listener Methods: 54 virtual void FileSelected(const FilePath& path, int index, void* params); 55 virtual void FileSelectionCanceled(void* params); 56 57 private: 58 explicit UserDataDirDialog(const FilePath& user_data_dir); 59 60 // Empty until the user picks a directory. 61 FilePath user_data_dir_; 62 63 views::MessageBoxView* message_box_view_; 64 scoped_refptr<SelectFileDialog> select_file_dialog_; 65 66 // Used to keep track of whether or not to block the message loop (still 67 // waiting for the user to dismiss the dialog). 68 bool is_blocking_; 69 70 DISALLOW_COPY_AND_ASSIGN(UserDataDirDialog); 71}; 72 73#endif // CHROME_BROWSER_UI_VIEWS_USER_DATA_DIR_DIALOG_H_ 74