12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)cr.define('network.config', function() {
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  var NetworkConfig = cr.ui.define('div');
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NetworkConfig.prototype = {
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    __proto__: HTMLDivElement.prototype,
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    decorate: function() {
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      var params = parseQueryParams(window.location);
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      this.networkId_ = params.network;
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      this.activeArea_ = null;
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      this.userArea_ = null;
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      this.managedArea_ = null;
16d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      this.stateArea_ = null;
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      this.updateDom_();
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      this.fetchProperties_();
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    },
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    fetchProperties_: function() {
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      chrome.networkingPrivate.getProperties(
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          this.networkId_,
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          this.updateActiveSettings_.bind(this));
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      chrome.networkingPrivate.getManagedProperties(
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          this.networkId_,
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          this.updateManagedSettings_.bind(this));
28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      chrome.networkingPrivate.getState(
29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)          this.networkId_,
30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)          this.updateState_.bind(this));
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    },
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    stringifyJSON_: function(properties) {
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return JSON.stringify(properties, undefined, 2);
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    },
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    updateActiveSettings_: function(properties) {
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      this.activeArea_.value = this.stringifyJSON_(properties);
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    },
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    updateManagedSettings_: function(properties) {
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      var error = chrome.runtime.lastError;
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      if (error) {
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        this.managedArea_.value = error.message;
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        this.userArea_.value = 'undefined';
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      } else {
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        this.managedArea_.value = this.stringifyJSON_(properties);
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        this.userArea_.value = this.stringifyJSON_(
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            this.extractUserSettings_(properties));
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      }
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    },
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
53d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    updateState_: function(properties) {
54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      this.stateArea_.value = this.stringifyJSON_(properties);
55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    },
56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    extractUserSettings_: function(properties) {
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      if ('UserSetting' in properties)
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return properties['UserSetting'];
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      if ('SharedSetting' in properties)
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return properties['SharedSetting'];
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      var result = {};
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      for (var fieldName in properties) {
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        var entry = properties[fieldName];
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        if (typeof entry === 'object') {
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          var nestedResult = this.extractUserSettings_(entry);
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          if (nestedResult)
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            result[fieldName] = nestedResult;
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      }
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      if (Object.keys(result).length)
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return result;
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      else
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return undefined;
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    },
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    updateDom_: function() {
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      var div = document.createElement('div');
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      this.activeArea_ = function() {
83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        var label = document.createElement('h4');
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        label.textContent = 'Active Settings (getProperties)';
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        div.appendChild(label);
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        var area = document.createElement('textarea');
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        div.appendChild(area);
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return area;
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      }();
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      this.userArea_ = function() {
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        var label = document.createElement('h4');
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        label.textContent = 'User Settings';
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        div.appendChild(label);
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        var area = document.createElement('textarea');
96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        div.appendChild(area);
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return area;
98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      }();
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      this.managedArea_ = function() {
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        var label = document.createElement('h4');
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        label.textContent = 'Managed Settings (getManagedProperties)';
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        div.appendChild(label);
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        var area = document.createElement('textarea');
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        div.appendChild(area);
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return area;
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      }();
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
109d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      this.stateArea_ = function() {
110d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        var label = document.createElement('h4');
111d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        label.textContent = 'State (getState)';
112d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        div.appendChild(label);
113d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        var area = document.createElement('textarea');
114d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        div.appendChild(area);
115d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        return area;
116d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      }();
117d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      this.appendChild(div);
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    },
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    get userSettings() {
122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return JSON.parse(this.userArea_.value);
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    },
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    get networkId() {
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return this.networkId_;
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return {
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NetworkConfig: NetworkConfig
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)});
134