Index: chrome/test/data/extensions/platform_apps/web_view/clear_data_cache/embedder.js |
diff --git a/chrome/test/data/extensions/platform_apps/web_view/clear_data_cache/embedder.js b/chrome/test/data/extensions/platform_apps/web_view/clear_data_cache/embedder.js |
index 435c5cb29933199873e0fdb1f14f242429f32fa1..5d41fa50131c989f370e23b724a698cc69b2e905 100644 |
--- a/chrome/test/data/extensions/platform_apps/web_view/clear_data_cache/embedder.js |
+++ b/chrome/test/data/extensions/platform_apps/web_view/clear_data_cache/embedder.js |
@@ -2,7 +2,9 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-var LOG = function(msg) { window.console.log(msg); }; |
+var LOG = function(var_args) { |
+ window.console.log(Array.prototype.slice.call(arguments)); |
+}; |
function ClearDataTester() { |
this.webview_ = null; |
@@ -19,62 +21,123 @@ function ClearDataTester() { |
ClearDataTester.prototype.setWebview = function(webview) { |
this.webview_ = webview; |
+ this.webview_.onconsolemessage = this.onGuestConsoleMessage_.bind(this); |
+}; |
+ |
+ClearDataTester.prototype.onGuestConsoleMessage_ = function(e) { |
+ LOG('G:', e.message); |
+ if (e.message == 'ERROR') { |
+ this.fail(); |
+ } |
}; |
+ClearDataTester.prototype.requestXhrFromWebView_ = function() { |
+ var msg = ['sendXhr']; |
+ this.webview_.contentWindow.postMessage(JSON.stringify(msg), '*'); |
+}; |
+ |
+ClearDataTester.prototype.fail = function() { |
+ chrome.test.sendMessage('TEST_FAILED'); |
+}; |
+ |
+ClearDataTester.prototype.pass = function() { |
+ chrome.test.sendMessage('TEST_PASSED'); |
+}; |
+ |
+// This test instructs a <webview> to load same resource request via xhr |
+// multiple times. That makes some of those requests to be served from |
+// http cache. |
+// Calling clearData{cache: true} resets the cache and next request |
+// from the same resource should not be served from cache. |
ClearDataTester.prototype.testClearDataCache = function() { |
- this.webview_.clearData( |
- {since: 10}, {"cache": true}, function doneCallback() { |
- LOG('clearData done'); |
- chrome.test.sendMessage('WebViewTest.CLEAR_DATA_DONE'); |
- }); |
+ // Request same resource multiple times from <webview>, latter |
+ // ones would be served from cache. |
+ var responseCount = 0; |
+ var servedFromCacheCount = 0; |
+ |
+ var responseStartedHandler = function(details) { |
+ LOG('onResponseStarted, url:', details.url, |
+ 'fromCache:', details.fromCache); |
+ if (details.url.indexOf('/cache-control-response') == -1) { |
+ return; |
+ } |
+ |
+ ++responseCount; |
+ if (details.fromCache) { |
+ ++servedFromCacheCount; |
+ } |
+ |
+ if (responseCount == 5) { |
+ // We should see some request getting served from cache. |
+ if (servedFromCacheCount <= 0) { |
+ this.fail(); |
+ return; |
+ } |
+ |
+ // Clear cache from <webview>. |
+ this.webview_.clearData( |
+ {since: 10}, {'cache': true}, function doneCallback() { |
+ LOG('clearData done'); |
+ this.requestXhrFromWebView_(); |
+ // Now request the same resource again, this time it should |
+ // not be served from cache. |
+ this.requestXhrFromWebView_(); |
+ }.bind(this)); |
+ } else if (responseCount == 6) { |
+ if (details.fromCache) { |
+ // Response received after clearData should not be served from cache. |
+ this.fail(); |
+ } else { |
+ this.pass(); |
+ } |
+ } |
+ }.bind(this); |
+ |
+ this.webview_.request.onResponseStarted.addListener( |
+ responseStartedHandler, {urls: ['<all_urls>']}); |
+ |
+ for (var i = 0; i < 5; ++i) { |
+ this.requestXhrFromWebView_(); |
+ } |
}; |
var tester = new ClearDataTester(); |
// window.* exported functions begin. |
-window.testClearDataCache = function() { |
- LOG('window.testClearDataCache'); |
- tester.testClearDataCache(); |
+window.runTest = function(testName) { |
+ switch (testName) { |
+ case 'testClearCache': |
+ tester.testClearDataCache(); |
+ break; |
+ default: |
+ LOG('curious test to run:', testName); |
+ tester.fail(); |
+ break; |
+ } |
}; |
// window.* exported functions end. |
-function setUpTest(messageCallback) { |
- var guestUrl = 'data:text/html,<html><body>guest</body></html>'; |
+function setUpTest(guestURL, doneCallback) { |
var webview = document.createElement('webview'); |
webview.onloadstop = function(e) { |
LOG('webview has loaded.'); |
- webview.executeScript( |
- {file: 'guest.js'}, |
- function(results) { |
- if (!results || !results.length) { |
- chrome.test.sendMessage('WebViewTest.FAILURE'); |
- return; |
- } |
- LOG('Script has been injected into webview.'); |
- // Establish a communication channel with the guest. |
- var msg = ['connect']; |
- webview.contentWindow.postMessage(JSON.stringify(msg), '*'); |
- }); |
+ doneCallback(webview); |
}; |
- window.addEventListener('message', function(e) { |
- var data = JSON.parse(e.data); |
- if (data[0] == 'connected') { |
- console.log('A communication channel has been established with webview.'); |
- } |
- messageCallback(webview); |
- }); |
- |
- webview.setAttribute('src', guestUrl); |
+ webview.setAttribute('src', guestURL); |
document.body.appendChild(webview); |
} |
onload = function() { |
chrome.test.getConfig(function(config) { |
- setUpTest(function(webview) { |
+ LOG('config: ' + config.testServer.port); |
+ var guestURL = 'http://localhost:' + config.testServer.port + |
+ '/extensions/platform_apps/web_view/clear_data_cache/guest.html'; |
+ setUpTest(guestURL, function(webview) { |
LOG('Guest load completed.'); |
- chrome.test.sendMessage('WebViewTest.LAUNCHED'); |
+ //chrome.test.sendMessage('WebViewTest.LAUNCHED'); |
+ chrome.test.sendMessage('Launched'); |
tester.setWebview(webview); |
}); |
}); |