)]}'
{
  "commit": "bc2b3fe9f49bddafc0396bee72d8620a248aa3eb",
  "tree": "bb39943499cfa027589e24943832a264268230a3",
  "parents": [
    "619b1197c4cb892f7c0ed29d4610c908d972d873"
  ],
  "author": {
    "name": "Ben Rohlfs",
    "email": "brohlfs@google.com",
    "time": "Wed Nov 29 10:35:18 2023 +0100"
  },
  "committer": {
    "name": "Ben Rohlfs",
    "email": "brohlfs@google.com",
    "time": "Mon Dec 04 11:15:46 2023 +0100"
  },
  "message": "Migrate to Manifest V3: Replace blocking web request listeners\n\nWe are following this migration guide:\nhttps://developer.chrome.com/docs/extensions/migrating/blocking-web-requests/\n\nIn a nutshell Chrome does not allow request/response manipulation\nanymore programmatically: You cannot hook up a listener and do whatever\nyou like adhoc. Instead you have to register declarative manipulation\nrules. This suits us quite well, because we already have declarative\nrules defined by the user.\n\nSo we are removing all the listeners and the adhoc manipulation, and\ninstead we are adding conversion logic from our own `Rule` interface\nto Chrome\u0027s `chrome.declarativeNetRequest.Rule`.\n\nThen we only have to listen to `chrome.storage` updates and call\n`updateRules()`, which will do the conversion and make sure that\nChrome\u0027s rules are in sync with the user\u0027s rules.\n\nWe are also removing default rules being fetched from a URL. Instead we\nbelieve that using the default rules that were shipped with the current\nversion of the extension is more robust, and simpler to maintain.\n\nGoogle-Bug-Id: b/287605771\nChange-Id: I92548878dd82067ed6e14cf9102d6dc51379c56d\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "06c6bdce220885e6c28182a56d8b9fee8374f4ef",
      "old_mode": 33188,
      "old_path": "src/content_script.ts",
      "new_id": "335ae4a37949dd841132db7c1d1e42a46efee25b",
      "new_mode": 33188,
      "new_path": "src/content_script.ts"
    },
    {
      "type": "modify",
      "old_id": "c196223a75d1f737145e9736e915d9dd8f824b5d",
      "old_mode": 33188,
      "old_path": "src/manifest.json",
      "new_id": "6e713d228d34ae7c7e47f53094de1ac349218f60",
      "new_mode": 33188,
      "new_path": "src/manifest.json"
    },
    {
      "type": "modify",
      "old_id": "ce4bc626e5f36bcdbb0c5359cb1354432c99dc99",
      "old_mode": 33188,
      "old_path": "src/popup.ts",
      "new_id": "63db7d9f1bd6302c7d37de8549400c150900c74a",
      "new_mode": 33188,
      "new_path": "src/popup.ts"
    },
    {
      "type": "modify",
      "old_id": "ae0e30f7e6667b728858dbf0ed888d2c0deb034c",
      "old_mode": 33188,
      "old_path": "src/service_worker.ts",
      "new_id": "7afa885a100cf460945118bec223acec52682db9",
      "new_mode": 33188,
      "new_path": "src/service_worker.ts"
    },
    {
      "type": "modify",
      "old_id": "242b923e3cb9f11a111a7675d6a735c8f69dc1be",
      "old_mode": 33188,
      "old_path": "src/storage.ts",
      "new_id": "9dd9bdae0ff494ffcad8b78ea95ae0ebdc778e60",
      "new_mode": 33188,
      "new_path": "src/storage.ts"
    },
    {
      "type": "modify",
      "old_id": "82263936071dcf68661a8c338812691c7ca18451",
      "old_mode": 33188,
      "old_path": "src/utils.ts",
      "new_id": "29dffa1879018a60a45f2f8c202163def534d336",
      "new_mode": 33188,
      "new_path": "src/utils.ts"
    }
  ]
}
