| Index: Source/platform/weborigin/SecurityOrigin.cpp
|
| diff --git a/Source/platform/weborigin/SecurityOrigin.cpp b/Source/platform/weborigin/SecurityOrigin.cpp
|
| index 652560af325dcf8ba1f0ae4a4f97b609654b7ef5..c6e3dd40fc39b15a8fd71cfb6b02a7e53683cbad 100644
|
| --- a/Source/platform/weborigin/SecurityOrigin.cpp
|
| +++ b/Source/platform/weborigin/SecurityOrigin.cpp
|
| @@ -34,6 +34,7 @@
|
| #include "platform/weborigin/SchemeRegistry.h"
|
| #include "platform/weborigin/SecurityOriginCache.h"
|
| #include "platform/weborigin/SecurityPolicy.h"
|
| +#include "url/url_canon_ip.h"
|
| #include "wtf/HexNumber.h"
|
| #include "wtf/MainThread.h"
|
| #include "wtf/StdLibExtras.h"
|
| @@ -375,6 +376,12 @@ bool SecurityOrigin::canDisplay(const KURL& url) const
|
| return true;
|
| }
|
|
|
| +bool SecurityOrigin::canAccessFeatureRequiringSecureOrigin() const
|
| +{
|
| + ASSERT(m_protocol != "data");
|
| + return SchemeRegistry::shouldTreatURLSchemeAsSecure(m_protocol) || isLocal() || isLocalhost();
|
| +}
|
| +
|
| SecurityOrigin::Policy SecurityOrigin::canShowNotifications() const
|
| {
|
| if (m_universalAccess)
|
| @@ -409,6 +416,29 @@ bool SecurityOrigin::isLocal() const
|
| return SchemeRegistry::shouldTreatURLSchemeAsLocal(m_protocol);
|
| }
|
|
|
| +bool SecurityOrigin::isLocalhost() const
|
| +{
|
| + if (m_host == "localhost")
|
| + return true;
|
| +
|
| + if (m_host == "[::1]")
|
| + return true;
|
| +
|
| + // Test if m_host matches 127.0.0.1/8
|
| + ASSERT(m_host.containsOnlyASCII());
|
| + CString hostAscii = m_host.ascii();
|
| + Vector<uint8, 4> ipNumber;
|
| + ipNumber.resize(4);
|
| +
|
| + int numComponents;
|
| + url::Component hostComponent(0, hostAscii.length());
|
| + url::CanonHostInfo::Family family = url::IPv4AddressToNumber(
|
| + hostAscii.data(), hostComponent, &(ipNumber)[0], &numComponents);
|
| + if (family != url::CanonHostInfo::IPV4)
|
| + return false;
|
| + return ipNumber[0] == 127;
|
| +}
|
| +
|
| String SecurityOrigin::toString() const
|
| {
|
| if (isUnique())
|
|
|