blob: 9464fd82be4adb84bb99314b7e75e9b0c2f976be [file] [log] [blame]
// Copyright 2016 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.
cr.define('settings_search_page', function() {
function generateSearchEngineInfo() {
const searchEngines0 = settings_search.createSampleSearchEngine(
true, false, false);
searchEngines0.default = true;
const searchEngines1 = settings_search.createSampleSearchEngine(
true, false, false);
searchEngines1.default = false;
const searchEngines2 = settings_search.createSampleSearchEngine(
true, false, false);
searchEngines2.default = false;
return {
defaults: [searchEngines0, searchEngines1, searchEngines2],
others: [],
extensions: [],
};
}
suite('SearchPageTests', function() {
/** @type {?SettingsSearchPageElement} */
let page = null;
let browserProxy = null;
setup(function() {
browserProxy = new settings_search.TestSearchEnginesBrowserProxy();
browserProxy.setSearchEnginesInfo(generateSearchEngineInfo());
settings.SearchEnginesBrowserProxyImpl.instance_ = browserProxy;
PolymerTest.clearBody();
page = document.createElement('settings-search-page');
page.prefs = {
default_search_provider_data: {
template_url_data: {},
},
};
document.body.appendChild(page);
});
teardown(function() { page.remove(); });
// Tests that the page is querying and displaying search engine info on
// startup.
test('Initialization', function() {
const selectElement = page.$$('select');
return browserProxy.whenCalled('getSearchEnginesList').then(function() {
Polymer.dom.flush();
assertEquals(0, selectElement.selectedIndex);
// Simulate a user initiated change of the default search engine.
selectElement.selectedIndex = 1;
selectElement.dispatchEvent(new CustomEvent('change'));
return browserProxy.whenCalled('setDefaultSearchEngine');
}).then(function() {
assertEquals(1, selectElement.selectedIndex);
// Simulate a change that happened in a different tab.
const searchEnginesInfo = generateSearchEngineInfo();
searchEnginesInfo.defaults[0].default = false;
searchEnginesInfo.defaults[1].default = false;
searchEnginesInfo.defaults[2].default = true;
browserProxy.resetResolver('setDefaultSearchEngine');
cr.webUIListenerCallback('search-engines-changed', searchEnginesInfo);
Polymer.dom.flush();
assertEquals(2, selectElement.selectedIndex);
browserProxy.whenCalled('setDefaultSearchEngine').then(function() {
// Since the change happened in a different tab, there should be no
// new call to |setDefaultSearchEngine|.
assertNotReached('Should not call setDefaultSearchEngine again');
});
});
});
test('ControlledByExtension', function() {
return browserProxy.whenCalled('getSearchEnginesList').then(function() {
const selectElement = page.$$('select');
assertFalse(selectElement.disabled);
assertFalse(!!page.$$('extension-controlled-indicator'));
page.set('prefs.default_search_provider_data.template_url_data', {
controlledBy: chrome.settingsPrivate.ControlledBy.EXTENSION,
controlledByName: 'fake extension name',
enforcement: chrome.settingsPrivate.Enforcement.ENFORCED,
extensionId: 'fake extension id',
extensionCanBeDisabled: true,
value: {},
});
Polymer.dom.flush();
assertTrue(selectElement.disabled);
assertTrue(!!page.$$('extension-controlled-indicator'));
assertFalse(!!page.$$('cr-policy-pref-indicator'));
});
});
test('ControlledByPolicy', function() {
return browserProxy.whenCalled('getSearchEnginesList').then(function() {
const selectElement = page.$$('select');
assertFalse(selectElement.disabled);
assertFalse(!!page.$$('extension-controlled-indicator'));
page.set('prefs.default_search_provider_data.template_url_data', {
controlledBy: chrome.settingsPrivate.ControlledBy.USER_POLICY,
enforcement: chrome.settingsPrivate.Enforcement.ENFORCED,
value: {},
});
Polymer.dom.flush();
assertTrue(selectElement.disabled);
assertFalse(!!page.$$('extension-controlled-indicator'));
assertTrue(!!page.$$('cr-policy-pref-indicator'));
});
});
});
});