Index: chrome/browser/extensions/app_process_apitest.cc |
=================================================================== |
--- chrome/browser/extensions/app_process_apitest.cc (revision 158606) |
+++ chrome/browser/extensions/app_process_apitest.cc (working copy) |
@@ -7,6 +7,7 @@ |
#include "chrome/browser/extensions/extension_service.h" |
#include "chrome/browser/extensions/process_map.h" |
#include "chrome/browser/profiles/profile.h" |
+#include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/browser_commands.h" |
#include "chrome/browser/ui/browser_finder.h" |
@@ -118,6 +119,16 @@ |
} |
}; |
+// Omits the disable-popup-blocking flag so we can cover that case. |
+class BlockedAppApiTest : public AppApiTest { |
+ protected: |
+ void SetUpCommandLine(CommandLine* command_line) { |
+ ExtensionApiTest::SetUpCommandLine(command_line); |
+ CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kAllowHTTPBackgroundPage); |
+ } |
+}; |
+ |
// Tests that hosted apps with the background permission get a process-per-app |
// model, since all pages need to be able to script the background page. |
IN_PROC_BROWSER_TEST_F(AppApiTest, AppProcess) { |
@@ -453,8 +464,8 @@ |
ASSERT_TRUE(app); |
content::WindowedNotificationObserver popup_observer( |
- content::NOTIFICATION_RENDER_VIEW_HOST_CREATED, |
- content::NotificationService::AllSources()); |
+ content::NOTIFICATION_RENDER_VIEW_HOST_CREATED, |
+ content::NotificationService::AllSources()); |
ui_test_utils::NavigateToURL(browser(), |
base_url.Resolve("path3/container.html")); |
EXPECT_FALSE(process_map->Contains( |
@@ -467,6 +478,33 @@ |
EXPECT_TRUE(process_map->Contains(popup_host->GetProcess()->GetID())); |
} |
+// Similar to the previous test, but ensure that popup blocking bypass |
+// isn't granted to the iframe. See crbug.com/117446. |
+IN_PROC_BROWSER_TEST_F(BlockedAppApiTest, OpenAppFromIframe) { |
+ host_resolver()->AddRule("*", "127.0.0.1"); |
+ ASSERT_TRUE(test_server()->Start()); |
+ |
+ // Load app and start URL (not in the app). |
+ const Extension* app = |
+ LoadExtension(test_data_dir_.AppendASCII("app_process")); |
+ ASSERT_TRUE(app); |
+ |
+ content::WindowedNotificationObserver blocker_observer( |
+ chrome::NOTIFICATION_CONTENT_BLOCKED_STATE_CHANGED, |
+ content::NotificationService::AllSources()); |
+ ui_test_utils::NavigateToURL( |
+ browser(), GetTestBaseURL("app_process").Resolve("path3/container.html")); |
+ |
+ blocker_observer.Wait(); |
+ |
+ WebContents* tab = chrome::GetActiveWebContents(browser()); |
+ BlockedContentTabHelper* blocked_content_tab_helper = |
+ BlockedContentTabHelper::FromWebContents(tab); |
+ std::vector<WebContents*> blocked_contents; |
+ blocked_content_tab_helper->GetBlockedContents(&blocked_contents); |
+ EXPECT_EQ(blocked_contents.size(), 1u); |
+} |
+ |
// Tests that if an extension launches an app via chrome.tabs.create with an URL |
// that's not in the app's extent but that redirects to it, we still end up with |
// an app process. See http://crbug.com/99349 for more details. |