| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/command_line.h" |
| #include "base/macros.h" |
| #include "build/build_config.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| #include "chrome/common/chrome_switches.h" |
| #include "chrome/test/base/in_process_browser_test.h" |
| #include "chrome/test/base/ui_test_utils.h" |
| #include "content/public/browser/navigation_controller.h" |
| #include "content/public/browser/navigation_entry.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/test/browser_test_utils.h" |
| #include "net/test/embedded_test_server/embedded_test_server.h" |
| #include "url/gurl.h" |
| |
| namespace content { |
| |
| class ChromeContentBrowserClientBrowserTest : public InProcessBrowserTest { |
| public: |
| // Returns the last committed navigation entry of the first tab. May be NULL |
| // if there is no such entry. |
| NavigationEntry* GetLastCommittedEntry() { |
| return browser()->tab_strip_model()->GetWebContentsAt(0)-> |
| GetController().GetLastCommittedEntry(); |
| } |
| |
| #if defined(OS_CHROMEOS) |
| void SetUpCommandLine(base::CommandLine* command_line) override { |
| command_line->AppendSwitch(switches::kDisableAboutInSettings); |
| } |
| #endif |
| }; |
| |
| IN_PROC_BROWSER_TEST_F(ChromeContentBrowserClientBrowserTest, |
| UberURLHandler_SettingsPage) { |
| const GURL url_short("chrome://settings/"); |
| const GURL url_long("chrome://chrome/settings/"); |
| |
| ui_test_utils::NavigateToURL(browser(), url_short); |
| NavigationEntry* entry = GetLastCommittedEntry(); |
| |
| ASSERT_TRUE(entry != NULL); |
| EXPECT_EQ(url_long, entry->GetURL()); |
| EXPECT_EQ(url_short, entry->GetVirtualURL()); |
| } |
| |
| IN_PROC_BROWSER_TEST_F(ChromeContentBrowserClientBrowserTest, |
| UberURLHandler_ContentSettingsPage) { |
| const GURL url_short("chrome://settings/content"); |
| const GURL url_long("chrome://chrome/settings/content"); |
| |
| ui_test_utils::NavigateToURL(browser(), url_short); |
| NavigationEntry* entry = GetLastCommittedEntry(); |
| |
| ASSERT_TRUE(entry != NULL); |
| EXPECT_EQ(url_long, entry->GetURL()); |
| EXPECT_EQ(url_short, entry->GetVirtualURL()); |
| } |
| |
| IN_PROC_BROWSER_TEST_F(ChromeContentBrowserClientBrowserTest, |
| UberURLHandler_AboutPage) { |
| const GURL url("chrome://chrome/"); |
| |
| ui_test_utils::NavigateToURL(browser(), url); |
| NavigationEntry* entry = GetLastCommittedEntry(); |
| |
| ASSERT_TRUE(entry != NULL); |
| EXPECT_EQ(url, entry->GetURL()); |
| EXPECT_EQ(url, entry->GetVirtualURL()); |
| } |
| |
| IN_PROC_BROWSER_TEST_F(ChromeContentBrowserClientBrowserTest, |
| UberURLHandler_EmptyHost) { |
| const GURL url("chrome://chrome//foo"); |
| |
| ui_test_utils::NavigateToURL(browser(), url); |
| NavigationEntry* entry = GetLastCommittedEntry(); |
| |
| ASSERT_TRUE(entry != NULL); |
| EXPECT_TRUE(entry->GetVirtualURL().is_valid()); |
| EXPECT_EQ(url, entry->GetVirtualURL()); |
| } |
| |
| // Use a test class with SetUpCommandLine to ensure the flag is sent to the |
| // first renderer process. |
| class ChromeContentBrowserClientSitePerProcessTest |
| : public ChromeContentBrowserClientBrowserTest { |
| public: |
| ChromeContentBrowserClientSitePerProcessTest() {} |
| |
| void SetUpCommandLine(base::CommandLine* command_line) override { |
| content::IsolateAllSitesForTesting(command_line); |
| } |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(ChromeContentBrowserClientSitePerProcessTest); |
| }; |
| |
| // Test that a basic navigation works in --site-per-process mode. This prevents |
| // regressions when that mode calls out into the ChromeContentBrowserClient, |
| // such as http://crbug.com/164223. |
| IN_PROC_BROWSER_TEST_F(ChromeContentBrowserClientSitePerProcessTest, |
| SitePerProcessNavigation) { |
| ASSERT_TRUE(embedded_test_server()->Start()); |
| const GURL url(embedded_test_server()->GetURL("/title1.html")); |
| |
| ui_test_utils::NavigateToURL(browser(), url); |
| NavigationEntry* entry = GetLastCommittedEntry(); |
| |
| ASSERT_TRUE(entry != NULL); |
| EXPECT_EQ(url, entry->GetURL()); |
| EXPECT_EQ(url, entry->GetVirtualURL()); |
| } |
| |
| } // namespace content |