Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / browser_command_controller_unittest.cc
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/browser_command_controller.h"
6
7 #include "base/command_line.h"
8 #include "chrome/app/chrome_command_ids.h"
9 #include "chrome/browser/browser_process.h"
10 #include "chrome/browser/command_updater.h"
11 #include "chrome/browser/prefs/incognito_mode_prefs.h"
12 #include "chrome/browser/profiles/profile_manager.h"
13 #include "chrome/browser/profiles/profiles_state.h"
14 #include "chrome/browser/ui/browser.h"
15 #include "chrome/browser/ui/browser_commands.h"
16 #include "chrome/browser/ui/browser_window_state.h"
17 #include "chrome/common/chrome_switches.h"
18 #include "chrome/common/pref_names.h"
19 #include "chrome/test/base/browser_with_test_window_test.h"
20 #include "chrome/test/base/test_browser_window.h"
21 #include "chrome/test/base/testing_browser_process.h"
22 #include "chrome/test/base/testing_profile.h"
23 #include "chrome/test/base/testing_profile_manager.h"
24 #include "components/signin/core/common/profile_management_switches.h"
25 #include "content/public/browser/native_web_keyboard_event.h"
26 #include "ui/events/keycodes/keyboard_codes.h"
27
28 typedef BrowserWithTestWindowTest BrowserCommandControllerTest;
29
30 TEST_F(BrowserCommandControllerTest, IsReservedCommandOrKey) {
31 #if defined(OS_CHROMEOS)
32   // F1-3 keys are reserved Chrome accelerators on Chrome OS.
33   EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
34       IDC_BACK, content::NativeWebKeyboardEvent(
35           ui::ET_KEY_PRESSED, false, ui::VKEY_BROWSER_BACK, 0, 0)));
36   EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
37       IDC_FORWARD, content::NativeWebKeyboardEvent(
38           ui::ET_KEY_PRESSED, false, ui::VKEY_BROWSER_FORWARD, 0, 0)));
39   EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
40       IDC_RELOAD, content::NativeWebKeyboardEvent(
41           ui::ET_KEY_PRESSED, false, ui::VKEY_BROWSER_REFRESH, 0, 0)));
42
43   // When there are modifier keys pressed, don't reserve.
44   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
45       IDC_RELOAD_IGNORING_CACHE, content::NativeWebKeyboardEvent(
46           ui::ET_KEY_PRESSED, false, ui::VKEY_F3, ui::EF_SHIFT_DOWN, 0)));
47   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
48       IDC_RELOAD_IGNORING_CACHE, content::NativeWebKeyboardEvent(
49           ui::ET_KEY_PRESSED, false, ui::VKEY_F3, ui::EF_CONTROL_DOWN, 0)));
50   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
51       IDC_FULLSCREEN, content::NativeWebKeyboardEvent(
52           ui::ET_KEY_PRESSED, false, ui::VKEY_F4, ui::EF_SHIFT_DOWN, 0)));
53
54   // F4-10 keys are not reserved since they are Ash accelerators.
55   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
56       -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
57                                           ui::VKEY_F4, 0, 0)));
58   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
59       -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
60                                           ui::VKEY_F5, 0, 0)));
61   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
62       -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
63                                           ui::VKEY_F6, 0, 0)));
64   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
65       -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
66                                           ui::VKEY_F7, 0, 0)));
67   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
68       -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
69                                           ui::VKEY_F8, 0, 0)));
70   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
71       -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
72                                           ui::VKEY_F9, 0, 0)));
73   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
74       -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
75                                           ui::VKEY_F10, 0, 0)));
76
77   // Shift+Control+Alt+F3 is also an Ash accelerator. Don't reserve it.
78   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
79       -1, content::NativeWebKeyboardEvent(
80           ui::ET_KEY_PRESSED, false,
81           ui::VKEY_F3,
82           ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 0)));
83 #endif  // OS_CHROMEOS
84
85 #if defined(USE_AURA)
86   // Ctrl+n, Ctrl+w are reserved while Ctrl+f is not.
87
88   // The content::NativeWebKeyboardEvent constructor is available only when
89   // USE_AURA is #defined.
90   EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
91       IDC_NEW_WINDOW, content::NativeWebKeyboardEvent(
92           ui::ET_KEY_PRESSED, false, ui::VKEY_N, ui::EF_CONTROL_DOWN, 0)));
93   EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
94       IDC_CLOSE_TAB, content::NativeWebKeyboardEvent(
95           ui::ET_KEY_PRESSED, false, ui::VKEY_W, ui::EF_CONTROL_DOWN, 0)));
96   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
97       IDC_FIND, content::NativeWebKeyboardEvent(
98           ui::ET_KEY_PRESSED, false, ui::VKEY_F, ui::EF_CONTROL_DOWN, 0)));
99 #endif  // USE_AURA
100 }
101
102 TEST_F(BrowserCommandControllerTest, IsReservedCommandOrKeyIsApp) {
103   browser()->app_name_ = "app";
104   ASSERT_TRUE(browser()->is_app());
105
106   // When is_app(), no keys are reserved.
107 #if defined(OS_CHROMEOS)
108   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
109       IDC_BACK, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
110                                                 ui::VKEY_F1, 0, 0)));
111   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
112       IDC_FORWARD, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
113                                                    ui::VKEY_F2, 0, 0)));
114   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
115       IDC_RELOAD, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
116                                                   ui::VKEY_F3, 0, 0)));
117   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
118       -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
119                                           ui::VKEY_F4, 0, 0)));
120 #endif  // OS_CHROMEOS
121
122 #if defined(USE_AURA)
123   // The content::NativeWebKeyboardEvent constructor is available only when
124   // USE_AURA is #defined.
125   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
126       IDC_NEW_WINDOW, content::NativeWebKeyboardEvent(
127           ui::ET_KEY_PRESSED, false, ui::VKEY_N, ui::EF_CONTROL_DOWN, 0)));
128   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
129       IDC_CLOSE_TAB, content::NativeWebKeyboardEvent(
130           ui::ET_KEY_PRESSED, false, ui::VKEY_W, ui::EF_CONTROL_DOWN, 0)));
131   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
132       IDC_FIND, content::NativeWebKeyboardEvent(
133           ui::ET_KEY_PRESSED, false, ui::VKEY_F, ui::EF_CONTROL_DOWN, 0)));
134 #endif  // USE_AURA
135 }
136
137 TEST_F(BrowserCommandControllerTest, IncognitoCommands) {
138   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
139   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
140   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_SHOW_SIGNIN));
141
142   TestingProfile* testprofile = browser()->profile()->AsTestingProfile();
143   EXPECT_TRUE(testprofile);
144   testprofile->SetGuestSession(true);
145   chrome::BrowserCommandController
146     ::UpdateSharedCommandsForIncognitoAvailability(
147       browser()->command_controller()->command_updater(), testprofile);
148   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
149   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
150   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_SIGNIN));
151
152   testprofile->SetGuestSession(false);
153   IncognitoModePrefs::SetAvailability(browser()->profile()->GetPrefs(),
154                                       IncognitoModePrefs::FORCED);
155   chrome::BrowserCommandController
156     ::UpdateSharedCommandsForIncognitoAvailability(
157       browser()->command_controller()->command_updater(), testprofile);
158   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
159   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
160   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_SIGNIN));
161 }
162
163 TEST_F(BrowserCommandControllerTest, AppFullScreen) {
164   // Enable for tabbed browser.
165   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
166
167   // Enabled for app windows.
168   browser()->app_name_ = "app";
169   ASSERT_TRUE(browser()->is_app());
170   browser()->command_controller()->FullscreenStateChanged();
171   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
172 }
173
174 TEST_F(BrowserCommandControllerTest, OldAvatarMenuEnabledForOneOrMoreProfiles) {
175   if (!profiles::IsMultipleProfilesEnabled())
176     return;
177
178   // The command line is reset at the end of every test by the test suite.
179   switches::DisableNewAvatarMenuForTesting(CommandLine::ForCurrentProcess());
180   ASSERT_FALSE(switches::IsNewAvatarMenu());
181
182   TestingProfileManager testing_profile_manager(
183       TestingBrowserProcess::GetGlobal());
184   ASSERT_TRUE(testing_profile_manager.SetUp());
185   ProfileManager* profile_manager = testing_profile_manager.profile_manager();
186
187   chrome::BrowserCommandController command_controller(browser());
188   const CommandUpdater* command_updater = command_controller.command_updater();
189
190   bool enabled = true;
191 #if defined(OS_CHROMEOS)
192   // Chrome OS uses system tray menu to handle multi-profiles.
193   enabled = false;
194 #endif
195
196   testing_profile_manager.CreateTestingProfile("p1");
197   ASSERT_EQ(1U, profile_manager->GetNumberOfProfiles());
198   EXPECT_EQ(enabled, command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
199
200   testing_profile_manager.CreateTestingProfile("p2");
201   ASSERT_EQ(2U, profile_manager->GetNumberOfProfiles());
202   EXPECT_EQ(enabled, command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
203
204   testing_profile_manager.DeleteTestingProfile("p1");
205   ASSERT_EQ(1U, profile_manager->GetNumberOfProfiles());
206   EXPECT_EQ(enabled, command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
207
208   testing_profile_manager.DeleteTestingProfile("p2");
209 }
210
211 TEST_F(BrowserCommandControllerTest, NewAvatarMenuEnabledWhenOnlyOneProfile) {
212   if (!profiles::IsMultipleProfilesEnabled())
213     return;
214
215   // The command line is reset at the end of every test by the test suite.
216   switches::EnableNewAvatarMenuForTesting(CommandLine::ForCurrentProcess());
217
218   TestingProfileManager testing_profile_manager(
219       TestingBrowserProcess::GetGlobal());
220   ASSERT_TRUE(testing_profile_manager.SetUp());
221   ProfileManager* profile_manager = testing_profile_manager.profile_manager();
222
223   chrome::BrowserCommandController command_controller(browser());
224   const CommandUpdater* command_updater = command_controller.command_updater();
225
226   testing_profile_manager.CreateTestingProfile("p1");
227   ASSERT_EQ(1U, profile_manager->GetNumberOfProfiles());
228 #if defined(OS_CHROMEOS)
229   // Chrome OS uses system tray menu to handle multi-profiles.
230   EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
231 #else
232   EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
233 #endif
234   testing_profile_manager.DeleteTestingProfile("p1");
235 }
236
237 TEST_F(BrowserCommandControllerTest, NewAvatarMenuEnabledInGuestMode) {
238   if (!profiles::IsMultipleProfilesEnabled())
239     return;
240
241   // The command line is reset at the end of every test by the test suite.
242   switches::EnableNewAvatarMenuForTesting(CommandLine::ForCurrentProcess());
243
244   TestingProfileManager testing_profile_manager(
245       TestingBrowserProcess::GetGlobal());
246   ASSERT_TRUE(testing_profile_manager.SetUp());
247
248   // Set up guest a profile.
249   TestingProfile::Builder guest_builder;
250   guest_builder.SetIncognito();  // Guest profiles are off the record.
251   guest_builder.SetGuestSession();
252   guest_builder.SetPath(ProfileManager::GetGuestProfilePath());
253   scoped_ptr<TestingProfile>guest_profile = guest_builder.Build();
254
255   ASSERT_TRUE(guest_profile->IsGuestSession());
256
257   // Create a new browser based on the guest profile.
258   Browser::CreateParams profile_params(guest_profile.get(),
259                                        chrome::GetActiveDesktop());
260   scoped_ptr<Browser> guest_browser(
261       chrome::CreateBrowserWithTestWindowForParams(&profile_params));
262   chrome::BrowserCommandController command_controller(guest_browser.get());
263   const CommandUpdater* command_updater = command_controller.command_updater();
264 #if defined(OS_CHROMEOS)
265   // Chrome OS uses system tray menu to handle multi-profiles.
266   EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
267 #else
268   EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
269 #endif
270 }
271
272 TEST_F(BrowserCommandControllerTest, AvatarMenuAlwaysDisabledInIncognitoMode) {
273   if (!profiles::IsMultipleProfilesEnabled())
274     return;
275
276   // Set up a profile with an off the record profile.
277   TestingProfile::Builder normal_builder;
278   scoped_ptr<TestingProfile> original_profile = normal_builder.Build();
279
280   // Create a new browser based on the off the record profile.
281   Browser::CreateParams profile_params(
282       original_profile->GetOffTheRecordProfile(), chrome::GetActiveDesktop());
283   scoped_ptr<Browser> otr_browser(
284       chrome::CreateBrowserWithTestWindowForParams(&profile_params));
285
286   chrome::BrowserCommandController command_controller(otr_browser.get());
287   const CommandUpdater* command_updater = command_controller.command_updater();
288
289   // Both the old style and the new style avatar menu should be disabled.
290   EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
291   if (switches::IsNewAvatarMenu()) {
292     switches::DisableNewAvatarMenuForTesting(CommandLine::ForCurrentProcess());
293   } else {
294     switches::EnableNewAvatarMenuForTesting(CommandLine::ForCurrentProcess());
295   }
296   EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
297   // The command line is reset at the end of every test by the test suite.
298 }
299
300 //////////////////////////////////////////////////////////////////////////////
301
302 // A test browser window that can toggle fullscreen state.
303 class FullscreenTestBrowserWindow : public TestBrowserWindow {
304  public:
305   FullscreenTestBrowserWindow() : fullscreen_(false) {}
306   virtual ~FullscreenTestBrowserWindow() {}
307
308   // TestBrowserWindow overrides:
309   virtual bool ShouldHideUIForFullscreen() const OVERRIDE {
310     return fullscreen_;
311   }
312   virtual bool IsFullscreen() const OVERRIDE {
313     return fullscreen_;
314   }
315   virtual void EnterFullscreen(
316       const GURL& url, FullscreenExitBubbleType type) OVERRIDE {
317     fullscreen_ = true;
318   }
319   virtual void ExitFullscreen() OVERRIDE {
320     fullscreen_ = false;
321   }
322
323  private:
324   bool fullscreen_;
325
326   DISALLOW_COPY_AND_ASSIGN(FullscreenTestBrowserWindow);
327 };
328
329 // Test that uses FullscreenTestBrowserWindow for its window.
330 class BrowserCommandControllerFullscreenTest
331     : public BrowserWithTestWindowTest {
332  public:
333   BrowserCommandControllerFullscreenTest() {}
334   virtual ~BrowserCommandControllerFullscreenTest() {}
335
336   // BrowserWithTestWindowTest overrides:
337   virtual BrowserWindow* CreateBrowserWindow() OVERRIDE {
338     return new FullscreenTestBrowserWindow;
339   }
340
341  private:
342   DISALLOW_COPY_AND_ASSIGN(BrowserCommandControllerFullscreenTest);
343 };
344
345 TEST_F(BrowserCommandControllerFullscreenTest,
346        UpdateCommandsForFullscreenMode) {
347   // Defaults for a tabbed browser.
348   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
349   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
350   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
351   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
352   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
353   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
354   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
355   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
356   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
357   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
358 #if defined(GOOGLE_CHROME_BUILD)
359   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
360 #endif
361   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
362   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
363   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
364   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
365   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
366   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
367   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
368
369   // Simulate going fullscreen.
370   chrome::ToggleFullscreenMode(browser());
371   ASSERT_TRUE(browser()->window()->IsFullscreen());
372   browser()->command_controller()->FullscreenStateChanged();
373
374   // Most commands are disabled in fullscreen.
375   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
376   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
377   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
378   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
379   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
380   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
381   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
382   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
383   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
384   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
385 #if defined(GOOGLE_CHROME_BUILD)
386   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
387 #endif
388   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
389   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
390   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
391   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
392   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
393   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
394   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
395
396   // Exit fullscreen.
397   chrome::ToggleFullscreenMode(browser());
398   ASSERT_FALSE(browser()->window()->IsFullscreen());
399   browser()->command_controller()->FullscreenStateChanged();
400   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
401   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
402   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
403   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
404   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
405   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
406   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
407   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
408   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
409   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
410 #if defined(GOOGLE_CHROME_BUILD)
411   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
412 #endif
413   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
414   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
415   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
416   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
417   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
418   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
419   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
420
421   // Guest Profiles disallow some options.
422   TestingProfile* testprofile = browser()->profile()->AsTestingProfile();
423   EXPECT_TRUE(testprofile);
424   testprofile->SetGuestSession(true);
425
426   browser()->command_controller()->FullscreenStateChanged();
427   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
428   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
429 }
430
431 TEST_F(BrowserCommandControllerTest, IncognitoModeOnSigninAllowedPrefChange) {
432   // Set up a profile with an off the record profile.
433   TestingProfile::Builder builder;
434   builder.SetIncognito();
435   scoped_ptr<TestingProfile> profile2(builder.Build());
436   TestingProfile::Builder builder2;
437   scoped_ptr<TestingProfile> profile1 = builder2.Build();
438   profile2->SetOriginalProfile(profile1.get());
439   EXPECT_EQ(profile2->GetOriginalProfile(), profile1.get());
440   profile1->SetOffTheRecordProfile(profile2.PassAs<Profile>());
441
442   // Create a new browser based on the off the record profile.
443   Browser::CreateParams profile_params(profile1->GetOffTheRecordProfile(),
444                                        chrome::GetActiveDesktop());
445   scoped_ptr<Browser> browser2(
446       chrome::CreateBrowserWithTestWindowForParams(&profile_params));
447
448   chrome::BrowserCommandController command_controller(browser2.get());
449   const CommandUpdater* command_updater = command_controller.command_updater();
450
451   // Check that the SYNC_SETUP command is updated on preference change.
452   EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
453   profile1->GetPrefs()->SetBoolean(prefs::kSigninAllowed, false);
454   EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
455 }
456
457 TEST_F(BrowserCommandControllerTest, OnSigninAllowedPrefChange) {
458   chrome::BrowserCommandController command_controller(browser());
459   const CommandUpdater* command_updater = command_controller.command_updater();
460
461   // Check that the SYNC_SETUP command is updated on preference change.
462   EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
463   profile()->GetPrefs()->SetBoolean(prefs::kSigninAllowed, false);
464   EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
465 }