• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2016 The Chromium Embedded Framework Authors. All rights
2 // reserved. Use of this source code is governed by a BSD-style license that
3 // can be found in the LICENSE file.
4 
5 #include "include/base/cef_callback.h"
6 #include "include/views/cef_box_layout.h"
7 #include "include/views/cef_layout.h"
8 #include "include/views/cef_panel.h"
9 #include "include/wrapper/cef_closure_task.h"
10 #include "tests/ceftests/image_util.h"
11 #include "tests/ceftests/thread_helper.h"
12 #include "tests/ceftests/views/test_window_delegate.h"
13 #include "tests/gtest/include/gtest/gtest.h"
14 
15 #define WINDOW_TEST_ASYNC(name) UI_THREAD_TEST_ASYNC(ViewsWindowTest, name)
16 
17 #if !defined(OS_WIN)
18 #define VK_MENU 0x12  // ALT key.
19 #endif
20 
21 namespace {
22 
23 // Window state change delay in MS.
24 const int kStateDelayMS = 200;
25 
26 const int kWSize = TestWindowDelegate::kWSize;
27 
28 // Test that |expected| and |actual| are within |allowed_deviance| of each
29 // other.
ExpectCloseRects(const CefRect & expected,const CefRect & actual,int allowed_deviance)30 void ExpectCloseRects(const CefRect& expected,
31                       const CefRect& actual,
32                       int allowed_deviance) {
33   EXPECT_LE(abs(expected.x - actual.x), allowed_deviance);
34   EXPECT_LE(abs(expected.y - actual.y), allowed_deviance);
35   EXPECT_LE(abs(expected.width - actual.width), allowed_deviance);
36   EXPECT_LE(abs(expected.height - actual.height), allowed_deviance);
37 }
38 
WindowCreateImpl(CefRefPtr<CefWaitableEvent> event)39 void WindowCreateImpl(CefRefPtr<CefWaitableEvent> event) {
40   auto config = std::make_unique<TestWindowDelegate::Config>();
41   TestWindowDelegate::RunTest(event, std::move(config));
42 }
43 
WindowCreateFramelessImpl(CefRefPtr<CefWaitableEvent> event)44 void WindowCreateFramelessImpl(CefRefPtr<CefWaitableEvent> event) {
45   auto config = std::make_unique<TestWindowDelegate::Config>();
46   config->frameless = true;
47   TestWindowDelegate::RunTest(event, std::move(config));
48 }
49 
RunWindowShow(CefRefPtr<CefWindow> window)50 void RunWindowShow(CefRefPtr<CefWindow> window) {
51   EXPECT_FALSE(window->IsVisible());
52   EXPECT_FALSE(window->IsDrawn());
53   window->Show();
54   EXPECT_TRUE(window->IsVisible());
55   EXPECT_TRUE(window->IsDrawn());
56 }
57 
WindowCreateWithOriginImpl(CefRefPtr<CefWaitableEvent> event)58 void WindowCreateWithOriginImpl(CefRefPtr<CefWaitableEvent> event) {
59   auto config = std::make_unique<TestWindowDelegate::Config>();
60   config->window_origin = {100, 200};
61   config->on_window_created = base::BindOnce(RunWindowShow);
62   TestWindowDelegate::RunTest(event, std::move(config));
63 }
64 
RunWindowShowHide(CefRefPtr<CefWindow> window)65 void RunWindowShowHide(CefRefPtr<CefWindow> window) {
66   RunWindowShow(window);
67   window->Hide();
68   EXPECT_FALSE(window->IsVisible());
69   EXPECT_FALSE(window->IsDrawn());
70 }
71 
WindowShowHideImpl(CefRefPtr<CefWaitableEvent> event)72 void WindowShowHideImpl(CefRefPtr<CefWaitableEvent> event) {
73   auto config = std::make_unique<TestWindowDelegate::Config>();
74   config->on_window_created = base::BindOnce(RunWindowShowHide);
75   TestWindowDelegate::RunTest(event, std::move(config));
76 }
77 
WindowShowHideFramelessImpl(CefRefPtr<CefWaitableEvent> event)78 void WindowShowHideFramelessImpl(CefRefPtr<CefWaitableEvent> event) {
79   auto config = std::make_unique<TestWindowDelegate::Config>();
80   config->on_window_created = base::BindOnce(RunWindowShowHide);
81   config->frameless = true;
82   TestWindowDelegate::RunTest(event, std::move(config));
83 }
84 
85 const int kWPanel1ID = 1;
86 const int kWPanel2ID = 2;
87 
CreateBoxLayout(CefRefPtr<CefWindow> parent)88 void CreateBoxLayout(CefRefPtr<CefWindow> parent) {
89   CefRefPtr<CefPanel> panel_child1 = CefPanel::CreatePanel(nullptr);
90   panel_child1->SetID(kWPanel1ID);
91   panel_child1->SetBackgroundColor(CefColorSetARGB(255, 0, 0, 255));
92   EXPECT_TRUE(panel_child1->IsVisible());
93   EXPECT_FALSE(panel_child1->IsDrawn());
94 
95   CefRefPtr<CefPanel> panel_child2 = CefPanel::CreatePanel(nullptr);
96   panel_child2->SetID(kWPanel2ID);
97   panel_child2->SetBackgroundColor(CefColorSetARGB(255, 0, 255, 0));
98   EXPECT_TRUE(panel_child2->IsVisible());
99   EXPECT_FALSE(panel_child2->IsDrawn());
100 
101   // Set to BoxLayout. Default layout is vertical with children stretched along
102   // the horizontal axis.
103   CefBoxLayoutSettings settings;
104   parent->SetToBoxLayout(settings);
105 
106   parent->AddChildView(panel_child1);
107   parent->AddChildView(panel_child2);
108 
109   // IsDrawn() returns true because the Panels now have a RootView from the
110   // Window.
111   EXPECT_TRUE(panel_child1->IsDrawn());
112   EXPECT_TRUE(panel_child1->IsDrawn());
113 
114   // Stretch children equally along the vertical axis using flex.
115   CefRefPtr<CefBoxLayout> layout = parent->GetLayout()->AsBoxLayout();
116   layout->SetFlexForView(panel_child1, 1);
117   layout->SetFlexForView(panel_child2, 1);
118 
119   // Force layout.
120   parent->Layout();
121 
122   // The children should each take up 50% of the client area.
123   ExpectCloseRects(CefRect(0, 0, kWSize, kWSize / 2), panel_child1->GetBounds(),
124                    1);
125   ExpectCloseRects(CefRect(0, kWSize / 2, kWSize, kWSize / 2),
126                    panel_child2->GetBounds(), 1);
127 }
128 
RunWindowLayoutAndCoords(CefRefPtr<CefWindow> window)129 void RunWindowLayoutAndCoords(CefRefPtr<CefWindow> window) {
130   CreateBoxLayout(window);
131 
132   CefRefPtr<CefView> view1 = window->GetViewForID(kWPanel1ID);
133   EXPECT_TRUE(view1.get());
134   CefRefPtr<CefView> view2 = window->GetViewForID(kWPanel2ID);
135   EXPECT_TRUE(view2.get());
136 
137   window->Show();
138 
139   CefRect client_bounds_in_screen = window->GetClientAreaBoundsInScreen();
140   CefPoint point;
141 
142   // Test view to screen coordinate conversions.
143   point = CefPoint(0, 0);
144   EXPECT_TRUE(view1->ConvertPointToScreen(point));
145   EXPECT_EQ(CefPoint(client_bounds_in_screen.x, client_bounds_in_screen.y),
146             point);
147   point = CefPoint(0, 0);
148   EXPECT_TRUE(view2->ConvertPointToScreen(point));
149   EXPECT_EQ(CefPoint(client_bounds_in_screen.x,
150                      client_bounds_in_screen.y + kWSize / 2),
151             point);
152 
153   // Test view from screen coordinate conversions.
154   point = CefPoint(client_bounds_in_screen.x, client_bounds_in_screen.y);
155   EXPECT_TRUE(view1->ConvertPointFromScreen(point));
156   EXPECT_EQ(CefPoint(0, 0), point);
157   point = CefPoint(client_bounds_in_screen.x,
158                    client_bounds_in_screen.y + kWSize / 2);
159   EXPECT_TRUE(view2->ConvertPointFromScreen(point));
160   EXPECT_EQ(CefPoint(0, 0), point);
161 
162   // Test view to window coordinate conversions.
163   point = CefPoint(0, 0);
164   EXPECT_TRUE(view1->ConvertPointToWindow(point));
165   EXPECT_EQ(CefPoint(0, 0), point);
166   point = CefPoint(0, 0);
167   EXPECT_TRUE(view2->ConvertPointToWindow(point));
168   EXPECT_EQ(CefPoint(0, kWSize / 2), point);
169 
170   // Test view from window coordinate conversions.
171   point = CefPoint(0, 0);
172   EXPECT_TRUE(view1->ConvertPointFromWindow(point));
173   EXPECT_EQ(CefPoint(0, 0), point);
174   point = CefPoint(0, kWSize / 2);
175   EXPECT_TRUE(view2->ConvertPointFromWindow(point));
176   EXPECT_EQ(CefPoint(0, 0), point);
177 
178   // Test view to view coordinate conversions.
179   point = CefPoint(0, 0);
180   EXPECT_TRUE(view1->ConvertPointToView(view2, point));
181   EXPECT_EQ(CefPoint(0, -kWSize / 2), point);
182   point = CefPoint(0, 0);
183   EXPECT_TRUE(view2->ConvertPointToView(view1, point));
184   EXPECT_EQ(CefPoint(0, kWSize / 2), point);
185 
186   // Test view from view coordinate conversions.
187   point = CefPoint(0, -kWSize / 2);
188   EXPECT_TRUE(view1->ConvertPointFromView(view2, point));
189   EXPECT_EQ(CefPoint(0, 0), point);
190   point = CefPoint(0, kWSize / 2);
191   EXPECT_TRUE(view2->ConvertPointFromView(view1, point));
192   EXPECT_EQ(CefPoint(0, 0), point);
193 
194   CefRefPtr<CefDisplay> display = window->GetDisplay();
195   EXPECT_TRUE(display.get());
196 
197   // We don't know what the pixel values will be, but they should be reversable.
198   point = CefPoint(client_bounds_in_screen.x, client_bounds_in_screen.y);
199   display->ConvertPointToPixels(point);
200   display->ConvertPointFromPixels(point);
201   EXPECT_EQ(CefPoint(client_bounds_in_screen.x, client_bounds_in_screen.y),
202             point);
203 }
204 
WindowLayoutAndCoordsImpl(CefRefPtr<CefWaitableEvent> event)205 void WindowLayoutAndCoordsImpl(CefRefPtr<CefWaitableEvent> event) {
206   auto config = std::make_unique<TestWindowDelegate::Config>();
207   config->on_window_created = base::BindOnce(RunWindowLayoutAndCoords);
208   TestWindowDelegate::RunTest(event, std::move(config));
209 }
210 
WindowLayoutAndCoordsFramelessImpl(CefRefPtr<CefWaitableEvent> event)211 void WindowLayoutAndCoordsFramelessImpl(CefRefPtr<CefWaitableEvent> event) {
212   auto config = std::make_unique<TestWindowDelegate::Config>();
213   config->on_window_created = base::BindOnce(RunWindowLayoutAndCoords);
214   config->frameless = true;
215   TestWindowDelegate::RunTest(event, std::move(config));
216 }
217 
VerifyRestore(CefRefPtr<CefWindow> window)218 void VerifyRestore(CefRefPtr<CefWindow> window) {
219   EXPECT_FALSE(window->IsMinimized());
220   EXPECT_FALSE(window->IsMaximized());
221   EXPECT_FALSE(window->IsFullscreen());
222   EXPECT_TRUE(window->IsVisible());
223   EXPECT_TRUE(window->IsDrawn());
224 
225   // End the test by closing the Window.
226   window->Close();
227 }
228 
VerifyMaximize(CefRefPtr<CefWindow> window)229 void VerifyMaximize(CefRefPtr<CefWindow> window) {
230   EXPECT_FALSE(window->IsMinimized());
231   EXPECT_TRUE(window->IsMaximized());
232   EXPECT_FALSE(window->IsFullscreen());
233   EXPECT_TRUE(window->IsVisible());
234   EXPECT_TRUE(window->IsDrawn());
235 
236   window->Restore();
237   CefPostDelayedTask(TID_UI, base::BindOnce(VerifyRestore, window),
238                      kStateDelayMS);
239 }
240 
RunWindowMaximize(CefRefPtr<CefWindow> window)241 void RunWindowMaximize(CefRefPtr<CefWindow> window) {
242   CreateBoxLayout(window);
243   window->Show();
244   EXPECT_FALSE(window->IsMinimized());
245   EXPECT_FALSE(window->IsMaximized());
246   EXPECT_FALSE(window->IsFullscreen());
247   EXPECT_TRUE(window->IsVisible());
248   EXPECT_TRUE(window->IsDrawn());
249 
250   window->Maximize();
251   CefPostDelayedTask(TID_UI, base::BindOnce(VerifyMaximize, window),
252                      kStateDelayMS);
253 }
254 
WindowMaximizeImpl(CefRefPtr<CefWaitableEvent> event)255 void WindowMaximizeImpl(CefRefPtr<CefWaitableEvent> event) {
256   auto config = std::make_unique<TestWindowDelegate::Config>();
257   config->on_window_created = base::BindOnce(RunWindowMaximize);
258   config->close_window = false;
259   TestWindowDelegate::RunTest(event, std::move(config));
260 }
261 
WindowMaximizeFramelessImpl(CefRefPtr<CefWaitableEvent> event)262 void WindowMaximizeFramelessImpl(CefRefPtr<CefWaitableEvent> event) {
263   auto config = std::make_unique<TestWindowDelegate::Config>();
264   config->on_window_created = base::BindOnce(RunWindowMaximize);
265   config->frameless = true;
266   config->close_window = false;
267   TestWindowDelegate::RunTest(event, std::move(config));
268 }
269 
VerifyMinimize(CefRefPtr<CefWindow> window)270 void VerifyMinimize(CefRefPtr<CefWindow> window) {
271   EXPECT_TRUE(window->IsMinimized());
272   EXPECT_FALSE(window->IsMaximized());
273   EXPECT_FALSE(window->IsFullscreen());
274 
275   // This result is a bit unexpected, but I guess the platform considers a
276   // window to be visible even when it's minimized.
277   EXPECT_TRUE(window->IsVisible());
278   EXPECT_TRUE(window->IsDrawn());
279 
280   window->Restore();
281   CefPostDelayedTask(TID_UI, base::BindOnce(VerifyRestore, window),
282                      kStateDelayMS);
283 }
284 
RunWindowMinimize(CefRefPtr<CefWindow> window)285 void RunWindowMinimize(CefRefPtr<CefWindow> window) {
286   CreateBoxLayout(window);
287   window->Show();
288   EXPECT_FALSE(window->IsMinimized());
289   EXPECT_FALSE(window->IsMaximized());
290   EXPECT_FALSE(window->IsFullscreen());
291   EXPECT_TRUE(window->IsVisible());
292   EXPECT_TRUE(window->IsDrawn());
293 
294   window->Minimize();
295   CefPostDelayedTask(TID_UI, base::BindOnce(VerifyMinimize, window),
296                      kStateDelayMS);
297 }
298 
WindowMinimizeImpl(CefRefPtr<CefWaitableEvent> event)299 void WindowMinimizeImpl(CefRefPtr<CefWaitableEvent> event) {
300   auto config = std::make_unique<TestWindowDelegate::Config>();
301   config->on_window_created = base::BindOnce(RunWindowMinimize);
302   config->close_window = false;
303   TestWindowDelegate::RunTest(event, std::move(config));
304 }
305 
WindowMinimizeFramelessImpl(CefRefPtr<CefWaitableEvent> event)306 void WindowMinimizeFramelessImpl(CefRefPtr<CefWaitableEvent> event) {
307   auto config = std::make_unique<TestWindowDelegate::Config>();
308   config->on_window_created = base::BindOnce(RunWindowMinimize);
309   config->frameless = true;
310   config->close_window = false;
311   TestWindowDelegate::RunTest(event, std::move(config));
312 }
313 
VerifyFullscreenExit(CefRefPtr<CefWindow> window)314 void VerifyFullscreenExit(CefRefPtr<CefWindow> window) {
315   EXPECT_FALSE(window->IsMinimized());
316   EXPECT_FALSE(window->IsMaximized());
317   EXPECT_FALSE(window->IsFullscreen());
318   EXPECT_TRUE(window->IsVisible());
319   EXPECT_TRUE(window->IsDrawn());
320 
321   // End the test by closing the Window.
322   window->Close();
323 }
324 
VerifyFullscreen(CefRefPtr<CefWindow> window)325 void VerifyFullscreen(CefRefPtr<CefWindow> window) {
326   EXPECT_FALSE(window->IsMinimized());
327   EXPECT_FALSE(window->IsMaximized());
328   EXPECT_TRUE(window->IsFullscreen());
329   EXPECT_TRUE(window->IsVisible());
330   EXPECT_TRUE(window->IsDrawn());
331 
332   window->SetFullscreen(false);
333   CefPostDelayedTask(TID_UI, base::BindOnce(VerifyFullscreenExit, window),
334                      kStateDelayMS);
335 }
336 
RunWindowFullscreen(CefRefPtr<CefWindow> window)337 void RunWindowFullscreen(CefRefPtr<CefWindow> window) {
338   CreateBoxLayout(window);
339   window->Show();
340   EXPECT_FALSE(window->IsMinimized());
341   EXPECT_FALSE(window->IsMaximized());
342   EXPECT_FALSE(window->IsFullscreen());
343   EXPECT_TRUE(window->IsVisible());
344   EXPECT_TRUE(window->IsDrawn());
345 
346   window->SetFullscreen(true);
347   CefPostDelayedTask(TID_UI, base::BindOnce(VerifyFullscreen, window),
348                      kStateDelayMS);
349 }
350 
WindowFullscreenImpl(CefRefPtr<CefWaitableEvent> event)351 void WindowFullscreenImpl(CefRefPtr<CefWaitableEvent> event) {
352   auto config = std::make_unique<TestWindowDelegate::Config>();
353   config->on_window_created = base::BindOnce(RunWindowFullscreen);
354   config->close_window = false;
355   TestWindowDelegate::RunTest(event, std::move(config));
356 }
357 
WindowFullscreenFramelessImpl(CefRefPtr<CefWaitableEvent> event)358 void WindowFullscreenFramelessImpl(CefRefPtr<CefWaitableEvent> event) {
359   auto config = std::make_unique<TestWindowDelegate::Config>();
360   config->on_window_created = base::BindOnce(RunWindowFullscreen);
361   config->frameless = true;
362   config->close_window = false;
363   TestWindowDelegate::RunTest(event, std::move(config));
364 }
365 
RunWindowIcon(CefRefPtr<CefWindow> window)366 void RunWindowIcon(CefRefPtr<CefWindow> window) {
367   CefRefPtr<CefImage> image = CefImage::CreateImage();
368   image_util::LoadIconImage(image, 1.0);
369   image_util::LoadIconImage(image, 2.0);
370 
371   EXPECT_FALSE(window->GetWindowIcon().get());
372   window->SetWindowIcon(image);
373   EXPECT_TRUE(image->IsSame(window->GetWindowIcon()));
374 
375   EXPECT_FALSE(window->GetWindowAppIcon().get());
376   window->SetWindowAppIcon(image);
377   EXPECT_TRUE(image->IsSame(window->GetWindowAppIcon()));
378 
379   window->Show();
380 }
381 
WindowIconImpl(CefRefPtr<CefWaitableEvent> event)382 void WindowIconImpl(CefRefPtr<CefWaitableEvent> event) {
383   auto config = std::make_unique<TestWindowDelegate::Config>();
384   config->on_window_created = base::BindOnce(RunWindowIcon);
385   TestWindowDelegate::RunTest(event, std::move(config));
386 }
387 
WindowIconFramelessImpl(CefRefPtr<CefWaitableEvent> event)388 void WindowIconFramelessImpl(CefRefPtr<CefWaitableEvent> event) {
389   auto config = std::make_unique<TestWindowDelegate::Config>();
390   config->on_window_created = base::BindOnce(RunWindowIcon);
391   config->frameless = true;
392   TestWindowDelegate::RunTest(event, std::move(config));
393 }
394 
395 const int kChar = 'A';
396 const int kCloseWindowId = 2;
397 bool got_accelerator;
398 int got_key_event_alt_count;
399 bool got_key_event_char;
400 
TriggerAccelerator(CefRefPtr<CefWindow> window)401 void TriggerAccelerator(CefRefPtr<CefWindow> window) {
402   window->SendKeyPress(kChar, EVENTFLAG_ALT_DOWN);
403 }
404 
OnKeyEvent(CefRefPtr<CefWindow> window,const CefKeyEvent & event)405 bool OnKeyEvent(CefRefPtr<CefWindow> window, const CefKeyEvent& event) {
406   if (event.type != KEYEVENT_RAWKEYDOWN)
407     return false;
408 
409   if (event.windows_key_code == VK_MENU) {
410     // First we get the ALT key press in all cases.
411     EXPECT_FALSE(got_key_event_char);
412     if (got_key_event_alt_count == 0)
413       EXPECT_FALSE(got_accelerator);
414     else
415       EXPECT_TRUE(got_accelerator);
416 
417     EXPECT_EQ(EVENTFLAG_ALT_DOWN, static_cast<int>(event.modifiers));
418     got_key_event_alt_count++;
419   } else if (event.windows_key_code == kChar) {
420     // Then we get the char key press with the ALT modifier if the accelerator
421     // isn't registered.
422     EXPECT_TRUE(got_accelerator);
423     EXPECT_EQ(got_key_event_alt_count, 2);
424     EXPECT_FALSE(got_key_event_char);
425 
426     EXPECT_EQ(EVENTFLAG_ALT_DOWN, static_cast<int>(event.modifiers));
427     got_key_event_char = true;
428 
429     // Call this method just to make sure it doesn't crash.
430     window->RemoveAllAccelerators();
431 
432     // End the test by closing the Window.
433     window->Close();
434 
435     return true;
436   }
437 
438   return false;
439 }
440 
OnAccelerator(CefRefPtr<CefWindow> window,int command_id)441 bool OnAccelerator(CefRefPtr<CefWindow> window, int command_id) {
442   EXPECT_FALSE(got_accelerator);
443   EXPECT_EQ(got_key_event_alt_count, 1);
444   EXPECT_FALSE(got_key_event_char);
445 
446   EXPECT_EQ(kCloseWindowId, command_id);
447   got_accelerator = true;
448 
449   // Remove the accelerator.
450   window->RemoveAccelerator(kCloseWindowId);
451 
452   // Now send the event without the accelerator registered. Should result in a
453   // call to OnKeyEvent.
454   TriggerAccelerator(window);
455 
456   return true;
457 }
458 
RunWindowAccelerator(CefRefPtr<CefWindow> window)459 void RunWindowAccelerator(CefRefPtr<CefWindow> window) {
460   window->SetAccelerator(kCloseWindowId, kChar, false, false, true);
461   window->Show();
462 
463   CefPostDelayedTask(TID_UI, base::BindOnce(TriggerAccelerator, window),
464                      kStateDelayMS);
465 }
466 
VerifyWindowAccelerator(CefRefPtr<CefWindow> window)467 void VerifyWindowAccelerator(CefRefPtr<CefWindow> window) {
468   EXPECT_TRUE(got_accelerator);
469   EXPECT_EQ(got_key_event_alt_count, 2);
470   EXPECT_TRUE(got_key_event_char);
471 }
472 
473 // Expected order of events:
474 // 1. OnKeyEvent for ALT key press.
475 // 2. OnAccelerator for ALT+Char key press (with accelerator registered).
476 // 3. OnKeyEvent for ALT key press.
477 // 4. OnKeyEvent for ALT+Char key press (without accelerator registered).
WindowAcceleratorImpl(CefRefPtr<CefWaitableEvent> event)478 void WindowAcceleratorImpl(CefRefPtr<CefWaitableEvent> event) {
479   got_accelerator = false;
480   got_key_event_alt_count = 0;
481   got_key_event_char = false;
482 
483   auto config = std::make_unique<TestWindowDelegate::Config>();
484   config->on_window_created = base::BindOnce(RunWindowAccelerator);
485   config->on_window_destroyed = base::BindOnce(VerifyWindowAccelerator);
486   config->on_accelerator = base::BindRepeating(OnAccelerator);
487   config->on_key_event = base::BindRepeating(OnKeyEvent);
488   config->close_window = false;
489   TestWindowDelegate::RunTest(event, std::move(config));
490 }
491 
492 }  // namespace
493 
494 // Test window functionality. This is primarily to exercise exposed CEF APIs
495 // and is not intended to comprehensively test window-related behavior (which
496 // we presume that Chromium is testing).
497 WINDOW_TEST_ASYNC(WindowCreate)
498 WINDOW_TEST_ASYNC(WindowCreateFrameless)
499 WINDOW_TEST_ASYNC(WindowCreateWithOrigin)
500 WINDOW_TEST_ASYNC(WindowShowHide)
501 WINDOW_TEST_ASYNC(WindowShowHideFrameless)
502 WINDOW_TEST_ASYNC(WindowLayoutAndCoords)
503 WINDOW_TEST_ASYNC(WindowLayoutAndCoordsFrameless)
504 WINDOW_TEST_ASYNC(WindowMaximize)
505 WINDOW_TEST_ASYNC(WindowMaximizeFrameless)
506 WINDOW_TEST_ASYNC(WindowMinimize)
507 WINDOW_TEST_ASYNC(WindowMinimizeFrameless)
508 WINDOW_TEST_ASYNC(WindowFullscreen)
509 WINDOW_TEST_ASYNC(WindowFullscreenFrameless)
510 WINDOW_TEST_ASYNC(WindowIcon)
511 WINDOW_TEST_ASYNC(WindowIconFrameless)
512 WINDOW_TEST_ASYNC(WindowAccelerator)
513