Chromium Code Reviews| Index: content/browser/web_contents/web_contents_impl_browsertest.cc |
| diff --git a/content/browser/web_contents/web_contents_impl_browsertest.cc b/content/browser/web_contents/web_contents_impl_browsertest.cc |
| index c010c171de36c26d81c0f182ba118a29341bcb4d..7fb10684a46add625b5bc1a10973229f86461ea7 100644 |
| --- a/content/browser/web_contents/web_contents_impl_browsertest.cc |
| +++ b/content/browser/web_contents/web_contents_impl_browsertest.cc |
| @@ -4,6 +4,7 @@ |
| #include "base/macros.h" |
| #include "base/run_loop.h" |
| +#include "base/strings/pattern.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "base/values.h" |
| #include "build/build_config.h" |
| @@ -845,6 +846,90 @@ IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, ViewSourceWebUI) { |
| ->IsViewSourceMode()); |
| } |
| +namespace { |
| +const char kDataUrlWarningPattern[] = |
| + "Upcoming versions will block content-initiated top frame navigations*"; |
| + |
| +// This class listens for console messages other than the data: URL warning. It |
| +// fails the test if it sees a data: URL warning. |
| +class NoDataURLWarningConsoleObserverDelegate : public ConsoleObserverDelegate { |
| + public: |
| + using ConsoleObserverDelegate::ConsoleObserverDelegate; |
| + // WebContentsDelegate method: |
| + bool DidAddMessageToConsole(WebContents* source, |
| + int32_t level, |
| + const base::string16& message, |
| + int32_t line_no, |
| + const base::string16& source_id) override { |
| + std::string ascii_message = base::UTF16ToASCII(message); |
| + EXPECT_FALSE(base::MatchPattern(ascii_message, kDataUrlWarningPattern)); |
| + return ConsoleObserverDelegate::DidAddMessageToConsole( |
| + source, level, message, line_no, source_id); |
| + } |
| +}; |
| + |
| +} // namespace |
| + |
| +// Test that a direct navigation to a data URL doesn't show a console warning. |
| +IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, DataURLDirectNavigation) { |
| + ASSERT_TRUE(embedded_test_server()->Start()); |
| + const GURL kUrl(embedded_test_server()->GetURL("/simple_page.html")); |
| + |
| + NoDataURLWarningConsoleObserverDelegate console_delegate( |
| + shell()->web_contents(), "FINISH"); |
| + shell()->web_contents()->SetDelegate(&console_delegate); |
| + |
| + NavigateToURL( |
| + shell(), |
| + GURL("data:text/html,<html><script>console.log('FINISH');</script>")); |
| + console_delegate.Wait(); |
| + EXPECT_TRUE(shell()->web_contents()->GetURL().SchemeIs(url::kDataScheme)); |
| + EXPECT_FALSE( |
| + base::MatchPattern(console_delegate.message(), kDataUrlWarningPattern)); |
| +} |
| + |
| +// Test that window.open to a data URL shows a console warning. |
|
Charlie Reis
2017/02/15 23:36:43
Just curious-- have you checked whether any of our
meacer
2017/02/16 01:58:43
Yes, there are tests that use data URLs. Some exam
Charlie Reis
2017/02/16 17:59:50
Ah, ok. So we'll have to update the ones that hav
|
| +IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, |
| + DataURLWindowOpen_ShouldWarn) { |
| + ASSERT_TRUE(embedded_test_server()->Start()); |
| + const GURL kUrl(embedded_test_server()->GetURL("/simple_page.html")); |
| + NavigateToURL(shell(), kUrl); |
| + |
| + ShellAddedObserver new_shell_observer; |
| + EXPECT_TRUE(ExecuteScript(shell()->web_contents(), |
| + "window.open('data:text/plain,test');")); |
| + Shell* new_shell = new_shell_observer.GetShell(); |
| + |
| + ConsoleObserverDelegate console_delegate( |
| + new_shell->web_contents(), |
| + "Upcoming versions will block content-initiated top frame navigations*"); |
| + new_shell->web_contents()->SetDelegate(&console_delegate); |
| + console_delegate.Wait(); |
| + EXPECT_TRUE(new_shell->web_contents()->GetURL().SchemeIs(url::kDataScheme)); |
| +} |
| + |
| +// Test that a content initiated navigation to a data URL shows a console |
| +// warning. |
| +IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, DataURLRedirect_ShouldWarn) { |
| + ASSERT_TRUE(embedded_test_server()->Start()); |
| + const GURL kUrl(embedded_test_server()->GetURL("/simple_page.html")); |
| + NavigateToURL(shell(), kUrl); |
| + |
| + ConsoleObserverDelegate console_delegate( |
| + shell()->web_contents(), |
| + "Upcoming versions will block content-initiated top frame navigations*"); |
| + shell()->web_contents()->SetDelegate(&console_delegate); |
| + EXPECT_TRUE(ExecuteScript(shell()->web_contents(), |
| + "window.location.href = 'data:text/plain,test';")); |
| + console_delegate.Wait(); |
| + EXPECT_TRUE(shell() |
| + ->web_contents() |
| + ->GetController() |
| + .GetLastCommittedEntry() |
| + ->GetURL() |
| + .SchemeIs(url::kDataScheme)); |
| +} |
| + |
| IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, NewNamedWindow) { |
| ASSERT_TRUE(embedded_test_server()->Start()); |