Skip to content

Commit

Permalink
Merge pull request #18813 from brave/force-aggressive-cosmetic-filter…
Browse files Browse the repository at this point in the history
…ing-youtube

Force aggressive cosmetic filtering on youtube
  • Loading branch information
antonok-edm authored Jul 8, 2023
2 parents f7dafff + a9d5f08 commit 8afae7c
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 3 deletions.
50 changes: 49 additions & 1 deletion browser/brave_shields/ad_block_service_browsertest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -92,14 +92,26 @@ using brave_shields::features::kCosmeticFilteringJsPerformance;

AdBlockServiceTest::AdBlockServiceTest()
: ws_server_(net::SpawnedTestServer::TYPE_WS,
net::GetWebSocketTestDataDirectory()) {
net::GetWebSocketTestDataDirectory()),
https_server_(net::EmbeddedTestServer::Type::TYPE_HTTPS) {
brave_shields::SetDefaultAdBlockComponentIdAndBase64PublicKeyForTest(
kDefaultAdBlockComponentTestId, kDefaultAdBlockComponentTest64PublicKey);
}
AdBlockServiceTest::~AdBlockServiceTest() = default;

void AdBlockServiceTest::SetUpCommandLine(base::CommandLine* command_line) {
InProcessBrowserTest::SetUpCommandLine(command_line);
mock_cert_verifier_.SetUpCommandLine(command_line);
}

void AdBlockServiceTest::SetUpInProcessBrowserTestFixture() {
InProcessBrowserTest::SetUpInProcessBrowserTestFixture();
mock_cert_verifier_.SetUpInProcessBrowserTestFixture();
}

void AdBlockServiceTest::SetUpOnMainThread() {
ExtensionBrowserTest::SetUpOnMainThread();
mock_cert_verifier_.mock_cert_verifier()->set_default_result(net::OK);
host_resolver()->AddRule("*", "127.0.0.1");
// Most tests are written for aggressive mode. Individual tests should reset
// this using `DisableAggressiveMode` if they are testing standard mode
Expand All @@ -124,6 +136,11 @@ void AdBlockServiceTest::TearDownOnMainThread() {
ExtensionBrowserTest::TearDownOnMainThread();
}

void AdBlockServiceTest::TearDownInProcessBrowserTestFixture() {
mock_cert_verifier_.TearDownInProcessBrowserTestFixture();
InProcessBrowserTest::TearDownInProcessBrowserTestFixture();
}

content::WebContents* AdBlockServiceTest::web_contents() {
return browser()->tab_strip_model()->GetActiveWebContents();
}
Expand Down Expand Up @@ -195,6 +212,11 @@ void AdBlockServiceTest::InitEmbeddedTestServer() {
brave::RegisterPathProvider();
base::FilePath test_data_dir;
base::PathService::Get(brave::DIR_TEST_DATA, &test_data_dir);

https_server_.ServeFilesFromDirectory(test_data_dir);
content::SetupCrossSiteRedirector(&https_server_);
ASSERT_TRUE(https_server_.Start());

embedded_test_server()->ServeFilesFromDirectory(test_data_dir);
content::SetupCrossSiteRedirector(embedded_test_server());
ASSERT_TRUE(embedded_test_server()->Start());
Expand Down Expand Up @@ -1506,6 +1528,32 @@ IN_PROC_BROWSER_TEST_F(Default1pBlockingFlagDisabledTest, Default1pBlocking) {
EXPECT_EQ(browser()->profile()->GetPrefs()->GetUint64(kAdsBlocked), 1ULL);
}

// Load a page with an image from a first party and a third party, which both
// match the same filter in the default engine. They should both be blocked on
// special URLs like this one.
IN_PROC_BROWSER_TEST_F(Default1pBlockingFlagDisabledTest, SpecialUrlException) {
ASSERT_TRUE(InstallDefaultAdBlockExtension());
DisableAggressiveMode();
EXPECT_EQ(browser()->profile()->GetPrefs()->GetUint64(kAdsBlocked), 0ULL);
UpdateAdBlockInstanceWithRules("^ad_banner.png");

// Must use HTTPS because `youtube.com` is in Chromium's HSTS preload list
GURL url = https_server_.GetURL("youtube.com", kAdBlockTestPage);
ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
content::WebContents* contents =
browser()->tab_strip_model()->GetActiveWebContents();

ASSERT_EQ(true, EvalJs(contents,
"setExpectations(0, 1, 0, 0);"
"addImage('ad_banner.png')"));
EXPECT_EQ(browser()->profile()->GetPrefs()->GetUint64(kAdsBlocked), 1ULL);

ASSERT_EQ(true, EvalJs(contents,
"setExpectations(0, 2, 0, 0);"
"addImage('https://thirdparty.com/ad_banner.png')"));
EXPECT_EQ(browser()->profile()->GetPrefs()->GetUint64(kAdsBlocked), 2ULL);
}

// Load a page with an image from a first party and a third party, which both
// match the same filter in the default engine. Enable aggressive mode, and
// ensure that both are blocked.
Expand Down
4 changes: 4 additions & 0 deletions browser/brave_shields/ad_block_service_browsertest.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,13 @@ class AdBlockServiceTest : public extensions::ExtensionBrowserTest {
~AdBlockServiceTest() override;

// ExtensionBrowserTest overrides
void SetUpCommandLine(base::CommandLine* command_line) override;
void SetUpInProcessBrowserTestFixture() override;
void SetUpOnMainThread() override;
void SetUp() override;
void PreRunTestOnMainThread() override;
void TearDownOnMainThread() override;
void TearDownInProcessBrowserTestFixture() override;

protected:
content::ContentMockCertVerifier mock_cert_verifier_;
Expand Down Expand Up @@ -66,6 +69,7 @@ class AdBlockServiceTest : public extensions::ExtensionBrowserTest {

net::SpawnedTestServer ws_server_;
net::EmbeddedTestServer dynamic_server_;
net::EmbeddedTestServer https_server_;
};

#endif // BRAVE_BROWSER_BRAVE_SHIELDS_AD_BLOCK_SERVICE_BROWSERTEST_H_
2 changes: 1 addition & 1 deletion browser/net/brave_ad_block_tp_network_delegate_helper.cc
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ EngineFlags ShouldBlockRequestOnTaskRunner(

bool force_aggressive = SameDomainOrHost(
ctx->initiator_url,
url::Origin::CreateFromNormalizedTuple("https", "youtube.com", 80),
url::Origin::CreateFromNormalizedTuple("https", "youtube.com", 443),
net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);

std::string rewritten_url;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,11 @@ bool CosmeticFiltersJSHandler::ProcessURL(
enabled_1st_party_cf_ =
force_cosmetic_filtering ||
render_frame_->GetWebFrame()->IsCrossOriginToOutermostMainFrame() ||
content_settings->IsFirstPartyCosmeticFilteringEnabled(url_);
content_settings->IsFirstPartyCosmeticFilteringEnabled(url_) ||
net::registry_controlled_domains::SameDomainOrHost(
url_,
url::Origin::CreateFromNormalizedTuple("https", "youtube.com", 443),
net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);

if (callback.has_value()) {
SCOPED_UMA_HISTOGRAM_TIMER_MICROS(
Expand Down

0 comments on commit 8afae7c

Please sign in to comment.