Commit eea4c6d2 authored by tfarina@chromium.org's avatar tfarina@chromium.org

browser: Refactor the way to show the user data dir dialog.

BUG=125846
R=ben@chromium.org

Review URL: https://chromiumcodereview.appspot.com/10382155

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@137173 0039d316-1c4b-4281-b951-d872f2087c98
parent 460e67ce
...@@ -49,8 +49,8 @@ ...@@ -49,8 +49,8 @@
#include "chrome/browser/instant/instant_field_trial.h" #include "chrome/browser/instant/instant_field_trial.h"
#include "chrome/browser/jankometer.h" #include "chrome/browser/jankometer.h"
#include "chrome/browser/language_usage_metrics.h" #include "chrome/browser/language_usage_metrics.h"
#include "chrome/browser/metrics/histogram_synchronizer.h"
#include "chrome/browser/metrics/field_trial_synchronizer.h" #include "chrome/browser/metrics/field_trial_synchronizer.h"
#include "chrome/browser/metrics/histogram_synchronizer.h"
#include "chrome/browser/metrics/metrics_log.h" #include "chrome/browser/metrics/metrics_log.h"
#include "chrome/browser/metrics/metrics_service.h" #include "chrome/browser/metrics/metrics_service.h"
#include "chrome/browser/metrics/thread_watcher.h" #include "chrome/browser/metrics/thread_watcher.h"
...@@ -80,6 +80,7 @@ ...@@ -80,6 +80,7 @@
#include "chrome/browser/translate/translate_manager.h" #include "chrome/browser/translate/translate_manager.h"
#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/startup/startup_browser_creator.h" #include "chrome/browser/ui/startup/startup_browser_creator.h"
#include "chrome/browser/ui/user_data_dir_dialog.h"
#include "chrome/browser/ui/webui/chrome_url_data_manager_backend.h" #include "chrome/browser/ui/webui/chrome_url_data_manager_backend.h"
#include "chrome/common/child_process_logging.h" #include "chrome/common/child_process_logging.h"
#include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_constants.h"
...@@ -148,7 +149,6 @@ ...@@ -148,7 +149,6 @@
#include "chrome/browser/first_run/upgrade_util_win.h" #include "chrome/browser/first_run/upgrade_util_win.h"
#include "chrome/browser/net/url_fixer_upper.h" #include "chrome/browser/net/url_fixer_upper.h"
#include "chrome/browser/ui/views/network_profile_bubble.h" #include "chrome/browser/ui/views/network_profile_bubble.h"
#include "chrome/browser/ui/views/user_data_dir_dialog.h"
#include "chrome/installer/util/helper.h" #include "chrome/installer/util/helper.h"
#include "chrome/installer/util/install_util.h" #include "chrome/installer/util/install_util.h"
#include "chrome/installer/util/shell_util.h" #include "chrome/installer/util/shell_util.h"
...@@ -391,8 +391,7 @@ Profile* CreateProfile(const content::MainFunctionParams& parameters, ...@@ -391,8 +391,7 @@ Profile* CreateProfile(const content::MainFunctionParams& parameters,
// prompt the user to pick a different user-data-dir and restart chrome // prompt the user to pick a different user-data-dir and restart chrome
// with the new dir. // with the new dir.
// http://code.google.com/p/chromium/issues/detail?id=11510 // http://code.google.com/p/chromium/issues/detail?id=11510
FilePath new_user_data_dir = UserDataDirDialog::RunUserDataDirDialog( FilePath new_user_data_dir = browser::ShowUserDataDirDialog(user_data_dir);
user_data_dir);
if (!parameters.ui_task && browser_shutdown::delete_resources_on_shutdown) { if (!parameters.ui_task && browser_shutdown::delete_resources_on_shutdown) {
// Only delete the resources if we're not running tests. If we're running // Only delete the resources if we're not running tests. If we're running
// tests the resources need to be reused as many places in the UI cache // tests the resources need to be reused as many places in the UI cache
......
// Copyright (c) 2012 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_USER_DATA_DIR_DIALOG_H_
#define CHROME_BROWSER_UI_USER_DATA_DIR_DIALOG_H_
#pragma once
class FilePath;
namespace browser {
// Shows a user data directory picker dialog. The method blocks while the dialog
// is showing. If the user picks a directory, this method returns the chosen
// directory. |user_data_dir| is the value of the directory we were not able to
// use.
FilePath ShowUserDataDirDialog(const FilePath& user_data_dir);
} // namespace browser
#endif // CHROME_BROWSER_UI_USER_DATA_DIR_DIALOG_H_
...@@ -2,25 +2,18 @@ ...@@ -2,25 +2,18 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "chrome/browser/ui/views/user_data_dir_dialog_view.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/utf_string_conversions.h" #include "base/utf_string_conversions.h"
#include "chrome/browser/ui/views/user_data_dir_dialog.h" #include "chrome/browser/ui/user_data_dir_dialog.h"
#include "grit/chromium_strings.h" #include "grit/chromium_strings.h"
#include "grit/generated_resources.h" #include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
#include "ui/views/controls/message_box_view.h" #include "ui/views/controls/message_box_view.h"
#include "ui/views/widget/widget.h" #include "ui/views/widget/widget.h"
// static UserDataDirDialogView::UserDataDirDialogView(const FilePath& user_data_dir)
FilePath UserDataDirDialog::RunUserDataDirDialog(
const FilePath& user_data_dir) {
// When the window closes, it will delete itself.
UserDataDirDialog* dialog = new UserDataDirDialog(user_data_dir);
MessageLoopForUI::current()->RunWithDispatcher(dialog);
return dialog->user_data_dir();
}
UserDataDirDialog::UserDataDirDialog(const FilePath& user_data_dir)
: ALLOW_THIS_IN_INITIALIZER_LIST( : ALLOW_THIS_IN_INITIALIZER_LIST(
select_file_dialog_(SelectFileDialog::Create(this))), select_file_dialog_(SelectFileDialog::Create(this))),
is_blocking_(true) { is_blocking_(true) {
...@@ -30,15 +23,13 @@ UserDataDirDialog::UserDataDirDialog(const FilePath& user_data_dir) ...@@ -30,15 +23,13 @@ UserDataDirDialog::UserDataDirDialog(const FilePath& user_data_dir)
user_data_dir.LossyDisplayName())); user_data_dir.LossyDisplayName()));
params.message_width = kDialogWidth; params.message_width = kDialogWidth;
message_box_view_ = new views::MessageBoxView(params); message_box_view_ = new views::MessageBoxView(params);
views::Widget::CreateWindow(this)->Show();
} }
UserDataDirDialog::~UserDataDirDialog() { UserDataDirDialogView::~UserDataDirDialogView() {
select_file_dialog_->ListenerDestroyed(); select_file_dialog_->ListenerDestroyed();
} }
string16 UserDataDirDialog::GetDialogButtonLabel( string16 UserDataDirDialogView::GetDialogButtonLabel(
ui::DialogButton button) const { ui::DialogButton button) const {
switch (button) { switch (button) {
case ui::DIALOG_BUTTON_OK: case ui::DIALOG_BUTTON_OK:
...@@ -53,15 +44,15 @@ string16 UserDataDirDialog::GetDialogButtonLabel( ...@@ -53,15 +44,15 @@ string16 UserDataDirDialog::GetDialogButtonLabel(
return string16(); return string16();
} }
string16 UserDataDirDialog::GetWindowTitle() const { string16 UserDataDirDialogView::GetWindowTitle() const {
return l10n_util::GetStringUTF16(IDS_CANT_WRITE_USER_DIRECTORY_TITLE); return l10n_util::GetStringUTF16(IDS_CANT_WRITE_USER_DIRECTORY_TITLE);
} }
void UserDataDirDialog::DeleteDelegate() { void UserDataDirDialogView::DeleteDelegate() {
delete this; delete this;
} }
bool UserDataDirDialog::Accept() { bool UserDataDirDialogView::Accept() {
// Directory picker // Directory picker
std::wstring dialog_title = UTF16ToWide(l10n_util::GetStringUTF16( std::wstring dialog_title = UTF16ToWide(l10n_util::GetStringUTF16(
IDS_CANT_WRITE_USER_DIRECTORY_CHOOSE_DIRECTORY_BUTTON)); IDS_CANT_WRITE_USER_DIRECTORY_CHOOSE_DIRECTORY_BUTTON));
...@@ -73,34 +64,47 @@ bool UserDataDirDialog::Accept() { ...@@ -73,34 +64,47 @@ bool UserDataDirDialog::Accept() {
return false; return false;
} }
bool UserDataDirDialog::Cancel() { bool UserDataDirDialogView::Cancel() {
is_blocking_ = false; is_blocking_ = false;
return true; return true;
} }
views::View* UserDataDirDialog::GetContentsView() { views::View* UserDataDirDialogView::GetContentsView() {
return message_box_view_; return message_box_view_;
} }
views::Widget* UserDataDirDialog::GetWidget() { views::Widget* UserDataDirDialogView::GetWidget() {
return message_box_view_->GetWidget(); return message_box_view_->GetWidget();
} }
const views::Widget* UserDataDirDialog::GetWidget() const { const views::Widget* UserDataDirDialogView::GetWidget() const {
return message_box_view_->GetWidget(); return message_box_view_->GetWidget();
} }
bool UserDataDirDialog::Dispatch(const base::NativeEvent& msg) { bool UserDataDirDialogView::Dispatch(const base::NativeEvent& msg) {
TranslateMessage(&msg); TranslateMessage(&msg);
DispatchMessage(&msg); DispatchMessage(&msg);
return is_blocking_; return is_blocking_;
} }
void UserDataDirDialog::FileSelected(const FilePath& path, void UserDataDirDialogView::FileSelected(const FilePath& path,
int index, void* params) { int index,
void* params) {
user_data_dir_ = path; user_data_dir_ = path;
is_blocking_ = false; is_blocking_ = false;
} }
void UserDataDirDialog::FileSelectionCanceled(void* params) { void UserDataDirDialogView::FileSelectionCanceled(void* params) {
} }
namespace browser {
FilePath ShowUserDataDirDialog(const FilePath& user_data_dir) {
// When the window closes, it will delete itself.
UserDataDirDialogView* dialog = new UserDataDirDialogView(user_data_dir);
views::Widget::CreateWindow(dialog)->Show();
MessageLoopForUI::current()->RunWithDispatcher(dialog);
return dialog->user_data_dir();
}
} // namespace browser
// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
//
// A dialog box that tells the user that we can't write to the specified user
// data directory. Provides the user a chance to pick a different directory.
#ifndef CHROME_BROWSER_UI_VIEWS_USER_DATA_DIR_DIALOG_H_ #ifndef CHROME_BROWSER_UI_VIEWS_USER_DATA_DIR_DIALOG_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_USER_DATA_DIR_DIALOG_H_ #define CHROME_BROWSER_UI_VIEWS_USER_DATA_DIR_DIALOG_VIEW_H_
#pragma once #pragma once
#include "base/basictypes.h" #include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/file_path.h"
#include "base/message_loop.h" #include "base/message_loop.h"
#include "chrome/browser/ui/select_file_dialog.h" #include "chrome/browser/ui/select_file_dialog.h"
#include "ui/views/window/dialog_delegate.h" #include "ui/views/window/dialog_delegate.h"
class FilePath;
namespace views { namespace views {
class MessageBoxView; class MessageBoxView;
} }
class UserDataDirDialog : public views::DialogDelegate, // A dialog box that tells the user that we can't write to the specified user
public MessageLoopForUI::Dispatcher, // data directory. Provides the user a chance to pick a different directory.
public SelectFileDialog::Listener { class UserDataDirDialogView : public views::DialogDelegate,
public MessageLoopForUI::Dispatcher,
public SelectFileDialog::Listener {
public: public:
// Creates and runs a user data directory picker dialog. The method blocks explicit UserDataDirDialogView(const FilePath& user_data_dir);
// while the dialog is showing. If the user picks a directory, this method virtual ~UserDataDirDialogView();
// returns the chosen directory. |user_data_dir| is the value of the
// directory we were not able to use.
static FilePath RunUserDataDirDialog(const FilePath& user_data_dir);
virtual ~UserDataDirDialog();
FilePath user_data_dir() const { return user_data_dir_; } FilePath user_data_dir() const { return user_data_dir_; }
// views::DialogDelegate methods: // Overridden from views::DialogDelegate:
virtual string16 GetDialogButtonLabel(ui::DialogButton button) const OVERRIDE; virtual string16 GetDialogButtonLabel(ui::DialogButton button) const OVERRIDE;
virtual string16 GetWindowTitle() const OVERRIDE; virtual string16 GetWindowTitle() const OVERRIDE;
virtual void DeleteDelegate() OVERRIDE; virtual void DeleteDelegate() OVERRIDE;
virtual bool Accept() OVERRIDE; virtual bool Accept() OVERRIDE;
virtual bool Cancel() OVERRIDE; virtual bool Cancel() OVERRIDE;
// views::WidgetDelegate methods: // Overridden from views::WidgetDelegate:
virtual views::View* GetContentsView() OVERRIDE; virtual views::View* GetContentsView() OVERRIDE;
virtual views::Widget* GetWidget() OVERRIDE; virtual views::Widget* GetWidget() OVERRIDE;
virtual const views::Widget* GetWidget() const OVERRIDE; virtual const views::Widget* GetWidget() const OVERRIDE;
// MessageLoop::Dispatcher method: // Overridden from MessageLoopForUI::Dispatcher:
virtual bool Dispatch(const base::NativeEvent& msg) OVERRIDE; virtual bool Dispatch(const base::NativeEvent& msg) OVERRIDE;
// SelectFileDialog::Listener methods: // Overridden from SelectFileDialog::Listener:
virtual void FileSelected(const FilePath& path, virtual void FileSelected(const FilePath& path,
int index, int index,
void* params) OVERRIDE; void* params) OVERRIDE;
virtual void FileSelectionCanceled(void* params) OVERRIDE; virtual void FileSelectionCanceled(void* params) OVERRIDE;
private: private:
explicit UserDataDirDialog(const FilePath& user_data_dir);
// Empty until the user picks a directory. // Empty until the user picks a directory.
FilePath user_data_dir_; FilePath user_data_dir_;
...@@ -67,7 +60,7 @@ class UserDataDirDialog : public views::DialogDelegate, ...@@ -67,7 +60,7 @@ class UserDataDirDialog : public views::DialogDelegate,
// waiting for the user to dismiss the dialog). // waiting for the user to dismiss the dialog).
bool is_blocking_; bool is_blocking_;
DISALLOW_COPY_AND_ASSIGN(UserDataDirDialog); DISALLOW_COPY_AND_ASSIGN(UserDataDirDialogView);
}; };
#endif // CHROME_BROWSER_UI_VIEWS_USER_DATA_DIR_DIALOG_H_ #endif // CHROME_BROWSER_UI_VIEWS_USER_DATA_DIR_DIALOG_VIEW_H_
...@@ -3240,6 +3240,7 @@ ...@@ -3240,6 +3240,7 @@
'browser/ui/touch/status_bubble_touch.cc', 'browser/ui/touch/status_bubble_touch.cc',
'browser/ui/touch/status_bubble_touch.h', 'browser/ui/touch/status_bubble_touch.h',
'browser/ui/uninstall_browser_prompt.h', 'browser/ui/uninstall_browser_prompt.h',
'browser/ui/user_data_dir_dialog.h',
'browser/ui/view_ids.h', 'browser/ui/view_ids.h',
'browser/ui/views/about_chrome_view.cc', 'browser/ui/views/about_chrome_view.cc',
'browser/ui/views/about_chrome_view.h', 'browser/ui/views/about_chrome_view.h',
...@@ -3593,8 +3594,8 @@ ...@@ -3593,8 +3594,8 @@
'browser/ui/views/uninstall_view.h', 'browser/ui/views/uninstall_view.h',
'browser/ui/views/update_recommended_message_box.cc', 'browser/ui/views/update_recommended_message_box.cc',
'browser/ui/views/update_recommended_message_box.h', 'browser/ui/views/update_recommended_message_box.h',
'browser/ui/views/user_data_dir_dialog.cc', 'browser/ui/views/user_data_dir_dialog_view.cc',
'browser/ui/views/user_data_dir_dialog.h', 'browser/ui/views/user_data_dir_dialog_view.h',
'browser/ui/views/web_dialog_view.cc', 'browser/ui/views/web_dialog_view.cc',
'browser/ui/views/web_dialog_view.h', 'browser/ui/views/web_dialog_view.h',
'browser/ui/views/web_intent_picker_views.cc', 'browser/ui/views/web_intent_picker_views.cc',
...@@ -4351,7 +4352,7 @@ ...@@ -4351,7 +4352,7 @@
['exclude', '^browser/ui/views/tabs/native_view_photobooth_win.h'], ['exclude', '^browser/ui/views/tabs/native_view_photobooth_win.h'],
['exclude', '^browser/ui/views/task_manager_view.cc'], ['exclude', '^browser/ui/views/task_manager_view.cc'],
['exclude', '^browser/ui/views/task_manager_view.h'], ['exclude', '^browser/ui/views/task_manager_view.h'],
['exclude', '^browser/ui/views/user_data_dir_dialog.cc'], ['exclude', '^browser/ui/views/user_data_dir_dialog_view.cc'],
['exclude', '^browser/ui/window_sizer_win.cc'], ['exclude', '^browser/ui/window_sizer_win.cc'],
['exclude', '^browser/ui/window_snapshot/window_snapshot_win.cc'], ['exclude', '^browser/ui/window_snapshot/window_snapshot_win.cc'],
# TODO: (stevenjb/beng): Find a home for these. # TODO: (stevenjb/beng): Find a home for these.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment