Commit f112b0f0 authored by prasadt@chromium.org's avatar prasadt@chromium.org

Address bar is shown on pop-out extension windows.

The code path for window.open() call from extensions is not setting the
app_name_ on the browser instance which is causing the location bar to
be displayed.

This is a regression from "Cleanup popup related browser navigation
code." - svn://svn.chromium.org/chrome/trunk/src@83399

BUG=83692
TEST=Invoke window.open() from an extension background page.  There
should be no location bar displayed.

modified:   chrome/browser/extensions/extension_host.cc
modified:   chrome/browser/ui/browser_navigator.cc

Review URL: http://codereview.chromium.org/6992018

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86768 0039d316-1c4b-4281-b951-d872f2087c98
parent aa6752c9
...@@ -586,6 +586,10 @@ void ExtensionHost::ShowCreatedWindow(int route_id, ...@@ -586,6 +586,10 @@ void ExtensionHost::ShowCreatedWindow(int route_id,
browser::NavigateParams params(browser, wrapper); browser::NavigateParams params(browser, wrapper);
if (!browser) if (!browser)
params.profile = contents->profile(); params.profile = contents->profile();
// The extension_app_id parameter ends up as app_name in the Browser
// which causes the Browser to return true for is_app(). This affects
// among other things, whether the location bar gets displayed.
params.extension_app_id = extension_id_;
params.disposition = NEW_POPUP; params.disposition = NEW_POPUP;
params.window_bounds = initial_pos; params.window_bounds = initial_pos;
params.window_action = browser::NavigateParams::SHOW_WINDOW; params.window_action = browser::NavigateParams::SHOW_WINDOW;
......
...@@ -49,6 +49,23 @@ void WaitForTabsAndPopups(Browser* browser, int num_tabs, int num_popups) { ...@@ -49,6 +49,23 @@ void WaitForTabsAndPopups(Browser* browser, int num_tabs, int num_popups) {
} }
} }
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, BrowserIsApp) {
host_resolver()->AddRule("a.com", "127.0.0.1");
ASSERT_TRUE(StartTestServer());
ASSERT_TRUE(LoadExtension(
test_data_dir_.AppendASCII("window_open").AppendASCII("browser_is_app")));
WaitForTabsAndPopups(browser(), 0, 2);
for (BrowserList::const_iterator iter = BrowserList::begin();
iter != BrowserList::end(); ++iter) {
if (*iter == browser())
ASSERT_FALSE((*iter)->is_app());
else
ASSERT_TRUE((*iter)->is_app());
}
}
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, PopupBlockingExtension) { IN_PROC_BROWSER_TEST_F(ExtensionApiTest, PopupBlockingExtension) {
host_resolver()->AddRule("*", "127.0.0.1"); host_resolver()->AddRule("*", "127.0.0.1");
ASSERT_TRUE(StartTestServer()); ASSERT_TRUE(StartTestServer());
......
...@@ -186,7 +186,9 @@ Browser* GetBrowserForDisposition(browser::NavigateParams* params) { ...@@ -186,7 +186,9 @@ Browser* GetBrowserForDisposition(browser::NavigateParams* params) {
if (profile) { if (profile) {
// Coerce app-style if |params->browser| or |source| represents an app. // Coerce app-style if |params->browser| or |source| represents an app.
std::string app_name; std::string app_name;
if (params->browser && !params->browser->app_name().empty()) { if (!params->extension_app_id.empty()) {
app_name = params->extension_app_id;
} else if (params->browser && !params->browser->app_name().empty()) {
app_name = params->browser->app_name(); app_name = params->browser->app_name();
} else if (params->source_contents && } else if (params->source_contents &&
params->source_contents->extension_tab_helper()->is_app()) { params->source_contents->extension_tab_helper()->is_app()) {
......
...@@ -274,6 +274,29 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopup) { ...@@ -274,6 +274,29 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopup) {
EXPECT_EQ(1, p.browser->tab_count()); EXPECT_EQ(1, p.browser->tab_count());
} }
// This test verifies that navigating with WindowOpenDisposition = NEW_POPUP
// from a normal Browser results in a new Browser with is_app() true.
IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopup_ExtensionId) {
browser::NavigateParams p(MakeNavigateParams());
p.disposition = NEW_POPUP;
p.extension_app_id = "extensionappid";
p.window_bounds = gfx::Rect(0, 0, 200, 200);
browser::Navigate(&p);
// Wait for new popup to to load and gain focus.
ui_test_utils::WaitForNavigationInCurrentTab(p.browser);
// Navigate() should have opened a new, focused popup window.
EXPECT_NE(browser(), p.browser);
EXPECT_TRUE(p.browser->is_type_popup());
EXPECT_TRUE(p.browser->is_app());
// We should have two windows, the browser() provided by the framework and the
// new popup window.
EXPECT_EQ(2u, BrowserList::size());
EXPECT_EQ(1, browser()->tab_count());
EXPECT_EQ(1, p.browser->tab_count());
}
// This test verifies that navigating with WindowOpenDisposition = NEW_POPUP // This test verifies that navigating with WindowOpenDisposition = NEW_POPUP
// from a normal popup results in a new Browser with TYPE_POPUP. // from a normal popup results in a new Browser with TYPE_POPUP.
IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopupFromPopup) { IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopupFromPopup) {
......
<script>
window.open("content.html", "content", "height=200,width=200");
window.open("a.com", "a_com", "height=200,width=200");
</script>
<html>
<body>
Browser is_app() for extension popups test.
</body>
</html>
{
"name": "Browser Is App For Popups Test",
"version": "1",
"description": "Browser instance for popups created with window.open() from an extension should return true for is_app()",
"background_page": "background.html",
"permissions": ["tabs"]
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment