summaryrefslogtreecommitdiff
path: root/Source/WebCore/page/SecurityPolicy.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/page/SecurityPolicy.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/page/SecurityPolicy.cpp')
-rw-r--r--Source/WebCore/page/SecurityPolicy.cpp49
1 files changed, 25 insertions, 24 deletions
diff --git a/Source/WebCore/page/SecurityPolicy.cpp b/Source/WebCore/page/SecurityPolicy.cpp
index 9d18879f6..18f311d46 100644
--- a/Source/WebCore/page/SecurityPolicy.cpp
+++ b/Source/WebCore/page/SecurityPolicy.cpp
@@ -29,12 +29,13 @@
#include "config.h"
#include "SecurityPolicy.h"
-#include "URL.h"
-#include <wtf/MainThread.h>
#include "OriginAccessEntry.h"
#include "SecurityOrigin.h"
-#include <wtf/OwnPtr.h>
-#include <wtf/PassOwnPtr.h>
+#include "URL.h"
+#include <memory>
+#include <wtf/HashMap.h>
+#include <wtf/MainThread.h>
+#include <wtf/NeverDestroyed.h>
#include <wtf/text/StringHash.h>
namespace WebCore {
@@ -42,11 +43,11 @@ namespace WebCore {
static SecurityPolicy::LocalLoadPolicy localLoadPolicy = SecurityPolicy::AllowLocalLoadsForLocalOnly;
typedef Vector<OriginAccessEntry> OriginAccessWhiteList;
-typedef HashMap<String, OwnPtr<OriginAccessWhiteList>> OriginAccessMap;
+typedef HashMap<String, std::unique_ptr<OriginAccessWhiteList>> OriginAccessMap;
static OriginAccessMap& originAccessMap()
{
- DEFINE_STATIC_LOCAL(OriginAccessMap, originAccessMap, ());
+ static NeverDestroyed<OriginAccessMap> originAccessMap;
return originAccessMap;
}
@@ -68,6 +69,8 @@ bool SecurityPolicy::shouldHideReferrer(const URL& url, const String& referrer)
String SecurityPolicy::generateReferrerHeader(ReferrerPolicy referrerPolicy, const URL& url, const String& referrer)
{
+ ASSERT(referrer == URL(URL(), referrer).strippedForUseAsReferrer());
+
if (referrer.isEmpty())
return String();
@@ -75,11 +78,11 @@ String SecurityPolicy::generateReferrerHeader(ReferrerPolicy referrerPolicy, con
return String();
switch (referrerPolicy) {
- case ReferrerPolicyNever:
+ case ReferrerPolicy::Never:
return String();
- case ReferrerPolicyAlways:
+ case ReferrerPolicy::Always:
return referrer;
- case ReferrerPolicyOrigin: {
+ case ReferrerPolicy::Origin: {
String origin = SecurityOrigin::createFromString(referrer)->toString();
if (origin == "null")
return String();
@@ -87,7 +90,7 @@ String SecurityPolicy::generateReferrerHeader(ReferrerPolicy referrerPolicy, con
// to turn it into a canonical URL we can use as referrer.
return origin + "/";
}
- case ReferrerPolicyDefault:
+ case ReferrerPolicy::Default:
break;
}
@@ -112,18 +115,18 @@ bool SecurityPolicy::allowSubstituteDataAccessToLocal()
bool SecurityPolicy::isAccessWhiteListed(const SecurityOrigin* activeOrigin, const SecurityOrigin* targetOrigin)
{
if (OriginAccessWhiteList* list = originAccessMap().get(activeOrigin->toString())) {
- for (size_t i = 0; i < list->size(); ++i) {
- if (list->at(i).matchesOrigin(*targetOrigin))
- return true;
- }
+ for (auto& entry : *list) {
+ if (entry.matchesOrigin(*targetOrigin))
+ return true;
+ }
}
return false;
}
bool SecurityPolicy::isAccessToURLWhiteListed(const SecurityOrigin* activeOrigin, const URL& url)
{
- RefPtr<SecurityOrigin> targetOrigin = SecurityOrigin::create(url);
- return isAccessWhiteListed(activeOrigin, targetOrigin.get());
+ Ref<SecurityOrigin> targetOrigin(SecurityOrigin::create(url));
+ return isAccessWhiteListed(activeOrigin, &targetOrigin.get());
}
void SecurityPolicy::addOriginAccessWhitelistEntry(const SecurityOrigin& sourceOrigin, const String& destinationProtocol, const String& destinationDomain, bool allowDestinationSubdomains)
@@ -136,10 +139,10 @@ void SecurityPolicy::addOriginAccessWhitelistEntry(const SecurityOrigin& sourceO
String sourceString = sourceOrigin.toString();
OriginAccessMap::AddResult result = originAccessMap().add(sourceString, nullptr);
if (result.isNewEntry)
- result.iterator->value = adoptPtr(new OriginAccessWhiteList);
+ result.iterator->value = std::make_unique<OriginAccessWhiteList>();
OriginAccessWhiteList* list = result.iterator->value.get();
- list->append(OriginAccessEntry(destinationProtocol, destinationDomain, allowDestinationSubdomains ? OriginAccessEntry::AllowSubdomains : OriginAccessEntry::DisallowSubdomains));
+ list->append(OriginAccessEntry(destinationProtocol, destinationDomain, allowDestinationSubdomains ? OriginAccessEntry::AllowSubdomains : OriginAccessEntry::DisallowSubdomains, OriginAccessEntry::TreatIPAddressAsIPAddress));
}
void SecurityPolicy::removeOriginAccessWhitelistEntry(const SecurityOrigin& sourceOrigin, const String& destinationProtocol, const String& destinationDomain, bool allowDestinationSubdomains)
@@ -155,14 +158,12 @@ void SecurityPolicy::removeOriginAccessWhitelistEntry(const SecurityOrigin& sour
if (it == map.end())
return;
- OriginAccessWhiteList* list = it->value.get();
- size_t index = list->find(OriginAccessEntry(destinationProtocol, destinationDomain, allowDestinationSubdomains ? OriginAccessEntry::AllowSubdomains : OriginAccessEntry::DisallowSubdomains));
- if (index == notFound)
+ OriginAccessWhiteList& list = *it->value;
+ OriginAccessEntry originAccessEntry(destinationProtocol, destinationDomain, allowDestinationSubdomains ? OriginAccessEntry::AllowSubdomains : OriginAccessEntry::DisallowSubdomains, OriginAccessEntry::TreatIPAddressAsIPAddress);
+ if (!list.removeFirst(originAccessEntry))
return;
- list->remove(index);
-
- if (list->isEmpty())
+ if (list.isEmpty())
map.remove(it);
}