Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(711)

Side by Side Diff: components/subresource_filter/core/common/document_subresource_filter_unittest.cc

Issue 2697363005: Move DocumentSubresourceFilter to core/common. (Closed)
Patch Set: Address comments from engedy@. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/subresource_filter/core/common/document_subresource_filter.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/subresource_filter/content/common/document_subresource_filt er.h" 5 #include "components/subresource_filter/core/common/document_subresource_filter. h"
6 6
7 #include "base/bind.h"
8 #include "base/callback.h"
9 #include "base/files/file.h" 7 #include "base/files/file.h"
10 #include "base/macros.h" 8 #include "base/macros.h"
11 #include "base/memory/ref_counted.h"
12 #include "base/strings/string_piece.h" 9 #include "base/strings/string_piece.h"
13 #include "components/subresource_filter/core/common/memory_mapped_ruleset.h" 10 #include "components/subresource_filter/core/common/memory_mapped_ruleset.h"
14 #include "components/subresource_filter/core/common/test_ruleset_creator.h" 11 #include "components/subresource_filter/core/common/test_ruleset_creator.h"
15 #include "components/subresource_filter/core/common/test_ruleset_utils.h" 12 #include "components/subresource_filter/core/common/test_ruleset_utils.h"
16 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
17 #include "third_party/WebKit/public/platform/WebURL.h"
18 #include "third_party/WebKit/public/platform/WebURLRequest.h"
19 #include "url/gurl.h"
20 14
21 namespace subresource_filter { 15 namespace subresource_filter {
22 16
23 namespace { 17 namespace {
24 18
25 constexpr auto kDisabled = ActivationLevel::DISABLED; 19 constexpr auto kDisabled = ActivationLevel::DISABLED;
26 constexpr auto kDryRun = ActivationLevel::DRYRUN; 20 constexpr auto kDryRun = ActivationLevel::DRYRUN;
27 constexpr auto kEnabled = ActivationLevel::ENABLED; 21 constexpr auto kEnabled = ActivationLevel::ENABLED;
28 22
29 const char kTestAlphaURL[] = "http://example.com/alpha"; 23 constexpr auto kImageType = proto::ELEMENT_TYPE_IMAGE;
30 const char kTestAlphaDataURI[] = "data:text/plain,alpha"; 24 constexpr auto kSubdocumentType = proto::ELEMENT_TYPE_SUBDOCUMENT;
31 const char kTestBetaURL[] = "http://example.com/beta";
32 25
33 const char kTestAlphaURLPathSuffix[] = "alpha"; 26 constexpr const char kTestAlphaURL[] = "http://example.com/alpha";
27 constexpr const char kTestAlphaDataURI[] = "data:text/plain,alpha";
28 constexpr const char kTestBetaURL[] = "http://example.com/beta";
34 29
35 class TestCallbackReceiver { 30 constexpr const char kTestAlphaURLPathSuffix[] = "alpha";
36 public:
37 TestCallbackReceiver() = default;
38 base::OnceClosure closure() {
39 return base::BindOnce(&TestCallbackReceiver::CallbackMethod,
40 base::Unretained(this));
41 }
42 size_t callback_count() const { return callback_count_; }
43
44 private:
45 void CallbackMethod() { ++callback_count_; }
46
47 size_t callback_count_ = 0;
48
49 DISALLOW_COPY_AND_ASSIGN(TestCallbackReceiver);
50 };
51 31
52 } // namespace 32 } // namespace
53 33
54 // Tests for DocumentSubresourceFilter class. ---------------------------------- 34 // Tests for DocumentSubresourceFilter class. ----------------------------------
55 35
56 class DocumentSubresourceFilterTest : public ::testing::Test { 36 class DocumentSubresourceFilterTest : public ::testing::Test {
57 public: 37 public:
58 DocumentSubresourceFilterTest() {} 38 DocumentSubresourceFilterTest() {}
59 39
60 protected: 40 protected:
(...skipping 14 matching lines...) Expand all
75 const MemoryMappedRuleset* ruleset() { return ruleset_.get(); } 55 const MemoryMappedRuleset* ruleset() { return ruleset_.get(); }
76 56
77 private: 57 private:
78 testing::TestRulesetCreator test_ruleset_creator_; 58 testing::TestRulesetCreator test_ruleset_creator_;
79 scoped_refptr<const MemoryMappedRuleset> ruleset_; 59 scoped_refptr<const MemoryMappedRuleset> ruleset_;
80 60
81 DISALLOW_COPY_AND_ASSIGN(DocumentSubresourceFilterTest); 61 DISALLOW_COPY_AND_ASSIGN(DocumentSubresourceFilterTest);
82 }; 62 };
83 63
84 TEST_F(DocumentSubresourceFilterTest, DryRun) { 64 TEST_F(DocumentSubresourceFilterTest, DryRun) {
85 blink::WebURLRequest::RequestContext request_context =
86 blink::WebURLRequest::RequestContextImage;
87 TestCallbackReceiver first_disallowed_load_callback_receiver;
88
89 ActivationState activation_state(kDryRun); 65 ActivationState activation_state(kDryRun);
90 activation_state.measure_performance = true; 66 activation_state.measure_performance = true;
91 DocumentSubresourceFilter filter( 67 DocumentSubresourceFilter filter(url::Origin(), activation_state, ruleset());
92 url::Origin(), activation_state, ruleset(),
93 first_disallowed_load_callback_receiver.closure());
94 68
95 EXPECT_EQ(blink::WebDocumentSubresourceFilter::WouldDisallow, 69 EXPECT_EQ(LoadPolicy::WOULD_DISALLOW,
96 filter.getLoadPolicy(GURL(kTestAlphaURL), request_context)); 70 filter.GetLoadPolicy(GURL(kTestAlphaURL), kImageType));
97 EXPECT_EQ(blink::WebDocumentSubresourceFilter::Allow, 71 EXPECT_EQ(LoadPolicy::ALLOW,
98 filter.getLoadPolicy(GURL(kTestAlphaDataURI), request_context)); 72 filter.GetLoadPolicy(GURL(kTestAlphaDataURI), kImageType));
99 EXPECT_EQ(blink::WebDocumentSubresourceFilter::Allow, 73 EXPECT_EQ(LoadPolicy::ALLOW,
100 filter.getLoadPolicy(GURL(kTestBetaURL), request_context)); 74 filter.GetLoadPolicy(GURL(kTestBetaURL), kImageType));
101 EXPECT_EQ(blink::WebDocumentSubresourceFilter::WouldDisallow, 75 EXPECT_EQ(LoadPolicy::WOULD_DISALLOW,
102 filter.GetLoadPolicyForSubdocument(GURL(kTestAlphaURL))); 76 filter.GetLoadPolicy(GURL(kTestAlphaURL), kSubdocumentType));
103 EXPECT_EQ(blink::WebDocumentSubresourceFilter::Allow, 77 EXPECT_EQ(LoadPolicy::ALLOW,
104 filter.GetLoadPolicyForSubdocument(GURL(kTestBetaURL))); 78 filter.GetLoadPolicy(GURL(kTestBetaURL), kSubdocumentType));
105 79
106 const auto& statistics = filter.statistics(); 80 const auto& statistics = filter.statistics();
107 EXPECT_EQ(5, statistics.num_loads_total); 81 EXPECT_EQ(5, statistics.num_loads_total);
108 EXPECT_EQ(4, statistics.num_loads_evaluated); 82 EXPECT_EQ(4, statistics.num_loads_evaluated);
109 EXPECT_EQ(2, statistics.num_loads_matching_rules); 83 EXPECT_EQ(2, statistics.num_loads_matching_rules);
110 EXPECT_EQ(0, statistics.num_loads_disallowed); 84 EXPECT_EQ(0, statistics.num_loads_disallowed);
111
112 EXPECT_EQ(0u, first_disallowed_load_callback_receiver.callback_count());
113 } 85 }
114 86
115 TEST_F(DocumentSubresourceFilterTest, Enabled) { 87 TEST_F(DocumentSubresourceFilterTest, Enabled) {
116 auto test_impl = [this](bool measure_performance) { 88 auto test_impl = [this](bool measure_performance) {
117 blink::WebURLRequest::RequestContext request_context =
118 blink::WebURLRequest::RequestContextImage;
119 ActivationState activation_state(kEnabled); 89 ActivationState activation_state(kEnabled);
120 activation_state.measure_performance = measure_performance; 90 activation_state.measure_performance = measure_performance;
121 DocumentSubresourceFilter filter(url::Origin(), activation_state, ruleset(), 91 DocumentSubresourceFilter filter(url::Origin(), activation_state,
122 base::OnceClosure()); 92 ruleset());
123 93
124 EXPECT_EQ(blink::WebDocumentSubresourceFilter::Disallow, 94 EXPECT_EQ(LoadPolicy::DISALLOW,
125 filter.getLoadPolicy(GURL(kTestAlphaURL), request_context)); 95 filter.GetLoadPolicy(GURL(kTestAlphaURL), kImageType));
126 EXPECT_EQ(blink::WebDocumentSubresourceFilter::Allow, 96 EXPECT_EQ(LoadPolicy::ALLOW,
127 filter.getLoadPolicy(GURL(kTestAlphaDataURI), request_context)); 97 filter.GetLoadPolicy(GURL(kTestAlphaDataURI), kImageType));
128 EXPECT_EQ(blink::WebDocumentSubresourceFilter::Allow, 98 EXPECT_EQ(LoadPolicy::ALLOW,
129 filter.getLoadPolicy(GURL(kTestBetaURL), request_context)); 99 filter.GetLoadPolicy(GURL(kTestBetaURL), kImageType));
130 EXPECT_EQ(blink::WebDocumentSubresourceFilter::Disallow, 100 EXPECT_EQ(LoadPolicy::DISALLOW,
131 filter.GetLoadPolicyForSubdocument(GURL(kTestAlphaURL))); 101 filter.GetLoadPolicy(GURL(kTestAlphaURL), kSubdocumentType));
132 EXPECT_EQ(blink::WebDocumentSubresourceFilter::Allow, 102 EXPECT_EQ(LoadPolicy::ALLOW,
133 filter.GetLoadPolicyForSubdocument(GURL(kTestBetaURL))); 103 filter.GetLoadPolicy(GURL(kTestBetaURL), kSubdocumentType));
134 104
135 const auto& statistics = filter.statistics(); 105 const auto& statistics = filter.statistics();
136 EXPECT_EQ(5, statistics.num_loads_total); 106 EXPECT_EQ(5, statistics.num_loads_total);
137 EXPECT_EQ(4, statistics.num_loads_evaluated); 107 EXPECT_EQ(4, statistics.num_loads_evaluated);
138 EXPECT_EQ(2, statistics.num_loads_matching_rules); 108 EXPECT_EQ(2, statistics.num_loads_matching_rules);
139 EXPECT_EQ(2, statistics.num_loads_disallowed); 109 EXPECT_EQ(2, statistics.num_loads_disallowed);
140 110
141 if (!measure_performance) { 111 if (!measure_performance) {
142 EXPECT_TRUE(statistics.evaluation_total_cpu_duration.is_zero()); 112 EXPECT_TRUE(statistics.evaluation_total_cpu_duration.is_zero());
143 EXPECT_TRUE(statistics.evaluation_total_wall_duration.is_zero()); 113 EXPECT_TRUE(statistics.evaluation_total_wall_duration.is_zero());
144 } 114 }
145 // Otherwise, don't expect |total_duration| to be non-zero, although it 115 // Otherwise, don't expect |total_duration| to be non-zero, although it
146 // practically is (when timer is supported). 116 // practically is (when timer is supported).
147 }; 117 };
148 118
149 test_impl(true /* measure_performance */); 119 test_impl(true /* measure_performance */);
150 test_impl(false /* measure_performance */); 120 test_impl(false /* measure_performance */);
151 } 121 }
152 122
153 TEST_F(DocumentSubresourceFilterTest,
154 CallbackFiredExactlyOnceAfterFirstDisallowedLoad) {
155 TestCallbackReceiver first_disallowed_load_callback_receiver;
156
157 ActivationState activation_state(kEnabled);
158 activation_state.measure_performance = true;
159 DocumentSubresourceFilter filter(
160 url::Origin(), activation_state, ruleset(),
161 first_disallowed_load_callback_receiver.closure());
162
163 EXPECT_EQ(0u, first_disallowed_load_callback_receiver.callback_count());
164 filter.reportDisallowedLoad();
165 EXPECT_EQ(1u, first_disallowed_load_callback_receiver.callback_count());
166 filter.reportDisallowedLoad();
167 EXPECT_EQ(1u, first_disallowed_load_callback_receiver.callback_count());
168 }
169
170 // Tests for ComputeActivationState functions. --------------------------------- 123 // Tests for ComputeActivationState functions. ---------------------------------
171 124
172 class SubresourceFilterComputeActivationStateTest : public ::testing::Test { 125 class SubresourceFilterComputeActivationStateTest : public ::testing::Test {
173 public: 126 public:
174 SubresourceFilterComputeActivationStateTest() {} 127 SubresourceFilterComputeActivationStateTest() {}
175 128
176 protected: 129 protected:
177 void SetUp() override { 130 void SetUp() override {
178 constexpr int32_t kDocument = proto::ACTIVATION_TYPE_DOCUMENT; 131 constexpr int32_t kDocument = proto::ACTIVATION_TYPE_DOCUMENT;
179 constexpr int32_t kGenericBlock = proto::ACTIVATION_TYPE_GENERICBLOCK; 132 constexpr int32_t kGenericBlock = proto::ACTIVATION_TYPE_GENERICBLOCK;
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 for (const auto& url_string : test_case.ancestor_document_urls) 282 for (const auto& url_string : test_case.ancestor_document_urls)
330 ancestor_document_urls.emplace_back(url_string); 283 ancestor_document_urls.emplace_back(url_string);
331 284
332 ActivationState activation_state = ComputeActivationState( 285 ActivationState activation_state = ComputeActivationState(
333 test_case.activation_level, false, ancestor_document_urls, ruleset()); 286 test_case.activation_level, false, ancestor_document_urls, ruleset());
334 EXPECT_EQ(test_case.expected_activation_state, activation_state); 287 EXPECT_EQ(test_case.expected_activation_state, activation_state);
335 } 288 }
336 } 289 }
337 290
338 } // namespace subresource_filter 291 } // namespace subresource_filter
OLDNEW
« no previous file with comments | « components/subresource_filter/core/common/document_subresource_filter.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698