privacy Permission

3 min read

privacy Permission

What It Grants

Access to chrome.privacy API for reading/controlling Chrome’s privacy settings.

Manifest

{ "permissions": ["privacy"] }

User Warning

“Change your privacy-related settings”

API — Three Namespaces

chrome.privacy.network

chrome.privacy.services

chrome.privacy.websites

ChromeSetting Methods

// Get
const { value, levelOfControl } = await chrome.privacy.network.networkPredictionEnabled.get({});

// Set
await chrome.privacy.websites.thirdPartyCookiesAllowed.set({ value: false });

// Clear (reset to default)
await chrome.privacy.websites.thirdPartyCookiesAllowed.clear({});

// Watch changes
chrome.privacy.websites.thirdPartyCookiesAllowed.onChange.addListener((details) => {
  console.log(`Changed to: ${details.value}`);
});

Level of Control

Privacy Shield Pattern

import { createStorage, defineSchema } from '@theluckystrike/webext-storage';
import { createMessenger } from '@theluckystrike/webext-messaging';

const schema = defineSchema({ privacyMode: 'string' });
const storage = createStorage(schema, 'sync');

type Msgs = {
  SET_PRIVACY: { request: { mode: string }; response: { ok: boolean } };
  GET_STATUS: { request: {}; response: { settings: Record<string, boolean> } };
};
const m = createMessenger<Msgs>();

m.onMessage('SET_PRIVACY', async ({ mode }) => {
  if (mode === 'strict') {
    await chrome.privacy.websites.thirdPartyCookiesAllowed.set({ value: false });
    await chrome.privacy.websites.hyperlinkAuditingEnabled.set({ value: false });
    await chrome.privacy.websites.referrersEnabled.set({ value: false });
    await chrome.privacy.network.networkPredictionEnabled.set({ value: false });
    await chrome.privacy.network.webRTCIPHandlingPolicy.set({ value: 'disable_non_proxied_udp' });
  }
  await storage.set('privacyMode', mode);
  return { ok: true };
});

WebRTC Leak Prevention

await chrome.privacy.network.webRTCIPHandlingPolicy.set({
  value: 'disable_non_proxied_udp'
});
// Options: 'default', 'default_public_and_private_interfaces',
//          'default_public_interface_only', 'disable_non_proxied_udp'

When to Use

Permission Check

import { checkPermission } from '@theluckystrike/webext-permissions';
const granted = await checkPermission('privacy');

Cross-References

Frequently Asked Questions

How do I access privacy settings?

Use the chrome.privacy API to read and modify Chrome’s privacy settings like network prediction, safe browsing, and tracking protection.

Can extensions disable safe browsing?

Extensions with the privacy permission can modify safe browsing settings, but this may trigger warnings to users. —

Part of the Chrome Extension Guide by theluckystrike. Built at zovo.one.

No previous article
No next article