Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(108)

Unified Diff: chrome/test/data/extensions/platform_apps/web_view/clear_data_cache/embedder.js

Issue 1056793002: Move clear cache code from chrome/ (ChromeWVGDelegate) to extensions/ (WVGuest) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move-spbdr
Patch Set: fix test on windows Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
});
});

Powered by Google App Engine
This is Rietveld 408576698