blob: 6f8cc1c2d16c24b1b7a76d762517f7a1795339a7 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import <Cocoa/Cocoa.h>
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/panels/base_panel_browser_test.h"
#include "chrome/browser/ui/panels/panel.h"
#include "content/public/test/test_utils.h"
typedef BasePanelBrowserTest PanelCocoaBrowserTest;
IN_PROC_BROWSER_TEST_F(PanelCocoaBrowserTest, MenuItems) {
Panel* panel = CreatePanel("Panel");
// Close main tabbed window.
content::WindowedNotificationObserver signal(
chrome::NOTIFICATION_BROWSER_CLOSED,
content::Source<Browser>(browser()));
chrome::CloseWindow(browser());
signal.Wait();
// There should be no browser windows.
EXPECT_EQ(0u, chrome::GetTotalBrowserCount());
// There should be one panel.
EXPECT_EQ(1, PanelManager::GetInstance()->num_panels());
NSMenu* mainMenu = [NSApp mainMenu];
EXPECT_TRUE(mainMenu);
// Chrome(0) File(1) ....
// Get File submenu. It doesn't have a command id, fetch it by index.
NSMenu* fileSubmenu = [[[mainMenu itemArray] objectAtIndex:1] submenu];
EXPECT_TRUE(fileSubmenu);
[fileSubmenu update];
// Verify the items normally enabled for "all windows closed" case are
// also enabled when there is a panel but no browser windows on the screen.
NSMenuItem* item = [fileSubmenu itemWithTag:IDC_NEW_TAB];
EXPECT_TRUE(item);
EXPECT_TRUE([item isEnabled]);
item = [fileSubmenu itemWithTag:IDC_NEW_WINDOW];
EXPECT_TRUE(item);
EXPECT_TRUE([item isEnabled]);
item = [fileSubmenu itemWithTag:IDC_NEW_INCOGNITO_WINDOW];
EXPECT_TRUE(item);
EXPECT_TRUE([item isEnabled]);
NSMenu* historySubmenu = [[mainMenu itemWithTag:IDC_HISTORY_MENU] submenu];
EXPECT_TRUE(historySubmenu);
[historySubmenu update];
// These should be disabled.
item = [historySubmenu itemWithTag:IDC_HOME];
EXPECT_TRUE(item);
EXPECT_FALSE([item isEnabled]);
item = [historySubmenu itemWithTag:IDC_BACK];
EXPECT_TRUE(item);
EXPECT_FALSE([item isEnabled]);
item = [historySubmenu itemWithTag:IDC_FORWARD];
EXPECT_TRUE(item);
EXPECT_FALSE([item isEnabled]);
// 'Close Window' should be enabled because the remaining Panel is a Responder
// which implements performClose:, the 'action' of 'Close Window'.
for (NSMenuItem *i in [fileSubmenu itemArray]) {
if ([i action] == @selector(performClose:)) {
item = i;
break;
}
}
EXPECT_TRUE(item);
EXPECT_TRUE([item isEnabled]);
panel->Close();
}