storebound/tests/fixtures/console/apple-app-privacy.html

35 lines
3 KiB
HTML

<!doctype html>
<!-- MODELED, not recorded: a sanitized stand-in for App Store Connect > App Privacy, written from Apple's public help
pages "Manage app privacy" and "App privacy details on the App Store" (collect yes / no, data types, per type:
purposes, linked to the user, tracking; Next / Save / Publish). The console's exact wording may differ. -->
<html lang="en"><head><meta charset="utf-8"><title>App Privacy - App Store Connect</title><script src="_common.js"></script></head>
<body>
<h1>App Privacy</h1> <button type="button">Publish</button>
<div role="dialog" aria-label="Data Collection" data-step>
<label><input type="radio" name="c"> Yes, we collect data from this app</label>
<label><input type="radio" name="c"> No, we do not collect data from this app</label>
<button type="button">Cancel</button> <button type="button">Next</button>
</div>
<div role="dialog" aria-label="Data Collection" data-step hidden><div id="types"></div><button type="button">Back</button> <button type="button">Save</button></div>
<div data-step hidden id="per"></div>
<script>
const TYPES = ['Name', 'Email Address', 'Phone Number', 'Physical Address', 'Other User Contact Info', 'Health', 'Fitness', 'Payment Info', 'Credit Info',
'Other Financial Info', 'Precise Location', 'Coarse Location', 'Sensitive Info', 'Contacts', 'Emails or Text Messages', 'Photos or Videos', 'Audio Data',
'Gameplay Content', 'Customer Support', 'Other User Content', 'Browsing History', 'Search History', 'User ID', 'Device ID', 'Purchase History',
'Product Interaction', 'Advertising Data', 'Other Usage Data', 'Crash Data', 'Performance Data', 'Other Diagnostic Data', 'Environment Scanning', 'Hands',
'Head', 'Other Data Types'];
for (const t of TYPES) { const l = document.createElement('label'); l.innerHTML = '<input type="checkbox"> '; l.append(t); document.getElementById('types').append(l); }
const PURPOSES = ['Third-Party Advertising', "Developer's Advertising or Marketing", 'Analytics', 'Product Personalization', 'App Functionality', 'Other Purposes'];
for (const t of ['Device ID', 'Crash Data']) {
const d = document.createElement('div'); d.setAttribute('role', 'dialog'); d.setAttribute('aria-label', t);
d.innerHTML = PURPOSES.map(p => `<label><input type="checkbox"> ${p}</label>`).join('') +
`<label><input type="radio" name="l${t}"> Yes, ${t} collected from this app is linked to the user's identity</label>` +
`<label><input type="radio" name="l${t}"> No, ${t} collected from this app is not linked to the user's identity</label>` +
`<label><input type="radio" name="t${t}"> Yes, we use ${t} for tracking purposes</label>` +
`<label><input type="radio" name="t${t}"> No, we do not use ${t} for tracking purposes</label><button type="button">Save</button>`;
d.hidden = t !== 'Device ID'; document.getElementById('per').append(d);
}
// the owner opens another data type
window.__type = t => document.querySelectorAll('#per [role=dialog]').forEach(d => { d.hidden = d.getAttribute('aria-label') !== t; });
</script>
</body></html>