Commit 0fe2f506 authored by Steven Bennetts's avatar Steven Bennetts Committed by Commit Bot

Add CrosNetworkConfig.ConfigureNetwork and use mojo in network_config.js

This CL:
* Converts network_config.js to use the cros_network_config mojo API.
* Converts network configuration components to use the mojo API.
* Converts all network config elements to use mojo policy behaviors
  and indicators. (Non mojo policy behaviors and indicators are no
  longer in use and will be removed in a follow-up).
* Moves requesting of ManagedProperties and GlobalPolicy to
  network_config.js (instead of being passed by dialog wrappers).
* Wraps the <internet-dialog> instance in internet_page.html with a
  dom-if template to avoid unnecessary mojo calls and avoid reuse edge
  cases.
* Adds mojo bindings to internet_config_dialog.cc
* Eliminates CrPolicyNetworkBehaviorTest which fails now that
  internet_page.html no longer pulls in the behavior. A follow-up will
  remove the behavior entirely.

Bug: 1001598
Change-Id: I93167de671b04b1bb9b8171975b76f89d1c0492a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1803724
Commit-Queue: Steven Bennetts <stevenjb@chromium.org>
Auto-Submit: Steven Bennetts <stevenjb@chromium.org>
Reviewed-by: default avatarKyle Horimoto <khorimoto@chromium.org>
Cr-Commit-Position: refs/heads/master@{#698601}
parent aec1fa66
...@@ -32,7 +32,6 @@ ...@@ -32,7 +32,6 @@
#include "chrome/browser/ui/ash/login_screen_client.h" #include "chrome/browser/ui/ash/login_screen_client.h"
#include "chrome/browser/ui/ash/system_tray_client.h" #include "chrome/browser/ui/ash/system_tray_client.h"
#include "chrome/browser/ui/autofill/chrome_autofill_client.h" #include "chrome/browser/ui/autofill/chrome_autofill_client.h"
#include "chrome/browser/ui/webui/chromeos/internet_detail_dialog.h"
#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
#include "chromeos/dbus/session_manager/session_manager_client.h" #include "chromeos/dbus/session_manager/session_manager_client.h"
#include "chromeos/network/network_state.h" #include "chromeos/network/network_state.h"
......
...@@ -27,7 +27,7 @@ js_library("internet_config_dialog") { ...@@ -27,7 +27,7 @@ js_library("internet_config_dialog") {
"//ui/webui/resources/cr_components/chromeos/network:network_config", "//ui/webui/resources/cr_components/chromeos/network:network_config",
"//ui/webui/resources/cr_elements/chromeos/network:cr_onc_types", "//ui/webui/resources/cr_elements/chromeos/network:cr_onc_types",
"//ui/webui/resources/cr_elements/cr_dialog:cr_dialog", "//ui/webui/resources/cr_elements/cr_dialog:cr_dialog",
"//ui/webui/resources/cr_elements/policy:cr_policy_network_behavior", "//ui/webui/resources/cr_elements/policy:cr_policy_network_behavior_mojo",
"//ui/webui/resources/js:assert", "//ui/webui/resources/js:assert",
"//ui/webui/resources/js:i18n_behavior", "//ui/webui/resources/js:i18n_behavior",
] ]
......
...@@ -49,12 +49,11 @@ ...@@ -49,12 +49,11 @@
</style> </style>
<cr-dialog id="dialog" no-cancel> <cr-dialog id="dialog" no-cancel>
<div slot="title">[[getDialogTitle_(managedProperties_)]]</div> <div slot="title">[[getDialogTitle_(type)]]</div>
<div slot="body"> <div slot="body">
<network-config id="networkConfig" class="flex" <network-config id="networkConfig" class="flex"
networking-private="[[networkingPrivate]]" networking-private="[[networkingPrivate]]"
global-policy="[[globalPolicy_]]" guid="[[guid_]]" type="{{type_}}"
managed-properties="{{managedProperties_}}"
enable-connect="{{enableConnect_}}" enable-connect="{{enableConnect_}}"
share-allow-enable="[[shareAllowEnable_]]" share-allow-enable="[[shareAllowEnable_]]"
share-default="[[shareDefault_]]" share-default="[[shareDefault_]]"
......
...@@ -23,9 +23,6 @@ Polymer({ ...@@ -23,9 +23,6 @@ Polymer({
value: chrome.networkingPrivate, value: chrome.networkingPrivate,
}, },
/** @private {!chrome.networkingPrivate.GlobalPolicy|undefined} */
globalPolicy_: Object,
/** @private */ /** @private */
shareAllowEnable_: { shareAllowEnable_: {
type: Boolean, type: Boolean,
...@@ -48,16 +45,15 @@ Polymer({ ...@@ -48,16 +45,15 @@ Polymer({
*/ */
guid_: String, guid_: String,
/** @private */
enableConnect_: Boolean,
/** /**
* The current properties if an existing network is being configured, or * The type of network to be configured as a string. May be set initially or
* a minimal subset for a new network. Note: network-config may modify * updated by network-config.
* this (specifically .name). * @private
* @type {!chrome.networkingPrivate.ManagedProperties}
*/ */
managedProperties_: Object, type_: String,
/** @private */
enableConnect_: Boolean,
/** /**
* Set by network-config when a configuration error occurs. * Set by network-config when a configuration error occurs.
...@@ -72,31 +68,20 @@ Polymer({ ...@@ -72,31 +68,20 @@ Polymer({
/** @override */ /** @override */
attached: function() { attached: function() {
var dialogArgs = chrome.getVariableValue('dialogArguments'); var dialogArgs = chrome.getVariableValue('dialogArguments');
var type;
if (dialogArgs) { if (dialogArgs) {
var args = JSON.parse(dialogArgs); var args = JSON.parse(dialogArgs);
type = args.type; this.type_ = args.type;
assert(type); assert(this.type_);
this.guid_ = args.guid || ''; this.guid_ = args.guid || '';
} else { } else {
// For debugging // For debugging
var params = new URLSearchParams(document.location.search.substring(1)); var params = new URLSearchParams(document.location.search.substring(1));
type = params.get('type') || 'WiFi'; this.type_ = params.get('type') || 'WiFi';
this.guid_ = params.get('guid') || ''; this.guid_ = params.get('guid') || '';
} }
this.managedProperties_ = {
GUID: this.guid_,
Name: {Active: ''},
Type: /** @type {chrome.networkingPrivate.NetworkType} */ (type),
};
this.$.networkConfig.init(); this.$.networkConfig.init();
this.networkingPrivate.getGlobalPolicy(policy => {
this.globalPolicy_ = policy;
});
/** @type {!CrDialogElement} */ (this.$.dialog).showModal(); /** @type {!CrDialogElement} */ (this.$.dialog).showModal();
}, },
...@@ -110,7 +95,7 @@ Polymer({ ...@@ -110,7 +95,7 @@ Polymer({
* @private * @private
*/ */
getDialogTitle_: function() { getDialogTitle_: function() {
var type = this.i18n('OncType' + this.managedProperties_.Type); var type = this.i18n('OncType' + this.type_);
return this.i18n('internetJoinType', type); return this.i18n('internetJoinType', type);
}, },
......
...@@ -23,13 +23,12 @@ ...@@ -23,13 +23,12 @@
<cr-dialog id="dialog" close-text="$i18n{close}"> <cr-dialog id="dialog" close-text="$i18n{close}">
<div slot="title"> <div slot="title">
[[getDialogTitle_(managedProperties_, showConnect)]] [[getDialogTitle_(name, type, showConnect)]]
</div> </div>
<div slot="body"> <div slot="body">
<network-config id="networkConfig" class="flex" <network-config id="networkConfig" class="flex"
networking-private="[[networkingPrivate]]" networking-private="[[networkingPrivate]]"
global-policy="[[globalPolicy]]" guid="[[guid]]" name="{{name}}" type="{{type}}"
managed-properties="{{managedProperties_}}"
enable-connect="{{enableConnect_}}" enable-save="{{enableSave_}}" enable-connect="{{enableConnect_}}" enable-save="{{enableSave_}}"
share-allow-enable="[[shareAllowEnable_]]" share-allow-enable="[[shareAllowEnable_]]"
share-default="[[shareDefault_]]" share-default="[[shareDefault_]]"
......
...@@ -18,9 +18,6 @@ Polymer({ ...@@ -18,9 +18,6 @@ Polymer({
*/ */
networkingPrivate: Object, networkingPrivate: Object,
/** @type {!chrome.networkingPrivate.GlobalPolicy|undefined} */
globalPolicy: Object,
/** @private */ /** @private */
shareAllowEnable_: { shareAllowEnable_: {
type: Boolean, type: Boolean,
...@@ -44,13 +41,14 @@ Polymer({ ...@@ -44,13 +41,14 @@ Polymer({
guid: String, guid: String,
/** /**
* The type of network to be configured. * The type of network to be configured as a string. May be set initially or
* @type {!chrome.networkingPrivate.NetworkType} * updated by network-config.
*/ */
type: String, type: String,
/** /**
* The name of network (for display while the network details are fetched). * The name of the network. May be set initially or updated by
* network-config.
*/ */
name: String, name: String,
...@@ -65,14 +63,6 @@ Polymer({ ...@@ -65,14 +63,6 @@ Polymer({
/** @private */ /** @private */
enableSave_: Boolean, enableSave_: Boolean,
/**
* The current properties if an existing network is being configured, or
* a minimal subset for a new network. Note: network-config may modify
* this (specifically .name).
* @private {!chrome.networkingPrivate.ManagedProperties}
*/
managedProperties_: Object,
/** /**
* Set by network-config when a configuration error occurs. * Set by network-config when a configuration error occurs.
* @private * @private
...@@ -89,14 +79,6 @@ Polymer({ ...@@ -89,14 +79,6 @@ Polymer({
dialog.showModal(); dialog.showModal();
} }
// Set managedProperties for new configurations and for existing
// configurations until the current properties are loaded.
assert(this.type && this.type != CrOnc.Type.ALL);
this.managedProperties_ = {
GUID: this.guid,
Name: {Active: this.name},
Type: this.type,
};
this.$.networkConfig.init(); this.$.networkConfig.init();
}, },
...@@ -113,7 +95,6 @@ Polymer({ ...@@ -113,7 +95,6 @@ Polymer({
*/ */
onClose_: function(event) { onClose_: function(event) {
this.close(); this.close();
event.stopPropagation();
}, },
/** /**
...@@ -121,18 +102,10 @@ Polymer({ ...@@ -121,18 +102,10 @@ Polymer({
* @private * @private
*/ */
getDialogTitle_: function() { getDialogTitle_: function() {
// If no properties are available yet, wait until they are set as part of if (this.name && !this.showConnect) {
// open(). return this.i18n('internetConfigName', HTMLEscape(this.name));
if (!this.managedProperties_) {
return '';
}
const name = /** @type {string} */ (
CrOnc.getActiveValue(this.managedProperties_.Name));
if (name && !this.showConnect) {
return this.i18n('internetConfigName', HTMLEscape(name));
} }
const type = this.i18n('OncType' + this.managedProperties_.Type); const type = this.i18n('OncType' + this.type);
return this.i18n('internetJoinType', type); return this.i18n('internetJoinType', type);
}, },
......
...@@ -126,10 +126,12 @@ ...@@ -126,10 +126,12 @@
</settings-animated-pages> </settings-animated-pages>
<template is="dom-if" if="[[showInternetConfig_]]" restamp>
<internet-config id="configDialog" <internet-config id="configDialog"
networking-private="[[networkingPrivate]]" networking-private="[[networkingPrivate]]"
global-policy="[[globalPolicy_]]"> on-close="onInternetConfigClose_">
</internet-config> </internet-config>
</template>
</template> </template>
<script src="internet_page.js"></script> <script src="internet_page.js"></script>
......
...@@ -111,6 +111,12 @@ Polymer({ ...@@ -111,6 +111,12 @@ Polymer({
} }
}, },
/** @private {boolean} */
showInternetConfig_: {
type: Boolean,
value: false,
},
/** @private {!Map<string, Element>} */ /** @private {!Map<string, Element>} */
focusConfig_: { focusConfig_: {
type: Object, type: Object,
...@@ -273,15 +279,26 @@ Polymer({ ...@@ -273,15 +279,26 @@ Polymer({
assert( assert(
type != chromeos.networkConfig.mojom.NetworkType.kCellular && type != chromeos.networkConfig.mojom.NetworkType.kCellular &&
type != chromeos.networkConfig.mojom.NetworkType.kTether); type != chromeos.networkConfig.mojom.NetworkType.kTether);
if (this.showInternetConfig_) {
return;
}
this.showInternetConfig_ = true;
// Async call to ensure dialog is stamped.
setTimeout(() => {
const configDialog = const configDialog =
/** @type {!InternetConfigElement} */ (this.$.configDialog); /** @type {!InternetConfigElement} */ (this.$$('#configDialog'));
// TODO(stevenjb): Update configDialog to use mojom.NetworkType. assert(!!configDialog);
configDialog.type = /** @type{!chrome.networkingPrivate.NetworkType}*/ ( configDialog.type = OncMojo.getNetworkTypeString(type);
OncMojo.getNetworkTypeString(type));
configDialog.guid = opt_guid || ''; configDialog.guid = opt_guid || '';
configDialog.name = opt_name || ''; configDialog.name = opt_name || '';
configDialog.showConnect = configAndConnect; configDialog.showConnect = configAndConnect;
configDialog.open(); configDialog.open();
});
},
/** @private */
onInternetConfigClose_: function() {
this.showInternetConfig_ = false;
}, },
/** /**
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "chrome/browser/ui/webui/chromeos/internet_config_dialog.h" #include "chrome/browser/ui/webui/chromeos/internet_config_dialog.h"
#include "ash/public/cpp/network_config_service.h"
#include "base/json/json_writer.h" #include "base/json/json_writer.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.h" #include "chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.h"
...@@ -136,7 +137,7 @@ std::string InternetConfigDialog::GetDialogArgs() const { ...@@ -136,7 +137,7 @@ std::string InternetConfigDialog::GetDialogArgs() const {
// InternetConfigDialogUI // InternetConfigDialogUI
InternetConfigDialogUI::InternetConfigDialogUI(content::WebUI* web_ui) InternetConfigDialogUI::InternetConfigDialogUI(content::WebUI* web_ui)
: ui::WebDialogUI(web_ui) { : ui::MojoWebDialogUI(web_ui) {
content::WebUIDataSource* source = content::WebUIDataSource::Create( content::WebUIDataSource* source = content::WebUIDataSource::Create(
chrome::kChromeUIInternetConfigDialogHost); chrome::kChromeUIInternetConfigDialogHost);
...@@ -153,8 +154,17 @@ InternetConfigDialogUI::InternetConfigDialogUI(content::WebUI* web_ui) ...@@ -153,8 +154,17 @@ InternetConfigDialogUI::InternetConfigDialogUI(content::WebUI* web_ui)
#endif #endif
content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source); content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source);
// Add Mojo bindings to this WebUI so that Mojo calls can occur in JavaScript.
AddHandlerToRegistry(base::BindRepeating(
&InternetConfigDialogUI::BindCrosNetworkConfig, base::Unretained(this)));
} }
InternetConfigDialogUI::~InternetConfigDialogUI() {} InternetConfigDialogUI::~InternetConfigDialogUI() {}
void InternetConfigDialogUI::BindCrosNetworkConfig(
chromeos::network_config::mojom::CrosNetworkConfigRequest request) {
ash::GetNetworkConfigService(std::move(request));
}
} // namespace chromeos } // namespace chromeos
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
#include <string> #include <string>
#include "base/macros.h" #include "base/macros.h"
#include "base/strings/string16.h"
#include "chrome/browser/ui/webui/chromeos/system_web_dialog_delegate.h" #include "chrome/browser/ui/webui/chromeos/system_web_dialog_delegate.h"
#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h" // nogncheck
#include "ui/web_dialogs/web_dialog_ui.h" #include "ui/web_dialogs/web_dialog_ui.h"
namespace chromeos { namespace chromeos {
...@@ -49,12 +49,15 @@ class InternetConfigDialog : public SystemWebDialogDelegate { ...@@ -49,12 +49,15 @@ class InternetConfigDialog : public SystemWebDialogDelegate {
// A WebUI to host the network configuration UI in a dialog, used in the // A WebUI to host the network configuration UI in a dialog, used in the
// login screen and when a new network is configured from the system tray. // login screen and when a new network is configured from the system tray.
class InternetConfigDialogUI : public ui::WebDialogUI { class InternetConfigDialogUI : public ui::MojoWebDialogUI {
public: public:
explicit InternetConfigDialogUI(content::WebUI* web_ui); explicit InternetConfigDialogUI(content::WebUI* web_ui);
~InternetConfigDialogUI() override; ~InternetConfigDialogUI() override;
private: private:
void BindCrosNetworkConfig(
chromeos::network_config::mojom::CrosNetworkConfigRequest request);
DISALLOW_COPY_AND_ASSIGN(InternetConfigDialogUI); DISALLOW_COPY_AND_ASSIGN(InternetConfigDialogUI);
}; };
......
...@@ -96,6 +96,7 @@ CrComponentsNetworkConfigTest.prototype = { ...@@ -96,6 +96,7 @@ CrComponentsNetworkConfigTest.prototype = {
'../fake_chrome_event.js', '../fake_chrome_event.js',
'../chromeos/networking_private_constants.js', '../chromeos/networking_private_constants.js',
'../chromeos/fake_networking_private.js', '../chromeos/fake_networking_private.js',
'../chromeos/fake_network_config_mojom.js',
'../chromeos/cr_onc_strings.js', '../chromeos/cr_onc_strings.js',
'network_config_test.js', 'network_config_test.js',
]), ]),
......
...@@ -8,17 +8,34 @@ suite('network-config', function() { ...@@ -8,17 +8,34 @@ suite('network-config', function() {
/** @type {NetworkingPrivate} */ /** @type {NetworkingPrivate} */
var api_; var api_;
/** @type {?chromeos.networkConfig.mojom.CrosNetworkConfigRemote} */
let mojoApi_ = null;
suiteSetup(function() { suiteSetup(function() {
api_ = new chrome.FakeNetworkingPrivate(); api_ = new chrome.FakeNetworkingPrivate(); // For certificates
mojoApi_ = new FakeNetworkConfig();
network_config.MojoInterfaceProviderImpl.getInstance().remote_ = mojoApi_;
CrOncTest.overrideCrOncStrings(); CrOncTest.overrideCrOncStrings();
}); });
function setNetworkConfig(properties) { function setNetworkConfig(properties) {
assert(properties.guid);
mojoApi_.setManagedPropertiesForTest(properties);
PolymerTest.clearBody();
networkConfig = document.createElement('network-config');
networkConfig.networkingPrivate = api_;
networkConfig.guid = properties.guid;
networkConfig.managedProperties = properties;
}
function setNetworkType(type, security) {
PolymerTest.clearBody(); PolymerTest.clearBody();
networkConfig = document.createElement('network-config'); networkConfig = document.createElement('network-config');
networkConfig.networkingPrivate = api_; networkConfig.networkingPrivate = api_;
networkConfig.managedProperties = networkConfig.type = OncMojo.getNetworkTypeString(type);
CrOncTest.convertToManagedProperties(properties); if (security !== undefined) {
networkConfig.securityType = security;
}
} }
function initNetworkConfig() { function initNetworkConfig() {
...@@ -36,8 +53,8 @@ suite('network-config', function() { ...@@ -36,8 +53,8 @@ suite('network-config', function() {
suite('New WiFi Config', function() { suite('New WiFi Config', function() {
setup(function() { setup(function() {
api_.resetForTest(); mojoApi_.resetForTest();
setNetworkConfig({GUID: '', Name: '', Type: 'WiFi'}); setNetworkType(chromeos.networkConfig.mojom.NetworkType.kWiFi);
initNetworkConfig(); initNetworkConfig();
}); });
...@@ -55,16 +72,13 @@ suite('network-config', function() { ...@@ -55,16 +72,13 @@ suite('network-config', function() {
suite('Existing WiFi Config', function() { suite('Existing WiFi Config', function() {
setup(function() { setup(function() {
api_.resetForTest(); mojoApi_.resetForTest();
var network = { const wifi1 = OncMojo.getDefaultManagedProperties(
GUID: 'someguid', chromeos.networkConfig.mojom.NetworkType.kWiFi, 'someguid', '');
Name: 'somename', wifi1.name = OncMojo.createManagedString('somename');
Source: 'Device', wifi1.source = chromeos.networkConfig.mojom.OncSource.kDevice;
Type: 'WiFi', wifi1.wifi.security = chromeos.networkConfig.mojom.SecurityType.kWepPsk;
WiFi: {SSID: 'somessid', Security: 'None'} setNetworkConfig(wifi1);
};
api_.addNetworksForTest([network]);
setNetworkConfig({GUID: 'someguid', Name: '', Type: 'WiFi'});
initNetworkConfig(); initNetworkConfig();
}); });
...@@ -74,10 +88,9 @@ suite('network-config', function() { ...@@ -74,10 +88,9 @@ suite('network-config', function() {
test('Default', function() { test('Default', function() {
return flushAsync().then(() => { return flushAsync().then(() => {
assertEquals('someguid', networkConfig.managedProperties.GUID); assertEquals('someguid', networkConfig.managedProperties.guid);
assertEquals( assertEquals(
'somename', 'somename', networkConfig.managedProperties.name.activeValue);
CrOnc.getActiveValue(networkConfig.managedProperties.Name));
assertFalse(!!networkConfig.$$('#share')); assertFalse(!!networkConfig.$$('#share'));
assertTrue(!!networkConfig.$$('#ssid')); assertTrue(!!networkConfig.$$('#ssid'));
assertTrue(!!networkConfig.$$('#security')); assertTrue(!!networkConfig.$$('#security'));
...@@ -88,7 +101,7 @@ suite('network-config', function() { ...@@ -88,7 +101,7 @@ suite('network-config', function() {
suite('Share', function() { suite('Share', function() {
setup(function() { setup(function() {
api_.resetForTest(); mojoApi_.resetForTest();
}); });
teardown(function() { teardown(function() {
...@@ -126,8 +139,9 @@ suite('network-config', function() { ...@@ -126,8 +139,9 @@ suite('network-config', function() {
test('New Config: Login or guest', function() { test('New Config: Login or guest', function() {
// Insecure networks are always shared so test a secure config. // Insecure networks are always shared so test a secure config.
setNetworkConfig( setNetworkType(
{GUID: '', Name: '', Type: 'WiFi', WiFi: {Security: 'WEP-PSK'}}); chromeos.networkConfig.mojom.NetworkType.kWiFi,
chromeos.networkConfig.mojom.SecurityType.kWepPsk);
setLoginOrGuest(); setLoginOrGuest();
initNetworkConfig(); initNetworkConfig();
return flushAsync().then(() => { return flushAsync().then(() => {
...@@ -140,8 +154,9 @@ suite('network-config', function() { ...@@ -140,8 +154,9 @@ suite('network-config', function() {
test('New Config: Kiosk', function() { test('New Config: Kiosk', function() {
// Insecure networks are always shared so test a secure config. // Insecure networks are always shared so test a secure config.
setNetworkConfig( setNetworkType(
{GUID: '', Name: '', Type: 'WiFi', WiFi: {Security: 'WEP-PSK'}}); chromeos.networkConfig.mojom.NetworkType.kWiFi,
chromeos.networkConfig.mojom.SecurityType.kWepPsk);
setKiosk(); setKiosk();
initNetworkConfig(); initNetworkConfig();
return flushAsync().then(() => { return flushAsync().then(() => {
...@@ -153,8 +168,7 @@ suite('network-config', function() { ...@@ -153,8 +168,7 @@ suite('network-config', function() {
}); });
test('New Config: Authenticated, Not secure', function() { test('New Config: Authenticated, Not secure', function() {
setNetworkConfig( setNetworkType(chromeos.networkConfig.mojom.NetworkType.kWiFi);
{GUID: '', Name: '', Type: 'WiFi', WiFi: {Security: 'None'}});
setAuthenticated(); setAuthenticated();
initNetworkConfig(); initNetworkConfig();
return flushAsync().then(() => { return flushAsync().then(() => {
...@@ -166,8 +180,9 @@ suite('network-config', function() { ...@@ -166,8 +180,9 @@ suite('network-config', function() {
}); });
test('New Config: Authenticated, Secure', function() { test('New Config: Authenticated, Secure', function() {
setNetworkConfig( setNetworkType(
{GUID: '', Name: '', Type: 'WiFi', WiFi: {Security: 'WEP-PSK'}}); chromeos.networkConfig.mojom.NetworkType.kWiFi,
chromeos.networkConfig.mojom.SecurityType.kWepPsk);
setAuthenticated(); setAuthenticated();
initNetworkConfig(); initNetworkConfig();
return flushAsync().then(() => { return flushAsync().then(() => {
...@@ -180,15 +195,11 @@ suite('network-config', function() { ...@@ -180,15 +195,11 @@ suite('network-config', function() {
// Existing networks hide the shared control in the config UI. // Existing networks hide the shared control in the config UI.
test('Existing Hides Shared', function() { test('Existing Hides Shared', function() {
var network = { const wifi1 = OncMojo.getDefaultManagedProperties(
GUID: 'someguid', chromeos.networkConfig.mojom.NetworkType.kWiFi, 'someguid', '');
Name: 'somename', wifi1.source = chromeos.networkConfig.mojom.OncSource.kUser;
Source: 'User', wifi1.wifi.security = chromeos.networkConfig.mojom.SecurityType.kWepPsk;
Type: 'WiFi', setNetworkConfig(wifi1);
WiFi: {SSID: 'somessid', Security: 'WEP-PSK'}
};
api_.addNetworksForTest([network]);
setNetworkConfig({GUID: 'someguid', Name: '', Type: 'WiFi'});
setAuthenticated(); setAuthenticated();
initNetworkConfig(); initNetworkConfig();
return flushAsync().then(() => { return flushAsync().then(() => {
...@@ -197,51 +208,37 @@ suite('network-config', function() { ...@@ -197,51 +208,37 @@ suite('network-config', function() {
}); });
test('Ethernet', function() { test('Ethernet', function() {
var ethernet = { const eth = OncMojo.getDefaultManagedProperties(
GUID: 'ethernetguid', chromeos.networkConfig.mojom.NetworkType.kEthernet, 'ethernetguid',
Name: 'Ethernet', '');
Type: 'Ethernet', eth.ethernet.authentication = OncMojo.createManagedString('None');
Ethernet: {Authentication: 'None'} setNetworkConfig(eth);
};
api_.addNetworksForTest([ethernet]);
setNetworkConfig({GUID: 'ethernetguid', Name: '', Type: 'Ethernet'});
initNetworkConfig(); initNetworkConfig();
return flushAsync().then(() => { return flushAsync().then(() => {
assertEquals('ethernetguid', networkConfig.guid); assertEquals('ethernetguid', networkConfig.guid);
assertEquals('None', networkConfig.security_); assertEquals(
chromeos.networkConfig.mojom.SecurityType.kNone,
networkConfig.securityType);
let outer = networkConfig.$$('#outer'); let outer = networkConfig.$$('#outer');
assertFalse(!!outer); assertFalse(!!outer);
}); });
}); });
test('Ethernet EAP', function() { test('Ethernet EAP', function() {
var ethernet = { const eth = OncMojo.getDefaultManagedProperties(
GUID: 'ethernetguid', chromeos.networkConfig.mojom.NetworkType.kEthernet, 'eapguid', '');
Name: 'Ethernet', eth.ethernet.authentication = OncMojo.createManagedString('8021x');
Type: 'Ethernet', eth.ethernet.eap = {outer: OncMojo.createManagedString('PEAP')};
Ethernet: {Authentication: 'None'} setNetworkConfig(eth);
};
var ethernetEap = {
GUID: 'eapguid',
Name: 'EthernetEap',
Type: 'Ethernet',
Ethernet: {
Authentication: '8021X',
EAP: {Outer: 'PEAP'},
}
};
api_.addNetworksForTest([ethernet, ethernetEap]);
setNetworkConfig({GUID: 'ethernetguid', Name: '', Type: 'Ethernet'});
initNetworkConfig(); initNetworkConfig();
return flushAsync().then(() => { return flushAsync().then(() => {
assertEquals('eapguid', networkConfig.guid); assertEquals('eapguid', networkConfig.guid);
assertEquals('WPA-EAP', networkConfig.security_); assertEquals(
chromeos.networkConfig.mojom.SecurityType.kWpaEap,
networkConfig.securityType);
assertEquals( assertEquals(
'PEAP', 'PEAP',
CrOnc.getActiveValue( networkConfig.managedProperties.ethernet.eap.outer.activeValue);
/** @type {chrome.networkingPrivate.ManagedDOMString|undefined} */
(networkConfig.get(
'Ethernet.EAP.Outer', networkConfig.managedProperties))));
let outer = networkConfig.$$('#outer'); let outer = networkConfig.$$('#outer');
assertTrue(!!outer); assertTrue(!!outer);
assertTrue(!outer.disabled); assertTrue(!outer.disabled);
...@@ -250,14 +247,11 @@ suite('network-config', function() { ...@@ -250,14 +247,11 @@ suite('network-config', function() {
}); });
test('WiFi EAP TLS', function() { test('WiFi EAP TLS', function() {
var network = { const wifi1 = OncMojo.getDefaultManagedProperties(
GUID: 'eaptlsguid', chromeos.networkConfig.mojom.NetworkType.kWiFi, 'eaptlsguid', '');
Name: '', wifi1.wifi.security = chromeos.networkConfig.mojom.SecurityType.kWpaEap;
Type: 'WiFi', wifi1.wifi.eap = {outer: OncMojo.createManagedString('EAP-TLS')};
WiFi: {Security: 'WPA-EAP', EAP: {Outer: 'EAP-TLS'}} setNetworkConfig(wifi1);
};
api_.addNetworksForTest([network]);
setNetworkConfig({GUID: 'eaptlsguid', Name: '', Type: 'WiFi'});
setCertificatesForTest(); setCertificatesForTest();
setAuthenticated(); setAuthenticated();
initNetworkConfig(); initNetworkConfig();
...@@ -289,7 +283,5 @@ suite('network-config', function() { ...@@ -289,7 +283,5 @@ suite('network-config', function() {
assertTrue(!!caCert); assertTrue(!!caCert);
}); });
}); });
}); });
}); });
...@@ -279,29 +279,6 @@ TEST_F('CrElementsPolicyPrefIndicatorTest', 'All', function() { ...@@ -279,29 +279,6 @@ TEST_F('CrElementsPolicyPrefIndicatorTest', 'All', function() {
}); });
GEN('#if defined(OS_CHROMEOS)'); GEN('#if defined(OS_CHROMEOS)');
/**
* @constructor
* @extends {CrElementsBrowserTest}
*/
function CrPolicyNetworkBehaviorTest() {}
CrPolicyNetworkBehaviorTest.prototype = {
__proto__: CrElementsBrowserTest.prototype,
/** @override */
browsePreload: 'chrome://settings/internet_page/internet_page.html',
/** @override */
extraLibraries: CrElementsBrowserTest.prototype.extraLibraries.concat([
'cr_policy_strings.js',
'cr_policy_network_behavior_tests.js',
]),
};
TEST_F('CrPolicyNetworkBehaviorTest', 'All', function() {
mocha.run();
});
/** /**
* @constructor * @constructor
* @extends {CrElementsBrowserTest} * @extends {CrElementsBrowserTest}
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/** @fileoverview Suite of tests for CrPolicyIndicatorBehavior. */
suite('CrPolicyNetworkBehavior', function() {
suiteSetup(function() {
Polymer({
is: 'test-behavior',
behaviors: [CrPolicyNetworkBehavior],
});
});
let testBehavior;
setup(function() {
PolymerTest.clearBody();
testBehavior = document.createElement('test-behavior');
document.body.appendChild(testBehavior);
});
test('pod', function() {
let property = 'foo';
assertFalse(testBehavior.isNetworkPolicyControlled(property));
assertFalse(testBehavior.isControlled(property));
assertFalse(testBehavior.isExtensionControlled(property));
assertFalse(testBehavior.isEditable(property));
assertFalse(testBehavior.isNetworkPolicyEnforced(property));
assertFalse(testBehavior.isNetworkPolicyRecommended(property));
});
test('active', function() {
let property = {'Active': 'foo'};
assertFalse(testBehavior.isNetworkPolicyControlled(property));
assertFalse(testBehavior.isControlled(property));
assertFalse(testBehavior.isExtensionControlled(property));
assertFalse(testBehavior.isEditable(property));
assertFalse(testBehavior.isNetworkPolicyEnforced(property));
assertFalse(testBehavior.isNetworkPolicyRecommended(property));
});
test('user_recommended', function() {
let properties = {
'Source': 'UserPolicy',
'a': {
'Effective': 'UserSetting',
'UserEditable': true,
'UserPolicy': 'bar',
'UserSetting': 'foo',
}
};
assertTrue(testBehavior.isNetworkPolicyControlled(properties.a));
assertTrue(testBehavior.isControlled(properties.a));
assertFalse(testBehavior.isExtensionControlled(properties.a));
assertTrue(testBehavior.isEditable(properties.a));
assertFalse(testBehavior.isNetworkPolicyEnforced(properties.a));
assertTrue(testBehavior.isNetworkPolicyRecommended(properties.a));
});
test('device_recommended', function() {
let properties = {
'Source': 'DevicePolicy',
'a': {
'Effective': 'DeviceSetting',
'DeviceEditable': true,
'DevicePolicy': 'bar',
'DeviceSetting': 'foo',
}
};
assertTrue(testBehavior.isNetworkPolicyControlled(properties.a));
assertTrue(testBehavior.isControlled(properties.a));
assertFalse(testBehavior.isExtensionControlled(properties.a));
assertTrue(testBehavior.isEditable(properties.a));
assertFalse(testBehavior.isNetworkPolicyEnforced(properties.a));
assertTrue(testBehavior.isNetworkPolicyRecommended(properties.a));
});
test('user_enforced', function() {
let properties = {
'Source': 'UserPolicy',
'a': {
'Effective': 'UserPolicy',
'UserEditable': false,
'UserPolicy': 'bar',
}
};
assertTrue(testBehavior.isNetworkPolicyControlled(properties.a));
assertTrue(testBehavior.isControlled(properties.a));
assertFalse(testBehavior.isExtensionControlled(properties.a));
assertFalse(testBehavior.isEditable(properties.a));
assertTrue(testBehavior.isNetworkPolicyEnforced(properties.a));
assertFalse(testBehavior.isNetworkPolicyRecommended(properties.a));
});
test('device_enforced', function() {
let properties = {
'Source': 'DevicePolicy',
'a': {
'Effective': 'DevicePolicy',
'DeviceEditable': false,
'DevicePolicy': 'bar',
}
};
assertTrue(testBehavior.isNetworkPolicyControlled(properties.a));
assertTrue(testBehavior.isControlled(properties.a));
assertFalse(testBehavior.isExtensionControlled(properties.a));
assertFalse(testBehavior.isEditable(properties.a));
assertTrue(testBehavior.isNetworkPolicyEnforced(properties.a));
assertFalse(testBehavior.isNetworkPolicyRecommended(properties.a));
});
test('extension_controlled', function() {
let properties = {
'Source': 'UserPolicy',
'a': {
'Active': 'bar',
'Effective': 'ActiveExtension',
'UserEditable': false,
}
};
assertFalse(testBehavior.isNetworkPolicyControlled(properties.a));
assertTrue(testBehavior.isControlled(properties.a));
assertTrue(testBehavior.isExtensionControlled(properties.a));
assertFalse(testBehavior.isEditable(properties.a));
assertFalse(testBehavior.isNetworkPolicyEnforced(properties.a));
assertFalse(testBehavior.isNetworkPolicyRecommended(properties.a));
});
});
...@@ -941,14 +941,14 @@ mojom::ManagedCertificatePatternPtr GetManagedCertificatePattern( ...@@ -941,14 +941,14 @@ mojom::ManagedCertificatePatternPtr GetManagedCertificatePattern(
mojom::ManagedEAPPropertiesPtr GetManagedEAPProperties(const base::Value* dict, mojom::ManagedEAPPropertiesPtr GetManagedEAPProperties(const base::Value* dict,
const char* key) { const char* key) {
auto eap = mojom::ManagedEAPProperties::New();
const base::Value* eap_dict = dict->FindKey(key); const base::Value* eap_dict = dict->FindKey(key);
if (!eap_dict) if (!eap_dict)
return nullptr; return eap;
if (!eap_dict->is_dict()) { if (!eap_dict->is_dict()) {
NET_LOG(ERROR) << "Expected dictionary, found: " << *eap_dict; NET_LOG(ERROR) << "Expected dictionary, found: " << *eap_dict;
return nullptr; return eap;
} }
auto eap = mojom::ManagedEAPProperties::New();
eap->anonymous_identity = eap->anonymous_identity =
GetManagedString(eap_dict, ::onc::eap::kAnonymousIdentity); GetManagedString(eap_dict, ::onc::eap::kAnonymousIdentity);
eap->client_cert_pattern = GetManagedCertificatePattern( eap->client_cert_pattern = GetManagedCertificatePattern(
...@@ -979,14 +979,14 @@ mojom::ManagedEAPPropertiesPtr GetManagedEAPProperties(const base::Value* dict, ...@@ -979,14 +979,14 @@ mojom::ManagedEAPPropertiesPtr GetManagedEAPProperties(const base::Value* dict,
mojom::ManagedIPSecPropertiesPtr GetManagedIPSecProperties( mojom::ManagedIPSecPropertiesPtr GetManagedIPSecProperties(
const base::Value* dict, const base::Value* dict,
const char* key) { const char* key) {
auto ipsec = mojom::ManagedIPSecProperties::New();
const base::Value* ipsec_dict = dict->FindKey(key); const base::Value* ipsec_dict = dict->FindKey(key);
if (!ipsec_dict) if (!ipsec_dict)
return nullptr; return ipsec;
if (!ipsec_dict->is_dict()) { if (!ipsec_dict->is_dict()) {
NET_LOG(ERROR) << "Expected dictionary, found: " << *ipsec_dict; NET_LOG(ERROR) << "Expected dictionary, found: " << *ipsec_dict;
return nullptr; return ipsec;
} }
auto ipsec = mojom::ManagedIPSecProperties::New();
ipsec->authentication_type = ipsec->authentication_type =
GetManagedString(ipsec_dict, ::onc::ipsec::kAuthenticationType); GetManagedString(ipsec_dict, ::onc::ipsec::kAuthenticationType);
ipsec->client_cert_pattern = GetManagedCertificatePattern( ipsec->client_cert_pattern = GetManagedCertificatePattern(
...@@ -1013,14 +1013,14 @@ mojom::ManagedIPSecPropertiesPtr GetManagedIPSecProperties( ...@@ -1013,14 +1013,14 @@ mojom::ManagedIPSecPropertiesPtr GetManagedIPSecProperties(
mojom::ManagedL2TPPropertiesPtr GetManagedL2TPProperties( mojom::ManagedL2TPPropertiesPtr GetManagedL2TPProperties(
const base::Value* dict, const base::Value* dict,
const char* key) { const char* key) {
auto l2tp = mojom::ManagedL2TPProperties::New();
const base::Value* l2tp_dict = dict->FindKey(key); const base::Value* l2tp_dict = dict->FindKey(key);
if (!l2tp_dict) if (!l2tp_dict)
return nullptr; return l2tp;
if (!l2tp_dict->is_dict()) { if (!l2tp_dict->is_dict()) {
NET_LOG(ERROR) << "Expected dictionary, found: " << *l2tp_dict; NET_LOG(ERROR) << "Expected dictionary, found: " << *l2tp_dict;
return nullptr; return l2tp;
} }
auto l2tp = mojom::ManagedL2TPProperties::New();
l2tp->lcp_echo_disabled = l2tp->lcp_echo_disabled =
GetManagedBoolean(l2tp_dict, ::onc::l2tp::kLcpEchoDisabled); GetManagedBoolean(l2tp_dict, ::onc::l2tp::kLcpEchoDisabled);
l2tp->password = GetManagedString(l2tp_dict, ::onc::l2tp::kPassword); l2tp->password = GetManagedString(l2tp_dict, ::onc::l2tp::kPassword);
...@@ -1033,14 +1033,14 @@ mojom::ManagedL2TPPropertiesPtr GetManagedL2TPProperties( ...@@ -1033,14 +1033,14 @@ mojom::ManagedL2TPPropertiesPtr GetManagedL2TPProperties(
mojom::ManagedOpenVPNPropertiesPtr GetManagedOpenVPNProperties( mojom::ManagedOpenVPNPropertiesPtr GetManagedOpenVPNProperties(
const base::Value* dict, const base::Value* dict,
const char* key) { const char* key) {
auto openvpn = mojom::ManagedOpenVPNProperties::New();
const base::Value* openvpn_dict = dict->FindKey(key); const base::Value* openvpn_dict = dict->FindKey(key);
if (!openvpn_dict) if (!openvpn_dict)
return nullptr; return openvpn;
if (!openvpn_dict->is_dict()) { if (!openvpn_dict->is_dict()) {
NET_LOG(ERROR) << "Expected dictionary, found: " << *openvpn_dict; NET_LOG(ERROR) << "Expected dictionary, found: " << *openvpn_dict;
return nullptr; return openvpn;
} }
auto openvpn = mojom::ManagedOpenVPNProperties::New();
openvpn->auth = GetManagedString(openvpn_dict, ::onc::openvpn::kAuth); openvpn->auth = GetManagedString(openvpn_dict, ::onc::openvpn::kAuth);
openvpn->auth_retry = openvpn->auth_retry =
GetManagedString(openvpn_dict, ::onc::openvpn::kAuthRetry); GetManagedString(openvpn_dict, ::onc::openvpn::kAuthRetry);
......
...@@ -50,6 +50,8 @@ js_library("network_choose_mobile") { ...@@ -50,6 +50,8 @@ js_library("network_choose_mobile") {
js_library("network_config") { js_library("network_config") {
deps = [ deps = [
"//chromeos/services/network_config/public/mojom:mojom_js_library_for_compile",
"//ui/webui/resources/cr_components/chromeos/network:mojo_interface_provider",
"//ui/webui/resources/cr_elements/chromeos/network:cr_onc_types", "//ui/webui/resources/cr_elements/chromeos/network:cr_onc_types",
"//ui/webui/resources/js:assert", "//ui/webui/resources/js:assert",
"//ui/webui/resources/js:i18n_behavior", "//ui/webui/resources/js:i18n_behavior",
...@@ -60,14 +62,15 @@ js_library("network_config") { ...@@ -60,14 +62,15 @@ js_library("network_config") {
js_library("network_config_element_behavior") { js_library("network_config_element_behavior") {
deps = [ deps = [
"//ui/webui/resources/cr_elements/chromeos/network:cr_onc_types", "//ui/webui/resources/cr_elements/policy:cr_policy_network_behavior_mojo",
"//ui/webui/resources/js/chromeos:onc_mojo",
] ]
} }
js_library("network_config_input") { js_library("network_config_input") {
deps = [ deps = [
":network_config_element_behavior", ":network_config_element_behavior",
"//ui/webui/resources/cr_elements/policy:cr_policy_network_behavior", "//ui/webui/resources/cr_elements/policy:cr_policy_network_behavior_mojo",
] ]
externs_list = [ "$externs_path/networking_private.js" ] externs_list = [ "$externs_path/networking_private.js" ]
extra_sources = [ "$interfaces_path/networking_private_interface.js" ] extra_sources = [ "$interfaces_path/networking_private_interface.js" ]
...@@ -76,7 +79,7 @@ js_library("network_config_input") { ...@@ -76,7 +79,7 @@ js_library("network_config_input") {
js_library("network_config_select") { js_library("network_config_select") {
deps = [ deps = [
":network_config_element_behavior", ":network_config_element_behavior",
"//ui/webui/resources/cr_elements/policy:cr_policy_network_behavior", "//ui/webui/resources/cr_elements/policy:cr_policy_network_behavior_mojo",
"//ui/webui/resources/js:assert", "//ui/webui/resources/js:assert",
"//ui/webui/resources/js:i18n_behavior", "//ui/webui/resources/js:i18n_behavior",
] ]
...@@ -87,7 +90,7 @@ js_library("network_config_select") { ...@@ -87,7 +90,7 @@ js_library("network_config_select") {
js_library("network_config_toggle") { js_library("network_config_toggle") {
deps = [ deps = [
":network_config_element_behavior", ":network_config_element_behavior",
"//ui/webui/resources/cr_elements/policy:cr_policy_network_behavior", "//ui/webui/resources/cr_elements/policy:cr_policy_network_behavior_mojo",
] ]
externs_list = [ "$externs_path/networking_private.js" ] externs_list = [ "$externs_path/networking_private.js" ]
extra_sources = [ "$interfaces_path/networking_private_interface.js" ] extra_sources = [ "$interfaces_path/networking_private_interface.js" ]
...@@ -113,7 +116,7 @@ js_library("network_nameservers") { ...@@ -113,7 +116,7 @@ js_library("network_nameservers") {
js_library("network_password_input") { js_library("network_password_input") {
deps = [ deps = [
":network_config_element_behavior", ":network_config_element_behavior",
"//ui/webui/resources/cr_elements/policy:cr_policy_network_behavior", "//ui/webui/resources/cr_elements/policy:cr_policy_network_behavior_mojo",
"//ui/webui/resources/js:i18n_behavior", "//ui/webui/resources/js:i18n_behavior",
] ]
externs_list = [ "$externs_path/networking_private.js" ] externs_list = [ "$externs_path/networking_private.js" ]
......
...@@ -17,7 +17,7 @@ const NetworkConfigElementBehavior = { ...@@ -17,7 +17,7 @@ const NetworkConfigElementBehavior = {
/** /**
* Network managed property associated with the config element. * Network managed property associated with the config element.
* @type {?CrOnc.ManagedProperty} * @type {?OncMojo.ManagedProperty}
*/ */
property: { property: {
type: Object, type: Object,
...@@ -27,7 +27,7 @@ const NetworkConfigElementBehavior = { ...@@ -27,7 +27,7 @@ const NetworkConfigElementBehavior = {
/** /**
* @param {boolean} disabled * @param {boolean} disabled
* @param {?CrOnc.ManagedProperty} property * @param {?OncMojo.ManagedProperty} property
* @return {boolean} True if the element should be disabled. * @return {boolean} True if the element should be disabled.
* @private * @private
*/ */
......
<link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="chrome://resources/cr_elements/cr_input/cr_input.html"> <link rel="import" href="chrome://resources/cr_elements/cr_input/cr_input.html">
<link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_network_behavior.html"> <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_network_behavior_mojo.html">
<link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_network_indicator.html"> <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_network_indicator_mojo.html">
<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html"> <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
<link rel="import" href="network_config_element_behavior.html"> <link rel="import" href="network_config_element_behavior.html">
<link rel="import" href="network_shared_css.html"> <link rel="import" href="network_shared_css.html">
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
width: 100%; width: 100%;
} }
cr-policy-network-indicator { cr-policy-network-indicator-mojo {
--cr-tooltip-icon-margin-start: var(--cr-controlled-by-spacing); --cr-tooltip-icon-margin-start: var(--cr-controlled-by-spacing);
} }
</style> </style>
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
disabled="[[getDisabled_(disabled, property)]]" disabled="[[getDisabled_(disabled, property)]]"
on-keypress="onKeypress_"> on-keypress="onKeypress_">
</cr-input> </cr-input>
<cr-policy-network-indicator <cr-policy-network-indicator-mojo
property="[[property]]" tooltip-position="left"> property="[[property]]" tooltip-position="left">
</cr-policy-network-indicator> </cr-policy-network-indicator>
</div> </div>
......
...@@ -8,7 +8,10 @@ ...@@ -8,7 +8,10 @@
Polymer({ Polymer({
is: 'network-config-input', is: 'network-config-input',
behaviors: [CrPolicyNetworkBehavior, NetworkConfigElementBehavior], behaviors: [
CrPolicyNetworkBehaviorMojo,
NetworkConfigElementBehavior,
],
properties: { properties: {
label: String, label: String,
......
<link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_network_behavior.html"> <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_network_behavior_mojo.html">
<link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_network_indicator.html"> <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_network_indicator_mojo.html">
<link rel="import" href="chrome://resources/cr_elements/policy/cr_tooltip_icon.html"> <link rel="import" href="chrome://resources/cr_elements/policy/cr_tooltip_icon.html">
<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html"> <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
<link rel="import" href="chrome://resources/cr_elements/shared_style_css.html"> <link rel="import" href="chrome://resources/cr_elements/shared_style_css.html">
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
flex-direction: row; flex-direction: row;
} }
cr-policy-network-indicator { cr-policy-network-indicator-mojo {
--cr-tooltip-icon-margin-start: var(--cr-controlled-by-spacing); --cr-tooltip-icon-margin-start: var(--cr-controlled-by-spacing);
} }
</style> </style>
...@@ -46,13 +46,13 @@ ...@@ -46,13 +46,13 @@
<template is="dom-repeat" items="[[items]]"> <template is="dom-repeat" items="[[items]]">
<option value="[[getItemValue_(item)]]" <option value="[[getItemValue_(item)]]"
disabled="[[!getItemEnabled_(item, deviceCertsOnly)]]"> disabled="[[!getItemEnabled_(item, deviceCertsOnly)]]">
[[getItemLabel_(item, oncPrefix)]] [[getItemLabel_(item, key, oncPrefix)]]
</option> </option>
</template> </template>
</select> </select>
<cr-policy-network-indicator <cr-policy-network-indicator-mojo
property="[[property]]" tooltip-position="left"> property="[[property]]" tooltip-position="left">
</cr-policy-network-indicator> </cr-policy-network-indicator-mojo>
</div> </div>
</div> </div>
......
...@@ -10,7 +10,7 @@ Polymer({ ...@@ -10,7 +10,7 @@ Polymer({
behaviors: [ behaviors: [
I18nBehavior, I18nBehavior,
CrPolicyNetworkBehavior, CrPolicyNetworkBehaviorMojo,
NetworkConfigElementBehavior, NetworkConfigElementBehavior,
], ],
...@@ -29,19 +29,25 @@ Polymer({ ...@@ -29,19 +29,25 @@ Polymer({
/** /**
* Array of item values to select from. * Array of item values to select from.
* @type {!Array<string>} * @type {!Array<string|number>}
*/ */
items: Array, items: Array,
/** Select item key, used for converting enums to strings */
key: String,
/** Prefix used to look up ONC property names. */ /** Prefix used to look up ONC property names. */
oncPrefix: { oncPrefix: {
type: String, type: String,
value: '', value: '',
}, },
/** Select item value */ /**
* Select item value
* @type {string|number}
*/
value: { value: {
type: String, type: Object,
notify: true, notify: true,
}, },
}, },
...@@ -67,23 +73,35 @@ Polymer({ ...@@ -67,23 +73,35 @@ Polymer({
}, },
/** /**
* @param {string|!chrome.networkingPrivate.Certificate} item * Returns a localized label for |item|. If |this.key| is set, |item| is
* @param {string} prefix * expected to be an enum and the key is used to convert it to a string.
* @return {string} The text to display for the onc value. * @param {string|number|!chrome.networkingPrivate.Certificate} item
* @return {string}
* @private * @private
*/ */
getItemLabel_: function(item, prefix) { getItemLabel_: function(item) {
if (this.certList) { if (this.certList) {
return this.getCertificateName_( return this.getCertificateName_(
/** @type {chrome.networkingPrivate.Certificate}*/ (item)); /** @type {chrome.networkingPrivate.Certificate}*/ (item));
} }
const key = /** @type {string} */ (item); let value;
const oncKey = 'Onc' + prefix.replace(/\./g, '-') + '_' + key; if (this.key) {
if (this.i18nExists(oncKey)) { // |item| is an enum, convert the enum to a string.
return this.i18n(oncKey); value = /** @type {string} */ (
OncMojo.getTypeString(this.key, /** @type {number} */ (item)));
} else {
value = /** @type {string} */ (item);
}
// The i18n dictonary is populated with all supported ONC values in the
// format Onc + prefix + value, with '-' replaceing '.' in the prefix.
// See network_element_localized_strings_provider.cc.
const oncValue = 'Onc' + this.oncPrefix.replace(/\./g, '-') + '_' + value;
if (this.i18nExists(oncValue)) {
return this.i18n(oncValue);
} }
assertNotReached('ONC Key not found: ' + oncKey); // All selectable values should be localized.
return key; assertNotReached('ONC value not found: ' + oncValue);
return value;
}, },
/** /**
......
<link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="chrome://resources/cr_elements/cr_toggle/cr_toggle.html"> <link rel="import" href="chrome://resources/cr_elements/cr_toggle/cr_toggle.html">
<link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_network_behavior.html"> <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_network_behavior_mojo.html">
<link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_network_indicator.html"> <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_network_indicator_mojo.html">
<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html"> <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
<link rel="import" href="network_config_element_behavior.html"> <link rel="import" href="network_config_element_behavior.html">
<link rel="import" href="network_shared_css.html"> <link rel="import" href="network_shared_css.html">
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<dom-module id="network-config-toggle"> <dom-module id="network-config-toggle">
<template> <template>
<style include="network-shared"> <style include="network-shared">
cr-policy-network-indicator { cr-policy-network-indicator-mojo {
--cr-tooltip-icon-margin-start: var(--cr-controlled-by-spacing); --cr-tooltip-icon-margin-start: var(--cr-controlled-by-spacing);
} }
</style> </style>
...@@ -23,9 +23,9 @@ ...@@ -23,9 +23,9 @@
disabled="[[getDisabled_(disabled, property)]]" disabled="[[getDisabled_(disabled, property)]]"
aria-label$="[[label]]"> aria-label$="[[label]]">
</cr-toggle> </cr-toggle>
<cr-policy-network-indicator <cr-policy-network-indicator-mojo
property="[[property]]" tooltip-position="left"> property="[[property]]" tooltip-position="left">
</cr-policy-network-indicator> </cr-policy-network-indicator-mojo>
</div> </div>
</template> </template>
<script src="network_config_toggle.js"></script> <script src="network_config_toggle.js"></script>
......
...@@ -8,7 +8,10 @@ ...@@ -8,7 +8,10 @@
Polymer({ Polymer({
is: 'network-config-toggle', is: 'network-config-toggle',
behaviors: [CrPolicyNetworkBehavior, NetworkConfigElementBehavior], behaviors: [
CrPolicyNetworkBehaviorMojo,
NetworkConfigElementBehavior,
],
properties: { properties: {
label: String, label: String,
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
<link rel="import" href="chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html"> <link rel="import" href="chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html">
<link rel="import" href="chrome://resources/cr_elements/cr_icons_css.html"> <link rel="import" href="chrome://resources/cr_elements/cr_icons_css.html">
<link rel="import" href="chrome://resources/cr_elements/cr_input/cr_input.html"> <link rel="import" href="chrome://resources/cr_elements/cr_input/cr_input.html">
<link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_network_behavior.html"> <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_network_behavior_mojo.html">
<link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_network_indicator.html"> <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_network_indicator_mojo.html">
<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html"> <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
<link rel="import" href="chrome://resources/html/i18n_behavior.html"> <link rel="import" href="chrome://resources/html/i18n_behavior.html">
<link rel="import" href="network_config_element_behavior.html"> <link rel="import" href="network_config_element_behavior.html">
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
flex: 1; flex: 1;
} }
cr-policy-network-indicator { cr-policy-network-indicator-mojo {
--cr-tooltip-icon-margin-start: var(--cr-controlled-by-spacing); --cr-tooltip-icon-margin-start: var(--cr-controlled-by-spacing);
} }
</style> </style>
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
</cr-icon-button> </cr-icon-button>
</template> </template>
<template is="dom-if" if="[[showPolicyIndicator_]]" restamp> <template is="dom-if" if="[[showPolicyIndicator_]]" restamp>
<cr-policy-network-indicator <cr-policy-network-indicator-mojo
property="[[property]]" tooltip-position="left"> property="[[property]]" tooltip-position="left">
</cr-policy-network-indicator> </cr-policy-network-indicator>
</template> </template>
......
...@@ -16,7 +16,7 @@ Polymer({ ...@@ -16,7 +16,7 @@ Polymer({
behaviors: [ behaviors: [
I18nBehavior, I18nBehavior,
CrPolicyNetworkBehavior, CrPolicyNetworkBehaviorMojo,
NetworkConfigElementBehavior, NetworkConfigElementBehavior,
], ],
......
...@@ -247,23 +247,17 @@ Polymer({ ...@@ -247,23 +247,17 @@ Polymer({
*/ */
getProperty_: function(key, propertyDict) { getProperty_: function(key, propertyDict) {
const property = this.get(key, this.propertyDict); const property = this.get(key, this.propertyDict);
if (property === undefined || property === null) { if ((property === undefined || property === null) &&
propertyDict.source !== undefined) {
// If the dictionary is policy controlled, provide an empty property // If the dictionary is policy controlled, provide an empty property
// object with the network policy source. See https://crbug.com/819837 for // object with the network policy source. See https://crbug.com/819837
// more info. // for more info.
const source = propertyDict.source; const policySource =
if (source == chromeos.networkConfig.mojom.OncSource.kUserPolicy) { OncMojo.getEnforcedPolicySourceFromOncSource(propertyDict.source);
return /** @type{!OncMojo.ManagedProperty} */ ({ if (policySource != chromeos.networkConfig.mojom.PolicySource.kNone) {
activeValue: '',
policySource:
chromeos.networkConfig.mojom.PolicySource.kUserPolicyEnforced,
});
}
if (source == chromeos.networkConfig.mojom.OncSource.kDevicePolicy) {
return /** @type{!OncMojo.ManagedProperty} */ ({ return /** @type{!OncMojo.ManagedProperty} */ ({
activeValue: '', activeValue: '',
policySource: policySource: policySource,
chromeos.networkConfig.mojom.PolicySource.kDevicePolicyEnforced,
}); });
} }
// Otherwise just return undefined. // Otherwise just return undefined.
......
...@@ -18,6 +18,7 @@ js_type_check("closure_compile") { ...@@ -18,6 +18,7 @@ js_type_check("closure_compile") {
":cr_policy_network_behavior", ":cr_policy_network_behavior",
":cr_policy_network_behavior_mojo", ":cr_policy_network_behavior_mojo",
":cr_policy_network_indicator", ":cr_policy_network_indicator",
":cr_policy_network_indicator_mojo",
] ]
} }
} }
......
...@@ -430,6 +430,31 @@ class OncMojo { ...@@ -430,6 +430,31 @@ class OncMojo {
return value; return value;
} }
/**
* Policy indicators expect a per-property PolicySource, but sometimes we need
* to use the per-configuration OncSource (e.g. for unmanaged intrinsic
* properties like Security). This returns the corresponding PolicySource.
* @param {!chromeos.networkConfig.mojom.OncSource} source
* @return {!chromeos.networkConfig.mojom.PolicySource}
*/
static getEnforcedPolicySourceFromOncSource(source) {
const OncSource = chromeos.networkConfig.mojom.OncSource;
const PolicySource = chromeos.networkConfig.mojom.PolicySource;
switch (source) {
case OncSource.kNone:
case OncSource.kDevice:
case OncSource.kUser:
return PolicySource.kNone;
case OncSource.kDevicePolicy:
return PolicySource.kDevicePolicyEnforced;
case OncSource.kUserPolicy:
return PolicySource.kUserPolicyEnforced;
}
assert(source !== undefined, 'OncSource undefined');
assertNotReached('Invalid OncSource: ' + source.toString());
return PolicySource.kNone;
}
/** /**
* @param {!chromeos.networkConfig.mojom.NetworkType} type * @param {!chromeos.networkConfig.mojom.NetworkType} type
* @return {string} * @return {string}
......
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