| 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.
|
| +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());
|
|
|
|
|