| 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 b6593d3f18c8a9b00b14021f32c408b5f3482760..39e816a9339a12421ecc9ea6899b3b0c451ec1cc 100644
|
| --- a/content/browser/web_contents/web_contents_impl_browsertest.cc
|
| +++ b/content/browser/web_contents/web_contents_impl_browsertest.cc
|
| @@ -770,6 +770,84 @@ IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, ChangePageScale) {
|
| observer.WaitForPageScaleUpdate();
|
| }
|
|
|
| +// Test that a direct navigation to a view-source URL works.
|
| +IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, ViewSourceDirectNavigation) {
|
| + ASSERT_TRUE(embedded_test_server()->Start());
|
| + const GURL kUrl(embedded_test_server()->GetURL("/simple_page.html"));
|
| + const GURL kViewSourceURL(kViewSourceScheme + std::string(":") + kUrl.spec());
|
| + NavigateToURL(shell(), kViewSourceURL);
|
| + // Displayed view-source URLs don't include the scheme of the effective URL if
|
| + // the effective URL is HTTP. (e.g. view-source:example.com is displayed
|
| + // instead of view-source:http://example.com).
|
| + EXPECT_EQ(base::ASCIIToUTF16(std::string("view-source:") + kUrl.host() + ":" +
|
| + kUrl.port() + kUrl.path()),
|
| + shell()->web_contents()->GetTitle());
|
| + EXPECT_TRUE(shell()
|
| + ->web_contents()
|
| + ->GetController()
|
| + .GetLastCommittedEntry()
|
| + ->IsViewSourceMode());
|
| +}
|
| +
|
| +// Test that window.open to a view-source URL is blocked.
|
| +IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest,
|
| + ViewSourceWindowOpen_ShouldBeBlocked) {
|
| + ASSERT_TRUE(embedded_test_server()->Start());
|
| + const GURL kUrl(embedded_test_server()->GetURL("/simple_page.html"));
|
| + const GURL kViewSourceURL(kViewSourceScheme + std::string(":") + kUrl.spec());
|
| + NavigateToURL(shell(), kUrl);
|
| +
|
| + ShellAddedObserver new_shell_observer;
|
| + EXPECT_TRUE(ExecuteScript(shell()->web_contents(),
|
| + "window.open('" + kViewSourceURL.spec() + "');"));
|
| + Shell* new_shell = new_shell_observer.GetShell();
|
| + WaitForLoadStop(new_shell->web_contents());
|
| + EXPECT_EQ("", new_shell->web_contents()->GetURL().spec());
|
| + // No navigation should commit.
|
| + EXPECT_FALSE(
|
| + new_shell->web_contents()->GetController().GetLastCommittedEntry());
|
| +}
|
| +
|
| +// Test that a content initiated navigation to a view-source URL is blocked.
|
| +IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest,
|
| + ViewSourceRedirect_ShouldBeBlocked) {
|
| + ASSERT_TRUE(embedded_test_server()->Start());
|
| + const GURL kUrl(embedded_test_server()->GetURL("/simple_page.html"));
|
| + const GURL kViewSourceURL(kViewSourceScheme + std::string(":") + kUrl.spec());
|
| + NavigateToURL(shell(), kUrl);
|
| +
|
| + std::unique_ptr<ConsoleObserverDelegate> console_delegate(
|
| + new ConsoleObserverDelegate(
|
| + shell()->web_contents(),
|
| + "Not allowed to load local resource: view-source:*"));
|
| + shell()->web_contents()->SetDelegate(console_delegate.get());
|
| +
|
| + EXPECT_TRUE(
|
| + ExecuteScript(shell()->web_contents(),
|
| + "window.location = '" + kViewSourceURL.spec() + "';"));
|
| + console_delegate->Wait();
|
| + // Original page shouldn't navigate away.
|
| + EXPECT_EQ(kUrl, shell()->web_contents()->GetURL());
|
| + EXPECT_FALSE(shell()
|
| + ->web_contents()
|
| + ->GetController()
|
| + .GetLastCommittedEntry()
|
| + ->IsViewSourceMode());
|
| +}
|
| +
|
| +// Test that view source mode for a webui page can be opened.
|
| +IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, ViewSourceWebUI) {
|
| + const char kUrl[] = "view-source:chrome://chrome/settings";
|
| + const GURL kGURL(kUrl);
|
| + NavigateToURL(shell(), kGURL);
|
| + EXPECT_EQ(base::ASCIIToUTF16(kUrl), shell()->web_contents()->GetTitle());
|
| + EXPECT_TRUE(shell()
|
| + ->web_contents()
|
| + ->GetController()
|
| + .GetLastCommittedEntry()
|
| + ->IsViewSourceMode());
|
| +}
|
| +
|
| IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, NewNamedWindow) {
|
| ASSERT_TRUE(embedded_test_server()->Start());
|
|
|
|
|