Title: [278837] trunk/Source/WebCore
- Revision
- 278837
- Author
- cdu...@apple.com
- Date
- 2021-06-14 10:47:46 -0700 (Mon, 14 Jun 2021)
Log Message
Avoid converting SecurityOrigins to Strings in SecurityPolicy
https://bugs.webkit.org/show_bug.cgi?id=226976
Reviewed by Geoffrey Garen.
Avoid converting SecurityOrigins to Strings in SecurityPolicy, by using a SecurityOriginData
as key in the originAccessMap instead of a String. Getting a SecurityOriginData from a
SecurityOrigin is very cheap.
* page/SecurityPolicy.cpp:
(WebCore::SecurityPolicy::isAccessAllowed):
(WebCore::SecurityPolicy::addOriginAccessAllowlistEntry):
(WebCore::SecurityPolicy::removeOriginAccessAllowlistEntry):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (278836 => 278837)
--- trunk/Source/WebCore/ChangeLog 2021-06-14 17:41:05 UTC (rev 278836)
+++ trunk/Source/WebCore/ChangeLog 2021-06-14 17:47:46 UTC (rev 278837)
@@ -1,3 +1,19 @@
+2021-06-14 Chris Dumez <cdu...@apple.com>
+
+ Avoid converting SecurityOrigins to Strings in SecurityPolicy
+ https://bugs.webkit.org/show_bug.cgi?id=226976
+
+ Reviewed by Geoffrey Garen.
+
+ Avoid converting SecurityOrigins to Strings in SecurityPolicy, by using a SecurityOriginData
+ as key in the originAccessMap instead of a String. Getting a SecurityOriginData from a
+ SecurityOrigin is very cheap.
+
+ * page/SecurityPolicy.cpp:
+ (WebCore::SecurityPolicy::isAccessAllowed):
+ (WebCore::SecurityPolicy::addOriginAccessAllowlistEntry):
+ (WebCore::SecurityPolicy::removeOriginAccessAllowlistEntry):
+
2021-06-14 Jonathan Bedard <jbed...@apple.com>
[Monterey] Support building WebKit (Part 2)
Modified: trunk/Source/WebCore/page/SecurityPolicy.cpp (278836 => 278837)
--- trunk/Source/WebCore/page/SecurityPolicy.cpp 2021-06-14 17:41:05 UTC (rev 278836)
+++ trunk/Source/WebCore/page/SecurityPolicy.cpp 2021-06-14 17:47:46 UTC (rev 278837)
@@ -44,8 +44,8 @@
static SecurityPolicy::LocalLoadPolicy localLoadPolicy = SecurityPolicy::AllowLocalLoadsForLocalOnly;
-typedef Vector<OriginAccessEntry> OriginAccessAllowlist;
-typedef HashMap<String, std::unique_ptr<OriginAccessAllowlist>> OriginAccessMap;
+using OriginAccessAllowlist = Vector<OriginAccessEntry>;
+using OriginAccessMap = HashMap<SecurityOriginData, std::unique_ptr<OriginAccessAllowlist>>;
static Lock originAccessMapLock;
static OriginAccessMap& originAccessMap() WTF_REQUIRES_LOCK(originAccessMapLock)
@@ -207,7 +207,7 @@
ASSERT(targetOrigin.equal(SecurityOrigin::create(targetURL).ptr()));
{
Locker locker { originAccessMapLock };
- if (OriginAccessAllowlist* list = originAccessMap().get(activeOrigin.toString())) {
+ if (auto* list = originAccessMap().get(activeOrigin.data())) {
for (auto& entry : *list) {
if (entry.matchesOrigin(targetOrigin))
return true;
@@ -233,15 +233,9 @@
if (sourceOrigin.isUnique())
return;
- String sourceString = sourceOrigin.toString();
-
Locker locker { originAccessMapLock };
- OriginAccessMap::AddResult result = originAccessMap().add(sourceString, nullptr);
- if (result.isNewEntry)
- result.iterator->value = makeUnique<OriginAccessAllowlist>();
-
- OriginAccessAllowlist* list = result.iterator->value.get();
- list->append(OriginAccessEntry(destinationProtocol, destinationDomain, allowDestinationSubdomains ? OriginAccessEntry::AllowSubdomains : OriginAccessEntry::DisallowSubdomains, OriginAccessEntry::TreatIPAddressAsIPAddress));
+ auto* allowList = originAccessMap().ensure(sourceOrigin.data(), [] { return makeUnique<OriginAccessAllowlist>(); }).iterator->value.get();
+ allowList->append(OriginAccessEntry(destinationProtocol, destinationDomain, allowDestinationSubdomains ? OriginAccessEntry::AllowSubdomains : OriginAccessEntry::DisallowSubdomains, OriginAccessEntry::TreatIPAddressAsIPAddress));
}
void SecurityPolicy::removeOriginAccessAllowlistEntry(const SecurityOrigin& sourceOrigin, const String& destinationProtocol, const String& destinationDomain, bool allowDestinationSubdomains)
@@ -250,15 +244,13 @@
if (sourceOrigin.isUnique())
return;
- String sourceString = sourceOrigin.toString();
-
Locker locker { originAccessMapLock };
- OriginAccessMap& map = originAccessMap();
- OriginAccessMap::iterator it = map.find(sourceString);
+ auto& map = originAccessMap();
+ auto it = map.find(sourceOrigin.data());
if (it == map.end())
return;
- OriginAccessAllowlist& list = *it->value;
+ auto& list = *it->value;
OriginAccessEntry originAccessEntry(destinationProtocol, destinationDomain, allowDestinationSubdomains ? OriginAccessEntry::AllowSubdomains : OriginAccessEntry::DisallowSubdomains, OriginAccessEntry::TreatIPAddressAsIPAddress);
if (!list.removeFirst(originAccessEntry))
return;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes