Commit 71fdb27d authored by Jochen Eisinger's avatar Jochen Eisinger

Allow downloads again from extension views

Now that downloads initially look like navigations, we have to allow
some navigations from extension views such as popups

BUG=821219,823639
R=clamy@chromium.org,rdevlin.cronin@chromium.org

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_mojo
Change-Id: I2276a5649120a17974bf576791f74e3eac3d4e3a
Reviewed-on: https://chromium-review.googlesource.com/960003
Commit-Queue: Jochen Eisinger <jochen@chromium.org>
Reviewed-by: default avatarCharlie Reis <creis@chromium.org>
Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#544324}
parent 214cb75f
......@@ -829,6 +829,33 @@ IN_PROC_BROWSER_TEST_F(BrowserActionApiTest, BrowserActionOpenPopupOnPopup) {
EXPECT_TRUE(catcher.GetNextResult()) << message_;
}
// Test that a browser action popup can download data URLs. See
// https://crbug.com/821219
IN_PROC_BROWSER_TEST_F(BrowserActionApiTest, BrowserActionPopupDownload) {
ASSERT_TRUE(embedded_test_server()->Start());
ASSERT_TRUE(LoadExtension(
test_data_dir_.AppendASCII("browser_action/popup_download")));
const Extension* extension = GetSingleLoadedExtension();
ASSERT_TRUE(extension) << message_;
content::DownloadTestObserverTerminal downloads_observer(
content::BrowserContext::GetDownloadManager(browser()->profile()), 1,
content::DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
// Simulate a click on the browser action to open the popup.
content::WebContents* popup = OpenPopup(0);
ASSERT_TRUE(popup);
content::ExecuteScriptAsync(popup, "run_tests()");
// Wait for the download that this should have triggered to finish.
downloads_observer.WaitForFinished();
EXPECT_EQ(1u, downloads_observer.NumDownloadsSeenInState(
download::DownloadItem::COMPLETE));
EXPECT_TRUE(GetBrowserActionsBar()->HidePopup());
}
class NavigatingExtensionPopupBrowserTest : public BrowserActionApiTest {
public:
const Extension& popup_extension() { return *popup_extension_; }
......
......@@ -159,10 +159,25 @@ WebContents* ExtensionViewHost::OpenURLFromTab(
// Only allow these from hosts that are bound to a browser (e.g. popups).
// Otherwise they are not driven by a user gesture.
Browser* browser = view_->GetBrowser();
return browser ? browser->OpenURL(params) : NULL;
return browser ? browser->OpenURL(params) : nullptr;
}
case WindowOpenDisposition::CURRENT_TAB: {
// Only allow these from hosts that are bound to a browser (e.g. popups).
// Otherwise they are not driven by a user gesture.
Browser* browser = view_->GetBrowser();
if (!browser)
return nullptr;
// Only allow navigations that will surely result in a download.
if (!params.suggested_filename.has_value() ||
!(params.url.SchemeIsBlob() || params.url.SchemeIsFileSystem() ||
params.url.SchemeIs(url::kDataScheme))) {
return nullptr;
}
return browser->OpenURL(params);
}
default:
return NULL;
return nullptr;
}
}
......
{
"name": "Popup download tester",
"version": "0.1",
"manifest_version": 2,
"description": "apitest for downloads from popups",
"browser_action": {
"default_title": "grow",
"default_icon": "chromium.png",
"default_popup": "popup.html"
}
}
<!--
* Copyright 2018 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.
-->
<body>
<a href="data:text/plain,test" download>test download</a>
<script src="popup.js"></script>
</body>
// Copyright 2018 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.
function run_tests() {
var anchor = document.querySelector("a");
anchor.click();
}
window.addEventListener("load", function() {
chrome.test.notifyPass();
}, false);
......@@ -324,6 +324,9 @@
-SBNavigationObserverBrowserTest.DownloadViaHTML5FileApi
-ProcessManagerBrowserTest.NestedURLNavigationsToExtensionBlocked
# Fails because data: URL is not downloaded but navigated to.
-BrowserActionApiTest.BrowserActionPopupDownload
# Flakes https://logs.chromium.org/v/?s=chromium%2Fbb%2Fchromium.linux%2FLinux_Tests%2F65822%2F%2B%2Frecipes%2Fsteps%2Fnetwork_service_browser_tests%2F0%2Flogs%2FNoSessionRestoreTest.PRE_CookiesClearedOnExit%2F0
-NoSessionRestoreTest.CookiesClearedOnExit
......
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