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

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: Comments addressed. 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
« no previous file with comments | « chrome/browser/resources/chromeos/login/login_common.js ('k') | chrome/browser/resources/login/screen.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..083b90c68258e9d1268102676a6519776e0593ea 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);
@@ -27,6 +29,7 @@ cr.define('login', function() {
function ScreenContext() {
this.storage_ = {};
this.changes_ = {};
+ this.observers_ = {};
}
ScreenContext.prototype = {
@@ -73,11 +76,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]);
+ 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,6 +101,35 @@ cr.define('login', function() {
var result = this.changes_;
this.changes_ = {};
return result;
+ },
+
+ addObserver: function(key, 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);
+ },
+
+ removeObserver: function(observer) {
+ for (var key in this.observers_) {
+ var observerIndex = this.observers_[key].indexOf(observer);
+ if (observerIndex != -1)
+ this.observers_[key].splice(observerIndex, 1);
+ }
+ },
+
+ /**
+ * Creates deep copy of observers lists.
+ * @private
+ */
+ cloneObservers_: function() {
+ var result = {};
+ for (var key in this.observers_)
+ result[key] = this.observers_[key].slice();
+ return result;
}
};
« no previous file with comments | « chrome/browser/resources/chromeos/login/login_common.js ('k') | chrome/browser/resources/login/screen.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698