| 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
|
| index 85cdd3aba1fe5442dd2983dd79dde34d466814d3..14b9918a2de419ab870ec0b89f3a016b7b431ecf 100644
|
| --- a/content/browser/resources/media/new/main.js
|
| +++ b/content/browser/resources/media/new/main.js
|
| @@ -8,13 +8,35 @@
|
| var media = (function() {
|
| 'use strict';
|
|
|
| - var manager_ = null;
|
| + var manager = null;
|
| +
|
| + // A number->string mapping that is populated through the backend that
|
| + // describes the phase that the network entity is in.
|
| + var eventPhases = {};
|
| +
|
| + // A number->string mapping that is populated through the backend that
|
| + // describes the type of event sent from the network.
|
| + var eventTypes = {};
|
| +
|
| + // A mapping of number->CacheEntry where the number is a unique id for that
|
| + // network request.
|
| + var cacheEntries = {};
|
| +
|
| + // A mapping of url->CacheEntity where the url is the url of the resource.
|
| + var cacheEntriesByKey = {};
|
| +
|
| + var requrestURLs = {};
|
| +
|
| + var media = {
|
| + BAR_WIDTH: 200,
|
| + BAR_HEIGHT: 25
|
| + };
|
|
|
| /**
|
| * Users of |media| must call initialize prior to calling other methods.
|
| */
|
| - media.initialize = function(manager) {
|
| - manager_ = manager;
|
| + media.initialize = function(theManager) {
|
| + manager = theManager;
|
| };
|
|
|
| media.onReceiveEverything = function(everything) {
|
| @@ -23,14 +45,80 @@ var media = (function() {
|
| }
|
| };
|
|
|
| - media.onNetUpdate = function(update) {
|
| - // TODO(tyoverby): Implement
|
| + media.onReceiveConstants = function(constants) {
|
| + for (var key in constants.eventTypes) {
|
| + var value = constants.eventTypes[key];
|
| + eventTypes[value] = key;
|
| + }
|
| +
|
| + for (var key in constants.eventPhases) {
|
| + var value = constants.eventPhases[key];
|
| + eventPhases[value] = key;
|
| + }
|
| + };
|
| +
|
| + media.cacheForUrl = function(url) {
|
| + return cacheEntriesByKey[url];
|
| + };
|
| +
|
| + media.onNetUpdate = function(updates) {
|
| + updates.forEach(function(update) {
|
| + var id = update.source.id;
|
| + if (!cacheEntries[id])
|
| + cacheEntries[id] = new media.CacheEntry;
|
| +
|
| + switch (eventPhases[update.phase] + '.' + eventTypes[update.type]) {
|
| + case 'PHASE_BEGIN.DISK_CACHE_ENTRY_IMPL':
|
| + var key = update.params.key;
|
| +
|
| + // Merge this source with anything we already know about this key.
|
| + if (cacheEntriesByKey[key]) {
|
| + cacheEntriesByKey[key].merge(cacheEntries[id]);
|
| + cacheEntries[id] = cacheEntriesByKey[key];
|
| + } else {
|
| + cacheEntriesByKey[key] = cacheEntries[id];
|
| + }
|
| + cacheEntriesByKey[key].key = key;
|
| + break;
|
| +
|
| + case 'PHASE_BEGIN.SPARSE_READ':
|
| + cacheEntries[id].readBytes(update.params.offset,
|
| + update.params.buff_len);
|
| + cacheEntries[id].sparse = true;
|
| + break;
|
| +
|
| + case 'PHASE_BEGIN.SPARSE_WRITE':
|
| + cacheEntries[id].writeBytes(update.params.offset,
|
| + update.params.buff_len);
|
| + cacheEntries[id].sparse = true;
|
| + break;
|
| +
|
| + case 'PHASE_BEGIN.URL_REQUEST_START_JOB':
|
| + requrestURLs[update.source.id] = update.params.url;
|
| + break;
|
| +
|
| + case 'PHASE_NONE.HTTP_TRANSACTION_READ_RESPONSE_HEADERS':
|
| + // Record the total size of the file if this was a range request.
|
| + var range = /content-range:\s*bytes\s*\d+-\d+\/(\d+)/i.exec(
|
| + update.params.headers);
|
| + var key = requrestURLs[update.source.id];
|
| + delete requrestURLs[update.source.id];
|
| + if (range && key) {
|
| + if (!cacheEntriesByKey[key]) {
|
| + cacheEntriesByKey[key] = new media.CacheEntry;
|
| + cacheEntriesByKey[key].key = key;
|
| + }
|
| + cacheEntriesByKey[key].size = range[1];
|
| + }
|
| + break;
|
| + }
|
| + });
|
| };
|
|
|
| media.onRendererTerminated = function(renderId) {
|
| - util.object.forEach(manager_.players_, function(playerInfo, id) {
|
| + util.object.forEach(manager.players_, function(playerInfo, id) {
|
| if (playerInfo.properties['render_id'] == renderId) {
|
| - manager_.removePlayer(id);
|
| + manager.removePlayer(id);
|
| }
|
| });
|
| };
|
| @@ -40,18 +128,18 @@ var media = (function() {
|
| media.addAudioStream = function(event) {
|
| switch (event.status) {
|
| case 'created':
|
| - manager_.addAudioStream(event.id);
|
| - manager_.updateAudioStream(event.id, { 'playing': event.playing });
|
| + manager.addAudioStream(event.id);
|
| + manager.updateAudioStream(event.id, { 'playing': event.playing });
|
| break;
|
| case 'closed':
|
| - manager_.removeAudioStream(event.id);
|
| + manager.removeAudioStream(event.id);
|
| break;
|
| }
|
| };
|
|
|
| media.updateAudioStream = function(stream) {
|
| - manager_.addAudioStream(stream.id);
|
| - manager_.updateAudioStream(stream.id, stream);
|
| + manager.addAudioStream(stream.id);
|
| + manager.updateAudioStream(stream.id, stream);
|
| };
|
|
|
| media.onItemDeleted = function() {
|
| @@ -61,7 +149,7 @@ var media = (function() {
|
| };
|
|
|
| media.onPlayerOpen = function(id, timestamp) {
|
| - manager_.addPlayer(id, timestamp);
|
| + manager.addPlayer(id, timestamp);
|
| };
|
|
|
| media.onMediaEvent = function(event) {
|
| @@ -70,9 +158,9 @@ var media = (function() {
|
| // Although this gets called on every event, there is nothing we can do
|
| // because there is no onOpen event.
|
| media.onPlayerOpen(source);
|
| - manager_.updatePlayerInfoNoRecord(
|
| + manager.updatePlayerInfoNoRecord(
|
| source, event.ticksMillis, 'render_id', event.renderer);
|
| - manager_.updatePlayerInfoNoRecord(
|
| + manager.updatePlayerInfoNoRecord(
|
| source, event.ticksMillis, 'player_id', event.player);
|
|
|
| var propertyCount = 0;
|
| @@ -85,19 +173,23 @@ var media = (function() {
|
| key === 'buffer_end' ||
|
| key === 'buffer_current' ||
|
| key === 'is_downloading_data') {
|
| - manager_.updatePlayerInfoNoRecord(
|
| + manager.updatePlayerInfoNoRecord(
|
| source, event.ticksMillis, key, value);
|
| } else {
|
| - manager_.updatePlayerInfo(source, event.ticksMillis, key, value);
|
| + manager.updatePlayerInfo(source, event.ticksMillis, key, value);
|
| }
|
| propertyCount += 1;
|
| });
|
|
|
| if (propertyCount === 0) {
|
| - manager_.updatePlayerInfo(
|
| + manager.updatePlayerInfo(
|
| source, event.ticksMillis, 'EVENT', event.type);
|
| }
|
| };
|
|
|
| + // |chrome| is not defined during tests.
|
| + if (window.chrome && window.chrome.send) {
|
| + chrome.send('getEverything');
|
| + }
|
| return media;
|
| }());
|
|
|