Only grant permissions to new extensions from sync if they have the expected version
[chromium-blink-merge.git] / chrome / browser / resources / settings / internet_page / internet_known_networks_page.js
blobad379773134974cdd9149f632e134f87af208f04
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 /**
6  * @fileoverview
7  * 'cr-settings-internet-known-networks' is the settings subpage listing the
8  * known networks for a type (currently always WiFi).
9  *
10  * @group Chrome Settings Elements
11  * @element cr-settings-internet-known-networks
12  */
13 Polymer({
14   is: 'cr-settings-internet-known-networks-page',
16   properties: {
17     /**
18      * ID of the page.
19      */
20     PAGE_ID: {
21       type: String,
22       value: 'internet-known-networks',
23       readOnly: true
24     },
26     /**
27      * Route for the page.
28      */
29     route: {
30       type: String,
31       value: ''
32     },
34     /**
35      * Whether the page is a subpage.
36      */
37     subpage: {
38       type: Boolean,
39       value: false
40     },
42     /**
43      * Title for the page header and navigation menu.
44      */
45     pageTitle: {
46       type: String,
47       value: function() {
48         return loadTimeData.getString('internetKnownNetworksPageTitle');
49       }
50     },
52     /**
53      * Reflects the selected settings page. We use this to extract networkType
54      * from window.location.href when this page is navigated to. This is a
55      * workaround for a bug in the 1.0 version of more-routing where
56      * selected-params='{{params}}' is not correctly setting params in
57      * settings_main.html. TODO(stevenjb): Remove once more-routing is fixed.
58      * @type {?{PAGE_ID: string}}
59      */
60     selectedPage: {
61       type: Object,
62       value: null,
63       observer: 'selectedPageChanged_'
64     },
66     /**
67      * Name of the 'core-icon' to show.
68      */
69     icon: {
70       type: String,
71       value: 'settings-ethernet',
72       readOnly: true
73     },
75     /**
76      * The type of networks to list.
77      * @type {chrome.networkingPrivate.NetworkType}
78      */
79     networkType: {
80       type: String,
81       value: CrOnc.Type.WI_FI,
82       observer: 'networkTypeChanged_',
83     },
85     /**
86      * The maximum height in pixels for the list of networks.
87      */
88     maxHeight: {
89       type: Number,
90       value: 500
91     },
93     /**
94      * List of all network state data for the network type.
95      * @type {!Array<!CrOnc.NetworkStateProperties>}
96      */
97     networkStateList: {
98       type: Array,
99       value: function() { return []; }
100     }
101   },
103   /**
104    * Listener function for chrome.networkingPrivate.onNetworksChanged event.
105    * @type {function(!Array<string>)}
106    * @private
107    */
108   networksChangedListener_: function() {},
110   /** @override */
111   attached: function() {
112     this.networksChangedListener_ = this.onNetworksChangedEvent_.bind(this);
113     chrome.networkingPrivate.onNetworksChanged.addListener(
114         this.networksChangedListener_);
115   },
117   /** @override */
118   detached: function() {
119     chrome.networkingPrivate.onNetworksChanged.removeListener(
120         this.networksChangedListener_);
121   },
123   /**
124    * Polymer type changed method.
125    */
126   networkTypeChanged_: function() {
127     if (!this.networkType)
128       return;
129     this.refreshNetworks_();
130   },
132   /**
133    * Polymer selectedPage changed method. TODO(stevenjb): Remove, see above.
134    */
135   selectedPageChanged_: function() {
136     if ((this.selectedPage && this.selectedPage.PAGE_ID) != this.PAGE_ID)
137       return;
138     var href = window.location.href;
139     var idx = href.lastIndexOf('/');
140     var type = href.slice(idx + 1);
141     if (type) {
142       this.networkType =
143           /** @type {chrome.networkingPrivate.NetworkType} */(type);
144     }
145   },
147   /**
148    * networkingPrivate.onNetworksChanged event callback.
149    * @param {!Array<string>} networkIds The list of changed network GUIDs.
150    * @private
151    */
152   onNetworksChangedEvent_: function(networkIds) {
153     this.refreshNetworks_();
154   },
156   /**
157    * Requests the list of network states from Chrome. Updates networkStates
158    * once the results are returned from Chrome.
159    * @private
160    */
161   refreshNetworks_: function() {
162     var filter = {
163       networkType: this.networkType,
164       visible: false,
165       configured: true
166     };
167     chrome.networkingPrivate.getNetworks(
168         filter,
169         function(states) { this.networkStateList = states; }.bind(this));
170   },
172   /**
173    * Event triggered when a cr-network-list item is selected.
174    * @param {!{detail: !CrOnc.NetworkStateProperties}} event
175    * @private
176    */
177   onListItemSelected_: function(event) {
178     var state = event.detail;
179     MoreRouting.navigateTo('internet-detail', {guid: state.GUID});
180   },
182   /**
183    * Event triggered when a cr-network-list item 'remove' button is pressed.
184    * @param {!{detail: !CrOnc.NetworkStateProperties}} event
185    * @private
186    */
187   onRemove_: function(event) {
188     var state = event.detail;
189     if (!state.GUID)
190       return;
191     chrome.networkingPrivate.forgetNetwork(state.GUID);
192   },
194   /**
195    * Event triggered when a cr-network-list item 'preferred' button is toggled.
196    * @param {!{detail: !CrOnc.NetworkStateProperties}} event
197    * @private
198    */
199   onTogglePreferred_: function(event) {
200     var state = event.detail;
201     if (!state.GUID)
202       return;
203     var preferred = state.Priority > 0;
204     var onc = {Priority: preferred ? 0 : 1};
205     chrome.networkingPrivate.setProperties(state.GUID, onc);
206   },
208   /**
209    * Navigate to the previous page.
210    * @private
211    */
212   navigateBack_: function() {
213     MoreRouting.navigateTo('internet');
214   }