// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/ui/app_list/app_list_service_mac.h"
+#import "chrome/browser/ui/app_list/app_list_service_mac.h"
#include <vector>
-#include "apps/app_shim/app_shim_handler_mac.h"
#include "base/command_line.h"
+#include "chrome/browser/apps/app_shim/app_shim_handler_mac.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/mac/app_mode_common.h"
#include "chrome/test/base/in_process_browser_test.h"
+#import "ui/app_list/cocoa/app_list_window_controller.h"
using apps::AppShimHandler;
+namespace test {
+
+class AppListServiceMacTestApi {
+ public:
+ static AppListWindowController* window_controller() {
+ return AppListServiceMac::GetInstance()->window_controller_;
+ }
+};
+
+} // namespace test
+
namespace {
// Browser test for mac-specific AppListService functionality.
std::vector<base::FilePath>());
}
+ AppListViewController* GetViewController() {
+ return [test::AppListServiceMacTestApi::window_controller()
+ appListViewController];
+ }
+
+ // testing::Test overrides:
+ virtual void TearDown() OVERRIDE {
+ // At tear-down, NOTIFICATION_APP_TERMINATING should have been sent for the
+ // browser shutdown. References to browser-owned objects must be removed
+ // from the app list UI.
+ AppListViewController* view_controller = GetViewController();
+ // Note this first check will fail if the test doesn't ever show the
+ // app list, but currently all tests in this file do.
+ EXPECT_TRUE(view_controller);
+ EXPECT_FALSE([view_controller delegate]);
+ }
+
// AppShimHandler::Host overrides:
virtual void OnAppLaunchComplete(apps::AppShimLaunchResult result) OVERRIDE {
// AppList shims are always given APP_SHIM_LAUNCH_DUPLICATE_HOST, indicating
NOTREACHED();
}
virtual void OnAppHide() OVERRIDE {}
- virtual void OnAppRequestUserAttention() OVERRIDE {}
+ virtual void OnAppRequestUserAttention(
+ apps::AppShimAttentionType type) OVERRIDE {}
virtual base::FilePath GetProfilePath() const OVERRIDE {
NOTREACHED(); // Currently unused in this test.
return base::FilePath();
} // namespace
-IN_PROC_BROWSER_TEST_F(AppListServiceMacInteractiveTest,
- ShowAppListUsingShim) {
+IN_PROC_BROWSER_TEST_F(AppListServiceMacInteractiveTest, ShowAppListUsingShim) {
// Check that AppListService has registered as a shim handler for "app_list".
EXPECT_TRUE(AppShimHandler::GetForAppMode(app_mode::kAppListModeId));
AppListService::Get(chrome::HOST_DESKTOP_TYPE_NATIVE);
EXPECT_FALSE(service->IsAppListVisible());
+ // Creation should be lazy.
+ EXPECT_FALSE(GetViewController());
+
// With no saved profile, the default profile should be chosen and saved.
service->Show();
EXPECT_EQ(browser()->profile(), service->GetCurrentAppListProfile());
EXPECT_EQ(3, launch_count_);
service->DismissAppList();
EXPECT_FALSE(service->IsAppListVisible());
+
+ // View sticks around until shutdown.
+ AppListViewController* view_controller = GetViewController();
+ EXPECT_TRUE(view_controller);
+ EXPECT_TRUE([view_controller delegate]);
}