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

Side by Side Diff: components/subresource_filter/content/renderer/web_document_subresource_filter_impl.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
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/subresource_filter/content/renderer/web_document_subresourc e_filter_impl.h"
6
7 #include <utility>
8
9 #include "base/memory/ref_counted.h"
10 #include "components/subresource_filter/core/common/activation_state.h"
11 #include "components/subresource_filter/core/common/memory_mapped_ruleset.h"
12 #include "components/subresource_filter/core/common/proto/rules.pb.h"
13 #include "third_party/WebKit/public/platform/WebURL.h"
14 #include "third_party/WebKit/public/platform/WebURLRequest.h"
15 #include "url/gurl.h"
16 #include "url/origin.h"
17
18 namespace subresource_filter {
19
20 namespace {
21
22 using WebLoadPolicy = blink::WebDocumentSubresourceFilter::LoadPolicy;
23
24 proto::ElementType ToElementType(
25 blink::WebURLRequest::RequestContext request_context) {
26 switch (request_context) {
27 case blink::WebURLRequest::RequestContextAudio:
28 case blink::WebURLRequest::RequestContextVideo:
29 case blink::WebURLRequest::RequestContextTrack:
30 return proto::ELEMENT_TYPE_MEDIA;
31 case blink::WebURLRequest::RequestContextBeacon:
32 case blink::WebURLRequest::RequestContextPing:
33 return proto::ELEMENT_TYPE_PING;
34 case blink::WebURLRequest::RequestContextEmbed:
35 case blink::WebURLRequest::RequestContextObject:
36 case blink::WebURLRequest::RequestContextPlugin:
37 return proto::ELEMENT_TYPE_OBJECT;
38 case blink::WebURLRequest::RequestContextEventSource:
39 case blink::WebURLRequest::RequestContextFetch:
40 case blink::WebURLRequest::RequestContextXMLHttpRequest:
41 return proto::ELEMENT_TYPE_XMLHTTPREQUEST;
42 case blink::WebURLRequest::RequestContextFavicon:
43 case blink::WebURLRequest::RequestContextImage:
44 case blink::WebURLRequest::RequestContextImageSet:
45 return proto::ELEMENT_TYPE_IMAGE;
46 case blink::WebURLRequest::RequestContextFont:
47 return proto::ELEMENT_TYPE_FONT;
48 case blink::WebURLRequest::RequestContextFrame:
49 case blink::WebURLRequest::RequestContextForm:
50 case blink::WebURLRequest::RequestContextHyperlink:
51 case blink::WebURLRequest::RequestContextIframe:
52 case blink::WebURLRequest::RequestContextInternal:
53 case blink::WebURLRequest::RequestContextLocation:
54 return proto::ELEMENT_TYPE_SUBDOCUMENT;
55 case blink::WebURLRequest::RequestContextScript:
56 case blink::WebURLRequest::RequestContextServiceWorker:
57 case blink::WebURLRequest::RequestContextSharedWorker:
58 return proto::ELEMENT_TYPE_SCRIPT;
59 case blink::WebURLRequest::RequestContextStyle:
60 case blink::WebURLRequest::RequestContextXSLT:
61 return proto::ELEMENT_TYPE_STYLESHEET;
62
63 case blink::WebURLRequest::RequestContextPrefetch:
64 case blink::WebURLRequest::RequestContextSubresource:
65 return proto::ELEMENT_TYPE_OTHER;
66
67 case blink::WebURLRequest::RequestContextCSPReport:
68 case blink::WebURLRequest::RequestContextDownload:
69 case blink::WebURLRequest::RequestContextImport:
70 case blink::WebURLRequest::RequestContextManifest:
71 case blink::WebURLRequest::RequestContextUnspecified:
72 default:
73 return proto::ELEMENT_TYPE_UNSPECIFIED;
74 }
75 }
76
77 WebLoadPolicy ToWebLoadPolicy(LoadPolicy load_policy) {
78 switch (load_policy) {
79 case LoadPolicy::ALLOW:
80 return WebLoadPolicy::Allow;
81 case LoadPolicy::DISALLOW:
82 return WebLoadPolicy::Disallow;
83 case LoadPolicy::WOULD_DISALLOW:
84 return WebLoadPolicy::WouldDisallow;
85 default:
86 NOTREACHED();
87 return WebLoadPolicy::Allow;
88 }
89 }
90
91 } // namespace
92
93 WebDocumentSubresourceFilterImpl::~WebDocumentSubresourceFilterImpl() = default;
94
95 WebDocumentSubresourceFilterImpl::WebDocumentSubresourceFilterImpl(
96 url::Origin document_origin,
97 ActivationState activation_state,
98 scoped_refptr<const MemoryMappedRuleset> ruleset,
99 base::OnceClosure first_disallowed_load_callback)
100 : filter_(std::move(document_origin), activation_state, std::move(ruleset)),
101 first_disallowed_load_callback_(
102 std::move(first_disallowed_load_callback)) {}
103
104 blink::WebDocumentSubresourceFilter::LoadPolicy
105 WebDocumentSubresourceFilterImpl::getLoadPolicy(
106 const blink::WebURL& resourceUrl,
107 blink::WebURLRequest::RequestContext request_context) {
108 if (filter_.activation_state().filtering_disabled_for_document ||
109 resourceUrl.protocolIs(url::kDataScheme)) {
110 ++filter_.statistics().num_loads_total;
111 return WebLoadPolicy::Allow;
112 }
113
114 // TODO(pkalinnikov): Would be good to avoid converting to GURL.
115 return ToWebLoadPolicy(
116 filter_.GetLoadPolicy(GURL(resourceUrl), ToElementType(request_context)));
117 }
118
119 void WebDocumentSubresourceFilterImpl::reportDisallowedLoad() {
120 if (!first_disallowed_load_callback_.is_null())
121 std::move(first_disallowed_load_callback_).Run();
122 }
123
124 } // namespace subresource_filter
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698