Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 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 | 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 "core/loader/DocumentSubresourceFilterClient.h" | 5 #include "core/loader/DocumentSubresourceFilterClient.h" |
| 6 | 6 |
| 7 #include "core/dom/TaskRunnerHelper.h" | |
| 7 #include "core/loader/DocumentLoader.h" | 8 #include "core/loader/DocumentLoader.h" |
| 8 #include "public/platform/WebDocumentSubresourceFilter.h" | 9 #include "platform/WebTaskRunner.h" |
| 10 #include "platform/weborigin/KURL.h" | |
| 11 #include "public/platform/WebTraceLocation.h" | |
| 9 | 12 |
| 10 namespace blink { | 13 namespace blink { |
| 11 | 14 |
| 12 // static | 15 // static |
| 13 DocumentSubresourceFilterClient* DocumentSubresourceFilterClient::create( | 16 DocumentSubresourceFilterClient* DocumentSubresourceFilterClient::create( |
| 14 DocumentLoader* loader, | 17 DocumentLoader* loader, |
| 15 std::unique_ptr<WebDocumentSubresourceFilter> filter) { | 18 std::unique_ptr<WebDocumentSubresourceFilter> filter) { |
| 16 return new DocumentSubresourceFilterClient(loader, std::move(filter)); | 19 return new DocumentSubresourceFilterClient(loader, std::move(filter)); |
| 17 } | 20 } |
| 18 | 21 |
| 19 DocumentSubresourceFilterClient::DocumentSubresourceFilterClient( | 22 DocumentSubresourceFilterClient::DocumentSubresourceFilterClient( |
| 20 DocumentLoader* documentLoader, | 23 DocumentLoader* documentLoader, |
| 21 std::unique_ptr<WebDocumentSubresourceFilter> subresourceFilter) | 24 std::unique_ptr<WebDocumentSubresourceFilter> subresourceFilter) |
| 22 : m_documentLoader(documentLoader), | 25 : m_documentLoader(documentLoader), |
| 23 m_subresourceFilter(std::move(subresourceFilter)) {} | 26 m_subresourceFilter(std::move(subresourceFilter)) {} |
| 24 | 27 |
| 25 DocumentSubresourceFilterClient::~DocumentSubresourceFilterClient() {} | 28 DocumentSubresourceFilterClient::~DocumentSubresourceFilterClient() {} |
| 26 | 29 |
| 27 bool DocumentSubresourceFilterClient::allowLoad( | 30 bool DocumentSubresourceFilterClient::allowLoad( |
| 28 const KURL& resourceUrl, | 31 const KURL& resourceUrl, |
| 29 WebURLRequest::RequestContext requestContext, | 32 WebURLRequest::RequestContext requestContext, |
| 30 ReportingPolicy reportingPolicy) { | 33 ReportingPolicy reportingPolicy) { |
| 31 // TODO(csharrison): Implement a caching layer here which is a HashMap of | 34 // TODO(csharrison): Implement a caching layer here which is a HashMap of |
| 32 // Pair<url string, context> -> LoadPolicy. | 35 // Pair<url string, context> -> LoadPolicy. |
| 33 WebDocumentSubresourceFilter::LoadPolicy loadPolicy = | 36 WebDocumentSubresourceFilter::LoadPolicy loadPolicy = |
| 34 m_subresourceFilter->getLoadPolicy(resourceUrl, requestContext); | 37 m_subresourceFilter->getLoadPolicy(resourceUrl, requestContext); |
| 35 if (reportingPolicy == Report) { | 38 if (reportingPolicy == Report) |
| 36 switch (loadPolicy) { | 39 notifyLoad(resourceUrl, loadPolicy); |
| 37 case WebDocumentSubresourceFilter::Allow: | |
| 38 break; | |
| 39 case WebDocumentSubresourceFilter::Disallow: | |
| 40 m_subresourceFilter->reportDisallowedLoad(); | |
| 41 // fall through | |
| 42 case WebDocumentSubresourceFilter::WouldDisallow: | |
| 43 m_documentLoader->didObserveLoadingBehavior( | |
| 44 WebLoadingBehaviorSubresourceFilterMatch); | |
| 45 break; | |
| 46 } | |
| 47 } | |
| 48 return loadPolicy != WebDocumentSubresourceFilter::Disallow; | 40 return loadPolicy != WebDocumentSubresourceFilter::Disallow; |
| 49 } | 41 } |
| 50 | 42 |
| 43 bool DocumentSubresourceFilterClient::allowWebSocketConnection( | |
| 44 const KURL& resourceUrl) { | |
| 45 // TODO(csharrison): Should probably have a new API for this in | |
| 46 // WebDocumentSubresourceFilter rather than sending the unspecified context. | |
|
Charlie Harrison
2017/02/28 15:11:00
s/unspecified/subresource
| |
| 47 WebDocumentSubresourceFilter::LoadPolicy loadPolicy = | |
| 48 m_subresourceFilter->getLoadPolicy( | |
| 49 resourceUrl, WebURLRequest::RequestContextSubresource); | |
| 50 | |
| 51 // Post a task to notify this load to avoid unduly blocking the worker | |
| 52 // thread. | |
| 53 TaskRunnerHelper::get(TaskType::Networking, m_documentLoader->frame()) | |
| 54 ->postTask(BLINK_FROM_HERE, | |
| 55 WTF::bind(&DocumentSubresourceFilterClient::notifyLoad, | |
| 56 wrapPersistent(this), resourceUrl, loadPolicy)); | |
| 57 return loadPolicy != WebDocumentSubresourceFilter::Disallow; | |
| 58 } | |
| 59 | |
| 60 void DocumentSubresourceFilterClient::notifyLoad( | |
| 61 const KURL& resourceUrl, | |
| 62 WebDocumentSubresourceFilter::LoadPolicy loadPolicy) { | |
| 63 // TODO(csharrison): Add devtools logging here. | |
| 64 switch (loadPolicy) { | |
| 65 case WebDocumentSubresourceFilter::Allow: | |
| 66 break; | |
| 67 case WebDocumentSubresourceFilter::Disallow: | |
| 68 m_subresourceFilter->reportDisallowedLoad(); | |
| 69 // fall through | |
| 70 case WebDocumentSubresourceFilter::WouldDisallow: | |
| 71 m_documentLoader->didObserveLoadingBehavior( | |
| 72 WebLoadingBehaviorSubresourceFilterMatch); | |
| 73 break; | |
| 74 } | |
| 75 } | |
| 76 | |
| 51 } // namespace blink | 77 } // namespace blink |
| OLD | NEW |