commit | 08c956c781a7df2eccfe761258e585ed0e9d60b8 | [log] [tgz] |
---|---|---|
author | Wenyu Fu <wenyufu@google.com> | Tue Jan 09 03:30:24 2024 |
committer | Chromium LUCI CQ <chromium-scoped@luci-project-accounts.iam.gserviceaccount.com> | Tue Jan 09 03:30:24 2024 |
tree | aa22f5d90c0f72da0c7c5fc6be8254616e80889a | |
parent | cfd4a70f1402883544909f8b2634a5de34a4fda9 [diff] |
[TLDD] Refactor DragAnDropGlobalState APIs Context: Drag events usually reach child view first and then propagate back to parent if child is unable to handle the event (ie: returns false). However, drag start / end events are sent to all drag listeners. These 2 events do no follow the same call order as other events - ie: they reach listeners in no specific order (verified through testing). Since we need to clear static shared drag state on drag end, this leads to an issue where one listener could preemptively clear the state that is required by another listener. Saw issues with users flows due to this where dragSourceInstanceId in DragDropGlobalState was getting cleared early causing isDragSource call to return incorrect value. To get around this issue, this CL introduces a concept of tracker token: * The token is handed over to the creator of the global state instance (token is handed during startDragAndDrop). * The global instance can only be obtained when passing the right token, or an drag event that has ACTION_DROP. * The drag starter is responsible to release the global state at drag end. This CL also wraps the entire ChromeDropDataAndroid into the global state, making it easier for adding more fields. Fixed: 1514917 Change-Id: I889960787bfab3f3a9a294541330df68872ec3c3 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5154244 Reviewed-by: Neil Coronado <nemco@google.com> Reviewed-by: Theresa Sullivan <twellington@chromium.org> Commit-Queue: Wenyu Fu <wenyufu@chromium.org> Code-Coverage: findit-for-me@appspot.gserviceaccount.com <findit-for-me@appspot.gserviceaccount.com> Cr-Commit-Position: refs/heads/main@{#1244436}
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.