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

Unified Diff: chrome/browser/resources/chromeos/login/screen_context.js

Issue 328763003: Added usefull utility methods to Screen and ScreenContext. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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: chrome/browser/resources/chromeos/login/screen_context.js
diff --git a/chrome/browser/resources/chromeos/login/screen_context.js b/chrome/browser/resources/chromeos/login/screen_context.js
index 6a014a4828365e61576db7ad3f07c5982af7ed6c..f7460f4de08746237eed8dd0da57f62c0e622283 100644
--- a/chrome/browser/resources/chromeos/login/screen_context.js
+++ b/chrome/browser/resources/chromeos/login/screen_context.js
@@ -7,6 +7,8 @@
* values that are shared between C++ and JS sides.
*/
cr.define('login', function() {
+ 'use strict';
+
function require(condition, message) {
if (!condition) {
throw Error(message);
@@ -18,15 +20,17 @@ cr.define('login', function() {
require(keyType === 'string', 'Invalid type of key: "' + keyType + '".');
}
- function checkValueIsValid(value) {
+ function checkValueIsValid(value, t) {
ygorshenin1 2014/06/11 10:44:00 nit: from the function definition and usage it's n
Denis Kuznetsov (DE-MUC) 2014/06/11 14:29:17 Also, guide recommends to avoid abbreviations for
dzhioev (left Google) 2014/06/18 14:43:39 It is a garbage that I forgot to remove.
var valueType = typeof value;
require(['string', 'boolean', 'number'].indexOf(valueType) != -1,
- 'Invalid type of value: "' + valueType + '".');
+ 'Invalid type of value ' + t + ': "' + valueType + '".');
}
- function ScreenContext() {
+ function ScreenContext(screen) {
+ this.screen_ = screen;
ygorshenin1 2014/06/11 10:44:00 Cound you please point where |screen_| is used?
dzhioev (left Google) 2014/06/18 14:43:39 It is not used anymore. I forgot to remove it.
this.storage_ = {};
this.changes_ = {};
+ this.observers_ = {};
}
ScreenContext.prototype = {
@@ -51,7 +55,7 @@ cr.define('login', function() {
*/
set: function(key, value) {
checkKeyIsValid(key);
- checkValueIsValid(value);
+ checkValueIsValid(value, 2);
Denis Kuznetsov (DE-MUC) 2014/06/11 14:29:17 It is not obvious what "2" means. Could you use so
dzhioev (left Google) 2014/06/18 14:43:39 Removed.
if (this.hasKey(key) && this.storage_[key] === value)
return false;
this.changes_[key] = value;
@@ -73,11 +77,21 @@ cr.define('login', function() {
*/
applyChanges: function(changes) {
require(!this.hasChanges(), 'Context has changes.');
- Object.keys(changes).forEach(function(key) {
+ var oldValues = {};
+ for (var key in changes) {
checkKeyIsValid(key);
- checkValueIsValid(changes[key]);
+ checkValueIsValid(changes[key], 1);
Denis Kuznetsov (DE-MUC) 2014/06/11 14:29:17 What is the "1"?
dzhioev (left Google) 2014/06/18 14:43:39 Removed.
+ oldValues[key] = this.storage_[key];
this.storage_[key] = changes[key];
- }, this);
+ }
+ var observers = this.cloneObservers_();
+ for (var key in changes) {
+ if (observers.hasOwnProperty(key)) {
+ var keyObservers = observers[key];
+ for (var observerIndex in keyObservers)
+ keyObservers[observerIndex](changes[key], oldValues[key], key);
+ }
+ }
return Object.keys(changes);
},
@@ -88,7 +102,33 @@ cr.define('login', function() {
var result = this.changes_;
this.changes_ = {};
return result;
- }
+ },
+
+ observe: function(key, observer) {
Denis Kuznetsov (DE-MUC) 2014/06/11 14:29:17 subscribe/unsubscribe? "Observe" is the local acti
dzhioev (left Google) 2014/06/18 14:43:39 I used same wording as new JS API use ( http://www
Denis Kuznetsov (DE-MUC) 2014/06/19 19:16:36 Then it's even more relevant : we need to avoid na
dzhioev (left Google) 2014/06/20 07:24:16 OK, renamed to familiar (add/remove)Observer.
+ if (!this.observers_.hasOwnProperty(key))
+ this.observers_[key] = [];
+ if (this.observers_[key].indexOf(observer) !== -1) {
+ console.warn('Observer already registered.');
+ return;
+ }
+ this.observers_[key].push(observer);
+ },
+
+ unobserve: function(observer) {
+ for (var key in this.observers_) {
+ var observerIndex = this.observers_[key].indexOf(observer);
+ if (observerIndex != -1)
+ this.observers_[key].splice(observerIndex, 1);
+ }
+ },
+
+ cloneObservers_: function() {
+ var result = {};
+ for (var key in this.observers_)
+ result[key] = this.observers_[key].slice();
+ return result;
+ },
+
ygorshenin1 2014/06/11 10:44:00 nit: drop empty line and trailing comma.
dzhioev (left Google) 2014/06/18 14:43:39 Done.
};
return {

Powered by Google App Engine
This is Rietveld 408576698