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