Index: chrome/browser/ui/app_list/app_list_service_views_browsertest.cc |
diff --git a/chrome/browser/ui/app_list/app_list_service_views_browsertest.cc b/chrome/browser/ui/app_list/app_list_service_views_browsertest.cc |
index 7bee1a8988873b191c3bf76423b50814fa465f7d..8db01dbcce1ff548d0ebb44a2dd61d429da416ed 100644 |
--- a/chrome/browser/ui/app_list/app_list_service_views_browsertest.cc |
+++ b/chrome/browser/ui/app_list/app_list_service_views_browsertest.cc |
@@ -4,12 +4,56 @@ |
#include "chrome/browser/ui/app_list/app_list_service_views.h" |
+#include "base/path_service.h" |
#include "base/run_loop.h" |
+#include "chrome/browser/extensions/extension_browsertest.h" |
+#include "chrome/browser/ui/app_list/app_list_controller_delegate.h" |
#include "chrome/browser/ui/app_list/test/chrome_app_list_test_support.h" |
#include "chrome/browser/ui/browser.h" |
+#include "chrome/common/chrome_paths.h" |
#include "chrome/test/base/in_process_browser_test.h" |
+#include "ui/app_list/app_list_switches.h" |
+#include "ui/app_list/views/app_list_view.h" |
#include "ui/views/widget/widget.h" |
+#if defined(OS_CHROMEOS) |
+#include "ash/shell.h" |
+#include "ash/test/app_list_controller_test_api.h" |
+#endif |
+ |
+namespace { |
+ |
+app_list::AppListView* GetAppListView(AppListService* service) { |
+#if defined(OS_CHROMEOS) |
+ return ash::test::AppListControllerTestApi(ash::Shell::GetInstance()).view(); |
+#else |
+ return static_cast<AppListServiceViews*>(service)->shower().app_list(); |
+#endif |
+} |
+ |
+} // namespace |
+ |
+namespace test { |
+ |
+// Allow access to private variables of the AppListView for testing. |
+class AppListViewTestApi { |
+ public: |
+ explicit AppListViewTestApi(app_list::AppListView* view) : view_(view) {} |
+ virtual ~AppListViewTestApi() {} |
+ |
+ bool is_overlay_visible() { |
+ DCHECK(view_->overlay_view_); |
+ return view_->overlay_view_->visible(); |
+ } |
+ |
+ private: |
+ app_list::AppListView* view_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(AppListViewTestApi); |
+}; |
+ |
+} // namespace test |
+ |
// Browser Test for AppListService on Views platforms. |
typedef InProcessBrowserTest AppListServiceViewsBrowserTest; |
@@ -42,3 +86,73 @@ IN_PROC_BROWSER_TEST_F(AppListServiceViewsBrowserTest, NativeClose) { |
// Note: no need to sink message queue. |
EXPECT_FALSE(service->GetAppListWindow()); |
} |
+ |
+// Browser Test for AppListController that ensures the App Info dialog opens |
+// correctly. |
+class AppListControllerAppInfoDialogBrowserTest : public ExtensionBrowserTest { |
+ public: |
+ AppListControllerAppInfoDialogBrowserTest() {} |
+ virtual ~AppListControllerAppInfoDialogBrowserTest() {} |
+ |
+ virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE { |
+ ExtensionBrowserTest::SetUpCommandLine(command_line); |
+ command_line->AppendSwitch(app_list::switches::kEnableAppInfo); |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(AppListControllerAppInfoDialogBrowserTest); |
+}; |
+ |
+// Test the DoShowAppInfoFlow function of the controller delegate. |
+IN_PROC_BROWSER_TEST_F(AppListControllerAppInfoDialogBrowserTest, |
+ DoShowAppInfoFlow) { |
+ // Install an extension to open the dialog for. |
+ test::SigninProfile(browser()->profile()); |
+ base::FilePath test_extension_path; |
+ ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_extension_path)); |
+ test_extension_path = test_extension_path.AppendASCII("extensions") |
+ .AppendASCII("platform_apps") |
+ .AppendASCII("minimal"); |
+ const extensions::Extension* extension = InstallExtension( |
+ test_extension_path, 1 /* expected_change: new install */); |
+ ASSERT_TRUE(extension); |
+ |
+ // Open the app list window. |
+ AppListService* service = test::GetAppListService(); |
+ EXPECT_FALSE(service->GetAppListWindow()); |
+ |
+ service->ShowForProfile(browser()->profile()); |
+ gfx::NativeWindow window = service->GetAppListWindow(); |
+ EXPECT_TRUE(window); |
+ |
+ views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window); |
+ ASSERT_TRUE(widget); |
+ |
+ test::AppListViewTestApi test_api(GetAppListView(service)); |
+ |
+ // Open the app info dialog. |
+ views::Widget::Widgets owned_widgets; |
+ widget->GetAllOwnedWidgets(window, &owned_widgets); |
+ EXPECT_EQ(0U, owned_widgets.size()); |
+ EXPECT_FALSE(test_api.is_overlay_visible()); |
+ |
+ AppListControllerDelegate* controller = service->GetControllerDelegate(); |
+ ASSERT_TRUE(controller); |
+ controller->DoShowAppInfoFlow(browser()->profile(), extension->id()); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ owned_widgets.clear(); |
+ widget->GetAllOwnedWidgets(window, &owned_widgets); |
+ EXPECT_EQ(1U, owned_widgets.size()); |
+ EXPECT_TRUE(test_api.is_overlay_visible()); |
+ |
+ // Close the app info dialog. |
+ views::Widget* app_info_dialog = *owned_widgets.begin(); |
+ app_info_dialog->Close(); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ owned_widgets.clear(); |
+ widget->GetAllOwnedWidgets(window, &owned_widgets); |
+ EXPECT_EQ(0U, owned_widgets.size()); |
+ EXPECT_FALSE(test_api.is_overlay_visible()); |
+} |