From 026ab90f9b4ac7eb8fec50a9e84f4a969abeb450 Mon Sep 17 00:00:00 2001 From: Shane Osbourne Date: Tue, 13 Dec 2022 18:29:05 +0000 Subject: [PATCH] WIP windows support for CPM --- build/app/public/js/base.js | 70 ++++++++++++------ integration-tests/DashboardPage.js | 4 + integration-tests/android.spec-int.js | 8 ++ .../consent-managed-android-darwin.png | Bin 0 -> 41357 bytes integration-tests/helpers.js | 6 ++ integration-tests/macos.spec-int.js | 8 ++ .../consent-managed-macos-darwin.png | Bin 0 -> 37470 bytes integration-tests/windows.spec-int.js | 8 ++ .../consent-managed-windows-darwin.png | Bin 0 -> 37396 bytes schema/__generated__/schema.parsers.js | 9 ++- schema/__generated__/schema.types.ts | 18 +++++ schema/cookie-prompt-management-status.json | 22 ++++++ schema/windows-view-model.json | 3 +- .../js/browser/android-communication.es6.js | 6 +- shared/js/browser/macos-communication.es6.js | 6 +- shared/js/browser/utils/overrides.js | 2 +- shared/js/browser/utils/request-details.js | 12 ++- .../js/browser/windows-communication.es6.js | 1 + shared/js/ui/views/main-nav.js | 16 ++-- shared/js/ui/views/tests/generate-data.js | 16 ++++ 20 files changed, 174 insertions(+), 41 deletions(-) create mode 100644 integration-tests/android.spec-int.js-snapshots/consent-managed-android-darwin.png create mode 100644 integration-tests/macos.spec-int.js-snapshots/consent-managed-macos-darwin.png create mode 100644 integration-tests/windows.spec-int.js-snapshots/consent-managed-windows-darwin.png create mode 100644 schema/cookie-prompt-management-status.json diff --git a/build/app/public/js/base.js b/build/app/public/js/base.js index ef6f44ae..8108aac9 100644 --- a/build/app/public/js/base.js +++ b/build/app/public/js/base.js @@ -28341,7 +28341,7 @@ module.exports={ Object.defineProperty(exports, "__esModule", { value: true }); -exports.windowsViewModelSchema = exports.windowsIncomingVisibilitySchema = exports.windowsIncomingViewModelSchema = exports.windowsIncomingMessageSchema = exports.tabSchema = exports.stateBlockedSchema = exports.stateAllowedSchema = exports.setListOptionsSchema = exports.searchSchema = exports.ruleExceptionReasonSchema = exports.requestDataSchema = exports.refreshAliasResponseSchema = exports.protectionsStatusSchema = exports.protectionsDisabledReasonSchema = exports.parentEntitySchema = exports.ownedByFirstPartyReasonSchema = exports.otherThirdPartyRequestReasonSchema = exports.localeSettingsSchema = exports.getPrivacyDashboardDataSchema = exports.extensionMessageSetListOptionsSchema = exports.extensionMessageGetPrivacyDashboardDataSchema = exports.emailProtectionUserDataSchema = exports.detectedRequestSchema = exports.breakageReportSchema = exports.breakageReportRequestSchema = exports.apiSchema = exports.adClickAttributionReasonSchema = void 0; +exports.windowsViewModelSchema = exports.windowsIncomingVisibilitySchema = exports.windowsIncomingViewModelSchema = exports.windowsIncomingMessageSchema = exports.tabSchema = exports.stateBlockedSchema = exports.stateAllowedSchema = exports.setListOptionsSchema = exports.searchSchema = exports.ruleExceptionReasonSchema = exports.requestDataSchema = exports.refreshAliasResponseSchema = exports.protectionsStatusSchema = exports.protectionsDisabledReasonSchema = exports.parentEntitySchema = exports.ownedByFirstPartyReasonSchema = exports.otherThirdPartyRequestReasonSchema = exports.localeSettingsSchema = exports.getPrivacyDashboardDataSchema = exports.extensionMessageSetListOptionsSchema = exports.extensionMessageGetPrivacyDashboardDataSchema = exports.emailProtectionUserDataSchema = exports.detectedRequestSchema = exports.cookiePromptManagementStatusSchema = exports.breakageReportSchema = exports.breakageReportRequestSchema = exports.apiSchema = exports.adClickAttributionReasonSchema = void 0; var _zod = require("zod"); // Generated by ts-to-zod @@ -28417,6 +28417,12 @@ var windowsIncomingVisibilitySchema = _zod.z.object({ }) }); exports.windowsIncomingVisibilitySchema = windowsIncomingVisibilitySchema; +var cookiePromptManagementStatusSchema = _zod.z.object({ + consentManaged: _zod.z["boolean"](), + optoutFailed: _zod.z["boolean"]().optional(), + selftestFailed: _zod.z["boolean"]().optional() +}); +exports.cookiePromptManagementStatusSchema = cookiePromptManagementStatusSchema; var refreshAliasResponseSchema = _zod.z.object({ personalAddress: _zod.z.string(), privateAddress: _zod.z.string() @@ -28471,7 +28477,8 @@ var windowsViewModelSchema = _zod.z.object({ upgradedHttps: _zod.z["boolean"](), parentEntity: parentEntitySchema.optional(), permissions: _zod.z.array(_zod.z.unknown()).optional(), - certificates: _zod.z.array(_zod.z.unknown()).optional() + certificates: _zod.z.array(_zod.z.unknown()).optional(), + cookiePromptManagementStatus: cookiePromptManagementStatusSchema.optional() }); exports.windowsViewModelSchema = windowsViewModelSchema; var windowsIncomingViewModelSchema = _zod.z.object({ @@ -28558,7 +28565,7 @@ var upgradedHttps; var protections; var isPendingUpdates; var parentEntity; -var consentManaged; +var cookiePromptManagementStatus; /** @type {string | undefined} */ var locale; @@ -28567,7 +28574,7 @@ var combineSources = function combineSources() { tab: Object.assign({}, trackerBlockingData || {}, { isPendingUpdates: isPendingUpdates, parentEntity: parentEntity, - consentManaged: consentManaged, + cookiePromptManagementStatus: cookiePromptManagementStatus, locale: locale }, permissionsData ? { permissions: permissionsData @@ -28879,7 +28886,7 @@ function setup() { }; window.onChangeConsentManaged = function (data) { var _channel7; - consentManaged = data; + cookiePromptManagementStatus = data; (_channel7 = channel) === null || _channel7 === void 0 ? void 0 : _channel7.send('updateTabData', { via: 'onChangeConsentManaged' }); @@ -29907,7 +29914,7 @@ var upgradedHttps; var protections; var isPendingUpdates; var parentEntity; -var consentManaged; +var cookiePromptManagementStatus; /** @type {string | undefined} */ var locale; @@ -29916,7 +29923,7 @@ var combineSources = function combineSources() { tab: Object.assign({}, trackerBlockingData || {}, { isPendingUpdates: isPendingUpdates, parentEntity: parentEntity, - consentManaged: consentManaged, + cookiePromptManagementStatus: cookiePromptManagementStatus, platformLimitations: true, locale: locale }, permissionsData ? { @@ -30152,7 +30159,7 @@ function setupShared() { }; window.onChangeConsentManaged = function (data) { var _channel7; - consentManaged = data; + cookiePromptManagementStatus = data; (_channel7 = channel) === null || _channel7 === void 0 ? void 0 : _channel7.send('updateTabData'); }; (0, _utils.setupGlobalOpenerListener)(function (href) { @@ -30290,7 +30297,7 @@ function getOverrides(searchString) { overrides.tab.protections = new _requestDetails.Protections(false, [], false, true); } if (params.get('consentManaged')) { - overrides.tab.consentManaged = { + overrides.tab.cookiePromptManagementStatus = { consentManaged: true, optoutFailed: false, selftestFailed: false @@ -30352,6 +30359,9 @@ function _defineProperties(target, props) { for (var i = 0; i < props.length; i+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +/** + * @typedef {import('../../../../schema/__generated__/schema.types.js').CookiePromptManagementStatus} CookiePromptManagementStatus + */ var Protections = /*#__PURE__*/function () { /** * @param {boolean} unprotectedTemporary @@ -30399,14 +30409,14 @@ var TabData = /*#__PURE__*/_createClass( /** @type {string | null | undefined} * * @param {Protections} protections * @param {any[] | null | undefined} permissions * @param {RequestDetails} requestDetails - * @param {{consentManaged, optoutFailed, selftestFailed} | null | undefined} consentManaged + * @param {CookiePromptManagementStatus | undefined | null} cookiePromptManagementStatus * @param {Record | null | undefined} ctaScreens * @param {Record | null | undefined} search * @param {Record | null | undefined} emailProtection * @param {{prevalence: number, displayName: string} | null | undefined} parentEntity * @param {string | null | undefined} error */ -function TabData(id, url, domain, specialDomainName, status, upgradedHttps, protections, permissions, requestDetails, consentManaged, ctaScreens, search, emailProtection, parentEntity, error) { +function TabData(id, url, domain, specialDomainName, status, upgradedHttps, protections, permissions, requestDetails, cookiePromptManagementStatus, ctaScreens, search, emailProtection, parentEntity, error) { _classCallCheck(this, TabData); _defineProperty(this, "locale", void 0); _defineProperty(this, "isPendingUpdates", void 0); @@ -30421,7 +30431,7 @@ function TabData(id, url, domain, specialDomainName, status, upgradedHttps, prot this.protections = protections; this.permissions = permissions; this.requestDetails = requestDetails; - this.consentManaged = consentManaged; + this.cookiePromptManagementStatus = cookiePromptManagementStatus; this.ctaScreens = ctaScreens; this.search = search; this.emailProtection = emailProtection; @@ -30455,7 +30465,7 @@ var createTabData = function createTabData(tabUrl, upgradedHttps, protections, r requestDetails: createRequestDetails(rawRequestData.requests, rawRequestData.installedSurrogates || []), parentEntity: undefined, permissions: undefined, - consentManaged: undefined, + cookiePromptManagementStatus: undefined, ctaScreens: undefined, search: undefined, emailProtection: undefined, @@ -30891,6 +30901,7 @@ function handleViewModelUpdate(viewModel) { certificateData = viewModel.certificates || []; protections = viewModel.protections; trackerBlockingData = (0, _requestDetails.createTabData)(viewModel.tabUrl, upgradedHttps, viewModel.protections, viewModel.rawRequestData); + trackerBlockingData.cookiePromptManagementStatus = viewModel.cookiePromptManagementStatus; if (trackerBlockingData) trackerBlockingData.upgradedHttps = upgradedHttps; resolveInitialRender(); } @@ -34308,19 +34319,21 @@ MainNavView.prototype = _jquery["default"].extend({}, _viewEs["default"].prototy * @returns {HTMLElement} */ function template() { - var _this$model$tab, _this$model$tab$conse; - var consentRow = (0, _bel["default"])(_templateObject || (_templateObject = _taggedTemplateLiteral(["
  • ", "
  • "])), renderCookieConsentManaged(this.model)); - return (0, _bel["default"])(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n \n "])), renderConnection(this.model, this.nav.connection), renderTrackerNetworksNew(this.model, this.nav.trackers), renderThirdPartyNew(this.model, this.nav.nonTrackers), (_this$model$tab = this.model.tab) !== null && _this$model$tab !== void 0 && (_this$model$tab$conse = _this$model$tab.consentManaged) !== null && _this$model$tab$conse !== void 0 && _this$model$tab$conse.consentManaged ? consentRow : null); + var _model$tab, _model$tab$cookieProm; + /** @type {import('../models/site.es6.js').PublicSiteModel} */ + var model = this.model; + var consentRow = (0, _bel["default"])(_templateObject || (_templateObject = _taggedTemplateLiteral(["
  • ", "
  • "])), renderCookieConsentManaged(model)); + return (0, _bel["default"])(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n \n "])), renderConnection(model, this.nav.connection), renderTrackerNetworksNew(model, this.nav.trackers), renderThirdPartyNew(model, this.nav.nonTrackers), (_model$tab = model.tab) !== null && _model$tab !== void 0 && (_model$tab$cookieProm = _model$tab.cookiePromptManagementStatus) !== null && _model$tab$cookieProm !== void 0 && _model$tab$cookieProm.consentManaged ? consentRow : null); } /** * @param {import('../models/site.es6.js').PublicSiteModel} model */ function renderCookieConsentManaged(model) { - var _model$tab; - if (!((_model$tab = model.tab) !== null && _model$tab !== void 0 && _model$tab.consentManaged)) return null; - var _model$tab$consentMan = model.tab.consentManaged, - consentManaged = _model$tab$consentMan.consentManaged, - optoutFailed = _model$tab$consentMan.optoutFailed; + var _model$tab2; + if (!((_model$tab2 = model.tab) !== null && _model$tab2 !== void 0 && _model$tab2.cookiePromptManagementStatus)) return null; + var _model$tab$cookieProm2 = model.tab.cookiePromptManagementStatus, + consentManaged = _model$tab$cookieProm2.consentManaged, + optoutFailed = _model$tab$cookieProm2.optoutFailed; if (consentManaged && !optoutFailed) { return (0, _bel["default"])(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n
    \n \n ", "\n
    \n "])), _localize.i18n.t('site:cookiesMinimized.title')); } @@ -35022,6 +35035,7 @@ var MockData = /*#__PURE__*/function () { * @param {any[]} [params.permissions] * @param {boolean} [params.specialDomainName] * @param {boolean} [params.emailUser] + * @param {boolean} [params.consentManaged] */ function MockData(params) { var _params$upgradedHttps; @@ -35040,6 +35054,15 @@ var MockData = /*#__PURE__*/function () { this.allowlisted = params.allowlisted; this.specialDomainName = params.specialDomainName; this.emailUser = params.emailUser; + this.consentManaged = params.consentManaged; + if (this.consentManaged) { + /** @type {import('../../../../../schema/__generated__/schema.types').CookiePromptManagementStatus} */ + this.cookiePromptManagementStatus = { + consentManaged: true, + optoutFailed: false, + selftestFailed: false + }; + } /** @type {Protections} */ this.protections = _requestDetails.Protections["default"](); @@ -35105,6 +35128,11 @@ function mockToExtensionDashboardMessage(mock) { /** @type {Record} */ var dataStates = { + 'consent-managed': new MockData({ + url: 'https://example.com', + requests: [], + consentManaged: true + }), 'locale-pl': new MockData({ localeSettings: { locale: 'pl' diff --git a/integration-tests/DashboardPage.js b/integration-tests/DashboardPage.js index e9e6d45c..3962b13b 100644 --- a/integration-tests/DashboardPage.js +++ b/integration-tests/DashboardPage.js @@ -202,6 +202,10 @@ export class DashboardPage { await this.page.getByRole('switch', { name: 'Disable Protections' }).click() } + async indicatesCookiesWereManaged() { + await this.page.getByText('Cookies Managed').waitFor({ timeout: 500 }) + } + async toggleProtectionsOn() { await this.page.locator('[aria-checked="false"]').click() } diff --git a/integration-tests/android.spec-int.js b/integration-tests/android.spec-int.js index 27477cc4..8790a6a1 100644 --- a/integration-tests/android.spec-int.js +++ b/integration-tests/android.spec-int.js @@ -92,4 +92,12 @@ if (!process.env.CI) { }) } }) + test.describe('screenshots for cookies', () => { + test('primary screen', async ({ page }) => { + const dash = await DashboardPage.android(page) + await dash.addStates([dataStates['consent-managed']]) + await dash.indicatesCookiesWereManaged() + await dash.screenshot('consent-managed.png') + }) + }) } diff --git a/integration-tests/android.spec-int.js-snapshots/consent-managed-android-darwin.png b/integration-tests/android.spec-int.js-snapshots/consent-managed-android-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..38d37d4132bdaa4b5022b234c7245a655cb33755 GIT binary patch literal 41357 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

    aa;OIco>Q)j2C>g%!!=a z^QYYQ+87T^%atGJ58QX~)8>6t^lj}5pE{Rlh=qd%3QYGMw!aLmS{Tj9A?+Mk@#NrD zi;KPEgGZ0X#I9bxd;*?^NKCr=k9`LYv@WiqIi`||Bose%Y-SFQw0+1e2^jCl4-N|A zm6D1i&mGru0-3ay^;ZGzH*c0Sz6kPVcw`4j0TQ$&G8#Bl=PzFlLivess%Dd>TteoA z)S1AVOiWFMO-l;?RW%0~w5@Mf)zHv*ZI2XAKN3C&862?vb{=ND4*fM$5PUF30;xq9 zJ%`ti6%oW9guwk3{1zFi1nZ-yp)Ou1`hup%&&{Xlrs?RsqZgTRjaYnpxo1*ZMw0Fp zgTgVeFLFk7v?`jaqcG`7R_B&TE3uj1BfB$i?2qC}Z&Z4AX3EsYJNtdY=U1W0NLg7U zbneyIdhbR%u~oblgN;n^ZM*_&VzfcbN|=*uX8`VANBg@)#surLD*HR$oUieK8= zfZ>A3h`|Cs!x&Od67>-o9o-Aj?1UXOC6NGn&q^iKp+%uT zG{9a0!4u^$j7Ylnf2h26#S(D7txd*o83h7J`jtf|qc+D@G+&a)fI$sH!TMzxKX%F! z=uW@}*BQ7`sztmd#jjHQ0c@w!?f=+F0qLd4rl*sBErO=}N!oGK0;b8a_KerYTh$3>NwjH(n0n zmku(ze*F_>4d?=h#-5-excgI3cmWVvR&B5Rj_V0f3fB^QwJ|D*$TUt~B_@MEQ&X5; z3J+m!L17&EnaGZUfrrZgg%m2RAoR9WOb(JQhR8?&&FKXS5trLVGW=6pTkaJ@@@MdL zr^BEOicAK}DftbUIdEHUpzQ;y%Yn+8+;a%&MMXu4=te0Hj@D<$*%`;of)n>H@dsFP{Kqvm{?jN zfP^iA(R#G;CA&)ei3d{#fPY?kdd64-T;FO;fy@Sw#?_?nLm)-N$bTJe9&-??SNFPc zUB|QopLZXVp^bkvtk2wXdn3a}YmPAwtXKhk>Ly{V)YI3B0#)*|Z%UW}5OIgNk=Rb+ z4%SpwzCs5g-4KKyo^dyZlh1(+4{7+{TS;_i6rR<1XlHj99%@3s!G4b$GYFcgJ`JC@ z59kPzVcb!>^>5rDP#Xj9jc3ZyS^M6jJ&~V;rg%y3wQd35S{J}NVmLHw;fA(O4pS4G zZsBR@)5_C}#HRE43@c7R*4dnV?Gc!C| z0()Lw48fSf7B+z{{QBY41I*m(-MKTIh7 zgl=d}--Lk=fEPjA0W1kn0PsJ`#`XfRGl-B@P)YEkki+y51Tw?nH|_Ka086H}{T8+w z^g^mApesPrzML99VNR=o+}CnxP1dGFKpWcua=uhH3D42z#zx;Qdst4OLmla0UGORw z4yK&pw_LdP6D1@bMNE5^vRm=4P(kvk<1^V?WEnN@Or{ro5ae3+$}YhObPP%m2r@?c zOzyn$^u!Euv?X~@l+sHa;jdq%aut<-g4Zqq-#H9fDOQ(t#Nlq9uEbUe* zd>mhP754Vi?ov-B!@U;e_wk#Y#byvF_Ao2sGB8n@D83eYzpQQN&VAm$biL`O0MdFO zw;Q^@t)Zcz4*v@T&hRQV^-k8qO&7>44W0yBmvHB|D$BL0hz=)gfRfoW;(Os?*>s<^ zM|*!OTi#y&M+K%fXijcRRR^fHkN7-SO-yl`4{Qf>e*w_VZq3Yhz`N$>#2=s9bMN9G7?u?9=#gNJ>h29n_9pOf#1-6O-9)Tyf3QzG$)I zdpy&$S@P1wk_G+OZ{7goy-0{(&@%vcAE9BcMcCAu@RQ{Y^y^w*``%~o**(mCZO)oe zaXb;4Zxbxr^mmS3G*W#r7*LIC!>0C9Z$B&Ej`=+sB<2OZJLpw5NbG#J?f(|Y`47m- z|Hof?71LV!^=sh-J5ZuwwrcU}E6VSw{)LRvOe89MLS%p_-8xVG{|qespFYoCh4jiA z;nL$C`JK`qj=cDm5dfu5Kv`=%Q%B|Y_faY?bK2+doqJiw9yxm1yTsXEv{KyVYoT-g zuF$UXo?mvUp#av@ub7FcT#her(F8V>zb|dP_v3zBk507^t8GJx-0V+=A4KsYUUOx= z0J)IH-}v4gJldt#=>Gdl0xgveP@n7g=hHIVd1n4%9tMBi8g0hU=qq!K(LK7>a2=ap zg|<^h`}EvgSyz{M3!le+;U{2FWTMipw09OciHqL*_03i|Qxh)pt>}0nvp!G3TZQPW zHcn4kMyn=F=R0-=ps=Gjde3RP^b)5X%*&m&0(Xy9J_@z7wGJ=Q;J~NAF_KJa`FKY^ z*Lno;!B48Kk%+OMiD}E0Eyt|`F|#8skGCZZ{doNclsuT#0?mZU@`R&?4UF#Q5-=ht zY6QCmU~&65Tm|79M0PJER11?PV6}YRmqVgTSzEB%AhtX!OSTP}CwqyGdVPAF0a*59P{}cPyHJhalU`#3pT| z6!+1m{$$DQ`y(%|U)TxIZfj--p52qMEs>mq*x9>~S#mfd280igJ<0p(?Ok`4d+)KmxwpGyjXxix>T{i6Kb7V z(Av*w>j4Tp=u)XaocHJqV@|@SO8F0A?#6zm-}A)1XB7fu8g>-^<+46|PRdpilO

  • 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 AK>z>% literal 0 HcmV?d00001 diff --git a/integration-tests/helpers.js b/integration-tests/helpers.js index d3fde119..af6abd9a 100644 --- a/integration-tests/helpers.js +++ b/integration-tests/helpers.js @@ -26,12 +26,14 @@ export async function playTimeline(page, states, platform) { const nextProtections = state.protections const nextLocale = state.localeSettings const nextPermissions = state.permissions + const nextCookiePromptManagementStatus = state.cookiePromptManagementStatus const nextRequestData = { requests: state.requests } if (platform?.name === 'windows') { for (const listener of window.__playwright.listeners || []) { // todo(Shane): Centralise this so that it's shared in the comms file listener({ + /** @type {import('../schema/__generated__/schema.types').WindowsIncomingViewModel} */ data: { Feature: 'PrivacyDashboard', Name: 'ViewModelUpdated', @@ -43,6 +45,7 @@ export async function playTimeline(page, states, platform) { parentEntity: nextParentEntity, permissions: nextPermissions, certificates: nextCerts, + cookiePromptManagementStatus: nextCookiePromptManagementStatus, }, }, }) @@ -73,6 +76,9 @@ export async function playTimeline(page, states, platform) { } return } + if (nextCookiePromptManagementStatus) { + window.onChangeConsentManaged(nextCookiePromptManagementStatus) + } window.onChangeParentEntity(nextParentEntity) window.onChangeProtectionStatus(nextProtections) window.onChangeUpgradedHttps(nextUpgradedHttps) diff --git a/integration-tests/macos.spec-int.js b/integration-tests/macos.spec-int.js index b3130f57..d52d2380 100644 --- a/integration-tests/macos.spec-int.js +++ b/integration-tests/macos.spec-int.js @@ -56,4 +56,12 @@ if (!process.env.CI) { }) } }) + test.describe('screenshots for cookies', () => { + test('primary screen', async ({ page }) => { + const dash = await DashboardPage.macos(page) + await dash.addStates([dataStates['consent-managed']]) + await dash.indicatesCookiesWereManaged() + await dash.screenshot('consent-managed.png') + }) + }) } diff --git a/integration-tests/macos.spec-int.js-snapshots/consent-managed-macos-darwin.png b/integration-tests/macos.spec-int.js-snapshots/consent-managed-macos-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..fc498b577443e6b05a2749c290b095ed2660aef7 GIT binary patch literal 37470 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 TxC!;)z(09u6{%_o!{Gk|HYc@O literal 0 HcmV?d00001 diff --git a/integration-tests/windows.spec-int.js b/integration-tests/windows.spec-int.js index b04b7d5a..e8b446d8 100644 --- a/integration-tests/windows.spec-int.js +++ b/integration-tests/windows.spec-int.js @@ -56,4 +56,12 @@ if (!process.env.CI) { }) } }) + test.describe('screenshots for cookies', () => { + test('primary screen', async ({ page }) => { + const dash = await DashboardPage.windows(page) + await dash.addStates([dataStates['consent-managed']]) + await dash.indicatesCookiesWereManaged() + await dash.screenshot('consent-managed.png') + }) + }) } diff --git a/integration-tests/windows.spec-int.js-snapshots/consent-managed-windows-darwin.png b/integration-tests/windows.spec-int.js-snapshots/consent-managed-windows-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..6a366f23b029e50b309f28fcfecc3d16f331e550 GIT binary patch literal 37396 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 KN3)Nd@%wK~Px7Y# literal 0 HcmV?d00001 diff --git a/schema/__generated__/schema.parsers.js b/schema/__generated__/schema.parsers.js index 881bf25a..47901048 100644 --- a/schema/__generated__/schema.parsers.js +++ b/schema/__generated__/schema.parsers.js @@ -73,6 +73,12 @@ export const windowsIncomingVisibilitySchema = z.object({ }) }); +export const cookiePromptManagementStatusSchema = z.object({ + consentManaged: z.boolean(), + optoutFailed: z.boolean().optional(), + selftestFailed: z.boolean().optional() +}); + export const refreshAliasResponseSchema = z.object({ personalAddress: z.string(), privateAddress: z.string() @@ -127,7 +133,8 @@ export const windowsViewModelSchema = z.object({ upgradedHttps: z.boolean(), parentEntity: parentEntitySchema.optional(), permissions: z.array(z.unknown()).optional(), - certificates: z.array(z.unknown()).optional() + certificates: z.array(z.unknown()).optional(), + cookiePromptManagementStatus: cookiePromptManagementStatusSchema.optional() }); export const windowsIncomingViewModelSchema = z.object({ diff --git a/schema/__generated__/schema.types.ts b/schema/__generated__/schema.types.ts index bc71d75e..c9dfc334 100644 --- a/schema/__generated__/schema.types.ts +++ b/schema/__generated__/schema.types.ts @@ -314,6 +314,24 @@ export interface WindowsViewModel { parentEntity?: ParentEntity; permissions?: unknown[]; certificates?: unknown[]; + cookiePromptManagementStatus?: CookiePromptManagementStatus; +} +/** + * This describes the fields needed for the dashboard to display the status of CPM (Cookie Prompt Management) + */ +export interface CookiePromptManagementStatus { + /** + * A required boolean flag to indicate if consent was managed automatically by the browser + */ + consentManaged: boolean; + /** + * An optional boolean flag to indicate if our attempts to optout automatically failed + */ + optoutFailed?: boolean; + /** + * An optional boolean to indicate that a "self-test" verification failed. Self-test is an optional "double-checking" that a browser can execute to confirm that the popup was indeed dismissed. It's mostly to catch rule regressions + */ + selftestFailed?: boolean; } export interface RefreshAliasResponse { personalAddress: string; diff --git a/schema/cookie-prompt-management-status.json b/schema/cookie-prompt-management-status.json new file mode 100644 index 00000000..0a90242a --- /dev/null +++ b/schema/cookie-prompt-management-status.json @@ -0,0 +1,22 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "CookiePromptManagementStatus", + "type": "object", + "description": "This describes the fields needed for the dashboard to display the status of CPM (Cookie Prompt Management)", + "required": ["consentManaged"], + "additionalProperties": false, + "properties": { + "consentManaged": { + "description": "A required boolean flag to indicate if consent was managed automatically by the browser", + "type": "boolean" + }, + "optoutFailed": { + "description": "An optional boolean flag to indicate if our attempts to optout automatically failed", + "type": "boolean" + }, + "selftestFailed": { + "description": "An optional boolean to indicate that a \"self-test\" verification failed. Self-test is an optional \"double-checking\" that a browser can execute to confirm that the popup was indeed dismissed. It's mostly to catch rule regressions", + "type": "boolean" + } + } +} diff --git a/schema/windows-view-model.json b/schema/windows-view-model.json index 3716f946..bf9a3db3 100644 --- a/schema/windows-view-model.json +++ b/schema/windows-view-model.json @@ -24,6 +24,7 @@ }, "certificates": { "type": "array" - } + }, + "cookiePromptManagementStatus": { "$ref": "./cookie-prompt-management-status.json" } } } diff --git a/shared/js/browser/android-communication.es6.js b/shared/js/browser/android-communication.es6.js index 408fc7d4..32e31fd8 100644 --- a/shared/js/browser/android-communication.es6.js +++ b/shared/js/browser/android-communication.es6.js @@ -28,7 +28,7 @@ let upgradedHttps let protections let isPendingUpdates let parentEntity -let consentManaged +let cookiePromptManagementStatus /** @type {string | undefined} */ let locale @@ -40,7 +40,7 @@ const combineSources = () => ({ { isPendingUpdates, parentEntity, - consentManaged, + cookiePromptManagementStatus, locale, }, permissionsData ? { permissions: permissionsData } : {}, @@ -313,7 +313,7 @@ export function setup() { } window.onChangeConsentManaged = function (data) { - consentManaged = data + cookiePromptManagementStatus = data channel?.send('updateTabData', { via: 'onChangeConsentManaged' }) } diff --git a/shared/js/browser/macos-communication.es6.js b/shared/js/browser/macos-communication.es6.js index 52e0e1fe..069dedde 100644 --- a/shared/js/browser/macos-communication.es6.js +++ b/shared/js/browser/macos-communication.es6.js @@ -47,7 +47,7 @@ let upgradedHttps let protections let isPendingUpdates let parentEntity -let consentManaged +let cookiePromptManagementStatus /** @type {string | undefined} */ let locale @@ -59,7 +59,7 @@ const combineSources = () => ({ { isPendingUpdates, parentEntity, - consentManaged, + cookiePromptManagementStatus, platformLimitations: true, locale, }, @@ -272,7 +272,7 @@ export function setupShared() { channel?.send('updateTabData') } window.onChangeConsentManaged = function (data) { - consentManaged = data + cookiePromptManagementStatus = data channel?.send('updateTabData') } setupGlobalOpenerListener((href) => { diff --git a/shared/js/browser/utils/overrides.js b/shared/js/browser/utils/overrides.js index 3e993100..08a54139 100644 --- a/shared/js/browser/utils/overrides.js +++ b/shared/js/browser/utils/overrides.js @@ -95,7 +95,7 @@ export function getOverrides(searchString) { } if (params.get('consentManaged')) { - overrides.tab.consentManaged = { + overrides.tab.cookiePromptManagementStatus = { consentManaged: true, optoutFailed: false, selftestFailed: false, diff --git a/shared/js/browser/utils/request-details.js b/shared/js/browser/utils/request-details.js index f6964a56..276f53f1 100644 --- a/shared/js/browser/utils/request-details.js +++ b/shared/js/browser/utils/request-details.js @@ -1,6 +1,10 @@ import { normalizeCompanyName, removeTLD } from '../../ui/models/mixins/normalize-company-name.es6.js' import { requestDataSchema } from '../../../../schema/__generated__/schema.parsers' +/** + * @typedef {import('../../../../schema/__generated__/schema.types.js').CookiePromptManagementStatus} CookiePromptManagementStatus + */ + export class Protections { /** * @param {boolean} unprotectedTemporary @@ -43,7 +47,7 @@ export class TabData { * @param {Protections} protections * @param {any[] | null | undefined} permissions * @param {RequestDetails} requestDetails - * @param {{consentManaged, optoutFailed, selftestFailed} | null | undefined} consentManaged + * @param {CookiePromptManagementStatus | undefined | null} cookiePromptManagementStatus * @param {Record | null | undefined} ctaScreens * @param {Record | null | undefined} search * @param {Record | null | undefined} emailProtection @@ -60,7 +64,7 @@ export class TabData { protections, permissions, requestDetails, - consentManaged, + cookiePromptManagementStatus, ctaScreens, search, emailProtection, @@ -76,7 +80,7 @@ export class TabData { this.protections = protections this.permissions = permissions this.requestDetails = requestDetails - this.consentManaged = consentManaged + this.cookiePromptManagementStatus = cookiePromptManagementStatus this.ctaScreens = ctaScreens this.search = search this.emailProtection = emailProtection @@ -111,7 +115,7 @@ export const createTabData = (tabUrl, upgradedHttps, protections, rawRequestData requestDetails: createRequestDetails(rawRequestData.requests, rawRequestData.installedSurrogates || []), parentEntity: undefined, permissions: undefined, - consentManaged: undefined, + cookiePromptManagementStatus: undefined, ctaScreens: undefined, search: undefined, emailProtection: undefined, diff --git a/shared/js/browser/windows-communication.es6.js b/shared/js/browser/windows-communication.es6.js index c15c39a8..87e634a2 100644 --- a/shared/js/browser/windows-communication.es6.js +++ b/shared/js/browser/windows-communication.es6.js @@ -105,6 +105,7 @@ function handleViewModelUpdate(viewModel) { protections = viewModel.protections trackerBlockingData = createTabData(viewModel.tabUrl, upgradedHttps, viewModel.protections, viewModel.rawRequestData) + trackerBlockingData.cookiePromptManagementStatus = viewModel.cookiePromptManagementStatus if (trackerBlockingData) trackerBlockingData.upgradedHttps = upgradedHttps diff --git a/shared/js/ui/views/main-nav.js b/shared/js/ui/views/main-nav.js index 8b75c049..bcd417f7 100644 --- a/shared/js/ui/views/main-nav.js +++ b/shared/js/ui/views/main-nav.js @@ -103,19 +103,21 @@ MainNavView.prototype = $.extend({}, Parent.prototype, { * @returns {HTMLElement} */ function template() { - const consentRow = bel`
  • ` + /** @type {import('../models/site.es6.js').PublicSiteModel} */ + const model = this.model + const consentRow = bel`` return bel` ` } @@ -123,9 +125,9 @@ function template() { * @param {import('../models/site.es6.js').PublicSiteModel} model */ function renderCookieConsentManaged(model) { - if (!model.tab?.consentManaged) return null + if (!model.tab?.cookiePromptManagementStatus) return null - const { consentManaged, optoutFailed } = model.tab.consentManaged + const { consentManaged, optoutFailed } = model.tab.cookiePromptManagementStatus if (consentManaged && !optoutFailed) { return bel`