Pin Chrome's shortcut to the Win10 Start menu on install and OS upgrade.
[chromium-blink-merge.git] / chrome / browser / resources / settings / users_page / users_page.js
blob8129be60a6b66532c6c95152e7198f6f83fac9dd
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-users-page' is the settings page for managing user accounts on
8  * the device.
9  *
10  * Example:
11  *
12  *    <neon-animated-pages>
13  *      <cr-settings-users-page prefs="{{prefs}}">
14  *      </cr-settings-users-page>
15  *      ... other pages ...
16  *    </neon-animated-pages>
17  *
18  * @group Chrome Settings Elements
19  * @element cr-settings-users-page
20  */
21 Polymer({
22   is: 'cr-settings-users-page',
24   behaviors: [
25     Polymer.IronA11yKeysBehavior
26   ],
28   properties: {
29     /**
30      * Preferences state.
31      */
32     prefs: {
33       type: Object,
34       notify: true,
35     },
37     /**
38      * Route for the page.
39      */
40     route: String,
42     /**
43      * Whether the page is a subpage.
44      */
45     subpage: {
46       type: Boolean,
47       value: false,
48       readOnly: true,
49     },
51     /**
52      * ID of the page.
53      */
54     PAGE_ID: {
55       type: String,
56       value: 'users',
57       readOnly: true,
58     },
60     /**
61      * Title for the page header and navigation menu.
62      */
63     pageTitle: {
64       type: String,
65       value: function() {
66         return loadTimeData.getString('usersPageTitle');
67       },
68     },
70     /**
71      * Name of the 'iron-icon' to show.
72      */
73     icon: {
74       type: String,
75       value: 'person',
76       readOnly: true,
77     },
79     /** @override */
80     keyEventTarget: {
81       type: Object,
82       value: function() {
83         return this.$.addUserInput;
84       }
85     },
87     isOwner: {
88       type: Boolean,
89       value: false
90     },
92     isWhitelistManaged: {
93       type: Boolean,
94       value: false
95     },
97     editingDisabled: {
98       type: Boolean,
99       computed: 'computeEditingDisabled_(isOwner, isWhitelistManaged)'
100     },
102     editingUsersDisabled: {
103       type: Boolean,
104       computed: 'computeEditingUsersDisabled_(isOwner, isWhitelistManaged, ' +
105           'prefs.cros.accounts.allowGuest.value)'
106     }
107   },
109   keyBindings: {
110     'enter': 'addUser_'
111   },
113   /** @override */
114   created: function() {
115     chrome.usersPrivate.isCurrentUserOwner(function(isOwner) {
116       this.isOwner = isOwner;
117     }.bind(this));
119     chrome.usersPrivate.isWhitelistManaged(function(isWhitelistManaged) {
120       this.isWhitelistManaged = isWhitelistManaged;
121     }.bind(this));
122   },
124   /**
125    * Regular expression for adding a user where the string provided is just the
126    * part before the "@".
127    * Email alias only, assuming it's a gmail address.
128    *     e.g. 'john'
129    * @const
130    * @private {string}
131    */
132   nameOnlyString_: '^\\s*([\\w\\.!#\\$%&\'\\*\\+-\\/=\\?\\^`\\{\\|\\}~]+)\\s*$',
134   /**
135    * Regular expression for adding a user where the string provided is a full
136    * email address.
137    *     e.g. 'john@chromium.org'
138    * @const
139    * @private {string}
140    */
141   emailString_:
142       '^\\s*([\\w\\.!#\\$%&\'\\*\\+-\\/=\\?\\^`\\{\\|\\}~]+)@' +
143       '([A-Za-z0-9\-]{2,63}\\..+)\\s*$',
145   /** @private */
146   addUser_: function() {
147     /** @const */ var nameOnlyRegex = new RegExp(this.nameOnlyString_);
148     /** @const */ var emailRegex = new RegExp(this.emailString_);
150     var userStr = this.$.addUserInput.value;
152     var matches = nameOnlyRegex.exec(userStr);
153     var userEmail;
154     if (matches) {
155       userEmail = matches[1] + '@gmail.com';
156     }
158     matches = emailRegex.exec(userStr);
159     if (matches) {
160       userEmail = matches[1] + '@' + matches[2];
161     }
163     if (userEmail) {
164       chrome.usersPrivate.addWhitelistedUser(
165           userEmail,
166           /* callback */ function(success) {});
167       this.$.addUserInput.value = '';
168     }
169   },
171   /**
172    * @param {boolean} isOwner
173    * @param {boolean} isWhitelistManaged
174    * @private
175    */
176   computeHideOwnerLabel_: function(isOwner, isWhitelistManaged) {
177     return isOwner || isWhitelistManaged;
178   },
180   /**
181    * @param {boolean} isOwner
182    * @param {boolean} isWhitelistManaged
183    * @private
184    */
185   computeHideManagedLabel_: function(isOwner, isWhitelistManaged) {
186     return !isWhitelistManaged;
187   },
189   /**
190    * @param {boolean} isOwner
191    * @param {boolean} isWhitelistManaged
192    * @private
193    */
194   computeEditingDisabled_: function(isOwner, isWhitelistManaged) {
195     return !isOwner || isWhitelistManaged;
196   },
198   /**
199    * @param {boolean} isOwner
200    * @param {boolean} isWhitelistManaged
201    * @param {boolean} allowGuest
202    * @private
203    */
204   computeEditingUsersDisabled_: function(
205       isOwner, isWhitelistManaged, allowGuest) {
206     return !isOwner || isWhitelistManaged || allowGuest;
207   }