)]}'
{
  "commit": "5fd5177cae3c19b9f97369fdb984cea89621cfaa",
  "tree": "4c0a65e06d0e53c57df0e74279ca812a21f3a6c6",
  "parents": [
    "ba97b456d4db19ec43a1e32ca31cd123dfc16f99"
  ],
  "author": {
    "name": "Ben Rohlfs",
    "email": "brohlfs@google.com",
    "time": "Fri Dec 22 17:40:18 2023 +0100"
  },
  "committer": {
    "name": "Ben Rohlfs",
    "email": "brohlfs@google.com",
    "time": "Fri Dec 22 17:40:18 2023 +0100"
  },
  "message": "Remove support for INJECT_JS_PLUGIN and INJECT_JS_MODULE_PLUGIN\n\nContent Security Policy for extensions does not allow injecting\narbitrary JS.\n\nWe have considered passing a list of URLs from the extension to the\nweb app instead, but that is non-trivial to do, because they also\ncannot access the `window` object of each other. The extension could\nadd an element to the DOM and set an attribute on that. The web app\nwould then read the attribute and load those plugins instead of the\nones listed in the server config. Apart from adding complexity the\ndisadvantage is that the web app would have to be changed, and thus\nyou could not use the concept for existing open source servers.\n\nThere is a trivial workaround though: You can just redirect an exsiting\nplugin to your new plugin. Every Gerrit server typically has a plugin\nthat can be replaced during development, so this is not much of a\nlimitation.\n\nGoogle-Bug-Id: b/317481553\nRelease-Notes: Remove INJECT_JS_PLUGIN and INJECT_JS_MODULE_PLUGIN\nChange-Id: If954960ad56aba5595c6ec029ce8211fcb6ec5b0\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6d89456ca16862fd037260d41b6c07d797e43d0f",
      "old_mode": 33188,
      "old_path": "README.md",
      "new_id": "073b06ca98ab4f55e05cf7dc6da33c1c1679040b",
      "new_mode": 33188,
      "new_path": "README.md"
    },
    {
      "type": "modify",
      "old_id": "3f9591913bd51cf86bbec7eab3239ae6c8fdb8a1",
      "old_mode": 33188,
      "old_path": "data/rules.json",
      "new_id": "5b9a27975d6741563f0c2aee6dace2d7899de704",
      "new_mode": 33188,
      "new_path": "data/rules.json"
    },
    {
      "type": "modify",
      "old_id": "44752f18381bf694bf5ae63c2e718a167e22821a",
      "old_mode": 33188,
      "old_path": "package.json",
      "new_id": "9a3ef46a4f48f54760d08034dfad6012d0d5408f",
      "new_mode": 33188,
      "new_path": "package.json"
    },
    {
      "type": "modify",
      "old_id": "61e685275222ad8250de396805b6fab78decc54e",
      "old_mode": 33188,
      "old_path": "release-notes.md",
      "new_id": "8f3d3d21c6e08dc1a9fb83818cdc52c2a661b3cd",
      "new_mode": 33188,
      "new_path": "release-notes.md"
    },
    {
      "type": "modify",
      "old_id": "60e6c859346d10bc07a76fba4df42ecdc7eef8d6",
      "old_mode": 33188,
      "old_path": "src/content_script.ts",
      "new_id": "66c3bbafb87f68478afdeae9f5185f2e26371e0b",
      "new_mode": 33188,
      "new_path": "src/content_script.ts"
    },
    {
      "type": "modify",
      "old_id": "7c4f816b33363d7dc494293ba507512ee295573c",
      "old_mode": 33188,
      "old_path": "src/manifest.json",
      "new_id": "d19c6639fba81690bcdda67f9649fb90bf75a2b2",
      "new_mode": 33188,
      "new_path": "src/manifest.json"
    },
    {
      "type": "modify",
      "old_id": "2d737d074a403bf23836c82e1af3e795971493e2",
      "old_mode": 33188,
      "old_path": "src/popup.ts",
      "new_id": "c832a9be9e5e625b5fabe1b12d9eb44430bdeb6b",
      "new_mode": 33188,
      "new_path": "src/popup.ts"
    },
    {
      "type": "modify",
      "old_id": "50d739f5d56cf9eafc1fe6d4ea654714c8fe2c5f",
      "old_mode": 33188,
      "old_path": "src/utils.ts",
      "new_id": "06165653564bfdf9e9739ed596b5f41d6e6f2d7c",
      "new_mode": 33188,
      "new_path": "src/utils.ts"
    }
  ]
}
