blob: eb527e9653a00b706c155c9b6a1b642768f69098 [file] [log] [blame]
// Copyright 2018 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.
suite('RuntimeHostsDialog', function() {
/** @type {extensions.RuntimeHostsDialogElement} */ let dialog;
/** @type {extensions.TestService} */ let delegate;
const ITEM_ID = 'a'.repeat(32);
setup(function() {
PolymerTest.clearBody();
dialog = document.createElement('extensions-runtime-hosts-dialog');
delegate = new extensions.TestService();
dialog.delegate = delegate;
dialog.itemId = ITEM_ID;
document.body.appendChild(dialog);
});
teardown(function() {
dialog.remove();
});
test('valid input', function() {
const input = dialog.$$('cr-input');
const site = 'http://www.example.com';
input.value = site;
input.fire('input');
assertFalse(input.invalid);
const submit = dialog.$.submit;
assertFalse(submit.disabled);
submit.click();
return delegate.whenCalled('addRuntimeHostPermission').then((args) => {
let id = args[0];
let input = args[1];
assertEquals(ITEM_ID, id);
assertEquals('http://www.example.com/*', input);
});
});
test('invalid input', function() {
// Initially the action button should be disabled, but the error warning
// should not be shown for an empty input.
const input = dialog.$$('cr-input');
assertFalse(input.invalid);
const submit = dialog.$.submit;
assertTrue(submit.disabled);
// Simulate user input of invalid text.
const invalidSite = 'foobar';
input.value = invalidSite;
input.fire('input');
assertTrue(input.invalid);
assertTrue(submit.disabled);
// Entering valid text should clear the error and enable the submit button.
input.value = 'http://www.example.com';
input.fire('input');
assertFalse(input.invalid);
assertFalse(submit.disabled);
});
test('delegate indicates invalid input', function() {
delegate.acceptRuntimeHostPermission = false;
const input = dialog.$$('cr-input');
const site = 'http://....a';
input.value = site;
input.fire('input');
assertFalse(input.invalid);
const submit = dialog.$.submit;
assertFalse(submit.disabled);
submit.click();
return delegate.whenCalled('addRuntimeHostPermission').then(() => {
assertTrue(input.invalid);
assertTrue(submit.disabled);
});
});
test('editing current entry', function() {
const oldPattern = 'http://example.com/*';
const newPattern = 'http://chromium.org/*';
dialog.currentSite = oldPattern;
const input = dialog.$$('cr-input');
input.value = newPattern;
input.fire('input');
const submit = dialog.$.submit;
submit.click();
return delegate.whenCalled('removeRuntimeHostPermission')
.then((args) => {
expectEquals(ITEM_ID, args[0] /* id */);
expectEquals(oldPattern, args[1] /* pattern */);
return delegate.whenCalled('addRuntimeHostPermission');
})
.then((args) => {
expectEquals(ITEM_ID, args[0] /* id */);
expectEquals(newPattern, args[1] /* pattern */);
});
});
test('get pattern from url', function() {
expectEquals(
'https://example.com/*',
extensions.getPatternFromSite('https://example.com/*'));
expectEquals(
'https://example.com/*',
extensions.getPatternFromSite('https://example.com/'));
expectEquals(
'https://example.com/*',
extensions.getPatternFromSite('https://example.com'));
expectEquals(
'https://*.example.com/*',
extensions.getPatternFromSite('https://*.example.com/*'));
expectEquals(
'*://example.com/*', extensions.getPatternFromSite('example.com'));
expectEquals(
'https://example.com:80/*',
extensions.getPatternFromSite('https://example.com:80/*'));
});
test('update site access', function() {
dialog.updateHostAccess = true;
const input = dialog.$$('cr-input');
const site = 'http://www.example.com';
input.value = site;
input.fire('input');
assertFalse(input.invalid);
const submit = dialog.$.submit;
assertFalse(submit.disabled);
submit.click();
return delegate.whenCalled('setItemHostAccess').then((args) => {
let id = args[0];
let access = args[1];
assertEquals(ITEM_ID, id);
assertEquals(
chrome.developerPrivate.HostAccess.ON_SPECIFIC_SITES, access);
});
});
});