Chromium Code Reviews| Index: components/subresource_filter/content/renderer/web_document_subresource_filter_impl.cc |
| diff --git a/components/subresource_filter/content/renderer/web_document_subresource_filter_impl.cc b/components/subresource_filter/content/renderer/web_document_subresource_filter_impl.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..f506d419508ee9a57b94430e70b0f7742fac2e31 |
| --- /dev/null |
| +++ b/components/subresource_filter/content/renderer/web_document_subresource_filter_impl.cc |
| @@ -0,0 +1,118 @@ |
| +// Copyright 2017 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 "components/subresource_filter/content/renderer/web_document_subresource_filter_impl.h" |
| + |
| +#include <utility> |
| + |
| +#include "components/subresource_filter/core/common/memory_mapped_ruleset.h" |
| +#include "components/subresource_filter/core/common/proto/rules.pb.h" |
| + |
| +namespace subresource_filter { |
| + |
| +namespace { |
| + |
| +using BlinkLoadPolicy = blink::WebDocumentSubresourceFilter::LoadPolicy; |
| + |
| +proto::ElementType ToElementType( |
| + blink::WebURLRequest::RequestContext request_context) { |
| + switch (request_context) { |
| + case blink::WebURLRequest::RequestContextAudio: |
| + case blink::WebURLRequest::RequestContextVideo: |
| + case blink::WebURLRequest::RequestContextTrack: |
| + return proto::ELEMENT_TYPE_MEDIA; |
| + case blink::WebURLRequest::RequestContextBeacon: |
| + case blink::WebURLRequest::RequestContextPing: |
| + return proto::ELEMENT_TYPE_PING; |
| + case blink::WebURLRequest::RequestContextEmbed: |
| + case blink::WebURLRequest::RequestContextObject: |
| + case blink::WebURLRequest::RequestContextPlugin: |
| + return proto::ELEMENT_TYPE_OBJECT; |
| + case blink::WebURLRequest::RequestContextEventSource: |
| + case blink::WebURLRequest::RequestContextFetch: |
| + case blink::WebURLRequest::RequestContextXMLHttpRequest: |
| + return proto::ELEMENT_TYPE_XMLHTTPREQUEST; |
| + case blink::WebURLRequest::RequestContextFavicon: |
| + case blink::WebURLRequest::RequestContextImage: |
| + case blink::WebURLRequest::RequestContextImageSet: |
| + return proto::ELEMENT_TYPE_IMAGE; |
| + case blink::WebURLRequest::RequestContextFont: |
| + return proto::ELEMENT_TYPE_FONT; |
| + case blink::WebURLRequest::RequestContextFrame: |
| + case blink::WebURLRequest::RequestContextForm: |
| + case blink::WebURLRequest::RequestContextHyperlink: |
| + case blink::WebURLRequest::RequestContextIframe: |
| + case blink::WebURLRequest::RequestContextInternal: |
| + case blink::WebURLRequest::RequestContextLocation: |
| + return proto::ELEMENT_TYPE_SUBDOCUMENT; |
| + case blink::WebURLRequest::RequestContextScript: |
| + case blink::WebURLRequest::RequestContextServiceWorker: |
| + case blink::WebURLRequest::RequestContextSharedWorker: |
| + return proto::ELEMENT_TYPE_SCRIPT; |
| + case blink::WebURLRequest::RequestContextStyle: |
| + case blink::WebURLRequest::RequestContextXSLT: |
| + return proto::ELEMENT_TYPE_STYLESHEET; |
| + |
| + case blink::WebURLRequest::RequestContextPrefetch: |
| + case blink::WebURLRequest::RequestContextSubresource: |
| + return proto::ELEMENT_TYPE_OTHER; |
| + |
| + case blink::WebURLRequest::RequestContextCSPReport: |
| + case blink::WebURLRequest::RequestContextDownload: |
| + case blink::WebURLRequest::RequestContextImport: |
| + case blink::WebURLRequest::RequestContextManifest: |
| + case blink::WebURLRequest::RequestContextUnspecified: |
| + default: |
| + return proto::ELEMENT_TYPE_UNSPECIFIED; |
| + } |
| +} |
| + |
| +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.
|
| + switch (load_policy) { |
| + case LoadPolicy::ALLOW: |
| + return BlinkLoadPolicy::Allow; |
| + case LoadPolicy::DISALLOW: |
| + return BlinkLoadPolicy::Disallow; |
| + case LoadPolicy::WOULD_DISALLOW: |
| + return BlinkLoadPolicy::WouldDisallow; |
| + } |
| + NOTREACHED(); |
|
engedy
2017/02/17 16:44:04
nit: Move this under a default: label.
pkalinnikov
2017/02/17 17:16:48
Done.
|
| + return BlinkLoadPolicy::Allow; |
| +} |
| + |
| +} // namespace |
| + |
| +WebDocumentSubresourceFilterImpl::~WebDocumentSubresourceFilterImpl() = default; |
| + |
| +WebDocumentSubresourceFilterImpl::WebDocumentSubresourceFilterImpl( |
| + url::Origin document_origin, |
| + ActivationState activation_state, |
| + scoped_refptr<const MemoryMappedRuleset> ruleset, |
| + base::OnceClosure first_disallowed_load_callback) |
| + : 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.
|
| + first_disallowed_load_callback_( |
| + std::move(first_disallowed_load_callback)) {} |
| + |
| +blink::WebDocumentSubresourceFilter::LoadPolicy |
| +WebDocumentSubresourceFilterImpl::getLoadPolicy( |
| + const blink::WebURL& resourceUrl, |
| + blink::WebURLRequest::RequestContext request_context) { |
| + ++filter_.statistics().num_loads_total; |
| + |
| + if (filter_.activation_state().filtering_disabled_for_document) |
| + return BlinkLoadPolicy::Allow; |
| + if (resourceUrl.protocolIs(url::kDataScheme)) |
| + return BlinkLoadPolicy::Allow; |
| + |
| + // TODO(pkalinnikov): Would be good to avoid converting to GURL. |
| + return ToBlinkLoadPolicy( |
| + filter_.GetLoadPolicy(GURL(resourceUrl), ToElementType(request_context))); |
| +} |
| + |
| +void WebDocumentSubresourceFilterImpl::reportDisallowedLoad() { |
| + if (!first_disallowed_load_callback_.is_null()) |
| + std::move(first_disallowed_load_callback_).Run(); |
| +} |
| + |
| +} // namespace subresource_filter |