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

Side by Side Diff: chrome/browser/resources/settings/prefs/prefs.js

Issue 1515033004: [MD Settings] Stop prefs singleton firing change events at initialization (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fire from singleton Created 5 years 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* Copyright 2015 The Chromium Authors. All rights reserved. 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 2 * Use of this source code is governed by a BSD-style license that can be
3 * found in the LICENSE file. */ 3 * found in the LICENSE file. */
4 4
5 /** 5 /**
6 * @fileoverview 6 * @fileoverview
7 * 'settings-prefs' exposes a singleton model of Chrome settings and 7 * 'settings-prefs' exposes a singleton model of Chrome settings and
8 * preferences, which listens to changes to Chrome prefs whitelisted in 8 * preferences, which listens to changes to Chrome prefs whitelisted in
9 * chrome.settingsPrivate. When changing prefs in this element's 'prefs' 9 * chrome.settingsPrivate. When changing prefs in this element's 'prefs'
10 * property via the UI, the singleton model tries to set those preferences in 10 * property via the UI, the singleton model tries to set those preferences in
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 }, 201 },
202 202
203 /** 203 /**
204 * Forwards changes to this.prefs to settings-prefs-singleton. 204 * Forwards changes to this.prefs to settings-prefs-singleton.
205 * @private 205 * @private
206 */ 206 */
207 prefsChanged_: function(info) { 207 prefsChanged_: function(info) {
208 // Ignore changes that came from singleton_ so we don't re-process 208 // Ignore changes that came from singleton_ so we don't re-process
209 // changes made in other instances of this element. 209 // changes made in other instances of this element.
210 if (!this.ignoreChanges_) 210 if (!this.ignoreChanges_)
211 this.singleton_.fire('prefs-changed', info, {bubbles: false}); 211 this.singleton_.fire('shared-prefs-changed', info, {bubbles: false});
212 }, 212 },
213 213
214 /** 214 /**
215 * Sets ignoreChanged_ before calling the function to suppress change 215 * Sets ignoreChanged_ before calling the function to suppress change
216 * events that are manually handled. 216 * events that are manually handled.
217 * @param {!function()} fn 217 * @param {!function()} fn
218 * @private 218 * @private
219 */ 219 */
220 runWhileIgnoringChanges_: function(fn) { 220 runWhileIgnoringChanges_: function(fn) {
221 assert(!this.ignoreChanges_, 221 assert(!this.ignoreChanges_,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 * pref store as of the last update from the API. 272 * pref store as of the last update from the API.
273 * @type {Object<*>} 273 * @type {Object<*>}
274 * @private 274 * @private
275 */ 275 */
276 lastPrefValues_: { 276 lastPrefValues_: {
277 type: Object, 277 type: Object,
278 value: function() { return {}; }, 278 value: function() { return {}; },
279 }, 279 },
280 }, 280 },
281 281
282 // Listen for the manually fired prefs-changed event. 282 // Listen for the manually fired shared-prefs-changed event, fired when
283 // a shared-prefs instance is changed by another element.
283 listeners: { 284 listeners: {
284 'prefs-changed': 'prefsChanged_', 285 'shared-prefs-changed': 'sharedPrefsChanged_',
285 }, 286 },
286 287
287 /** @type {SettingsPrivate} */ 288 /** @type {SettingsPrivate} */
288 settingsApi_: /** @type {SettingsPrivate} */(chrome.settingsPrivate), 289 settingsApi_: /** @type {SettingsPrivate} */(chrome.settingsPrivate),
289 290
290 /** 291 /**
291 * @param {SettingsPrivate=} opt_settingsApi SettingsPrivate implementation 292 * @param {SettingsPrivate=} opt_settingsApi SettingsPrivate implementation
292 * to use (chrome.settingsPrivate by default). 293 * to use (chrome.settingsPrivate by default).
293 */ 294 */
294 initialize: function(opt_settingsApi) { 295 initialize: function(opt_settingsApi) {
295 // Only initialize once (or after resetForTesting() is called). 296 // Only initialize once (or after resetForTesting() is called).
296 if (this.initialized_) 297 if (this.initialized_)
297 return; 298 return;
298 this.initialized_ = true; 299 this.initialized_ = true;
299 300
300 if (opt_settingsApi) 301 if (opt_settingsApi)
301 this.settingsApi_ = opt_settingsApi; 302 this.settingsApi_ = opt_settingsApi;
302 303
303 /** @private {function(!Array<!chrome.settingsPrivate.PrefObject>)} */ 304 /** @private {function(!Array<!chrome.settingsPrivate.PrefObject>)} */
304 this.boundPrefsChanged_ = this.onSettingsPrivatePrefsChanged_.bind(this); 305 this.boundPrefsChanged_ = this.onSettingsPrivatePrefsChanged_.bind(this);
305 this.settingsApi_.onPrefsChanged.addListener(this.boundPrefsChanged_); 306 this.settingsApi_.onPrefsChanged.addListener(this.boundPrefsChanged_);
306 this.settingsApi_.getAllPrefs( 307 this.settingsApi_.getAllPrefs(
307 this.onSettingsPrivatePrefsFetched_.bind(this)); 308 this.onSettingsPrivatePrefsFetched_.bind(this));
308 }, 309 },
309 310
310 /** 311 /**
311 * Polymer callback for changes to this.prefs. 312 * Polymer callback for changes to prefs.* from a shared-prefs element.
312 * @param {!CustomEvent} e 313 * @param {!CustomEvent} e
313 * @param {!{path: string}} change 314 * @param {!{path: string}} change
314 * @private 315 * @private
315 */ 316 */
316 prefsChanged_: function(e, change) { 317 sharedPrefsChanged_: function(e, change) {
317 if (!CrSettingsPrefs.isInitialized) 318 if (!CrSettingsPrefs.isInitialized)
318 return; 319 return;
319 320
320 var key = this.getPrefKeyFromPath_(change.path); 321 var key = this.getPrefKeyFromPath_(change.path);
321 var prefStoreValue = this.lastPrefValues_[key]; 322 var prefStoreValue = this.lastPrefValues_[key];
322 323
323 var prefObj = /** @type {chrome.settingsPrivate.PrefObject} */( 324 var prefObj = /** @type {chrome.settingsPrivate.PrefObject} */(
324 this.get(key, this.prefs)); 325 this.get(key, this.prefs));
325 326
326 // If settingsPrivate already has this value, do nothing. (Otherwise, 327 // If settingsPrivate already has this value, ignore it. (Otherwise,
327 // a change event from settingsPrivate could make us call 328 // a change event from settingsPrivate could make us call
328 // settingsPrivate.setPref and potentially trigger an IPC loop.) 329 // settingsPrivate.setPref and potentially trigger an IPC loop.)
329 if (deepEqual(prefStoreValue, prefObj.value)) 330 if (!deepEqual(prefStoreValue, prefObj.value)) {
330 return; 331 this.settingsApi_.setPref(
332 key,
333 prefObj.value,
334 /* pageId */ '',
335 /* callback */ this.setPrefCallback_.bind(this, key));
336 }
331 337
332 this.settingsApi_.setPref( 338 // Package the event as a prefs-changed event for other elements.
333 key, 339 this.fire('prefs-changed', change);
334 prefObj.value,
335 /* pageId */ '',
336 /* callback */ this.setPrefCallback_.bind(this, key));
337 }, 340 },
338 341
339 /** 342 /**
340 * Called when prefs in the underlying Chrome pref store are changed. 343 * Called when prefs in the underlying Chrome pref store are changed.
341 * @param {!Array<!chrome.settingsPrivate.PrefObject>} prefs 344 * @param {!Array<!chrome.settingsPrivate.PrefObject>} prefs
342 * The prefs that changed. 345 * The prefs that changed.
343 * @private 346 * @private
344 */ 347 */
345 onSettingsPrivatePrefsChanged_: function(prefs) { 348 onSettingsPrivatePrefsChanged_: function(prefs) {
346 if (CrSettingsPrefs.isInitialized) 349 if (CrSettingsPrefs.isInitialized)
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 this.prefs = undefined; 434 this.prefs = undefined;
432 this.lastPrefValues_ = {}; 435 this.lastPrefValues_ = {};
433 this.initialized_ = false; 436 this.initialized_ = false;
434 // Remove the listener added in initialize(). 437 // Remove the listener added in initialize().
435 this.settingsApi_.onPrefsChanged.removeListener(this.boundPrefsChanged_); 438 this.settingsApi_.onPrefsChanged.removeListener(this.boundPrefsChanged_);
436 this.settingsApi_ = 439 this.settingsApi_ =
437 /** @type {SettingsPrivate} */(chrome.settingsPrivate); 440 /** @type {SettingsPrivate} */(chrome.settingsPrivate);
438 }, 441 },
439 }); 442 });
440 })(); 443 })();
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698