 Chromium Code Reviews
 Chromium Code Reviews Issue 20804002:
  Added the next series of files that go into media-internals.  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master
    
  
    Issue 20804002:
  Added the next series of files that go into media-internals.  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master| Index: content/browser/resources/media/new/main.js | 
| diff --git a/content/browser/resources/media/new/main.js b/content/browser/resources/media/new/main.js | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..00efdf235e30208a55b362a77efd94c9e676b1a6 | 
| --- /dev/null | 
| +++ b/content/browser/resources/media/new/main.js | 
| @@ -0,0 +1,132 @@ | 
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +/** | 
| + * A global object that gets used by the C++ interface. | 
| + */ | 
| +var media = (function() { | 
| + 'use strict'; | 
| + | 
| + var doNothing = function() { | 
| + }; | 
| + var mockRenderManager = { | 
| + redrawList: doNothing, | 
| + update: doNothing, | 
| + select: doNothing | 
| + }; | 
| + | 
| + var manager = new PlayerManager((typeof RenderManager !== 'undefined') ? | 
| + new RenderManager : mockRenderManager); | 
| 
scherkus (not reviewing)
2013/07/29 20:35:54
this is a very subtle way of injecting a mock that
 
Ty Overby
2013/07/29 21:53:31
Because RenderManager depends on every "yet to be
 | 
| + | 
| + /** | 
| + * Call to modify or add a system property | 
| 
scherkus (not reviewing)
2013/07/29 20:35:54
periods on comments here + below
 
Ty Overby
2013/07/29 21:53:31
Done.
 | 
| + */ | 
| + function onSystemProperty(timestamp, key, value) { | 
| + console.log('System properties not yet implemented'); | 
| + } | 
| + | 
| + /** | 
| + * Call to modify or add a property on a player | 
| + */ | 
| + function onPlayerProperty(id, timestamp, key, value) { | 
| + manager.updatePlayerInfo(id, timestamp, key, value); | 
| + } | 
| + | 
| + function onPlayerPropertyNoRecord(id, timestamp, key, value) { | 
| + manager.updatePlayerInfoNoRecord(id, timestamp, key, value); | 
| + } | 
| + | 
| + /** | 
| + * Call to add a player. | 
| + */ | 
| + function onPlayerOpen(id, timestamp) { | 
| + manager.addPlayer(id, timestamp); | 
| + } | 
| + | 
| + /** | 
| + * Call to remove a player. | 
| + */ | 
| + function onPlayerClose(id) { | 
| + manager.removePlayer(id); | 
| + } | 
| + | 
| + var media = { | 
| + onSystemProperty: onSystemProperty, | 
| + onPlayerProperty: onPlayerProperty, | 
| + onPlayerPropertyNoRecord: onPlayerPropertyNoRecord, | 
| + onPlayerOpen: onPlayerOpen, | 
| + onPlayerClose: onPlayerClose, | 
| + manager: manager | 
| + }; | 
| + | 
| + // Everything beyond this point is for backwards | 
| 
scherkus (not reviewing)
2013/07/29 20:35:54
try to use more chars per-line (up to 80) if you c
 
Ty Overby
2013/07/29 21:53:31
Done.
 | 
| + // compatibility reasons. It will go away when | 
| + // the backend is updated. | 
| + | 
| + media.onNetUpdate = function(update) { | 
| + // TODO(tyoverby): Implement | 
| + }; | 
| + | 
| + media.onRendererTerminated = function(renderId) { | 
| + goog.object.forEach(manager.players_, function(playerInfo, id) { | 
| + if (playerInfo.properties['render_id'] == renderId) { | 
| + media.onPlayerClose(id); | 
| + } | 
| + }); | 
| + }; | 
| + | 
| + // For whatever reason, addAudioStream is also called on | 
| + // the removal of audio streams. | 
| + media.addAudioStream = function(event) { | 
| + switch (event.status) { | 
| + case 'created': | 
| + media.onPlayerOpen(event.id); | 
| + // We have to simulate the timestamp since | 
| + // it isn't provided to us. | 
| + media.onPlayerProperty(event.id, (new Date()).getTime(), | 
| + 'playing', event.playing); | 
| 
scherkus (not reviewing)
2013/07/29 20:35:54
indentation for any continued line gets either:
 | 
| + break; | 
| + case 'closed': | 
| + media.onPlayerClose(event.id); | 
| + break; | 
| + } | 
| + }; | 
| + media.onItemDeleted = function() { | 
| + // This only gets called when an audio stream is removed, which | 
| + // for whatever reason is also handled by addAudioStream... | 
| + // Because it is already handled, we can safely ignore it. | 
| + }; | 
| + | 
| + media.onMediaEvent = function(event) { | 
| + var source = event.renderer + ':' + event.player; | 
| + | 
| + // Although this gets called on every event, there | 
| + // is nothing we can do about this because there is no onOpen event. | 
| + media.onPlayerOpen(source); | 
| + media.onPlayerPropertyNoRecord(source, event.ticksMillis, 'render_id', | 
| + event.renderer); | 
| 
scherkus (not reviewing)
2013/07/29 20:35:54
ditto
 
Ty Overby
2013/07/29 21:53:31
Done.
 | 
| + media.onPlayerPropertyNoRecord(source, event.ticksMillis, 'player_id', | 
| + event.player); | 
| 
scherkus (not reviewing)
2013/07/29 20:35:54
ditto
 
Ty Overby
2013/07/29 21:53:31
Done.
 | 
| + | 
| + var propertyCount = 0; | 
| + goog.object.forEach(event.params, function(value, key) { | 
| + key = key.trim(); | 
| + if (key === 'buffer_start' || key === 'buffer_end' || | 
| + key === 'buffer_current' || key === 'is_downloading_data') { | 
| 
scherkus (not reviewing)
2013/07/29 20:35:54
same style rules apply here - this should be align
 
Ty Overby
2013/07/29 21:53:31
Done.
 | 
| + media.onPlayerPropertyNoRecord(source, event.ticksMillis, key, | 
| + value); | 
| + } else { | 
| + media.onPlayerProperty(source, event.ticksMillis, key, value); | 
| + } | 
| + propertyCount += 1; | 
| + }); | 
| + | 
| + if (propertyCount === 0) { | 
| + media.onPlayerProperty(source, event.ticksMillis, 'EVENT', | 
| + event.type); | 
| 
scherkus (not reviewing)
2013/07/29 20:35:54
ditto
 
Ty Overby
2013/07/29 21:53:31
Done.
 | 
| + } | 
| + }; | 
| + | 
| + return media; | 
| +}()); |