Chromium Code Reviews| 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..8f342e926b95db9db28eeb26d87ffeb04ba4e614 100644 |
| --- a/content/browser/resources/media/new/main.js |
| +++ b/content/browser/resources/media/new/main.js |
| @@ -10,6 +10,26 @@ var media = (function() { |
| 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_ = {}; |
|
scherkus (not reviewing)
2013/09/06 18:16:47
nit: add blink line after this line (you've got th
Ty Overby
2013/09/06 19:56:37
Done.
|
| + // A mapping of url->CacheEntity where the url is the url of the resource. |
| + var cacheEntriesByKey_ = {}; |
| + |
| + var requestURLs_ = {}; |
| + |
| + var media = { |
| + BAR_WIDTH: 200, |
| + BAR_HEIGHT: 25 |
| + }; |
| + |
| /** |
| * Users of |media| must call initialize prior to calling other methods. |
| */ |
| @@ -23,8 +43,74 @@ 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': |
| + requestURLs_[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 = requestURLs_[update.source.id]; |
| + delete requestURLs_[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) { |
| @@ -99,5 +185,6 @@ var media = (function() { |
| } |
| }; |
| + chrome.send('getEverything'); |
| return media; |
| }()); |