summaryrefslogtreecommitdiff
path: root/Source/WebCore/html/parser/XSSAuditorDelegate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/html/parser/XSSAuditorDelegate.cpp')
-rw-r--r--Source/WebCore/html/parser/XSSAuditorDelegate.cpp45
1 files changed, 20 insertions, 25 deletions
diff --git a/Source/WebCore/html/parser/XSSAuditorDelegate.cpp b/Source/WebCore/html/parser/XSSAuditorDelegate.cpp
index d06069b31..2cbe9bbb8 100644
--- a/Source/WebCore/html/parser/XSSAuditorDelegate.cpp
+++ b/Source/WebCore/html/parser/XSSAuditorDelegate.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2013 Google, Inc. All Rights Reserved.
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -26,8 +27,6 @@
#include "config.h"
#include "XSSAuditorDelegate.h"
-#include "Console.h"
-#include "DOMWindow.h"
#include "Document.h"
#include "DocumentLoader.h"
#include "FormData.h"
@@ -36,7 +35,6 @@
#include "FrameLoaderClient.h"
#include "HTMLParserIdioms.h"
#include "PingLoader.h"
-#include "SecurityOrigin.h"
#include <inspector/InspectorValues.h>
#include <wtf/text/StringBuilder.h>
#include <wtf/text/CString.h>
@@ -47,49 +45,46 @@ namespace WebCore {
XSSAuditorDelegate::XSSAuditorDelegate(Document& document)
: m_document(document)
- , m_didSendNotifications(false)
{
ASSERT(isMainThread());
}
-static inline String buildConsoleError(const XSSInfo& xssInfo, const String& url)
+static inline String buildConsoleError(const XSSInfo& xssInfo)
{
StringBuilder message;
- message.append("The XSS Auditor ");
+ message.appendLiteral("The XSS Auditor ");
message.append(xssInfo.m_didBlockEntirePage ? "blocked access to" : "refused to execute a script in");
- message.append(" '");
- message.append(url);
- message.append("' because ");
+ message.appendLiteral(" '");
+ message.append(xssInfo.m_originalURL);
+ message.appendLiteral("' because ");
message.append(xssInfo.m_didBlockEntirePage ? "the source code of a script" : "its source code");
- message.append(" was found within the request.");
+ message.appendLiteral(" was found within the request.");
- if (xssInfo.m_didSendCSPHeader)
- message.append(" The server sent a 'Content-Security-Policy' header requesting this behavior.");
- else if (xssInfo.m_didSendXSSProtectionHeader)
- message.append(" The server sent an 'X-XSS-Protection' header requesting this behavior.");
+ if (xssInfo.m_didSendXSSProtectionHeader)
+ message.appendLiteral(" The server sent an 'X-XSS-Protection' header requesting this behavior.");
else
- message.append(" The auditor was enabled as the server sent neither an 'X-XSS-Protection' nor 'Content-Security-Policy' header.");
+ message.appendLiteral(" The auditor was enabled because the server did not send an 'X-XSS-Protection' header.");
return message.toString();
}
-PassRefPtr<FormData> XSSAuditorDelegate::generateViolationReport()
+Ref<FormData> XSSAuditorDelegate::generateViolationReport(const XSSInfo& xssInfo)
{
ASSERT(isMainThread());
- FrameLoader& frameLoader = m_document.frame()->loader();
+ auto& frameLoader = m_document.frame()->loader();
String httpBody;
if (frameLoader.documentLoader()) {
- if (FormData* formData = frameLoader.documentLoader()->originalRequest().httpBody())
+ if (auto* formData = frameLoader.documentLoader()->originalRequest().httpBody())
httpBody = formData->flattenToString();
}
- RefPtr<InspectorObject> reportDetails = InspectorObject::create();
- reportDetails->setString("request-url", m_document.url().string());
+ auto reportDetails = InspectorObject::create();
+ reportDetails->setString("request-url", xssInfo.m_originalURL);
reportDetails->setString("request-body", httpBody);
- RefPtr<InspectorObject> reportObject = InspectorObject::create();
- reportObject->setObject("xss-report", reportDetails.release());
+ auto reportObject = InspectorObject::create();
+ reportObject->setObject("xss-report", WTFMove(reportDetails));
return FormData::create(reportObject->toJSONString().utf8().data());
}
@@ -98,7 +93,7 @@ void XSSAuditorDelegate::didBlockScript(const XSSInfo& xssInfo)
{
ASSERT(isMainThread());
- m_document.addConsoleMessage(JSMessageSource, ErrorMessageLevel, buildConsoleError(xssInfo, m_document.url().string()));
+ m_document.addConsoleMessage(MessageSource::JS, MessageLevel::Error, buildConsoleError(xssInfo));
FrameLoader& frameLoader = m_document.frame()->loader();
if (xssInfo.m_didBlockEntirePage)
@@ -110,11 +105,11 @@ void XSSAuditorDelegate::didBlockScript(const XSSInfo& xssInfo)
frameLoader.client().didDetectXSS(m_document.url(), xssInfo.m_didBlockEntirePage);
if (!m_reportURL.isEmpty())
- PingLoader::sendViolationReport(m_document.frame(), m_reportURL, generateViolationReport());
+ PingLoader::sendViolationReport(*m_document.frame(), m_reportURL, generateViolationReport(xssInfo), ViolationReportType::XSSAuditor);
}
if (xssInfo.m_didBlockEntirePage)
- m_document.frame()->navigationScheduler().scheduleLocationChange(m_document.securityOrigin(), SecurityOrigin::urlWithUniqueSecurityOrigin(), String());
+ m_document.frame()->navigationScheduler().schedulePageBlock(m_document);
}
} // namespace WebCore