Commit 7c7368fd authored by Alex Moshchuk's avatar Alex Moshchuk Committed by Commit Bot

Fix flakiness in NavigateToInaccessibleResourceFromChromeURL.

There was a race in this test where chrome.send() from
chrome://history might have occasionally been processed on a pending
delete RenderFrameHost, right after a cross-process navigation.  This
revealed a real bug in WebUIImpl::OnWebUISend(), which incorrectly
killed the renderer before checking whether the RFH is active.  Fix
this by checking whether the RFH is active and dropping the IPC if not
prior to checking WebUI bindings.

Change-Id: I672e8457b7a4a167ad31e5afa4b2059b2c92b97a
Bug: 836211
Tbr: rdevlin.cronin@chromium.org
Reviewed-on: https://chromium-review.googlesource.com/1026803
Commit-Queue: Alex Moshchuk <alexmos@chromium.org>
Reviewed-by: default avatarCharlie Reis <creis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#553399}
parent 6a5e94d3
...@@ -350,19 +350,11 @@ IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, ...@@ -350,19 +350,11 @@ IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest,
6 /* SCHEME_DATA */, 2); 6 /* SCHEME_DATA */, 2);
} }
// Disabled on Win, Mac and ChromeOS due to https://crbug.com/836211
#if defined(OS_WIN) || defined(OS_CHROMEOS) || defined(OS_MACOSX)
#define MAYBE_NavigateToInaccessibleResourceFromChromeURL \
DISABLED_NavigateToInaccessibleResourceFromChromeURL
#else
#define MAYBE_NavigateToInaccessibleResourceFromChromeURL \
NavigateToInaccessibleResourceFromChromeURL
#endif
// Test that navigating to an extension URL is allowed on chrome:// and // Test that navigating to an extension URL is allowed on chrome:// and
// chrome-search:// pages, even for URLs that are not web-accessible. // chrome-search:// pages, even for URLs that are not web-accessible.
// See https://crbug.com/662602. // See https://crbug.com/662602.
IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest,
MAYBE_NavigateToInaccessibleResourceFromChromeURL) { NavigateToInaccessibleResourceFromChromeURL) {
// Mint an extension URL which is not web-accessible. // Mint an extension URL which is not web-accessible.
const extensions::Extension* extension = LoadExtension( const extensions::Extension* extension = LoadExtension(
test_data_dir_.AppendASCII("uitest").AppendASCII("window_open")); test_data_dir_.AppendASCII("uitest").AppendASCII("window_open"));
......
...@@ -109,6 +109,11 @@ bool WebUIImpl::OnMessageReceived(const IPC::Message& message, ...@@ -109,6 +109,11 @@ bool WebUIImpl::OnMessageReceived(const IPC::Message& message,
void WebUIImpl::OnWebUISend(RenderFrameHost* sender, void WebUIImpl::OnWebUISend(RenderFrameHost* sender,
const std::string& message, const std::string& message,
const base::ListValue& args) { const base::ListValue& args) {
// Ignore IPCs from frames that are pending deletion. See also
// https://crbug.com/780920.
if (!sender->IsCurrent())
return;
const GURL& source_url = sender->GetLastCommittedURL(); const GURL& source_url = sender->GetLastCommittedURL();
if (!ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings( if (!ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings(
sender->GetProcess()->GetID()) || sender->GetProcess()->GetID()) ||
...@@ -120,10 +125,6 @@ void WebUIImpl::OnWebUISend(RenderFrameHost* sender, ...@@ -120,10 +125,6 @@ void WebUIImpl::OnWebUISend(RenderFrameHost* sender,
return; return;
} }
// Ignore IPCs from swapped-out frames. See also https://crbug.com/780920.
if (!sender->IsCurrent())
return;
if (base::EndsWith(message, "RequiringGesture", if (base::EndsWith(message, "RequiringGesture",
base::CompareCase::SENSITIVE) && base::CompareCase::SENSITIVE) &&
!web_contents_->HasRecentInteractiveInputEvent()) { !web_contents_->HasRecentInteractiveInputEvent()) {
......
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