| Index: chrome/test/data/webui/net_internals/sdch_view.js
|
| diff --git a/chrome/test/data/webui/net_internals/sdch_view.js b/chrome/test/data/webui/net_internals/sdch_view.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cba9eed2df4b279754f016893e0b5770b40ed467
|
| --- /dev/null
|
| +++ b/chrome/test/data/webui/net_internals/sdch_view.js
|
| @@ -0,0 +1,223 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// Include test fixture.
|
| +GEN_INCLUDE(['net_internals_test.js']);
|
| +
|
| +// Anonymous namespace
|
| +(function() {
|
| +
|
| +// Path to the page containing iframe. Iframe is used to load sdch-related
|
| +// content from the different origin. Otherwise favicon requests for the main
|
| +// page domain would spoil SDCH blacklists counters making test behavior hardly
|
| +// predicatble.
|
| +var BASE_PATH = 'files/sdch/base-page.html?iframe_url=';
|
| +
|
| +/**
|
| + * Checks the display on the SDCH tab against the information it should be
|
| + * displaying.
|
| + * @param {object} sdchInfo Results from a sdch manager info query.
|
| + */
|
| +function checkDisplay(sdchInfo) {
|
| + expectEquals(sdchInfo.sdch_enabled,
|
| + $(SdchView.SDCH_ENABLED_SPAN_ID).innerText === 'true');
|
| + expectEquals(sdchInfo.secure_scheme_support,
|
| + $(SdchView.SECURE_SCHEME_SUPPORT_SPAN_ID).innerText === 'true');
|
| + NetInternalsTest.checkTbodyRows(SdchView.BLACKLIST_TBODY_ID,
|
| + sdchInfo.blacklisted.length);
|
| + NetInternalsTest.checkTbodyRows(SdchView.DICTIONARIES_TBODY_ID,
|
| + sdchInfo.dictionaries.length);
|
| +
|
| + // Rather than check the exact string in every position, just make sure every
|
| + // entry does not have 'undefined' anywhere and certain entries are not empty,
|
| + // which should find a fair number of potential output errors.
|
| + for (var row = 0; row < sdchInfo.blacklisted.length; ++row) {
|
| + for (var column = 0; column < 3; ++column) {
|
| + var text = NetInternalsTest.getTbodyText(
|
| + SdchView.BLACKLIST_TBODY_ID, row, column);
|
| + expectNotEquals(text, '');
|
| + expectFalse(/undefined/i.test(text));
|
| + }
|
| + }
|
| +
|
| +
|
| + for (var row = 0; row < sdchInfo.dictionaries.length; ++row) {
|
| + for (var column = 0; column < 6; ++column) {
|
| + var text = NetInternalsTest.getTbodyText(
|
| + SdchView.DICTIONARIES_TBODY_ID, row, column);
|
| + expectFalse(/undefined/i.test(text));
|
| + if (column === 0) {
|
| + // At least Domain cell should not be empty.
|
| + expectNotEquals(text, '');
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +/**
|
| + * A Task that loads provided page and waits for the SDCH dictionary to be
|
| + * downloaded. The page response headers should provide Get-Dictionary header.
|
| + * @extends {NetInternalsTest.Task}
|
| + */
|
| +function LoadSdchDictionaryTask() {
|
| + NetInternalsTest.Task.call(this);
|
| +}
|
| +
|
| +LoadSdchDictionaryTask.prototype = {
|
| + __proto__: NetInternalsTest.Task.prototype,
|
| +
|
| + /**
|
| + * Navigates to the page and starts waiting to receive the results from
|
| + * the browser process.
|
| + */
|
| + start: function(url) {
|
| + g_browser.addSdchInfoObserver(this, false)
|
| + NetInternalsTest.switchToView('sdch');
|
| + // 127.0.0.1 is not allowed to be an SDCH domain, use test domain.
|
| + url = url.replace('127.0.0.1', 'testdomain.com');
|
| + this.url_ = url;
|
| + chrome.send('loadPage', [url]);
|
| + },
|
| +
|
| + /**
|
| + * Callback from the BrowserBridge. Checks if |sdchInfo| has the SDCH
|
| + * dictionary info for the dictionary the page has advertised. If so,
|
| + * validates it and completes the task. If not, continues running.
|
| + * @param {object} sdchInfo Results of a SDCH manager info query.
|
| + */
|
| + onSdchInfoChanged: function(sdchInfo) {
|
| + if (this.isDone())
|
| + return;
|
| +
|
| + checkDisplay(sdchInfo);
|
| +
|
| + if (sdchInfo.dictionaries.length > 0) {
|
| + var testDict = sdchInfo.dictionaries.filter(function(dictionary) {
|
| + return dictionary.domain === 'sub.testdomain.com';
|
| + });
|
| + if (testDict.length === 0)
|
| + return;
|
| +
|
| + expectEquals(1, testDict.length);
|
| + var dict = testDict[0];
|
| + expectEquals('/', dict.path);
|
| + expectTrue(dict.url.indexOf('/files/sdch/dict') !== -1);
|
| +
|
| + var tableId = SdchView.DICTIONARIES_TBODY_ID;
|
| + var domain = NetInternalsTest.getTbodyText(tableId, 0, 0);
|
| + var path = NetInternalsTest.getTbodyText(tableId, 0, 1);
|
| + var url = NetInternalsTest.getTbodyText(tableId, 0, 5);
|
| +
|
| + expectEquals(dict.domain, domain);
|
| + expectEquals(dict.path, path);
|
| + expectEquals(dict.url, url);
|
| +
|
| + this.onTaskDone(this.url_);
|
| + }
|
| + }
|
| +};
|
| +
|
| +/**
|
| + * A Task that loads provided page and waits for its domain to appear in SDCH
|
| + * blacklist with the specified reason.
|
| + * @param {string} reason Blacklist reason we're waiting for.
|
| + * @extends {NetInternalsTest.Task}
|
| + */
|
| +function LoadPageWithDecodeErrorTask(reason) {
|
| + NetInternalsTest.Task.call(this);
|
| + this.reason_ = reason;
|
| +}
|
| +
|
| +LoadPageWithDecodeErrorTask.prototype = {
|
| + __proto__: NetInternalsTest.Task.prototype,
|
| +
|
| + /**
|
| + * Navigates to the page and starts waiting to receive the results from
|
| + * the browser process.
|
| + */
|
| + start: function(url) {
|
| + g_browser.addSdchInfoObserver(this, false)
|
| + NetInternalsTest.switchToView('sdch');
|
| + // 127.0.0.1 is not allowed to be an SDCH domain, so we need another one.
|
| + url = url.replace('127.0.0.1', 'testdomain.com');
|
| + chrome.send('loadPage', [url]);
|
| + },
|
| +
|
| + /**
|
| + * Callback from the BrowserBridge. Checks if |sdchInfo.blacklisted| contains
|
| + * the test domain with the reason specified on creation. If so, validates it
|
| + * and completes the task. If not, continues running.
|
| + * @param {object} sdchInfo Results of SDCH manager info query.
|
| + */
|
| + onSdchInfoChanged: function(sdchInfo) {
|
| + if (this.isDone())
|
| + return;
|
| +
|
| + checkDisplay(sdchInfo);
|
| +
|
| + if (sdchInfo.blacklisted.length > 0) {
|
| + var testDomains = sdchInfo.blacklisted.filter(function(entry) {
|
| + return entry.domain === 'sub.testdomain.com';
|
| + });
|
| + if (testDomains.length === 0)
|
| + return;
|
| +
|
| + expectEquals(1, testDomains.length);
|
| + var entry = testDomains[0];
|
| + expectEquals(this.reason_, sdchProblemCodeToString(entry.reason));
|
| + var tableId = SdchView.BLACKLIST_TBODY_ID;
|
| + var domain = NetInternalsTest.getTbodyText(tableId, 0, 0);
|
| + var reason = NetInternalsTest.getTbodyText(tableId, 0, 1);
|
| + expectEquals(entry.domain, domain);
|
| + expectEquals(this.reason_, reason);
|
| + this.onTaskDone();
|
| + }
|
| + }
|
| +};
|
| +
|
| +/**
|
| + * Load a page, which results in downloading a SDCH dictionary. Make sure its
|
| + * data is displayed.
|
| + */
|
| +TEST_F('NetInternalsTest', 'netInternalsSdchViewFetchDictionary', function() {
|
| + var taskQueue = new NetInternalsTest.TaskQueue(true);
|
| + taskQueue.addTask(
|
| + new NetInternalsTest.GetTestServerURLTask(
|
| + BASE_PATH + encodeURI('/files/sdch/page.html')));
|
| + taskQueue.addTask(new LoadSdchDictionaryTask());
|
| + taskQueue.run();
|
| +});
|
| +
|
| +/**
|
| + * Load a page, get the dictionary for it, and get decoding error to see
|
| + * the blacklist in action.
|
| + */
|
| +TEST_F('NetInternalsTest', 'netInternalsSdchViewBlacklistMeta', function() {
|
| + var taskQueue = new NetInternalsTest.TaskQueue(true);
|
| + taskQueue.addTask(
|
| + new NetInternalsTest.GetTestServerURLTask(
|
| + BASE_PATH + encodeURI('/files/sdch/page.html')));
|
| + taskQueue.addTask(new LoadSdchDictionaryTask());
|
| + taskQueue.addTask(
|
| + new NetInternalsTest.GetTestServerURLTask(
|
| + BASE_PATH + encodeURI('/files/sdch/non-html')));
|
| + taskQueue.addTask(
|
| + new LoadPageWithDecodeErrorTask('META_REFRESH_UNSUPPORTED'));
|
| + taskQueue.run();
|
| +});
|
| +
|
| +/**
|
| + * Load a page, which is said to be SDCH-encoded, though we don't expect it.
|
| + */
|
| +TEST_F('NetInternalsTest', 'netInternalsSdchViewBlacklistNonSdch', function() {
|
| + var taskQueue = new NetInternalsTest.TaskQueue(true);
|
| + taskQueue.addTask(
|
| + new NetInternalsTest.GetTestServerURLTask(
|
| + BASE_PATH + encodeURI('/files/sdch/non-sdch.html')));
|
| + taskQueue.addTask(
|
| + new LoadPageWithDecodeErrorTask('PASSING_THROUGH_NON_SDCH'));
|
| + taskQueue.run();
|
| +});
|
| +
|
| +})(); // Anonymous namespace
|
|
|