| OLD | NEW |
| (Empty) |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "ash/common/system/chromeos/screen_security/screen_tray_item.h" | |
| 6 | |
| 7 #include "ash/common/system/chromeos/screen_security/screen_capture_tray_item.h" | |
| 8 #include "ash/common/system/chromeos/screen_security/screen_share_tray_item.h" | |
| 9 #include "ash/common/system/tray/system_tray_notifier.h" | |
| 10 #include "ash/common/system/tray/tray_item_view.h" | |
| 11 #include "ash/common/test/ash_test.h" | |
| 12 #include "ash/common/wm_shell.h" | |
| 13 #include "base/callback.h" | |
| 14 #include "base/memory/ptr_util.h" | |
| 15 #include "base/strings/utf_string_conversions.h" | |
| 16 #include "ui/events/event.h" | |
| 17 #include "ui/events/event_utils.h" | |
| 18 #include "ui/gfx/geometry/point.h" | |
| 19 #include "ui/message_center/message_center.h" | |
| 20 #include "ui/views/view.h" | |
| 21 | |
| 22 namespace ash { | |
| 23 | |
| 24 // Test with unicode strings. | |
| 25 const char kTestScreenCaptureAppName[] = | |
| 26 "\xE0\xB2\xA0\x5F\xE0\xB2\xA0 (Screen Capture Test)"; | |
| 27 const char kTestScreenShareHelperName[] = | |
| 28 "\xE5\xAE\x8B\xE8\x85\xBE (Screen Share Test)"; | |
| 29 | |
| 30 void ClickViewCenter(views::View* view) { | |
| 31 gfx::Point click_location_in_local = | |
| 32 gfx::Point(view->width() / 2, view->height() / 2); | |
| 33 view->OnMousePressed(ui::MouseEvent( | |
| 34 ui::ET_MOUSE_PRESSED, click_location_in_local, click_location_in_local, | |
| 35 ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE)); | |
| 36 } | |
| 37 | |
| 38 class ScreenTrayItemTest : public AshTest { | |
| 39 public: | |
| 40 ScreenTrayItemTest() : tray_item_(NULL), stop_callback_hit_count_(0) {} | |
| 41 ~ScreenTrayItemTest() override {} | |
| 42 | |
| 43 ScreenTrayItem* tray_item() { return tray_item_; } | |
| 44 void set_tray_item(ScreenTrayItem* tray_item) { tray_item_ = tray_item; } | |
| 45 | |
| 46 int stop_callback_hit_count() const { return stop_callback_hit_count_; } | |
| 47 | |
| 48 void SetUp() override { | |
| 49 AshTest::SetUp(); | |
| 50 TrayItemView::DisableAnimationsForTest(); | |
| 51 } | |
| 52 | |
| 53 void StartSession() { | |
| 54 tray_item_->Start( | |
| 55 base::Bind(&ScreenTrayItemTest::StopCallback, base::Unretained(this))); | |
| 56 } | |
| 57 | |
| 58 void StopSession() { tray_item_->Stop(); } | |
| 59 | |
| 60 void StopCallback() { stop_callback_hit_count_++; } | |
| 61 | |
| 62 private: | |
| 63 ScreenTrayItem* tray_item_; | |
| 64 int stop_callback_hit_count_; | |
| 65 | |
| 66 DISALLOW_COPY_AND_ASSIGN(ScreenTrayItemTest); | |
| 67 }; | |
| 68 | |
| 69 class ScreenCaptureTest : public ScreenTrayItemTest { | |
| 70 public: | |
| 71 ScreenCaptureTest() {} | |
| 72 ~ScreenCaptureTest() override {} | |
| 73 | |
| 74 void SetUp() override { | |
| 75 ScreenTrayItemTest::SetUp(); | |
| 76 // This tray item is owned by its parent system tray view and will | |
| 77 // be deleted automatically when its parent is destroyed in AshTestBase. | |
| 78 ScreenTrayItem* item = new ScreenCaptureTrayItem(GetPrimarySystemTray()); | |
| 79 GetPrimarySystemTray()->AddTrayItem(base::WrapUnique(item)); | |
| 80 set_tray_item(item); | |
| 81 } | |
| 82 | |
| 83 private: | |
| 84 DISALLOW_COPY_AND_ASSIGN(ScreenCaptureTest); | |
| 85 }; | |
| 86 | |
| 87 class ScreenShareTest : public ScreenTrayItemTest { | |
| 88 public: | |
| 89 ScreenShareTest() {} | |
| 90 ~ScreenShareTest() override {} | |
| 91 | |
| 92 void SetUp() override { | |
| 93 ScreenTrayItemTest::SetUp(); | |
| 94 // This tray item is owned by its parent system tray view and will | |
| 95 // be deleted automatically when its parent is destroyed in AshTestBase. | |
| 96 ScreenTrayItem* item = new ScreenShareTrayItem(GetPrimarySystemTray()); | |
| 97 GetPrimarySystemTray()->AddTrayItem(base::WrapUnique(item)); | |
| 98 set_tray_item(item); | |
| 99 } | |
| 100 | |
| 101 DISALLOW_COPY_AND_ASSIGN(ScreenShareTest); | |
| 102 }; | |
| 103 | |
| 104 void TestStartAndStop(ScreenTrayItemTest* test) { | |
| 105 ScreenTrayItem* tray_item = test->tray_item(); | |
| 106 | |
| 107 EXPECT_FALSE(tray_item->is_started()); | |
| 108 EXPECT_EQ(0, test->stop_callback_hit_count()); | |
| 109 | |
| 110 test->StartSession(); | |
| 111 EXPECT_TRUE(tray_item->is_started()); | |
| 112 | |
| 113 test->StopSession(); | |
| 114 EXPECT_FALSE(tray_item->is_started()); | |
| 115 EXPECT_EQ(1, test->stop_callback_hit_count()); | |
| 116 } | |
| 117 | |
| 118 TEST_F(ScreenCaptureTest, StartAndStop) { | |
| 119 TestStartAndStop(this); | |
| 120 } | |
| 121 | |
| 122 TEST_F(ScreenShareTest, StartAndStop) { | |
| 123 TestStartAndStop(this); | |
| 124 } | |
| 125 | |
| 126 void TestNotificationStartAndStop(ScreenTrayItemTest* test, | |
| 127 const base::Closure& start_function, | |
| 128 const base::Closure& stop_function) { | |
| 129 ScreenTrayItem* tray_item = test->tray_item(); | |
| 130 EXPECT_FALSE(tray_item->is_started()); | |
| 131 | |
| 132 start_function.Run(); | |
| 133 EXPECT_TRUE(tray_item->is_started()); | |
| 134 | |
| 135 // The stop callback shouldn't be called because we stopped | |
| 136 // through the notification system. | |
| 137 stop_function.Run(); | |
| 138 EXPECT_FALSE(tray_item->is_started()); | |
| 139 EXPECT_EQ(0, test->stop_callback_hit_count()); | |
| 140 } | |
| 141 | |
| 142 TEST_F(ScreenCaptureTest, NotificationStartAndStop) { | |
| 143 base::Closure start_function = base::Bind( | |
| 144 &SystemTrayNotifier::NotifyScreenCaptureStart, | |
| 145 base::Unretained(WmShell::Get()->system_tray_notifier()), | |
| 146 base::Bind(&ScreenTrayItemTest::StopCallback, base::Unretained(this)), | |
| 147 base::UTF8ToUTF16(kTestScreenCaptureAppName)); | |
| 148 | |
| 149 base::Closure stop_function = | |
| 150 base::Bind(&SystemTrayNotifier::NotifyScreenCaptureStop, | |
| 151 base::Unretained(WmShell::Get()->system_tray_notifier())); | |
| 152 | |
| 153 TestNotificationStartAndStop(this, start_function, stop_function); | |
| 154 } | |
| 155 | |
| 156 TEST_F(ScreenShareTest, NotificationStartAndStop) { | |
| 157 base::Closure start_func = base::Bind( | |
| 158 &SystemTrayNotifier::NotifyScreenShareStart, | |
| 159 base::Unretained(WmShell::Get()->system_tray_notifier()), | |
| 160 base::Bind(&ScreenTrayItemTest::StopCallback, base::Unretained(this)), | |
| 161 base::UTF8ToUTF16(kTestScreenShareHelperName)); | |
| 162 | |
| 163 base::Closure stop_func = | |
| 164 base::Bind(&SystemTrayNotifier::NotifyScreenShareStop, | |
| 165 base::Unretained(WmShell::Get()->system_tray_notifier())); | |
| 166 | |
| 167 TestNotificationStartAndStop(this, start_func, stop_func); | |
| 168 } | |
| 169 | |
| 170 void TestNotificationView(ScreenTrayItemTest* test) { | |
| 171 ScreenTrayItem* tray_item = test->tray_item(); | |
| 172 | |
| 173 test->StartSession(); | |
| 174 message_center::MessageCenter* message_center = | |
| 175 message_center::MessageCenter::Get(); | |
| 176 EXPECT_TRUE(message_center->FindVisibleNotificationById( | |
| 177 tray_item->GetNotificationId())); | |
| 178 test->StopSession(); | |
| 179 } | |
| 180 | |
| 181 TEST_F(ScreenCaptureTest, NotificationView) { | |
| 182 TestNotificationView(this); | |
| 183 } | |
| 184 | |
| 185 TEST_F(ScreenShareTest, NotificationView) { | |
| 186 TestNotificationView(this); | |
| 187 } | |
| 188 | |
| 189 void TestSystemTrayInteraction(ScreenTrayItemTest* test) { | |
| 190 ScreenTrayItem* tray_item = test->tray_item(); | |
| 191 EXPECT_FALSE(tray_item->tray_view()->visible()); | |
| 192 | |
| 193 std::vector<SystemTrayItem*> tray_items = | |
| 194 AshTest::GetPrimarySystemTray()->GetTrayItems(); | |
| 195 EXPECT_NE(std::find(tray_items.begin(), tray_items.end(), tray_item), | |
| 196 tray_items.end()); | |
| 197 | |
| 198 test->StartSession(); | |
| 199 EXPECT_TRUE(tray_item->tray_view()->visible()); | |
| 200 | |
| 201 // The default view should be created in a new bubble. | |
| 202 AshTest::GetPrimarySystemTray()->ShowDefaultView(BUBBLE_CREATE_NEW); | |
| 203 EXPECT_TRUE(tray_item->default_view()); | |
| 204 AshTest::GetPrimarySystemTray()->CloseSystemBubble(); | |
| 205 EXPECT_FALSE(tray_item->default_view()); | |
| 206 | |
| 207 test->StopSession(); | |
| 208 EXPECT_FALSE(tray_item->tray_view()->visible()); | |
| 209 | |
| 210 // The default view should not be visible because session is stopped. | |
| 211 AshTest::GetPrimarySystemTray()->ShowDefaultView(BUBBLE_CREATE_NEW); | |
| 212 EXPECT_FALSE(tray_item->default_view()->visible()); | |
| 213 } | |
| 214 | |
| 215 TEST_F(ScreenCaptureTest, SystemTrayInteraction) { | |
| 216 TestSystemTrayInteraction(this); | |
| 217 } | |
| 218 | |
| 219 TEST_F(ScreenShareTest, SystemTrayInteraction) { | |
| 220 TestSystemTrayInteraction(this); | |
| 221 } | |
| 222 | |
| 223 } // namespace ash | |
| OLD | NEW |