diff options
Diffstat (limited to '')
-rw-r--r-- | third_party/libwebrtc/modules/desktop_capture/window_capturer_unittest.cc | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/third_party/libwebrtc/modules/desktop_capture/window_capturer_unittest.cc b/third_party/libwebrtc/modules/desktop_capture/window_capturer_unittest.cc new file mode 100644 index 0000000000..519c04601b --- /dev/null +++ b/third_party/libwebrtc/modules/desktop_capture/window_capturer_unittest.cc @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include <memory> +#include <string> +#include <utility> + +#include "modules/desktop_capture/desktop_capture_options.h" +#include "modules/desktop_capture/desktop_capturer.h" +#include "modules/desktop_capture/desktop_frame.h" +#include "modules/desktop_capture/desktop_geometry.h" +#include "rtc_base/checks.h" +#include "test/gtest.h" + +namespace webrtc { + +class WindowCapturerTest : public ::testing::Test, + public DesktopCapturer::Callback { + public: + void SetUp() override { + capturer_ = DesktopCapturer::CreateWindowCapturer( + DesktopCaptureOptions::CreateDefault()); + ASSERT_TRUE(capturer_); + } + + void TearDown() override {} + + // DesktopCapturer::Callback interface + void OnCaptureResult(DesktopCapturer::Result result, + std::unique_ptr<DesktopFrame> frame) override { + frame_ = std::move(frame); + } + + protected: + std::unique_ptr<DesktopCapturer> capturer_; + std::unique_ptr<DesktopFrame> frame_; +}; + +// Verify that we can enumerate windows. +// TODO(bugs.webrtc.org/12950): Re-enable when libc++ issue is fixed +#if defined(WEBRTC_LINUX) && defined(MEMORY_SANITIZER) +#define MAYBE_Enumerate DISABLED_Enumerate +#else +#define MAYBE_Enumerate Enumerate +#endif +TEST_F(WindowCapturerTest, MAYBE_Enumerate) { + DesktopCapturer::SourceList sources; + EXPECT_TRUE(capturer_->GetSourceList(&sources)); + + // Verify that window titles are set. + for (auto it = sources.begin(); it != sources.end(); ++it) { + EXPECT_FALSE(it->title.empty()); + } +} + +// Flaky on Linux. See: crbug.com/webrtc/7830. +// Failing on macOS 11: See bugs.webrtc.org/12801 +#if defined(WEBRTC_LINUX) || defined(WEBRTC_MAC) +#define MAYBE_Capture DISABLED_Capture +#else +#define MAYBE_Capture Capture +#endif +// Verify we can capture a window. +// +// TODO(sergeyu): Currently this test just looks at the windows that already +// exist. Ideally it should create a test window and capture from it, but there +// is no easy cross-platform way to create new windows (potentially we could +// have a python script showing Tk dialog, but launching code will differ +// between platforms). +TEST_F(WindowCapturerTest, MAYBE_Capture) { + DesktopCapturer::SourceList sources; + capturer_->Start(this); + EXPECT_TRUE(capturer_->GetSourceList(&sources)); + + // Verify that we can select and capture each window. + for (auto it = sources.begin(); it != sources.end(); ++it) { + frame_.reset(); + if (capturer_->SelectSource(it->id)) { + capturer_->CaptureFrame(); + } + + // If we failed to capture a window make sure it no longer exists. + if (!frame_.get()) { + DesktopCapturer::SourceList new_list; + EXPECT_TRUE(capturer_->GetSourceList(&new_list)); + for (auto new_list_it = new_list.begin(); new_list_it != new_list.end(); + ++new_list_it) { + EXPECT_FALSE(it->id == new_list_it->id); + } + continue; + } + + EXPECT_GT(frame_->size().width(), 0); + EXPECT_GT(frame_->size().height(), 0); + } +} + +} // namespace webrtc |