Reland "FilePathWatcher: Synchronously start watching on Mac"

This is a reland of commit b8bf2ad060e659004a5b4a0f57d6d157f7a437fb

The original CL was reverted due to a failing browsertest
(https://ci.chromium.org/ui/p/chromium/builders/findit/test-single-revision/3436/overview).

It was later determined that this specific test was flaky (https://crbug.com/40939929).

This flake has been resolved as a result of CL: crrev.com/c/5205950

Now that the failing / flaky test has been fixed, this change is ready to re-land in order to unblock FSA Change Observers implementation on Mac.

Original change's description:
> FilePathWatcher: Synchronously start watching on Mac
>
> This CL includes two key changes:
>
> 1) Moves all manipulation of the event stream (start, stop, etc)
>    to the sequence the FilePathWatcher lives on
>
> Prior to this CL, the event stream was manipulated on the dispatch
> queue. This does not appear to have been necessary. Moving the stream
> manipulation to the sequence the FilePathWatcher lives on allows the
> event stream to be started synchronously, from the Watch() method
>
> 2) Use kFSEventStreamEventIdSinceNow
>
> Prior to this CL, the event stream was started via async dispatch in
> the Watch() method. FSEventsGetCurrentEventId() was used to
> synchronously get the ID of the most recent (system-wide) event, to
> ensure that any changes between when Watch() returned and when the
> stream asynchronously started would be played back as historical
> events. See the documentation of the sinceWhen field here:
> https://developer.apple.com/documentation/coreservices/1443980-fseventstreamcreate
>
> Since the stream is now started synchronously,
> kFSEventStreamEventIdSinceNow is sufficient for ensuring that all
> changes after Watch() returns are noticed
>
> Note that creating a stream with kFSEventStreamEventIdSinceNow will
> no longer fire a "history done" event shortly after stream creation.
> Any callers which relied on the this behavior may break.
> See the documentation here:
> https://developer.apple.com/documentation/coreservices/kfseventstreameventflaghistorydone
>
> Bug: 1019297
> Change-Id: Ib720f8b19d0309714d153de974404fab25b16894
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4814677
> Reviewed-by: Wez <wez@chromium.org>
> Commit-Queue: Austin Sullivan <asully@chromium.org>
> Reviewed-by: Robert Sesek <rsesek@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#1218981}

Bug: 1019297
Change-Id: I5d9297c7b3e187bcfdaeaaaf5946984f082b1877
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5274142
Commit-Queue: Christine Hollingsworth <christinesm@chromium.org>
Reviewed-by: Daseul Lee <dslee@chromium.org>
Reviewed-by: Wez <wez@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1281149}
2 files changed
tree: 1faf2f34549b49462338d6a16ef69581198cbd69
  1. android_webview/
  2. apps/
  3. ash/
  4. base/
  5. build/
  6. build_overrides/
  7. buildtools/
  8. cc/
  9. chrome/
  10. chromecast/
  11. chromeos/
  12. codelabs/
  13. components/
  14. content/
  15. courgette/
  16. crypto/
  17. dbus/
  18. device/
  19. docs/
  20. extensions/
  21. fuchsia_web/
  22. gin/
  23. google_apis/
  24. google_update/
  25. gpu/
  26. headless/
  27. infra/
  28. ios/
  29. ipc/
  30. media/
  31. mojo/
  32. native_client_sdk/
  33. net/
  34. pdf/
  35. ppapi/
  36. printing/
  37. remoting/
  38. rlz/
  39. sandbox/
  40. services/
  41. skia/
  42. sql/
  43. storage/
  44. styleguide/
  45. testing/
  46. third_party/
  47. tools/
  48. ui/
  49. url/
  50. webkit/
  51. .clang-format
  52. .clang-tidy
  53. .clangd
  54. .eslintrc.js
  55. .git-blame-ignore-revs
  56. .gitallowed
  57. .gitattributes
  58. .gitignore
  59. .gitmodules
  60. .gn
  61. .mailmap
  62. .rustfmt.toml
  63. .vpython3
  64. .yapfignore
  65. ATL_OWNERS
  66. AUTHORS
  67. BUILD.gn
  68. CODE_OF_CONDUCT.md
  69. codereview.settings
  70. DEPS
  71. DIR_METADATA
  72. LICENSE
  73. LICENSE.chromium_os
  74. OWNERS
  75. PRESUBMIT.py
  76. PRESUBMIT_test.py
  77. PRESUBMIT_test_mocks.py
  78. README.md
  79. WATCHLISTS
README.md

Logo Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

The project's web site is https://www.chromium.org.

To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.

Documentation in the source is rooted in docs/README.md.

Learn how to Get Around the Chromium Source Code Directory Structure.

For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.

If you found a bug, please file it at https://crbug.com/new.