1 // Copyright 2014 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.
5 #include "chrome/browser/ui/app_list/app_list_service_views.h"
7 #include "base/run_loop.h"
8 #include "chrome/browser/ui/app_list/test/chrome_app_list_test_support.h"
9 #include "chrome/browser/ui/browser.h"
10 #include "chrome/test/base/in_process_browser_test.h"
11 #include "ui/views/widget/widget.h"
13 // Browser Test for AppListService on Views platforms.
14 typedef InProcessBrowserTest AppListServiceViewsBrowserTest;
16 // Test closing the native app list window as if via a request from the OS.
17 IN_PROC_BROWSER_TEST_F(AppListServiceViewsBrowserTest, NativeClose) {
18 AppListService* service = test::GetAppListService();
19 EXPECT_FALSE(service->GetAppListWindow());
21 // Since the profile is loaded, this will create a view immediately. This is
22 // important, because anything asynchronous would need an interactive_uitest
23 // due to the possibility of the app list being dismissed, and
24 // AppListService::GetAppListWindow returning NULL.
25 service->ShowForProfile(browser()->profile());
26 gfx::NativeWindow window = service->GetAppListWindow();
29 views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window);
33 // Close is asynchronous (dismiss is not) so sink the message queue.
34 base::RunLoop().RunUntilIdle();
35 EXPECT_FALSE(service->GetAppListWindow());
37 // Show again to get some code coverage for possibly stale pointers.
38 service->ShowForProfile(browser()->profile());
39 EXPECT_TRUE(service->GetAppListWindow());
40 service->DismissAppList(); // Note: in Ash, this will invalidate the window.
42 // Note: no need to sink message queue.
43 EXPECT_FALSE(service->GetAppListWindow());