From ab0a50979b9eb4dfa3320eff7e187e41efedf7a9 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Fri, 8 Aug 2014 14:30:41 +0200 Subject: Update Chromium to beta version 37.0.2062.68 Change-Id: I188e3b5aff1bec75566014291b654eb19f5bc8ca Reviewed-by: Andras Becsi --- .../WebKit/Source/core/frame/csp/CSPSource.cpp | 93 ++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 chromium/third_party/WebKit/Source/core/frame/csp/CSPSource.cpp (limited to 'chromium/third_party/WebKit/Source/core/frame/csp/CSPSource.cpp') diff --git a/chromium/third_party/WebKit/Source/core/frame/csp/CSPSource.cpp b/chromium/third_party/WebKit/Source/core/frame/csp/CSPSource.cpp new file mode 100644 index 00000000000..863addc09ce --- /dev/null +++ b/chromium/third_party/WebKit/Source/core/frame/csp/CSPSource.cpp @@ -0,0 +1,93 @@ +// Copyright 2014 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 "config.h" +#include "core/frame/csp/CSPSource.h" + +#include "core/frame/csp/ContentSecurityPolicy.h" +#include "platform/weborigin/KURL.h" +#include "platform/weborigin/KnownPorts.h" +#include "platform/weborigin/SecurityOrigin.h" +#include "wtf/text/WTFString.h" + +namespace WebCore { + +CSPSource::CSPSource(ContentSecurityPolicy* policy, const String& scheme, const String& host, int port, const String& path, bool hostHasWildcard, bool portHasWildcard) + : m_policy(policy) + , m_scheme(scheme) + , m_host(host) + , m_port(port) + , m_path(path) + , m_hostHasWildcard(hostHasWildcard) + , m_portHasWildcard(portHasWildcard) +{ +} + +bool CSPSource::matches(const KURL& url) const +{ + if (!schemeMatches(url)) + return false; + if (isSchemeOnly()) + return true; + return hostMatches(url) && portMatches(url) && pathMatches(url); +} + +bool CSPSource::schemeMatches(const KURL& url) const +{ + if (m_scheme.isEmpty()) { + String protectedResourceScheme(m_policy->securityOrigin()->protocol()); + if (equalIgnoringCase("http", protectedResourceScheme)) + return url.protocolIs("http") || url.protocolIs("https"); + return equalIgnoringCase(url.protocol(), protectedResourceScheme); + } + return equalIgnoringCase(url.protocol(), m_scheme); +} + +bool CSPSource::hostMatches(const KURL& url) const +{ + const String& host = url.host(); + if (equalIgnoringCase(host, m_host)) + return true; + return m_hostHasWildcard && host.endsWith("." + m_host, false); + +} + +bool CSPSource::pathMatches(const KURL& url) const +{ + if (m_path.isEmpty()) + return true; + + String path = decodeURLEscapeSequences(url.path()); + + if (m_path.endsWith("/")) + return path.startsWith(m_path, false); + + return path == m_path; +} + +bool CSPSource::portMatches(const KURL& url) const +{ + if (m_portHasWildcard) + return true; + + int port = url.port(); + + if (port == m_port) + return true; + + if (!port) + return isDefaultPortForProtocol(m_port, url.protocol()); + + if (!m_port) + return isDefaultPortForProtocol(port, url.protocol()); + + return false; +} + +bool CSPSource::isSchemeOnly() const +{ + return m_host.isEmpty(); +} + +} // namespace -- cgit v1.2.3