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..f0423cf818d18f8c148fe6a12dc654621413c86d 100644 |
--- a/content/browser/resources/media/new/main.js |
+++ b/content/browser/resources/media/new/main.js |
@@ -9,6 +9,18 @@ var media = (function() { |
'use strict'; |
var manager_ = null; |
+ var eventPhases_ = {}; |
scherkus (not reviewing)
2013/09/04 23:20:53
can we get some short comments describing what eac
Ty Overby
2013/09/05 21:01:02
Done.
|
+ var eventTypes_ = {}; |
+ |
+ var cacheEntries_ = {}; |
+ 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 +35,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': |
scherkus (not reviewing)
2013/09/04 23:20:53
case statements should be indented by 2 more space
Ty Overby
2013/09/05 21:01:02
Done.
|
+ 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 +177,6 @@ var media = (function() { |
} |
}; |
+ chrome.send('getEverything'); |
return media; |
}()); |