Commit 789657c4 authored by Denis Kuznetsov's avatar Denis Kuznetsov Committed by Commit Bot

[USB Enrollment] Add option to use any connected network.

TBR: alemate@chromium.org
Bug: 854101
Change-Id: I0119223034d6399dfd6fd50d3fb0e4821c356f65
Reviewed-on: https://chromium-review.googlesource.com/c/1243195
Commit-Queue: Denis Kuznetsov <antrim@chromium.org>
Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Reviewed-by: default avatarSergey Poromov <poromov@chromium.org>
Reviewed-by: default avatarAlexander Hendrich <hendrich@chromium.org>
Cr-Commit-Position: refs/heads/master@{#611671}
parent 203f1e52
......@@ -44,6 +44,10 @@ const char kNetworkSelectGUID[] = "networkSelectGuid";
// selected.
const char kNetworkOfflineDemo[] = "networkOfflineDemo";
// Boolean value specifying that the first connected network would be
// selected automatically.
const char kNetworkUseConnected[] = "networkUseConnected";
// == EULA screen:
// Boolean value indicating if device should send usage statistics.
......@@ -106,6 +110,8 @@ constexpr struct {
{kInputMethod, ValueType::STRING, ConfigurationHandlerSide::HANDLER_JS},
{kNetworkSelectGUID, ValueType::STRING,
ConfigurationHandlerSide::HANDLER_JS},
{kNetworkUseConnected, ValueType::BOOLEAN,
ConfigurationHandlerSide::HANDLER_JS},
{kEULASendUsageStatistics, ValueType::BOOLEAN,
ConfigurationHandlerSide::HANDLER_JS},
{kEULAAutoAccept, ValueType::BOOLEAN, ConfigurationHandlerSide::HANDLER_JS},
......
......@@ -21,6 +21,7 @@ extern const char kDemoModePreferencesNext[];
extern const char kNetworkSelectGUID[];
extern const char kNetworkOfflineDemo[];
extern const char kNetworkUseConnected[];
extern const char kDeviceRequisition[];
......
......@@ -598,6 +598,8 @@ class EnterpriseEnrollmentConfigurationTest
// WebUI exists now, finish the setup.
InitializeWebContents();
base::RunLoop().RunUntilIdle();
}
void SimulateOfflineEnvironment() {
......@@ -1045,6 +1047,25 @@ IN_PROC_BROWSER_TEST_F(EnterpriseEnrollmentConfigurationTest,
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_EULA).Wait();
}
// Check that configuration would proceed if there is a connected network.
IN_PROC_BROWSER_TEST_F(EnterpriseEnrollmentConfigurationTest,
TestSelectConnectedNetwork) {
StartWizard();
LoadConfiguration();
OobeScreenWaiter(OobeScreen::SCREEN_OOBE_EULA).Wait();
}
// Check that configuration would not proceed with connected network if
// welcome screen is not automated.
IN_PROC_BROWSER_TEST_F(EnterpriseEnrollmentConfigurationTest,
TestConnectedNetworkNoWelcome) {
StartWizard();
LoadConfiguration();
OobeUI* oobe_ui = LoginDisplayHost::default_host()->GetOobeUI();
ASSERT_EQ(OobeScreen::SCREEN_OOBE_WELCOME, oobe_ui->current_screen());
}
// Check that when configuration has ONC and EULA, we get to update screen.
IN_PROC_BROWSER_TEST_F(EnterpriseEnrollmentConfigurationTest, TestAcceptEula) {
UpdateEngineClient::Status status;
......
......@@ -55,6 +55,12 @@ Polymer({
*/
configuration_applied_: false,
/**
* Flag that reflects if this element is currently shown.
* @private {boolean}
*/
is_shown_: false,
/** Refreshes the list of the networks. */
refresh: function() {
this.$.networkSelect.refreshNetworks();
......@@ -65,7 +71,20 @@ Polymer({
this.$.networkSelect.focus();
},
/** Call after strings are loaded to set CrOncStrings for cr-network-select */
/** Called when dialog is shown. */
onBeforeShow: function() {
this.is_shown_ = true;
this.attemptApplyConfiguration_();
},
/** Called when dialog is hidden. */
onBeforeHide: function() {
this.is_shown_ = false;
},
/**
* Call after strings are loaded to set CrOncStrings for cr-network-select.
*/
setCrOncStrings: function() {
CrOncStrings = {
OncTypeCellular: loadTimeData.getString('OncTypeCellular'),
......@@ -184,6 +203,9 @@ Polymer({
var state = event.detail;
this.isConnected =
state && state.ConnectionState == CrOnc.ConnectionState.CONNECTED;
if (!this.isConnected || !this.is_shown_)
return;
this.attemptApplyConfiguration_();
},
/**
......@@ -205,25 +227,44 @@ Polymer({
* @private
*/
onNetworkListChanged_: function(event) {
if (!this.is_shown_)
return;
this.attemptApplyConfiguration_();
},
/**
* Tries to apply OOBE configuration on current list of networks.
* @private
*/
attemptApplyConfiguration_: function() {
if (this.configuration_applied_)
return;
var networks = event.detail;
var configuration = Oobe.getInstance().getOobeConfiguration();
if (!configuration)
return;
if (configuration.networkOfflineDemo && this.isOfflineDemoModeSetup) {
window.setTimeout(this.onOfflineDemoSetupClicked_.bind(this), 0);
this.configuration_applied_ = true;
return;
}
var defaultNetwork = this.$.networkSelect.getDefaultNetwork();
if (configuration.networkUseConnected && defaultNetwork) {
if (defaultNetwork.ConnectionState == CrOnc.ConnectionState.CONNECTED) {
window.setTimeout(
this.handleNetworkSelection_.bind(this, defaultNetwork), 0);
this.configuration_applied_ = true;
return;
}
}
if (configuration.networkSelectGuid) {
var network =
networks.find(state => state.GUID == configuration.networkSelectGuid);
this.$.networkSelect.getNetwork(configuration.networkSelectGuid);
if (network) {
window.setTimeout(this.handleNetworkSelection_.bind(this, network), 0);
this.configuration_applied_ = true;
return;
}
}
if (configuration.networkOfflineDemo && this.isOfflineDemoModeSetup) {
window.setTimeout(this.onOfflineDemoSetupClicked_.bind(this), 0);
this.configuration_applied_ = true;
}
},
/**
......
......@@ -46,6 +46,24 @@ Polymer({
},
/** Called when dialog is shown. */
onBeforeShow: function() {
this.behaviors.forEach((behavior) => {
if (behavior.onBeforeShow)
behavior.onBeforeShow.call(this);
});
this.$.networkSelectLogin.onBeforeShow();
},
/** Called when dialog is hidden. */
onBeforeHide: function() {
this.behaviors.forEach((behavior) => {
if (behavior.onBeforeHide)
behavior.onBeforeHide.call(this);
});
this.$.networkSelectLogin.onBeforeHide();
},
/** @override */
ready: function() {
this.updateLocalizedContent();
......
......@@ -78,6 +78,7 @@ OobeTypes.TimezoneDsc;
* networkOfflineDemo: boolean|undefined,
* eulaAutoAccept: boolean|undefined,
* eulaSendStatistics: boolean|undefined,
* networkUseConnected: boolean|undefined,
* updateSkipNonCritical: boolean|undefined,
* arcTosAutoAccept: boolean|undefined,
* }}
......
{
"networkUseConnected": true
}
\ No newline at end of file
{
"welcomeNext": true,
"networkUseConnected": true
}
\ No newline at end of file
......@@ -132,6 +132,41 @@ Polymer({
this.getDeviceStatesCallback_.bind(this));
},
/**
* Returns default network if it is present.
* @return {!CrOnc.NetworkStateProperties|undefined}
*/
getDefaultNetwork: function() {
var defaultNetwork;
for (var i = 0; i < this.networkStateList_.length; ++i) {
var state = this.networkStateList_[i];
if (state.ConnectionState == CrOnc.ConnectionState.CONNECTED) {
defaultNetwork = state;
break;
}
if (state.ConnectionState == CrOnc.ConnectionState.CONNECTING &&
!defaultNetwork) {
defaultNetwork = state;
// Do not break here in case a non WiFi network is connecting but a
// WiFi network is connected.
} else if (state.Type == CrOnc.Type.WI_FI) {
break; // Non connecting or connected WiFI networks are always last.
}
}
return defaultNetwork;
},
/**
* Returns network with specified GUID if it is available.
* @param {string} guid of network.
* @return {!CrOnc.NetworkStateProperties|undefined}
*/
getNetwork: function(guid) {
return this.networkStateList_.find(function(network) {
return network.GUID == guid;
});
},
/**
* @param {!Array<!CrOnc.DeviceStateProperties>} deviceStates
* @private
......@@ -161,22 +196,8 @@ Polymer({
this.networkStateList_ = networkStates;
this.fire('network-list-changed', networkStates);
var defaultNetwork;
for (var i = 0; i < networkStates.length; ++i) {
var state = networkStates[i];
if (state.ConnectionState == CrOnc.ConnectionState.CONNECTED) {
defaultNetwork = state;
break;
}
if (state.ConnectionState == CrOnc.ConnectionState.CONNECTING &&
!defaultNetwork) {
defaultNetwork = state;
// Do not break here in case a non WiFi network is connecting but a
// WiFi network is connected.
} else if (state.Type == CrOnc.Type.WI_FI) {
break; // Non connecting or connected WiFI networks are always last.
}
}
var defaultNetwork = this.getDefaultNetwork();
if ((!defaultNetwork && !this.defaultNetworkState_) ||
(defaultNetwork && this.defaultNetworkState_ &&
defaultNetwork.GUID == this.defaultNetworkState_.GUID &&
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment