Skip to content

Commit

Permalink
Added test for subframe
Browse files Browse the repository at this point in the history
  • Loading branch information
spylogsster committed Apr 12, 2023
1 parent 237bffd commit 943c7b3
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,7 @@ IN_PROC_BROWSER_TEST_F(BraveShieldsWebContentsObserverBrowserTest,
content_settings()->GetContentSetting(url, url,
ContentSettingsType::JAVASCRIPT);
EXPECT_EQ(CONTENT_SETTING_ALLOW, block_javascript_setting);

// Enable JavaScript blocking globally now.
content_settings()->SetContentSettingCustomScope(
ContentSettingsPattern::Wildcard(), ContentSettingsPattern::Wildcard(),
Expand All @@ -299,11 +300,30 @@ IN_PROC_BROWSER_TEST_F(BraveShieldsWebContentsObserverBrowserTest,
embedded_test_server()->GetURL("a.com", "/load_js_dataurls.html");
EXPECT_TRUE(ui_test_utils::NavigateToURL(browser(), page_url));
EXPECT_TRUE(WaitForLoadStop(GetWebContents()));
EXPECT_EQ(brave_shields_web_contents_observer()->block_javascript_count(), 4);
brave_shields_web_contents_observer()->Reset();
// Allow subframe script and check we still block his data urls.
std::string subframe_script =
url::Origin::Create(page_url).Serialize() + "/load_js_dataurls.js";
brave_shields_web_contents_observer()->AllowScriptsOnce(
std::vector<std::string>({subframe_script}));
ClearAllResourcesList();
GetWebContents()->GetController().Reload(content::ReloadType::NORMAL, true);
EXPECT_TRUE(WaitForLoadStop(GetWebContents()));
EXPECT_EQ(GetBlockedJsList().size(), 1u);
EXPECT_EQ(GetAllowedJsList().size(), 1u);
EXPECT_EQ(brave_shields_web_contents_observer()->block_javascript_count(), 3);
auto blocked_list = GetBlockedJsList();
EXPECT_EQ(blocked_list.size(), 1u);
EXPECT_EQ(GURL(blocked_list.front()),
GURL(url::Origin::Create(page_url).Serialize()));
brave_shields_web_contents_observer()->Reset();

// Allow all scripts for domain.
brave_shields_web_contents_observer()->AllowScriptsOnce(
std::vector<std::string>({url::Origin::Create(page_url).Serialize()}));
ClearAllResourcesList();
GetWebContents()->GetController().Reload(content::ReloadType::NORMAL, true);
EXPECT_TRUE(WaitForLoadStop(GetWebContents()));

EXPECT_EQ(GetAllowedJsList().size(), 2u);
EXPECT_EQ(brave_shields_web_contents_observer()->block_javascript_count(), 0);
}

} // namespace brave_shields
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ bool BraveContentSettingsAgentImpl::AllowScriptFromSource(
// For scripts w/o sources it should report the domain / site used for
// executing the frame (which most, but not all, of the time will just be from
// document.location
if (secondary_url.SchemeIs(url::kDataScheme)) {
if (secondary_url.SchemeIsLocal()) {
secondary_url =
url::Origin(render_frame()->GetWebFrame()->GetSecurityOrigin())
.GetURL();
Expand Down
4 changes: 2 additions & 2 deletions test/data/load_js_dataurls.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<!--
Just attempt to load a JavaScript to test JavaScript blocking.
-->
<script src="data:application/javascript;base64,dmFyIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZnJhbWUpOw=="></script>
<script src="data:application/javascript;base64,dmFyIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZnJhbWUpOw=="></script>
<script src="data:application/javascript;base64,Y29uc29sZS5sb2coImhlbGxvIGZyb20gYmxvY2tlZCBzY3JpcHQiKQ=="></script>
<script src="load_js_dataurls.js"></script>
</body>
</html>
14 changes: 14 additions & 0 deletions test/data/load_js_dataurls.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/* Copyright (c) 2023 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at https://mozilla.org/MPL/2.0/. */

var iframe = document.createElement('IFRAME');
iframe.id = iframe.name = 'test_iframe';
iframe.src = 'about:blank';
document.body.appendChild(iframe);

var frame = window.frames['test_iframe'];
frame.document.open();
frame.document.write('<script>console.log("message from frame:", document.location.href)</script>');
frame.document.close();

0 comments on commit 943c7b3

Please sign in to comment.