)]}'
{
  "commit": "f0554ff32ab0010daec445e8077b8a8da5b6a82f",
  "tree": "1afc18b674e5efaf1fecfcf2050956df9448de8a",
  "parents": [
    "228df7e82104877a79abdddbc066c05d57b6045c"
  ],
  "author": {
    "name": "zhongliugo",
    "email": "zhongliu88889@gmail.com",
    "time": "Tue Jul 07 16:28:22 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Jul 07 23:28:22 2026 +0000"
  },
  "message": "[web] Fix grouped autofill on iOS Chrome (#187459)\n\n**Fixes #185327**\n\n**Problem**\n\nOn iOS Chrome, Chrome Password Manager did put the saved password into\nFlutter Web\u0027s hidden browser input. But Flutter Web still thought the\npassword field was empty, so when it refreshed the autofill form, it\ncopied that old empty value back into the browser input. The password\nwas erased before it showed up in the visible Flutter `TextField`.\n\n**Fix**\n\nBefore copying Flutter\u0027s stored value into a non-focused autofill field,\nFlutter Web now checks what is already in the browser input. If the\nbrowser input already has a password that Flutter has not seen yet,\nFlutter Web sends that password to the framework and leaves the browser\ninput alone instead of clearing it.\n\nTo avoid mistaking a deliberate app change for an autofill, it tracks\nthe last framework value for each field, carried\nover when the autofill form is reused. A value the app changed\nprogrammatically is still pushed into the DOM; only an\nunchanged framework value sitting next to a changed DOM value is treated\nas a browser autofill.\n\n**Demo**\n\niOS Chrome:\n\n* Before: \u003chttps://flutter-demo-34-before.web.app\u003e - username fills,\npassword stays empty\n* After: \u003chttps://flutter-demo-34-after.web.app\u003e - username and password\nboth fill",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "438baa376cb8af4813283444ada98afb9787901f",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/lib/src/engine/text_editing/text_editing.dart",
      "new_id": "71378a6b77625fceb18fd1195425db8781ad7ded",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/lib/src/engine/text_editing/text_editing.dart"
    },
    {
      "type": "modify",
      "old_id": "1c21f5c6de851905933ed0341e75935bbc77e221",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/lib/web_ui/test/engine/text_editing_test.dart",
      "new_id": "f4bf898ecbd3463973e143c9e79c57e174c829c8",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/lib/web_ui/test/engine/text_editing_test.dart"
    }
  ]
}
