123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- // Copyright 2021 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.
- #include <string>
- #include "build/build_config.h"
- #include "components/content_settings/core/browser/host_content_settings_map.h"
- #include "components/content_settings/core/common/content_settings.h"
- #include "components/content_settings/core/common/content_settings_types.h"
- #include "components/subresource_filter/content/browser/ad_tagging_browser_test_utils.h"
- #include "components/subresource_filter/content/browser/subresource_filter_observer_test_utils.h"
- #include "components/subresource_filter/core/common/test_ruleset_utils.h"
- #include "testing/gtest/include/gtest/gtest.h"
- #include "url/gurl.h"
- #include "weblayer/browser/host_content_settings_map_factory.h"
- #include "weblayer/test/subresource_filter_browser_test_harness.h"
- #include "weblayer/test/weblayer_browser_test_utils.h"
- namespace weblayer {
- // Tests of ad tagging integration in WebLayer. A minimal port of //chrome's
- // ad_tagging_browsertest.cc.
- class AdTaggingBrowserTest : public SubresourceFilterBrowserTest {
- public:
- AdTaggingBrowserTest() = default;
- ~AdTaggingBrowserTest() override = default;
- void SetUpOnMainThread() override {
- SubresourceFilterBrowserTest::SetUpOnMainThread();
- SetRulesetWithRules(
- {subresource_filter::testing::CreateSuffixRule("ad_script.js"),
- subresource_filter::testing::CreateSuffixRule("ad=true")});
- }
- GURL GetURL(const std::string& page) {
- return embedded_test_server()->GetURL("/ad_tagging/" + page);
- }
- };
- IN_PROC_BROWSER_TEST_F(AdTaggingBrowserTest,
- AdContentSettingAllowed_AdTaggingDisabled) {
- HostContentSettingsMapFactory::GetForBrowserContext(
- web_contents()->GetBrowserContext())
- ->SetDefaultContentSetting(ContentSettingsType::ADS,
- CONTENT_SETTING_ALLOW);
- subresource_filter::TestSubresourceFilterObserver observer(web_contents());
- NavigateAndWaitForCompletion(GetURL("frame_factory.html"), shell());
- // Create an ad frame.
- GURL ad_url = GetURL("frame_factory.html?2&ad=true");
- content::RenderFrameHost* ad_frame =
- subresource_filter::CreateSrcFrame(web_contents(), ad_url);
- // Verify that we are not evaluating subframe loads.
- EXPECT_FALSE(observer.GetChildFrameLoadPolicy(ad_url).has_value());
- EXPECT_FALSE(observer.GetIsAdFrame(ad_frame->GetFrameTreeNodeId()));
- // Child frame created by ad script.
- content::RenderFrameHost* ad_frame_tagged_by_script =
- subresource_filter::CreateSrcFrameFromAdScript(
- web_contents(), GetURL("frame_factory.html?1"));
- // No frames should be detected by script heuristics.
- EXPECT_FALSE(
- observer.GetIsAdFrame(ad_frame_tagged_by_script->GetFrameTreeNodeId()));
- }
- // TODO(crbug.com/1210190): This test is flaky.
- IN_PROC_BROWSER_TEST_F(AdTaggingBrowserTest,
- DISABLED_AdContentSettingBlocked_AdTaggingEnabled) {
- HostContentSettingsMapFactory::GetForBrowserContext(
- web_contents()->GetBrowserContext())
- ->SetDefaultContentSetting(ContentSettingsType::ADS,
- CONTENT_SETTING_BLOCK);
- subresource_filter::TestSubresourceFilterObserver observer(web_contents());
- NavigateAndWaitForCompletion(GetURL("frame_factory.html"), shell());
- // Create an ad frame.
- GURL ad_url = GetURL("frame_factory.html?2&ad=true");
- content::RenderFrameHost* ad_frame =
- subresource_filter::CreateSrcFrame(web_contents(), ad_url);
- // Verify that we are evaluating subframe loads.
- EXPECT_TRUE(observer.GetChildFrameLoadPolicy(ad_url).has_value());
- EXPECT_TRUE(observer.GetIsAdFrame(ad_frame->GetFrameTreeNodeId()));
- // Child frame created by ad script.
- content::RenderFrameHost* ad_frame_tagged_by_script =
- subresource_filter::CreateSrcFrameFromAdScript(
- web_contents(), GetURL("frame_factory.html?1"));
- // Frames should be detected by script heuristics.
- EXPECT_TRUE(
- observer.GetIsAdFrame(ad_frame_tagged_by_script->GetFrameTreeNodeId()));
- }
- // TODO(crbug.com/1210190): This test is flaky.
- IN_PROC_BROWSER_TEST_F(AdTaggingBrowserTest, DISABLED_FramesByURL) {
- subresource_filter::TestSubresourceFilterObserver observer(web_contents());
- // Main frame.
- NavigateAndWaitForCompletion(GetURL("frame_factory.html"), shell());
- EXPECT_FALSE(observer.GetIsAdFrame(
- web_contents()->GetPrimaryMainFrame()->GetFrameTreeNodeId()));
- // (1) Vanilla child.
- content::RenderFrameHost* vanilla_child = subresource_filter::CreateSrcFrame(
- web_contents(), GetURL("frame_factory.html?1"));
- EXPECT_FALSE(observer.GetIsAdFrame(vanilla_child->GetFrameTreeNodeId()));
- // (2) Ad child.
- content::RenderFrameHost* ad_child = subresource_filter::CreateSrcFrame(
- web_contents(), GetURL("frame_factory.html?2&ad=true"));
- EXPECT_TRUE(observer.GetIsAdFrame(ad_child->GetFrameTreeNodeId()));
- EXPECT_TRUE(subresource_filter::EvidenceForFrameComprises(
- ad_child, /*parent_is_ad=*/false,
- blink::mojom::FilterListResult::kMatchedBlockingRule,
- blink::mojom::FrameCreationStackEvidence::kNotCreatedByAdScript));
- // (3) Ad child of 2.
- content::RenderFrameHost* ad_child_2 = subresource_filter::CreateSrcFrame(
- ad_child, GetURL("frame_factory.html?sub=1&3&ad=true"));
- EXPECT_TRUE(observer.GetIsAdFrame(ad_child_2->GetFrameTreeNodeId()));
- EXPECT_TRUE(subresource_filter::EvidenceForFrameComprises(
- ad_child_2, /*parent_is_ad=*/true,
- blink::mojom::FilterListResult::kMatchedBlockingRule,
- blink::mojom::FrameCreationStackEvidence::kCreatedByAdScript));
- // (4) Vanilla child of 2.
- content::RenderFrameHost* vanilla_child_2 =
- subresource_filter::CreateSrcFrame(ad_child,
- GetURL("frame_factory.html?4"));
- EXPECT_TRUE(observer.GetIsAdFrame(vanilla_child_2->GetFrameTreeNodeId()));
- EXPECT_TRUE(subresource_filter::EvidenceForFrameComprises(
- vanilla_child_2, /*parent_is_ad=*/true,
- blink::mojom::FilterListResult::kMatchedNoRules,
- blink::mojom::FrameCreationStackEvidence::kCreatedByAdScript));
- // (5) Vanilla child of 1. This tests something subtle.
- // frame_factory.html?ad=true loads the same script that frame_factory.html
- // uses to load frames. This tests that even though the script is tagged as an
- // ad in the ad iframe, it's not considered an ad in the main frame, hence
- // it's able to create an iframe that's not labeled as an ad.
- content::RenderFrameHost* vanilla_child_3 =
- subresource_filter::CreateSrcFrame(vanilla_child,
- GetURL("frame_factory.html?5"));
- EXPECT_FALSE(observer.GetIsAdFrame(vanilla_child_3->GetFrameTreeNodeId()));
- }
- } // namespace weblayer
|