Chromium Code Reviews| Index: chrome/browser/extensions/process_manager_browsertest.cc |
| diff --git a/chrome/browser/extensions/process_manager_browsertest.cc b/chrome/browser/extensions/process_manager_browsertest.cc |
| index 68efedfce4a240764bff83a93a17b9a97ddb14e6..4140ebd16b185c3e4a36c8ff02a0145a343e9657 100644 |
| --- a/chrome/browser/extensions/process_manager_browsertest.cc |
| +++ b/chrome/browser/extensions/process_manager_browsertest.cc |
| @@ -7,10 +7,15 @@ |
| #include "chrome/browser/extensions/browser_action_test_util.h" |
| #include "chrome/browser/extensions/extension_browsertest.h" |
| #include "chrome/browser/extensions/extension_service.h" |
| +#include "chrome/browser/ui/tabs/tab_strip_model.h" |
| #include "chrome/test/base/in_process_browser_test.h" |
| +#include "chrome/test/base/ui_test_utils.h" |
| #include "content/public/browser/notification_service.h" |
| +#include "content/public/browser/web_contents.h" |
| #include "content/public/test/test_utils.h" |
| #include "extensions/browser/extension_system.h" |
| +#include "net/dns/mock_host_resolver.h" |
| +#include "net/test/embedded_test_server/embedded_test_server.h" |
| namespace extensions { |
| @@ -102,4 +107,56 @@ IN_PROC_BROWSER_TEST_F(ProcessManagerBrowserTest, |
| EXPECT_EQ(0, pm->GetLazyKeepaliveCount(popup.get())); |
| } |
| +// Content loaded from http://hlogonemlfkgpejgnedahbkiabcdhnnn should not |
| +// interact with an installed extension with that ID. Regression test |
| +// for bug 357382. |
| +IN_PROC_BROWSER_TEST_F(ProcessManagerBrowserTest, HttpHostMatchingExtensionId) { |
| + ProcessManager* pm = ExtensionSystem::Get(profile())->process_manager(); |
| + |
| + // We start with no background hosts. |
| + ASSERT_EQ(0u, pm->background_hosts().size()); |
| + ASSERT_EQ(0u, pm->GetAllViews().size()); |
| + |
| + // Load an extension with a background page. |
| + scoped_refptr<const Extension> extension = |
| + LoadExtension(test_data_dir_.AppendASCII("api_test") |
| + .AppendASCII("browser_action") |
| + .AppendASCII("none")); |
| + |
| + // Set up a test server running at http://[extension-id] |
| + ASSERT_TRUE(extension.get()); |
| + const std::string aliased_host = extension->id(); |
| + host_resolver()->AddRule(aliased_host, "127.0.0.1"); |
| + ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| + GURL url = |
| + embedded_test_server()->GetURL("/extensions/test_file_with_body.html"); |
| + GURL::Replacements replace_host; |
| + replace_host.SetHostStr(aliased_host); |
| + url = url.ReplaceComponents(replace_host); |
| + |
| + // Load a page from the test host in a new tab. |
| + ui_test_utils::NavigateToURLWithDisposition( |
| + browser(), |
| + url, |
| + NEW_FOREGROUND_TAB, |
| + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
| + |
| + // Sanity check that there's no bleeding between the extension and the tab. |
| + content::WebContents* tab_web_contents = |
| + browser()->tab_strip_model()->GetActiveWebContents(); |
| + EXPECT_EQ(url, tab_web_contents->GetVisibleURL()); |
| + EXPECT_TRUE(NULL == pm->GetExtensionForRenderViewHost( |
| + tab_web_contents->GetRenderViewHost())) |
| + << "Non-extension content must not have an associated extension"; |
| + ASSERT_EQ(1u, pm->GetRenderViewHostsForExtension(extension->id()).size()); |
|
Jeffrey Yasskin
2014/03/31 23:15:40
I made this an ASSERT so the next line won't crash
ncarter (slow)
2014/03/31 23:23:38
Great!
|
| + content::WebContents* extension_web_contents = |
| + content::WebContents::FromRenderViewHost( |
| + *pm->GetRenderViewHostsForExtension(extension->id()).begin()); |
| + EXPECT_TRUE(extension_web_contents->GetSiteInstance() != |
| + tab_web_contents->GetSiteInstance()); |
| + EXPECT_TRUE(pm->GetSiteInstanceForURL(extension->url()) != |
| + tab_web_contents->GetSiteInstance()); |
| + EXPECT_TRUE(pm->GetBackgroundHostForExtension(extension->id())); |
| +} |
| + |
| } // namespace extensions |