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; |
}()); |