summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authornkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-24 14:13:05 +0000
committernkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-24 14:13:05 +0000
commit6b0a3940d93e9dcfa897b76d7df3a98a9bc80c15 (patch)
treed95d589a4815dd7e5ab1107a72097eb2c9b0b7fa /chrome
parenta604e31fc800f027bd32f1f5cf1514e105177c10 (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/chrome_browser_main.cc5
-rw-r--r--chrome/browser/chromeos/frame/browser_view.cc3
-rw-r--r--chrome/browser/chromeos/login/background_view.cc3
-rw-r--r--chrome/browser/chromeos/login/background_view.h5
-rw-r--r--chrome/browser/chromeos/login/login_html_dialog.cc3
-rw-r--r--chrome/browser/chromeos/login/login_html_dialog.h2
-rw-r--r--chrome/browser/chromeos/login/login_utils.cc3
-rw-r--r--chrome/browser/chromeos/login/screen_locker_views.cc8
-rw-r--r--chrome/browser/chromeos/login/webui_login_view.cc25
-rw-r--r--chrome/browser/chromeos/login/webui_login_view.h6
-rw-r--r--chrome/browser/chromeos/status/accessibility_menu_button.cc9
-rw-r--r--chrome/browser/chromeos/status/accessibility_menu_button.h7
-rw-r--r--chrome/browser/chromeos/status/input_method_menu.cc53
-rw-r--r--chrome/browser/chromeos/status/input_method_menu.h7
-rw-r--r--chrome/browser/chromeos/status/input_method_menu_button.cc14
-rw-r--r--chrome/browser/chromeos/status/input_method_menu_button.h6
-rw-r--r--chrome/browser/chromeos/status/network_menu.cc46
-rw-r--r--chrome/browser/chromeos/status/network_menu.h6
-rw-r--r--chrome/browser/chromeos/status/network_menu_button.cc12
-rw-r--r--chrome/browser/chromeos/status/network_menu_button.h7
-rw-r--r--chrome/browser/chromeos/status/status_area_view_chromeos.cc39
-rw-r--r--chrome/browser/chromeos/status/status_area_view_chromeos.h22
-rw-r--r--chrome/browser/ui/views/aura/status_area_host_aura.cc58
-rw-r--r--chrome/browser/ui/views/aura/status_area_host_aura.h8
-rw-r--r--chrome/browser/ui/webui/chromeos/login/network_dropdown.cc2
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) {
}