OLD | NEW |
---|---|
(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 "components/subresource_filter/core/common/memory_mapped_ruleset.h" | |
10 #include "components/subresource_filter/core/common/proto/rules.pb.h" | |
11 | |
12 namespace subresource_filter { | |
13 | |
14 namespace { | |
15 | |
16 using BlinkLoadPolicy = blink::WebDocumentSubresourceFilter::LoadPolicy; | |
17 | |
18 proto::ElementType ToElementType( | |
19 blink::WebURLRequest::RequestContext request_context) { | |
20 switch (request_context) { | |
21 case blink::WebURLRequest::RequestContextAudio: | |
22 case blink::WebURLRequest::RequestContextVideo: | |
23 case blink::WebURLRequest::RequestContextTrack: | |
24 return proto::ELEMENT_TYPE_MEDIA; | |
25 case blink::WebURLRequest::RequestContextBeacon: | |
26 case blink::WebURLRequest::RequestContextPing: | |
27 return proto::ELEMENT_TYPE_PING; | |
28 case blink::WebURLRequest::RequestContextEmbed: | |
29 case blink::WebURLRequest::RequestContextObject: | |
30 case blink::WebURLRequest::RequestContextPlugin: | |
31 return proto::ELEMENT_TYPE_OBJECT; | |
32 case blink::WebURLRequest::RequestContextEventSource: | |
33 case blink::WebURLRequest::RequestContextFetch: | |
34 case blink::WebURLRequest::RequestContextXMLHttpRequest: | |
35 return proto::ELEMENT_TYPE_XMLHTTPREQUEST; | |
36 case blink::WebURLRequest::RequestContextFavicon: | |
37 case blink::WebURLRequest::RequestContextImage: | |
38 case blink::WebURLRequest::RequestContextImageSet: | |
39 return proto::ELEMENT_TYPE_IMAGE; | |
40 case blink::WebURLRequest::RequestContextFont: | |
41 return proto::ELEMENT_TYPE_FONT; | |
42 case blink::WebURLRequest::RequestContextFrame: | |
43 case blink::WebURLRequest::RequestContextForm: | |
44 case blink::WebURLRequest::RequestContextHyperlink: | |
45 case blink::WebURLRequest::RequestContextIframe: | |
46 case blink::WebURLRequest::RequestContextInternal: | |
47 case blink::WebURLRequest::RequestContextLocation: | |
48 return proto::ELEMENT_TYPE_SUBDOCUMENT; | |
49 case blink::WebURLRequest::RequestContextScript: | |
50 case blink::WebURLRequest::RequestContextServiceWorker: | |
51 case blink::WebURLRequest::RequestContextSharedWorker: | |
52 return proto::ELEMENT_TYPE_SCRIPT; | |
53 case blink::WebURLRequest::RequestContextStyle: | |
54 case blink::WebURLRequest::RequestContextXSLT: | |
55 return proto::ELEMENT_TYPE_STYLESHEET; | |
56 | |
57 case blink::WebURLRequest::RequestContextPrefetch: | |
58 case blink::WebURLRequest::RequestContextSubresource: | |
59 return proto::ELEMENT_TYPE_OTHER; | |
60 | |
61 case blink::WebURLRequest::RequestContextCSPReport: | |
62 case blink::WebURLRequest::RequestContextDownload: | |
63 case blink::WebURLRequest::RequestContextImport: | |
64 case blink::WebURLRequest::RequestContextManifest: | |
65 case blink::WebURLRequest::RequestContextUnspecified: | |
66 default: | |
67 return proto::ELEMENT_TYPE_UNSPECIFIED; | |
68 } | |
69 } | |
70 | |
71 BlinkLoadPolicy ToBlinkLoadPolicy(LoadPolicy load_policy) { | |
engedy
2017/02/17 16:44:04
By tradition, name this WebLoadPolicy.
pkalinnikov
2017/02/17 17:16:48
Done.
| |
72 switch (load_policy) { | |
73 case LoadPolicy::ALLOW: | |
74 return BlinkLoadPolicy::Allow; | |
75 case LoadPolicy::DISALLOW: | |
76 return BlinkLoadPolicy::Disallow; | |
77 case LoadPolicy::WOULD_DISALLOW: | |
78 return BlinkLoadPolicy::WouldDisallow; | |
79 } | |
80 NOTREACHED(); | |
engedy
2017/02/17 16:44:04
nit: Move this under a default: label.
pkalinnikov
2017/02/17 17:16:48
Done.
| |
81 return BlinkLoadPolicy::Allow; | |
82 } | |
83 | |
84 } // namespace | |
85 | |
86 WebDocumentSubresourceFilterImpl::~WebDocumentSubresourceFilterImpl() = default; | |
87 | |
88 WebDocumentSubresourceFilterImpl::WebDocumentSubresourceFilterImpl( | |
89 url::Origin document_origin, | |
90 ActivationState activation_state, | |
91 scoped_refptr<const MemoryMappedRuleset> ruleset, | |
92 base::OnceClosure first_disallowed_load_callback) | |
93 : filter_(std::move(document_origin), activation_state, std::move(ruleset)), | |
engedy
2017/02/17 16:44:04
nit: #include "base/memory/ref_counted.h" for the
pkalinnikov
2017/02/17 17:16:48
Done.
| |
94 first_disallowed_load_callback_( | |
95 std::move(first_disallowed_load_callback)) {} | |
96 | |
97 blink::WebDocumentSubresourceFilter::LoadPolicy | |
98 WebDocumentSubresourceFilterImpl::getLoadPolicy( | |
99 const blink::WebURL& resourceUrl, | |
100 blink::WebURLRequest::RequestContext request_context) { | |
101 ++filter_.statistics().num_loads_total; | |
102 | |
103 if (filter_.activation_state().filtering_disabled_for_document) | |
104 return BlinkLoadPolicy::Allow; | |
105 if (resourceUrl.protocolIs(url::kDataScheme)) | |
106 return BlinkLoadPolicy::Allow; | |
107 | |
108 // TODO(pkalinnikov): Would be good to avoid converting to GURL. | |
109 return ToBlinkLoadPolicy( | |
110 filter_.GetLoadPolicy(GURL(resourceUrl), ToElementType(request_context))); | |
111 } | |
112 | |
113 void WebDocumentSubresourceFilterImpl::reportDisallowedLoad() { | |
114 if (!first_disallowed_load_callback_.is_null()) | |
115 std::move(first_disallowed_load_callback_).Run(); | |
116 } | |
117 | |
118 } // namespace subresource_filter | |
OLD | NEW |