commit | 449a78b1e20ea85b11f967cf3a184ee610ce21c3 | [log] [tgz] |
---|---|---|
author | Austin Orion <auorion@microsoft.com> | Tue Dec 01 18:24:50 2020 |
committer | Commit Bot <commit-bot@chromium.org> | Tue Dec 01 20:17:22 2020 |
tree | 6c4ebd398b6982f9f18edc02317a824c869a7ea0 | |
parent | 0496a4121188a26013dca007bf6e9a7ab6d961b6 [diff] |
Prevent window enumeration deadlock and add unit tests. For some time now, calls to EnumerateCapturableWindows could lead to a deadlock if an application's main thread is waiting on the thread that is running EnumerateCapturableWindows. This is because calls to GetWindowText and GetWindowTextLength send a message to the window if the window is owned by the current process. Since the main thread is waiting on us, it will never reply to this message and we will hang. This happens occasionally in Chromium when tearing down the NativeDesktopMediaList object, e.g. when a user clicks "cancel" on the capture target picker. We can avoid this deadlock by checking if the window we are querying is owned by the current process, and if it is then we must ensure it is responding to messages before we call a GetWindowText* API. This change also adds a unit test for this scenario. We create a window and force it to be unresponsive by creating a deadlock, and then call GetWindowList and (with the new changes) we should not hang. Without the new changes to GetWindowListHandler, this test would hang. Change-Id: I2523cd735f96fd7ea60708c30cd22e5b525803f0 Bug: chromium:1152841 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/195365 Commit-Queue: Austin Orion <auorion@microsoft.com> Reviewed-by: Jamie Walch <jamiewalch@chromium.org> Cr-Commit-Position: refs/heads/master@{#32734}
WebRTC is a free, open software project that provides browsers and mobile applications with Real-Time Communications (RTC) capabilities via simple APIs. The WebRTC components have been optimized to best serve this purpose.
Our mission: To enable rich, high-quality RTC applications to be developed for the browser, mobile platforms, and IoT devices, and allow them all to communicate via a common set of protocols.
The WebRTC initiative is a project supported by Google, Mozilla and Opera, amongst others.
See here for instructions on how to get started developing with the native code.
Authoritative list of directories that contain the native API header files.