| // Copyright 2016 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // clang-format off |
| import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; |
| import type {DefaultBrowserBrowserProxy, DefaultBrowserInfo, SettingsDefaultBrowserPageElement} from 'chrome://settings/settings.js'; |
| import {DefaultBrowserBrowserProxyImpl} from 'chrome://settings/settings.js'; |
| import {assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js'; |
| import {TestBrowserProxy} from 'chrome://webui-test/test_browser_proxy.js'; |
| // clang-format on |
| |
| /** |
| * A test version of DefaultBrowserBrowserProxy. Provides helper methods |
| * for allowing tests to know when a method was called, as well as |
| * specifying mock responses. |
| */ |
| class TestDefaultBrowserBrowserProxy extends TestBrowserProxy implements |
| DefaultBrowserBrowserProxy { |
| private defaultBrowserInfo_: DefaultBrowserInfo; |
| |
| constructor() { |
| super([ |
| 'requestDefaultBrowserState', |
| 'setAsDefaultBrowser', |
| ]); |
| |
| this.defaultBrowserInfo_ = { |
| canBeDefault: true, |
| isDefault: false, |
| isDisabledByPolicy: false, |
| isUnknownError: false, |
| }; |
| } |
| |
| requestDefaultBrowserState() { |
| this.methodCalled('requestDefaultBrowserState'); |
| return Promise.resolve(this.defaultBrowserInfo_); |
| } |
| |
| setAsDefaultBrowser() { |
| this.methodCalled('setAsDefaultBrowser'); |
| } |
| |
| /** |
| * Sets the response to be returned by |requestDefaultBrowserState|. |
| * @param info Fake info for testing. |
| */ |
| setDefaultBrowserInfo(info: DefaultBrowserInfo) { |
| this.defaultBrowserInfo_ = info; |
| } |
| } |
| |
| suite('DefaultBrowserPageTest', function() { |
| let page: SettingsDefaultBrowserPageElement; |
| let browserProxy: TestDefaultBrowserBrowserProxy; |
| |
| setup(async function() { |
| browserProxy = new TestDefaultBrowserBrowserProxy(); |
| DefaultBrowserBrowserProxyImpl.setInstance(browserProxy); |
| await initPage(); |
| }); |
| |
| teardown(function() { |
| page.remove(); |
| }); |
| |
| async function initPage() { |
| browserProxy.reset(); |
| document.body.innerHTML = window.trustedTypes!.emptyHTML; |
| page = document.createElement('settings-default-browser-page'); |
| document.body.appendChild(page); |
| await browserProxy.whenCalled('requestDefaultBrowserState'); |
| } |
| |
| test('default-browser-test-can-be-default', async function() { |
| browserProxy.setDefaultBrowserInfo({ |
| canBeDefault: true, |
| isDefault: false, |
| isDisabledByPolicy: false, |
| isUnknownError: false, |
| }); |
| |
| await initPage(); |
| flush(); |
| assertTrue( |
| !!page.shadowRoot!.querySelector<HTMLElement>('#canBeDefaultBrowser')); |
| assertTrue(!page.shadowRoot!.querySelector<HTMLElement>('#isDefault')); |
| assertTrue( |
| !page.shadowRoot!.querySelector<HTMLElement>('#isSecondaryInstall')); |
| assertTrue(!page.shadowRoot!.querySelector<HTMLElement>('#isUnknownError')); |
| }); |
| |
| test('default-browser-test-is-default', async function() { |
| assertTrue(!!page); |
| browserProxy.setDefaultBrowserInfo({ |
| canBeDefault: true, |
| isDefault: true, |
| isDisabledByPolicy: false, |
| isUnknownError: false, |
| }); |
| |
| await initPage(); |
| flush(); |
| assertFalse( |
| !!page.shadowRoot!.querySelector<HTMLElement>('#canBeDefaultBrowser')); |
| assertFalse( |
| page.shadowRoot!.querySelector<HTMLElement>('#isDefault')!.hidden); |
| assertTrue( |
| page.shadowRoot!.querySelector<HTMLElement>( |
| '#isSecondaryInstall')!.hidden); |
| assertTrue( |
| page.shadowRoot!.querySelector<HTMLElement>('#isUnknownError')!.hidden); |
| }); |
| |
| test('default-browser-test-is-secondary-install', async function() { |
| browserProxy.setDefaultBrowserInfo({ |
| canBeDefault: false, |
| isDefault: false, |
| isDisabledByPolicy: false, |
| isUnknownError: false, |
| }); |
| |
| await initPage(); |
| flush(); |
| assertFalse( |
| !!page.shadowRoot!.querySelector<HTMLElement>('#canBeDefaultBrowser')); |
| assertTrue( |
| page.shadowRoot!.querySelector<HTMLElement>('#isDefault')!.hidden); |
| assertFalse( |
| page.shadowRoot!.querySelector<HTMLElement>( |
| '#isSecondaryInstall')!.hidden); |
| assertTrue( |
| page.shadowRoot!.querySelector<HTMLElement>('#isUnknownError')!.hidden); |
| }); |
| |
| test('default-browser-test-is-disabled-by-policy', async function() { |
| browserProxy.setDefaultBrowserInfo({ |
| canBeDefault: true, |
| isDefault: false, |
| isDisabledByPolicy: true, |
| isUnknownError: false, |
| }); |
| |
| await initPage(); |
| flush(); |
| assertFalse( |
| !!page.shadowRoot!.querySelector<HTMLElement>('#canBeDefaultBrowser')); |
| assertTrue( |
| page.shadowRoot!.querySelector<HTMLElement>('#isDefault')!.hidden); |
| assertTrue( |
| page.shadowRoot!.querySelector<HTMLElement>( |
| '#isSecondaryInstall')!.hidden); |
| assertFalse( |
| page.shadowRoot!.querySelector<HTMLElement>('#isUnknownError')!.hidden); |
| }); |
| |
| test('default-browser-test-is-unknown-error', async function() { |
| browserProxy.setDefaultBrowserInfo({ |
| canBeDefault: true, |
| isDefault: false, |
| isDisabledByPolicy: false, |
| isUnknownError: true, |
| }); |
| |
| await initPage(); |
| flush(); |
| assertFalse( |
| !!page.shadowRoot!.querySelector<HTMLElement>('#canBeDefaultBrowser')); |
| assertTrue( |
| page.shadowRoot!.querySelector<HTMLElement>('#isDefault')!.hidden); |
| assertTrue( |
| page.shadowRoot!.querySelector<HTMLElement>( |
| '#isSecondaryInstall')!.hidden); |
| assertFalse( |
| page.shadowRoot!.querySelector<HTMLElement>('#isUnknownError')!.hidden); |
| }); |
| }); |