Index: chrome/browser/password_manager/password_manager_browsertest.cc |
diff --git a/chrome/browser/password_manager/password_manager_browsertest.cc b/chrome/browser/password_manager/password_manager_browsertest.cc |
index 6a383b67368fd96ea0a735490518d1f7812af13f..a907aa8739228921b5fcb9341ac1e667d10f7931 100644 |
--- a/chrome/browser/password_manager/password_manager_browsertest.cc |
+++ b/chrome/browser/password_manager/password_manager_browsertest.cc |
@@ -163,6 +163,47 @@ void TestPromptNotShown(const char* failure_message, |
EXPECT_FALSE(prompt_observer->IsShowingSavePrompt()); |
} |
+// Opens the internals page, then some page with a HTML form. Then it activates |
+// back the internals page and waits until it contains the string segment |str|. |
+// The check is done by a repeatedly called JavaScript function, which navigates |
+// away from the internals page as soon as it finds |str|. Thus, the waiting for |
+// |str| is reduced to waiting for a navigation. |browser| needs to represent |
+// the current test Chrome window. |
+void WaitForStringInInternals(const std::string& str, |
+ const GURL& form_page, |
+ Browser* browser) { |
+ ui_test_utils::NavigateToURLWithDisposition( |
+ browser, GURL("chrome://password-manager-internals"), CURRENT_TAB, |
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
+ int internals_index = browser->tab_strip_model()->active_index(); |
+ |
+ ui_test_utils::NavigateToURLWithDisposition( |
+ browser, form_page, NEW_FOREGROUND_TAB, |
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
+ |
+ browser->tab_strip_model()->ActivateTabAt(internals_index, true); |
+ |
+ std::string find_renderer_logs = |
+ "function logChecker() {" |
+ " var text = document.getElementById('log-entries').innerText;" |
+ " var logs_found = /" + |
+ str + |
+ "/.test(text);" |
+ " if (logs_found) {" |
+ " location = 'done.html';" |
+ " } else {" |
+ " window.setTimeout(logChecker, 500);" |
+ " }" |
+ "}" |
+ "window.setTimeout(logChecker, 0);"; |
+ NavigationObserver observer( |
+ browser->tab_strip_model()->GetActiveWebContents()); |
+ ASSERT_TRUE(content::ExecuteScript( |
+ browser->tab_strip_model()->GetActiveWebContents()->GetRenderViewHost(), |
+ find_renderer_logs)); |
+ observer.Wait(); |
+} |
+ |
} // namespace |
namespace password_manager { |
@@ -2742,43 +2783,20 @@ IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTestBase, |
EXPECT_EQ("mypassword", actual_password); |
} |
-// Check that the internals page contains logs both from the renderer and the |
-// browser. |
-// TODO(crbug.com/640737) Flaky on Mac. |
-#if defined(OS_MACOSX) |
-#define MAYBE_InternalsPage DISABLED_InternalsPage |
-#else |
-#define MAYBE_InternalsPage InternalsPage |
-#endif |
-IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTestBase, MAYBE_InternalsPage) { |
- ui_test_utils::NavigateToURLWithDisposition( |
- browser(), GURL("chrome://password-manager-internals"), CURRENT_TAB, |
- ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
- content::WebContents* internals_web_contents = WebContents(); |
- |
- ui_test_utils::NavigateToURLWithDisposition( |
- browser(), embedded_test_server()->GetURL("/password/password_form.html"), |
- NEW_FOREGROUND_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
+// Check that the internals page contains logs from the renderer. |
+IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTestBase, InternalsPage_Renderer) { |
+ WaitForStringInInternals( |
+ "PasswordAutofillAgent::", |
+ embedded_test_server()->GetURL("/password/password_form.html"), |
+ browser()); |
+} |
- std::string find_renderer_logs = |
- "var text = document.getElementById('log-entries').innerText;" |
- "var logs_found = /PasswordAutofillAgent::/.test(text);" |
- "window.domAutomationController.send(logs_found);"; |
- bool renderer_logs_found; |
- ASSERT_TRUE(content::ExecuteScriptAndExtractBool( |
- internals_web_contents->GetRenderViewHost(), find_renderer_logs, |
- &renderer_logs_found)); |
- EXPECT_TRUE(renderer_logs_found); |
- |
- std::string find_browser_logs = |
- "var text = document.getElementById('log-entries').innerText;" |
- "var logs_found = /PasswordManager::/.test(text);" |
- "window.domAutomationController.send(logs_found);"; |
- bool browser_logs_found; |
- ASSERT_TRUE(content::ExecuteScriptAndExtractBool( |
- internals_web_contents->GetRenderViewHost(), find_browser_logs, |
- &browser_logs_found)); |
- EXPECT_TRUE(browser_logs_found); |
+// Check that the internals page contains logs both from the browser. |
vasilii
2016/08/29 13:56:07
logs from the browser.
vabr (Chromium)
2016/08/29 15:40:36
Done.
|
+IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTestBase, InternalsPage_Browser) { |
+ WaitForStringInInternals( |
+ "PasswordManager::", |
+ embedded_test_server()->GetURL("/password/password_form.html"), |
+ browser()); |
} |
// Tests that submitted credentials are saved on a password form without |