Skip to content

Commit bc54e3d

Browse files
committed
Add mask-unless-allowlisted privacy level support for standard attributes action names
1 parent 3310e9c commit bc54e3d

File tree

5 files changed

+52
-32
lines changed

5 files changed

+52
-32
lines changed

packages/rum-core/src/domain/action/getActionNameFromElement.spec.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -643,6 +643,16 @@ describe('getActionNameFromElement', () => {
643643
expectedName: 'foo bar baz',
644644
expectedNameSource: 'text_content',
645645
},
646+
{
647+
html: `
648+
<div data-dd-privacy="mask-unless-allowlisted" aria-label="bar" target>
649+
<span>bar</span>
650+
</div>
651+
`,
652+
defaultPrivacyLevel: NodePrivacyLevel.MASK_UNLESS_ALLOWLISTED,
653+
expectedName: 'Masked Element',
654+
expectedNameSource: 'standard_attribute',
655+
},
646656
]
647657
testCases.forEach(({ html, defaultPrivacyLevel, allowlist, expectedName, expectedNameSource }) => {
648658
mockExperimentalFeatures([ExperimentalFeature.USE_TREE_WALKER_FOR_ACTION_NAME])

packages/rum-core/src/domain/action/getActionNameFromElement.ts

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ExperimentalFeature, isExperimentalFeatureEnabled, safeTruncate } from '@datadog/browser-core'
22
import { getPrivacySelector, NodePrivacyLevel } from '../privacyConstants'
3-
import { getNodePrivacyLevel, shouldMaskNode } from '../privacy'
3+
import { getNodePrivacyLevel, maskDisallowedTextContent, shouldMaskNode } from '../privacy'
44
import type { NodePrivacyLevelCache } from '../privacy'
55
import type { RumConfiguration } from '../configuration'
66
import { isElementNode } from '../../browser/htmlDomUtils'
@@ -84,7 +84,7 @@ const priorityStrategies: NameStrategy[] = [
8484
return getActionNameFromTextualContent(element, rumConfiguration)
8585
}
8686
},
87-
(element) => getActionNameFromStandardAttribute(element, 'aria-label'),
87+
(element, rumConfiguration) => getActionNameFromStandardAttribute(element, 'aria-label', rumConfiguration),
8888
// associated element text designated by the aria-labelledby attribute
8989
(element, rumConfiguration) => {
9090
const labelledByAttribute = element.getAttribute('aria-labelledby')
@@ -100,10 +100,10 @@ const priorityStrategies: NameStrategy[] = [
100100
}
101101
}
102102
},
103-
(element) => getActionNameFromStandardAttribute(element, 'alt'),
104-
(element) => getActionNameFromStandardAttribute(element, 'name'),
105-
(element) => getActionNameFromStandardAttribute(element, 'title'),
106-
(element) => getActionNameFromStandardAttribute(element, 'placeholder'),
103+
(element, rumConfiguration) => getActionNameFromStandardAttribute(element, 'alt', rumConfiguration),
104+
(element, rumConfiguration) => getActionNameFromStandardAttribute(element, 'name', rumConfiguration),
105+
(element, rumConfiguration) => getActionNameFromStandardAttribute(element, 'title', rumConfiguration),
106+
(element, rumConfiguration) => getActionNameFromStandardAttribute(element, 'placeholder', rumConfiguration),
107107
// SELECT first OPTION text
108108
(element, rumConfiguration) => {
109109
if ('options' in element && element.options.length > 0) {
@@ -169,9 +169,19 @@ function getElementById(refElement: Element, id: string) {
169169
return refElement.ownerDocument ? refElement.ownerDocument.getElementById(id) : null
170170
}
171171

172-
function getActionNameFromStandardAttribute(element: Element | HTMLElement, attribute: string): ActionName {
172+
function getActionNameFromStandardAttribute(
173+
element: Element | HTMLElement,
174+
attribute: string,
175+
rumConfiguration: RumConfiguration
176+
): ActionName {
177+
const { enablePrivacyForActionName, defaultPrivacyLevel } = rumConfiguration
178+
const nodeSelfPrivacyLevel = getNodePrivacyLevel(element, defaultPrivacyLevel)
179+
const attributeValue = element.getAttribute(attribute)
173180
return {
174-
name: element.getAttribute(attribute) || '',
181+
name:
182+
enablePrivacyForActionName && shouldMaskNode(element, nodeSelfPrivacyLevel)
183+
? maskDisallowedTextContent(attributeValue || '', ACTION_NAME_PLACEHOLDER)
184+
: attributeValue || '',
175185
nameSource: ActionNameSource.STANDARD_ATTRIBUTE,
176186
}
177187
}

test/apps/base-extension/yarn.lock

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,37 @@ __metadata:
77

88
"@datadog/browser-core@file:../../../packages/core/package.tgz::locator=rum-testing-extension%40workspace%3A.":
99
version: 6.22.0
10-
resolution: "@datadog/browser-core@file:../../../packages/core/package.tgz#../../../packages/core/package.tgz::hash=950c15&locator=rum-testing-extension%40workspace%3A."
11-
checksum: 10c0/db45d87fcedf84d8edd007d1ddc326f50401fad8717858c970b673c8efe9bbaf8ba40d750c4246269c1be0a0903e56528459f8dbd0e46b97391de216a25fa924
10+
resolution: "@datadog/browser-core@file:../../../packages/core/package.tgz#../../../packages/core/package.tgz::hash=c19f64&locator=rum-testing-extension%40workspace%3A."
11+
checksum: 10c0/ec4ffa3a9cfef2e19b73830e96bdc12d6fe526361105ff5618b240b7b8f4a82b979088dc5563bfad96ba11614950a80cb911f60064b6ec9a3df526756d6411d7
1212
languageName: node
1313
linkType: hard
1414

1515
"@datadog/browser-logs@file:../../../packages/logs/package.tgz::locator=rum-testing-extension%40workspace%3A.":
1616
version: 6.22.0
17-
resolution: "@datadog/browser-logs@file:../../../packages/logs/package.tgz#../../../packages/logs/package.tgz::hash=d3fc8a&locator=rum-testing-extension%40workspace%3A."
17+
resolution: "@datadog/browser-logs@file:../../../packages/logs/package.tgz#../../../packages/logs/package.tgz::hash=492958&locator=rum-testing-extension%40workspace%3A."
1818
dependencies:
1919
"@datadog/browser-core": "npm:6.22.0"
2020
peerDependencies:
2121
"@datadog/browser-rum": 6.22.0
2222
peerDependenciesMeta:
2323
"@datadog/browser-rum":
2424
optional: true
25-
checksum: 10c0/36037cbf215fcbc6fc30ee4e01c22a2e4d51dca0479d1ff58463d9c447914b7fd9a12f1cee02692bc8aa9113662589adc0c90554a051d148dd87ade97fdf2d78
25+
checksum: 10c0/d0949b4d5dae84f19410049f60859c4a1df606afa61bc0b7f45e4ae6c38dd79ee0e34e53789d0e41988dc38a04213ee067eac393d4b7e201578ae984554bbe5c
2626
languageName: node
2727
linkType: hard
2828

2929
"@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz::locator=rum-testing-extension%40workspace%3A.":
3030
version: 6.22.0
31-
resolution: "@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz#../../../packages/rum-core/package.tgz::hash=e15394&locator=rum-testing-extension%40workspace%3A."
31+
resolution: "@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz#../../../packages/rum-core/package.tgz::hash=7812e9&locator=rum-testing-extension%40workspace%3A."
3232
dependencies:
3333
"@datadog/browser-core": "npm:6.22.0"
34-
checksum: 10c0/55aa0c60006b1695b47320c8bfad5cf11ec676927ba8412fc5e8bea5b536bd5a68d875017eaafcc71645a3ab1d4e3d02f297f54a72ed737095856fea9bff29ee
34+
checksum: 10c0/62e5baf9fc8ec50c64730fefee50bd6bb05b5ab1dd8630ef1af5eb56664b7beb4c9605a9f4e1ef38d5fd04802f35941ea25d8f903c5a5d1c051e4a23d1547917
3535
languageName: node
3636
linkType: hard
3737

3838
"@datadog/browser-rum@file:../../../packages/rum/package.tgz::locator=rum-testing-extension%40workspace%3A.":
3939
version: 6.22.0
40-
resolution: "@datadog/browser-rum@file:../../../packages/rum/package.tgz#../../../packages/rum/package.tgz::hash=653c7e&locator=rum-testing-extension%40workspace%3A."
40+
resolution: "@datadog/browser-rum@file:../../../packages/rum/package.tgz#../../../packages/rum/package.tgz::hash=587884&locator=rum-testing-extension%40workspace%3A."
4141
dependencies:
4242
"@datadog/browser-core": "npm:6.22.0"
4343
"@datadog/browser-rum-core": "npm:6.22.0"
@@ -46,7 +46,7 @@ __metadata:
4646
peerDependenciesMeta:
4747
"@datadog/browser-logs":
4848
optional: true
49-
checksum: 10c0/e8209cdcf8977cce231551977270f84b96338c01d7176c3ebfe1963a59d6edd3199db8b9b60ea82db3580fbb48d650b32eb6e59de21818567859a0eec3695a3f
49+
checksum: 10c0/a0772bc30516a7a491aa601f5e5987a099e40e65d179c38a758edec27dbd0ad9432633193a03b8c6deb9c253e2ac6d62fe1bb606b326ec130e332ecd1b4cbf0f
5050
languageName: node
5151
linkType: hard
5252

test/apps/react-router-v6-app/yarn.lock

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,23 @@ __metadata:
77

88
"@datadog/browser-core@file:../../../packages/core/package.tgz::locator=react-router-v6-app%40workspace%3A.":
99
version: 6.22.0
10-
resolution: "@datadog/browser-core@file:../../../packages/core/package.tgz#../../../packages/core/package.tgz::hash=950c15&locator=react-router-v6-app%40workspace%3A."
11-
checksum: 10c0/db45d87fcedf84d8edd007d1ddc326f50401fad8717858c970b673c8efe9bbaf8ba40d750c4246269c1be0a0903e56528459f8dbd0e46b97391de216a25fa924
10+
resolution: "@datadog/browser-core@file:../../../packages/core/package.tgz#../../../packages/core/package.tgz::hash=c19f64&locator=react-router-v6-app%40workspace%3A."
11+
checksum: 10c0/ec4ffa3a9cfef2e19b73830e96bdc12d6fe526361105ff5618b240b7b8f4a82b979088dc5563bfad96ba11614950a80cb911f60064b6ec9a3df526756d6411d7
1212
languageName: node
1313
linkType: hard
1414

1515
"@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz::locator=react-router-v6-app%40workspace%3A.":
1616
version: 6.22.0
17-
resolution: "@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz#../../../packages/rum-core/package.tgz::hash=e15394&locator=react-router-v6-app%40workspace%3A."
17+
resolution: "@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz#../../../packages/rum-core/package.tgz::hash=7812e9&locator=react-router-v6-app%40workspace%3A."
1818
dependencies:
1919
"@datadog/browser-core": "npm:6.22.0"
20-
checksum: 10c0/55aa0c60006b1695b47320c8bfad5cf11ec676927ba8412fc5e8bea5b536bd5a68d875017eaafcc71645a3ab1d4e3d02f297f54a72ed737095856fea9bff29ee
20+
checksum: 10c0/62e5baf9fc8ec50c64730fefee50bd6bb05b5ab1dd8630ef1af5eb56664b7beb4c9605a9f4e1ef38d5fd04802f35941ea25d8f903c5a5d1c051e4a23d1547917
2121
languageName: node
2222
linkType: hard
2323

2424
"@datadog/browser-rum-react@file:../../../packages/rum-react/package.tgz::locator=react-router-v6-app%40workspace%3A.":
2525
version: 6.22.0
26-
resolution: "@datadog/browser-rum-react@file:../../../packages/rum-react/package.tgz#../../../packages/rum-react/package.tgz::hash=2168ff&locator=react-router-v6-app%40workspace%3A."
26+
resolution: "@datadog/browser-rum-react@file:../../../packages/rum-react/package.tgz#../../../packages/rum-react/package.tgz::hash=ab5b78&locator=react-router-v6-app%40workspace%3A."
2727
dependencies:
2828
"@datadog/browser-core": "npm:6.22.0"
2929
"@datadog/browser-rum-core": "npm:6.22.0"
@@ -42,13 +42,13 @@ __metadata:
4242
optional: true
4343
react-router-dom:
4444
optional: true
45-
checksum: 10c0/5feb5791a732867e4c914ab3864dfc153a5794a1bec54db2dbb6c881ce41442b30ff036e4eb66585e726a4a3160373478c4aa3a94907321bf0d9a0fbddbc67e2
45+
checksum: 10c0/2025f5c62865ba6086698288bba4837f766ec2f346592ef60e17044588f1b2ac9ecc59b3a804439d9fa6bf9b30e425057068b15016b37e18a52ffd316dc549c5
4646
languageName: node
4747
linkType: hard
4848

4949
"@datadog/browser-rum@file:../../../packages/rum/package.tgz::locator=react-router-v6-app%40workspace%3A.":
5050
version: 6.22.0
51-
resolution: "@datadog/browser-rum@file:../../../packages/rum/package.tgz#../../../packages/rum/package.tgz::hash=653c7e&locator=react-router-v6-app%40workspace%3A."
51+
resolution: "@datadog/browser-rum@file:../../../packages/rum/package.tgz#../../../packages/rum/package.tgz::hash=587884&locator=react-router-v6-app%40workspace%3A."
5252
dependencies:
5353
"@datadog/browser-core": "npm:6.22.0"
5454
"@datadog/browser-rum-core": "npm:6.22.0"
@@ -57,7 +57,7 @@ __metadata:
5757
peerDependenciesMeta:
5858
"@datadog/browser-logs":
5959
optional: true
60-
checksum: 10c0/e8209cdcf8977cce231551977270f84b96338c01d7176c3ebfe1963a59d6edd3199db8b9b60ea82db3580fbb48d650b32eb6e59de21818567859a0eec3695a3f
60+
checksum: 10c0/a0772bc30516a7a491aa601f5e5987a099e40e65d179c38a758edec27dbd0ad9432633193a03b8c6deb9c253e2ac6d62fe1bb606b326ec130e332ecd1b4cbf0f
6161
languageName: node
6262
linkType: hard
6363

test/apps/vanilla/yarn.lock

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,37 @@ __metadata:
77

88
"@datadog/browser-core@file:../../../packages/core/package.tgz::locator=app%40workspace%3A.":
99
version: 6.22.0
10-
resolution: "@datadog/browser-core@file:../../../packages/core/package.tgz#../../../packages/core/package.tgz::hash=950c15&locator=app%40workspace%3A."
11-
checksum: 10c0/db45d87fcedf84d8edd007d1ddc326f50401fad8717858c970b673c8efe9bbaf8ba40d750c4246269c1be0a0903e56528459f8dbd0e46b97391de216a25fa924
10+
resolution: "@datadog/browser-core@file:../../../packages/core/package.tgz#../../../packages/core/package.tgz::hash=c19f64&locator=app%40workspace%3A."
11+
checksum: 10c0/ec4ffa3a9cfef2e19b73830e96bdc12d6fe526361105ff5618b240b7b8f4a82b979088dc5563bfad96ba11614950a80cb911f60064b6ec9a3df526756d6411d7
1212
languageName: node
1313
linkType: hard
1414

1515
"@datadog/browser-logs@file:../../../packages/logs/package.tgz::locator=app%40workspace%3A.":
1616
version: 6.22.0
17-
resolution: "@datadog/browser-logs@file:../../../packages/logs/package.tgz#../../../packages/logs/package.tgz::hash=d3fc8a&locator=app%40workspace%3A."
17+
resolution: "@datadog/browser-logs@file:../../../packages/logs/package.tgz#../../../packages/logs/package.tgz::hash=492958&locator=app%40workspace%3A."
1818
dependencies:
1919
"@datadog/browser-core": "npm:6.22.0"
2020
peerDependencies:
2121
"@datadog/browser-rum": 6.22.0
2222
peerDependenciesMeta:
2323
"@datadog/browser-rum":
2424
optional: true
25-
checksum: 10c0/36037cbf215fcbc6fc30ee4e01c22a2e4d51dca0479d1ff58463d9c447914b7fd9a12f1cee02692bc8aa9113662589adc0c90554a051d148dd87ade97fdf2d78
25+
checksum: 10c0/d0949b4d5dae84f19410049f60859c4a1df606afa61bc0b7f45e4ae6c38dd79ee0e34e53789d0e41988dc38a04213ee067eac393d4b7e201578ae984554bbe5c
2626
languageName: node
2727
linkType: hard
2828

2929
"@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz::locator=app%40workspace%3A.":
3030
version: 6.22.0
31-
resolution: "@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz#../../../packages/rum-core/package.tgz::hash=e15394&locator=app%40workspace%3A."
31+
resolution: "@datadog/browser-rum-core@file:../../../packages/rum-core/package.tgz#../../../packages/rum-core/package.tgz::hash=7812e9&locator=app%40workspace%3A."
3232
dependencies:
3333
"@datadog/browser-core": "npm:6.22.0"
34-
checksum: 10c0/55aa0c60006b1695b47320c8bfad5cf11ec676927ba8412fc5e8bea5b536bd5a68d875017eaafcc71645a3ab1d4e3d02f297f54a72ed737095856fea9bff29ee
34+
checksum: 10c0/62e5baf9fc8ec50c64730fefee50bd6bb05b5ab1dd8630ef1af5eb56664b7beb4c9605a9f4e1ef38d5fd04802f35941ea25d8f903c5a5d1c051e4a23d1547917
3535
languageName: node
3636
linkType: hard
3737

3838
"@datadog/browser-rum@file:../../../packages/rum/package.tgz::locator=app%40workspace%3A.":
3939
version: 6.22.0
40-
resolution: "@datadog/browser-rum@file:../../../packages/rum/package.tgz#../../../packages/rum/package.tgz::hash=653c7e&locator=app%40workspace%3A."
40+
resolution: "@datadog/browser-rum@file:../../../packages/rum/package.tgz#../../../packages/rum/package.tgz::hash=587884&locator=app%40workspace%3A."
4141
dependencies:
4242
"@datadog/browser-core": "npm:6.22.0"
4343
"@datadog/browser-rum-core": "npm:6.22.0"
@@ -46,7 +46,7 @@ __metadata:
4646
peerDependenciesMeta:
4747
"@datadog/browser-logs":
4848
optional: true
49-
checksum: 10c0/e8209cdcf8977cce231551977270f84b96338c01d7176c3ebfe1963a59d6edd3199db8b9b60ea82db3580fbb48d650b32eb6e59de21818567859a0eec3695a3f
49+
checksum: 10c0/a0772bc30516a7a491aa601f5e5987a099e40e65d179c38a758edec27dbd0ad9432633193a03b8c6deb9c253e2ac6d62fe1bb606b326ec130e332ecd1b4cbf0f
5050
languageName: node
5151
linkType: hard
5252

0 commit comments

Comments
 (0)