From a3dec181c3410b67b4d9c5877b19aa293e11dc74 Mon Sep 17 00:00:00 2001 From: Marcos Gurgel Date: Fri, 6 Dec 2024 13:47:56 +0000 Subject: [PATCH] Malware status support and design updates - macOS (#250) --- Package.swift | 5 -- integration-tests/DashboardPage.js | 32 +++++++ integration-tests/Mocks.js | 33 +++---- integration-tests/macos.spec-int.js | 50 ++++++++--- .../malware-warning-macos-darwin.png | Bin 0 -> 41503 bytes .../phishing-warning-macos-darwin.png | Bin 40144 -> 43513 bytes package-lock.json | 2 +- schema/__generated__/schema.parsers.mjs | 6 +- schema/__generated__/schema.types.ts | 10 +-- schema/get-privacy-dashboard-data.json | 4 +- schema/malicious-site.json | 14 +++ schema/phishing.json | 14 --- shared/data/constants.js | 6 ++ shared/js/browser/common.js | 10 +-- shared/js/browser/macos-communication.js | 28 +++--- .../js/browser/utils/communication-mocks.mjs | 9 +- shared/js/browser/utils/request-details.mjs | 8 +- .../js/browser/utils/request-details.test.mjs | 2 +- shared/js/ui/components/_button.scss | 41 +++++++++ shared/js/ui/components/button.jsx | 2 +- shared/js/ui/models/site.js | 2 +- shared/js/ui/platform-features.mjs | 8 +- shared/js/ui/templates/key-insights.js | 22 +++++ shared/js/ui/templates/page-connection.js | 12 ++- .../js/ui/templates/shared/thirdparty-text.js | 6 +- .../templates/shared/tracker-networks-text.js | 6 +- shared/js/ui/views/main-nav.js | 6 +- shared/js/ui/views/tests/generate-data.mjs | 19 ++-- shared/locales/en/site.json | 16 ++++ .../Tests/PrivacyDashboardTests.swift | 11 --- types.ts | 2 +- v2/components/protection-header.jsx | 84 +++++++++++++----- v2/data-provider.js | 12 +-- 33 files changed, 339 insertions(+), 143 deletions(-) create mode 100644 integration-tests/macos.spec-int.js-snapshots/malware-warning-macos-darwin.png create mode 100644 schema/malicious-site.json delete mode 100644 schema/phishing.json delete mode 100644 swift-package/Tests/PrivacyDashboardTests.swift diff --git a/Package.swift b/Package.swift index 07359ccb..3215d734 100644 --- a/Package.swift +++ b/Package.swift @@ -30,10 +30,5 @@ let package = Package( .copy("app/img"), .copy ("app/public"), .copy ("app/index.html")]), - - .testTarget( - name: "PrivacyDashboardTests", - dependencies: ["PrivacyDashboardResources"], - path: "swift-package/Tests"), ] ) diff --git a/integration-tests/DashboardPage.js b/integration-tests/DashboardPage.js index d6811f85..e8783592 100644 --- a/integration-tests/DashboardPage.js +++ b/integration-tests/DashboardPage.js @@ -167,6 +167,16 @@ export class DashboardPage { await page.locator('[data-page="connection"]').getByText(text).waitFor(); } + async clickReportAsSafeLink() { + const { page } = this; + await page.getByRole('link', { name: 'Report site as safe' }).click(); + } + + async clickHelpPageLink() { + const { page } = this; + await page.getByRole('link', { name: 'About our phishing and malware protection' }).click(); + } + async hasPhishingIcon() { const { page } = this; await expect(page.locator('#key-insight div').nth(1)).toHaveClass(/hero-icon--phishing/); @@ -189,6 +199,28 @@ export class DashboardPage { await expect(page.locator('#main-nav div')).toContainText('Site May Be Deceptive'); } + async hasMalwareIcon() { + const { page } = this; + await expect(page.locator('#key-insight div').nth(1)).toHaveClass(/hero-icon--phishing/); + } + + async hasMalwareHeadingText() { + const { page } = this; + await expect(page.getByRole('heading', { name: 'privacy-test-pages.site' })).toBeVisible(); + } + + async hasMalwareWarningText() { + const { page } = this; + await expect(page.locator('#popup-container')).toContainText( + 'This site has been flagged for distributing malware designed to compromise your device or steal your personal information.' + ); + } + + async hasMalwareStatusText() { + const { page } = this; + await expect(page.locator('#main-nav div')).toContainText('Site May Be Deceptive'); + } + async connectionLinkDoesntShow() { await expect(this.connectInfoLink()).not.toBeVisible(); } diff --git a/integration-tests/Mocks.js b/integration-tests/Mocks.js index a78b5370..4ca13dce 100644 --- a/integration-tests/Mocks.js +++ b/integration-tests/Mocks.js @@ -347,30 +347,31 @@ export class Mocks { } async calledForAboutLink() { + return this.calledForOpenURLInNewTab('https://help.duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/'); + } + + async calledForHelpPagesLink() { + return this.calledForOpenURLInNewTab('https://duckduckgo.com/duckduckgo-help-pages/privacy/phishing-and-malware-protection/'); + } + + async calledForReportAsSafeLink(urlParam) { + const url = new URL('https://duckduckgo.com/malicious-site-protection/report-error'); + url.searchParams.set('url', urlParam); + + return this.calledForOpenURLInNewTab(url.toString()); + } + + async calledForOpenURLInNewTab(url) { if (this.platform.name === 'android') { const calls = await this.outgoing({ names: ['openInNewTab'] }); - expect(calls).toMatchObject([ - [ - 'openInNewTab', - JSON.stringify({ - url: 'https://help.duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/', - }), - ], - ]); + expect(calls).toMatchObject([['openInNewTab', JSON.stringify({ url })]]); return; } if (this.platform.name === 'macos' || this.platform.name === 'ios') { const calls = await this.outgoing({ names: ['privacyDashboardOpenUrlInNewTab'], }); - expect(calls).toMatchObject([ - [ - 'privacyDashboardOpenUrlInNewTab', - { - url: 'https://help.duckduckgo.com/duckduckgo-help-pages/privacy/web-tracking-protections/', - }, - ], - ]); + expect(calls).toMatchObject([['privacyDashboardOpenUrlInNewTab', { url }]]); return; } throw new Error('unreachable. mockCalledForAboutLink must be handled'); diff --git a/integration-tests/macos.spec-int.js b/integration-tests/macos.spec-int.js index e8bec2e9..46f3d77b 100644 --- a/integration-tests/macos.spec-int.js +++ b/integration-tests/macos.spec-int.js @@ -34,16 +34,46 @@ test('invalid/missing certificate', { tag: '@screenshots' }, async ({ page }) => await dash.showsInvalidCertDetail(); }); -test('phishing warning', { tag: '@screenshots' }, async ({ page }) => { - /** @type {DashboardPage} */ - const dash = await DashboardPage.webkit(page, { platform: 'macos' }); - await dash.addState([testDataStates.phishing]); - await dash.screenshot('phishing-warning.png'); - await dash.hasPhishingIcon(); - await dash.hasPhishingHeadingText(); - await dash.hasPhishingWarningText(); - await dash.hasPhishingStatusText(); - await dash.connectionLinkDoesntShow(); +test.describe('phishing & malware protection', () => { + test('phishing warning', { tag: '@screenshots' }, async ({ page }) => { + /** @type {DashboardPage} */ + const dash = await DashboardPage.webkit(page, { platform: 'macos' }); + await dash.addState([testDataStates.phishing]); + await dash.screenshot('phishing-warning.png'); + await dash.hasPhishingIcon(); + await dash.hasPhishingHeadingText(); + await dash.hasPhishingWarningText(); + await dash.hasPhishingStatusText(); + await dash.connectionLinkDoesntShow(); + }); + + test('malware warning', { tag: '@screenshots' }, async ({ page }) => { + /** @type {DashboardPage} */ + const dash = await DashboardPage.webkit(page, { platform: 'macos' }); + await dash.addState([testDataStates.malware]); + await dash.screenshot('malware-warning.png'); + await dash.hasMalwareIcon(); + await dash.hasMalwareHeadingText(); + await dash.hasMalwareWarningText(); + await dash.hasMalwareStatusText(); + await dash.connectionLinkDoesntShow(); + }); + + test('shows report as safe link', async ({ page }) => { + /** @type {DashboardPage} */ + const dash = await DashboardPage.webkit(page, { platform: 'macos' }); + await dash.addState([testDataStates.malware]); + await dash.clickReportAsSafeLink(); + await dash.mocks.calledForReportAsSafeLink('https://privacy-test-pages.site/security/badware/malware.html'); + }); + + test('shows help page link', async ({ page }) => { + /** @type {DashboardPage} */ + const dash = await DashboardPage.webkit(page, { platform: 'macos' }); + await dash.addState([testDataStates.malware]); + await dash.clickHelpPageLink(); + await dash.mocks.calledForHelpPagesLink(); + }); }); test('insecure certificate', async ({ page }) => { diff --git a/integration-tests/macos.spec-int.js-snapshots/malware-warning-macos-darwin.png b/integration-tests/macos.spec-int.js-snapshots/malware-warning-macos-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..284e9536264262b8dbd4e1e21e813e2ef16c2fb3 GIT binary patch literal 41503 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 literal 40144 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]>r;b0pqznUaNh=Tq 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.0.0", + "node": ">=22.0.0", "npm": ">=9.0.0" } }, diff --git a/schema/__generated__/schema.parsers.mjs b/schema/__generated__/schema.parsers.mjs index 51b9f28a..36d682e6 100644 --- a/schema/__generated__/schema.parsers.mjs +++ b/schema/__generated__/schema.parsers.mjs @@ -87,8 +87,8 @@ export const localeSettingsSchema = z.object({ locale: z.string() }); -export const phishingStatusSchema = z.object({ - phishingStatus: z.boolean() +export const maliciousSiteStatusSchema = z.object({ + kind: z.union([z.literal("phishing"), z.literal("malware")]).nullable() }); export const parentEntitySchema = z.object({ @@ -243,7 +243,7 @@ export const tabSchema = z.object({ upgradedHttps: z.boolean(), protections: protectionsStatusSchema, localeSettings: localeSettingsSchema.optional(), - phishingStatus: phishingStatusSchema.optional(), + maliciousSiteStatus: maliciousSiteStatusSchema.optional(), parentEntity: parentEntitySchema.optional(), specialDomainName: z.string().optional() }); diff --git a/schema/__generated__/schema.types.ts b/schema/__generated__/schema.types.ts index 471dff25..110c6ac2 100644 --- a/schema/__generated__/schema.types.ts +++ b/schema/__generated__/schema.types.ts @@ -347,7 +347,7 @@ export interface Tab { upgradedHttps: boolean; protections: ProtectionsStatus; localeSettings?: LocaleSettings; - phishingStatus?: PhishingStatus; + maliciousSiteStatus?: MaliciousSiteStatus; parentEntity?: ParentEntity; /** * Provide this if the current tab is a domain that we cannot provide regular dashboard features for (like new tab, about://blank etc) @@ -385,13 +385,13 @@ export interface LocaleSettings { locale: string; } /** - * This describes the payload required to set the phishing status + * This describes the payload required to set the phishing & malware status */ -export interface PhishingStatus { +export interface MaliciousSiteStatus { /** - * Set to true if page is potentially malicious + * Kind of threat detected */ - phishingStatus: boolean; + kind: "phishing" | "malware" | null; } /** * This fields required to describe a 'parent entity' diff --git a/schema/get-privacy-dashboard-data.json b/schema/get-privacy-dashboard-data.json index fbbd07da..a5c42ada 100644 --- a/schema/get-privacy-dashboard-data.json +++ b/schema/get-privacy-dashboard-data.json @@ -51,8 +51,8 @@ "localeSettings": { "$ref": "./locale.json" }, - "phishingStatus": { - "$ref": "./phishing.json" + "maliciousSiteStatus": { + "$ref": "./malicious-site.json" }, "parentEntity": { "$ref": "./parent-entity.json" }, "specialDomainName": { diff --git a/schema/malicious-site.json b/schema/malicious-site.json new file mode 100644 index 00000000..c13b86bd --- /dev/null +++ b/schema/malicious-site.json @@ -0,0 +1,14 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MaliciousSiteStatus", + "type": "object", + "description": "This describes the payload required to set the phishing & malware status", + "additionalProperties": false, + "required": ["kind"], + "properties": { + "kind": { + "description": "Kind of threat detected", + "enum": ["phishing", "malware", null] + } + } +} diff --git a/schema/phishing.json b/schema/phishing.json deleted file mode 100644 index c2467993..00000000 --- a/schema/phishing.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "PhishingStatus", - "type": "object", - "description": "This describes the payload required to set the phishing status", - "additionalProperties": false, - "required": ["phishingStatus"], - "properties": { - "phishingStatus": { - "description": "Set to true if page is potentially malicious", - "type": "boolean" - } - } -} diff --git a/shared/data/constants.js b/shared/data/constants.js index 367843fe..d3d0ba86 100644 --- a/shared/data/constants.js +++ b/shared/data/constants.js @@ -11,4 +11,10 @@ export const httpsMessages = { none: 'site:connectionNotSecure.title', invalid: 'site:connectionNotSecureInvalidCertificate.title', phishing: 'site:phishingWebsite.title', + malware: 'site:malwareWebsite.title', +}; + +export const duckDuckGoURLs = { + phishingAndMalwareHelpPage: 'https://duckduckgo.com/duckduckgo-help-pages/privacy/phishing-and-malware-protection/', + reportSiteAsSafeForm: 'https://duckduckgo.com/malicious-site-protection/report-error', }; diff --git a/shared/js/browser/common.js b/shared/js/browser/common.js index 86d2b953..fb270230 100644 --- a/shared/js/browser/common.js +++ b/shared/js/browser/common.js @@ -160,19 +160,19 @@ export function assert(condition, message = '') { export function onChangeLocale(payload) {} /** - * Sets the phishing status for a page. This is a required call. + * Sets the phishing & malware status for a page. This is a required call. * - * Example Payload: see {@link "Generated Schema Definitions".PhishingStatus} + * Example Payload: see {@link "Generated Schema Definitions".MaliciousSiteStatus} * * ```json * { - * "phishingStatus": true + * "kind": "phishing" * } * ``` * - * @param {import('../../../schema/__generated__/schema.types').PhishingStatus} payload + * @param {import('../../../schema/__generated__/schema.types').MaliciousSiteStatus} payload */ -export function onChangePhishingStatus(payload) {} +export function onChangeMaliciousSiteStatus(payload) {} /** * Sets the Feature Settings diff --git a/shared/js/browser/macos-communication.js b/shared/js/browser/macos-communication.js index 50066b6d..fbb05a9b 100644 --- a/shared/js/browser/macos-communication.js +++ b/shared/js/browser/macos-communication.js @@ -16,7 +16,7 @@ import invariant from 'tiny-invariant'; import { cookiePromptManagementStatusSchema, localeSettingsSchema, - phishingStatusSchema, + maliciousSiteStatusSchema, protectionsStatusSchema, requestDataSchema, toggleReportScreenSchema, @@ -61,8 +61,8 @@ let isPendingUpdates; let parentEntity; const cookiePromptManagementStatus = {}; -/** @type {boolean | undefined} */ -let phishingStatus; +/** @type {import('../../../schema/__generated__/schema.types').MaliciousSiteStatus} */ +let maliciousSiteStatus; /** @type {string | undefined} */ let locale; @@ -71,7 +71,7 @@ const combineSources = () => ({ tab: Object.assign( {}, trackerBlockingData || {}, - { phishingStatus: phishingStatus ?? false }, + { maliciousSiteStatus: maliciousSiteStatus ?? false }, { isPendingUpdates, parentEntity, @@ -89,8 +89,8 @@ const resolveInitialRender = function () { const isIsProtectedSet = typeof protections !== 'undefined'; const isTrackerBlockingDataSet = typeof trackerBlockingData === 'object'; const isLocaleSet = typeof locale === 'string'; - const isPhishingSet = typeof phishingStatus === 'boolean'; - if (!isLocaleSet || !isUpgradedHttpsSet || !isIsProtectedSet || !isTrackerBlockingDataSet || !isPhishingSet) { + const isMaliciousSiteSet = isIOS() || (maliciousSiteStatus && maliciousSiteStatus.kind !== undefined); + if (!isLocaleSet || !isUpgradedHttpsSet || !isIsProtectedSet || !isTrackerBlockingDataSet || !isMaliciousSiteSet) { return; } getBackgroundTabDataPromises.forEach((resolve) => resolve(combineSources())); @@ -178,24 +178,24 @@ export function onChangeLocale(payload) { } /** - * {@inheritDoc common.onChangePhishingStatus} - * @type {import("./common.js").onChangePhishingStatus} + * {@inheritDoc common.onChangeMaliciousSiteStatus} + * @type {import("./common.js").onChangeMaliciousSiteStatus} * @group macOS -> JavaScript Interface * @example * * ```swift * // swift - * evaluate(js: "window.onChangePhishingStatus(\(phishingStatusJsonString))", in: webView) + * evaluate(js: "window.onChangeMaliciousSiteStatus(\(maliciousSiteStatusJsonString))", in: webView) * ``` */ -export function onChangePhishingStatus(payload) { - const parsed = phishingStatusSchema.safeParse(payload); +export function onChangeMaliciousSiteStatus(payload) { + const parsed = maliciousSiteStatusSchema.safeParse(payload); if (!parsed.success) { - console.error('could not parse incoming data from onChangePhishingStatus'); + console.error('could not parse incoming data from onChangeMaliciousSiteStatus'); console.error(parsed.error); return; } - phishingStatus = parsed.data.phishingStatus; + maliciousSiteStatus = parsed.data; resolveInitialRender(); } @@ -537,7 +537,7 @@ export function setupShared() { if (trackerBlockingData) trackerBlockingData.upgradedHttps = upgradedHttps; resolveInitialRender(); }; - window.onChangePhishingStatus = onChangePhishingStatus; + window.onChangeMaliciousSiteStatus = onChangeMaliciousSiteStatus; window.onChangeProtectionStatus = onChangeProtectionStatus; window.onChangeLocale = onChangeLocale; window.onChangeCertificateData = function (data) { diff --git a/shared/js/browser/utils/communication-mocks.mjs b/shared/js/browser/utils/communication-mocks.mjs index f33623d4..2567b697 100644 --- a/shared/js/browser/utils/communication-mocks.mjs +++ b/shared/js/browser/utils/communication-mocks.mjs @@ -49,7 +49,10 @@ export async function mockDataProvider(params) { } window.onChangeLocale?.(state.localeSettings); window.onChangeRequestData(state.url, { requests: state.requests || [] }); - window.onChangePhishingStatus?.(state.phishing); + + if (platform?.name === 'macos') { + window.onChangeMaliciousSiteStatus?.(state.maliciousSiteStatus); + } } export function windowsMockApis() { @@ -383,9 +386,9 @@ export function mockBrowserApis(params = { messages: {} }) { * @return {Promise} */ export async function installDebuggerMocks(platform) { - console.log('instaling...'); + console.log('installing...'); if (window.__playwright) { - console.log('instaling... NOE'); + console.log('installing... NOE'); return console.log('❌ mocked already there'); } if (platform.name === 'windows') { diff --git a/shared/js/browser/utils/request-details.mjs b/shared/js/browser/utils/request-details.mjs index bcc1ddc5..181a3e0a 100644 --- a/shared/js/browser/utils/request-details.mjs +++ b/shared/js/browser/utils/request-details.mjs @@ -33,7 +33,7 @@ export class TabData { * @param {Record | null | undefined} ctaScreens * @param {Record | null | undefined} search * @param {Record | null | undefined} emailProtection - * @param {boolean | undefined} phishingStatus + * @param {import("../../../../schema/__generated__/schema.types").MaliciousSiteStatus | undefined} maliciousSiteStatus * @param {{prevalence: number, displayName: string} | null | undefined} parentEntity * @param {string | null | undefined} error * @param {boolean | null | undefined} isInvalidCert @@ -53,7 +53,7 @@ export class TabData { ctaScreens, search, emailProtection, - phishingStatus, + maliciousSiteStatus, parentEntity, error, isInvalidCert @@ -71,7 +71,7 @@ export class TabData { this.ctaScreens = ctaScreens; this.search = search; this.emailProtection = emailProtection; - this.phishingStatus = phishingStatus; + this.maliciousSiteStatus = maliciousSiteStatus; this.parentEntity = parentEntity; this.error = error; this.isInvalidCert = isInvalidCert; @@ -108,7 +108,7 @@ export const createTabData = (tabUrl, upgradedHttps, protections, rawRequestData ctaScreens: undefined, search: undefined, emailProtection: undefined, - phishingStatus: undefined, + maliciousSiteStatus: undefined, isPendingUpdates: undefined, certificate: undefined, platformLimitations: undefined, diff --git a/shared/js/browser/utils/request-details.test.mjs b/shared/js/browser/utils/request-details.test.mjs index c395e4be..d015d2f4 100644 --- a/shared/js/browser/utils/request-details.test.mjs +++ b/shared/js/browser/utils/request-details.test.mjs @@ -260,7 +260,7 @@ describe('createTabData', () => { specialDomainName: undefined, status: 'complete', upgradedHttps: true, - phishingStatus: undefined, + maliciousSiteStatus: undefined, url: 'https://www.example.com/', }; deepEqual(tabData, expected); diff --git a/shared/js/ui/components/_button.scss b/shared/js/ui/components/_button.scss index 8a2a61d6..31cd351e 100644 --- a/shared/js/ui/components/_button.scss +++ b/shared/js/ui/components/_button.scss @@ -110,6 +110,47 @@ color: var(--color-accent-blue-active); } } + + &[data-variant='standard'] { + text-align: center; + padding: 10px 12px; + cursor: pointer; + display: block; + text-decoration: none; + width: 100%; + + box-shadow: var(--btn-accent-shadow); + border-radius: var(--btn-accent-border-radius); + border: var(--btn-accent-border); + color: var(--btn-accent-color); + background: var(--btn-accent-bg); + + &:hover { + background: var(--btn-accent-bg-hover); + } + &:active { + background: var(--btn-accent-bg-active); + } + + .environment--windows & { + /* Windows/Label */ + box-shadow: none; + font-style: normal; + font-weight: 400; + font-size: 14px; + line-height: 19px; + border-radius: 4px; + + &:focus { + /* todo(Shane): where does this live? */ + box-shadow: 0px 0px 0px 1px #ffffff, 0px 0px 0px 3px #3969ef; + } + + &:active { + box-shadow: none; + } + } + } } .button-bar { diff --git a/shared/js/ui/components/button.jsx b/shared/js/ui/components/button.jsx index b15ddc7c..57e4af7a 100644 --- a/shared/js/ui/components/button.jsx +++ b/shared/js/ui/components/button.jsx @@ -3,7 +3,7 @@ import { h } from 'preact'; /** * @typedef {object} ComponentProps - * @property {"desktop-vibrancy" | "desktop-standard" | "ios-secondary" | "macos-standard"} [variant] + * @property {"standard" | "desktop-vibrancy" | "desktop-standard" | "ios-secondary" | "macos-standard"} [variant] * @property {"big" | "desktop-large" | "small"} [btnSize] * @param {import("preact").ComponentProps<'button'> & ComponentProps} props */ diff --git a/shared/js/ui/models/site.js b/shared/js/ui/models/site.js index 49481c29..c1c84afd 100644 --- a/shared/js/ui/models/site.js +++ b/shared/js/ui/models/site.js @@ -1,7 +1,7 @@ /** * @typedef PublicSiteModel * @property {boolean} protectionsEnabled - * @property {'secure' | 'upgraded' | 'none' | 'invalid' | 'phishing'} httpsState + * @property {'secure' | 'upgraded' | 'none' | 'invalid' | 'phishing' | 'malware'} httpsState * @property {boolean} isBroken * @property {boolean} isAllowlisted * @property {boolean} isDenylisted diff --git a/shared/js/ui/platform-features.mjs b/shared/js/ui/platform-features.mjs index b374773e..f47d74b2 100644 --- a/shared/js/ui/platform-features.mjs +++ b/shared/js/ui/platform-features.mjs @@ -82,7 +82,7 @@ export function createPlatformFeatures(platform) { initialScreen: screen, opener, supportsInvalidCertsImplicitly: platform.name !== 'browser' && platform.name !== 'windows', - supportsPhishingWarning: platform.name === 'macos', + supportsMaliciousSiteWarning: platform.name === 'macos', includeToggleOnBreakageForm, breakageScreen, randomisedCategories, @@ -104,7 +104,7 @@ export class PlatformFeatures { * @param {boolean} params.supportsInvalidCertsImplicitly * @param {boolean} params.includeToggleOnBreakageForm * @param {InitialScreen} params.breakageScreen - * @param {boolean} params.supportsPhishingWarning + * @param {boolean} params.supportsMaliciousSiteWarning * @param {boolean} params.randomisedCategories * @param {"default" | "material-web-dialog"} params.breakageFormCategorySelect */ @@ -140,10 +140,10 @@ export class PlatformFeatures { */ this.includeToggleOnBreakageForm = params.includeToggleOnBreakageForm; /** - * Does the current platform support phishing warnings? + * Does the current platform support phishing and malware warnings? * @type {boolean} */ - this.supportsPhishingWarning = params.supportsPhishingWarning; + this.supportsMaliciousSiteWarning = params.supportsMaliciousSiteWarning; /** * @type {import("../../../schema/__generated__/schema.types").EventOrigin['screen']} */ diff --git a/shared/js/ui/templates/key-insights.js b/shared/js/ui/templates/key-insights.js index fa6ce5c5..410b4e04 100644 --- a/shared/js/ui/templates/key-insights.js +++ b/shared/js/ui/templates/key-insights.js @@ -3,6 +3,7 @@ import raw from 'nanohtml/raw'; import { i18n } from '../base/localize.js'; import { normalizeCompanyName } from '../models/mixins/normalize-company-name.mjs'; import { getColorId } from './shared/utils.js'; +import { duckDuckGoURLs } from '../../../data/constants.js'; const keyInsightsState = /** @type {const} */ ({ /* 01 */ insecure: 'insecure', @@ -16,6 +17,7 @@ const keyInsightsState = /** @type {const} */ ({ /* 09 */ invalid: 'invalid', /* 10 */ noneBlocked_firstPartyAllowed: 'noneBlocked_firstPartyAllowed', /* 11 */ phishing: 'phishing', + /* 12 */ malware: 'malware', }); /** @@ -29,6 +31,7 @@ export function renderKeyInsight(modelOverride) { /** @type {keyInsightsState[keyof keyInsightsState]} */ const state = (() => { if (model.httpsState === 'phishing') return keyInsightsState.phishing; + if (model.httpsState === 'malware') return keyInsightsState.malware; if (model.httpsState === 'none') return keyInsightsState.insecure; if (model.httpsState === 'invalid') return keyInsightsState.invalid; if (model.isBroken) return keyInsightsState.broken; @@ -152,6 +155,25 @@ export function renderKeyInsight(modelOverride) { + `; + }, + malware: () => { + const text = i18n.t('site:malwareWebsiteDesc.title', { domain: model.tab.domain }); + return html` +
+
+ ${title(model.tab.domain)} ${description(raw(text))} +
`; }, diff --git a/shared/js/ui/templates/page-connection.js b/shared/js/ui/templates/page-connection.js index 1cda6291..3e5ab117 100644 --- a/shared/js/ui/templates/page-connection.js +++ b/shared/js/ui/templates/page-connection.js @@ -55,7 +55,14 @@ function getKeyUsage(key) { * @param {import("../../browser/utils/request-details.mjs").TabData} tab */ export function renderCertificateDetails(site, tab) { - if (site.httpsState === 'none' || site.httpsState === 'phishing' || !tab.certificate || tab.certificate.length === 0) return null; + if ( + site.httpsState === 'none' || + site.httpsState === 'phishing' || + site.httpsState === 'malware' || + !tab.certificate || + tab.certificate.length === 0 + ) + return null; const certificate = tab.certificate[0]; return html` @@ -162,6 +169,9 @@ export function renderConnectionDescription(site, tab) { if (site.httpsState === 'phishing') { return i18n.t('connection:phishingWebsiteDesc.title', { domain: tab.domain }); } + if (site.httpsState === 'malware') { + return i18n.t('connection:malwareWebsiteDesc.title', { domain: tab.domain }); + } if (site.httpsState === 'invalid') { return i18n.t('connection:invalidConnectionDesc.title', { domain: tab.domain }); } diff --git a/shared/js/ui/templates/shared/thirdparty-text.js b/shared/js/ui/templates/shared/thirdparty-text.js index 1ef80f66..04c4df7e 100644 --- a/shared/js/ui/templates/shared/thirdparty-text.js +++ b/shared/js/ui/templates/shared/thirdparty-text.js @@ -37,11 +37,11 @@ export function thirdpartyTitle(requestDetails, protectionsEnabled) { /** * @param {import("../../../browser/utils/request-details.mjs").RequestDetails} requestDetails * @param {boolean} protectionsEnabled - * @param {boolean} [phishingDetected] + * @param {import("../../../../../schema/__generated__/schema.types").MaliciousSiteStatus['kind']} [threatDetected] * @returns {'info'|'blocked'} */ -export function thirdpartyIcon(requestDetails, protectionsEnabled, phishingDetected) { - if (phishingDetected) { +export function thirdpartyIcon(requestDetails, protectionsEnabled, threatDetected) { + if (threatDetected === 'phishing' || threatDetected === 'malware') { return 'info'; } diff --git a/shared/js/ui/templates/shared/tracker-networks-text.js b/shared/js/ui/templates/shared/tracker-networks-text.js index 4c022cfa..59b5c79e 100644 --- a/shared/js/ui/templates/shared/tracker-networks-text.js +++ b/shared/js/ui/templates/shared/tracker-networks-text.js @@ -38,11 +38,11 @@ export function trackerNetworksTitle(requestDetails, protectionsEnabled) { /** * @param {import("../../../browser/utils/request-details.mjs").RequestDetails} requestDetails * @param {any} protectionsEnabled - * @param {boolean} [phishingDetected] + * @param {import("../../../../../schema/__generated__/schema.types").MaliciousSiteStatus['kind']} [threatDetected] * @returns {'info'|'blocked'|'warning'} */ -export function trackerNetworksIcon(requestDetails, protectionsEnabled, phishingDetected) { - if (phishingDetected) { +export function trackerNetworksIcon(requestDetails, protectionsEnabled, threatDetected) { + if (threatDetected === 'phishing' || threatDetected === 'malware') { return 'info'; } diff --git a/shared/js/ui/views/main-nav.js b/shared/js/ui/views/main-nav.js index 365954be..198012b0 100644 --- a/shared/js/ui/views/main-nav.js +++ b/shared/js/ui/views/main-nav.js @@ -15,7 +15,7 @@ export function template(model, nav) { const networkTrackersLink = shouldRenderTrackerNetworksLink(model) ? html`` : ''; - const renderConnectionAsText = model.httpsState === 'phishing'; + const renderConnectionAsText = model.httpsState === 'phishing' || model.httpsState === 'malware'; const connectionRow = renderConnectionAsText ? html`` : html``; @@ -115,7 +115,7 @@ function renderConnectionText(model) { */ function renderTrackerNetworksNew(model, cb) { const title = trackerNetworksTitle(model.tab.requestDetails, model.protectionsEnabled); - const icon = trackerNetworksIcon(model.tab.requestDetails, model.protectionsEnabled, model.tab.phishingStatus); + const icon = trackerNetworksIcon(model.tab.requestDetails, model.protectionsEnabled, model.tab.maliciousSiteStatus?.kind || null); return html` { requests: [], permissions, }), + malware: new MockData({ + url: 'https://privacy-test-pages.site/security/badware/malware.html?">someQueryParam=false', + requests: [], + maliciousSiteStatus: { + kind: 'malware', + }, + certificate: defaultCertificates, + }), phishing: new MockData({ - url: 'https://privacy-test-pages.site/security/badware/phishing.html', + url: 'https://privacy-test-pages.site/security/badware/phishing.html?query=param&and=another', requests: [], - phishing: { - phishingStatus: true, + maliciousSiteStatus: { + kind: 'phishing', }, certificate: defaultCertificates, }), diff --git a/shared/locales/en/site.json b/shared/locales/en/site.json index dd549829..a5d62f64 100644 --- a/shared/locales/en/site.json +++ b/shared/locales/en/site.json @@ -71,6 +71,14 @@ "title": "Copied to your clipboard!", "note": "Note to inform that the email address was copied" }, + "reportWebsiteAsSafeCTA": { + "title": "Report site as safe", + "note": "Button label text for a trigger that shows a feedback form in which the user can report the current website as safe" + }, + "aboutPhishingMalwareLink": { + "title": "About our phishing and malware protection", + "note": "Label for a link that takes the user to a help page about Phishing & Malware protection" + }, "websiteNotWorkingQ": { "title": "Website not working as expected?", "note": "Call to action for user to click if they are having issues with this web page" @@ -143,6 +151,14 @@ "title": "This website may be impersonating a legitimate site in order to trick you into providing personal information, such as passwords or credit card numbers.", "note": "Shown as the description text when the URL is reported as a phishing website." }, + "malwareWebsite": { + "title": "Site May Be Deceptive", + "note": "Shown as the button text when the URL is reported as a phishing website." + }, + "malwareWebsiteDesc": { + "title": "This site has been flagged for distributing malware designed to compromise your device or steal your personal information.", + "note": "Shown as the description text when the URL is reported as a malware website." + }, "trackerNetworksDesc": { "title": "Requests Blocked from Loading", "note": "This indicates that 1 or more trackers were blocked." diff --git a/swift-package/Tests/PrivacyDashboardTests.swift b/swift-package/Tests/PrivacyDashboardTests.swift deleted file mode 100644 index 1d6d0e72..00000000 --- a/swift-package/Tests/PrivacyDashboardTests.swift +++ /dev/null @@ -1,11 +0,0 @@ -import XCTest -@testable import PrivacyDashboardResources - -final class PrivacyDashboardTests: XCTestCase { - func testExample() throws { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct - // results. - XCTAssertTrue(true) - } -} diff --git a/types.ts b/types.ts index 511ef073..0a84f783 100644 --- a/types.ts +++ b/types.ts @@ -43,7 +43,7 @@ interface Window { onChangeAllowedPermissions: any; onChangeUpgradedHttps: any; onChangeProtectionStatus: (protections: import('./shared/js/browser/utils/protections.mjs').Protections) => void; - onChangePhishingStatus?: any; + onChangeMaliciousSiteStatus?: any; onChangeCertificateData: any; onIsPendingUpdates: any; diff --git a/v2/components/protection-header.jsx b/v2/components/protection-header.jsx index 1d1d255b..be035336 100644 --- a/v2/components/protection-header.jsx +++ b/v2/components/protection-header.jsx @@ -6,35 +6,77 @@ import { TextLink } from '../../shared/js/ui/components/text-link'; import { useNav } from '../navigation'; import { ns } from '../../shared/js/ui/base/localize'; import { CheckBrokenSiteReportHandledMessage } from '../../shared/js/browser/common'; +import { duckDuckGoURLs } from '../../shared/data/constants'; -export function ProtectionHeader() { +/** + * @param {string} urlString + * @returns {string} + */ +const sanitizeURL = (urlString) => { + if (!urlString) return ''; + + try { + const url = new URL(urlString); + + return `${url.origin}${url.pathname}`; + } catch (error) { + return ''; + } +}; + +export function BreakageFormLink() { const { push } = useNav(); - const data = useData(); - const onToggle = useToggle(); const fetcher = useFetcher(); - const { breakageScreen } = useFeatures(); const featureSettings = useFeatureSettings(); + const { breakageScreen } = useFeatures(); + + return ( + { + // this is a workaround for ios, to ensure we follow the old implementation + fetcher(new CheckBrokenSiteReportHandledMessage()) + .then(() => { + if (featureSettings.webBreakageForm.state === 'enabled') { + push(breakageScreen); + } + }) + .catch(console.error); + }} + rounded={true} + > + {ns.site('websiteNotWorkingPrompt.title')} + + ); +} + +export function PhishingMalwareLink() { + const { + tab: { url }, + } = useData(); + + const sanitizedURLParam = sanitizeURL(url); + const reportPageURL = new URL(duckDuckGoURLs.reportSiteAsSafeForm); + reportPageURL.searchParams.set('url', sanitizedURLParam); + + return ( + + {ns.site('reportWebsiteAsSafeCTA.title')} + + ); +} + +export function ProtectionHeader() { + const data = useData(); + const onToggle = useToggle(); + + const isMaliciousSite = + data.tab?.maliciousSiteStatus && + (data.tab.maliciousSiteStatus.kind === 'phishing' || data.tab.maliciousSiteStatus.kind === 'malware'); return (
-
- { - // this is a workaround for ios, to ensure we follow the old implementation - fetcher(new CheckBrokenSiteReportHandledMessage()) - .then(() => { - if (featureSettings.webBreakageForm.state === 'enabled') { - push(breakageScreen); - } - }) - .catch(console.error); - }} - rounded={true} - > - {ns.site('websiteNotWorkingPrompt.title')} - -
+
{isMaliciousSite ? : }
); diff --git a/v2/data-provider.js b/v2/data-provider.js index 4527f442..5959744e 100644 --- a/v2/data-provider.js +++ b/v2/data-provider.js @@ -18,8 +18,7 @@ import { useNav } from './navigation'; /** * @typedef {Object} DataChannelPublicData * @property {boolean} protectionsEnabled - * @property {'secure' | 'upgraded' | 'none' | 'invalid' | 'phishing'} httpsState - * @property {boolean} isBroken + * @property {'secure' | 'upgraded' | 'none' | 'invalid' | 'phishing' | 'malware'} httpsState * @property {boolean} isBroken * @property {boolean} isAllowlisted * @property {boolean} isDenylisted * @property {boolean} displayBrokenUI @@ -37,7 +36,7 @@ import { useNav } from './navigation'; export class DataChannel extends EventTarget { protectionsEnabled = false; - /** @type {'secure' | 'upgraded' | 'none' | 'invalid' | 'phishing'} */ + /** @type {'secure' | 'upgraded' | 'none' | 'invalid' | 'phishing' | 'malware'} */ httpsState = 'none'; isBroken = false; isAllowlisted = false; @@ -177,9 +176,10 @@ export class DataChannel extends EventTarget { /** @type {import('../shared/js/ui/models/site.js').PublicSiteModel['httpsState']} */ const nextState = (() => { - if (this.features.supportsPhishingWarning) { - if (this.tab.phishingStatus) { - return 'phishing'; + if (this.features.supportsMaliciousSiteWarning && this.tab.maliciousSiteStatus) { + const { kind } = this.tab.maliciousSiteStatus; + if (kind === 'phishing' || kind === 'malware') { + return kind; } }