summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-26 12:47:57 +0000
committerygorshenin@chromium.org <ygorshenin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-26 12:47:57 +0000
commit3cd992e1e7f3474f63bcca7733594c0d5d14a1d3 (patch)
treeca15522c74a19712f6e566dd69f1530b4d0e1615
parent0df6deff79bf58ffc5dc2e6cd2f68ac0b9c0e956 (diff)
downloadchromium_src-3cd992e1e7f3474f63bcca7733594c0d5d14a1d3.zip
chromium_src-3cd992e1e7f3474f63bcca7733594c0d5d14a1d3.tar.gz
chromium_src-3cd992e1e7f3474f63bcca7733594c0d5d14a1d3.tar.bz2
Error Screen JS logic is moved to C++ side.
* Adds --disable-fake-ethernet switch BUG=123579 TEST=tested on Linux ChromeOS build Review URL: https://chromiumcodereview.appspot.com/11316018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@169419 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/cros/network_library_impl_stub.cc41
-rw-r--r--chrome/browser/resources/chromeos/login/display_manager.js4
-rw-r--r--chrome/browser/resources/chromeos/login/screen_error_message.js293
-rw-r--r--chrome/browser/resources/chromeos/login/screen_gaia_signin.js25
-rw-r--r--chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc18
-rw-r--r--chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h13
-rw-r--r--chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.cc3
-rw-r--r--chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc358
-rw-r--r--chrome/browser/ui/webui/chromeos/login/error_screen_handler.h108
-rw-r--r--chrome/browser/ui/webui/chromeos/login/eula_screen_handler.cc10
-rw-r--r--chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc5
-rw-r--r--chrome/browser/ui/webui/chromeos/login/network_state_informer.cc11
-rw-r--r--chrome/browser/ui/webui/chromeos/login/oobe_ui.cc41
-rw-r--r--chrome/browser/ui/webui/chromeos/login/oobe_ui.h42
-rw-r--r--chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc28
-rw-r--r--chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h13
-rw-r--r--chrome/browser/ui/webui/chromeos/login/update_screen_handler.cc10
-rw-r--r--chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.cc10
-rw-r--r--chrome/common/chrome_switches.cc3
-rw-r--r--chrome/common/chrome_switches.h5
20 files changed, 665 insertions, 376 deletions
diff --git a/chrome/browser/chromeos/cros/network_library_impl_stub.cc b/chrome/browser/chromeos/cros/network_library_impl_stub.cc
index d6bc7e9..f3afd53 100644
--- a/chrome/browser/chromeos/cros/network_library_impl_stub.cc
+++ b/chrome/browser/chromeos/cros/network_library_impl_stub.cc
@@ -5,10 +5,21 @@
#include "chrome/browser/chromeos/cros/network_library_impl_stub.h"
#include "base/bind.h"
+#include "base/command_line.h"
+#include "chrome/common/chrome_switches.h"
#include "content/public/browser/browser_thread.h"
using content::BrowserThread;
+namespace {
+
+bool IsEthernetEnabled() {
+ return !CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kDisableStubEthernet);
+}
+
+} // namespace
+
namespace chromeos {
NetworkLibraryImplStub::NetworkLibraryImplStub()
@@ -20,7 +31,10 @@ NetworkLibraryImplStub::NetworkLibraryImplStub()
connect_delay_ms_(0),
network_priority_order_(0) {
// Emulate default setting of the CheckPortalList when OOBE is done.
- check_portal_list_ = "ethernet,wifi,cellular";
+ if (IsEthernetEnabled())
+ check_portal_list_ = "ethernet,wifi,cellular";
+ else
+ check_portal_list_ = "wifi,cellular";
}
NetworkLibraryImplStub::~NetworkLibraryImplStub() {
@@ -33,9 +47,9 @@ void NetworkLibraryImplStub::Init() {
is_locked_ = false;
// Devices
- int devices =
- (1 << TYPE_ETHERNET) | (1 << TYPE_WIFI) | (1 << TYPE_CELLULAR) |
- (1 << TYPE_WIMAX);
+ int devices = (1 << TYPE_WIFI) | (1 << TYPE_CELLULAR) | (1 << TYPE_WIMAX);
+ if (IsEthernetEnabled())
+ devices |= 1 << TYPE_ETHERNET;
available_devices_ = devices;
enabled_devices_ = devices;
connected_devices_ = devices;
@@ -83,11 +97,13 @@ void NetworkLibraryImplStub::Init() {
// If these change, the expectations in network_library_unittest and
// network_menu_icon_unittest need to be changed also.
- Network* ethernet = new EthernetNetwork("eth1");
- ethernet->set_name("Fake Ethernet");
- ethernet->set_connected();
- AddStubNetwork(ethernet, PROFILE_SHARED);
- ethernet->set_is_active(ethernet->connected());
+ if (IsEthernetEnabled()) {
+ Network* ethernet = new EthernetNetwork("eth1");
+ ethernet->set_name("Fake Ethernet");
+ ethernet->set_connected();
+ AddStubNetwork(ethernet, PROFILE_SHARED);
+ ethernet->set_is_active(ethernet->connected());
+ }
WifiNetwork* wifi1 = new WifiNetwork("wifi1");
wifi1->set_name("Fake WiFi1");
@@ -420,7 +436,7 @@ void NetworkLibraryImplStub::ConnectToNetwork(Network* network) {
}
// Disconnect ethernet when connecting to a new network (for UI testing).
- if (network->type() != TYPE_VPN) {
+ if (IsEthernetEnabled() && network->type() != TYPE_VPN) {
ethernet_->set_is_active(false);
ethernet_->set_disconnected();
}
@@ -588,7 +604,10 @@ void NetworkLibraryImplStub::SetCheckPortalList(const
}
void NetworkLibraryImplStub::SetDefaultCheckPortalList() {
- SetCheckPortalList("ethernet,wifi,cellular");
+ if (IsEthernetEnabled())
+ SetCheckPortalList("ethernet,wifi,cellular");
+ else
+ SetCheckPortalList("wifi,cellular");
}
void NetworkLibraryImplStub::ChangePin(const std::string& old_pin,
diff --git a/chrome/browser/resources/chromeos/login/display_manager.js b/chrome/browser/resources/chromeos/login/display_manager.js
index 6e88a3a..07fbab3 100644
--- a/chrome/browser/resources/chromeos/login/display_manager.js
+++ b/chrome/browser/resources/chromeos/login/display_manager.js
@@ -260,6 +260,8 @@ cr.define('cr.ui.login', function() {
$('oobe').className = nextStepId;
$('step-logo').hidden = newStep.classList.contains('no-logo');
+
+ chrome.send('updateCurrentScreen', [this.currentScreen.id]);
},
/**
@@ -300,7 +302,7 @@ cr.define('cr.ui.login', function() {
var index = this.getScreenIndex_(screenId);
if (index >= 0)
this.toggleStep_(index, data);
- $('error-message').update();
+ chrome.send('errorScreenUpdate');
},
/**
diff --git a/chrome/browser/resources/chromeos/login/screen_error_message.js b/chrome/browser/resources/chromeos/login/screen_error_message.js
index 5e276be..7216c99 100644
--- a/chrome/browser/resources/chromeos/login/screen_error_message.js
+++ b/chrome/browser/resources/chromeos/login/screen_error_message.js
@@ -45,13 +45,6 @@ cr.define('login', function() {
// Link which triggers frame reload.
/** @const */ var RELOAD_PAGE_ID = 'proxy-error-retry-link';
- // Timeout used to delay first offline notification from network
- // manager.
- /** @const */ var OFFLINE_TIMEOUT_SEC = 5;
-
- // Timeout used to prevent infinite connecting to a flaky network.
- /** @const */ var CONNECTING_TIMEOUT_SEC = 60;
-
/**
* Creates a new offline message screen div.
* @constructor
@@ -80,28 +73,6 @@ cr.define('login', function() {
},
/**
- * Timer used to delay calls to updateState_ method.
- */
- updateStateTimer_: undefined,
-
- /**
- * True if updateState_ method was not called.
- */
- firstUpdateStateCall_: true,
-
- /**
- * Last network state.
- */
- lastNetworkState_: NET_STATE.UNKNOWN,
-
- /*
- * Timer which is started when network moves to the connecting
- * state. If it's triggered, then it's look like the network is
- * flaky and we must show offline message.
- */
- connectingTimer_: undefined,
-
- /**
* Updates localized content of the screen that is not updated via template.
*/
updateLocalizedContent_: function() {
@@ -165,38 +136,11 @@ cr.define('login', function() {
cr.ui.DropDown.hide('offline-networks-list');
},
- update: function() {
- chrome.send('loginRequestNetworkState',
- ['login.ErrorMessageScreen.updateState',
- 'update']);
- },
-
- /**
- * Clears |updateStateTimer_|.
- * @private
- */
- clearUpdateStateTimer_: function() {
- if (this.updateStateTimer_) {
- window.clearTimeout(this.updateStateTimer_);
- this.updateStateTimer_ = undefined;
- }
- },
-
- /**
- * Clears |connectingTimer_|.
- * @private
- */
- clearConnectingTimer_: function() {
- if (this.connectingTimer_) {
- window.clearTimeout(this.connectingTimer_);
- this.connectingTimer_ = undefined;
- }
- },
-
/**
* Prepares error screen to show proxy error.
+ * @private
*/
- showProxyError: function() {
+ showProxyError_: function() {
this.classList.remove('show-offline-message');
this.classList.remove('show-captive-portal');
this.classList.add('show-proxy-error');
@@ -205,8 +149,9 @@ cr.define('login', function() {
/**
* Prepares error screen to show captive portal error.
* @param {string} network Name of the current network
+ * @private
*/
- showCaptivePortalError: function(network) {
+ showCaptivePortalError_: function(network) {
$(CURRENT_NETWORK_NAME_ID).textContent = network;
this.classList.remove('show-offline-message');
this.classList.remove('show-proxy-error');
@@ -215,8 +160,9 @@ cr.define('login', function() {
/**
* Prepares error screen to show offline error.
+ * @private
*/
- showOfflineError: function() {
+ showOfflineError_: function() {
this.classList.remove('show-captive-portal');
this.classList.remove('show-proxy-error');
this.classList.add('show-offline-message');
@@ -225,8 +171,9 @@ cr.define('login', function() {
/**
* Shows screen.
* @param {object} screen Screen that should be shown.
+ * @private
*/
- showScreen: function(screen) {
+ showScreen_: function(screen) {
screen.classList.remove('hidden');
screen.classList.remove('faded');
@@ -235,135 +182,16 @@ cr.define('login', function() {
},
/**
- * Shows or hides offline message based on network on/offline state.
- * @param {number} state Current state of the network (see NET_STATE).
- * @param {string} network Name of the current network.
- * @param {string} reason Reason the callback was called.
- * @param {number} lastNetworkType Last active network type.
- * @param {boolean} opt_forceUpdate Are state should be updated in any case?
+ * Shows/hides offline message.
+ * @param {boolean} visible True to show offline message.
+ * @private
*/
- updateState_: function(state, network, reason, lastNetworkType,
- opt_forceUpdate) {
- console.log('updateState_: state=' + state +
- ', network=' + network + ', reason=' + reason +
- ', lastNetworkType=' + lastNetworkType +
- ', opt_forceUpdate=' + opt_forceUpdate);
- this.clearUpdateStateTimer_();
-
- // Delay first notification about offline state.
- if (state == NET_STATE.OFFLINE && this.firstUpdateStateCall_) {
- this.firstUpdateStateCall_ = false;
- this.updateStateTimer_ = window.setTimeout(
- this.updateState_.bind(
- this, state, network, reason, lastNetworkType, opt_forceUpdate),
- OFFLINE_TIMEOUT_SEC * 1000);
- return;
- }
- this.firstUpdateStateCall_ = false;
-
- // Don't show or hide error screen if we're in connecting state.
- if (state == NET_STATE.CONNECTING && !opt_forceUpdate) {
- if (!this.connectingTimer_) {
- // First notification about CONNECTING state.
- this.clearConnectingTimer_();
- this.connectingTimer_ = window.setTimeout(
- this.updateState_.bind(
- this, state, network, reason, lastNetworkType, true),
- CONNECTING_TIMEOUT_SEC * 1000);
- }
- return;
- }
- this.clearConnectingTimer_();
-
- var currentScreen = Oobe.getInstance().currentScreen;
+ showOfflineMessage_: function(visible) {
var offlineMessage = this;
- var isOnline = (state == NET_STATE.ONLINE);
- var isUnderCaptivePortal = (state == NET_STATE.PORTAL);
- var isProxyError = reason == ERROR_REASONS.PROXY_AUTH_CANCELLED ||
- reason == ERROR_REASONS.PROXY_CONNECTION_FAILED;
- var shouldOverlay = MANAGED_SCREENS.indexOf(currentScreen.id) != -1 &&
- !currentScreen.isLocal;
- var isTimeout = false;
- var isShown = !offlineMessage.classList.contains('hidden') &&
- !offlineMessage.classList.contains('faded');
- var isGaiaSignin = (currentScreen.id == SCREEN_GAIA_SIGNIN);
- var gaiaSigninReloaded = false;
-
- // Reload frame if network is changed. If current network is
- // online, and previous network was online, frame isn't
- // reloaded.
- if (reason == ERROR_REASONS.NETWORK_CHANGED) {
- if (state == NET_STATE.ONLINE &&
- this.lastNetworkState_ != NET_STATE.ONLINE &&
- isGaiaSignin && !gaiaSigninReloaded) {
- currentScreen.doReload();
- gaiaSigninReloaded = true;
- }
- }
- this.lastNetworkState_ = state;
-
- if (reason == ERROR_REASONS.PROXY_CONFIG_CHANGED && shouldOverlay &&
- isGaiaSignin && !gaiaSigninReloaded) {
- // Schedules a immediate retry.
- currentScreen.doReload();
- gaiaSigninReloaded = true;
- console.log('Retry page load since proxy settings has been changed');
- }
-
- // Fake portal state for loading timeout.
- if (reason == ERROR_REASONS.LOADING_TIMEOUT) {
- isOnline = false;
- isUnderCaptivePortal = true;
- isTimeout = true;
- }
-
- // Portal was detected via generate_204 redirect on Chrome side.
- // Subsequent call to show dialog if it's already shown does nothing.
- if (reason == ERROR_REASONS.PORTAL_DETECTED) {
- isOnline = false;
- isUnderCaptivePortal = true;
- }
-
- if (!isOnline && shouldOverlay) {
- console.log('Show offline message: state=' + state +
- ', network=' + network + ', reason=' + reason +
- ', isUnderCaptivePortal=' + isUnderCaptivePortal);
-
- // Clear any error messages that might still be around.
- Oobe.clearErrors();
-
- offlineMessage.onBeforeShow(lastNetworkType);
-
- if (isUnderCaptivePortal && !isProxyError) {
- // Do not bother a user with obsessive captive portal showing. This
- // check makes captive portal being shown only once: either when error
- // screen is shown for the first time or when switching from another
- // error screen (offline, proxy).
- if (!isShown ||
- !offlineMessage.classList.contains('show-captive-portal')) {
- // In case of timeout we're suspecting that network might be
- // a captive portal but would like to check that first.
- // Otherwise (signal from shill / generate_204 got redirected)
- // show dialog right away.
- if (isTimeout)
- chrome.send('fixCaptivePortal');
- else
- chrome.send('showCaptivePortal');
- }
- } else {
- chrome.send('hideCaptivePortal');
- }
-
- if (isUnderCaptivePortal) {
- if (isProxyError)
- offlineMessage.showProxyError();
- else
- offlineMessage.showCaptivePortalError(network);
- } else {
- offlineMessage.showOfflineError();
- }
+ var currentScreen = Oobe.getInstance().currentScreen;
- offlineMessage.showScreen(offlineMessage);
+ if (visible) {
+ this.showScreen_(offlineMessage);
if (!currentScreen.classList.contains('faded')) {
currentScreen.classList.add('faded');
@@ -374,44 +202,24 @@ cr.define('login', function() {
currentScreen.classList.add('hidden');
});
}
- chrome.send('networkErrorShown');
+
// Report back error screen UI being painted.
window.webkitRequestAnimationFrame(function() {
chrome.send('loginVisible', ['network-error']);
});
} else {
- chrome.send('hideCaptivePortal');
-
- if (!offlineMessage.classList.contains('faded')) {
- console.log('Hide offline message. state=' + state +
- ', network=' + network + ', reason=' + reason);
-
- offlineMessage.onBeforeHide();
-
- offlineMessage.classList.add('faded');
- if (offlineMessage.classList.contains('animated')) {
- offlineMessage.addEventListener('webkitTransitionEnd',
- function f(e) {
- offlineMessage.removeEventListener('webkitTransitionEnd', f);
- if (offlineMessage.classList.contains('faded'))
- offlineMessage.classList.add('hidden');
- });
- } else {
- offlineMessage.classList.add('hidden');
- }
-
- offlineMessage.showScreen(currentScreen);
-
- // Forces a reload for Gaia screen on hiding error message.
- if (isGaiaSignin && !gaiaSigninReloaded) {
- currentScreen.doReload();
- gaiaSigninReloaded = true;
- }
- } else if (isGaiaSignin && currentScreen.loading) {
- if (!gaiaSigninReloaded) {
- currentScreen.doReload();
- gaiaSigninReloaded = true;
- }
+ this.showScreen_(currentScreen);
+
+ offlineMessage.classList.add('faded');
+ if (offlineMessage.classList.contains('animated')) {
+ offlineMessage.addEventListener('webkitTransitionEnd',
+ function f(e) {
+ offlineMessage.removeEventListener('webkitTransitionEnd', f);
+ if (offlineMessage.classList.contains('faded'))
+ offlineMessage.classList.add('hidden');
+ });
+ } else {
+ offlineMessage.classList.add('hidden');
}
}
},
@@ -428,15 +236,41 @@ cr.define('login', function() {
};
/**
- * Network state changed callback.
- * @param {number} state Current state of the network (see NET_STATE).
- * @param {string} network Name of the current network.
- * @param {string} reason Reason the callback was called.
- * @param {number} lastNetworkType Last active network type.
+ * Prepares error screen to show proxy error.
+ */
+ ErrorMessageScreen.showProxyError = function() {
+ $('error-message').showProxyError_();
+ };
+
+ /**
+ * Prepares error screen to show captive portal error.
+ * @param {string} network Name of the current network
*/
- ErrorMessageScreen.updateState = function(
- state, network, reason, lastNetworkType) {
- $('error-message').updateState_(state, network, reason, lastNetworkType);
+ ErrorMessageScreen.showCaptivePortalError = function(network) {
+ $('error-message').showCaptivePortalError_(network);
+ };
+
+ /**
+ * Prepares error screen to show offline error.
+ */
+ ErrorMessageScreen.showOfflineError = function() {
+ $('error-message').showOfflineError_();
+ };
+
+ /**
+ * Shows/hides offline message.
+ * @param {boolean} visible True to show offline message.
+ */
+ ErrorMessageScreen.showOfflineMessage = function(visible) {
+ $('error-message').showOfflineMessage_(visible);
+ };
+
+ ErrorMessageScreen.onBeforeShow = function(lastNetworkType) {
+ $('error-message').onBeforeShow(lastNetworkType);
+ };
+
+ ErrorMessageScreen.onBeforeHide = function() {
+ $('error-message').onBeforeHide();
};
/**
@@ -476,7 +310,8 @@ cr.define('login', function() {
var currentScreen = Oobe.getInstance().currentScreen;
if (MANAGED_SCREENS.indexOf(currentScreen.id) != -1 &&
state != NET_STATE.CONNECTING) {
- this.updateState(NET_STATE.PORTAL, network, reason, lastNetworkType);
+ chrome.send('updateState',
+ [NET_STATE.PORTAL, network, reason, lastNetworkType]);
// Schedules a retry.
currentScreen.scheduleRetry();
}
diff --git a/chrome/browser/resources/chromeos/login/screen_gaia_signin.js b/chrome/browser/resources/chromeos/login/screen_gaia_signin.js
index ee7a99f..e9d410c 100644
--- a/chrome/browser/resources/chromeos/login/screen_gaia_signin.js
+++ b/chrome/browser/resources/chromeos/login/screen_gaia_signin.js
@@ -51,7 +51,7 @@ cr.define('login', function() {
// Whether local version of Gaia page is used.
// @type {boolean}
- isLocal: false,
+ isLocal_: false,
// Whether offline login is allowed.
// @type {boolean}
@@ -80,6 +80,23 @@ cr.define('login', function() {
},
/**
+ * Returns true if local version of Gaia is used.
+ * @type {boolean}
+ */
+ get isLocal() {
+ return this.isLocal_;
+ },
+
+ /**
+ * Sets whether local version of Gaia is used.
+ * @param {boolean} value Whether local version of Gaia is used.
+ */
+ set isLocal(value) {
+ this.isLocal_ = value;
+ chrome.send('updateGaiaIsLocal', [value]);
+ },
+
+ /**
* Shows/hides loading UI.
* @param {boolean} show True to show loading UI.
* @private
@@ -298,7 +315,7 @@ cr.define('login', function() {
Oobe.clearErrors();
} else if (msg.method == 'loginUILoaded') {
this.loading = false;
- $('error-message').update();
+ chrome.send('errorScreenUpdate');
this.clearLoadingTimer_();
// Show deferred error bubble.
if (this.errorBubble_) {
@@ -449,6 +466,10 @@ cr.define('login', function() {
$('gaia-signin').updateAuthExtension_(data);
};
+ GaiaSigninScreen.doReload = function() {
+ $('gaia-signin').doReload();
+ };
+
return {
GaiaSigninScreen: GaiaSigninScreen
};
diff --git a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
index 15f234c..0e970ad 100644
--- a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
@@ -32,12 +32,17 @@ namespace chromeos {
CoreOobeHandler::CoreOobeHandler(OobeUI* oobe_ui)
: oobe_ui_(oobe_ui),
show_oobe_ui_(false),
- version_info_updater_(this) {
+ version_info_updater_(this),
+ delegate_(NULL) {
}
CoreOobeHandler::~CoreOobeHandler() {
}
+void CoreOobeHandler::SetDelegate(Delegate* delegate) {
+ delegate_ = delegate;
+}
+
void CoreOobeHandler::GetLocalizedStrings(
base::DictionaryValue* localized_strings) {
localized_strings->SetString(
@@ -67,6 +72,9 @@ void CoreOobeHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback(kJsApiSkipUpdateEnrollAfterEula,
base::Bind(&CoreOobeHandler::HandleSkipUpdateEnrollAfterEula,
base::Unretained(this)));
+ web_ui()->RegisterMessageCallback("updateCurrentScreen",
+ base::Bind(&CoreOobeHandler::HandleUpdateCurrentScreen,
+ base::Unretained(this)));
}
void CoreOobeHandler::HandleInitialized(const base::ListValue* args) {
@@ -81,6 +89,14 @@ void CoreOobeHandler::HandleSkipUpdateEnrollAfterEula(
controller->SkipUpdateEnrollAfterEula();
}
+void CoreOobeHandler::HandleUpdateCurrentScreen(const base::ListValue* args) {
+ DCHECK(args && args->GetSize() == 1);
+
+ std::string screen;
+ if (args->GetString(0, &screen) && delegate_)
+ delegate_->OnCurrentScreenChanged(screen);
+}
+
void CoreOobeHandler::ShowOobeUI(bool show) {
if (show == show_oobe_ui_)
return;
diff --git a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h
index a9642a9d..6f6b72d 100644
--- a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h
+++ b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h
@@ -9,7 +9,7 @@
#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
namespace base {
- class ListValue;
+class ListValue;
}
namespace chromeos {
@@ -20,9 +20,17 @@ class OobeUI;
class CoreOobeHandler : public BaseScreenHandler,
public VersionInfoUpdater::Delegate {
public:
+ class Delegate {
+ public:
+ // Called when current screen is changed.
+ virtual void OnCurrentScreenChanged(const std::string& screen) = 0;
+ };
+
explicit CoreOobeHandler(OobeUI* oobe_ui);
virtual ~CoreOobeHandler();
+ void SetDelegate(Delegate* delegate);
+
// BaseScreenHandler implementation:
virtual void GetLocalizedStrings(
base::DictionaryValue* localized_strings) OVERRIDE;
@@ -51,6 +59,7 @@ class CoreOobeHandler : public BaseScreenHandler,
// Handlers for JS WebUI messages.
void HandleInitialized(const base::ListValue* args);
void HandleSkipUpdateEnrollAfterEula(const base::ListValue* args);
+ void HandleUpdateCurrentScreen(const base::ListValue* args);
// Calls javascript to sync OOBE UI visibility with show_oobe_ui_.
void UpdateOobeUIVisibility();
@@ -67,6 +76,8 @@ class CoreOobeHandler : public BaseScreenHandler,
// Updates when version info is changed.
VersionInfoUpdater version_info_updater_;
+ Delegate* delegate_;
+
DISALLOW_COPY_AND_ASSIGN(CoreOobeHandler);
};
diff --git a/chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.cc
index 1860f32..6adbcd2 100644
--- a/chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.cc
@@ -14,6 +14,7 @@
#include "chrome/browser/net/gaia/gaia_oauth_fetcher.h"
#include "chrome/browser/policy/message_util.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
#include "content/public/browser/web_contents.h"
#include "google_apis/gaia/gaia_auth_util.h"
#include "google_apis/gaia/gaia_constants.h"
@@ -507,7 +508,7 @@ void EnterpriseOAuthEnrollmentScreenHandler::DoShow() {
screen_data.SetString("test_password", test_password_);
}
- ShowScreen("oauth-enrollment", &screen_data);
+ ShowScreen(OobeUI::kScreenOobeEnrollment, &screen_data);
}
} // namespace chromeos
diff --git a/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc
index 0a84f42..0ca3422 100644
--- a/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc
@@ -4,20 +4,58 @@
#include "chrome/browser/ui/webui/chromeos/login/error_screen_handler.h"
+#include "base/bind.h"
#include "base/logging.h"
+#include "base/message_loop.h"
+#include "base/time.h"
#include "base/values.h"
#include "chrome/browser/chromeos/login/captive_portal_window_proxy.h"
+#include "chrome/browser/chromeos/login/webui_login_display_host.h"
#include "chrome/browser/ui/webui/chromeos/login/native_window_delegate.h"
#include "chrome/browser/ui/webui/chromeos/login/network_state_informer.h"
+#include "chrome/common/chrome_notification_types.h"
#include "content/public/browser/web_ui.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
namespace chromeos {
+namespace {
+
+// Timeout to delay first notification about offline state for a
+// current network.
+const int kOfflineTimeoutSec = 5;
+
+// Timeout used to prevent infinite connecting to a flaky network.
+const int kConnectingTimeoutSec = 60;
+
+bool IsProxyError(const std::string& reason) {
+ return reason == ErrorScreenHandler::kErrorReasonProxyAuthCancelled ||
+ reason == ErrorScreenHandler::kErrorReasonProxyConnectionFailed;
+}
+
+} // namespace
+
+// static
+const char ErrorScreenHandler::kErrorReasonProxyAuthCancelled[] =
+ "frame error:111";
+const char ErrorScreenHandler::kErrorReasonProxyConnectionFailed[] =
+ "frame error:130";
+const char ErrorScreenHandler::kErrorReasonProxyConfigChanged[] =
+ "proxy changed";
+const char ErrorScreenHandler::kErrorReasonLoadingTimeout[] = "loading timeout";
+const char ErrorScreenHandler::kErrorReasonPortalDetected[] = "portal detected";
+const char ErrorScreenHandler::kErrorReasonNetworkChanged[] = "network changed";
+const char ErrorScreenHandler::kErrorReasonUpdate[] = "update";
+
ErrorScreenHandler::ErrorScreenHandler(
const scoped_refptr<NetworkStateInformer>& network_state_informer)
- : network_state_informer_(network_state_informer),
+ : is_shown_(false),
+ is_first_update_state_call_(true),
+ state_(STATE_UNKNOWN),
+ gaia_is_local_(false),
+ last_network_state_(NetworkStateInformer::UNKNOWN),
+ network_state_informer_(network_state_informer),
native_window_delegate_(NULL) {
DCHECK(network_state_informer_);
network_state_informer_->AddObserver(this);
@@ -32,64 +70,179 @@ void ErrorScreenHandler::SetNativeWindowDelegate(
native_window_delegate_ = native_window_delegate;
}
+void ErrorScreenHandler::Show() {
+ ShowOfflineMessage(true);
+ set_is_shown(true);
+ NetworkErrorShown();
+}
+
+void ErrorScreenHandler::Hide() {
+ ShowOfflineMessage(false);
+ set_is_shown(false);
+}
+
void ErrorScreenHandler::UpdateState(NetworkStateInformer::State state,
const std::string& network_name,
const std::string& reason,
ConnectionType last_network_type) {
- LOG(ERROR) << "ErrorScreenHandler::UpdateState(): state=" << state <<
- ", network_name=" << network_name <<
- ", reason=" << reason <<
- ", last_network_type=" << last_network_type;
- // TODO (ygorshenin): instead of just call JS function, move all
- // logic from JS here.
- base::FundamentalValue state_value(state);
- base::StringValue network_value(network_name);
- base::StringValue reason_value(reason);
- base::FundamentalValue last_network_value(last_network_type);
- web_ui()->CallJavascriptFunction("login.ErrorMessageScreen.updateState",
- state_value, network_value, reason_value, last_network_value);
+ VLOG(1) << "ErrorScreenHandler::UpdateState(): state=" << state << ", "
+ << "network_name=" << network_name << ", reason=" << reason << ", "
+ << "last_network_type=" << last_network_type;
+ UpdateStateInternal(state, network_name, reason, last_network_type, false);
}
-void ErrorScreenHandler::GetLocalizedStrings(
- base::DictionaryValue* localized_strings) {
- localized_strings->SetString("offlineMessageTitle",
- l10n_util::GetStringUTF16(IDS_LOGIN_OFFLINE_TITLE));
- localized_strings->SetString("offlineMessageBody",
- l10n_util::GetStringUTF16(IDS_LOGIN_OFFLINE_MESSAGE));
- localized_strings->SetString("captivePortalTitle",
- l10n_util::GetStringUTF16(IDS_LOGIN_MAYBE_CAPTIVE_PORTAL_TITLE));
- localized_strings->SetString("captivePortalMessage",
- l10n_util::GetStringUTF16(IDS_LOGIN_MAYBE_CAPTIVE_PORTAL));
- localized_strings->SetString("captivePortalProxyMessage",
- l10n_util::GetStringUTF16(IDS_LOGIN_MAYBE_CAPTIVE_PORTAL_PROXY));
- localized_strings->SetString("captivePortalNetworkSelect",
- l10n_util::GetStringUTF16(IDS_LOGIN_MAYBE_CAPTIVE_PORTAL_NETWORK_SELECT));
- localized_strings->SetString("proxyMessageText",
- l10n_util::GetStringUTF16(IDS_LOGIN_PROXY_ERROR_MESSAGE));
+void ErrorScreenHandler::UpdateStateInternal(NetworkStateInformer::State state,
+ std::string network_name,
+ std::string reason,
+ ConnectionType last_network_type,
+ bool force_update) {
+ update_state_closure_.Cancel();
+ if (state == NetworkStateInformer::OFFLINE && is_first_update_state_call()) {
+ set_is_first_update_state_call(false);
+ update_state_closure_.Reset(
+ base::Bind(
+ &ErrorScreenHandler::UpdateStateInternal,
+ base::Unretained(this),
+ state, network_name, reason, last_network_type, force_update));
+ MessageLoop::current()->PostDelayedTask(
+ FROM_HERE,
+ update_state_closure_.callback(),
+ base::TimeDelta::FromMilliseconds(kOfflineTimeoutSec));
+ return;
+ }
+ set_is_first_update_state_call(false);
+
+ // Don't show or hide error screen if we're in connecting state.
+ if (state == NetworkStateInformer::CONNECTING && !force_update) {
+ if (connecting_closure_.IsCancelled()) {
+ // First notification about CONNECTING state.
+ connecting_closure_.Reset(
+ base::Bind(&ErrorScreenHandler::UpdateStateInternal,
+ base::Unretained(this),
+ state, network_name, reason, last_network_type, true));
+ MessageLoop::current()->PostDelayedTask(
+ FROM_HERE,
+ connecting_closure_.callback(),
+ base::TimeDelta::FromMilliseconds(kConnectingTimeoutSec));
+ }
+ return;
+ }
+ connecting_closure_.Cancel();
+
+ bool is_online = (state == NetworkStateInformer::ONLINE);
+ bool is_under_captive_portal =
+ (state == NetworkStateInformer::CAPTIVE_PORTAL);
+ bool is_proxy_error = IsProxyError(reason);
+ bool is_timeout = false;
+ bool is_gaia_signin = (GetCurrentScreen() == OobeUI::SCREEN_GAIA_SIGNIN);
+ bool is_gaia_reloaded = false;
+ bool should_overlay = is_gaia_signin && !gaia_is_local();
+
+ // Reload frame if network is changed.
+ if (reason == kErrorReasonNetworkChanged) {
+ if (is_online &&
+ last_network_state() != NetworkStateInformer::ONLINE &&
+ is_gaia_signin && !is_gaia_reloaded) {
+ ReloadGaiaScreen();
+ is_gaia_reloaded = true;
+ }
+ }
+ set_last_network_state(state);
+
+ if (reason == kErrorReasonProxyConfigChanged && should_overlay &&
+ is_gaia_signin && !is_gaia_reloaded) {
+ // Schedules a immediate retry.
+ ReloadGaiaScreen();
+ is_gaia_reloaded = true;
+ VLOG(1) << "Retry page load since proxy settings has been changed";
+ }
+
+ // Fake portal state for loading timeout.
+ if (reason == kErrorReasonLoadingTimeout) {
+ is_online = false;
+ is_under_captive_portal = true;
+ is_timeout = true;
+ }
+
+ // Portal was detected via generate_204 redirect on Chrome side.
+ // Subsequent call to show dialog if it's already shown does nothing.
+ if (reason == kErrorReasonPortalDetected) {
+ is_online = false;
+ is_under_captive_portal = true;
+ }
+
+ if (!is_online && should_overlay) {
+ VLOG(1) << "Show offline message: state=" << state << ", "
+ << "network_name=" << network_name << ", reason=" << reason << ", "
+ << "is_under_captive_portal=" << is_under_captive_portal;
+ ClearOobeErrors();
+ OnBeforeShow(last_network_type);
+
+ if (is_under_captive_portal && !is_proxy_error) {
+ // Do not bother a user with obsessive captive portal showing. This
+ // check makes captive portal being shown only once: either when error
+ // screen is shown for the first time or when switching from another
+ // error screen (offline, proxy).
+ if (!is_shown() || get_state() != STATE_CAPTIVE_PORTAL_ERROR) {
+ // In case of timeout we're suspecting that network might be
+ // a captive portal but would like to check that first.
+ // Otherwise (signal from shill / generate_204 got redirected)
+ // show dialog right away.
+ if (is_timeout)
+ FixCaptivePortal();
+ else
+ ShowCaptivePortal();
+ }
+ } else {
+ HideCaptivePortal();
+ }
+
+ if (is_under_captive_portal) {
+ if (is_proxy_error)
+ ShowProxyError();
+ else
+ ShowCaptivePortalError(network_name);
+ } else {
+ ShowOfflineError();
+ }
+ Show();
+ } else {
+ HideCaptivePortal();
+
+ if (is_shown()) {
+ VLOG(1) << "Hide offline message. state=" << state << ", "
+ << "network_name=" << network_name << ", reason=" << reason;
+ OnBeforeHide();
+ Hide();
+
+ // Forces a reload for Gaia screen on hiding error message.
+ if (is_gaia_signin && !is_gaia_reloaded) {
+ ReloadGaiaScreen();
+ is_gaia_reloaded = true;
+ }
+ }
+ }
}
-void ErrorScreenHandler::Initialize() {
+void ErrorScreenHandler::ReloadGaiaScreen() {
+ web_ui()->CallJavascriptFunction("login.GaiaSigninScreen.doReload");
}
-gfx::NativeWindow ErrorScreenHandler::GetNativeWindow() {
- if (native_window_delegate_)
- return native_window_delegate_->GetNativeWindow();
- return NULL;
+void ErrorScreenHandler::ClearOobeErrors() {
+ web_ui()->CallJavascriptFunction("cr.ui.Oobe.clearErrors");
}
-void ErrorScreenHandler::RegisterMessages() {
- web_ui()->RegisterMessageCallback("fixCaptivePortal",
- base::Bind(&ErrorScreenHandler::HandleFixCaptivePortal,
- base::Unretained(this)));
- web_ui()->RegisterMessageCallback("showCaptivePortal",
- base::Bind(&ErrorScreenHandler::HandleShowCaptivePortal,
- base::Unretained(this)));
- web_ui()->RegisterMessageCallback("hideCaptivePortal",
- base::Bind(&ErrorScreenHandler::HandleHideCaptivePortal,
- base::Unretained(this)));
+void ErrorScreenHandler::OnBeforeShow(ConnectionType last_network_type) {
+ base::FundamentalValue last_network_type_value(last_network_type);
+ web_ui()->CallJavascriptFunction("login.ErrorMessageScreen.onBeforeShow",
+ last_network_type_value);
}
-void ErrorScreenHandler::HandleFixCaptivePortal(const base::ListValue* args) {
+void ErrorScreenHandler::OnBeforeHide() {
+ web_ui()->CallJavascriptFunction("login.ErrorMessageScreen.onBeforeHide");
+}
+
+void ErrorScreenHandler::FixCaptivePortal() {
if (!native_window_delegate_)
return;
// TODO (ygorshenin): move error page and captive portal window
@@ -103,16 +256,125 @@ void ErrorScreenHandler::HandleFixCaptivePortal(const base::ListValue* args) {
captive_portal_window_proxy_->ShowIfRedirected();
}
-void ErrorScreenHandler::HandleShowCaptivePortal(const base::ListValue* args) {
+void ErrorScreenHandler::ShowCaptivePortal() {
// This call is an explicit user action
// i.e. clicking on link so force dialog show.
- HandleFixCaptivePortal(args);
+ FixCaptivePortal();
captive_portal_window_proxy_->Show();
}
-void ErrorScreenHandler::HandleHideCaptivePortal(const base::ListValue* args) {
+void ErrorScreenHandler::HideCaptivePortal() {
if (captive_portal_window_proxy_.get())
captive_portal_window_proxy_->Close();
}
+void ErrorScreenHandler::NetworkErrorShown() {
+ content::NotificationService::current()->Notify(
+ chrome::NOTIFICATION_LOGIN_NETWORK_ERROR_SHOWN,
+ content::NotificationService::AllSources(),
+ content::NotificationService::NoDetails());
+}
+
+void ErrorScreenHandler::ShowProxyError() {
+ web_ui()->CallJavascriptFunction("login.ErrorMessageScreen.showProxyError");
+ set_state(STATE_PROXY_ERROR);
+}
+
+void ErrorScreenHandler::ShowCaptivePortalError(const std::string& network) {
+ base::StringValue network_value(network);
+ web_ui()->CallJavascriptFunction(
+ "login.ErrorMessageScreen.showCaptivePortalError", network_value);
+ set_state(STATE_CAPTIVE_PORTAL_ERROR);
+}
+
+void ErrorScreenHandler::ShowOfflineError() {
+ web_ui()->CallJavascriptFunction("login.ErrorMessageScreen.showOfflineError");
+ set_state(STATE_OFFLINE_ERROR);
+}
+
+void ErrorScreenHandler::ShowOfflineMessage(bool visible) {
+ base::FundamentalValue visible_value(visible);
+ web_ui()->CallJavascriptFunction(
+ "login.ErrorMessageScreen.showOfflineMessage", visible_value);
+}
+
+OobeUI::Screen ErrorScreenHandler::GetCurrentScreen() {
+ OobeUI::Screen screen = OobeUI::SCREEN_UNKNOWN;
+ OobeUI* oobe_ui = static_cast<OobeUI*>(web_ui()->GetController());
+ if (oobe_ui)
+ screen = oobe_ui->current_screen();
+ return screen;
+}
+
+void ErrorScreenHandler::HandleFixCaptivePortal(const base::ListValue* args) {
+ FixCaptivePortal();
+}
+
+void ErrorScreenHandler::HandleShowCaptivePortal(const base::ListValue* args) {
+ ShowCaptivePortal();
+}
+
+void ErrorScreenHandler::HandleHideCaptivePortal(const base::ListValue* args) {
+ HideCaptivePortal();
+}
+
+void ErrorScreenHandler::HandleErrorScreenUpdate(const base::ListValue* args) {
+ UpdateStateInternal(network_state_informer_->state(),
+ network_state_informer_->network_name(),
+ kErrorReasonUpdate,
+ network_state_informer_->last_network_type(),
+ false);
+}
+
+void ErrorScreenHandler::HandleUpdateGaiaIsLocal(const base::ListValue* args) {
+ DCHECK(args && args->GetSize() == 1);
+
+ bool gaia_is_local = false;
+ if (!args->GetBoolean(0, &gaia_is_local))
+ return;
+ set_gaia_is_local(gaia_is_local);
+}
+
+void ErrorScreenHandler::RegisterMessages() {
+ web_ui()->RegisterMessageCallback("fixCaptivePortal",
+ base::Bind(&ErrorScreenHandler::HandleFixCaptivePortal,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback("showCaptivePortal",
+ base::Bind(&ErrorScreenHandler::HandleShowCaptivePortal,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback("hideCaptivePortal",
+ base::Bind(&ErrorScreenHandler::HandleHideCaptivePortal,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback("errorScreenUpdate",
+ base::Bind(&ErrorScreenHandler::HandleErrorScreenUpdate,
+ base::Unretained(this)));
+}
+
+void ErrorScreenHandler::GetLocalizedStrings(
+ base::DictionaryValue* localized_strings) {
+ localized_strings->SetString("offlineMessageTitle",
+ l10n_util::GetStringUTF16(IDS_LOGIN_OFFLINE_TITLE));
+ localized_strings->SetString("offlineMessageBody",
+ l10n_util::GetStringUTF16(IDS_LOGIN_OFFLINE_MESSAGE));
+ localized_strings->SetString("captivePortalTitle",
+ l10n_util::GetStringUTF16(IDS_LOGIN_MAYBE_CAPTIVE_PORTAL_TITLE));
+ localized_strings->SetString("captivePortalMessage",
+ l10n_util::GetStringUTF16(IDS_LOGIN_MAYBE_CAPTIVE_PORTAL));
+ localized_strings->SetString("captivePortalProxyMessage",
+ l10n_util::GetStringUTF16(IDS_LOGIN_MAYBE_CAPTIVE_PORTAL_PROXY));
+ localized_strings->SetString("captivePortalNetworkSelect",
+ l10n_util::GetStringUTF16(IDS_LOGIN_MAYBE_CAPTIVE_PORTAL_NETWORK_SELECT));
+ localized_strings->SetString("proxyMessageText",
+ l10n_util::GetStringUTF16(IDS_LOGIN_PROXY_ERROR_MESSAGE));
+}
+
+void ErrorScreenHandler::Initialize() {
+}
+
+gfx::NativeWindow ErrorScreenHandler::GetNativeWindow() {
+ if (native_window_delegate_)
+ return native_window_delegate_->GetNativeWindow();
+ return NULL;
+}
+
} // namespace chromeos
diff --git a/chrome/browser/ui/webui/chromeos/login/error_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/error_screen_handler.h
index d043c94..17589de 100644
--- a/chrome/browser/ui/webui/chromeos/login/error_screen_handler.h
+++ b/chrome/browser/ui/webui/chromeos/login/error_screen_handler.h
@@ -5,10 +5,13 @@
#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_ERROR_SCREEN_HANDLER_H_
#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_ERROR_SCREEN_HANDLER_H_
+#include "base/cancelable_callback.h"
#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
+#include "chrome/browser/chromeos/cros/network_constants.h"
#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
#include "chrome/browser/ui/webui/chromeos/login/network_state_informer.h"
+#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
namespace base {
class DictionaryValue;
@@ -25,12 +28,35 @@ class ErrorScreenHandler
: public BaseScreenHandler,
public NetworkStateInformer::NetworkStateInformerObserver {
public:
+ enum State {
+ STATE_UNKNOWN = 0,
+ STATE_PROXY_ERROR,
+ STATE_CAPTIVE_PORTAL_ERROR,
+ STATE_OFFLINE_ERROR,
+ };
+
+ // Possible error reasons.
+ static const char kErrorReasonProxyAuthCancelled[];
+ static const char kErrorReasonProxyConnectionFailed[];
+ static const char kErrorReasonProxyConfigChanged[];
+ static const char kErrorReasonLoadingTimeout[];
+ static const char kErrorReasonPortalDetected[];
+ // Reason for a case when network manager notifies about network
+ // change.
+ static const char kErrorReasonNetworkChanged[];
+ // Reason for a case when JS side requires error screen update.
+ static const char kErrorReasonUpdate[];
+
ErrorScreenHandler(
const scoped_refptr<NetworkStateInformer>& network_state_informer);
virtual ~ErrorScreenHandler();
void SetNativeWindowDelegate(NativeWindowDelegate* native_window_delegate);
+ void Show();
+
+ void Hide();
+
// NetworkStateInformer::NetworkStateInformerObserver implementation:
virtual void UpdateState(NetworkStateInformer::State state,
const std::string& network_name,
@@ -38,19 +64,89 @@ class ErrorScreenHandler
ConnectionType last_network_type) OVERRIDE;
private:
+ // Shows or hides offline message based on network {on|off}line
+ // state and updates internal state.
+ void UpdateStateInternal(NetworkStateInformer::State state,
+ std::string network,
+ std::string reason,
+ ConnectionType last_network_type,
+ bool force_update);
+
+ // Reloads gaia frame.
+ void ReloadGaiaScreen();
+
+ // Clears error bubble.
+ void ClearOobeErrors();
+
+ void OnBeforeShow(ConnectionType last_network_type);
+ void OnBeforeHide();
+
+ // Fixes captive portal dialog.
+ void FixCaptivePortal();
+
+ // Shows captive portal dialog.
+ void ShowCaptivePortal();
+
+ // Hides captive portal dialog.
+ void HideCaptivePortal();
+
+ // Sends notification that error message is shown.
+ void NetworkErrorShown();
+
+ // Each of the following methods shows corresponsing error message
+ // and updates internal state.
+ void ShowProxyError();
+ void ShowCaptivePortalError(const std::string& network);
+ void ShowOfflineError();
+ void ShowOfflineMessage(bool visible);
+
+ OobeUI::Screen GetCurrentScreen();
+
+ State get_state() { return state_; }
+ void set_state(State state) { state_ = state; }
+
+ bool is_shown() { return is_shown_; }
+ void set_is_shown(bool is_shown) { is_shown_ = is_shown; }
+
+ bool is_first_update_state_call() { return is_first_update_state_call_; }
+ void set_is_first_update_state_call(bool is_first_update_state_call) {
+ is_first_update_state_call_ = is_first_update_state_call;
+ }
+
+ bool gaia_is_local() { return gaia_is_local_; }
+ void set_gaia_is_local(bool gaia_is_local) { gaia_is_local_ = gaia_is_local; }
+
+ NetworkStateInformer::State last_network_state() {
+ return last_network_state_;
+ }
+ void set_last_network_state(NetworkStateInformer::State state) {
+ last_network_state_ = state;
+ }
+
+ // WebUI message handlers.
+ void HandleFixCaptivePortal(const base::ListValue* args);
+ void HandleShowCaptivePortal(const base::ListValue* args);
+ void HandleHideCaptivePortal(const base::ListValue* args);
+ void HandleErrorScreenUpdate(const base::ListValue* args);
+ void HandleUpdateGaiaIsLocal(const base::ListValue* args);
+
+ // WebUIMessageHandler implementation:
+ virtual void RegisterMessages() OVERRIDE;
+
// BaseScreenHandler implementation:
virtual void GetLocalizedStrings(
base::DictionaryValue* localized_strings) OVERRIDE;
virtual void Initialize() OVERRIDE;
virtual gfx::NativeWindow GetNativeWindow() OVERRIDE;
- // WebUIMessageHandler implementation:
- virtual void RegisterMessages() OVERRIDE;
+ bool is_shown_;
+ bool is_first_update_state_call_;
+ State state_;
+ bool gaia_is_local_;
+ NetworkStateInformer::State last_network_state_;
- // WebUI message handlers.
- void HandleFixCaptivePortal(const base::ListValue* args);
- void HandleShowCaptivePortal(const base::ListValue* args);
- void HandleHideCaptivePortal(const base::ListValue* args);
+ base::CancelableClosure update_state_closure_;
+ base::CancelableClosure connecting_closure_;
// Proxy which manages showing of the window for captive portal entering.
scoped_ptr<CaptivePortalWindowProxy> captive_portal_window_proxy_;
diff --git a/chrome/browser/ui/webui/chromeos/login/eula_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/eula_screen_handler.cc
index 3f209f4..d59997a 100644
--- a/chrome/browser/ui/webui/chromeos/login/eula_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/eula_screen_handler.cc
@@ -11,6 +11,7 @@
#include "base/values.h"
#include "chrome/browser/chromeos/login/help_app_launcher.h"
#include "chrome/browser/chromeos/login/webui_login_display.h"
+#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
#include "chrome/common/url_constants.h"
#include "grit/browser_resources.h"
#include "grit/chromium_strings.h"
@@ -18,13 +19,6 @@
#include "ui/base/l10n/l10n_util.h"
#include "ui/views/widget/widget.h"
-namespace {
-
-// Eula screen id.
-const char kEulaScreen[] = "eula";
-
-} // namespace
-
namespace chromeos {
EulaScreenHandler::EulaScreenHandler()
@@ -44,7 +38,7 @@ void EulaScreenHandler::Show() {
show_on_init_ = true;
return;
}
- ShowScreen(kEulaScreen, NULL);
+ ShowScreen(OobeUI::kScreenOobeEula, NULL);
}
void EulaScreenHandler::Hide() {
diff --git a/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc
index e17579a..03b98a8 100644
--- a/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/network_screen_handler.cc
@@ -26,9 +26,6 @@
namespace {
-// Network screen id.
-const char kNetworkScreen[] = "connect";
-
// JS API callbacks names.
const char kJsApiNetworkOnExit[] = "networkOnExit";
const char kJsApiNetworkOnLanguageChanged[] = "networkOnLanguageChanged";
@@ -66,7 +63,7 @@ void NetworkScreenHandler::Show() {
return;
}
- ShowScreen(kNetworkScreen, NULL);
+ ShowScreen(OobeUI::kScreenOobeNetwork, NULL);
}
void NetworkScreenHandler::Hide() {
diff --git a/chrome/browser/ui/webui/chromeos/login/network_state_informer.cc b/chrome/browser/ui/webui/chromeos/login/network_state_informer.cc
index 27df146..237c342 100644
--- a/chrome/browser/ui/webui/chromeos/login/network_state_informer.cc
+++ b/chrome/browser/ui/webui/chromeos/login/network_state_informer.cc
@@ -9,6 +9,7 @@
#include "base/message_loop.h"
#include "chrome/browser/chromeos/cros/cros_library.h"
#include "chrome/browser/chromeos/proxy_config_service_impl.h"
+#include "chrome/browser/ui/webui/chromeos/login/error_screen_handler.h"
#include "chrome/common/chrome_notification_types.h"
#include "net/proxy/proxy_config.h"
@@ -17,10 +18,6 @@ namespace {
// Timeout to smooth temporary network state transitions for flaky networks.
const int kNetworkStateCheckDelayMs = 5000;
-const char kReasonNetworkChanged[] = "network changed";
-const char kReasonProxyChanged[] = "proxy changed";
-const char kReasonPortalDetected[] = "portal detected";
-
} // namespace
namespace chromeos {
@@ -122,13 +119,13 @@ void NetworkStateInformer::Observe(
if (type == chrome::NOTIFICATION_SESSION_STARTED)
registrar_.RemoveAll();
else if (type == chrome::NOTIFICATION_LOGIN_PROXY_CHANGED)
- SendStateToObservers(kReasonProxyChanged);
+ SendStateToObservers(ErrorScreenHandler::kErrorReasonProxyConfigChanged);
else
NOTREACHED() << "Unknown notification: " << type;
}
void NetworkStateInformer::OnPortalDetected() {
- SendStateToObservers(kReasonPortalDetected);
+ SendStateToObservers(ErrorScreenHandler::kErrorReasonPortalDetected);
}
bool NetworkStateInformer::UpdateState(NetworkLibrary* cros) {
@@ -161,7 +158,7 @@ void NetworkStateInformer::UpdateStateAndNotify() {
check_state_.Cancel();
if (UpdateState(CrosLibrary::Get()->GetNetworkLibrary()))
- SendStateToObservers(kReasonNetworkChanged);
+ SendStateToObservers(ErrorScreenHandler::kErrorReasonNetworkChanged);
}
void NetworkStateInformer::SendStateToObservers(const std::string& reason) {
diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
index f092454..2d74fb8 100644
--- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
+++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
@@ -22,7 +22,6 @@
#include "chrome/browser/ui/webui/about_ui.h"
#include "chrome/browser/ui/webui/chrome_url_data_manager.h"
#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h"
-#include "chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h"
#include "chrome/browser/ui/webui/chromeos/login/enterprise_oauth_enrollment_screen_handler.h"
#include "chrome/browser/ui/webui/chromeos/login/error_screen_handler.h"
#include "chrome/browser/ui/webui/chromeos/login/eula_screen_handler.h"
@@ -122,6 +121,16 @@ std::string OobeUIHTMLSource::GetDataResource(int resource_id) const {
// OobeUI ----------------------------------------------------------------------
+// static
+const char OobeUI::kScreenOobeNetwork[] = "connect";
+const char OobeUI::kScreenOobeEula[] = "eula";
+const char OobeUI::kScreenOobeUpdate[] = "update";
+const char OobeUI::kScreenOobeEnrollment[] = "oauth-enrollment";
+const char OobeUI::kScreenGaiaSignin[] = "gaia-signin";
+const char OobeUI::kScreenAccountPicker[] = "account-picker";
+const char OobeUI::kScreenUserImagePicker[] = "user-image";
+const char OobeUI::kScreenTpmError[] = "tpm-error-message";
+
OobeUI::OobeUI(content::WebUI* web_ui)
: WebUIController(web_ui),
update_screen_actor_(NULL),
@@ -130,12 +139,16 @@ OobeUI::OobeUI(content::WebUI* web_ui)
reset_screen_actor_(NULL),
error_screen_handler_(NULL),
signin_screen_handler_(NULL),
- user_image_screen_actor_(NULL) {
+ user_image_screen_actor_(NULL),
+ current_screen_(SCREEN_UNKNOWN) {
+ InitializeScreenMap();
+
network_state_informer_ = new NetworkStateInformer();
network_state_informer_->Init();
core_handler_ = new CoreOobeHandler(this);
AddScreenHandler(core_handler_);
+ core_handler_->SetDelegate(this);
AddScreenHandler(new NetworkDropdownHandler);
@@ -167,14 +180,14 @@ OobeUI::OobeUI(content::WebUI* web_ui)
user_image_screen_actor_ = user_image_screen_handler;
AddScreenHandler(user_image_screen_handler);
- error_screen_handler_ = new ErrorScreenHandler(network_state_informer_);
- AddScreenHandler(error_screen_handler_);
-
signin_screen_handler_ = new SigninScreenHandler(network_state_informer_);
AddScreenHandler(signin_screen_handler_);
network_state_informer_->SetDelegate(signin_screen_handler_);
+ error_screen_handler_ = new ErrorScreenHandler(network_state_informer_);
+ AddScreenHandler(error_screen_handler_);
+
DictionaryValue* localized_strings = new DictionaryValue();
GetLocalizedStrings(localized_strings);
@@ -206,6 +219,7 @@ OobeUI::OobeUI(content::WebUI* web_ui)
}
OobeUI::~OobeUI() {
+ core_handler_->SetDelegate(NULL);
}
void OobeUI::ShowScreen(WizardScreen* screen) {
@@ -286,6 +300,18 @@ void OobeUI::GetLocalizedStrings(base::DictionaryValue* localized_strings) {
localized_strings->SetString("screenType", "lock");
}
+void OobeUI::InitializeScreenMap() {
+ screen_map_.clear();
+ screen_map_[kScreenOobeNetwork] = SCREEN_OOBE_NETWORK;
+ screen_map_[kScreenOobeEula] = SCREEN_OOBE_EULA;
+ screen_map_[kScreenOobeUpdate] = SCREEN_OOBE_UPDATE;
+ screen_map_[kScreenOobeEnrollment] = SCREEN_OOBE_ENROLLMENT;
+ screen_map_[kScreenGaiaSignin] = SCREEN_GAIA_SIGNIN;
+ screen_map_[kScreenAccountPicker] = SCREEN_ACCOUNT_PICKER;
+ screen_map_[kScreenUserImagePicker] = SCREEN_USER_IMAGE_PICKER;
+ screen_map_[kScreenTpmError] = SCREEN_TMP_ERROR;
+}
+
void OobeUI::AddScreenHandler(BaseScreenHandler* handler) {
web_ui()->AddMessageHandler(handler);
handlers_.push_back(handler);
@@ -319,4 +345,9 @@ void OobeUI::ResetSigninScreenHandlerDelegate() {
error_screen_handler_->SetNativeWindowDelegate(NULL);
}
+void OobeUI::OnCurrentScreenChanged(const std::string& screen) {
+ if (screen_map_.count(screen))
+ current_screen_ = screen_map_[screen];
+}
+
} // namespace chromeos
diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.h b/chrome/browser/ui/webui/chromeos/login/oobe_ui.h
index a883c68..a45bb82 100644
--- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.h
+++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.h
@@ -5,11 +5,14 @@
#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_
#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_OOBE_UI_H_
+#include <map>
+#include <string>
#include <vector>
#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
#include "chrome/browser/chromeos/login/oobe_display.h"
+#include "chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h"
#include "content/public/browser/web_ui_controller.h"
namespace base {
@@ -33,8 +36,31 @@ namespace chromeos {
// - eula screen (CrOS (+ OEM) EULA content/TPM password/crash reporting).
// - update screen.
class OobeUI : public OobeDisplay,
- public content::WebUIController {
+ public content::WebUIController,
+ public CoreOobeHandler::Delegate {
public:
+ enum Screen {
+ SCREEN_OOBE_NETWORK = 0,
+ SCREEN_OOBE_EULA,
+ SCREEN_OOBE_UPDATE,
+ SCREEN_OOBE_ENROLLMENT,
+ SCREEN_GAIA_SIGNIN,
+ SCREEN_ACCOUNT_PICKER,
+ SCREEN_USER_IMAGE_PICKER,
+ SCREEN_TMP_ERROR,
+ SCREEN_UNKNOWN
+ };
+
+ // JS oobe/login screens names.
+ static const char kScreenOobeNetwork[];
+ static const char kScreenOobeEula[];
+ static const char kScreenOobeUpdate[];
+ static const char kScreenOobeEnrollment[];
+ static const char kScreenGaiaSignin[];
+ static const char kScreenAccountPicker[];
+ static const char kScreenUserImagePicker[];
+ static const char kScreenTpmError[];
+
explicit OobeUI(content::WebUI* web_ui);
virtual ~OobeUI();
@@ -72,9 +98,17 @@ class OobeUI : public OobeDisplay,
// Resets the delegate set in ShowSigninScreen.
void ResetSigninScreenHandlerDelegate();
+ Screen current_screen() { return current_screen_; }
+
private:
+ // Initializes |screen_map_| structure.
+ void InitializeScreenMap();
+
void AddScreenHandler(BaseScreenHandler* handler);
+ // CoreOobeHandler::Delegate implementation:
+ virtual void OnCurrentScreenChanged(const std::string& screen) OVERRIDE;
+
// Reference to NetworkStateInformer that handles changes in network
// state.
scoped_refptr<NetworkStateInformer> network_state_informer_;
@@ -100,6 +134,12 @@ class OobeUI : public OobeDisplay,
std::vector<BaseScreenHandler*> handlers_; // Non-owning pointers.
+ // Id of the current oobe/login screen.
+ Screen current_screen_;
+
+ // Maps JS screens names to screen id.
+ std::map<std::string, Screen> screen_map_;
+
DISALLOW_COPY_AND_ASSIGN(OobeUI);
};
diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
index 84b34c0..54dcbad 100644
--- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc
@@ -28,6 +28,7 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/chromeos/login/native_window_delegate.h"
#include "chrome/browser/ui/webui/chromeos/login/network_state_informer.h"
+#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
@@ -55,10 +56,6 @@ namespace {
const char kDefaultDomain[] = "@gmail.com";
-// Account picker screen id.
-const char kAccountPickerScreen[] = "account-picker";
-// Sign in screen id for GAIA extension hosted content.
-const char kGaiaSigninScreen[] = "gaia-signin";
// Start page of GAIA authentication extension.
const char kGaiaExtStartPage[] =
"chrome-extension://mfffpogegjflfpflabcdkioaeobkgjik/main.html";
@@ -129,13 +126,11 @@ SigninScreenHandler::SigninScreenHandler(
webui_visible_(false),
login_ui_active_(false) {
DCHECK(network_state_informer_);
- network_state_informer_->AddObserver(this);
CrosSettings::Get()->AddSettingsObserver(kAccountsPrefAllowNewUser, this);
CrosSettings::Get()->AddSettingsObserver(kAccountsPrefAllowGuest, this);
}
SigninScreenHandler::~SigninScreenHandler() {
- DCHECK(network_state_informer_);
weak_factory_.InvalidateWeakPtrs();
if (cookie_remover_)
cookie_remover_->RemoveObserver(this);
@@ -145,7 +140,6 @@ SigninScreenHandler::~SigninScreenHandler() {
key_event_listener->RemoveCapsLockObserver(this);
if (delegate_)
delegate_->SetWebUIHandler(NULL);
- network_state_informer_->RemoveObserver(this);
CrosSettings::Get()->RemoveSettingsObserver(kAccountsPrefAllowNewUser, this);
CrosSettings::Get()->RemoveSettingsObserver(kAccountsPrefAllowGuest, this);
}
@@ -231,7 +225,7 @@ void SigninScreenHandler::Show(bool oobe_ui) {
DictionaryValue params;
params.SetBoolean("disableAddUser", AllWhitelistedUsersPresent());
- ShowScreen(kAccountPickerScreen, &params);
+ ShowScreen(OobeUI::kScreenAccountPicker, &params);
}
}
@@ -254,16 +248,6 @@ void SigninScreenHandler::OnNetworkReady() {
MaybePreloadAuthExtension();
}
-void SigninScreenHandler::UpdateState(NetworkStateInformer::State state,
- const std::string& network_name,
- const std::string& reason,
- ConnectionType last_network_type) {
- for (WebUIObservers::const_iterator it = observers_.begin();
- it != observers_.end(); ++it) {
- SendState(*it, state, network_name, reason, last_network_type);
- }
-}
-
// SigninScreenHandler, private: -----------------------------------------------
void SigninScreenHandler::Initialize() {
@@ -416,7 +400,7 @@ void SigninScreenHandler::OnPreferencesChanged() {
HandleShowAddUser(NULL);
} else {
SendUserList(false);
- ShowScreen(kAccountPickerScreen, NULL);
+ ShowScreen(OobeUI::kScreenAccountPicker, NULL);
}
}
@@ -513,7 +497,7 @@ void SigninScreenHandler::ShowSigninScreenIfReady() {
delegate_->LoadWallpaper(email_);
LoadAuthExtension(!gaia_silent_load_, false, false);
- ShowScreen(kGaiaSigninScreen, NULL);
+ ShowScreen(OobeUI::kScreenGaiaSignin, NULL);
if (gaia_silent_load_) {
// The variable is assigned to false because silently loaded Gaia page was
@@ -658,7 +642,7 @@ void SigninScreenHandler::HandleOfflineLogin(const base::ListValue* args) {
// Load auth extension. Parameters are: force reload, do not load extension in
// background, use offline version.
LoadAuthExtension(true, false, true);
- ShowScreen(kGaiaSigninScreen, NULL);
+ ShowScreen(OobeUI::kScreenGaiaSignin, NULL);
}
void SigninScreenHandler::HandleShutdownSystem(const base::ListValue* args) {
@@ -861,8 +845,6 @@ void SigninScreenHandler::HandleLoginWebuiReady(const base::ListValue* args) {
void SigninScreenHandler::HandleLoginRequestNetworkState(
const base::ListValue* args) {
- DCHECK(network_state_informer_);
-
std::string callback;
std::string reason;
if (!args->GetString(0, &callback) || !args->GetString(1, &reason)) {
diff --git a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h
index dc23e87..63ec313 100644
--- a/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h
+++ b/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h
@@ -126,8 +126,7 @@ class SigninScreenHandler
public BrowsingDataRemover::Observer,
public SystemKeyEventListener::CapsLockObserver,
public content::NotificationObserver,
- public NetworkStateInformerDelegate,
- public NetworkStateInformer::NetworkStateInformerObserver {
+ public NetworkStateInformerDelegate {
public:
SigninScreenHandler(
const scoped_refptr<NetworkStateInformer>& network_state_informer);
@@ -149,12 +148,6 @@ class SigninScreenHandler
// NetworkStateInformerDelegate implementation:
virtual void OnNetworkReady() OVERRIDE;
- // NetworkStateInformer::NetworkStateInformerObserver implementation:
- virtual void UpdateState(NetworkStateInformer::State state,
- const std::string& network_name,
- const std::string& reason,
- ConnectionType last_network_type) OVERRIDE;
-
private:
typedef base::hash_set<std::string> WebUIObservers;
@@ -169,7 +162,7 @@ class SigninScreenHandler
// WebUIMessageHandler implementation:
virtual void RegisterMessages() OVERRIDE;
- // BaseLoginUIHandler implementation.
+ // BaseLoginUIHandler implementation:
virtual void ClearAndEnablePassword() OVERRIDE;
virtual void OnLoginSuccess(const std::string& username) OVERRIDE;
virtual void OnUserRemoved(const std::string& username) OVERRIDE;
@@ -191,7 +184,7 @@ class SigninScreenHandler
// SystemKeyEventListener::CapsLockObserver overrides.
virtual void OnCapsLockChange(bool enabled) OVERRIDE;
- // content::NotificationObserver implementation.
+ // content::NotificationObserver implementation:
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
diff --git a/chrome/browser/ui/webui/chromeos/login/update_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/update_screen_handler.cc
index 6355379..bdece03 100644
--- a/chrome/browser/ui/webui/chromeos/login/update_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/update_screen_handler.cc
@@ -8,18 +8,12 @@
#include "base/bind_helpers.h"
#include "base/memory/scoped_ptr.h"
#include "base/values.h"
+#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
#include "content/public/browser/web_ui.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
-namespace {
-
-// Update screen ID.
-const char kUpdateScreen[] = "update";
-
-} // namespace
-
namespace chromeos {
UpdateScreenHandler::UpdateScreenHandler()
@@ -79,7 +73,7 @@ void UpdateScreenHandler::Show() {
show_on_init_ = true;
return;
}
- ShowScreen(kUpdateScreen, NULL);
+ ShowScreen(OobeUI::kScreenOobeUpdate, NULL);
#if !defined(OFFICIAL_BUILD)
web_ui()->CallJavascriptFunction("oobe.UpdateScreen.enableUpdateCancel");
#endif
diff --git a/chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.cc
index c9906f8..f77f489 100644
--- a/chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/user_image_screen_handler.cc
@@ -14,6 +14,7 @@
#include "chrome/browser/chromeos/login/default_user_images.h"
#include "chrome/browser/chromeos/login/user.h"
#include "chrome/browser/chromeos/login/webui_login_display.h"
+#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
#include "chrome/browser/ui/webui/web_ui_util.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/url_constants.h"
@@ -23,13 +24,6 @@
#include "ui/base/l10n/l10n_util.h"
#include "ui/views/widget/widget.h"
-namespace {
-
-// UserImage screen ID.
-const char kUserImageScreen[] = "user-image";
-
-} // namespace
-
namespace chromeos {
UserImageScreenHandler::UserImageScreenHandler()
@@ -94,7 +88,7 @@ void UserImageScreenHandler::Show() {
return;
}
screen_show_time_ = base::Time::Now();
- ShowScreen(kUserImageScreen, NULL);
+ ShowScreen(OobeUI::kScreenUserImagePicker, NULL);
// When shown, query camera presence.
CheckCameraPresence();
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
index 423bcd8..ea377c4 100644
--- a/chrome/common/chrome_switches.cc
+++ b/chrome/common/chrome_switches.cc
@@ -1416,6 +1416,9 @@ const char kDisableNewOobe[] = "disable-new-oobe";
// Avoid doing animations upon oobe.
const char kDisableOobeAnimation[] = "disable-oobe-animation";
+// Disables fake ethernet network on the login screen.
+const char kDisableStubEthernet[] = "disable-stub-ethernet";
+
// Enables component extension that initializes background pages of
// certain hosted applications.
const char kEnableBackgroundLoader[] = "enable-background-loader";
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
index 9708577..1d31051 100644
--- a/chrome/common/chrome_switches.h
+++ b/chrome/common/chrome_switches.h
@@ -379,16 +379,17 @@ extern const char kAshEnableTabScrubbing[];
#if defined(OS_CHROMEOS)
// Keep switches in alphabetical order.
extern const char kAshWebUIInit[];
-extern const char kEnableCarrierSwitching[];
extern const char kDisableBootAnimation[];
extern const char kDisableChromeCaptivePortalDetector[];
-extern const char kDisableDrive[];
extern const char kDisableDrivePrefetch[];
+extern const char kDisableDrive[];
extern const char kDisableFactoryReset[];
extern const char kDisableLoginAnimations[];
extern const char kDisableNewOobe[];
extern const char kDisableOobeAnimation[];
+extern const char kDisableStubEthernet[];
extern const char kEnableBackgroundLoader[];
+extern const char kEnableCarrierSwitching[];
extern const char kEnableChromeCaptivePortalDetector[];
extern const char kEnableTouchpadThreeFingerClick[];
extern const char kEnableTouchpadThreeFingerSwipe[];