browser_command_controller_unittest.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_command_controller.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/command_line.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/browser_process.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/command_updater.h"
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/prefs/incognito_mode_prefs.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h"
139ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/profiles/profiles_state.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_commands.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window_state.h"
17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/common/chrome_switches.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/browser_with_test_window_test.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/test_browser_window.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_browser_process.h"
220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/test/base/testing_profile.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_profile_manager.h"
240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/signin/core/common/profile_management_switches.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/native_web_keyboard_event.h"
26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef BrowserWithTestWindowTest BrowserCommandControllerTest;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerTest, IsReservedCommandOrKey) {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // F1-3 keys are reserved Chrome accelerators on Chrome OS.
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      IDC_BACK, content::NativeWebKeyboardEvent(
353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_BROWSER_BACK, 0, 0)));
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      IDC_FORWARD, content::NativeWebKeyboardEvent(
383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_BROWSER_FORWARD, 0, 0)));
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      IDC_RELOAD, content::NativeWebKeyboardEvent(
413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_BROWSER_REFRESH, 0, 0)));
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // When there are modifier keys pressed, don't reserve.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_RELOAD_IGNORING_CACHE, content::NativeWebKeyboardEvent(
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F3, ui::EF_SHIFT_DOWN, 0)));
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_RELOAD_IGNORING_CACHE, content::NativeWebKeyboardEvent(
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F3, ui::EF_CONTROL_DOWN, 0)));
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_FULLSCREEN, content::NativeWebKeyboardEvent(
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F4, ui::EF_SHIFT_DOWN, 0)));
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // F4-10 keys are not reserved since they are Ash accelerators.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F4, 0, 0)));
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F5, 0, 0)));
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F6, 0, 0)));
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F7, 0, 0)));
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F8, 0, 0)));
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F9, 0, 0)));
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F10, 0, 0)));
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shift+Control+Alt+F3 is also an Ash accelerator. Don't reserve it.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false,
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::VKEY_F3,
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 0)));
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // OS_CHROMEOS
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Ctrl+n, Ctrl+w are reserved while Ctrl+f is not.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The content::NativeWebKeyboardEvent constructor is available only when
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // USE_AURA is #defined.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_NEW_WINDOW, content::NativeWebKeyboardEvent(
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_N, ui::EF_CONTROL_DOWN, 0)));
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_CLOSE_TAB, content::NativeWebKeyboardEvent(
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_W, ui::EF_CONTROL_DOWN, 0)));
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_FIND, content::NativeWebKeyboardEvent(
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F, ui::EF_CONTROL_DOWN, 0)));
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // USE_AURA
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerTest, IsReservedCommandOrKeyIsApp) {
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->app_name_ = "app";
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(browser()->is_app());
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // When is_app(), no keys are reserved.
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_BACK, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                ui::VKEY_F1, 0, 0)));
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_FORWARD, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                   ui::VKEY_F2, 0, 0)));
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_RELOAD, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  ui::VKEY_F3, 0, 0)));
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F4, 0, 0)));
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // OS_CHROMEOS
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The content::NativeWebKeyboardEvent constructor is available only when
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // USE_AURA is #defined.
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_NEW_WINDOW, content::NativeWebKeyboardEvent(
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_N, ui::EF_CONTROL_DOWN, 0)));
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_CLOSE_TAB, content::NativeWebKeyboardEvent(
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_W, ui::EF_CONTROL_DOWN, 0)));
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_FIND, content::NativeWebKeyboardEvent(
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F, ui::EF_CONTROL_DOWN, 0)));
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // USE_AURA
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
137010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(BrowserCommandControllerTest, IncognitoCommands) {
138010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
139010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_SHOW_SIGNIN));
141010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TestingProfile* testprofile = browser()->profile()->AsTestingProfile();
143010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(testprofile);
144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  testprofile->SetGuestSession(true);
145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  chrome::BrowserCommandController
146010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    ::UpdateSharedCommandsForIncognitoAvailability(
147010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      browser()->command_controller()->command_updater(), testprofile);
148010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_SIGNIN));
151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  testprofile->SetGuestSession(false);
153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(),
154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                      IncognitoModePrefs::FORCED);
155010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  chrome::BrowserCommandController
156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    ::UpdateSharedCommandsForIncognitoAvailability(
157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      browser()->command_controller()->command_updater(), testprofile);
158010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
159010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
160010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_SIGNIN));
161010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
162010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerTest, AppFullScreen) {
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Enable for tabbed browser.
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Enabled for app windows.
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->app_name_ = "app";
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(browser()->is_app());
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->command_controller()->FullscreenStateChanged();
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST_F(BrowserCommandControllerTest, OldAvatarMenuEnabledForOneOrMoreProfiles) {
1759ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  if (!profiles::IsMultipleProfilesEnabled())
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // The command line is reset at the end of every test by the test suite.
1796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  switches::DisableNewAvatarMenuForTesting(CommandLine::ForCurrentProcess());
1806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ASSERT_FALSE(switches::IsNewAvatarMenu());
181a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingProfileManager testing_profile_manager(
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      TestingBrowserProcess::GetGlobal());
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ProfileManager* profile_manager = testing_profile_manager.profile_manager();
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  chrome::BrowserCommandController command_controller(browser());
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
190cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool enabled = true;
191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(OS_CHROMEOS)
192cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Chrome OS uses system tray menu to handle multi-profiles.
193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  enabled = false;
194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif
195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  testing_profile_manager.CreateTestingProfile("p1");
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1U, profile_manager->GetNumberOfProfiles());
198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(enabled, command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  testing_profile_manager.CreateTestingProfile("p2");
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(2U, profile_manager->GetNumberOfProfiles());
202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(enabled, command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  testing_profile_manager.DeleteTestingProfile("p1");
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1U, profile_manager->GetNumberOfProfiles());
206cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  EXPECT_EQ(enabled, command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  testing_profile_manager.DeleteTestingProfile("p2");
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
211a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(BrowserCommandControllerTest, NewAvatarMenuEnabledWhenOnlyOneProfile) {
212a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (!profiles::IsMultipleProfilesEnabled())
213a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return;
214a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
215a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // The command line is reset at the end of every test by the test suite.
2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  switches::EnableNewAvatarMenuForTesting(CommandLine::ForCurrentProcess());
217a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
218a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  TestingProfileManager testing_profile_manager(
219a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      TestingBrowserProcess::GetGlobal());
220a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ProfileManager* profile_manager = testing_profile_manager.profile_manager();
222a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  chrome::BrowserCommandController command_controller(browser());
224a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
225a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
226a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  testing_profile_manager.CreateTestingProfile("p1");
227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_EQ(1U, profile_manager->GetNumberOfProfiles());
228a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_CHROMEOS)
229a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Chrome OS uses system tray menu to handle multi-profiles.
230a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
231a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#else
232a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
233a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
234a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  testing_profile_manager.DeleteTestingProfile("p1");
235a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
236a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
237a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(BrowserCommandControllerTest, NewAvatarMenuEnabledInGuestMode) {
238a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (!profiles::IsMultipleProfilesEnabled())
239a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return;
240a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
241a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // The command line is reset at the end of every test by the test suite.
2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  switches::EnableNewAvatarMenuForTesting(CommandLine::ForCurrentProcess());
243a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
244a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  TestingProfileManager testing_profile_manager(
245a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      TestingBrowserProcess::GetGlobal());
246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
247a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
248a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Set up guest a profile.
2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<TestingProfile> original_profile =
2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      TestingProfile::Builder().Build();
251a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  TestingProfile::Builder guest_builder;
252a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  guest_builder.SetGuestSession();
253a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  guest_builder.SetPath(ProfileManager::GetGuestProfilePath());
2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Browsers in Guest mode must be off the record profiles.
2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  TestingProfile* guest_profile =
2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      guest_builder.BuildIncognito(original_profile.get());
257a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
258a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(guest_profile->IsGuestSession());
259a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
260a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Create a new browser based on the guest profile.
2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Browser::CreateParams profile_params(guest_profile,
262a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                       chrome::GetActiveDesktop());
263a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<Browser> guest_browser(
264a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      chrome::CreateBrowserWithTestWindowForParams(&profile_params));
265cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  chrome::BrowserCommandController command_controller(guest_browser.get());
266a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
267a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_CHROMEOS)
268a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Chrome OS uses system tray menu to handle multi-profiles.
269a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
270a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#else
271a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
272a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
273a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
274a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
275a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(BrowserCommandControllerTest, AvatarMenuAlwaysDisabledInIncognitoMode) {
276a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (!profiles::IsMultipleProfilesEnabled())
277a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return;
278a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
279a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Set up a profile with an off the record profile.
280a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  TestingProfile::Builder normal_builder;
281a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<TestingProfile> original_profile = normal_builder.Build();
282a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
283a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Create a new browser based on the off the record profile.
284a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  Browser::CreateParams profile_params(
285a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      original_profile->GetOffTheRecordProfile(), chrome::GetActiveDesktop());
286a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<Browser> otr_browser(
287a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      chrome::CreateBrowserWithTestWindowForParams(&profile_params));
288a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
289cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  chrome::BrowserCommandController command_controller(otr_browser.get());
290a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
291a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
2926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Both the old style and the new style avatar menu should be disabled.
293a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
2946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  if (switches::IsNewAvatarMenu()) {
2956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    switches::DisableNewAvatarMenuForTesting(CommandLine::ForCurrentProcess());
2966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  } else {
2976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    switches::EnableNewAvatarMenuForTesting(CommandLine::ForCurrentProcess());
2986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
299a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
3006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // The command line is reset at the end of every test by the test suite.
301a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
302a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//////////////////////////////////////////////////////////////////////////////
3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A test browser window that can toggle fullscreen state.
3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FullscreenTestBrowserWindow : public TestBrowserWindow {
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FullscreenTestBrowserWindow() : fullscreen_(false) {}
3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~FullscreenTestBrowserWindow() {}
3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // TestBrowserWindow overrides:
3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool ShouldHideUIForFullscreen() const OVERRIDE {
3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return fullscreen_;
3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsFullscreen() const OVERRIDE {
3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return fullscreen_;
3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void EnterFullscreen(
3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const GURL& url, FullscreenExitBubbleType type) OVERRIDE {
3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    fullscreen_ = true;
3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ExitFullscreen() OVERRIDE {
3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    fullscreen_ = false;
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool fullscreen_;
3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FullscreenTestBrowserWindow);
3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test that uses FullscreenTestBrowserWindow for its window.
3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BrowserCommandControllerFullscreenTest
3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : public BrowserWithTestWindowTest {
3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BrowserCommandControllerFullscreenTest() {}
3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~BrowserCommandControllerFullscreenTest() {}
3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // BrowserWithTestWindowTest overrides:
340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual BrowserWindow* CreateBrowserWindow() OVERRIDE {
341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return new FullscreenTestBrowserWindow;
3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BrowserCommandControllerFullscreenTest);
3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerFullscreenTest,
3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       UpdateCommandsForFullscreenMode) {
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Defaults for a tabbed browser.
3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
36158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD)
3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
36358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif
3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Simulate going fullscreen.
3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::ToggleFullscreenMode(browser());
3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(browser()->window()->IsFullscreen());
3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->command_controller()->FullscreenStateChanged();
3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Most commands are disabled in fullscreen.
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
38858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD)
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
39058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif
3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Exit fullscreen.
4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::ToggleFullscreenMode(browser());
4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_FALSE(browser()->window()->IsFullscreen());
4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->command_controller()->FullscreenStateChanged();
4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
41358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD)
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
41558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif
4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
4230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
4240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Guest Profiles disallow some options.
4250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  TestingProfile* testprofile = browser()->profile()->AsTestingProfile();
4260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_TRUE(testprofile);
4270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  testprofile->SetGuestSession(true);
4280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
4290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  browser()->command_controller()->FullscreenStateChanged();
430010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
431010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
434a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(BrowserCommandControllerTest, IncognitoModeOnSigninAllowedPrefChange) {
4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Set up a profile with an off the record profile.
4361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<TestingProfile> profile1 = TestingProfile::Builder().Build();
4371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Profile* profile2 = profile1->GetOffTheRecordProfile();
4381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
439a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_EQ(profile2->GetOriginalProfile(), profile1.get());
440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Create a new browser based on the off the record profile.
4423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  Browser::CreateParams profile_params(profile1->GetOffTheRecordProfile(),
4433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                       chrome::GetActiveDesktop());
4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Browser> browser2(
4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      chrome::CreateBrowserWithTestWindowForParams(&profile_params));
4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
447cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  chrome::BrowserCommandController command_controller(browser2.get());
448a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Check that the SYNC_SETUP command is updated on preference change.
4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile1->GetPrefs()->SetBoolean(prefs::kSigninAllowed, false);
4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
456a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(BrowserCommandControllerTest, OnSigninAllowedPrefChange) {
457cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  chrome::BrowserCommandController command_controller(browser());
4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Check that the SYNC_SETUP command is updated on preference change.
4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile()->GetPrefs()->SetBoolean(prefs::kSigninAllowed, false);
4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
465