Index: chrome/browser/ui/browser_command_controller_browsertest.cc |
diff --git a/chrome/browser/ui/browser_command_controller_browsertest.cc b/chrome/browser/ui/browser_command_controller_browsertest.cc |
index 1f71986976be3a6086a13d3573c2ebd3bcc4eb4a..dab870603b6d4d3f74b8bc8b950e42adcf2cdbd6 100644 |
--- a/chrome/browser/ui/browser_command_controller_browsertest.cc |
+++ b/chrome/browser/ui/browser_command_controller_browsertest.cc |
@@ -4,15 +4,49 @@ |
#include "chrome/browser/ui/browser_command_controller.h" |
+#include "base/command_line.h" |
#include "chrome/app/chrome_command_ids.h" |
+#include "chrome/browser/browser_process.h" |
+#include "chrome/browser/chrome_notification_types.h" |
+#include "chrome/browser/profiles/profile_manager.h" |
+#include "chrome/browser/profiles/profile_window.h" |
+#include "chrome/browser/search_engines/template_url_service_factory.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/browser_commands.h" |
+#include "chrome/browser/ui/browser_finder.h" |
+#include "chrome/browser/ui/browser_list.h" |
+#include "chrome/browser/ui/browser_window.h" |
+#include "chrome/browser/ui/startup/startup_browser_creator.h" |
#include "chrome/browser/ui/tab_modal_confirm_dialog_browsertest.h" |
#include "chrome/browser/ui/tabs/tab_strip_model.h" |
#include "chrome/test/base/in_process_browser_test.h" |
+#include "components/search_engines/template_url_service.h" |
+#include "components/signin/core/common/profile_management_switches.h" |
+#include "components/signin/core/common/profile_management_switches.h" |
+#include "content/public/browser/notification_service.h" |
#include "content/public/test/test_utils.h" |
-typedef InProcessBrowserTest BrowserCommandControllerBrowserTest; |
+#if defined(OS_CHROMEOS) |
+#include "chromeos/chromeos_switches.h" |
+#endif |
+ |
+class BrowserCommandControllerBrowserTest: public InProcessBrowserTest { |
+ public: |
+ BrowserCommandControllerBrowserTest() {} |
+ ~BrowserCommandControllerBrowserTest() override {} |
+ |
+ void SetUpCommandLine(base::CommandLine* command_line) override { |
+ InProcessBrowserTest::SetUpCommandLine(command_line); |
+ |
+#if defined(OS_CHROMEOS) |
+ command_line->AppendSwitch( |
+ chromeos::switches::kIgnoreUserProfileMappingForTests); |
+#endif |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(BrowserCommandControllerBrowserTest); |
+}; |
// Verify that showing a constrained window disables find. |
IN_PROC_BROWSER_TEST_F(BrowserCommandControllerBrowserTest, DisableFind) { |
@@ -39,3 +73,48 @@ IN_PROC_BROWSER_TEST_F(BrowserCommandControllerBrowserTest, DisableFind) { |
content::RunAllPendingInMessageLoop(); |
EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FIND)); |
} |
+ |
+// Note that a Browser's destructor, when the browser's profile is guest, will |
+// create and execute a BrowsingDataRemover. |
+IN_PROC_BROWSER_TEST_F(BrowserCommandControllerBrowserTest, |
+ NewAvatarMenuEnabledInGuestMode) { |
+ switches::EnableNewAvatarMenuForTesting( |
+ base::CommandLine::ForCurrentProcess()); |
+ |
+ EXPECT_EQ(1U, BrowserList::GetInstance(chrome::GetActiveDesktop())->size()); |
+ |
+ // Create a guest browser nicely. Using CreateProfile() and CreateBrowser() |
+ // does incomplete initialization that would lead to |
+ // SystemUrlRequestContextGetter being leaked. |
+ content::WindowedNotificationObserver browser_creation_observer( |
+ chrome::NOTIFICATION_BROWSER_WINDOW_READY, |
+ content::NotificationService::AllSources()); |
+ profiles::SwitchToGuestProfile(chrome::GetActiveDesktop(), |
+ ProfileManager::CreateCallback()); |
+ |
+ // RunUntilIdle() (racily) isn't sufficient to ensure browser creation, so |
+ // listen for the notification. |
+ base::MessageLoop::current()->RunUntilIdle(); |
+ browser_creation_observer.Wait(); |
+ EXPECT_EQ(2U, BrowserList::GetInstance(chrome::GetActiveDesktop())->size()); |
+ |
+ // Access the browser that was created for the new Guest Profile. |
+ Profile* guest = g_browser_process->profile_manager()->GetProfileByPath( |
+ ProfileManager::GetGuestProfilePath()); |
+ Browser* browser = chrome::FindAnyBrowser( |
+ guest, true, chrome::GetActiveDesktop()); |
+ EXPECT_TRUE(browser); |
+ |
+ // The BrowsingDataRemover needs a loaded TemplateUrlService or else it hangs |
+ // on to a CallbackList::Subscription forever. |
+ TemplateURLServiceFactory::GetForProfile(guest)->set_loaded(true); |
+ |
+ const CommandUpdater* command_updater = |
+ browser->command_controller()->command_updater(); |
+ #if defined(OS_CHROMEOS) |
+ // Chrome OS uses system tray menu to handle multi-profiles. |
+ EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU)); |
+ #else |
+ EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU)); |
+ #endif |
+} |