)]}'
{
  "commit": "8ca63de14d522d3d259d74fa43b28b05b02728e8",
  "tree": "dd86d4b10e658cef8bf5fea5d99baa1d15bda7ca",
  "parents": [
    "135b99861d0d898850754a845f607ec48f0bcccc"
  ],
  "author": {
    "name": "tsepez",
    "email": "tsepez@chromium.org",
    "time": "Fri Aug 05 17:12:27 2016 -0700"
  },
  "committer": {
    "name": "Commit bot",
    "email": "commit-bot@chromium.org",
    "time": "Fri Aug 05 17:12:27 2016 -0700"
  },
  "message": "Remove another potential stale CJS_Timer usage\n\nFix memory ownership model for PDFium timers.\n\nThe |app| class owns the CJS_Timer as part of its vector\u003cunique_ptr\u003e\nto them.\n\nThe CJS_Timer \"owns\" its slot in the global ID to timer map, and\nremoves itself when it is destroyed. Nothing else deletes\nfrom the global map. Deleting from the global map is\naccompanied by a callback to the embedder to clear its\nresources.\n\nNext, the proper way to remove a CJS_Timer is by going\nthrough the app, and having the app erase its unique ptr,\nwhich then deletes the CJS_Timer, which in turn cleans up the\nglobal map. Provide a CJS_Timer::Cancel static method to\ndo this conveniently.\n\nThere is a alternate path to the CJS_timer via JS and its\nCJS_TimerObj. CJS_TimerObj owns a TimerObj that currently\npoints to the CJS_Timer. If the timer fires, and cleans\nitself up, this can go stale.\n\nMake the TimerObj maintain a weak reference via global\ntimer ID rather than a direct pointer to the CJS_Timer, so\nthat if the timer fires and is destroyed, future attempts\nto cancel find nothing.\n\nThere is another path, where if the JS timer object is GC\u0027d, then we\njust clean up its CJS_TimerObj without touching\nthe actual CJS_Timers.  We could make this match the spec\nby calling into the new cancel routine as described above,\nbut it seems weird to have a timer depend on whether a gc\nhappened or not.\n\nA subsequent CL will rename these objects to more closely\nmatch the conventions used by the other JS wrappers.\n\nBUG\u003d634716\n\nReview-Url: https://codereview.chromium.org/2221513002\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a1425153a1543499a4ab23c98071139dd2c8240a",
      "old_mode": 33188,
      "old_path": "fpdfsdk/fpdfformfill_embeddertest.cpp",
      "new_id": "3a6a7448e5a4c49415ff6f6412fea8babd2bc6d2",
      "new_mode": 33188,
      "new_path": "fpdfsdk/fpdfformfill_embeddertest.cpp"
    },
    {
      "type": "modify",
      "old_id": "9ec316303dc3b4c0a2a8919ee92e04858365bad2",
      "old_mode": 33188,
      "old_path": "fpdfsdk/javascript/JS_Object.cpp",
      "new_id": "b65699a18bffd43c8ff59b5af42e6fc64f1a131e",
      "new_mode": 33188,
      "new_path": "fpdfsdk/javascript/JS_Object.cpp"
    },
    {
      "type": "modify",
      "old_id": "146a7c93b57105b1060940963d174dfd1f57bd22",
      "old_mode": 33188,
      "old_path": "fpdfsdk/javascript/JS_Object.h",
      "new_id": "aec94c0362020f7b1a6bb29d462a3d4d2cd4bba2",
      "new_mode": 33188,
      "new_path": "fpdfsdk/javascript/JS_Object.h"
    },
    {
      "type": "modify",
      "old_id": "10776292442dd5b798112ecfe316bcd4af629f2f",
      "old_mode": 33188,
      "old_path": "fpdfsdk/javascript/app.cpp",
      "new_id": "329b625545d0aff23d8c8348c6f96e1fccbb0a70",
      "new_mode": 33188,
      "new_path": "fpdfsdk/javascript/app.cpp"
    },
    {
      "type": "modify",
      "old_id": "c6cda555d90bb58bf4657f7c60e51f8f441911cb",
      "old_mode": 33188,
      "old_path": "fpdfsdk/javascript/app.h",
      "new_id": "bb083cedb449dcd8004c439cac95672e7ff006cc",
      "new_mode": 33188,
      "new_path": "fpdfsdk/javascript/app.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a485daed97382f1a4639e8cd83874595738140de",
      "new_mode": 33188,
      "new_path": "testing/resources/bug_634716.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6330b9a4e534c5b629a93b84308be4287a6e580f",
      "new_mode": 33188,
      "new_path": "testing/resources/bug_634716.pdf"
    }
  ]
}
