Fix search results being clipped in app list.
[chromium-blink-merge.git] / ui / file_manager / audio_player / js / audio_player_model.js
blob566a49e113e3eb1017af641efcbb133b26b8a245
1 // Copyright 2014 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  * The model class for audio player.
7  * @constructor
8  */
9 function AudioPlayerModel() {
10   'use strict';
12   /**
13    * List of values to be stored into the model.
14    * @type {!Object<string, *>}
15    * @const
16    */
17   var VALUES = Object.freeze(
18     /**
19      * They will be used as properties of AudioPlayerModel.
20      * @lends {AudioPlayerModel.prototype}
21      */
22     {
23       shuffle: false,
24       repeat: false,
25       volume: 100,
26       expanded: false,
27     });
29   /**
30    * Prefix of the stored values in the storage.
31    * @type {string}
32    */
33   var STORAGE_PREFIX = 'audioplayer-';
35   /**
36    * Save the values in the model into the storage.
37    * @param {AudioPlayerModel} model The model.
38    */
39   function saveModel(model) {
40     var objectToBeSaved = {};
41     for (var key in VALUES) {
42       objectToBeSaved[STORAGE_PREFIX + key] = model[key];
43     }
45     chrome.storage.local.set(objectToBeSaved);
46   };
48   /**
49    * Load the values in the model from the storage.
50    * @param {AudioPlayerModel} model The model.
51    * @param {function()} callback Called when the load is completed.
52    */
53   function loadModel(model, callback) {
54     // Restores the values from the storage
55     var objectsToBeRead = Object.keys(VALUES).
56                           map(function(a) {
57                             return STORAGE_PREFIX + a;
58                           });
60     chrome.storage.local.get(objectsToBeRead, function(result) {
61       for (var key in result) {
62         // Strips the prefix.
63         model[key.substr(STORAGE_PREFIX.length)] = result[key];
64       }
65       callback();
66     });
67   };
69   // Initializes values.
70   for (var key in VALUES) {
71     this[key] = VALUES[key];
72   }
73   Object.seal(this);
75   // Restores the values from the storage
76   var target = this;
77   loadModel(target, function() {
78     // Installs observer to watch changes of the values.
79     Object.observe(target, function(changes) {
80       saveModel(target);
81     });
82   });