- add sources.
[platform/framework/web/crosswalk.git] / src / content / browser / resources / media / manager.js
1 // Copyright 2013 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.
4
5 /**
6  * @fileoverview Keeps track of all the existing PlayerInfo and
7  * audio stream objects and is the entry-point for messages from the backend.
8  *
9  * The events captured by Manager (add, remove, update) are relayed
10  * to the clientRenderer which it can choose to use to modify the UI.
11  */
12 var Manager = (function() {
13   'use strict';
14
15   function Manager(clientRenderer) {
16     this.players_ = {};
17     this.audioStreams_ = {};
18     this.clientRenderer_ = clientRenderer;
19   }
20
21   Manager.prototype = {
22     /**
23      * Adds an audio-stream to the dictionary of audio-streams to manage.
24      * @param id The unique-id of the audio-stream.
25      */
26     addAudioStream: function(id) {
27       this.audioStreams_[id] = this.audioStreams_[id] || {};
28       this.clientRenderer_.audioStreamAdded(this.audioStreams_,
29                                             this.audioStreams_[id]);
30     },
31
32     /**
33      * Sets properties of an audiostream.
34      * @param id The unique-id of the audio-stream.
35      * @param properties A dictionary of properties to be added to the
36      * audio-stream.
37      */
38     updateAudioStream: function(id, properties) {
39       for (var key in properties) {
40         this.audioStreams_[id][key] = properties[key];
41       }
42       this.clientRenderer_.audioStreamAdded(
43           this.audioStreams_, this.audioStreams_[id]);
44     },
45
46     /**
47      * Removes an audio-stream from the manager.
48      * @param id The unique-id of the audio-stream.
49      */
50     removeAudioStream: function(id) {
51       this.clientRenderer_.audioStreamRemoved(
52           this.audioStreams_, this.audioStreams_[id]);
53       delete this.audioStreams_[id];
54     },
55
56
57     /**
58      * Adds a player to the list of players to manage.
59      */
60     addPlayer: function(id) {
61       if (this.players_[id]) {
62         return;
63       }
64       // Make the PlayerProperty and add it to the mapping
65       this.players_[id] = new PlayerInfo(id);
66       this.clientRenderer_.playerAdded(this.players_, this.players_[id]);
67     },
68
69     /**
70      * Attempts to remove a player from the UI.
71      * @param id The ID of the player to remove.
72      */
73     removePlayer: function(id) {
74       delete this.players_[id];
75       this.clientRenderer_.playerRemoved(this.players_, this.players_[id]);
76     },
77
78     updatePlayerInfoNoRecord: function(id, timestamp, key, value) {
79       if (!this.players_[id]) {
80         console.error('[updatePlayerInfo] Id ' + id + ' does not exist');
81         return;
82       }
83
84       this.players_[id].addPropertyNoRecord(timestamp, key, value);
85       this.clientRenderer_.playerUpdated(this.players_,
86                                          this.players_[id],
87                                          key,
88                                          value);
89     },
90
91     /**
92      *
93      * @param id The unique ID that identifies the player to be updated.
94      * @param timestamp The timestamp of when the change occured.  This
95      * timestamp is *not* normalized.
96      * @param key The name of the property to be added/changed.
97      * @param value The value of the property.
98      */
99     updatePlayerInfo: function(id, timestamp, key, value) {
100       if (!this.players_[id]) {
101         console.error('[updatePlayerInfo] Id ' + id + ' does not exist');
102         return;
103       }
104
105       this.players_[id].addProperty(timestamp, key, value);
106       this.clientRenderer_.playerUpdated(this.players_,
107                                          this.players_[id],
108                                          key,
109                                          value);
110     }
111   };
112
113   return Manager;
114 }());