From c6e39f53b2246404d6c26f8954dd4f1c0019affa Mon Sep 17 00:00:00 2001 From: Shane Osbourne Date: Mon, 25 Aug 2025 21:10:23 +0100 Subject: [PATCH 01/11] ntp: support persistent values --- .../pages/new-tab/app/customizer/mocks.js | 1 - special-pages/pages/new-tab/app/index.js | 8 +- .../pages/new-tab/app/mock-transport.js | 137 ++++++++++-------- .../new-tab/app/omnibar/components/Omnibar.js | 6 +- .../app/omnibar/components/OmnibarConsumer.js | 12 +- .../omnibar/components/OmnibarCustomized.js | 17 ++- .../app/omnibar/components/OmnibarProvider.js | 8 +- .../PersistentOmnibarValuesProvider.js | 123 ++++++++++++++++ .../omnibar/integration-tests/omnibar.page.js | 56 ++++++- .../omnibar.persistence.spec.js | 50 +++++++ .../mocks/protections.mock-transport.js | 3 + .../pages/new-tab/app/tabs/PersistentValue.js | 73 ++++++++++ .../pages/new-tab/app/tabs/TabsProvider.js | 39 +++++ .../new-tab/app/tabs/tabs.mock-transport.js | 58 ++++++++ .../pages/new-tab/app/tabs/tabs.service.js | 66 +++++++++ .../messages/initialSetup.response.json | 10 ++ .../messages/tabs_onDataUpdate.subscribe.json | 8 + .../pages/new-tab/messages/types/tabs.json | 20 +++ special-pages/pages/new-tab/types/new-tab.ts | 13 ++ special-pages/playwright.config.js | 1 + 20 files changed, 630 insertions(+), 79 deletions(-) create mode 100644 special-pages/pages/new-tab/app/omnibar/components/PersistentOmnibarValuesProvider.js create mode 100644 special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.persistence.spec.js create mode 100644 special-pages/pages/new-tab/app/tabs/PersistentValue.js create mode 100644 special-pages/pages/new-tab/app/tabs/TabsProvider.js create mode 100644 special-pages/pages/new-tab/app/tabs/tabs.mock-transport.js create mode 100644 special-pages/pages/new-tab/app/tabs/tabs.service.js create mode 100644 special-pages/pages/new-tab/messages/tabs_onDataUpdate.subscribe.json create mode 100644 special-pages/pages/new-tab/messages/types/tabs.json diff --git a/special-pages/pages/new-tab/app/customizer/mocks.js b/special-pages/pages/new-tab/app/customizer/mocks.js index 60ff3bce28..ebeb4e0238 100644 --- a/special-pages/pages/new-tab/app/customizer/mocks.js +++ b/special-pages/pages/new-tab/app/customizer/mocks.js @@ -71,7 +71,6 @@ export function customizerMockTransport() { case 'customizer_onBackgroundUpdate': case 'customizer_onImagesUpdate': { subscriptions.set(sub, cb); - console.log('did add sub', sub); return () => { console.log('-- did remove sub', sub); return subscriptions.delete(sub); diff --git a/special-pages/pages/new-tab/app/index.js b/special-pages/pages/new-tab/app/index.js index 7d7fc74a58..294a69fe86 100644 --- a/special-pages/pages/new-tab/app/index.js +++ b/special-pages/pages/new-tab/app/index.js @@ -16,6 +16,8 @@ import { CustomizerService } from './customizer/customizer.service.js'; import { InlineErrorBoundary } from './InlineErrorBoundary.js'; import { DocumentVisibilityProvider } from '../../../shared/components/DocumentVisibility.js'; import { applyDefaultStyles } from './customizer/utils.js'; +import { TabsService } from './tabs/tabs.service.js'; +import { TabsDebug, TabsProvider } from './tabs/TabsProvider.js'; /** * @import {Telemetry} from "./telemetry/telemetry.js" @@ -89,6 +91,7 @@ export async function init(root, messaging, telemetry, baseEnvironment) { // Resolve the entry points for each selected widget const entryPoints = await resolveEntryPoints(init.widgets, didCatch); + const tabs = new TabsService(messaging, init.tabs || TabsService.DEFAULT); // Create an instance of the global widget api const widgetConfigAPI = new WidgetConfigService(messaging, init.widgetConfigs); @@ -129,7 +132,10 @@ export async function init(root, messaging, telemetry, baseEnvironment) { widgets={init.widgets} entryPoints={entryPoints} > - + + {environment.urlParams.has('tabs.debug') && } + + diff --git a/special-pages/pages/new-tab/app/mock-transport.js b/special-pages/pages/new-tab/app/mock-transport.js index a43d032f3f..9c04d5fc36 100644 --- a/special-pages/pages/new-tab/app/mock-transport.js +++ b/special-pages/pages/new-tab/app/mock-transport.js @@ -10,6 +10,7 @@ import { freemiumPIRDataExamples } from './freemium-pir-banner/mocks/freemiumPIR import { activityMockTransport } from './activity/mocks/activity.mock-transport.js'; import { protectionsMockTransport } from './protections/mocks/protections.mock-transport.js'; import { omnibarMockTransport } from './omnibar/mocks/omnibar.mock-transport.js'; +import { tabsMockTransport } from './tabs/tabs.mock-transport.js'; /** * @typedef {import('../types/new-tab').Favorite} Favorite @@ -119,6 +120,7 @@ export function mockTransport() { activity: activityMockTransport(), protections: protectionsMockTransport(), omnibar: omnibarMockTransport(), + tabs: tabsMockTransport(), }; return new TestTransportConfig({ @@ -492,68 +494,7 @@ export function mockTransport() { return Promise.resolve(fromStorage); } case 'initialSetup': { - /** @type {import('../types/new-tab.ts').Widgets} */ - const widgetsFromStorage = read('widgets') || [ - { id: 'updateNotification' }, - { id: 'rmf' }, - { id: 'freemiumPIRBanner' }, - { id: 'nextSteps' }, - { id: 'favorites' }, - ]; - - /** @type {import('../types/new-tab.ts').WidgetConfigs} */ - const widgetConfigFromStorage = read('widget_config') || [{ id: 'favorites', visibility: 'visible' }]; - - /** @type {UpdateNotificationData} */ - let updateNotification = { content: null }; - const isDelayed = url.searchParams.has('update-notification-delay'); - - if (!isDelayed && url.searchParams.has('update-notification')) { - const value = url.searchParams.get('update-notification'); - if (value && value in updateNotificationExamples) { - updateNotification = updateNotificationExamples[value]; - } - } - - /** @type {import('../types/new-tab.ts').InitialSetupResponse} */ - const initial = { - widgets: widgetsFromStorage, - widgetConfigs: widgetConfigFromStorage, - platform: { name: 'integration' }, - env: 'development', - locale: 'en', - updateNotification, - }; - - widgetsFromStorage.push({ id: 'protections' }); - widgetConfigFromStorage.push({ id: 'protections', visibility: 'visible' }); - - if (url.searchParams.has('omnibar')) { - const favoritesWidgetIndex = widgetsFromStorage.findIndex((widget) => widget.id === 'favorites') ?? 0; - widgetsFromStorage.splice(favoritesWidgetIndex, 0, { id: 'omnibar' }); - const favoritesWidgetConfigIndex = widgetConfigFromStorage.findIndex((widget) => widget.id === 'favorites') ?? 0; - widgetConfigFromStorage.splice(favoritesWidgetConfigIndex, 0, { id: 'omnibar', visibility: 'visible' }); - } - - initial.customizer = customizerData(); - - /** @type {import('../types/new-tab').NewTabPageSettings} */ - const settings = { - customizerDrawer: { state: 'enabled' }, - }; - - if (url.searchParams.get('autoOpen') === 'true' && settings.customizerDrawer) { - settings.customizerDrawer.autoOpen = true; - } - - if (url.searchParams.get('adBlocking') === 'enabled') { - settings.adBlocking = { state: 'enabled' }; - } - - // feature flags - initial.settings = settings; - - return Promise.resolve(initial); + return Promise.resolve(initialSetup(url)); } default: { return Promise.reject(new Error('unhandled request' + msg)); @@ -563,6 +504,78 @@ export function mockTransport() { }); } +/** + * @param {URL} url + * @return {import('../types/new-tab').InitialSetupResponse} + */ +export function initialSetup(url) { + /** @type {import('../types/new-tab.ts').Widgets} */ + const widgetsFromStorage = [ + { id: 'updateNotification' }, + { id: 'rmf' }, + { id: 'freemiumPIRBanner' }, + { id: 'nextSteps' }, + { id: 'favorites' }, + ]; + + /** @type {import('../types/new-tab.ts').WidgetConfigs} */ + const widgetConfigFromStorage = [{ id: 'favorites', visibility: 'visible' }]; + + /** @type {UpdateNotificationData} */ + let updateNotification = { content: null }; + const isDelayed = url.searchParams.has('update-notification-delay'); + + if (!isDelayed && url.searchParams.has('update-notification')) { + const value = url.searchParams.get('update-notification'); + if (value && value in updateNotificationExamples) { + updateNotification = updateNotificationExamples[value]; + } + } + + /** @type {import('../types/new-tab.ts').InitialSetupResponse} */ + const initial = { + widgets: widgetsFromStorage, + widgetConfigs: widgetConfigFromStorage, + platform: { name: 'integration' }, + env: 'development', + locale: 'en', + updateNotification, + }; + + widgetsFromStorage.push({ id: 'protections' }); + widgetConfigFromStorage.push({ id: 'protections', visibility: 'visible' }); + + if (url.searchParams.has('omnibar')) { + const favoritesWidgetIndex = widgetsFromStorage.findIndex((widget) => widget.id === 'favorites') ?? 0; + widgetsFromStorage.splice(favoritesWidgetIndex, 0, { id: 'omnibar' }); + const favoritesWidgetConfigIndex = widgetConfigFromStorage.findIndex((widget) => widget.id === 'favorites') ?? 0; + widgetConfigFromStorage.splice(favoritesWidgetConfigIndex, 0, { id: 'omnibar', visibility: 'visible' }); + } + + initial.customizer = customizerData(); + + /** @type {import('../types/new-tab').NewTabPageSettings} */ + const settings = { + customizerDrawer: { state: 'enabled' }, + }; + + if (url.searchParams.get('autoOpen') === 'true' && settings.customizerDrawer) { + settings.customizerDrawer.autoOpen = true; + } + + if (url.searchParams.get('adBlocking') === 'enabled') { + settings.adBlocking = { state: 'enabled' }; + } + + if (url.searchParams.has('tabs')) { + initial.tabs = { tabId: '01', tabIds: ['01'] }; + } + + // feature flags + initial.settings = settings; + return initial; +} + /** * @template {{id: string}} T * @param {T[]} array diff --git a/special-pages/pages/new-tab/app/omnibar/components/Omnibar.js b/special-pages/pages/new-tab/app/omnibar/components/Omnibar.js index 2b30b582c1..6e921b0166 100644 --- a/special-pages/pages/new-tab/app/omnibar/components/Omnibar.js +++ b/special-pages/pages/new-tab/app/omnibar/components/Omnibar.js @@ -10,6 +10,7 @@ import { SearchForm } from './SearchForm'; import { SearchFormProvider } from './SearchFormProvider'; import { SuggestionsList } from './SuggestionsList'; import { TabSwitcher } from './TabSwitcher'; +import { useQueryWithLocalPersistence } from './PersistentOmnibarValuesProvider.js'; /** * @typedef {import('../strings.json')} Strings @@ -23,11 +24,12 @@ import { TabSwitcher } from './TabSwitcher'; * @param {OmnibarConfig['mode']} props.mode * @param {(mode: OmnibarConfig['mode']) => void} props.setMode * @param {boolean} props.enableAi + * @param {string|null|undefined} props.tabId */ -export function Omnibar({ mode, setMode, enableAi }) { +export function Omnibar({ mode, setMode, enableAi, tabId }) { const { t } = useTypedTranslationWith(/** @type {Strings} */ ({})); - const [query, setQuery] = useState(/** @type {String} */ ('')); + const [query, setQuery] = useQueryWithLocalPersistence(tabId); const [resetKey, setResetKey] = useState(0); const [autoFocus, setAutoFocus] = useState(false); diff --git a/special-pages/pages/new-tab/app/omnibar/components/OmnibarConsumer.js b/special-pages/pages/new-tab/app/omnibar/components/OmnibarConsumer.js index 2c90a53394..42afa9769d 100644 --- a/special-pages/pages/new-tab/app/omnibar/components/OmnibarConsumer.js +++ b/special-pages/pages/new-tab/app/omnibar/components/OmnibarConsumer.js @@ -6,6 +6,8 @@ import { useVisibility } from '../../widget-list/widget-config.provider.js'; import { Omnibar } from './Omnibar.js'; import { OmnibarContext } from './OmnibarProvider.js'; import { ArrowIndentCenteredIcon } from '../../components/Icons.js'; +import { useModeWithLocalPersistence } from './PersistentOmnibarValuesProvider.js'; +import { useTabState } from '../../tabs/TabsProvider.js'; /** * @typedef {import('../strings.json')} Strings @@ -26,8 +28,9 @@ import { ArrowIndentCenteredIcon } from '../../components/Icons.js'; */ export function OmnibarConsumer() { const { state } = useContext(OmnibarContext); + const { current } = useTabState(); if (state.status === 'ready') { - return ; + return ; } return null; } @@ -35,13 +38,16 @@ export function OmnibarConsumer() { /** * @param {object} props * @param {OmnibarConfig} props.config + * @param {string} props.tabId */ -function OmnibarReadyState({ config: { enableAi = true, showAiSetting = true, mode } }) { +function OmnibarReadyState({ config, tabId }) { + const { enableAi = true, showAiSetting = true, mode: defaultMode } = config; const { setEnableAi, setMode } = useContext(OmnibarContext); + const mode = useModeWithLocalPersistence(tabId, defaultMode); return ( <> {showAiSetting && } - + ); } diff --git a/special-pages/pages/new-tab/app/omnibar/components/OmnibarCustomized.js b/special-pages/pages/new-tab/app/omnibar/components/OmnibarCustomized.js index 213e775164..4e595577e2 100644 --- a/special-pages/pages/new-tab/app/omnibar/components/OmnibarCustomized.js +++ b/special-pages/pages/new-tab/app/omnibar/components/OmnibarCustomized.js @@ -6,6 +6,7 @@ import { h } from 'preact'; import { OmnibarConsumer } from './OmnibarConsumer.js'; import { SearchIcon } from '../../components/Icons.js'; +import { PersistentModeProvider, PersistentTextInputProvider } from './PersistentOmnibarValuesProvider.js'; /** * @import enStrings from "../strings.json" @@ -30,13 +31,15 @@ export function OmnibarCustomized() { useCustomizer({ title: sectionTitle, id, icon: , toggle, visibility: visibility.value, index }); - if (visibility.value === 'hidden') { - return null; - } - return ( - - - + + + {visibility.value === 'visible' && ( + + + + )} + + ); } diff --git a/special-pages/pages/new-tab/app/omnibar/components/OmnibarProvider.js b/special-pages/pages/new-tab/app/omnibar/components/OmnibarProvider.js index fb4199e796..87d05040f7 100644 --- a/special-pages/pages/new-tab/app/omnibar/components/OmnibarProvider.js +++ b/special-pages/pages/new-tab/app/omnibar/components/OmnibarProvider.js @@ -1,5 +1,5 @@ import { createContext, h } from 'preact'; -import { useCallback, useEffect, useReducer, useRef } from 'preact/hooks'; +import { useCallback, useContext, useEffect, useReducer, useRef } from 'preact/hooks'; import { useMessaging } from '../../types.js'; import { reducer, useInitialDataAndConfig, useConfigSubscription } from '../../service.hooks.js'; import { OmnibarService } from '../omnibar.service.js'; @@ -153,7 +153,7 @@ export function OmnibarProvider(props) { /** * @return {import("preact").RefObject} */ -export function useService() { +function useService() { const service = useRef(/** @type {OmnibarService|null} */ (null)); const ntp = useMessaging(); useEffect(() => { @@ -165,3 +165,7 @@ export function useService() { }, [ntp]); return service; } + +export function useOmnibarService() { + return useContext(OmnibarServiceContext); +} diff --git a/special-pages/pages/new-tab/app/omnibar/components/PersistentOmnibarValuesProvider.js b/special-pages/pages/new-tab/app/omnibar/components/PersistentOmnibarValuesProvider.js new file mode 100644 index 0000000000..b15fe15763 --- /dev/null +++ b/special-pages/pages/new-tab/app/omnibar/components/PersistentOmnibarValuesProvider.js @@ -0,0 +1,123 @@ +import { h, createContext } from 'preact'; +import { useCallback, useContext, useEffect, useState } from 'preact/hooks'; +import { OmnibarContext, useOmnibarService } from './OmnibarProvider.js'; +import { useTabState } from '../../tabs/TabsProvider.js'; +import { PersistentValue } from '../../tabs/PersistentValue.js'; + +/** + * @typedef {import("../../../types/new-tab.js").OmnibarConfig["mode"]} Mode + */ + +const TextInputContext = createContext(/** @type {PersistentValue|null} */ (null)); +const ModeContext = createContext(/** @type {PersistentValue|null} */ (null)); + +/** + * @param {object} props + * @param {import('preact').ComponentChildren} props.children + */ +export function PersistentTextInputProvider({ children }) { + const [value] = useState(() => /** @type {PersistentValue} */ (new PersistentValue())); + const { all } = useTabState(); + useEffect(() => { + return all.subscribe((tabIds) => { + value?.prune({ preserve: tabIds }); + }); + }, [all, value]); + return {children}; +} + +/** + * @param {object} props + * @param {import('preact').ComponentChildren} props.children + */ +export function PersistentModeProvider({ children }) { + const [value] = useState(() => /** @type {PersistentValue} */ (new PersistentValue())); + const { all } = useTabState(); + useEffect(() => { + return all.subscribe((tabIds) => { + value?.prune({ preserve: tabIds }); + }); + }, [all, value]); + return {children}; +} + +/** + * A normal set-state, but with values recorded. Must be used when the Omnibar Service is ready + * @param {string|null|undefined} tabId + */ +export function useQueryWithLocalPersistence(tabId) { + const terms = useContext(TextInputContext); + + invariant( + useContext(OmnibarContext).state.status === 'ready', + 'Cannot use `useQueryWithPersistence` without Omnibar Service being ready.', + ); + + const [query, setQuery] = useState(() => terms?.byId(tabId) || ''); + + /** @type {(term: string) => void} */ + const setter = useCallback( + (term) => { + if (tabId) { + terms?.update({ id: tabId, value: term }); + } + setQuery(term); + }, + [tabId], + ); + + return /** @type {const} */ ([query, setter]); +} + +/** + * Sets and remembers the 'mode' for many tabs. Mode doesn't update dynamically with config changes + * and that's why we use the name 'defaultMode'. + * + * Each new tab that's opened adopts the most recent 'mode' value that was persisted in the browser. + * + * @param {string|null|undefined} tabId + * @param {Mode} defaultMode - what to apply for a newly created tab + * @return {Mode} + */ +export function useModeWithLocalPersistence(tabId, defaultMode) { + const values = useContext(ModeContext); + + const [mode, setState] = useState(() => { + const prev = values?.byId(tabId); + if (prev) return prev; + if (tabId && defaultMode) { + values?.update({ id: tabId, value: defaultMode }); + } + return defaultMode; + }); + + invariant( + useContext(OmnibarContext).state.status === 'ready', + 'Cannot use `useQueryWithPersistence` without Omnibar Service being ready.', + ); + + const service = useOmnibarService(); + + useEffect(() => { + if (!service) return; + return service.onConfig((v) => { + if (tabId && v.source === 'manual') { + values?.update({ id: tabId, value: v.data.mode }); + } + setState(v.data.mode); + }); + }, [service, tabId]); + + return mode; +} + +/** + * @param {any} condition + * @param {string} [message] + * @return {asserts condition} + */ +export function invariant(condition, message) { + if (condition) return; + if (message) throw new Error('Invariant failed: ' + message); + throw new Error('Invariant failed'); +} diff --git a/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.page.js b/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.page.js index ac2c170bfc..65a57a2145 100644 --- a/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.page.js +++ b/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.page.js @@ -1,4 +1,8 @@ -import { expect } from '@playwright/test'; +import { expect, test } from '@playwright/test'; + +/** + * @typedef {import("../../../types/new-tab.js").OmnibarMode} Mode + */ export class OmnibarPage { /** @@ -7,6 +11,7 @@ export class OmnibarPage { constructor(ntp) { this.ntp = ntp; this.page = this.ntp.page; + this.page.on('console', (msg) => console.log(msg.text())); } context() { @@ -102,6 +107,13 @@ export class OmnibarPage { await expect(this.searchInput()).toHaveValue(value); } + /** + * @param {string} value + */ + async expectChatValue(value) { + await expect(this.chatInput()).toHaveValue(value); + } + /** * @param {number} startIndex * @param {number} endIndex @@ -167,4 +179,46 @@ export class OmnibarPage { const calls = await this.ntp.mocks.outgoing({ names: [method] }); expect(calls).toHaveLength(0); } + + /** + * @param {string} tabId + * @param {string[]} tabIds + * @returns {Promise} + */ + async didSwitchToTab(tabId, tabIds) { + await test.step('simulate tab change event', async () => { + await this.ntp.mocks.simulateSubscriptionMessage(sub('tabs_onDataUpdate'), tabs({ tabId, tabIds })); + }); + } + + /** + * @param {object} props + * @param {Mode} props.mode + * @param {string} props.value + * @returns {Promise} + */ + input({ mode, value }) { + switch (mode) { + case 'ai': { + return this.chatInput().fill(value); + } + case 'search': { + return this.searchInput().fill(value); + } + } + } +} + +/** + * @param {import("../../../types/new-tab.js").NewTabMessages["subscriptions"]["subscriptionEvent"]} name + */ +function sub(name) { + return name; +} + +/** + * @param {import("../../../types/new-tab.js").Tabs} t + */ +function tabs(t) { + return t; } diff --git a/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.persistence.spec.js b/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.persistence.spec.js new file mode 100644 index 0000000000..7b86b6b248 --- /dev/null +++ b/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.persistence.spec.js @@ -0,0 +1,50 @@ +import { test } from '@playwright/test'; +import { NewtabPage } from '../../../integration-tests/new-tab.page.js'; +import { OmnibarPage } from './omnibar.page.js'; + +test.describe('omnibar widget persistence', () => { + test('remembers input across tabs', async ({ page }, workerInfo) => { + const ntp = NewtabPage.create(page, workerInfo); + const omnibar = new OmnibarPage(ntp); + await ntp.reducedMotion(); + await ntp.openPage({ additional: { omnibar: true, tabs: true, 'tabs.debug': true } }); + await omnibar.ready(); + + // first fill + await omnibar.input({ mode: 'search', value: 'shoes' }); + + // switch + await omnibar.didSwitchToTab('02', ['01', '02']); + await omnibar.expectInputValue(''); + + // second fill + await omnibar.input({ mode: 'search', value: 'dresses' }); + + // back to first + await omnibar.didSwitchToTab('01', ['01', '02']); + await omnibar.expectInputValue('shoes'); + + // back to second again + await omnibar.didSwitchToTab('02', ['01', '02']); + await omnibar.expectInputValue('dresses'); + }); + test('remembers `mode` across tabs', async ({ page }, workerInfo) => { + const ntp = NewtabPage.create(page, workerInfo); + const omnibar = new OmnibarPage(ntp); + await ntp.reducedMotion(); + await ntp.openPage({ additional: { omnibar: true, tabs: true, 'tabs.debug': true } }); + await omnibar.ready(); + + // first fill + await omnibar.input({ mode: 'search', value: 'shoes' }); + await page.getByRole('tab', { name: 'Duck.ai' }).click(); + + // new tab, should be opened with duck.ai input still visible + await omnibar.didSwitchToTab('02', ['01', '02']); + await omnibar.expectChatValue(''); + + // switch back + await omnibar.didSwitchToTab('01', ['01', '02']); + await omnibar.expectChatValue('shoes'); + }); +}); diff --git a/special-pages/pages/new-tab/app/protections/mocks/protections.mock-transport.js b/special-pages/pages/new-tab/app/protections/mocks/protections.mock-transport.js index 3743e6c480..c92573c58c 100644 --- a/special-pages/pages/new-tab/app/protections/mocks/protections.mock-transport.js +++ b/special-pages/pages/new-tab/app/protections/mocks/protections.mock-transport.js @@ -68,6 +68,9 @@ export function protectionsMockTransport() { subs.set(sub, cb); return () => {}; } + if (sub === 'protections_onDataUpdate') { + return () => {}; + } console.warn('unhandled sub', sub); return () => {}; }, diff --git a/special-pages/pages/new-tab/app/tabs/PersistentValue.js b/special-pages/pages/new-tab/app/tabs/PersistentValue.js new file mode 100644 index 0000000000..26a621612f --- /dev/null +++ b/special-pages/pages/new-tab/app/tabs/PersistentValue.js @@ -0,0 +1,73 @@ +/** + * @template {string} T - the value to hold. + */ +export class PersistentValue { + /** @type {Map} */ + #values = new Map(); + + name() { + return 'PersistentValue'; + } + + /** + * Updates the value associated with a given identifier. + * + * @param {object} args + * @param {string} args.id + * @param {T} args.value + */ + update({ id, value }) { + if (string(id) && string(value)) { + this.#values.set(id, value); + } + } + + /** + * @param {object} params + * @param {string[]} params.preserve + */ + prune({ preserve }) { + for (const key of this.#values.keys()) { + if (!preserve.includes(key)) { + this.#values.delete(key); + } + } + } + + /** + * @param {object} args + * @param {string} args.id + */ + remove({ id }) { + if (string(id)) { + this.#values.delete(id); + } + } + + /** + * @param {string|null|undefined} id + * @return {T | null} + */ + byId(id) { + if (typeof id !== 'string') return null; + const value = this.#values.get(id); + if (!value || !string(value)) return null; + return value; + } + + print() { + for (const [key, value] of this.#values) { + console.log(`key: ${key}, value: ${value}`); + } + console.log('--'); + } +} + +/** + * @param {unknown} input + */ +function string(input) { + if (typeof input !== 'string') return ''; + if (input.trim().length < 1) return ''; + return input; +} diff --git a/special-pages/pages/new-tab/app/tabs/TabsProvider.js b/special-pages/pages/new-tab/app/tabs/TabsProvider.js new file mode 100644 index 0000000000..1d1753f6d2 --- /dev/null +++ b/special-pages/pages/new-tab/app/tabs/TabsProvider.js @@ -0,0 +1,39 @@ +import { h, createContext } from 'preact'; +import { useContext, useEffect } from 'preact/hooks'; +import { TabsService } from './tabs.service'; +import { CustomizerThemesContext } from '../customizer/CustomizerProvider.js'; +import { signal, useComputed, useSignal } from '@preact/signals'; + +const TabsStateContext = createContext(signal(/** @type {import('../../types/new-tab').Tabs} */ (TabsService.DEFAULT))); + +/** + * @param {object} props + * @param {import("preact").ComponentChild} props.children + * @param {import('./tabs.service').TabsService} props.service + */ +export function TabsProvider({ children, service }) { + const tabs = useSignal(service.snapshot()); + useEffect(() => { + return service.onData(({ data }) => { + tabs.value = data; + }); + }, [service, tabs]); + return {children}; +} + +export function useTabState() { + const tabs = useContext(TabsStateContext); + const current = useComputed(() => tabs.value.tabId); + const all = useComputed(() => tabs.value.tabIds); + return { current, all }; +} + +export function TabsDebug() { + const theme = useContext(CustomizerThemesContext); + const state = useTabState(); + return ( +
+            {JSON.stringify(state, null, 2)}
+        
+ ); +} diff --git a/special-pages/pages/new-tab/app/tabs/tabs.mock-transport.js b/special-pages/pages/new-tab/app/tabs/tabs.mock-transport.js new file mode 100644 index 0000000000..b1c525ecf3 --- /dev/null +++ b/special-pages/pages/new-tab/app/tabs/tabs.mock-transport.js @@ -0,0 +1,58 @@ +import { TestTransportConfig } from '@duckduckgo/messaging'; +import { initialSetup } from '../mock-transport.js'; +import { TabsService } from './tabs.service.js'; + +/** + * @typedef {import('../../types/new-tab').NewTabMessages["subscriptions"]} Subs + * @typedef {import('../../types/new-tab').Tabs} Tabs + * @typedef {Subs['subscriptionEvent']} Names + */ +const url = new URL(window.location.href); + +/** + * + */ +export function tabsMockTransport() { + const initial = initialSetup(url); + const memory = initial.tabs ? structuredClone(initial.tabs) : TabsService.DEFAULT; + return new TestTransportConfig({ + request() { + return Promise.reject(new Error('not implemented yet')); + }, + notify() { + return Promise.reject(new Error('not implemented yet')); + }, + /** + * @template {Names} K + * @template {{ subscriptionName: K, context: string, featureName: string }} Msg + * @param {Msg} msg + */ + subscribe(msg, cb) { + if (msg.subscriptionName === 'tabs_onDataUpdate') { + /** @type {any} */ (window)._tabs = { + add: (id) => { + memory.tabId = id; + memory.tabIds.push(id); + memory.tabIds = [...new Set(memory.tabIds)]; + cb(structuredClone(memory)); + }, + tabs: ({ tabId, tabIds }) => { + memory.tabId = tabId; + memory.tabIds = tabIds; + cb(structuredClone(memory)); + }, + delete: (id) => { + memory.tabIds = memory.tabIds.filter((x) => x !== id); + cb(structuredClone(memory)); + }, + switch: (id) => { + memory.tabId = id; + cb(structuredClone(memory)); + }, + }; + return () => {}; + } + return () => {}; + }, + }); +} diff --git a/special-pages/pages/new-tab/app/tabs/tabs.service.js b/special-pages/pages/new-tab/app/tabs/tabs.service.js new file mode 100644 index 0000000000..e4c359d7de --- /dev/null +++ b/special-pages/pages/new-tab/app/tabs/tabs.service.js @@ -0,0 +1,66 @@ +import { Service } from '../service.js'; + +/** + * @typedef {import("../../types/new-tab.js").Tabs} Tabs + */ + +export class TabsService { + /** @type {Tabs} */ + static DEFAULT = { + tabId: 'unknown', + tabIds: ['unknown'], + }; + /** + * @param {import("../../src/index.js").NewTabPage} ntp - The internal data feed, expected to have a `subscribe` method. + * @param {Tabs} tabs + * @internal + */ + constructor(ntp, tabs) { + this.ntp = ntp; + + /** @type {Service} */ + this.tabsService = new Service( + { + subscribe: (cb) => ntp.messaging.subscribe('tabs_onDataUpdate', cb), + }, + tabs, + ); + } + + name() { + return 'TabsService'; + } + + /** + * @returns {Promise<{data: Tabs; config: null}>} + * @internal + */ + async getInitial() { + const tabs = await this.tabsService.fetchInitial(); + return { data: tabs, config: null }; + } + + /** + * @param {(evt: {data: Tabs, source: import('../service.js').InvocationSource}) => void} cb + * @internal + */ + onData(cb) { + return this.tabsService.onData(cb); + } + + /** + * @internal + */ + destroy() { + this.tabsService.destroy(); + } + + /** + * @returns {Tabs} + */ + snapshot() { + if (!this.tabsService.data) throw new Error('unreachable'); + console.log('did read'); + return this.tabsService.data; + } +} diff --git a/special-pages/pages/new-tab/messages/initialSetup.response.json b/special-pages/pages/new-tab/messages/initialSetup.response.json index 2cd81f6779..1df38f541d 100644 --- a/special-pages/pages/new-tab/messages/initialSetup.response.json +++ b/special-pages/pages/new-tab/messages/initialSetup.response.json @@ -41,6 +41,16 @@ "$ref": "types/update-notification.json" } ] + }, + "tabs": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "types/tabs.json" + } + ] } } } diff --git a/special-pages/pages/new-tab/messages/tabs_onDataUpdate.subscribe.json b/special-pages/pages/new-tab/messages/tabs_onDataUpdate.subscribe.json new file mode 100644 index 0000000000..7eb3919788 --- /dev/null +++ b/special-pages/pages/new-tab/messages/tabs_onDataUpdate.subscribe.json @@ -0,0 +1,8 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "allOf": [ + { + "$ref": "types/tabs.json" + } + ] +} \ No newline at end of file diff --git a/special-pages/pages/new-tab/messages/types/tabs.json b/special-pages/pages/new-tab/messages/types/tabs.json new file mode 100644 index 0000000000..d7118e2be7 --- /dev/null +++ b/special-pages/pages/new-tab/messages/types/tabs.json @@ -0,0 +1,20 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Tabs", + "type": "object", + "required": [ + "tabId", + "tabIds" + ], + "properties": { + "tabId": { + "type": "string" + }, + "tabIds": { + "type": "array", + "items": { + "type": "string" + } + } + } +} diff --git a/special-pages/pages/new-tab/types/new-tab.ts b/special-pages/pages/new-tab/types/new-tab.ts index 690141ff0b..f589e12937 100644 --- a/special-pages/pages/new-tab/types/new-tab.ts +++ b/special-pages/pages/new-tab/types/new-tab.ts @@ -174,6 +174,7 @@ export interface NewTabMessages { | ProtectionsOnDataUpdateSubscription | RmfOnDataUpdateSubscription | StatsOnDataUpdateSubscription + | TabsOnDataUpdateSubscription | UpdateNotificationOnDataUpdateSubscription | WidgetsOnConfigUpdatedSubscription; } @@ -821,6 +822,7 @@ export interface InitialSetupResponse { }; customizer?: CustomizerData; updateNotification: null | UpdateNotificationData; + tabs?: null | Tabs; } export interface WidgetListItem { /** @@ -864,6 +866,10 @@ export interface UpdateNotification { version: string; notes: string[]; } +export interface Tabs { + tabId: string; + tabIds: string[]; +} /** * Generated from @see "../messages/nextSteps_getConfig.request.json" */ @@ -1138,6 +1144,13 @@ export interface StatsOnDataUpdateSubscription { subscriptionEvent: "stats_onDataUpdate"; params: PrivacyStatsData; } +/** + * Generated from @see "../messages/tabs_onDataUpdate.subscribe.json" + */ +export interface TabsOnDataUpdateSubscription { + subscriptionEvent: "tabs_onDataUpdate"; + params: Tabs; +} /** * Generated from @see "../messages/updateNotification_onDataUpdate.subscribe.json" */ diff --git a/special-pages/playwright.config.js b/special-pages/playwright.config.js index 032faf1eec..71d42de25a 100644 --- a/special-pages/playwright.config.js +++ b/special-pages/playwright.config.js @@ -38,6 +38,7 @@ export default defineConfig({ 'protections.spec.js', 'protections.screenshots.spec.js', 'omnibar.spec.js', + 'omnibar.persistence.spec.js', ], use: { ...devices['Desktop Chrome'], From fb0c2de04ac3832a29833dfbbbb1988c05517e93 Mon Sep 17 00:00:00 2001 From: Shane Osbourne Date: Tue, 26 Aug 2025 08:13:30 +0100 Subject: [PATCH 02/11] docs --- special-pages/pages/new-tab/app/new-tab.md | 1 + special-pages/pages/new-tab/app/tabs/tabs.md | 55 ++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 special-pages/pages/new-tab/app/tabs/tabs.md diff --git a/special-pages/pages/new-tab/app/new-tab.md b/special-pages/pages/new-tab/app/new-tab.md index a507d63259..190dc5103c 100644 --- a/special-pages/pages/new-tab/app/new-tab.md +++ b/special-pages/pages/new-tab/app/new-tab.md @@ -11,6 +11,7 @@ children: - ./customizer/customizer.md - ./protections/protections.md - ./omnibar/omnibar.md + - ./tabs/tabs.md --- ## Requests diff --git a/special-pages/pages/new-tab/app/tabs/tabs.md b/special-pages/pages/new-tab/app/tabs/tabs.md new file mode 100644 index 0000000000..a5c1551d7d --- /dev/null +++ b/special-pages/pages/new-tab/app/tabs/tabs.md @@ -0,0 +1,55 @@ +--- +title: Tabs +--- + +# Tabs + +This feature allows native sides to indicate which 'tab' is currently active. + +The fields `tabId` and `tabIds` are used together to indicate which tabs are open and which is active. + +For example, the following indicates that there are three tabs and `def` is the visible one. + +```json +{ + "tabId": "def", + "tabIds": ["abc", "def", "ghi"] +} +``` + +To remove a tab you would send a shorter list. To add a tab, send a longer list. To switch between tabs, send the +entire list still, but update `tabId` to reflect the currently active tab. + +**NOTE: you MUST send both fields every time.** + +## Setup + +Since this data is global in nature, you must add the initial tab state to {@link "NewTab Messages".InitialSetupResponse} + +- Add {@link "NewTab Messages".Tabs} to the `tabs` field on {@link "NewTab Messages".InitialSetupResponse} +- Example: + +```json +{ + "...": "...", + "tabs": { + "tabId": "abc", + "tabIds": ["abc", "def"] + } +} +``` + +## Subscriptions: + +Once the page is running, you can send `tabs_onDataUpdate` updates as often as you need to. + +### `tabs_onDataUpdate` +- {@link "NewTab Messages".TabsOnDataUpdateSubscription}. +- Updates for tab information including active tab ID and list of available tab IDs. +- returns {@link "NewTab Messages".Tabs} +```json +{ + "tabId": "string", + "tabIds": ["string", "string"] +} +``` \ No newline at end of file From a5e685802cb00a18b9b9175b0b1b93b85db80e5e Mon Sep 17 00:00:00 2001 From: Shane Osbourne Date: Tue, 26 Aug 2025 08:20:13 +0100 Subject: [PATCH 03/11] docs --- special-pages/pages/new-tab/app/tabs/tabs.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/special-pages/pages/new-tab/app/tabs/tabs.md b/special-pages/pages/new-tab/app/tabs/tabs.md index a5c1551d7d..2e1d4607de 100644 --- a/special-pages/pages/new-tab/app/tabs/tabs.md +++ b/special-pages/pages/new-tab/app/tabs/tabs.md @@ -44,9 +44,7 @@ Since this data is global in nature, you must add the initial tab state to {@lin Once the page is running, you can send `tabs_onDataUpdate` updates as often as you need to. ### `tabs_onDataUpdate` -- {@link "NewTab Messages".TabsOnDataUpdateSubscription}. -- Updates for tab information including active tab ID and list of available tab IDs. -- returns {@link "NewTab Messages".Tabs} +- {@link "NewTab Messages".TabsOnDataUpdateSubscription}. ```json { "tabId": "string", From 5359e8c877a709a46526946d606c6d9921b65265 Mon Sep 17 00:00:00 2001 From: Shane Osbourne Date: Tue, 26 Aug 2025 08:36:38 +0100 Subject: [PATCH 04/11] some more docs --- .../pages/new-tab/app/tabs/TabsProvider.js | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/special-pages/pages/new-tab/app/tabs/TabsProvider.js b/special-pages/pages/new-tab/app/tabs/TabsProvider.js index 1d1753f6d2..eec3c0dc89 100644 --- a/special-pages/pages/new-tab/app/tabs/TabsProvider.js +++ b/special-pages/pages/new-tab/app/tabs/TabsProvider.js @@ -1,15 +1,29 @@ import { h, createContext } from 'preact'; import { useContext, useEffect } from 'preact/hooks'; -import { TabsService } from './tabs.service'; import { CustomizerThemesContext } from '../customizer/CustomizerProvider.js'; import { signal, useComputed, useSignal } from '@preact/signals'; +import { TabsService } from './tabs.service'; + +/** + * @template T + * @typedef {import('@preact/signals').ReadonlySignal} ReadonlySignal + */ -const TabsStateContext = createContext(signal(/** @type {import('../../types/new-tab').Tabs} */ (TabsService.DEFAULT))); +/** + * @typedef {import("preact").ComponentChild} ComponentChild + * @typedef {import('../../types/new-tab').Tabs} Tabs + */ + +const TabsStateContext = createContext(signal(/** @type {Tabs} */ (TabsService.DEFAULT))); /** + * Global state provider for tab information. + * + * This exposes a signal to the Tabs object. use the hook below to access the individual fields. + * * @param {object} props - * @param {import("preact").ComponentChild} props.children - * @param {import('./tabs.service').TabsService} props.service + * @param {ComponentChild} props.children + * @param {TabsService} props.service */ export function TabsProvider({ children, service }) { const tabs = useSignal(service.snapshot()); @@ -21,6 +35,19 @@ export function TabsProvider({ children, service }) { return {children}; } +/** + * Exposes 2 signals - one for the current tab ID and one for the list of tabIds. + * + * In a component, if you want to trigger a re-render based on the current tab, you can + * access the .value field directly. + * + * ```js + * const { current } = useTabState(); + * return + * ``` + * + * @returns {{current: ReadonlySignal, all: ReadonlySignal}} + */ export function useTabState() { const tabs = useContext(TabsStateContext); const current = useComputed(() => tabs.value.tabId); From aa1c3b28fec5d7e32feefddf23536bbf9116d7fa Mon Sep 17 00:00:00 2001 From: Shane Osbourne Date: Tue, 26 Aug 2025 10:07:29 +0100 Subject: [PATCH 05/11] feedback --- .../components/PersistentOmnibarValuesProvider.js | 6 +++--- special-pages/pages/new-tab/app/tabs/tabs.service.js | 10 ---------- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/special-pages/pages/new-tab/app/omnibar/components/PersistentOmnibarValuesProvider.js b/special-pages/pages/new-tab/app/omnibar/components/PersistentOmnibarValuesProvider.js index b15fe15763..578fcd7d8e 100644 --- a/special-pages/pages/new-tab/app/omnibar/components/PersistentOmnibarValuesProvider.js +++ b/special-pages/pages/new-tab/app/omnibar/components/PersistentOmnibarValuesProvider.js @@ -50,7 +50,7 @@ export function useQueryWithLocalPersistence(tabId) { invariant( useContext(OmnibarContext).state.status === 'ready', - 'Cannot use `useQueryWithPersistence` without Omnibar Service being ready.', + 'Cannot use `useQueryWithLocalPersistence` without Omnibar Service being ready.', ); const [query, setQuery] = useState(() => terms?.byId(tabId) || ''); @@ -63,7 +63,7 @@ export function useQueryWithLocalPersistence(tabId) { } setQuery(term); }, - [tabId], + [tabId, terms], ); return /** @type {const} */ ([query, setter]); @@ -106,7 +106,7 @@ export function useModeWithLocalPersistence(tabId, defaultMode) { } setState(v.data.mode); }); - }, [service, tabId]); + }, [service, tabId, values]); return mode; } diff --git a/special-pages/pages/new-tab/app/tabs/tabs.service.js b/special-pages/pages/new-tab/app/tabs/tabs.service.js index e4c359d7de..fcbd674d70 100644 --- a/special-pages/pages/new-tab/app/tabs/tabs.service.js +++ b/special-pages/pages/new-tab/app/tabs/tabs.service.js @@ -31,15 +31,6 @@ export class TabsService { return 'TabsService'; } - /** - * @returns {Promise<{data: Tabs; config: null}>} - * @internal - */ - async getInitial() { - const tabs = await this.tabsService.fetchInitial(); - return { data: tabs, config: null }; - } - /** * @param {(evt: {data: Tabs, source: import('../service.js').InvocationSource}) => void} cb * @internal @@ -60,7 +51,6 @@ export class TabsService { */ snapshot() { if (!this.tabsService.data) throw new Error('unreachable'); - console.log('did read'); return this.tabsService.data; } } From eb02bb2ae197782ffba9480c3cec419d13225890 Mon Sep 17 00:00:00 2001 From: Shane Osbourne Date: Tue, 26 Aug 2025 16:00:28 +0100 Subject: [PATCH 06/11] only use saved mode if enableAi is on --- .../app/omnibar/components/OmnibarConsumer.js | 15 +++++++- .../omnibar/integration-tests/omnibar.page.js | 36 +++++++++++++++++-- .../omnibar.persistence.spec.js | 32 +++++++++++++++-- 3 files changed, 77 insertions(+), 6 deletions(-) diff --git a/special-pages/pages/new-tab/app/omnibar/components/OmnibarConsumer.js b/special-pages/pages/new-tab/app/omnibar/components/OmnibarConsumer.js index 42afa9769d..241e3b0321 100644 --- a/special-pages/pages/new-tab/app/omnibar/components/OmnibarConsumer.js +++ b/special-pages/pages/new-tab/app/omnibar/components/OmnibarConsumer.js @@ -12,6 +12,7 @@ import { useTabState } from '../../tabs/TabsProvider.js'; /** * @typedef {import('../strings.json')} Strings * @typedef {import('../../../types/new-tab.js').OmnibarConfig} OmnibarConfig + * @typedef {import('../../../types/new-tab.js').OmnibarMode} Mode */ /** @@ -43,7 +44,19 @@ export function OmnibarConsumer() { function OmnibarReadyState({ config, tabId }) { const { enableAi = true, showAiSetting = true, mode: defaultMode } = config; const { setEnableAi, setMode } = useContext(OmnibarContext); - const mode = useModeWithLocalPersistence(tabId, defaultMode); + const modeForCurrentTab = useModeWithLocalPersistence(tabId, defaultMode); + + /** + * Respect the current tab's mode only if 'enableAi' is on. + * Otherwise always search + * + * @type {Mode} + */ + const mode = (() => { + if (enableAi) return modeForCurrentTab; + return /** @type {const} */ ('search'); + })(); + return ( <> {showAiSetting && } diff --git a/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.page.js b/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.page.js index 65a57a2145..3df9709702 100644 --- a/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.page.js +++ b/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.page.js @@ -186,18 +186,50 @@ export class OmnibarPage { * @returns {Promise} */ async didSwitchToTab(tabId, tabIds) { - await test.step('simulate tab change event', async () => { + await test.step(`simulate tab change event, to: ${tabId} `, async () => { await this.ntp.mocks.simulateSubscriptionMessage(sub('tabs_onDataUpdate'), tabs({ tabId, tabIds })); }); } + /** + * @param {object} props + * @param {Mode} props.mode + * @returns {Promise} + */ + switchMode({ mode }) { + switch (mode) { + case 'ai': { + return this.aiTab().click(); + } + case 'search': { + return this.searchTab().click(); + } + } + } + + /** + * @param {object} props + * @param {Mode} props.mode + * @param {string} props.value + */ + async expectValue({ mode, value }) { + switch (mode) { + case 'ai': { + return await expect(this.chatInput()).toHaveValue(value); + } + case 'search': { + return await expect(this.searchInput()).toHaveValue(value); + } + } + } + /** * @param {object} props * @param {Mode} props.mode * @param {string} props.value * @returns {Promise} */ - input({ mode, value }) { + types({ mode, value }) { switch (mode) { case 'ai': { return this.chatInput().fill(value); diff --git a/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.persistence.spec.js b/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.persistence.spec.js index 7b86b6b248..5353a8c5e4 100644 --- a/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.persistence.spec.js +++ b/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.persistence.spec.js @@ -1,6 +1,7 @@ import { test } from '@playwright/test'; import { NewtabPage } from '../../../integration-tests/new-tab.page.js'; import { OmnibarPage } from './omnibar.page.js'; +import { CustomizerPage } from '../../customizer/integration-tests/customizer.page.js'; test.describe('omnibar widget persistence', () => { test('remembers input across tabs', async ({ page }, workerInfo) => { @@ -11,14 +12,14 @@ test.describe('omnibar widget persistence', () => { await omnibar.ready(); // first fill - await omnibar.input({ mode: 'search', value: 'shoes' }); + await omnibar.types({ mode: 'search', value: 'shoes' }); // switch await omnibar.didSwitchToTab('02', ['01', '02']); await omnibar.expectInputValue(''); // second fill - await omnibar.input({ mode: 'search', value: 'dresses' }); + await omnibar.types({ mode: 'search', value: 'dresses' }); // back to first await omnibar.didSwitchToTab('01', ['01', '02']); @@ -36,7 +37,7 @@ test.describe('omnibar widget persistence', () => { await omnibar.ready(); // first fill - await omnibar.input({ mode: 'search', value: 'shoes' }); + await omnibar.types({ mode: 'search', value: 'shoes' }); await page.getByRole('tab', { name: 'Duck.ai' }).click(); // new tab, should be opened with duck.ai input still visible @@ -47,4 +48,29 @@ test.describe('omnibar widget persistence', () => { await omnibar.didSwitchToTab('01', ['01', '02']); await omnibar.expectChatValue('shoes'); }); + test('adjusts mode of other tabs when duck.ai is disabled', async ({ page }, workerInfo) => { + const ntp = NewtabPage.create(page, workerInfo); + const omnibar = new OmnibarPage(ntp); + const customizer = new CustomizerPage(ntp); + await ntp.reducedMotion(); + await ntp.openPage({ additional: { omnibar: true, tabs: true, 'tabs.debug': true } }); + await omnibar.ready(); + + // first tab, switch to ai mode + await omnibar.switchMode({ mode: 'ai' }); + + // switch to second tab, should be empty but still on duck.ai + await omnibar.didSwitchToTab('02', ['01', '02']); + await omnibar.expectValue({ value: '', mode: 'ai' }); + await omnibar.types({ value: 'shoes', mode: 'ai' }); + + // now turn duck.ai off, 'shoes' should remain, but on search mode + await customizer.opensCustomizer(); + await omnibar.toggleDuckAiButton().uncheck(); + await omnibar.expectValue({ value: 'shoes', mode: 'search' }); + + // back to first tab, should be empty + search + await omnibar.didSwitchToTab('01', ['01', '02']); + await omnibar.expectValue({ value: '', mode: 'search' }); + }); }); From dc7f4f1f921cffee9cf6f2e06471393897fb12f9 Mon Sep 17 00:00:00 2001 From: Shane Osbourne Date: Tue, 26 Aug 2025 17:13:29 +0100 Subject: [PATCH 07/11] only use saved mode if enableAi is on --- .../app/omnibar/components/OmnibarConsumer.js | 13 +------------ .../components/PersistentOmnibarValuesProvider.js | 8 ++++++-- .../pages/new-tab/app/tabs/PersistentValue.js | 12 ++++++++++++ 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/special-pages/pages/new-tab/app/omnibar/components/OmnibarConsumer.js b/special-pages/pages/new-tab/app/omnibar/components/OmnibarConsumer.js index 241e3b0321..20ce68d868 100644 --- a/special-pages/pages/new-tab/app/omnibar/components/OmnibarConsumer.js +++ b/special-pages/pages/new-tab/app/omnibar/components/OmnibarConsumer.js @@ -46,21 +46,10 @@ function OmnibarReadyState({ config, tabId }) { const { setEnableAi, setMode } = useContext(OmnibarContext); const modeForCurrentTab = useModeWithLocalPersistence(tabId, defaultMode); - /** - * Respect the current tab's mode only if 'enableAi' is on. - * Otherwise always search - * - * @type {Mode} - */ - const mode = (() => { - if (enableAi) return modeForCurrentTab; - return /** @type {const} */ ('search'); - })(); - return ( <> {showAiSetting && } - + ); } diff --git a/special-pages/pages/new-tab/app/omnibar/components/PersistentOmnibarValuesProvider.js b/special-pages/pages/new-tab/app/omnibar/components/PersistentOmnibarValuesProvider.js index 578fcd7d8e..a90a52b863 100644 --- a/special-pages/pages/new-tab/app/omnibar/components/PersistentOmnibarValuesProvider.js +++ b/special-pages/pages/new-tab/app/omnibar/components/PersistentOmnibarValuesProvider.js @@ -102,11 +102,15 @@ export function useModeWithLocalPersistence(tabId, defaultMode) { if (!service) return; return service.onConfig((v) => { if (tabId && v.source === 'manual') { - values?.update({ id: tabId, value: v.data.mode }); + if (v.data.enableAi === false) { + values?.updateAll({ value: 'search' }); + } else { + values?.update({ id: tabId, value: v.data.mode }); + } } setState(v.data.mode); }); - }, [service, tabId, values]); + }, [service, tabId, values, defaultMode]); return mode; } diff --git a/special-pages/pages/new-tab/app/tabs/PersistentValue.js b/special-pages/pages/new-tab/app/tabs/PersistentValue.js index 26a621612f..427ce03728 100644 --- a/special-pages/pages/new-tab/app/tabs/PersistentValue.js +++ b/special-pages/pages/new-tab/app/tabs/PersistentValue.js @@ -22,6 +22,18 @@ export class PersistentValue { } } + /** + * Updates the value with every entry + * + * @param {object} args + * @param {T} args.value + */ + updateAll({ value }) { + for (const [key] of this.#values) { + this.#values.set(key, value); + } + } + /** * @param {object} params * @param {string[]} params.preserve From 02a6d5d2c126b2d9d00795f776c9724e9b02b130 Mon Sep 17 00:00:00 2001 From: Shane Osbourne Date: Thu, 28 Aug 2025 11:28:12 +0100 Subject: [PATCH 08/11] better handling of global --- .../PersistentOmnibarValuesProvider.js | 17 ++++++---- .../omnibar/integration-tests/omnibar.page.js | 31 +++++++++++++------ .../omnibar.persistence.spec.js | 22 +++++++++++++ special-pages/shared/mocks.js | 14 +++++++++ 4 files changed, 68 insertions(+), 16 deletions(-) diff --git a/special-pages/pages/new-tab/app/omnibar/components/PersistentOmnibarValuesProvider.js b/special-pages/pages/new-tab/app/omnibar/components/PersistentOmnibarValuesProvider.js index a90a52b863..798d335167 100644 --- a/special-pages/pages/new-tab/app/omnibar/components/PersistentOmnibarValuesProvider.js +++ b/special-pages/pages/new-tab/app/omnibar/components/PersistentOmnibarValuesProvider.js @@ -101,13 +101,18 @@ export function useModeWithLocalPersistence(tabId, defaultMode) { useEffect(() => { if (!service) return; return service.onConfig((v) => { - if (tabId && v.source === 'manual') { - if (v.data.enableAi === false) { - values?.updateAll({ value: 'search' }); - } else { - values?.update({ id: tabId, value: v.data.mode }); - } + if (!tabId) return; + + // when manually updated + enableAi === 'true', allow this tab to be recorded + if (v.source === 'manual') { + values?.update({ id: tabId, value: v.data.mode }); + } + + // when `enableAi` is false, we reset ALL tabs to 'search' + if (v.data.enableAi === false) { + values?.updateAll({ value: 'search' }); } + setState(v.data.mode); }); }, [service, tabId, values, defaultMode]); diff --git a/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.page.js b/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.page.js index 3df9709702..b4de7cf900 100644 --- a/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.page.js +++ b/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.page.js @@ -187,7 +187,18 @@ export class OmnibarPage { */ async didSwitchToTab(tabId, tabIds) { await test.step(`simulate tab change event, to: ${tabId} `, async () => { - await this.ntp.mocks.simulateSubscriptionMessage(sub('tabs_onDataUpdate'), tabs({ tabId, tabIds })); + const event = sub('tabs_onDataUpdate').payload({ tabId, tabIds }); + await this.ntp.mocks.simulateSubscriptionEvent(event); + }); + } + + /** + * @returns {Promise} + */ + async didDisableGlobally() { + const event = sub('omnibar_onConfigUpdate').payload({ mode: 'search', enableAi: false, showAiSetting: false }); + await test.step(`simulates global disabled (eg: settings): ${JSON.stringify(event.name)} ${JSON.stringify(event.payload)} `, async () => { + await this.ntp.mocks.simulateSubscriptionEvent(event); }); } @@ -218,6 +229,7 @@ export class OmnibarPage { return await expect(this.chatInput()).toHaveValue(value); } case 'search': { + await this.searchInput().waitFor({ timeout: 1000 }); return await expect(this.searchInput()).toHaveValue(value); } } @@ -242,15 +254,14 @@ export class OmnibarPage { } /** - * @param {import("../../../types/new-tab.js").NewTabMessages["subscriptions"]["subscriptionEvent"]} name + * @template {import("../../../types/new-tab.js").NewTabMessages["subscriptions"]["subscriptionEvent"]} SubName + * @param {SubName} name + * @return {{payload: (payload: Extract['params']) => {name: string, payload: any}}} */ function sub(name) { - return name; -} - -/** - * @param {import("../../../types/new-tab.js").Tabs} t - */ -function tabs(t) { - return t; + return { + payload: (payload) => { + return { name, payload }; + }, + }; } diff --git a/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.persistence.spec.js b/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.persistence.spec.js index 5353a8c5e4..633d6c622d 100644 --- a/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.persistence.spec.js +++ b/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.persistence.spec.js @@ -73,4 +73,26 @@ test.describe('omnibar widget persistence', () => { await omnibar.didSwitchToTab('01', ['01', '02']); await omnibar.expectValue({ value: '', mode: 'search' }); }); + test('adjusts mode of other tabs when duck.ai is globally disabled', async ({ page }, workerInfo) => { + const ntp = NewtabPage.create(page, workerInfo); + const omnibar = new OmnibarPage(ntp); + await ntp.reducedMotion(); + await ntp.openPage({ additional: { omnibar: true, tabs: true, 'tabs.debug': true } }); + await omnibar.ready(); + + // first tab, switch to ai mode + await omnibar.switchMode({ mode: 'ai' }); + + // switch to second tab, should be empty but still on duck.ai + await omnibar.didSwitchToTab('02', ['01', '02']); + await omnibar.expectValue({ value: '', mode: 'ai' }); + + // disable globally + await omnibar.didDisableGlobally(); + await omnibar.expectValue({ value: '', mode: 'search' }); + + // back to first tab, should now also be search + await omnibar.didSwitchToTab('01', ['01', '02']); + await omnibar.expectValue({ value: '', mode: 'search' }); + }); }); diff --git a/special-pages/shared/mocks.js b/special-pages/shared/mocks.js index f3e62929d2..99411b685f 100644 --- a/special-pages/shared/mocks.js +++ b/special-pages/shared/mocks.js @@ -92,6 +92,20 @@ export class Mocks { }); } + /** + * @param {object} props + * @param {string} props.name + * @param {Record} props.payload + */ + async simulateSubscriptionEvent(props) { + await this.page.evaluate(simulateSubscriptionMessage, { + messagingContext: this.messagingContext, + name: props.name, + payload: props.payload, + injectName: this.build.name, + }); + } + /** * @param {{names: string[]}} [opts] * @returns {Promise} From 726dc762cf8accd2ccb3bd551085eda6448d709c Mon Sep 17 00:00:00 2001 From: Shane Osbourne Date: Thu, 28 Aug 2025 12:31:56 +0100 Subject: [PATCH 09/11] another global fix --- .../customizer/components/CustomizerMenu.js | 3 ++ .../integration-tests/customizer.page.js | 32 +++++++++++++++++++ .../omnibar/integration-tests/omnibar.page.js | 7 ++-- .../omnibar.persistence.spec.js | 24 +++++++++++--- 4 files changed, 58 insertions(+), 8 deletions(-) diff --git a/special-pages/pages/new-tab/app/customizer/components/CustomizerMenu.js b/special-pages/pages/new-tab/app/customizer/components/CustomizerMenu.js index b87df3b6fe..fbe85a1042 100644 --- a/special-pages/pages/new-tab/app/customizer/components/CustomizerMenu.js +++ b/special-pages/pages/new-tab/app/customizer/components/CustomizerMenu.js @@ -110,5 +110,8 @@ export function useCustomizer({ title, id, icon, toggle, visibility, index }) { useEffect(() => { window.dispatchEvent(new Event(UPDATE_EVENT)); + return () => { + window.dispatchEvent(new Event(UPDATE_EVENT)); + }; }, [visibility]); } diff --git a/special-pages/pages/new-tab/app/customizer/integration-tests/customizer.page.js b/special-pages/pages/new-tab/app/customizer/integration-tests/customizer.page.js index 9ce34cb71c..260a8a9127 100644 --- a/special-pages/pages/new-tab/app/customizer/integration-tests/customizer.page.js +++ b/special-pages/pages/new-tab/app/customizer/integration-tests/customizer.page.js @@ -20,6 +20,8 @@ export class CustomizerPage { this.ntp = ntp; } + context = () => this.ntp.page.locator('aside'); + async showsColorSelectionPanel() { const { page } = this.ntp; await page.locator('aside').getByLabel('Solid Colors').click(); @@ -459,4 +461,34 @@ export class CustomizerPage { button: 'right', }); } + + /** + * @param {string} name + * @returns {Promise} + */ + async isChecked(name) { + await expect(this.context().getByRole('switch', { name })).toBeChecked(); + } + + /** + * @param {string} name + * @returns {Promise} + */ + async isUnchecked(name) { + await expect(this.context().getByRole('switch', { name })).not.toBeChecked({ timeout: 1000 }); + } + + /** + * @param {string} name + */ + async hasSwitch(name) { + await expect(this.context().getByRole('switch', { name })).toBeVisible(); + } + + /** + * @param {string} name + */ + async doesntHaveSwitch(name) { + await expect(this.context().getByRole('switch', { name })).not.toBeVisible(); + } } diff --git a/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.page.js b/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.page.js index b4de7cf900..89aba37a7c 100644 --- a/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.page.js +++ b/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.page.js @@ -2,6 +2,7 @@ import { expect, test } from '@playwright/test'; /** * @typedef {import("../../../types/new-tab.js").OmnibarMode} Mode + * @typedef {import("../../../types/new-tab.js").OmnibarConfig} Config */ export class OmnibarPage { @@ -193,10 +194,11 @@ export class OmnibarPage { } /** + * @param {Config} config * @returns {Promise} */ - async didDisableGlobally() { - const event = sub('omnibar_onConfigUpdate').payload({ mode: 'search', enableAi: false, showAiSetting: false }); + async didReceiveConfig(config) { + const event = sub('omnibar_onConfigUpdate').payload(config); await test.step(`simulates global disabled (eg: settings): ${JSON.stringify(event.name)} ${JSON.stringify(event.payload)} `, async () => { await this.ntp.mocks.simulateSubscriptionEvent(event); }); @@ -229,7 +231,6 @@ export class OmnibarPage { return await expect(this.chatInput()).toHaveValue(value); } case 'search': { - await this.searchInput().waitFor({ timeout: 1000 }); return await expect(this.searchInput()).toHaveValue(value); } } diff --git a/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.persistence.spec.js b/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.persistence.spec.js index 633d6c622d..d27e2a4d8f 100644 --- a/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.persistence.spec.js +++ b/special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.persistence.spec.js @@ -76,6 +76,7 @@ test.describe('omnibar widget persistence', () => { test('adjusts mode of other tabs when duck.ai is globally disabled', async ({ page }, workerInfo) => { const ntp = NewtabPage.create(page, workerInfo); const omnibar = new OmnibarPage(ntp); + const customizer = new CustomizerPage(ntp); await ntp.reducedMotion(); await ntp.openPage({ additional: { omnibar: true, tabs: true, 'tabs.debug': true } }); await omnibar.ready(); @@ -87,12 +88,25 @@ test.describe('omnibar widget persistence', () => { await omnibar.didSwitchToTab('02', ['01', '02']); await omnibar.expectValue({ value: '', mode: 'ai' }); - // disable globally - await omnibar.didDisableGlobally(); - await omnibar.expectValue({ value: '', mode: 'search' }); + // open sidebar + await customizer.opensCustomizer(); - // back to first tab, should now also be search - await omnibar.didSwitchToTab('01', ['01', '02']); + // control: make sure the Duck.ai toggle is there + await customizer.hasSwitch('Toggle Duck.ai'); + + // now receive global config settings... + await omnibar.didReceiveConfig({ mode: 'search', enableAi: false, showAiSetting: false }); + + // ...and expect search box to be empty, but still on search mode. await omnibar.expectValue({ value: '', mode: 'search' }); + + // also, expect menu in sidebar to be updated (eg: switch is removed) + await customizer.doesntHaveSwitch('Toggle Duck.ai'); + + // Second config, disable globally, but keep 'showAiSetting: true' + await omnibar.didReceiveConfig({ mode: 'search', enableAi: false, showAiSetting: true }); + + // Ensure the toggle is back and is unchecked + await customizer.isUnchecked('Toggle Duck.ai'); }); }); From a123e6a7090c29d03981d92ceefb559da2643a6a Mon Sep 17 00:00:00 2001 From: Shane Osbourne Date: Tue, 26 Aug 2025 10:02:15 +0100 Subject: [PATCH 10/11] ntp: support scroll restoration --- special-pages/01.png | Bin 0 -> 45760 bytes special-pages/02.png | Bin 0 -> 83380 bytes special-pages/03.png | Bin 0 -> 82383 bytes special-pages/end.png | Bin 0 -> 82369 bytes special-pages/end2.png | Bin 0 -> 83787 bytes special-pages/pages/new-tab/app/index.js | 2 + .../PersistentOmnibarValuesProvider.js | 12 +--- .../omnibar.persistence.spec.js | 10 ++-- .../pages/new-tab/app/tabs/PersistentValue.js | 8 +-- .../pages/new-tab/app/tabs/ScrollRestore.js | 55 ++++++++++++++++++ special-pages/pages/new-tab/app/utils.js | 11 ++++ .../new-tab/integration-tests/new-tab.page.js | 25 ++++++++ 12 files changed, 103 insertions(+), 20 deletions(-) create mode 100644 special-pages/01.png create mode 100644 special-pages/02.png create mode 100644 special-pages/03.png create mode 100644 special-pages/end.png create mode 100644 special-pages/end2.png create mode 100644 special-pages/pages/new-tab/app/tabs/ScrollRestore.js diff --git a/special-pages/01.png b/special-pages/01.png new file mode 100644 index 0000000000000000000000000000000000000000..7dfbeff873543e2bdb0c6f689a64bcafa4a8613a GIT binary patch literal 45760 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