)]}'
{
  "commit": "4cae574dfe1ce3d5d6351f4f12ff52cdd7493504",
  "tree": "fd05360bbeec8115f66f2994c5071e66efd8f9c1",
  "parents": [
    "52635b8a5a9fa4f9a08244c28b922bb63cd58897"
  ],
  "author": {
    "name": "Steve Golton",
    "email": "stevegolton@google.com",
    "time": "Mon Aug 24 10:04:49 2026 +0100"
  },
  "committer": {
    "name": "Steve Golton",
    "email": "stevegolton@google.com",
    "time": "Mon Aug 24 12:21:38 2026 +0100"
  },
  "message": "ui: Add \u0027Open from GDrive\u0027 sidebar button and GDrive client\n\nAdd a new Google Drive core plugin that lets internal users open a\ntrace directly from Google Drive.\n\n- Add gdrive_client.ts, a GDrive client wrapping the Drive API that\n  lazily loads the Google Drive / Identity Services scripts, handles\n  OAuth2 authentication (with token caching), and can pick and open a\n  file via the Drive picker.\n- Add a runtime config loader that fetches the (non-checked-in) API\n  credentials from an internal script into window.gDriveConfig.\n- Add an \u0027Open from GDrive\u0027 sidebar button (gated to internal users)\n  and support opening a trace from the Google Drive \"Open with\" deep\n  link (?state\u003d\u003cjson\u003e), honoring the resource key and including\n  popup-blocked and file-access authorization fallbacks.\n- Add a \u0027visible\u0027 field to sidebar menu items so items can be hidden\n  entirely, and wire up the CSP to allow the Google Drive origins.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "583166baa51210fbd2f28e6b69ee81b9e07bca3d",
      "old_mode": 33188,
      "old_path": "CHANGELOG",
      "new_id": "36c68377c7e14ea534a7a059e62bf0d87371d244",
      "new_mode": 33188,
      "new_path": "CHANGELOG"
    },
    {
      "type": "modify",
      "old_id": "7c773fc4df79a44ce414178a688acc9dbff1f392",
      "old_mode": 33188,
      "old_path": "ui/package.json",
      "new_id": "15af958ececd59ad191273c84c8b96497c75b68e",
      "new_mode": 33188,
      "new_path": "ui/package.json"
    },
    {
      "type": "modify",
      "old_id": "c262617e96708dfcdcedbec35e90c05cb1423436",
      "old_mode": 33188,
      "old_path": "ui/pnpm-lock.yaml",
      "new_id": "05e4dae23cdff35e2efb4acfa5151f205826e56b",
      "new_mode": 33188,
      "new_path": "ui/pnpm-lock.yaml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8ad6b8cb98e8eb463a2ed639ea2782f8fbc85235",
      "new_mode": 33188,
      "new_path": "ui/src/core_plugins/dev.perfetto.GoogleDrive/gdrive_client.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "59fd09e89516455cb0ead3a1e526324f3aa1e032",
      "new_mode": 33188,
      "new_path": "ui/src/core_plugins/dev.perfetto.GoogleDrive/google_drive.d.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "433fcf5707e8fd4a91a3fa29eea38f77e00cf423",
      "new_mode": 33188,
      "new_path": "ui/src/core_plugins/dev.perfetto.GoogleDrive/index.ts"
    },
    {
      "type": "modify",
      "old_id": "e6fb11051de203c6b077716c4c7634f6490b0618",
      "old_mode": 33188,
      "old_path": "ui/src/frontend/index.ts",
      "new_id": "4853f496f17e5907cfb07544e77a6f2fc5680740",
      "new_mode": 33188,
      "new_path": "ui/src/frontend/index.ts"
    },
    {
      "type": "modify",
      "old_id": "a59fc6222c111f01ae712e0c2c81a56ecc315755",
      "old_mode": 33188,
      "old_path": "ui/src/frontend/views/sidebar_section.ts",
      "new_id": "095dc24953ab6622bc6c1b4e346eea68a53bf1fc",
      "new_mode": 33188,
      "new_path": "ui/src/frontend/views/sidebar_section.ts"
    },
    {
      "type": "modify",
      "old_id": "43b53c82b4a272080b9638e3ebaaacb1c7f13c9f",
      "old_mode": 33188,
      "old_path": "ui/src/public/sidebar.ts",
      "new_id": "3bba03da020811f6b3c944c1b633d6b72984e42f",
      "new_mode": 33188,
      "new_path": "ui/src/public/sidebar.ts"
    }
  ]
}
