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

Side by Side Diff: third_party/WebKit/Source/core/loader/DocumentSubresourceFilterClient.cpp

Issue 2714573002: Enable websocket filtering via SubresourceFilter (Closed)
Patch Set: return true Created 3 years, 9 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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698