| Index: chrome/browser/app_controller_mac_browsertest.mm
|
| diff --git a/chrome/browser/app_controller_mac_browsertest.mm b/chrome/browser/app_controller_mac_browsertest.mm
|
| index 11f2c9864f8342f0af7791293a42d0bfca384327..567d1833aece974a8b081fc92e5dc3979448286c 100644
|
| --- a/chrome/browser/app_controller_mac_browsertest.mm
|
| +++ b/chrome/browser/app_controller_mac_browsertest.mm
|
| @@ -6,10 +6,15 @@
|
|
|
| #include "base/command_line.h"
|
| #include "base/mac/scoped_nsobject.h"
|
| +#include "base/strings/sys_string_conversions.h"
|
| #include "chrome/app/chrome_command_ids.h"
|
| #import "chrome/browser/app_controller_mac.h"
|
| +#include "chrome/browser/extensions/extension_test_message_listener.h"
|
| +#include "chrome/browser/extensions/platform_app_browsertest_util.h"
|
| +#include "chrome/browser/extensions/shell_window_registry.h"
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/browser/ui/browser_list.h"
|
| +#include "chrome/browser/ui/browser_window.h"
|
| #include "chrome/browser/ui/host_desktop.h"
|
| #include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| #import "chrome/common/chrome_switches.h"
|
| @@ -19,7 +24,8 @@
|
|
|
| namespace {
|
|
|
| -class AppControllerPlatformAppBrowserTest : public InProcessBrowserTest {
|
| +class AppControllerPlatformAppBrowserTest
|
| + : public extensions::PlatformAppBrowserTest {
|
| protected:
|
| AppControllerPlatformAppBrowserTest()
|
| : active_browser_list_(BrowserList::GetInstance(
|
| @@ -27,6 +33,7 @@ class AppControllerPlatformAppBrowserTest : public InProcessBrowserTest {
|
| }
|
|
|
| virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
|
| + PlatformAppBrowserTest::SetUpCommandLine(command_line);
|
| command_line->AppendSwitchASCII(switches::kAppId,
|
| "1234");
|
| }
|
| @@ -48,6 +55,72 @@ IN_PROC_BROWSER_TEST_F(AppControllerPlatformAppBrowserTest,
|
| EXPECT_EQ(1u, active_browser_list_->size());
|
| }
|
|
|
| +// Test that focusing an app window changes the menu bar.
|
| +IN_PROC_BROWSER_TEST_F(AppControllerPlatformAppBrowserTest,
|
| + PlatformAppFocusUpdatesMenuBar) {
|
| + base::scoped_nsobject<AppController> app_controller(
|
| + [[AppController alloc] init]);
|
| +
|
| + // Start two apps and wait for them to be launched.
|
| + ExtensionTestMessageListener listener_1("Launched", false);
|
| + const extensions::Extension* app_1 =
|
| + InstallAndLaunchPlatformApp("minimal_id");
|
| + ASSERT_TRUE(listener_1.WaitUntilSatisfied());
|
| + ExtensionTestMessageListener listener_2("Launched", false);
|
| + const extensions::Extension* app_2 =
|
| + InstallAndLaunchPlatformApp("minimal");
|
| + ASSERT_TRUE(listener_2.WaitUntilSatisfied());
|
| +
|
| + NSMenu* main_menu = [NSApp mainMenu];
|
| + NSUInteger initial_menu_item_count = [[main_menu itemArray] count];
|
| +
|
| + // When an app is focused, all Chrome menu items should be hidden, and a menu
|
| + // item for the app should be added.
|
| + apps::ShellWindow* app_1_shell_window =
|
| + extensions::ShellWindowRegistry::Get(profile())->
|
| + GetShellWindowsForApp(app_1->id()).front();
|
| + [[NSNotificationCenter defaultCenter]
|
| + postNotificationName:NSWindowDidBecomeMainNotification
|
| + object:app_1_shell_window->GetNativeWindow()];
|
| + NSArray* item_array = [main_menu itemArray];
|
| + EXPECT_EQ(initial_menu_item_count + 1, [item_array count]);
|
| + for (NSUInteger i = 0; i < initial_menu_item_count; ++i)
|
| + EXPECT_TRUE([[item_array objectAtIndex:i] isHidden]);
|
| + NSMenuItem* last_item = [item_array lastObject];
|
| + EXPECT_EQ(app_1->id(), base::SysNSStringToUTF8([last_item title]));
|
| + EXPECT_EQ(app_1->name(),
|
| + base::SysNSStringToUTF8([[last_item submenu] title]));
|
| + EXPECT_FALSE([last_item isHidden]);
|
| +
|
| + // When another app is focused, the menu item for the app should change.
|
| + apps::ShellWindow* app_2_shell_window =
|
| + extensions::ShellWindowRegistry::Get(profile())->
|
| + GetShellWindowsForApp(app_2->id()).front();
|
| + [[NSNotificationCenter defaultCenter]
|
| + postNotificationName:NSWindowDidBecomeMainNotification
|
| + object:app_2_shell_window->GetNativeWindow()];
|
| + item_array = [main_menu itemArray];
|
| + EXPECT_EQ(initial_menu_item_count + 1, [item_array count]);
|
| + for (NSUInteger i = 0; i < initial_menu_item_count; ++i)
|
| + EXPECT_TRUE([[item_array objectAtIndex:i] isHidden]);
|
| + last_item = [item_array lastObject];
|
| + EXPECT_EQ(app_2->id(), base::SysNSStringToUTF8([last_item title]));
|
| + EXPECT_EQ(app_2->name(),
|
| + base::SysNSStringToUTF8([[last_item submenu] title]));
|
| + EXPECT_FALSE([last_item isHidden]);
|
| +
|
| + // When Chrome is focused, the menu item for the app should be removed.
|
| + NSWindow* browser_native_window =
|
| + active_browser_list_->get(0)->window()->GetNativeWindow();
|
| + [[NSNotificationCenter defaultCenter]
|
| + postNotificationName:NSWindowDidBecomeMainNotification
|
| + object:browser_native_window];
|
| + item_array = [main_menu itemArray];
|
| + EXPECT_EQ(initial_menu_item_count, [item_array count]);
|
| + for (NSUInteger i = 0; i < initial_menu_item_count; ++i)
|
| + EXPECT_FALSE([[item_array objectAtIndex:i] isHidden]);
|
| +}
|
| +
|
| class AppControllerWebAppBrowserTest : public InProcessBrowserTest {
|
| protected:
|
| AppControllerWebAppBrowserTest()
|
|
|