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