)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "ba97b456d4db19ec43a1e32ca31cd123dfc16f99",
      "tree": "2a6053d62e773ffe57a389a575d6a3e87bd0b798",
      "parents": [
        "0dbbc10a2e180f66e8705e18cbd10e2b86c3c848"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Thu Dec 14 09:57:44 2023 +0100"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Thu Dec 14 11:03:27 2023 +0100"
      },
      "message": "Fix injecting JS plugins, remove webcomponents-lite.js\n\nLoading `webcomponents-lite.js` as a content script is problematic,\nbecause it does not have proper access to the `window` object of the\npage. It also seemed a bit ugly, because Gerrit would load it again\nitself, only too late.\n\nWe are now taking a different approach. We are moving all the custom\nelements that we want to use into a separate `elements.js` bundle,\nand load that script \"normally\" from a \u003cscript\u003e tag in the header,\nexactly as we do for injected js plugins.\n\nChange-Id: I5662989b115a57e751842f8b19afacb33433e5f1\n"
    },
    {
      "commit": "0dbbc10a2e180f66e8705e18cbd10e2b86c3c848",
      "tree": "bd3a9024c218de7feb296ffd7db9033834e1d91c",
      "parents": [
        "79a4352e0c0596f0f504bf73c1260c3c95e44e19"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Tue Dec 12 16:30:17 2023 +0100"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Tue Dec 12 16:30:17 2023 +0100"
      },
      "message": "Set manifest version to 1.0.1\n\nWas forgotten in the parent change. Editor was still unsaved ...\n\nChange-Id: I4006cc71a3f417630e124f78a72d9cb1110d679e\n"
    },
    {
      "commit": "79a4352e0c0596f0f504bf73c1260c3c95e44e19",
      "tree": "232809415b40e8c6921e62a2d66d50dbc0a30edc",
      "parents": [
        "0b9601b6a927d13d155cdeadea84b368359e5e52"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Tue Dec 12 16:20:12 2023 +0100"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Tue Dec 12 16:21:24 2023 +0100"
      },
      "message": "Set version to 1.0.1 and add release notes\n\nChange-Id: I3b20cfab40ea5a0e517f35e0780c9db284c4f9f0\n"
    },
    {
      "commit": "0b9601b6a927d13d155cdeadea84b368359e5e52",
      "tree": "9581f05e322e07e6974fb37bb2ee364393b54b59",
      "parents": [
        "0171589f7f84a54ca9570a4abe26e27f31a5d1e8"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Tue Dec 12 16:03:46 2023 +0100"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Tue Dec 12 16:04:29 2023 +0100"
      },
      "message": "Add a `inject css` rule\n\nChange-Id: I5d3051590bf9c0d205bd6cf1266bc8d68b1a3c95\n"
    },
    {
      "commit": "0171589f7f84a54ca9570a4abe26e27f31a5d1e8",
      "tree": "fbaa9ccc5fffef86693dd1a029e0f04bb0077897",
      "parents": [
        "743fa8f67547a2802bac606954a4688332337337"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Tue Dec 12 12:24:37 2023 +0100"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Tue Dec 12 16:04:29 2023 +0100"
      },
      "message": "Fix rules to also work with non-Google hosted Gerrit\n\nChange-Id: I5b5c2b4580082b0823eabaff2b5644fc025aed6c\n"
    },
    {
      "commit": "743fa8f67547a2802bac606954a4688332337337",
      "tree": "6a97ab02be3003b0f7fc468b2b0bb45ecf2e4006",
      "parents": [
        "15a4f6fc4f4b7dd50dd75e9e802ec10002eefc6a"
      ],
      "author": {
        "name": "Antoine Musso",
        "email": "hashar@free.fr",
        "time": "Tue Dec 12 15:21:29 2023 +0100"
      },
      "committer": {
        "name": "Antoine Musso",
        "email": "hashar@free.fr",
        "time": "Tue Dec 12 15:21:29 2023 +0100"
      },
      "message": "Continue rules processing after first disabled one\n\nWith the Manifest V3 migration in 619b1197, the logic to process rules\nused a filter() with disabled rules using an empty return to be filtered\nout. The refactoring removed the filter but kept the return which means\nthe first disabled rule causes an early return and no other rule is\nprocessed.\n\nSince the rules are now processed in a loop, a disabled rule should\ncause a continuation of the next iteration.\n\nChange-Id: Ieef2a3c4af2bc43b39ec71682483cb9144327f87\n"
    },
    {
      "commit": "15a4f6fc4f4b7dd50dd75e9e802ec10002eefc6a",
      "tree": "0b1103089f379c42df4c8e8019f662513a564fa1",
      "parents": [
        "0273955f34025fde38eabc7e33ef7d89f1a94d43"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Fri Dec 08 13:40:51 2023 +0100"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Fri Dec 08 13:46:48 2023 +0100"
      },
      "message": "Update package version and release notes for v1.0.0\n\nChange-Id: I0698419f743575705da65bdedd5577ccc2019968\n"
    },
    {
      "commit": "0273955f34025fde38eabc7e33ef7d89f1a94d43",
      "tree": "bd52611c444d5914c34e1f795da2ffb6bedd5025",
      "parents": [
        "d26b22500816164b2af19bd62d6a1f6358b29439"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Thu Nov 30 09:43:14 2023 +0100"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Mon Dec 04 11:18:37 2023 +0100"
      },
      "message": "Migrate to Manifest V3: Finishing touches\n\n- Update documentation\n- Update/Improve the default rules\n- Remove redundant comments\n\nGoogle-Bug-Id: b/287605771\nChange-Id: I72e35dc2c05954894d5d07a9a00240afc5689c54\n"
    },
    {
      "commit": "d26b22500816164b2af19bd62d6a1f6358b29439",
      "tree": "876ef46cdd6b05954f151f1399bd5bebb520432c",
      "parents": [
        "ce24053896e8948f8ddabff59ae1f2af8d4744e5"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Fri Dec 01 22:53:23 2023 +0100"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Mon Dec 04 11:16:21 2023 +0100"
      },
      "message": "Remove support for injecting arbitrary JS and HTML plugins\n\nHTML plugins don\u0027t exist anymore for quite a while. That was just\nobsolete.\n\nInjecting arbitrary JS code snippets is not allowed in Manifest V3\nextensions. The origin cannot be validated.\n\nGoogle-Bug-Id: b/287605771\nChange-Id: I6f58cd01fbb53be38baefe8c3914c786c9d2dcdb\n"
    },
    {
      "commit": "ce24053896e8948f8ddabff59ae1f2af8d4744e5",
      "tree": "a956ebe5ff70536bce60f7929905eb0f66f87c67",
      "parents": [
        "bc2b3fe9f49bddafc0396bee72d8620a248aa3eb"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Fri Dec 01 22:48:41 2023 +0100"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Mon Dec 04 11:16:18 2023 +0100"
      },
      "message": "Convert tip and snackbar to Lit elements\n\n`INJECT_JS_CODE` is not supported anymore, so we cannot define showing\nthe red \"helper tip\" in the bottom right corner as a rule. Instead we\nhave to do this statically. Let\u0027s use the opportunity and do this as a\nLit component instead of using `document.createElement()` stuff.\n\nAlso convert the snackbar to a Lit component.\n\nUnfortunately that requires us to also inject `webcomponents-lite.js`\npolyfill.\n\nAlso upgrade to Lit 3 to be compatible with Gerrit\u0027s main web app.\n\nGoogle-Bug-Id: b/287605771\nChange-Id: I1096d5b58377d98eb54754d54f38892ee3d420c4\n"
    },
    {
      "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"
    },
    {
      "commit": "619b1197c4cb892f7c0ed29d4610c908d972d873",
      "tree": "a388a623e67b7ff78d32d76e49dad0a2f85ca0c6",
      "parents": [
        "dc0c4076efcce19f99e69d990b6d7d76f5dba5eb"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Mon Nov 27 13:16:31 2023 +0100"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Mon Dec 04 10:50:15 2023 +0100"
      },
      "message": "Migrate to Manifest V3: Migrate to a service worker\n\nWe are following these migration guides:\nhttps://developer.chrome.com/docs/extensions/migrating/to-service-workers/\nhttps://developer.chrome.com/docs/extensions/migrating/api-calls/\n\nAdding a StorageUtil class for interacting with `chrome.storage`. We are\npersisting the rules and the enabled tabs in storage. The service\nworker, the popup and the content script can all access\n`chrome.storage`, but the content script can only access\n`chrome.storage.sync`, not `.session`.\n\nRegister listeners synchronously: `setUpListeners()` and\n`removeListeners()` functions are removed. We are just always listening\nto events.\n\nPersist states: The global `Map` `TabStates` are moved to\n`chrome.storage.session`. Helper functions are added. async/await is\nadded where needed.\n\nConvert timers to alarms: Remove timer. Not needed anymore. Event\nlisteners are working just fine.\n\n`checkCurrentTab()` was re-purposed to `updateIconPopup()`. Enabling and\ndisabling a tab happens directly by calling `storage` methods. You can\nlisten to `storage` changes via `chrome.storage.onChanged`. Thus we only\nneed a function in the service worker for updating the icon and popup\nstates when either the active tab changes or when the tab is enabled or\ndisabled.\n\nRemove obsolete `isNew` property from `Rule` objects.\n\nFrom the \"Update your code\" migration guide we are just renaming\n`browser_action` to `action`.\n\nChange-Id: I583b0ff70a414c33c66781846d866e7784460011\n"
    },
    {
      "commit": "dc0c4076efcce19f99e69d990b6d7d76f5dba5eb",
      "tree": "ecab0607b1fbdbd7a60f1fe6465de23ef22588ba",
      "parents": [
        "dae934460d06d88ede4db94681387ac194a393e2"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Wed Nov 29 09:22:38 2023 +0100"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Mon Dec 04 10:12:19 2023 +0100"
      },
      "message": "Add prettier config and reformat all files\n\nWe are using this file as a template as we do for main Gerrit:\nhttps://github.com/google/gts/blob/main/.prettierrc.json\n\nChange-Id: I8c61ebf209f998943fbf0e2df13b9d38a4e5a934\n"
    },
    {
      "commit": "dae934460d06d88ede4db94681387ac194a393e2",
      "tree": "9128fb47296a235d5c8de635589c59d53c91b54a",
      "parents": [
        "e1767ca6b4914f649404ba469113600c02ec4c00"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Mon Nov 27 13:17:41 2023 +0100"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Fri Dec 01 23:09:15 2023 +0100"
      },
      "message": "Migrate to Manifest V3: Rename background.ts to service_worker.ts\n\nWe are just renaming a file here such that the next change will be\neasier to review.\n\nGoogle-Bug-Id: b/287605771\nChange-Id: I57e6ff27ccc68de1d4d7db2c31e98bc78df01d33\n"
    },
    {
      "commit": "e1767ca6b4914f649404ba469113600c02ec4c00",
      "tree": "e782f16c5cfb06bdeb56ef48a490b899f8d6ea4a",
      "parents": [
        "44f4712cf603220dd5febc52c0fd7d8060b211dd"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Wed Nov 29 09:15:31 2023 +0100"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Fri Dec 01 23:06:53 2023 +0100"
      },
      "message": "Migrate to Manifest V3: Update the manifest file\n\n- Set manifest version to 3.\n- Bump major version of extension from 0 to 1.\n- Add all widely known and used Gerrit host names.\n- Adjust the symtax for `content_security_policy` to V3.\n- Remove unsupported \u003call_urls\u003e pattern.\n\nGoogle-Bug-Id: b/287605771\nChange-Id: Ib586f6248b80915078a9786d14778e8318abeaf7\n"
    },
    {
      "commit": "44f4712cf603220dd5febc52c0fd7d8060b211dd",
      "tree": "1bfdcfbe475ac70b35ac43df8d894061ee7fe4ed",
      "parents": [
        "e064dc800f4e2a0b7cfa0a06872129cb87aa2a29"
      ],
      "author": {
        "name": "Antoine Musso",
        "email": "hashar@free.fr",
        "time": "Fri Nov 10 17:38:37 2023 +0100"
      },
      "committer": {
        "name": "Antoine Musso",
        "email": "hashar@free.fr",
        "time": "Fri Nov 10 17:52:39 2023 +0100"
      },
      "message": "Add gerrit.wikimedia.org to content_scripts.matches\n\nI can live loading the extension with local hacks, but I do ask end\nusers to test new features/plugins and having to build the plugin would\nbe an extra step.\n\nThe manifest `content_scripts.matches` can probably be replaced by a\ndynamic declaration which would be fed by some local configuration (see\n`chrome.scripting.registerContentScripts()`).  Meanwhile simply add\n`https://gerrit.wikimedia.org/r/*` to the list.\n\nGoogle-Bug-Id: b/287605771\nRelease-Notes: Add https://gerrit.wikimedia.org/r/* to allowed hosts\nChange-Id: Ieb71740a9f9582f75f90ad739e12cc1b92707a91\n"
    },
    {
      "commit": "e064dc800f4e2a0b7cfa0a06872129cb87aa2a29",
      "tree": "1fec647d3b0cf493874e2e339ba96a225135aaff",
      "parents": [
        "24246323acd401033d5785fd83747c7ad6d5c242"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Fri Oct 20 11:03:33 2023 +0200"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Fri Oct 20 11:03:33 2023 +0200"
      },
      "message": "v0.0.14\n\nRelease-Notes: skip\nChange-Id: I392a808a578eb1b127f78812331cbce3722887e7\n"
    },
    {
      "commit": "24246323acd401033d5785fd83747c7ad6d5c242",
      "tree": "26941c86309efe6ec6307aedecc7b6208b339dc1",
      "parents": [
        "30409347cf584182b70abe16bae4b0a883aecdc8"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Fri Oct 20 11:02:24 2023 +0200"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Fri Oct 20 11:02:24 2023 +0200"
      },
      "message": "Fix path once more in manifest.json\n\nRelease-Notes: skip\nChange-Id: I8be19a55a19fbd78baeb9c5e67ad3b04e40c794c\n"
    },
    {
      "commit": "30409347cf584182b70abe16bae4b0a883aecdc8",
      "tree": "015b3bfaad7da7a3fc980b2f739eee9f57863708",
      "parents": [
        "7c3593ae46943040db0549f9dedfaf087194b1a2"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Thu Oct 19 16:13:31 2023 +0200"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Thu Oct 19 16:13:31 2023 +0200"
      },
      "message": "v0.0.13\n\nChange-Id: I61f4d4832d510312c77033d0d171c919054edcae\n"
    },
    {
      "commit": "7c3593ae46943040db0549f9dedfaf087194b1a2",
      "tree": "1e7b2b6d6ae291b7fbde377792f13989aac6257f",
      "parents": [
        "2d7321127204a54677c73a74514359a0e3c584f9"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Thu Oct 19 16:09:07 2023 +0200"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Thu Oct 19 16:09:07 2023 +0200"
      },
      "message": "Fix `content_scripts.matches` patterns\n\nFrom https://developer.chrome.com/docs/extensions/mv3/match_patterns/#what\n\n```\nhost: A hostname (www.example.com), a * before the hostname to match\nsubdomains (*.example.com), or just a wildcard *.\n\npath: Must start with / and be present. If alone, it is treated as /*.\nFor example: /*, /foo*, or /foo/bar. Each \u0027*\u0027 matches 0 or more\ncharacters.\n```\n\nHost wildcards only work on a subdomain level.\n\nPath must at least include a /.\n\nRelease-Notes: skip\nChange-Id: I5a0939aa1e7147c0f0bff3338b41a9d0d4c8a8ef\n"
    },
    {
      "commit": "2d7321127204a54677c73a74514359a0e3c584f9",
      "tree": "b5cebb4f5345d3f4767aebfba19d503c6812137a",
      "parents": [
        "ba1612abe5a89dba447c90adb77cf9ac7208b42b"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Thu Oct 19 16:08:52 2023 +0200"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Thu Oct 19 16:08:52 2023 +0200"
      },
      "message": "v0.0.12\n\nChange-Id: I4264256dc705bd4b2ba7a8ba3240008f313cfaa2\n"
    },
    {
      "commit": "ba1612abe5a89dba447c90adb77cf9ac7208b42b",
      "tree": "f0911f891f9056355923f71621c2e58371ac7b6b",
      "parents": [
        "3796cec03998b8093cab14b7553f74e0a85b96d4"
      ],
      "author": {
        "name": "Chris Poucet",
        "email": "poucet@google.com",
        "time": "Thu Oct 12 11:04:24 2023 +0200"
      },
      "committer": {
        "name": "Chris Poucet",
        "email": "poucet@google.com",
        "time": "Fri Oct 13 09:43:25 2023 +0000"
      },
      "message": "Only allow the Gerrit FE plugin on Google hosts.\n\nGoogle-Bug-Id: b/287605771\nRelease-Notes: Limit gerrit FE helper to be only for certain hosts\nChange-Id: Ie637fc495d89e618bc31c7e40220d1ddf92201bc\n"
    },
    {
      "commit": "3796cec03998b8093cab14b7553f74e0a85b96d4",
      "tree": "44efef1dc7b64d0de83ddf70ffee9fbc68464f11",
      "parents": [
        "a7de1635b8524ce9ff0c7655380d0af074e90289"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Wed Mar 29 11:55:44 2023 +0200"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Wed Mar 29 11:55:44 2023 +0200"
      },
      "message": "Add documentation about testing and publishing the extension\n\nRelease-Notes: skip\nChange-Id: I17630f9eee8057aaf9f160188f2ba34816b2c9be\n"
    },
    {
      "commit": "a7de1635b8524ce9ff0c7655380d0af074e90289",
      "tree": "b1107281004a52e965e1d1dd4f751dc49267533e",
      "parents": [
        "92ec0cdec5cfbd87ccb589332de11fbcc41ff87a"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Mon Mar 27 10:36:18 2023 +0200"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Mon Mar 27 10:36:18 2023 +0200"
      },
      "message": "v0.0.11\n\nChange-Id: Ica40889f595c51915f5d9a6cf1d5088c3d987273\n"
    },
    {
      "commit": "92ec0cdec5cfbd87ccb589332de11fbcc41ff87a",
      "tree": "1009d1963af767e496842065e6741ff63bd7dc28",
      "parents": [
        "34d934c7ff3eb85a3d436983a88ac0e7c3169de3"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Fri Mar 24 12:46:04 2023 +0100"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Mon Mar 27 10:26:57 2023 +0200"
      },
      "message": "Make the extension look a bit nicer\n\nBefore: https://imgur.com/a/tlZ2zFz\nAfter: https://imgur.com/a/ZDXEYFn\n\nRelease-Notes: skip\nChange-Id: Ibf277b941617a39b7c632584a21e68a39efa01cf\n"
    },
    {
      "commit": "34d934c7ff3eb85a3d436983a88ac0e7c3169de3",
      "tree": "7fa636eda5cf12d62448629298bcd764beaaf401",
      "parents": [
        "1a133456602942f1d0b24d62765cbed6012240f9"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Thu Mar 23 16:10:13 2023 +0100"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Thu Mar 23 16:10:13 2023 +0100"
      },
      "message": "Update npm deps\n\nAlso remove `package-lock.json` from `.gitignore`.\n\nAdd brohlfs@google.com as a contributor.\n\nChange-Id: I757ccaade9777a1aaaa09b39030382a23a062f6b\n"
    },
    {
      "commit": "1a133456602942f1d0b24d62765cbed6012240f9",
      "tree": "9fc8e8de116fd1533af13db4724b687c2265d597",
      "parents": [
        "affce278661cc224f253d39d1baaf222a6fce6eb"
      ],
      "author": {
        "name": "Antoine Musso",
        "email": "hashar@free.fr",
        "time": "Thu Mar 23 11:57:14 2023 +0100"
      },
      "committer": {
        "name": "Antoine Musso",
        "email": "hashar@free.fr",
        "time": "Thu Mar 23 11:57:14 2023 +0100"
      },
      "message": "Fix CORS preflight interception\n\nWith Chromium 111 I have noticed the built-in rule to add\n`Access-Control-Allow-Origin\u003d*` to response headers was ineffective\nwhich can easily be worked around by emitting it from web server serving\nthe plugins.\n\nThe plugin I wrote fetches from a foreign resource which triggers a\npreflight request. Since the browser extension always inject\n`Cache-Control` the preflight request is emitted with:\n\n    Allow-Control-Request-Headers: cache-control\n\nThe browser then expect the response to contain:\n\n    Allow-Control-Response-Headers: cache-control\n\nThat again can be fixed via the web server until one interact with a\nserver they have no control on (eg a production service).\n\nWhat I found out is the `addReqHeader` and `addRespHeader` functions are\nnot effective for preflight requests. The rules are handled listener\nmethods added via:\n- chrome.webRequest.onBeforeRequest.addListener\n- chrome.webRequest.onHeadersReceived.addListener\n\nThe WebRequest API does not intercept preflights requests, the events\nare thus never fired, the listeners never kick in and none of our\nextension rules are applied. This result in a cascading list of error\nsuch as missing `Access-Control-Allow-Origin: *`.\n\nThe root cause is Chrome 79 as described on the WebRequest API page:\nhttps://developer.chrome.com/docs/extensions/reference/webRequest/\n\n\u003e Starting from Chrome 79, the webRequest API *does not* intercept CORS\n\u003e preflight requests and responses by default. A CORS preflight for a\n\u003e request URL is visible to an extension if there is a listener with\n\u003e `\u0027extraHeaders\u0027` specified in `opt_extraInfoSpec` for the request URL.\n\u003e `onBeforeRequest` can also take \u0027extraHeaders\u0027 from Chrome 79.\n\nAdd the \u0027extraHeaders\u0027 to `onBeforeRequest` fixes the preflight\nrequests and cause events to be fired thus restoring the headers\ninjection.\n\nBug: Issue 16795\nChange-Id: Ic25427dd65ad03d0ba8e78eebf6d23cd35134af0\n"
    },
    {
      "commit": "affce278661cc224f253d39d1baaf222a6fce6eb",
      "tree": "2d4f1ae4e178cd6e64d44b43b8d24f6e45171119",
      "parents": [
        "bd9cc732eae4800febf02842418efbb6fe68a679"
      ],
      "author": {
        "name": "Antoine Musso",
        "email": "hashar@free.fr",
        "time": "Wed Nov 23 17:52:07 2022 +0100"
      },
      "committer": {
        "name": "Antoine Musso",
        "email": "hashar@free.fr",
        "time": "Thu Nov 24 20:44:16 2022 +0100"
      },
      "message": "Slightly enhance the README.md\n\nChanged the point of contact from Tao Zhou to Dhruv Srivastava.\n\nNo specific change, I have fixed a few links, added formatting and\nrephrased a few sentences.\n\nChange-Id: I8999de07289b4f786da7838775f36bb5147696a5\n"
    },
    {
      "commit": "bd9cc732eae4800febf02842418efbb6fe68a679",
      "tree": "cfdc61f3d2ebfc8a305d5c02bccd7a9ac929d750",
      "parents": [
        "d27a8971e983a4cee2a32f1ae262b4e0ff4aa191"
      ],
      "author": {
        "name": "Frank Borden",
        "email": "frankborden@google.com",
        "time": "Thu Sep 08 17:54:34 2022 +0200"
      },
      "committer": {
        "name": "Frank Borden",
        "email": "frankborden@google.com",
        "time": "Thu Sep 08 20:01:14 2022 +0200"
      },
      "message": "Adjust readme to refer to new dev server\n\nIt does not serve plugins so added a note that you should serve plugin\nfiles directly\n\nChange-Id: I4a91cbe2b4e7004ac699e013087aa792aebf1c3b\n"
    },
    {
      "commit": "d27a8971e983a4cee2a32f1ae262b4e0ff4aa191",
      "tree": "c08fbd1ad8a6122a44a65980f0c773d0e5d16da5",
      "parents": [
        "236ca38bbfacfbcbca341c10ae54faceb333bd00"
      ],
      "author": {
        "name": "Chris Poucet",
        "email": "poucet@google.com",
        "time": "Mon May 23 15:37:03 2022 +0200"
      },
      "committer": {
        "name": "Chris Poucet",
        "email": "poucet@google.com",
        "time": "Mon May 23 15:51:49 2022 +0200"
      },
      "message": "Update the version number and add release notes.\n\nChange-Id: Ic988d85b1771d7d49beebe048238383e1e586c80\n"
    },
    {
      "commit": "236ca38bbfacfbcbca341c10ae54faceb333bd00",
      "tree": "097a643be905051eb9905c71a31a89bfac4b44e8",
      "parents": [
        "cb7a8ed5d00d46a7fa5e8f32f45619fd4dd822c0",
        "ef24ba1d516dd2873a8358f73f503987638f662c"
      ],
      "author": {
        "name": "Chris Poucet",
        "email": "poucet@google.com",
        "time": "Mon May 23 13:33:36 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon May 23 13:33:36 2022 +0000"
      },
      "message": "Merge \"Bump lit to 2.2.3 so it matches gerrit\u0027s version.\""
    },
    {
      "commit": "ef24ba1d516dd2873a8358f73f503987638f662c",
      "tree": "bddc33dadb572afb9f0205b93592bf156823d1ae",
      "parents": [
        "f6f8fdd2e33ebe9a3d33ce23a61e3b825067338a"
      ],
      "author": {
        "name": "Chris Poucet",
        "email": "poucet@google.com",
        "time": "Mon May 23 08:58:18 2022 +0200"
      },
      "committer": {
        "name": "Chris Poucet",
        "email": "poucet@google.com",
        "time": "Mon May 23 08:58:18 2022 +0200"
      },
      "message": "Bump lit to 2.2.3 so it matches gerrit\u0027s version.\n\nChange-Id: I6e51c8acfda8d4867006af6acf289d048dad5c54\n"
    },
    {
      "commit": "cb7a8ed5d00d46a7fa5e8f32f45619fd4dd822c0",
      "tree": "b86db89856fe626062a1056b99d03cdf9880a031",
      "parents": [
        "d02489e19be0a8a8cdc18b8bf85614cfbf7da737"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Wed May 18 11:36:42 2022 +0200"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Wed May 18 11:36:42 2022 +0200"
      },
      "message": "Remove unused permissions\n\nChange-Id: I34e3e9a71e3cd235dc78d4a5ff33edd5963cc96b\n"
    },
    {
      "commit": "d02489e19be0a8a8cdc18b8bf85614cfbf7da737",
      "tree": "fe75e3aab08150a958d16177b2102d80d03df302",
      "parents": [
        "f6f8fdd2e33ebe9a3d33ce23a61e3b825067338a"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Mon May 16 11:44:13 2022 +0200"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Mon May 16 11:44:13 2022 +0200"
      },
      "message": "v0.0.9\n\nSome fixes around plugin injection and rule evaluation.\n\nChange-Id: Ifd8fd9027f3e8f2af43abdf53d3c637f5766f5f7\n"
    },
    {
      "commit": "f6f8fdd2e33ebe9a3d33ce23a61e3b825067338a",
      "tree": "a69c4dbfbdebccfd5c0e28e1dfea6b75325068d8",
      "parents": [
        "cb8446f303bc6179708881be8e31416a54822e64"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Fri May 15 15:50:28 2020 +0200"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Fri May 15 15:50:28 2020 +0200"
      },
      "message": "v0.0.8\n\nChange-Id: Ifaf25aebb399c286c5857a799b1ff87de6649784\n"
    },
    {
      "commit": "cb8446f303bc6179708881be8e31416a54822e64",
      "tree": "5ddfcc7bff4b0f0fd23c7537ae253c85a1247d7f",
      "parents": [
        "7400e6e0afcf8a6a93e4e483102902f9f1e0523c"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Mon Apr 27 16:59:44 2020 +0200"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Mon Apr 27 16:59:44 2020 +0200"
      },
      "message": "Update default rule as gr-app.html is removed\n\nChange-Id: I645578706d9bc8360d0e8e05eedef08669a6e9f1\n"
    },
    {
      "commit": "7400e6e0afcf8a6a93e4e483102902f9f1e0523c",
      "tree": "2e560a197945411a7c7c7c0d1d55bff162fa061d",
      "parents": [
        "f7014aa67b6924df7a6eee7ac9f4fb2d882c729b"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Tue Apr 21 12:22:29 2020 +0200"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Tue Apr 21 12:22:29 2020 +0200"
      },
      "message": "Update readme with more details\n\nChange-Id: I7e92da32cc71c839d92f0349f4cd68553535695d\n"
    },
    {
      "commit": "f7014aa67b6924df7a6eee7ac9f4fb2d882c729b",
      "tree": "80d4cef75676eae0e7c6d188b13473ec9afb77bd",
      "parents": [
        "e03ceb885b6a9350b9971f9c180c5c58b72a0982"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Tue Apr 21 12:05:18 2020 +0200"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Tue Apr 21 12:05:22 2020 +0200"
      },
      "message": "v0.0.7\n\nChange-Id: I8a3a3e91c13f437454d3ae83751a59f511e39042\n"
    },
    {
      "commit": "e03ceb885b6a9350b9971f9c180c5c58b72a0982",
      "tree": "c8abf615c35b6bf082183371b6670c92e4e92579",
      "parents": [
        "623b6c46f8339ea4900e17605ebb8ef2fca669d4",
        "9d3f59076314ced21cae59fcc5ff8b02d1bb0705"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Fri Apr 17 14:46:28 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 17 14:46:28 2020 +0000"
      },
      "message": "Merge \"gerrit-fe-dev-helper: Add `addRespHeader` rule.\""
    },
    {
      "commit": "623b6c46f8339ea4900e17605ebb8ef2fca669d4",
      "tree": "d1bee384e89f0f5575d66c18c650462eee9c779d",
      "parents": [
        "fedd61555c3f40b0968f3c02953fe8fcc4373169"
      ],
      "author": {
        "name": "Edward Lesmes",
        "email": "ehmaldonado@google.com",
        "time": "Thu Apr 16 14:49:17 2020 -0700"
      },
      "committer": {
        "name": "Edward Lesmes",
        "email": "ehmaldonado@google.com",
        "time": "Thu Apr 16 21:51:14 2020 +0000"
      },
      "message": "Update docs to remind to npm install before npm run build.\n\nChange-Id: I13a7f456ee99ea7e84e7caaa1ce6efc6da6ce799\n"
    },
    {
      "commit": "9d3f59076314ced21cae59fcc5ff8b02d1bb0705",
      "tree": "917523da5159e2910f647ea709ec7da6de7bf93f",
      "parents": [
        "fedd61555c3f40b0968f3c02953fe8fcc4373169"
      ],
      "author": {
        "name": "Edward Lesmes",
        "email": "ehmaldonado@google.com",
        "time": "Thu Apr 16 14:37:27 2020 -0700"
      },
      "committer": {
        "name": "Edward Lesmes",
        "email": "ehmaldonado@google.com",
        "time": "Thu Apr 16 14:40:45 2020 -0700"
      },
      "message": "gerrit-fe-dev-helper: Add `addRespHeader` rule.\n\nChange-Id: I87f133ba7d464a823741abc1b27c8b5af60bc638\n"
    },
    {
      "commit": "fedd61555c3f40b0968f3c02953fe8fcc4373169",
      "tree": "bf932010636c3dfa8f589d907514c2bf546f3f5e",
      "parents": [
        "80c941ebc59729b67667ab6dc7938cd9e70bcb55"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Sat Mar 14 10:30:46 2020 +0100"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Sat Mar 14 10:30:46 2020 +0100"
      },
      "message": "v0.0.6\n\nChange-Id: I2ca6da9bed329a799a1f3726d0062f5df94b40e3\n"
    },
    {
      "commit": "80c941ebc59729b67667ab6dc7938cd9e70bcb55",
      "tree": "0582f46fe2f00111210b9141d1d27ca3d1846754",
      "parents": [
        "13d50de1d5ccb09e3d76337eb777180308187482"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Sun Mar 08 22:55:08 2020 +0100"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Sun Mar 08 22:55:08 2020 +0100"
      },
      "message": "Release v0.0.5\n\nchanges:\n- set crossorigin to anonymous to help debug js error from plugin\n- improve the ui on popup\n- remove outdated rule of replacing gr-app-p2 with gr-app\n\nChange-Id: I7b46d61a176f4dcc840fb482ae8274939cb94f03\n"
    },
    {
      "commit": "13d50de1d5ccb09e3d76337eb777180308187482",
      "tree": "d1d7bc7bbc9cbdcace311235c40d37df239b8793",
      "parents": [
        "ef5d3c00f5fc780ea77f9f99294629d25c1ba276"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Wed Feb 12 15:06:35 2020 +0100"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Wed Feb 12 15:13:28 2020 +0100"
      },
      "message": "Update the way of checking if gerrit is ready\n\nAs of M80, native support of htmlImports is removed,\nreplaced with polyfill from webcomponentsjs.\nOne of the biggest change is switching from\nsync to async which will affect quite a lot on how\nwe load plugins.\n\nAs Gerrit should be ready once header shows up,\nhere replaced the old checking on # of imports to\nthe readiness of #mainHeader\n\nChange-Id: I351c4ddb4abf8fb5fb5d5f57bd5986c593357283\n"
    },
    {
      "commit": "ef5d3c00f5fc780ea77f9f99294629d25c1ba276",
      "tree": "da7b748154b9d04690085f23df0f35f81dd3ecc5",
      "parents": [
        "2e0ceac892d6fe38064c0fbcadba6c10043d86b7"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Wed Nov 13 16:25:35 2019 -0800"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Wed Nov 13 16:25:35 2019 -0800"
      },
      "message": "v0.0.3 hotfix on page refreshes / redirects within same tab\n\nChange-Id: Ib2194195661c462b40552386aeaaa3dd6e760efd\n"
    },
    {
      "commit": "2e0ceac892d6fe38064c0fbcadba6c10043d86b7",
      "tree": "d8c23b91afa53a187963d24afd3489c95a8d2dd9",
      "parents": [
        "a8b6c6cdd47927dc77cb2e79418239d2d55b2965"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Wed Nov 13 11:15:47 2019 -0800"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Wed Nov 13 11:15:47 2019 -0800"
      },
      "message": "Gerrit FE Dev Helper extension\nv0.0.2\n\nChange-Id: Ibf082ff6b12d23e2c3a5546bc3d09402dd0a09f9\n"
    },
    {
      "commit": "a8b6c6cdd47927dc77cb2e79418239d2d55b2965",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Tue Nov 12 18:39:32 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Nov 12 18:39:32 2019 +0000"
      },
      "message": "Initial empty repository\n"
    }
  ]
}
