File: panel_cocoa_browsertest.mm

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (85 lines) | stat: -rw-r--r-- 2,718 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// 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();
}