Browser extension to hide view-reducing screen junk from websites.

bannerbanner/src/ perOrigin.js
46 lines
1.1 KiB

  1. /* Tells or toggles for any URL whether the extension should be enabled.
  2. * Groups URL by their origin; a whole origin is enabled or disabled.
  3. */
  4. import browser from 'webextension-polyfill'
  5. import listenableStorage from './listenableStorage'
  6. const browserStorage = listenableStorage(browser.storage)
  7. // Whichever is supported.
  8. // XXX Causes data loss when the browser suddenly supports the sync storage area.
  9. const storage = browserStorage.sync || browserStorage.local
  10. const keyForUrl = url => {
  11. const origin = new URL(url).origin
  12. return `enable_on_origin_${origin}`
  13. }
  14. export async function disable(url) {
  15. await storage.set({ [keyForUrl(url)]: false })
  16. }
  17. export async function enable(url) {
  18. await storage.set({ [keyForUrl(url)]: true })
  19. }
  20. export async function toggleEnabled(url) {
  21. const enabled = await isEnabled(url)
  22. if (enabled) {
  23. await disable(url)
  24. } else {
  25. await enable(url)
  26. }
  27. }
  28. export async function isEnabled(url, defaultValue = true) {
  29. const key = keyForUrl(url)
  30. const result = await storage.get({ [key]: defaultValue })
  31. return result[key]
  32. }
  33. export function onEnabledChange(url, cb) {
  34. storage.onChanged(keyForUrl(url), cb)
  35. }