diff options
author | nkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-24 14:13:05 +0000 |
---|---|---|
committer | nkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-24 14:13:05 +0000 |
commit | 6b0a3940d93e9dcfa897b76d7df3a98a9bc80c15 (patch) | |
tree | d95d589a4815dd7e5ab1107a72097eb2c9b0b7fa /chrome | |
parent | a604e31fc800f027bd32f1f5cf1514e105177c10 (diff) | |
download | chromium_src-6b0a3940d93e9dcfa897b76d7df3a98a9bc80c15.zip chromium_src-6b0a3940d93e9dcfa897b76d7df3a98a9bc80c15.tar.gz chromium_src-6b0a3940d93e9dcfa897b76d7df3a98a9bc80c15.tar.bz2 |
[cros] Make screen_mode static variable in StatusAreaViewChromeos.
In case of Aura status area is created once so status area buttons always use current value of screen_mode.
Added custom handling of ShouldExecuteStatusAreaCommand / ExecuteStatusAreaCommand() on login screen i.e. show only proxy settings dialog.
Changed InputMethodMenu so that it handles user sign in on Aura (where status area is not recreated on sign in).
BUG=104133
TEST=Booted into login screen, observed that status area items doesn't have "open options" items. Signed in, checked status area.
Review URL: http://codereview.chromium.org/8585031
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@111526 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
25 files changed, 209 insertions, 150 deletions
diff --git a/chrome/browser/chrome_browser_main.cc b/chrome/browser/chrome_browser_main.cc index c8ac46b..614da15 100644 --- a/chrome/browser/chrome_browser_main.cc +++ b/chrome/browser/chrome_browser_main.cc @@ -142,6 +142,7 @@ #include "chrome/browser/chromeos/login/ownership_service.h" #include "chrome/browser/chromeos/login/screen_locker.h" #include "chrome/browser/chromeos/login/user_manager.h" +#include "chrome/browser/chromeos/status/status_area_view_chromeos.h" #include "chrome/browser/chromeos/system/runtime_environment.h" #include "chrome/browser/chromeos/system_key_event_listener.h" #include "chrome/browser/chromeos/xinput_hierarchy_changed_event_listener.h" @@ -1563,6 +1564,10 @@ int ChromeBrowserMainParts::PreMainMessageLoopRunImpl() { // initialization code sees policy settings. g_browser_process->browser_policy_connector()->InitializeUserPolicy( username, false /* wait_for_policy_fetch */); + } else if (parsed_command_line().HasSwitch(switches::kLoginManager)) { + // Initialize status area mode early on. + chromeos::StatusAreaViewChromeos:: + SetScreenMode(chromeos::StatusAreaViewChromeos::LOGIN_MODE_WEBUI); } #endif diff --git a/chrome/browser/chromeos/frame/browser_view.cc b/chrome/browser/chromeos/frame/browser_view.cc index 5d2a43e..d8a1397 100644 --- a/chrome/browser/chromeos/frame/browser_view.cc +++ b/chrome/browser/chromeos/frame/browser_view.cc @@ -352,8 +352,9 @@ chromeos::BrowserView* BrowserView::GetBrowserViewForBrowser(Browser* browser) { void BrowserView::Init() { ::BrowserView::Init(); + StatusAreaViewChromeos::SetScreenMode(StatusAreaViewChromeos::BROWSER_MODE); status_area_ = new StatusAreaViewChromeos(); - status_area_->Init(this, StatusAreaViewChromeos::BROWSER_MODE); + status_area_->Init(this); AddChildView(status_area_); layout_mode_button_ = new LayoutModeButton(); diff --git a/chrome/browser/chromeos/login/background_view.cc b/chrome/browser/chromeos/login/background_view.cc index 9c65f2c..173a33d 100644 --- a/chrome/browser/chromeos/login/background_view.cc +++ b/chrome/browser/chromeos/login/background_view.cc @@ -76,7 +76,6 @@ namespace chromeos { BackgroundView::BackgroundView() : status_area_(NULL), - screen_mode_(StatusAreaViewChromeos::LOGIN_MODE_VIEWS), os_version_label_(NULL), boot_times_label_(NULL), shutdown_button_(NULL), @@ -295,7 +294,7 @@ void BackgroundView::OnBootTimesLabelTextUpdated( void BackgroundView::InitStatusArea() { DCHECK(status_area_ == NULL); status_area_ = new StatusAreaViewChromeos(); - status_area_->Init(this, screen_mode_); + status_area_->Init(this); AddChildView(status_area_); } diff --git a/chrome/browser/chromeos/login/background_view.h b/chrome/browser/chromeos/login/background_view.h index 1c9d29c..ba51784 100644 --- a/chrome/browser/chromeos/login/background_view.h +++ b/chrome/browser/chromeos/login/background_view.h @@ -117,10 +117,6 @@ class BackgroundView : public views::View, virtual void OnBootTimesLabelTextUpdated( const std::string& boot_times_label_text) OVERRIDE; - void set_screen_mode(StatusAreaViewChromeos::ScreenMode mode) { - screen_mode_ = mode; - } - private: // Creates and adds the status_area. void InitStatusArea(); @@ -133,7 +129,6 @@ class BackgroundView : public views::View, // All of these variables could be NULL. StatusAreaViewChromeos* status_area_; - StatusAreaViewChromeos::ScreenMode screen_mode_; views::Label* os_version_label_; views::Label* boot_times_label_; ShutdownButton* shutdown_button_; diff --git a/chrome/browser/chromeos/login/login_html_dialog.cc b/chrome/browser/chromeos/login/login_html_dialog.cc index cd0424b..59f1752 100644 --- a/chrome/browser/chromeos/login/login_html_dialog.cc +++ b/chrome/browser/chromeos/login/login_html_dialog.cc @@ -30,6 +30,9 @@ const double kDefaultHeightRatio = 0.6; /////////////////////////////////////////////////////////////////////////////// // LoginHtmlDialog, public: +void LoginHtmlDialog::Delegate::OnDialogClosed() { +} + LoginHtmlDialog::LoginHtmlDialog(Delegate* delegate, gfx::NativeWindow parent_window, const std::wstring& title, diff --git a/chrome/browser/chromeos/login/login_html_dialog.h b/chrome/browser/chromeos/login/login_html_dialog.h index a1b4381..4d4e2a2 100644 --- a/chrome/browser/chromeos/login/login_html_dialog.h +++ b/chrome/browser/chromeos/login/login_html_dialog.h @@ -29,7 +29,7 @@ class LoginHtmlDialog : public HtmlDialogUIDelegate, virtual ~Delegate() {} // Called when dialog has been closed. - virtual void OnDialogClosed() = 0; + virtual void OnDialogClosed(); }; enum Style { diff --git a/chrome/browser/chromeos/login/login_utils.cc b/chrome/browser/chromeos/login/login_utils.cc index 6ef63a6..1f80bae 100644 --- a/chrome/browser/chromeos/login/login_utils.cc +++ b/chrome/browser/chromeos/login/login_utils.cc @@ -37,6 +37,7 @@ #include "chrome/browser/chromeos/login/parallel_authenticator.h" #include "chrome/browser/chromeos/login/screen_locker.h" #include "chrome/browser/chromeos/login/user_manager.h" +#include "chrome/browser/chromeos/status/status_area_view_chromeos.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/first_run/first_run.h" #include "chrome/browser/net/chrome_url_request_context.h" @@ -1316,6 +1317,8 @@ void LoginUtils::DoBrowserLaunch(Profile* profile, if (browser_shutdown::IsTryingToQuit()) return; + chromeos::StatusAreaViewChromeos:: + SetScreenMode(StatusAreaViewChromeos::BROWSER_MODE); BootTimesLoader::Get()->AddLoginTimeMarker("BrowserLaunched", false); VLOG(1) << "Launching browser..."; diff --git a/chrome/browser/chromeos/login/screen_locker_views.cc b/chrome/browser/chromeos/login/screen_locker_views.cc index a004341..4e3034c 100644 --- a/chrome/browser/chromeos/login/screen_locker_views.cc +++ b/chrome/browser/chromeos/login/screen_locker_views.cc @@ -389,7 +389,13 @@ class ScreenLockerBackgroundView views::View* screen_lock_view) : lock_widget_(lock_widget), screen_lock_view_(screen_lock_view) { - set_screen_mode(chromeos::StatusAreaViewChromeos::SCREEN_LOCKER_MODE); + chromeos::StatusAreaViewChromeos::SetScreenMode( + chromeos::StatusAreaViewChromeos::SCREEN_LOCKER_MODE); + } + + virtual ~ScreenLockerBackgroundView() { + chromeos::StatusAreaViewChromeos::SetScreenMode( + chromeos::StatusAreaViewChromeos::BROWSER_MODE); } virtual void Layout() OVERRIDE { diff --git a/chrome/browser/chromeos/login/webui_login_view.cc b/chrome/browser/chromeos/login/webui_login_view.cc index 059b4d5..d1d592f 100644 --- a/chrome/browser/chromeos/login/webui_login_view.cc +++ b/chrome/browser/chromeos/login/webui_login_view.cc @@ -224,6 +224,12 @@ void WebUILoginView::Layout() { webui_login_->SetBoundsRect(bounds()); } +void WebUILoginView::OnLocaleChanged() { + // Proxy settings dialog contains localized strings. + proxy_settings_dialog_.reset(); + SchedulePaint(); +} + void WebUILoginView::ChildPreferredSizeChanged(View* child) { Layout(); SchedulePaint(); @@ -242,8 +248,8 @@ void WebUILoginView::ExecuteStatusAreaCommand( const views::View* button_view, int command_id) { if (command_id == StatusAreaButton::Delegate::SHOW_NETWORK_OPTIONS) { if (proxy_settings_dialog_.get() == NULL) { - proxy_settings_dialog_.reset(new ProxySettingsDialog( - this, GetNativeWindow())); + proxy_settings_dialog_.reset(new ProxySettingsDialog(NULL, + GetNativeWindow())); } proxy_settings_dialog_->Show(); } @@ -261,17 +267,6 @@ void WebUILoginView::ButtonVisibilityChanged(views::View* button_view) { status_area_->UpdateButtonVisibility(); } -// Overridden from LoginHtmlDialog::Delegate: - -void WebUILoginView::OnDialogClosed() { -} - -void WebUILoginView::OnLocaleChanged() { - // Proxy settings dialog contains localized strings. - proxy_settings_dialog_.reset(); - SchedulePaint(); -} - void WebUILoginView::OnRenderHostCreated(RenderViewHost* host) { new SnifferObserver(host, GetWebUI()); } @@ -282,6 +277,8 @@ void WebUILoginView::OnTabMainFrameLoaded() { void WebUILoginView::OnTabMainFrameFirstRender() { VLOG(1) << "WebUI login main frame rendered."; + StatusAreaViewChromeos::SetScreenMode( + StatusAreaViewChromeos::LOGIN_MODE_WEBUI); // In aura there's a global status area shown already. // TODO(nkostylev): Figure out how to communicate from login screen with // global status area. @@ -321,7 +318,7 @@ void WebUILoginView::InitStatusArea() { DCHECK(status_area_ == NULL); DCHECK(status_window_ == NULL); status_area_ = new StatusAreaViewChromeos(); - status_area_->Init(this, StatusAreaViewChromeos::LOGIN_MODE_WEBUI); + status_area_->Init(this); status_area_->SetVisible(status_area_visibility_on_init_); // Width of |status_window| is meant to be large enough. diff --git a/chrome/browser/chromeos/login/webui_login_view.h b/chrome/browser/chromeos/login/webui_login_view.h index 2b470132..893546a 100644 --- a/chrome/browser/chromeos/login/webui_login_view.h +++ b/chrome/browser/chromeos/login/webui_login_view.h @@ -35,7 +35,6 @@ class StatusAreaViewChromeos; class WebUILoginView : public views::WidgetDelegateView, public StatusAreaButton::Delegate, public TabContentsDelegate, - public LoginHtmlDialog::Delegate, public TabFirstRenderWatcher::Delegate { public: static const int kStatusAreaCornerPadding; @@ -76,6 +75,7 @@ class WebUILoginView : public views::WidgetDelegateView, protected: // Overridden from views::View: virtual void Layout() OVERRIDE; + virtual void OnLocaleChanged() OVERRIDE; virtual void ChildPreferredSizeChanged(View* child) OVERRIDE; // Overridden from StatusAreaButton::Delegate: @@ -87,10 +87,6 @@ class WebUILoginView : public views::WidgetDelegateView, virtual StatusAreaButton::TextStyle GetStatusAreaTextStyle() const OVERRIDE; virtual void ButtonVisibilityChanged(views::View* button_view) OVERRIDE; - // Overridden from LoginHtmlDialog::Delegate: - virtual void OnDialogClosed() OVERRIDE; - virtual void OnLocaleChanged() OVERRIDE; - // TabFirstRenderWatcher::Delegate implementation. virtual void OnRenderHostCreated(RenderViewHost* host) OVERRIDE; virtual void OnTabMainFrameLoaded() OVERRIDE; diff --git a/chrome/browser/chromeos/status/accessibility_menu_button.cc b/chrome/browser/chromeos/status/accessibility_menu_button.cc index bdda6ff..0d8b95f 100644 --- a/chrome/browser/chromeos/status/accessibility_menu_button.cc +++ b/chrome/browser/chromeos/status/accessibility_menu_button.cc @@ -8,6 +8,7 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/accessibility/accessibility_util.h" #include "chrome/browser/chromeos/status/status_area_bubble.h" +#include "chrome/browser/chromeos/status/status_area_view_chromeos.h" #include "chrome/browser/chromeos/view_ids.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/common/chrome_notification_types.h" @@ -37,10 +38,8 @@ namespace chromeos { // AccessibilityMenuButton AccessibilityMenuButton::AccessibilityMenuButton( - StatusAreaButton::Delegate* delegate, - StatusAreaViewChromeos::ScreenMode screen_mode) - : StatusAreaButton(delegate, this), - screen_mode_(screen_mode) { + StatusAreaButton::Delegate* delegate) + : StatusAreaButton(delegate, this) { set_id(VIEW_ID_STATUS_BUTTON_ACCESSIBILITY); accessibility_enabled_.Init(prefs::kAccessibilityEnabled, g_browser_process->local_state(), this); @@ -95,7 +94,7 @@ void AccessibilityMenuButton::Observe( // Show a bubble when accessibility is turned on at the login screen. if (path == prefs::kAccessibilityEnabled) { if (accessibility_enabled_.GetValue() && - screen_mode_ == StatusAreaViewChromeos::LOGIN_MODE_WEBUI) { + StatusAreaViewChromeos::IsLoginMode()) { views::ImageView* icon_view = new views::ImageView; const gfx::Image& image = ResourceBundle::GetSharedInstance(). GetImageNamed(IDR_ACCESSIBILITY_ICON); diff --git a/chrome/browser/chromeos/status/accessibility_menu_button.h b/chrome/browser/chromeos/status/accessibility_menu_button.h index 4b7a4f7..925b7c9 100644 --- a/chrome/browser/chromeos/status/accessibility_menu_button.h +++ b/chrome/browser/chromeos/status/accessibility_menu_button.h @@ -7,7 +7,6 @@ #pragma once #include "chrome/browser/chromeos/status/status_area_button.h" -#include "chrome/browser/chromeos/status/status_area_view_chromeos.h" #include "chrome/browser/prefs/pref_member.h" #include "content/public/browser/notification_observer.h" #include "views/controls/menu/view_menu_delegate.h" @@ -28,9 +27,7 @@ class AccessibilityMenuButton : public StatusAreaButton, public views::MenuDelegate, public content::NotificationObserver { public: - explicit AccessibilityMenuButton( - StatusAreaButton::Delegate* delegate, - StatusAreaViewChromeos::ScreenMode screen_mode); + explicit AccessibilityMenuButton(StatusAreaButton::Delegate* delegate); virtual ~AccessibilityMenuButton(); // views::ViewMenuDelegate implementation @@ -51,8 +48,6 @@ class AccessibilityMenuButton : public StatusAreaButton, // Prepares menu before showing it. void PrepareMenu(); - StatusAreaViewChromeos::ScreenMode screen_mode_; - // An object synced to the preference, representing if accessibility feature // is enabled or not. BooleanPrefMember accessibility_enabled_; diff --git a/chrome/browser/chromeos/status/input_method_menu.cc b/chrome/browser/chromeos/status/input_method_menu.cc index 1a6771f..e0e8695 100644 --- a/chrome/browser/chromeos/status/input_method_menu.cc +++ b/chrome/browser/chromeos/status/input_method_menu.cc @@ -14,6 +14,7 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/input_method/input_method_util.h" #include "chrome/browser/chromeos/language_preferences.h" +#include "chrome/browser/chromeos/status/status_area_view_chromeos.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/common/chrome_notification_types.h" #include "chrome/common/pref_names.h" @@ -132,7 +133,6 @@ using input_method::InputMethodManager; // InputMethodMenu InputMethodMenu::InputMethodMenu(PrefService* pref_service, - StatusAreaViewChromeos::ScreenMode screen_mode, bool for_out_of_box_experience_dialog) : input_method_descriptors_(InputMethodManager::GetInstance()-> GetActiveInputMethods()), @@ -145,28 +145,32 @@ InputMethodMenu::InputMethodMenu(PrefService* pref_service, minimum_input_method_menu_width_(0), menu_alignment_(views::MenuItemView::TOPRIGHT), pref_service_(pref_service), - screen_mode_(screen_mode), for_out_of_box_experience_dialog_(for_out_of_box_experience_dialog) { DCHECK(input_method_descriptors_.get() && !input_method_descriptors_->empty()); // Sync current and previous input methods on Chrome prefs with ibus-daemon. - if (pref_service_ && (screen_mode_ == StatusAreaViewChromeos::BROWSER_MODE)) { - previous_input_method_pref_.Init( - prefs::kLanguagePreviousInputMethod, pref_service, this); - current_input_method_pref_.Init( - prefs::kLanguageCurrentInputMethod, pref_service, this); + if (pref_service_ && StatusAreaViewChromeos::IsBrowserMode()) { + InitializePrefMembers(); } InputMethodManager* manager = InputMethodManager::GetInstance(); - if (screen_mode_ == StatusAreaViewChromeos::LOGIN_MODE_VIEWS || - screen_mode_ == StatusAreaViewChromeos::LOGIN_MODE_WEBUI) { + if (StatusAreaViewChromeos::IsLoginMode()) { // This button is for the login screen. manager->AddPreLoginPreferenceObserver(this); registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_CHANGED, content::NotificationService::AllSources()); - } else if (screen_mode_ == StatusAreaViewChromeos::BROWSER_MODE) { +#if defined(USE_AURA) + // On Aura status area is not recreated on sign in. + // In case of Chrome crash, Chrome will be reloaded but IsLoginMode() will + // return false at this point so NOTIFICATION_PROFILE_CREATED will be + // ignored and all initialization will happen in ctor. + registrar_.Add(this, + chrome::NOTIFICATION_PROFILE_CREATED, + content::NotificationService::AllSources()); +#endif + } else if (StatusAreaViewChromeos::IsBrowserMode()) { manager->AddPostLoginPreferenceObserver(this); } @@ -421,15 +425,14 @@ void InputMethodMenu::PreferenceUpdateNeeded( InputMethodManager* manager, const input_method::InputMethodDescriptor& previous_input_method, const input_method::InputMethodDescriptor& current_input_method) { - if (screen_mode_ == StatusAreaViewChromeos::BROWSER_MODE) { + if (StatusAreaViewChromeos::IsBrowserMode()) { if (pref_service_) { // make sure we're not in unit tests. // Sometimes (e.g. initial boot) |previous_input_method.id()| is empty. previous_input_method_pref_.SetValue(previous_input_method.id()); current_input_method_pref_.SetValue(current_input_method.id()); pref_service_->ScheduleSavePersistentPrefs(); } - } else if (screen_mode_ == StatusAreaViewChromeos::LOGIN_MODE_VIEWS || - screen_mode_ == StatusAreaViewChromeos::LOGIN_MODE_WEBUI) { + } else if (StatusAreaViewChromeos::IsLoginMode()) { if (g_browser_process && g_browser_process->local_state()) { g_browser_process->local_state()->SetString( language_prefs::kPreferredKeyboardLayout, current_input_method.id()); @@ -465,7 +468,7 @@ void InputMethodMenu::FirstObserverIsAdded(InputMethodManager* manager) { // NOTICE: Since this function might be called from the constructor of this // class, it's better to avoid calling virtual functions. - if (pref_service_ && (screen_mode_ == StatusAreaViewChromeos::BROWSER_MODE)) { + if (pref_service_ && (StatusAreaViewChromeos::IsBrowserMode())) { // Get the input method name in the Preferences file which was in use last // time, and switch to the method. We remember two input method names in the // preference so that the Control+space hot-key could work fine from the @@ -712,6 +715,16 @@ void InputMethodMenu::Observe(int type, // anymore. RemoveObservers(); } +#if defined(USE_AURA) + if (type == chrome::NOTIFICATION_PROFILE_CREATED) { + // On Aura status area is not recreated on login for normal user sign in. + // NOTIFICATION_LOGIN_USER_CHANGED has been notified early in login process. + InitializePrefMembers(); + InputMethodManager* manager = InputMethodManager::GetInstance(); + manager->AddPostLoginPreferenceObserver(this); + manager->AddObserver(this); + } +#endif } void InputMethodMenu::SetMinimumWidth(int width) { @@ -721,13 +734,19 @@ void InputMethodMenu::SetMinimumWidth(int width) { void InputMethodMenu::RemoveObservers() { InputMethodManager* manager = InputMethodManager::GetInstance(); - if (screen_mode_ == StatusAreaViewChromeos::LOGIN_MODE_VIEWS || - screen_mode_ == StatusAreaViewChromeos::LOGIN_MODE_WEBUI) { + if (StatusAreaViewChromeos::IsLoginMode()) { manager->RemovePreLoginPreferenceObserver(this); - } else if (screen_mode_ == StatusAreaViewChromeos::BROWSER_MODE) { + } else if (StatusAreaViewChromeos::IsBrowserMode()) { manager->RemovePostLoginPreferenceObserver(this); } manager->RemoveObserver(this); } +void InputMethodMenu::InitializePrefMembers() { + previous_input_method_pref_.Init( + prefs::kLanguagePreviousInputMethod, pref_service_, this); + current_input_method_pref_.Init( + prefs::kLanguageCurrentInputMethod, pref_service_, this); +} + } // namespace chromeos diff --git a/chrome/browser/chromeos/status/input_method_menu.h b/chrome/browser/chromeos/status/input_method_menu.h index afcc6b1..887a820 100644 --- a/chrome/browser/chromeos/status/input_method_menu.h +++ b/chrome/browser/chromeos/status/input_method_menu.h @@ -10,7 +10,6 @@ #include "base/compiler_specific.h" #include "chrome/browser/chromeos/input_method/input_method_manager.h" -#include "chrome/browser/chromeos/status/status_area_view_chromeos.h" #include "chrome/browser/prefs/pref_member.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" @@ -46,7 +45,6 @@ class InputMethodMenu public content::NotificationObserver { public: InputMethodMenu(PrefService* pref_service, - StatusAreaViewChromeos::ScreenMode screen_mode, bool for_out_of_box_experience_dialog); virtual ~InputMethodMenu(); @@ -171,6 +169,9 @@ class InputMethodMenu // Stops observing InputMethodManager. void RemoveObservers(); + // Initializes objects for reading/writing Chrome prefs. + void InitializePrefMembers(); + // The current input method list. scoped_ptr<input_method::InputMethodDescriptors> input_method_descriptors_; @@ -195,8 +196,6 @@ class InputMethodMenu PrefService* pref_service_; content::NotificationRegistrar registrar_; - // The mode of the host screen (e.g. browser, screen locker, login screen.) - const StatusAreaViewChromeos::ScreenMode screen_mode_; // true if the menu is for a dialog in OOBE screen. In the dialog, we don't // use radio buttons. const bool for_out_of_box_experience_dialog_; diff --git a/chrome/browser/chromeos/status/input_method_menu_button.cc b/chrome/browser/chromeos/status/input_method_menu_button.cc index 2044cda..47dd36c 100644 --- a/chrome/browser/chromeos/status/input_method_menu_button.cc +++ b/chrome/browser/chromeos/status/input_method_menu_button.cc @@ -9,6 +9,7 @@ #include "base/utf_string_conversions.h" #include "chrome/browser/chromeos/input_method/input_method_manager.h" #include "chrome/browser/chromeos/input_method/input_method_util.h" +#include "chrome/browser/chromeos/status/status_area_view_chromeos.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/ui/browser.h" @@ -30,9 +31,8 @@ PrefService* GetPrefService() { class MenuImpl : public chromeos::InputMethodMenu { public: MenuImpl(chromeos::InputMethodMenuButton* button, - PrefService* pref_service, - chromeos::StatusAreaViewChromeos::ScreenMode screen_mode) - : InputMethodMenu(pref_service, screen_mode, false), button_(button) {} + PrefService* pref_service) + : InputMethodMenu(pref_service, false), button_(button) {} private: // InputMethodMenu implementation. @@ -62,11 +62,9 @@ namespace chromeos { // InputMethodMenuButton InputMethodMenuButton::InputMethodMenuButton( - StatusAreaButton::Delegate* delegate, - StatusAreaViewChromeos::ScreenMode screen_mode) + StatusAreaButton::Delegate* delegate) : StatusAreaButton(delegate, this), - menu_(new MenuImpl(this, GetPrefService(), screen_mode)), - screen_mode_(screen_mode) { + menu_(new MenuImpl(this, GetPrefService())) { set_id(VIEW_ID_STATUS_BUTTON_INPUT_METHOD); UpdateUIFromCurrentInputMethod(); } @@ -119,7 +117,7 @@ void InputMethodMenuButton::UpdateUI(const std::string& input_method_id, const bool hide_button = num_active_input_methods == 1 && input_method::InputMethodUtil::IsKeyboardLayout(input_method_id) && - screen_mode_ == StatusAreaViewChromeos::BROWSER_MODE; + StatusAreaViewChromeos::IsBrowserMode(); SetVisible(!hide_button); SetText(name); SetTooltipText(tooltip); diff --git a/chrome/browser/chromeos/status/input_method_menu_button.h b/chrome/browser/chromeos/status/input_method_menu_button.h index 6867d44..a443c24 100644 --- a/chrome/browser/chromeos/status/input_method_menu_button.h +++ b/chrome/browser/chromeos/status/input_method_menu_button.h @@ -11,7 +11,6 @@ #include "base/compiler_specific.h" #include "chrome/browser/chromeos/status/input_method_menu.h" #include "chrome/browser/chromeos/status/status_area_button.h" -#include "chrome/browser/chromeos/status/status_area_view_chromeos.h" #include "views/controls/menu/view_menu_delegate.h" namespace chromeos { @@ -21,9 +20,7 @@ namespace chromeos { class InputMethodMenuButton : public StatusAreaButton, public views::ViewMenuDelegate { public: - explicit InputMethodMenuButton( - StatusAreaButton::Delegate* delegate, - StatusAreaViewChromeos::ScreenMode screen_mode); + explicit InputMethodMenuButton(StatusAreaButton::Delegate* delegate); virtual ~InputMethodMenuButton(); // views::View implementation. @@ -49,7 +46,6 @@ class InputMethodMenuButton : public StatusAreaButton, bool WindowIsActive(); scoped_ptr<InputMethodMenu> menu_; - StatusAreaViewChromeos::ScreenMode screen_mode_; DISALLOW_COPY_AND_ASSIGN(InputMethodMenuButton); }; diff --git a/chrome/browser/chromeos/status/network_menu.cc b/chrome/browser/chromeos/status/network_menu.cc index 4817962..fad447f 100644 --- a/chrome/browser/chromeos/status/network_menu.cc +++ b/chrome/browser/chromeos/status/network_menu.cc @@ -16,6 +16,7 @@ #include "chrome/browser/chromeos/options/network_config_view.h" #include "chrome/browser/chromeos/sim_dialog_delegate.h" #include "chrome/browser/chromeos/status/network_menu_icon.h" +#include "chrome/browser/chromeos/status/status_area_view_chromeos.h" #include "chrome/browser/defaults.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" @@ -134,8 +135,7 @@ class NetworkMenuModel : public ui::MenuModel { int remember) const; // Called by NetworkMenu::RunMenu to initialize list of menu items. - virtual void InitMenuItems(bool is_browser_mode, - bool should_open_button_options) = 0; + virtual void InitMenuItems(bool should_open_button_options) = 0; // Menu item field accessors. const MenuItemVector& menu_items() const { return menu_items_; } @@ -214,8 +214,7 @@ class MoreMenuModel : public NetworkMenuModel { virtual ~MoreMenuModel() {} // NetworkMenuModel implementation. - virtual void InitMenuItems(bool is_browser_mode, - bool should_open_button_options) OVERRIDE; + virtual void InitMenuItems(bool should_open_button_options) OVERRIDE; // ui::MenuModel implementation virtual int GetCommandIdAt(int index) const OVERRIDE; @@ -230,8 +229,7 @@ class VPNMenuModel : public NetworkMenuModel { virtual ~VPNMenuModel() {} // NetworkMenuModel implementation. - virtual void InitMenuItems(bool is_browser_mode, - bool should_open_button_options) OVERRIDE; + virtual void InitMenuItems(bool should_open_button_options) OVERRIDE; // ui::MenuModel implementation virtual int GetCommandIdAt(int index) const OVERRIDE; @@ -250,8 +248,7 @@ class MainMenuModel : public NetworkMenuModel { virtual ~MainMenuModel() {} // NetworkMenuModel implementation. - virtual void InitMenuItems(bool is_browser_mode, - bool should_open_button_options) OVERRIDE; + virtual void InitMenuItems(bool should_open_button_options) OVERRIDE; // ui::MenuModel implementation virtual int GetCommandIdAt(int index) const OVERRIDE; @@ -506,8 +503,7 @@ void NetworkMenuModel::ShowOther(ConnectionType type) const { //////////////////////////////////////////////////////////////////////////////// // MainMenuModel -void MainMenuModel::InitMenuItems(bool is_browser_mode, - bool should_open_button_options) { +void MainMenuModel::InitMenuItems(bool should_open_button_options) { // This gets called on initialization, so any changes should be reflected // in CrosMock::SetNetworkLibraryStatusAreaExpectations(). @@ -620,7 +616,8 @@ void MainMenuModel::InitMenuItems(bool is_browser_mode, cell_networks[i]->activation_state(); // If we are on the OOBE/login screen, do not show activating 3G option. - if (!is_browser_mode && activation_state != ACTIVATION_STATE_ACTIVATED) + if (!StatusAreaViewChromeos::IsBrowserMode() && + activation_state != ACTIVATION_STATE_ACTIVATED) continue; // Ampersand is a valid character in a network name, but menu2 uses it @@ -687,7 +684,7 @@ void MainMenuModel::InitMenuItems(bool is_browser_mode, if (cellular_device) { // Add "View Account" with top up URL if we know that. MobileConfig* config = MobileConfig::GetInstance(); - if (is_browser_mode && config->IsReady()) { + if (StatusAreaViewChromeos::IsBrowserMode() && config->IsReady()) { std::string carrier_id = cros->GetCellularHomeCarrierId(); // If we don't have top up URL cached. if (carrier_id != carrier_id_) { @@ -732,7 +729,7 @@ void MainMenuModel::InitMenuItems(bool is_browser_mode, // If we are logged in and there is a connected network or a connected VPN, // add submenu for Private Networks. - if (is_browser_mode) { + if (StatusAreaViewChromeos::IsBrowserMode()) { if (cros->connected_network() || cros->virtual_network_connected()) { menu_items_.push_back(MenuItem()); // Separator const SkBitmap icon = NetworkMenuIcon::GetVpnBitmap(); @@ -740,8 +737,7 @@ void MainMenuModel::InitMenuItems(bool is_browser_mode, ui::MenuModel::TYPE_SUBMENU, l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_PRIVATE_NETWORKS), icon, vpn_menu_model_.get(), FLAG_NONE)); - vpn_menu_model_->InitMenuItems( - is_browser_mode, should_open_button_options); + vpn_menu_model_->InitMenuItems(should_open_button_options); } } @@ -815,10 +811,10 @@ void MainMenuModel::InitMenuItems(bool is_browser_mode, // * Network settings; // * IP Address on active interface; // * Hardware addresses for wifi and ethernet. - more_menu_model_->InitMenuItems(is_browser_mode, should_open_button_options); + more_menu_model_->InitMenuItems(should_open_button_options); if (!more_menu_model_->menu_items().empty()) { menu_items_.push_back(MenuItem()); // Separator - if (is_browser_mode) { + if (StatusAreaViewChromeos::IsBrowserMode()) { // In browser mode we do not want separate submenu, inline items. menu_items_.insert( menu_items_.end(), @@ -840,8 +836,7 @@ int MainMenuModel::GetCommandIdAt(int index) const { //////////////////////////////////////////////////////////////////////////////// // VPNMenuModel -void VPNMenuModel::InitMenuItems(bool is_browser_mode, - bool should_open_button_options) { +void VPNMenuModel::InitMenuItems(bool should_open_button_options) { // This gets called on initialization, so any changes should be reflected // in CrosMock::SetNetworkLibraryStatusAreaExpectations(). @@ -903,8 +898,7 @@ int VPNMenuModel::GetCommandIdAt(int index) const { //////////////////////////////////////////////////////////////////////////////// // MoreMenuModel -void MoreMenuModel::InitMenuItems( - bool is_browser_mode, bool should_open_button_options) { +void MoreMenuModel::InitMenuItems(bool should_open_button_options) { // This gets called on initialization, so any changes should be reflected // in CrosMock::SetNetworkLibraryStatusAreaExpectations(). @@ -917,7 +911,7 @@ void MoreMenuModel::InitMenuItems( bool connected = cros->Connected(); // always call for test expectations. if (!oobe) { int message_id = -1; - if (is_browser_mode) + if (StatusAreaViewChromeos::IsBrowserMode()) message_id = IDS_STATUSBAR_NETWORK_OPEN_OPTIONS_DIALOG; else if (connected) message_id = IDS_STATUSBAR_NETWORK_OPEN_PROXY_SETTINGS_DIALOG; @@ -937,7 +931,7 @@ void MoreMenuModel::InitMenuItems( } } - if (!is_browser_mode) { + if (!StatusAreaViewChromeos::IsBrowserMode()) { const NetworkDevice* ether = cros->FindEthernetDevice(); if (ether) { std::string hardware_address; @@ -981,9 +975,8 @@ int MoreMenuModel::GetCommandIdAt(int index) const { //////////////////////////////////////////////////////////////////////////////// // NetworkMenu -NetworkMenu::NetworkMenu(Delegate* delegate, bool is_browser_mode) +NetworkMenu::NetworkMenu(Delegate* delegate) : delegate_(delegate), - is_browser_mode_(is_browser_mode), refreshing_menu_(false), menu_item_view_(NULL), min_width_(kDefaultMinimumWidth) { @@ -1014,8 +1007,7 @@ void NetworkMenu::UpdateMenu() { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); refreshing_menu_ = true; - main_menu_model_->InitMenuItems( - is_browser_mode(), delegate_->ShouldOpenButtonOptions()); + main_menu_model_->InitMenuItems(delegate_->ShouldOpenButtonOptions()); menu_model_adapter_->BuildMenu(menu_item_view_); SetMenuMargins(menu_item_view_, kTopMargin, kBottomMargin); diff --git a/chrome/browser/chromeos/status/network_menu.h b/chrome/browser/chromeos/status/network_menu.h index 05056de..288bf50 100644 --- a/chrome/browser/chromeos/status/network_menu.h +++ b/chrome/browser/chromeos/status/network_menu.h @@ -70,7 +70,7 @@ class NetworkMenu { virtual bool ShouldOpenButtonOptions() const = 0; }; - NetworkMenu(Delegate* delegate, bool is_browser_mode); + explicit NetworkMenu(Delegate* delegate); virtual ~NetworkMenu(); // Access to menu definition. @@ -90,7 +90,6 @@ class NetworkMenu { // Getters. Delegate* delegate() const { return delegate_; } - bool is_browser_mode() const { return is_browser_mode_; } // Setters. void set_min_width(int min_width) { min_width_ = min_width; } @@ -101,9 +100,6 @@ class NetworkMenu { // Weak ptr to delegate. Delegate* delegate_; - // True if the browser is visible (i.e. not login/OOBE). - bool is_browser_mode_; - // Set to true if we are currently refreshing the menu. bool refreshing_menu_; diff --git a/chrome/browser/chromeos/status/network_menu_button.cc b/chrome/browser/chromeos/status/network_menu_button.cc index 96bbcf4..f58461d 100644 --- a/chrome/browser/chromeos/status/network_menu_button.cc +++ b/chrome/browser/chromeos/status/network_menu_button.cc @@ -21,6 +21,7 @@ #include "chrome/browser/chromeos/login/user_manager.h" #include "chrome/browser/chromeos/options/network_config_view.h" #include "chrome/browser/chromeos/sim_dialog_delegate.h" +#include "chrome/browser/chromeos/status/status_area_view_chromeos.h" #include "chrome/browser/chromeos/view_ids.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/profiles/profile.h" @@ -97,18 +98,14 @@ namespace chromeos { //////////////////////////////////////////////////////////////////////////////// // NetworkMenuButton -NetworkMenuButton::NetworkMenuButton( - StatusAreaButton::Delegate* delegate, - StatusAreaViewChromeos::ScreenMode screen_mode) +NetworkMenuButton::NetworkMenuButton(StatusAreaButton::Delegate* delegate) : StatusAreaButton(delegate, this), mobile_data_bubble_(NULL), - is_browser_mode_(false), check_for_promo_(true), was_sim_locked_(false), ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { set_id(VIEW_ID_STATUS_BUTTON_NETWORK_MENU); - is_browser_mode_ = (screen_mode == StatusAreaViewChromeos::BROWSER_MODE); - network_menu_.reset(new NetworkMenu(this, is_browser_mode_)); + network_menu_.reset(new NetworkMenu(this)); network_icon_.reset( new NetworkMenuIcon(this, NetworkMenuIcon::MENU_MODE)); @@ -367,7 +364,8 @@ void NetworkMenuButton::ShowOptionalMobileDataPromoNotification( // Display one-time notification for non-Guest users on first use // of Mobile Data connection or if there's a carrier deal defined // show that even if user has already seen generic promo. - if (is_browser_mode_ && !UserManager::Get()->IsLoggedInAsGuest() && + if (StatusAreaViewChromeos::IsBrowserMode() && + !UserManager::Get()->IsLoggedInAsGuest() && check_for_promo_ && BrowserList::GetLastActive() && cros->cellular_connected() && !cros->ethernet_connected() && !cros->wifi_connected()) { diff --git a/chrome/browser/chromeos/status/network_menu_button.h b/chrome/browser/chromeos/status/network_menu_button.h index 05e5c9e..1bb51db 100644 --- a/chrome/browser/chromeos/status/network_menu_button.h +++ b/chrome/browser/chromeos/status/network_menu_button.h @@ -16,7 +16,6 @@ #include "chrome/browser/chromeos/status/network_menu.h" #include "chrome/browser/chromeos/status/network_menu_icon.h" #include "chrome/browser/chromeos/status/status_area_button.h" -#include "chrome/browser/chromeos/status/status_area_view_chromeos.h" class PrefService; @@ -56,8 +55,7 @@ class NetworkMenuButton : public StatusAreaButton, public NetworkLibrary::CellularDataPlanObserver, public MessageBubbleDelegate { public: - explicit NetworkMenuButton(StatusAreaButton::Delegate* delegate, - StatusAreaViewChromeos::ScreenMode screen_mode); + explicit NetworkMenuButton(StatusAreaButton::Delegate* delegate); virtual ~NetworkMenuButton(); static void RegisterPrefs(PrefService* local_state); @@ -135,9 +133,6 @@ class NetworkMenuButton : public StatusAreaButton, // Notification bubble for 3G promo. MessageBubble* mobile_data_bubble_; - // Set to true if the browser is visible (i.e. not login/oobe). - bool is_browser_mode_; - // True if check for promo needs to be done, // otherwise just ignore it for current session. bool check_for_promo_; diff --git a/chrome/browser/chromeos/status/status_area_view_chromeos.cc b/chrome/browser/chromeos/status/status_area_view_chromeos.cc index b6f08a9..a98f33c 100644 --- a/chrome/browser/chromeos/status/status_area_view_chromeos.cc +++ b/chrome/browser/chromeos/status/status_area_view_chromeos.cc @@ -18,6 +18,30 @@ namespace chromeos { +// static +StatusAreaViewChromeos::ScreenMode + StatusAreaViewChromeos::screen_mode_ = BROWSER_MODE; + +// static +bool StatusAreaViewChromeos::IsBrowserMode() { + return screen_mode_ == BROWSER_MODE; +} + +// static +bool StatusAreaViewChromeos::IsLoginMode() { + return screen_mode_ == LOGIN_MODE_WEBUI; +} + +// static +bool StatusAreaViewChromeos::IsScreenLockMode() { + return screen_mode_ == SCREEN_LOCKER_MODE; +} + +// static +void StatusAreaViewChromeos::SetScreenMode(ScreenMode mode) { + screen_mode_ = mode; +} + StatusAreaViewChromeos::StatusAreaViewChromeos() { DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(this); system::TimezoneSettings::GetInstance()->AddObserver(this); @@ -28,9 +52,8 @@ StatusAreaViewChromeos::~StatusAreaViewChromeos() { system::TimezoneSettings::GetInstance()->RemoveObserver(this); } -void StatusAreaViewChromeos::Init(StatusAreaButton::Delegate* delegate, - ScreenMode screen_mode) { - AddChromeosButtons(this, delegate, screen_mode, NULL); +void StatusAreaViewChromeos::Init(StatusAreaButton::Delegate* delegate) { + AddChromeosButtons(this, delegate, NULL); } void StatusAreaViewChromeos::SystemResumed() { @@ -59,7 +82,6 @@ void StatusAreaViewChromeos::SetDefaultUse24HourClock(bool use_24hour_clock) { void StatusAreaViewChromeos::AddChromeosButtons( StatusAreaView* status_area, StatusAreaButton::Delegate* delegate, - ScreenMode screen_mode, ClockMenuButton** clock_button) { const bool border = true; const bool no_border = false; @@ -67,18 +89,15 @@ void StatusAreaViewChromeos::AddChromeosButtons( if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kMemoryWidget)) status_area->AddButton(new MemoryMenuButton(delegate), no_border); - status_area->AddButton( - new AccessibilityMenuButton(delegate, screen_mode), border); + status_area->AddButton(new AccessibilityMenuButton(delegate), border); status_area->AddButton(new CapsLockMenuButton(delegate), border); ClockMenuButton* clock = new ClockMenuButton(delegate); status_area->AddButton(clock, border); if (clock_button) *clock_button = clock; - status_area->AddButton( - new InputMethodMenuButton(delegate, screen_mode), no_border); - status_area->AddButton( - new NetworkMenuButton(delegate, screen_mode), no_border); + status_area->AddButton(new InputMethodMenuButton(delegate), no_border); + status_area->AddButton(new NetworkMenuButton(delegate), no_border); status_area->AddButton(new PowerMenuButton(delegate), no_border); } diff --git a/chrome/browser/chromeos/status/status_area_view_chromeos.h b/chrome/browser/chromeos/status/status_area_view_chromeos.h index 614103c..3e0fe44 100644 --- a/chrome/browser/chromeos/status/status_area_view_chromeos.h +++ b/chrome/browser/chromeos/status/status_area_view_chromeos.h @@ -22,16 +22,30 @@ class StatusAreaViewChromeos : public StatusAreaView, public: // The type of screen the host window is on. enum ScreenMode { - LOGIN_MODE_VIEWS, // The host is for the views-based OOBE/login screens. LOGIN_MODE_WEBUI, // The host is for the WebUI OOBE/login screens. BROWSER_MODE, // The host is for browser. SCREEN_LOCKER_MODE, // The host is for screen locker. }; + // True if the browser is visible (i.e. not login/OOBE). + static bool IsBrowserMode(); + + // True if not logged in into user session (i.e. login/OOBE). + // It's not always !IsBrowserMode() as there's SCREEN_LOCKER_MODE which + // is inside user session, using login host and browser is not available. + static bool IsLoginMode(); + + // True if user is logged in but browser session is not available + // as screen lock is active. + static bool IsScreenLockMode(); + + // Sets current screen mode. + static void SetScreenMode(ScreenMode mode); + explicit StatusAreaViewChromeos(); virtual ~StatusAreaViewChromeos(); - void Init(StatusAreaButton::Delegate* delegate, ScreenMode screen_mode); + void Init(StatusAreaButton::Delegate* delegate); // PowerManagerClient::Observer: virtual void SystemResumed() OVERRIDE; @@ -47,10 +61,12 @@ class StatusAreaViewChromeos : public StatusAreaView, // by this method. static void AddChromeosButtons(StatusAreaView* status_area, StatusAreaButton::Delegate* delegate, - ScreenMode screen_mode, ClockMenuButton** clock_button); private: + // Current screen mode of the status area. + static ScreenMode screen_mode_; + void UpdateClockText(); DISALLOW_COPY_AND_ASSIGN(StatusAreaViewChromeos); diff --git a/chrome/browser/ui/views/aura/status_area_host_aura.cc b/chrome/browser/ui/views/aura/status_area_host_aura.cc index 21e74ab..7daad39 100644 --- a/chrome/browser/ui/views/aura/status_area_host_aura.cc +++ b/chrome/browser/ui/views/aura/status_area_host_aura.cc @@ -19,8 +19,11 @@ #include "ui/views/widget/widget.h" #if defined(OS_CHROMEOS) +#include "chrome/browser/chromeos/login/base_login_display_host.h" +#include "chrome/browser/chromeos/login/proxy_settings_dialog.h" #include "chrome/browser/chromeos/status/status_area_view_chromeos.h" #include "chrome/browser/chromeos/status/timezone_clock_updater.h" +#include "ui/gfx/native_widget_types.h" #endif StatusAreaHostAura::StatusAreaHostAura() @@ -46,9 +49,9 @@ views::Widget* StatusAreaHostAura::CreateStatusArea() { // Add child buttons. #if defined(OS_CHROMEOS) ClockMenuButton* clock = NULL; - chromeos::StatusAreaViewChromeos::AddChromeosButtons( - status_area_view_, this, chromeos::StatusAreaViewChromeos::BROWSER_MODE, - &clock); + chromeos::StatusAreaViewChromeos::AddChromeosButtons(status_area_view_, + this, + &clock); DCHECK(clock); timezone_clock_updater_.reset(new TimezoneClockUpdater(clock)); #else @@ -81,7 +84,15 @@ views::Widget* StatusAreaHostAura::CreateStatusArea() { bool StatusAreaHostAura::ShouldExecuteStatusAreaCommand( const views::View* button_view, int command_id) const { #if defined(OS_CHROMEOS) - return true; + if (chromeos::StatusAreaViewChromeos::IsLoginMode()) { + // In login mode network options command means proxy settings dialog. + if (command_id == StatusAreaButton::Delegate::SHOW_NETWORK_OPTIONS) + return true; + else + return false; + } else { + return true; + } #else // TODO(stevenjb): system options for non-chromeos Aura? return false; @@ -91,20 +102,33 @@ bool StatusAreaHostAura::ShouldExecuteStatusAreaCommand( void StatusAreaHostAura::ExecuteStatusAreaCommand( const views::View* button_view, int command_id) { #if defined(OS_CHROMEOS) - Browser* browser = BrowserList::FindBrowserWithProfile( - ProfileManager::GetDefaultProfile()); - switch (command_id) { - case StatusAreaButton::Delegate::SHOW_NETWORK_OPTIONS: - browser->OpenInternetOptionsDialog(); - break; - case StatusAreaButton::Delegate::SHOW_LANGUAGE_OPTIONS: - browser->OpenLanguageOptionsDialog(); - break; - case StatusAreaButton::Delegate::SHOW_SYSTEM_OPTIONS: - browser->OpenSystemOptionsDialog(); - break; - default: + if (chromeos::StatusAreaViewChromeos::IsBrowserMode()) { + Browser* browser = BrowserList::FindBrowserWithProfile( + ProfileManager::GetDefaultProfile()); + switch (command_id) { + case StatusAreaButton::Delegate::SHOW_NETWORK_OPTIONS: + browser->OpenInternetOptionsDialog(); + break; + case StatusAreaButton::Delegate::SHOW_LANGUAGE_OPTIONS: + browser->OpenLanguageOptionsDialog(); + break; + case StatusAreaButton::Delegate::SHOW_SYSTEM_OPTIONS: + browser->OpenSystemOptionsDialog(); + break; + default: + NOTREACHED(); + } + } else if (chromeos::StatusAreaViewChromeos::IsLoginMode()) { + if (command_id == StatusAreaButton::Delegate::SHOW_NETWORK_OPTIONS && + chromeos::BaseLoginDisplayHost::default_host()) { + gfx::NativeWindow native_window = + chromeos::BaseLoginDisplayHost::default_host()->GetNativeWindow(); + proxy_settings_dialog_.reset(new chromeos::ProxySettingsDialog( + NULL, native_window)); + proxy_settings_dialog_->Show(); + } else { NOTREACHED(); + } } #endif } diff --git a/chrome/browser/ui/views/aura/status_area_host_aura.h b/chrome/browser/ui/views/aura/status_area_host_aura.h index b5c00bc..15642e5 100644 --- a/chrome/browser/ui/views/aura/status_area_host_aura.h +++ b/chrome/browser/ui/views/aura/status_area_host_aura.h @@ -9,6 +9,11 @@ #include "base/compiler_specific.h" #include "chrome/browser/chromeos/status/status_area_button.h" +#if defined(OS_CHROMEOS) +#include "base/memory/scoped_ptr.h" +#include "chrome/browser/chromeos/login/login_html_dialog.h" +#endif + class StatusAreaView; class TimezoneClockUpdater; @@ -46,6 +51,9 @@ class StatusAreaHostAura : public StatusAreaButton::Delegate { StatusAreaView* status_area_view_; #if defined(OS_CHROMEOS) + // Proxy settings dialog that can be invoked from network menu. + scoped_ptr<chromeos::LoginHtmlDialog> proxy_settings_dialog_; + scoped_ptr<TimezoneClockUpdater> timezone_clock_updater_; #endif diff --git a/chrome/browser/ui/webui/chromeos/login/network_dropdown.cc b/chrome/browser/ui/webui/chromeos/login/network_dropdown.cc index 00584ef..404d4d61 100644 --- a/chrome/browser/ui/webui/chromeos/login/network_dropdown.cc +++ b/chrome/browser/ui/webui/chromeos/login/network_dropdown.cc @@ -41,7 +41,7 @@ class NetworkMenuWebUI : public NetworkMenu { NetworkMenuWebUI::NetworkMenuWebUI(NetworkMenu::Delegate* delegate, WebUI* web_ui) - : NetworkMenu(delegate, false), + : NetworkMenu(delegate), web_ui_(web_ui) { } |