Index: third_party/WebKit/Source/core/loader/SubresourceFilter.cpp |
diff --git a/third_party/WebKit/Source/core/loader/SubresourceFilter.cpp b/third_party/WebKit/Source/core/loader/SubresourceFilter.cpp |
index bdfbdf10756a94ec33a0dce2aeb67cb83cc3a41a..393060517498c4a1dd55c96366ecce771b805679 100644 |
--- a/third_party/WebKit/Source/core/loader/SubresourceFilter.cpp |
+++ b/third_party/WebKit/Source/core/loader/SubresourceFilter.cpp |
@@ -6,13 +6,30 @@ |
#include <utility> |
+#include "core/dom/Document.h" |
#include "core/dom/TaskRunnerHelper.h" |
+#include "core/frame/LocalFrame.h" |
+#include "core/inspector/ConsoleMessage.h" |
#include "platform/WebTaskRunner.h" |
#include "platform/weborigin/KURL.h" |
+#include "platform/wtf/text/StringBuilder.h" |
#include "public/platform/WebTraceLocation.h" |
namespace blink { |
+namespace { |
+ |
+String GetErrorStringForDisallowedLoad(const KURL& url) { |
+ // TODO(shivanisha): Update the string when finalized. |
+ StringBuilder builder; |
+ builder.Append("Subresource filtering disallowed loading this resource, "); |
+ builder.Append(url.GetString()); |
+ builder.Append("."); |
+ return builder.ToString(); |
+} |
+ |
+} // namespace |
+ |
// static |
SubresourceFilter* SubresourceFilter::Create( |
DocumentLoader* loader, |
@@ -36,8 +53,9 @@ bool SubresourceFilter::AllowLoad( |
// Pair<url string, context> -> LoadPolicy. |
WebDocumentSubresourceFilter::LoadPolicy load_policy = |
subresource_filter_->GetLoadPolicy(resource_url, request_context); |
+ |
if (reporting_policy == SecurityViolationReportingPolicy::kReport) |
- ReportLoad(load_policy); |
+ ReportLoad(resource_url, load_policy); |
return load_policy != WebDocumentSubresourceFilter::kDisallow; |
} |
@@ -54,21 +72,34 @@ bool SubresourceFilter::AllowWebSocketConnection(const KURL& url) { |
DCHECK(task_runner->RunsTasksOnCurrentThread()); |
task_runner->PostTask(BLINK_FROM_HERE, |
WTF::Bind(&SubresourceFilter::ReportLoad, |
- WrapPersistent(this), load_policy)); |
+ WrapPersistent(this), url, load_policy)); |
return load_policy != WebDocumentSubresourceFilter::kDisallow; |
} |
void SubresourceFilter::ReportLoad( |
+ const KURL& resource_url, |
WebDocumentSubresourceFilter::LoadPolicy load_policy) { |
+ Document* document = document_loader_->GetFrame() |
+ ? document_loader_->GetFrame()->GetDocument() |
+ : nullptr; |
switch (load_policy) { |
case WebDocumentSubresourceFilter::kAllow: |
break; |
case WebDocumentSubresourceFilter::kDisallow: |
subresource_filter_->ReportDisallowedLoad(); |
+ |
+ // Display console message for actually blocked resource. For a |
+ // resource with |load_policy| as kWouldDisallow, we will be logging a |
+ // document wide console message, so no need to log it here. |
+ // TODO: Consider logging this as a kInterventionMessageSource for showing |
+ // warning in Lighthouse. |
+ if (document && subresource_filter_->ShouldLogToConsole()) { |
+ document->AddConsoleMessage(ConsoleMessage::Create( |
+ kOtherMessageSource, kErrorMessageLevel, |
+ GetErrorStringForDisallowedLoad(resource_url))); |
+ } |
// fall through |
case WebDocumentSubresourceFilter::kWouldDisallow: |
- // TODO(csharrison): log console errors here based on |
- // subresource_filter_->ShouldLogToConsole(). |
document_loader_->DidObserveLoadingBehavior( |
kWebLoadingBehaviorSubresourceFilterMatch); |
break; |