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

Unified Diff: ui/views/mus/native_widget_mus_unittest.cc

Issue 1863523006: mash: Make system tray bubble close when another window is activated (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review comments Created 4 years, 8 months 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/views/mus/native_widget_mus.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/mus/native_widget_mus_unittest.cc
diff --git a/ui/views/mus/native_widget_mus_unittest.cc b/ui/views/mus/native_widget_mus_unittest.cc
index 8dcebbcd8015e20124e8ab3bb7c1dd944a37160b..78155814861fb88c03508605cb6f2cae8f2db6e8 100644
--- a/ui/views/mus/native_widget_mus_unittest.cc
+++ b/ui/views/mus/native_widget_mus_unittest.cc
@@ -16,9 +16,11 @@
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/gfx/skia_util.h"
+#include "ui/views/test/focus_manager_test.h"
#include "ui/views/test/views_test_base.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_delegate.h"
+#include "ui/views/widget/widget_observer.h"
namespace views {
namespace {
@@ -31,6 +33,32 @@ SkBitmap MakeBitmap(SkColor color) {
return bitmap;
}
+// An observer that tracks widget activation changes.
+class WidgetActivationObserver : public WidgetObserver {
+ public:
+ explicit WidgetActivationObserver(Widget* widget) : widget_(widget) {
+ widget_->AddObserver(this);
+ }
+
+ ~WidgetActivationObserver() override {
+ widget_->RemoveObserver(this);
+ }
+
+ const std::vector<bool>& changes() const { return changes_; }
+
+ // WidgetObserver:
+ void OnWidgetActivationChanged(Widget* widget, bool active) override {
+ ASSERT_EQ(widget_, widget);
+ changes_.push_back(active);
+ }
+
+ private:
+ Widget* widget_;
+ std::vector<bool> changes_;
+
+ DISALLOW_COPY_AND_ASSIGN(WidgetActivationObserver);
+};
+
// A WidgetDelegate that supplies an app icon.
class TestWidgetDelegate : public WidgetDelegateView {
public:
@@ -58,8 +86,8 @@ class NativeWidgetMusTest : public ViewsTestBase {
~NativeWidgetMusTest() override {}
// Creates a test widget. Takes ownership of |delegate|.
- Widget* CreateWidget(TestWidgetDelegate* delegate) {
- Widget* widget = new Widget();
+ scoped_ptr<Widget> CreateWidget(TestWidgetDelegate* delegate) {
+ scoped_ptr<Widget> widget(new Widget());
Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW);
params.delegate = delegate;
params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
@@ -72,6 +100,38 @@ class NativeWidgetMusTest : public ViewsTestBase {
DISALLOW_COPY_AND_ASSIGN(NativeWidgetMusTest);
};
+// Tests communication of activation and focus between Widget and
+// NativeWidgetMus.
+TEST_F(NativeWidgetMusTest, OnActivationChanged) {
+ scoped_ptr<Widget> widget(CreateWidget(nullptr));
+ widget->Show();
+
+ // Track activation, focus and blur events.
+ WidgetActivationObserver activation_observer(widget.get());
+ TestWidgetFocusChangeListener focus_listener;
+ WidgetFocusManager::GetInstance()->AddFocusChangeListener(&focus_listener);
+
+ // Deactivate the Widget, which deactivates the NativeWidgetMus.
+ widget->Deactivate();
+
+ // The widget is blurred and deactivated.
+ ASSERT_EQ(1u, focus_listener.focus_changes().size());
+ EXPECT_EQ(nullptr, focus_listener.focus_changes()[0]);
+ ASSERT_EQ(1u, activation_observer.changes().size());
+ EXPECT_EQ(false, activation_observer.changes()[0]);
+
+ // Re-activate the Widget, which actives the NativeWidgetMus.
+ widget->Activate();
+
+ // The widget is focused and activated.
+ ASSERT_EQ(2u, focus_listener.focus_changes().size());
+ EXPECT_EQ(widget->GetNativeView(), focus_listener.focus_changes()[1]);
+ ASSERT_EQ(2u, activation_observer.changes().size());
+ EXPECT_TRUE(activation_observer.changes()[1]);
+
+ WidgetFocusManager::GetInstance()->RemoveFocusChangeListener(&focus_listener);
+}
+
// Tests that a window with an icon sets the mus::Window icon property.
TEST_F(NativeWidgetMusTest, AppIcon) {
// Create a Widget with a bitmap as the icon.
« no previous file with comments | « ui/views/mus/native_widget_mus.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698