Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(848)

Unified Diff: ui/webui/resources/js/cr/polymer_elements/cr_network_icon/cr-network-icon.js

Issue 874283006: Add custom Polymer network icon element (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/webui/resources/js/cr/polymer_elements/cr_network_icon/cr-network-icon.js
diff --git a/ui/webui/resources/js/cr/polymer_elements/cr_network_icon/cr-network-icon.js b/ui/webui/resources/js/cr/polymer_elements/cr_network_icon/cr-network-icon.js
new file mode 100644
index 0000000000000000000000000000000000000000..2769368063162c697ef0073d9dbd7c311b5c5576
--- /dev/null
+++ b/ui/webui/resources/js/cr/polymer_elements/cr_network_icon/cr-network-icon.js
@@ -0,0 +1,166 @@
+// Copyright 2015 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 Polymer element for rendering network icons based on ONC
+ * state properties.
+ */
+
+(function() {
+ /**
+ * @typedef({
michaelpg 2015/02/05 06:45:52 I think this should be @typedef {{ ("the outer br
stevenjb 2015/02/05 22:41:34 Done.
+ * showDisconnected: boolean,
+ * iconType: string,
+ * connected: boolean,
+ * secure: boolean
+ */
+ var IconParams_;
michaelpg 2015/02/05 06:45:52 why the underscore? Or if this isn't really a vari
stevenjb 2015/02/05 22:41:33 The _ is to indicate that it's private. Added the
Dan Beam 2015/02/05 22:52:35 fwiw, the style guide only asks for _ after privat
+
+ /** @const */ var kResourceImageBase =
Jeremy Klein 2015/02/05 05:05:30 nit: @const {string} here and below.
michaelpg 2015/02/05 06:45:52 Jeremy, source for that syntax? From https://deve
Jeremy Klein 2015/02/05 07:30:36 This was added in a compiler release Februrary 201
stevenjb 2015/02/05 22:41:34 Done.
Tyler Breisacher (Chromium) 2015/02/23 20:50:51 Two drive by comments from the compiler team's POV
+ 'chrome://resources/images/polymer_elements/cr_network_icon/';
+ /** @const */ var kResourceImageExt = '.png';
+
+ /**
+ * Gets the network strength from the |networkState| object if available.
+ * @param {Object} networkState The ONC network state object provided by
Jeremy Klein 2015/02/05 07:30:35 nit: "!Object"
stevenjb 2015/02/05 22:41:34 Done.
+ * chrome.networkingPrivate.getState().
+ * @return {integer} The strength value, [0-100]. This is always 0 for non
Jeremy Klein 2015/02/05 05:05:30 This should be "number" instead of "integer"
stevenjb 2015/02/05 22:41:34 Done.
+ * wireless networks.
+ */
+ function getStrengthFromState(networkState) {
Jeremy Klein 2015/02/05 05:05:30 The signal strength here can probably be a compute
Jeremy Klein 2015/02/05 05:05:30 I feel like these functions can just be inside the
+ var type = networkState['Type'];
+ var strength = 0;
+ if (type == 'WiFi') {
+ var wifi = networkState['WiFi'];
+ if (wifi)
+ strength = wifi['SignalStrength'] || 0;
+ } else if (type == 'Cellular') {
+ var cellular = networkState['Cellular'];
+ if (cellular)
+ strength = cellular['SignalStrength'] || 0;
+ } else if (type == 'WiMAX') {
+ var wimax = networkState['WiMAX'];
+ if (wimax)
+ strength = wimax['SignalStrength'] || 0;
+ }
+ return strength;
michaelpg 2015/02/05 06:45:52 This is kind of a lot :-\ Do we need to explicitly
+ };
+
+ /**
+ * Gets the icon type from the networkState object. This allows multiple
+ * types (i.e. Cellular, WiMAX) to map to the same icon type (i.e. mobile).
michaelpg 2015/02/05 06:45:52 "from the |networkType| object"
stevenjb 2015/02/05 22:41:33 Done.
+ * @param {string} networkType The ONC network type.
+ * @return {string} The icon type: ethernet, wifi, mobile, or vpn.
+ */
+ function getIconTypeFromNetworkType(networkType) {
+ if (networkType == 'Ethernet') {
+ return 'ethernet';
+ } else if (networkType == 'WiFi') {
+ return 'wifi';
+ } else if (networkType == 'Cellular') {
+ return 'mobile';
+ } else if (networkType == 'WiMAX') {
+ return 'mobile';
+ } else if (networkType == 'VPN') {
+ return 'vpn';
+ }
+ console.log('Unrecognized network type: ' + networkType);
+ return 'ethernet';
+ }
+
+ /**
+ * Polymer class definition for 'cr-network-icon'.
+ */
+ Polymer('cr-network-icon', {
+ publish: {
+ /**
+ * If true, the icon is part of a list of networks and will not show
+ * the disconnected image.
michaelpg 2015/02/05 06:45:52 I don't understand this comment. Could the attribu
stevenjb 2015/02/05 22:41:34 The attribute is intended to describe the context,
+ *
+ * @attribute listItem
+ * @type boolean
+ * @default false
michaelpg 2015/02/05 06:45:52 So, @attribute and @default aren't used by closure
Jeremy Klein 2015/02/05 07:30:36 I wonder if it might be worth trying to get the do
stevenjb 2015/02/05 22:41:33 So, I just copy/pasted this from paper-button.html
+ */
+ listItem: false
+ },
+
+ /**
+ * Updates the icon based on |networkState|. Should be called whenever the
+ * state changes.
+ * @param {Object} networkState The ONC network state object provided by
Jeremy Klein 2015/02/05 07:30:36 Is there any stronger type we can use for the ONC
stevenjb 2015/02/05 22:41:34 I am going to re-factor this part and create a sep
+ * chrome.networkingPrivate.getState().
michaelpg 2015/02/05 06:45:52 nit: 4 space indent (5 spaces total)
stevenjb 2015/02/05 22:41:34 Done.
+ */
+ setNetworkState: function(networkState) {
Jeremy Klein 2015/02/05 05:05:30 It seems like the network state and network type c
stevenjb 2015/02/05 22:41:34 I think that may be possible with the re-factor, w
+ var params = /** @type {IconParams} */ {};
+ params.showDisconnected = !this.$.listItem;
michaelpg 2015/02/05 06:45:52 Does this work? The members of this.$ should be t
stevenjb 2015/02/05 22:41:33 Done.
+ params.iconType = getIconTypeFromNetworkType(networkState['Type']);
+
+ if (params.iconType_ == 'wifi') {
+ var wifi = networkState['WiFi'];
+ if (wifi && wifi['Security'] && wifi['Security'] != 'None')
+ params.secure = true;
+ }
+ params.connected = networkState['ConnectionState'] == 'Connected';
+
+ params.strength = getStrengthFromState(networkState);
+ this.setIcon_(params);
+ },
+
+ /**
+ * Provides the ONC network type to display a disconnected icon for the
+ * specified type.
michaelpg 2015/02/05 06:45:52 4+1=5 spaces
stevenjb 2015/02/05 22:41:34 Done.
+ * @param {string} type The ONC network type.
+ */
+ setNetworkType: function(networkType) {
+ var params = /** @type {IconParams} */ {};
+ params.showDisconnected = true;
+ params.iconType = getIconTypeFromNetworkType(networkType);
+ params.connected = false;
+ params.secure = false;
+ params.strenght = 0;
michaelpg 2015/02/05 06:45:52 s/strenght/strength/ & strength isn't listed in t
+
+ this.setIcon_(params);
+ },
+
+ /**
+ * Sets the icon and badge based on the current state and |strength|.
+ * @param {IconParams} params The set of params describing the icon.
Jeremy Klein 2015/02/05 07:30:35 nit: "!IconParams" to ensure non-null.
stevenjb 2015/02/05 22:41:33 Done.
+ * @private
+ */
+ setIcon_: function(params) {
+ var iconOffset;
+ if (params.iconType == 'wifi' || params.iconType == 'mobile') {
+ if (params.showDisconnected && !params.connected) {
michaelpg 2015/02/05 06:45:52 nit: remove unnecessary braces for single-line if
stevenjb 2015/02/05 22:41:34 I chrome both are valid. For single if statements
michaelpg 2015/02/06 18:52:38 I'll leave that up to dbeam@.
James Hawkins 2015/02/06 18:58:45 The style rule from [1] is to leave the braces off
+ iconOffset = '0px';
+ } else if (params.strength <= 25) {
+ iconOffset = '-100%';
+ } else if (params.strength <= 50) {
+ iconOffset = '-200%';
+ } else if (params.strength <= 75) {
+ iconOffset = '-300%';
+ } else {
+ iconOffset = '-400%';
+ }
+ }
+
+ var icon = this.$.icon;
+ if (params.iconType) {
+ icon.src = kResourceImageBase + params.iconType + kResourceImageExt;
+ if (iconOffset) {
+ icon.style.height = '500%';
+ icon.style.top = iconOffset;
+ }
+ }
+
+ var badge = this.$.badge;
+ if (params.secure) {
+ badge.style.display = undefined;
michaelpg 2015/02/05 06:45:52 nit(?): badge.style.display = '';
stevenjb 2015/02/05 22:41:34 So, undefined clearly sets the behavior to whateve
michaelpg 2015/02/06 18:52:38 Actually this is not a nit, it seems to be a bug:
+ badge.src = kResourceImageBase + 'secure' + kResourceImageExt;
+ } else {
+ badge.style.display = 'none';
+ }
+ }
+
+ });
+})();

Powered by Google App Engine
This is Rietveld 408576698