Index: chrome/browser/ui/webui/options/options_ui_browsertest.cc |
diff --git a/chrome/browser/ui/webui/options/options_ui_browsertest.cc b/chrome/browser/ui/webui/options/options_ui_browsertest.cc |
deleted file mode 100644 |
index b37522637fcc93f97063494775c432f0cf834e05..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/webui/options/options_ui_browsertest.cc |
+++ /dev/null |
@@ -1,344 +0,0 @@ |
-// 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. |
- |
-#include "chrome/browser/ui/webui/options/options_ui_browsertest.h" |
- |
-#include "base/scoped_observer.h" |
-#include "base/strings/string16.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "build/build_config.h" |
-#include "chrome/browser/chrome_notification_types.h" |
-#include "chrome/browser/signin/account_tracker_service_factory.h" |
-#include "chrome/browser/signin/signin_manager_factory.h" |
-#include "chrome/browser/ui/browser.h" |
-#include "chrome/browser/ui/chrome_pages.h" |
-#include "chrome/browser/ui/tabs/tab_strip_model.h" |
-#include "chrome/browser/ui/webui/options/options_ui.h" |
-#include "chrome/browser/ui/webui/uber/uber_ui.h" |
-#include "chrome/common/chrome_features.h" |
-#include "chrome/common/url_constants.h" |
-#include "chrome/grit/generated_resources.h" |
-#include "chrome/test/base/ui_test_utils.h" |
-#include "components/prefs/pref_service.h" |
-#include "components/signin/core/browser/account_tracker_service.h" |
-#include "components/signin/core/browser/signin_manager.h" |
-#include "components/strings/grit/components_strings.h" |
-#include "content/public/browser/notification_service.h" |
-#include "content/public/browser/render_frame_host.h" |
-#include "content/public/browser/web_contents.h" |
-#include "content/public/test/browser_test_utils.h" |
-#include "content/public/test/test_utils.h" |
-#include "ui/base/l10n/l10n_util.h" |
- |
-#if !defined(OS_CHROMEOS) |
-#include <string> |
- |
-#include "base/bind.h" |
-#include "base/callback.h" |
-#include "base/files/file_path.h" |
-#include "base/run_loop.h" |
-#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/browser/profiles/profile_attributes_storage.h" |
-#include "chrome/browser/profiles/profile_manager.h" |
-#include "chrome/browser/ui/browser_commands.h" |
-#include "content/public/test/test_navigation_observer.h" |
-#include "ui/base/window_open_disposition.h" |
-#include "url/gurl.h" |
-#endif |
- |
-using content::MessageLoopRunner; |
- |
-namespace options { |
- |
-namespace { |
- |
-class SignOutWaiter : public SigninManagerBase::Observer { |
- public: |
- explicit SignOutWaiter(SigninManagerBase* signin_manager) |
- : seen_(false), running_(false), scoped_observer_(this) { |
- scoped_observer_.Add(signin_manager); |
- } |
- ~SignOutWaiter() override {} |
- |
- void Wait() { |
- if (seen_) |
- return; |
- |
- running_ = true; |
- message_loop_runner_ = new MessageLoopRunner; |
- message_loop_runner_->Run(); |
- EXPECT_TRUE(seen_); |
- } |
- |
- void GoogleSignedOut(const std::string& account_id, |
- const std::string& username) override { |
- seen_ = true; |
- if (!running_) |
- return; |
- |
- message_loop_runner_->Quit(); |
- running_ = false; |
- } |
- |
- private: |
- bool seen_; |
- bool running_; |
- ScopedObserver<SigninManagerBase, SignOutWaiter> scoped_observer_; |
- scoped_refptr<MessageLoopRunner> message_loop_runner_; |
-}; |
- |
-#if !defined(OS_CHROMEOS) |
-void RunClosureWhenProfileInitialized(const base::Closure& closure, |
- Profile* profile, |
- Profile::CreateStatus status) { |
- if (status == Profile::CREATE_STATUS_INITIALIZED) |
- closure.Run(); |
-} |
-#endif |
- |
-bool FrameHasSettingsSourceHost(content::RenderFrameHost* frame) { |
- return frame->GetLastCommittedURL().DomainIs( |
- chrome::kChromeUISettingsFrameHost); |
-} |
- |
-} // namespace |
- |
-OptionsUIBrowserTest::OptionsUIBrowserTest() { |
-} |
- |
-void OptionsUIBrowserTest::SetUpInProcessBrowserTestFixture() { |
- InProcessBrowserTest::SetUpInProcessBrowserTestFixture(); |
- disable_md_settings_.InitAndDisableFeature(features::kMaterialDesignSettings); |
-} |
- |
-void OptionsUIBrowserTest::NavigateToSettings() { |
- NavigateToSettingsSubpage(""); |
-} |
- |
-void OptionsUIBrowserTest::NavigateToSettingsSubpage( |
- const std::string& sub_page) { |
- const GURL& url = chrome::GetSettingsUrl(sub_page); |
- ui_test_utils::NavigateToURLWithDisposition( |
- browser(), url, WindowOpenDisposition::CURRENT_TAB, 0); |
- |
- content::WebContents* web_contents = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- ASSERT_TRUE(web_contents); |
- ASSERT_TRUE(web_contents->GetWebUI()); |
- |
- content::WebUIController* controller = |
- web_contents->GetWebUI()->GetController(); |
-#if !defined(OS_CHROMEOS) |
- controller = static_cast<UberUI*>(controller)-> |
- GetSubpage(chrome::kChromeUISettingsFrameURL)->GetController(); |
-#endif |
- OptionsUI* options_ui = static_cast<OptionsUI*>(controller); |
- |
- // It is not possible to subscribe to the OnFinishedLoading event before the |
- // call to NavigateToURL(), because the WebUI does not yet exist at that time. |
- // However, it is safe to subscribe afterwards, because the event will always |
- // be posted asynchronously to the message loop. |
- scoped_refptr<MessageLoopRunner> message_loop_runner(new MessageLoopRunner); |
- std::unique_ptr<OptionsUI::OnFinishedLoadingCallbackList::Subscription> |
- subscription = options_ui->RegisterOnFinishedLoadingCallback( |
- message_loop_runner->QuitClosure()); |
- message_loop_runner->Run(); |
- |
- // The OnFinishedLoading event, which indicates that all WebUI initialization |
- // methods have been called on the JS side, is temporally unrelated to whether |
- // or not the WebContents considers itself to have finished loading. We want |
- // to wait for this too, however, because, e.g. this is a sufficient condition |
- // to get the focus properly placed on a form element. |
- content::WaitForLoadStop(web_contents); |
-} |
- |
-void OptionsUIBrowserTest::NavigateToSettingsFrame() { |
- const GURL& url = GURL(chrome::kChromeUISettingsFrameURL); |
- ui_test_utils::NavigateToURL(browser(), url); |
-} |
- |
-void OptionsUIBrowserTest::VerifyNavbar() { |
- bool navbar_exist = false; |
-#if defined(OS_CHROMEOS) |
- bool should_navbar_exist = false; |
-#else |
- bool should_navbar_exist = true; |
-#endif |
- EXPECT_TRUE(content::ExecuteScriptAndExtractBool( |
- browser()->tab_strip_model()->GetActiveWebContents(), |
- "domAutomationController.send(" |
- " !!document.getElementById('navigation'))", |
- &navbar_exist)); |
- EXPECT_EQ(should_navbar_exist, navbar_exist); |
-} |
- |
-void OptionsUIBrowserTest::VerifyTitle() { |
- base::string16 title = |
- browser()->tab_strip_model()->GetActiveWebContents()->GetTitle(); |
- base::string16 expected_title = l10n_util::GetStringUTF16(IDS_SETTINGS_TITLE); |
- EXPECT_NE(title.find(expected_title), base::string16::npos); |
-} |
- |
-content::RenderFrameHost* OptionsUIBrowserTest::GetSettingsFrame() { |
- // NB: The utility function content::FrameHasSourceUrl can't be used because |
- // the settings frame navigates itself to chrome://settings-frame/settings |
- // to indicate that it's showing the top-level settings. Therefore, just |
- // match the host. |
- return content::FrameMatchingPredicate( |
- browser()->tab_strip_model()->GetActiveWebContents(), |
- base::Bind(&FrameHasSettingsSourceHost)); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(OptionsUIBrowserTest, LoadOptionsByURL) { |
- NavigateToSettings(); |
- VerifyTitle(); |
- VerifyNavbar(); |
-} |
- |
-// Flaky on Linux, Mac and Win: http://crbug.com/469113 |
-#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) |
-#define MAYBE_VerifyManagedSignout DISABLED_VerifyManagedSignout |
-#else |
-#define MAYBE_VerifyManagedSignout VerifyManagedSignout |
-#endif |
- |
-#if !defined(OS_CHROMEOS) |
-IN_PROC_BROWSER_TEST_F(OptionsUIBrowserTest, MAYBE_VerifyManagedSignout) { |
- SigninManager* signin = |
- SigninManagerFactory::GetForProfile(browser()->profile()); |
- signin->OnExternalSigninCompleted("test@example.com"); |
- signin->ProhibitSignout(true); |
- |
- NavigateToSettingsFrame(); |
- |
- // This script simulates a click on the "Disconnect your Google Account" |
- // button and returns true if the hidden flag of the appropriate dialog gets |
- // flipped. |
- bool result = false; |
- ASSERT_TRUE(content::ExecuteScriptAndExtractBool( |
- browser()->tab_strip_model()->GetActiveWebContents(), |
- "var dialog = $('manage-profile-overlay-disconnect-managed');" |
- "var original_status = dialog.hidden;" |
- "var original = ManageProfileOverlay.showDisconnectManagedProfileDialog;" |
- "var teststub = function(event) {" |
- " original(event);" |
- " domAutomationController.send(original_status && !dialog.hidden);" |
- "};" |
- "ManageProfileOverlay.showDisconnectManagedProfileDialog = teststub;" |
- "$('start-stop-sync').click();", |
- &result)); |
- |
- EXPECT_TRUE(result); |
- |
- base::FilePath profile_dir = browser()->profile()->GetPath(); |
- ProfileAttributesStorage& storage = |
- g_browser_process->profile_manager()->GetProfileAttributesStorage(); |
- ProfileAttributesEntry* entry; |
- |
- EXPECT_TRUE(DirectoryExists(profile_dir)); |
- EXPECT_TRUE(storage.GetProfileAttributesWithPath(profile_dir, &entry)); |
- |
- // TODO(kaliamoorthi): Get the macos problem fixed and remove this code. |
- // Deleting the Profile also destroys all browser windows of that Profile. |
- // Wait for the current browser to close before resuming, otherwise |
- // the browser_tests shutdown code will be confused on the Mac. |
- content::WindowedNotificationObserver wait_for_browser_closed( |
- chrome::NOTIFICATION_BROWSER_CLOSED, |
- content::NotificationService::AllSources()); |
- |
- ASSERT_TRUE(content::ExecuteScript( |
- browser()->tab_strip_model()->GetActiveWebContents(), |
- "$('disconnect-managed-profile-ok').click();")); |
- |
- EXPECT_TRUE(storage.GetProfileAttributesWithPath(profile_dir, &entry)); |
- |
- wait_for_browser_closed.Wait(); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(OptionsUIBrowserTest, VerifyUnmanagedSignout) { |
- const std::string user = "test@example.com"; |
- AccountTrackerServiceFactory::GetForProfile(browser()->profile()) |
- ->SeedAccountInfo("12345", user); |
- SigninManager* signin = |
- SigninManagerFactory::GetForProfile(browser()->profile()); |
- signin->OnExternalSigninCompleted(user); |
- |
- NavigateToSettingsFrame(); |
- |
- // This script simulates a click on the "Disconnect your Google Account" |
- // button and returns true if the hidden flag of the appropriate dialog gets |
- // flipped. |
- bool result = false; |
- ASSERT_TRUE(content::ExecuteScriptAndExtractBool( |
- browser()->tab_strip_model()->GetActiveWebContents(), |
- "var dialog = $('sync-setup-stop-syncing');" |
- "var original_status = dialog.hidden;" |
- "$('start-stop-sync').click();" |
- "domAutomationController.send(original_status && !dialog.hidden);", |
- &result)); |
- |
- EXPECT_TRUE(result); |
- |
- SignOutWaiter sign_out_waiter(signin); |
- |
- ASSERT_TRUE(content::ExecuteScript( |
- browser()->tab_strip_model()->GetActiveWebContents(), |
- "$('stop-syncing-ok').click();")); |
- |
- sign_out_waiter.Wait(); |
- |
- EXPECT_TRUE(browser()->profile()->GetProfileUserName() != user); |
- EXPECT_FALSE(signin->IsAuthenticated()); |
-} |
- |
-// Regression test for http://crbug.com/301436, excluded on Chrome OS because |
-// profile management in the settings UI exists on desktop platforms only. |
-IN_PROC_BROWSER_TEST_F(OptionsUIBrowserTest, NavigateBackFromOverlayDialog) { |
- NavigateToSettingsFrame(); |
- |
- // Click a button that opens an overlay dialog. |
- content::WebContents* contents = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- ASSERT_TRUE(content::ExecuteScript( |
- contents, "$('manage-default-search-engines').click();")); |
- |
- // Go back to the settings page. |
- content::TestNavigationObserver observer(contents); |
- chrome::GoBack(browser(), WindowOpenDisposition::CURRENT_TAB); |
- observer.Wait(); |
- |
- // Verify that the settings page lists one profile. |
- const char javascript[] = |
- "domAutomationController.send(" |
- " document.querySelectorAll('list#profiles-list > div[role=listitem]')" |
- " .length);"; |
- int profiles; |
- ASSERT_TRUE(content::ExecuteScriptAndExtractInt( |
- contents, javascript, &profiles)); |
- EXPECT_EQ(1, profiles); |
- |
- // Create a second profile. |
- ProfileManager* profile_manager = g_browser_process->profile_manager(); |
- const base::FilePath profile_path = |
- profile_manager->GenerateNextProfileDirectoryPath(); |
- |
- base::RunLoop run_loop; |
- profile_manager->CreateProfileAsync( |
- profile_manager->GenerateNextProfileDirectoryPath(), |
- base::Bind(&RunClosureWhenProfileInitialized, |
- run_loop.QuitClosure()), |
- base::string16(), |
- std::string(), |
- std::string()); |
- run_loop.Run(); |
- |
- // Verify that the settings page has updated and lists two profiles. |
- ASSERT_TRUE(content::ExecuteScriptAndExtractInt( |
- contents, javascript, &profiles)); |
- EXPECT_EQ(2, profiles); |
-} |
-#endif |
- |
-} // namespace options |