Index: LayoutTests/http/tests/inspector/cache-storage/cache-storage-test.js |
diff --git a/LayoutTests/http/tests/inspector/cache-storage/cache-storage-test.js b/LayoutTests/http/tests/inspector/cache-storage/cache-storage-test.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b3153b456467ce5b52c8753c456aca7b3eb9ff79 |
--- /dev/null |
+++ b/LayoutTests/http/tests/inspector/cache-storage/cache-storage-test.js |
@@ -0,0 +1,190 @@ |
+var initialize_CacheStorageTest = function() { |
pfeldman
2015/04/10 12:35:33
Copyright, please also use Blink coding guidelines
dmurph
2015/04/13 18:23:03
Done.
|
+InspectorTest.preloadPanel("resources"); |
+ |
+// ###### CALLBACK SUPPORT ###### |
+var lastCallbackId = 0; |
pfeldman
2015/04/10 12:35:33
Section below is cryptic.
dmurph
2015/04/13 18:23:03
Removed
|
+var callbacks = {}; |
+var callbackIdPrefix = "InspectorTest.CacheStorage_callback"; |
+var resolveId = "Resolve"; |
+var rejectId = "Reject"; |
+ |
+var generatePromiseCallbackCalls = function(callbackId) { |
+ return "dispatchCallback.bind(this, \"" + callbackIdPrefix + callbackId + resolveId + "\"), dispatchCallback.bind(this, \"" + callbackIdPrefix + callbackId + rejectId + "\")"; |
+} |
+ |
+var getAndDeleteCallbackFromId = function(callbackId) { |
pfeldman
2015/04/10 12:35:33
Lets move InspectorTest.evaluateWithPromise along
dmurph
2015/04/13 18:23:03
Done, as 'invokePageFunctionPromise'
|
+ callbackId = callbackId.substring(callbackIdPrefix.length); |
+ var resolve = callbackId.indexOf(resolveId) !== -1; |
+ console.assert(resolve || callbackId.indexOf(rejectId) !== -1); |
+ var sizeOffEnd = resolve ? resolveId.length : rejectId.length; |
+ callbackId = callbackId.substring(0, callbackId.length - sizeOffEnd); |
+ var callbackOptions = callbacks[callbackId]; |
+ var callback = resolve ? callbackOptions.resolve : callbackOptions.reject; |
+ delete callbacks[callbackId]; |
+ return callback; |
+} |
+ |
+InspectorTest.evaluateWithPromise = function(frameId, methodName, parameters) |
+{ |
+ return new Promise(function(resolve, reject) { |
+ InspectorTest._cacheStorageSniffer(); |
+ var callbackId = ++lastCallbackId; |
+ callbacks[callbackId] = { 'resolve': resolve, 'reject': reject }; |
+ var parametersString = generatePromiseCallbackCalls(callbackId); |
+ for (var i = 0; i < parameters.length; ++i) |
+ parametersString += ", " + JSON.stringify(parameters[i]); |
+ var requestString = methodName + "(" + parametersString + ")"; |
+ InspectorTest.evaluateInPage(requestString); |
+ }); |
+}; |
pfeldman
2015/04/10 12:35:33
drop ;
dmurph
2015/04/13 18:23:03
Done.
|
+ |
+InspectorTest._cacheStorageSniffer = function() |
+{ |
+ InspectorTest.addConsoleSniffer(consoleMessageOverride, false); |
+ function consoleMessageOverride(msg) |
+ { |
+ var text = msg.messageText; |
+ if (!text.startsWith(callbackIdPrefix)) { |
+ InspectorTest.addConsoleSniffer(consoleMessageOverride, false); |
+ return; |
+ } |
+ var callback = getAndDeleteCallbackFromId(text); |
+ callback.call(); |
+ } |
+}; |
+ |
+// ###### INSPECTOR STATE AND OPERATIONS ###### |
+ |
+InspectorTest.dumpCacheTree = function() |
+{ |
+ WebInspector.panels.resources.cacheStorageListTreeElement.expand(); |
+ InspectorTest.addResult("Dumping CacheStorage tree:"); |
+ var cachesTreeElement = WebInspector.panels.resources.cacheStorageListTreeElement; |
+ var promise = new Promise(function(resolve, reject) { |
+ InspectorTest.addSnifferPromise(WebInspector.ServiceWorkerCacheModel.prototype, "_updateCacheNames").then(function() { |
+ if (!cachesTreeElement.childCount()) { |
+ InspectorTest.addResult(" (empty)"); |
+ return resolve(); |
+ } |
+ function queryView(i) { |
+ var cacheTreeElement = cachesTreeElement.childAt(i); |
+ InspectorTest.addResult(" cache: " + cacheTreeElement.titleText); |
+ function nextOrResolve() { |
+ var next = i + 1; |
+ if (next < cachesTreeElement.childCount()) { |
+ queryView(next); |
+ } else { |
+ resolve(); |
+ } |
+ } |
+ function addDataResult() { |
+ if (view._entries.length == 0) { |
+ InspectorTest.addResult(" (cache empty)"); |
+ nextOrResolve(); |
+ return; |
+ } |
+ for (var entry of view._entries) { |
+ InspectorTest.addResult(" '" + entry.request._value + "': '" + entry.response._value + "'"); |
+ } |
+ nextOrResolve(); |
+ } |
+ var view = cacheTreeElement._view; |
+ InspectorTest.addSniffer(WebInspector.ServiceWorkerCacheView.prototype, "_updateDataCallback", addDataResult, false); |
+ if (!view) { |
pfeldman
2015/04/10 12:35:33
no {}
dmurph
2015/04/13 18:23:03
Done.
|
+ cacheTreeElement.onselect(false); |
+ } else { |
+ view._updateData(true); |
+ } |
+ view = cacheTreeElement._view; |
+ } |
+ WebInspector.panels.resources.cacheStorageListTreeElement._refreshCaches(); |
+ queryView(0); |
+ }).catch(reject); |
+ }); |
+ WebInspector.panels.resources.cacheStorageListTreeElement._refreshCaches(); |
+ return promise; |
+} |
+ |
+InspectorTest.deleteCacheFromInspector = function(cacheName) { |
+ WebInspector.panels.resources.cacheStorageListTreeElement.expand(); |
+ InspectorTest.addResult("Deleting CacheStorage cache " + cacheName); |
+ var cachesTreeElement = WebInspector.panels.resources.cacheStorageListTreeElement; |
+ var promise = new Promise(function(resolve, reject) { |
+ InspectorTest.addSnifferPromise(WebInspector.ServiceWorkerCacheModel.prototype, "_updateCacheNames").then(function() { |
+ if (!cachesTreeElement.childCount()) { |
+ return resolve(); |
+ } |
+ for (var i = 0; i < cachesTreeElement.childCount(); i++) { |
+ var cacheTreeElement = cachesTreeElement.childAt(i); |
+ var title = cacheTreeElement.titleText; |
+ var elementCacheName = title.substring(0, title.lastIndexOf(" - ")); |
+ if (elementCacheName != cacheName) { |
+ continue; |
+ } |
+ InspectorTest.addSniffer(WebInspector.ServiceWorkerCacheModel.prototype, "_cacheRemoved", resolve) |
+ cacheTreeElement._clearCache(); |
+ return; |
+ } |
+ console.error("Could not find cache to delete."); |
+ reject(); |
+ }).catch(reject); |
+ }); |
+ WebInspector.panels.resources.cacheStorageListTreeElement._refreshCaches(); |
+ return promise; |
+} |
+ |
+//###### CACHE STORAGE OPERATIONS ###### |
+ |
+InspectorTest.createCache = function(frameId, cacheName) |
+{ |
+ return InspectorTest.evaluateWithPromise(frameId, "createCache", [cacheName]); |
+}; |
+ |
+InspectorTest.addCacheEntry = function(frameId, cacheName, requestUrl, responseText) |
+{ |
+ return InspectorTest.evaluateWithPromise(frameId, "addCacheEntry", [cacheName, requestUrl, responseText]); |
+}; |
+ |
+InspectorTest.deleteCache = function(frameId, cacheName) |
+{ |
+ return InspectorTest.evaluateWithPromise(frameId, "deleteCache", [cacheName]); |
+}; |
+}; |
+ |
+function dispatchCallback(callbackId) |
+{ |
+ console.log(callbackId); |
pfeldman
2015/04/10 12:35:33
InspectorTest.addResult
dmurph
2015/04/13 18:23:03
Removed.
|
+} |
+ |
+function onCacheStorageError(reject, e) |
+{ |
+ console.error("CacheStorage error: " + e); |
+ reject(); |
+} |
+ |
+function createCache(resolve, reject, cacheName) |
+{ |
+ caches.open(cacheName).then(resolve).catch(onCacheStorageError.bind(this, reject)); |
+} |
+ |
+function addCacheEntry(resolve, reject, cacheName, requestUrl, responseText) |
+{ |
+ caches.open(cacheName).then(function(cache) { |
+ var request = new Request(requestUrl); |
+ var myBlob = new Blob(); |
+ var init = { "status" : 200 , "statusText" : responseText }; |
+ var response = new Response(myBlob, init); |
+ return cache.put(request, response); |
+ }).then(resolve) |
+ .catch(onCacheStorageError.bind(this, reject)); |
+} |
+ |
+function deleteCache(resolve, reject, cacheName) { |
+ caches.delete(cacheName).then(function(success) { |
+ if (success) { |
+ resolve(); |
+ } else { |
+ onCacheStorageError(reject, "Could not find cache " + cacheName); |
+ } |
+ }).catch(onCacheStorageError.bind(this, reject));; |
+} |