Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(329)

Unified Diff: ui/wm/core/capture_controller_unittest.cc

Issue 780273003: Fix releasing capture in Ozone (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/wm/core/capture_controller.cc ('k') | ui/wm/wm.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/wm/core/capture_controller_unittest.cc
diff --git a/ui/views/corewm/capture_controller_unittest.cc b/ui/wm/core/capture_controller_unittest.cc
similarity index 68%
rename from ui/views/corewm/capture_controller_unittest.cc
rename to ui/wm/core/capture_controller_unittest.cc
index c04a914ca1522fe301f536d98eb5907a764fbd6e..de1a59ca80047ab0fd33897bb1eab529920c48f9 100644
--- a/ui/views/corewm/capture_controller_unittest.cc
+++ b/ui/wm/core/capture_controller_unittest.cc
@@ -5,6 +5,7 @@
#include "ui/wm/core/capture_controller.h"
#include "base/logging.h"
+#include "ui/aura/client/capture_delegate.h"
#include "ui/aura/env.h"
#include "ui/aura/test/aura_test_base.h"
#include "ui/aura/test/test_screen.h"
@@ -14,17 +15,36 @@
#include "ui/events/event.h"
#include "ui/events/event_utils.h"
#include "ui/events/test/event_generator.h"
-#include "ui/views/test/views_test_base.h"
-#include "ui/views/view.h"
-#include "ui/views/widget/root_view.h"
-#include "ui/views/widget/widget.h"
-#if !defined(OS_CHROMEOS)
-#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
-#include "ui/views/widget/desktop_aura/desktop_screen_position_client.h"
-#endif
+namespace wm {
-namespace views {
+namespace {
+
+// aura::client::CaptureDelegate which allows querying whether native capture
+// has been acquired.
+class TestCaptureDelegate : public aura::client::CaptureDelegate {
+ public:
+ TestCaptureDelegate() : has_capture_(false) {}
+ ~TestCaptureDelegate() override {}
+
+ bool HasNativeCapture() const {
+ return has_capture_;
+ }
+
+ // aura::client::CaptureDelegate:
+ void UpdateCapture(aura::Window* old_capture,
+ aura::Window* new_capture) override {}
+ void OnOtherRootGotCapture() override {}
+ void SetNativeCapture() override { has_capture_ = true; }
+ void ReleaseNativeCapture() override { has_capture_ = false; }
+
+ private:
+ bool has_capture_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestCaptureDelegate);
+};
+
+} // namespace
class CaptureControllerTest : public aura::test::AuraTestBase {
public:
@@ -32,38 +52,24 @@ class CaptureControllerTest : public aura::test::AuraTestBase {
void SetUp() override {
AuraTestBase::SetUp();
- capture_controller_.reset(new wm::ScopedCaptureClient(root_window()));
+ capture_controller_.reset(new ScopedCaptureClient(root_window()));
second_host_.reset(aura::WindowTreeHost::Create(gfx::Rect(0, 0, 800, 600)));
second_host_->InitHost();
second_host_->window()->Show();
second_host_->SetBounds(gfx::Rect(800, 600));
second_capture_controller_.reset(
- new wm::ScopedCaptureClient(second_host_->window()));
-
-#if !defined(OS_CHROMEOS)
- desktop_position_client_.reset(
- new DesktopScreenPositionClient(root_window()));
-
- second_desktop_position_client_.reset(
- new DesktopScreenPositionClient(second_host_->window()));
-#endif
+ new ScopedCaptureClient(second_host_->window()));
}
void TearDown() override {
RunAllPendingInMessageLoop();
-#if !defined(OS_CHROMEOS)
- second_desktop_position_client_.reset();
-#endif
second_capture_controller_.reset();
// Kill any active compositors before we hit the compositor shutdown paths.
second_host_.reset();
-#if !defined(OS_CHROMEOS)
- desktop_position_client_.reset();
-#endif
capture_controller_.reset();
AuraTestBase::TearDown();
@@ -77,14 +83,9 @@ class CaptureControllerTest : public aura::test::AuraTestBase {
return second_capture_controller_->capture_client()->GetCaptureWindow();
}
- scoped_ptr<wm::ScopedCaptureClient> capture_controller_;
+ scoped_ptr<ScopedCaptureClient> capture_controller_;
scoped_ptr<aura::WindowTreeHost> second_host_;
- scoped_ptr<wm::ScopedCaptureClient> second_capture_controller_;
-#if !defined(OS_CHROMEOS)
- scoped_ptr<aura::client::ScreenPositionClient> desktop_position_client_;
- scoped_ptr<aura::client::ScreenPositionClient>
- second_desktop_position_client_;
-#endif
+ scoped_ptr<ScopedCaptureClient> second_capture_controller_;
DISALLOW_COPY_AND_ASSIGN(CaptureControllerTest);
};
@@ -165,4 +166,34 @@ TEST_F(CaptureControllerTest, TouchTargetResetOnCaptureChange) {
ui::GestureRecognizer::Get()->GetTouchLockedTarget(touch_event));
}
-} // namespace views
+// Test that native capture is released properly when the window with capture
+// is reparented to a different root window while it has capture.
+TEST_F(CaptureControllerTest, ReparentedWhileCaptured) {
+ scoped_ptr<TestCaptureDelegate> delegate(new TestCaptureDelegate);
+ ScopedCaptureClient::TestApi(capture_controller_.get())
+ .SetDelegate(delegate.get());
+ scoped_ptr<TestCaptureDelegate> delegate2(new TestCaptureDelegate);
+ ScopedCaptureClient::TestApi(second_capture_controller_.get())
+ .SetDelegate(delegate2.get());
+
+ scoped_ptr<aura::Window> w(CreateNormalWindow(1, root_window(), NULL));
+ w->SetCapture();
+ EXPECT_EQ(w.get(), GetCaptureWindow());
+ EXPECT_EQ(w.get(), GetSecondCaptureWindow());
+ EXPECT_TRUE(delegate->HasNativeCapture());
+ EXPECT_FALSE(delegate2->HasNativeCapture());
+
+ second_host_->window()->AddChild(w.get());
+ EXPECT_EQ(w.get(), GetCaptureWindow());
+ EXPECT_EQ(w.get(), GetSecondCaptureWindow());
+ EXPECT_TRUE(delegate->HasNativeCapture());
+ EXPECT_FALSE(delegate2->HasNativeCapture());
+
+ w->ReleaseCapture();
+ EXPECT_EQ(nullptr, GetCaptureWindow());
+ EXPECT_EQ(nullptr, GetSecondCaptureWindow());
+ EXPECT_FALSE(delegate->HasNativeCapture());
+ EXPECT_FALSE(delegate2->HasNativeCapture());
+}
+
+} // namespace wm
« no previous file with comments | « ui/wm/core/capture_controller.cc ('k') | ui/wm/wm.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698