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; } } return false; }
void SecurityPolicy::addOriginAccessWhitelistEntry(const SecurityOrigin& sourceOrigin, const String& destinationProtocol, const String& destinationDomain, bool allowDestinationSubdomains) { ASSERT(isMainThread()); ASSERT(!sourceOrigin.isUnique()); if (sourceOrigin.isUnique()) return; String sourceString = sourceOrigin.toString(); pair<OriginAccessMap::iterator, bool> result = originAccessMap().add(sourceString, nullptr); if (result.second) result.first->second = adoptPtr(new OriginAccessWhiteList); OriginAccessWhiteList* list = result.first->second.get(); list->append(OriginAccessEntry(destinationProtocol, destinationDomain, allowDestinationSubdomains ? OriginAccessEntry::AllowSubdomains : OriginAccessEntry::DisallowSubdomains)); }
void SecurityPolicy::addOriginAccessWhitelistEntry(const SecurityOrigin& sourceOrigin, const String& destinationProtocol, const String& destinationDomain, bool allowDestinationSubdomains) { ASSERT(isMainThread()); ASSERT(!sourceOrigin.isUnique()); if (sourceOrigin.isUnique()) return; String sourceString = sourceOrigin.toString(); OriginAccessMap::AddResult result = originAccessMap().add(sourceString, nullptr); if (result.isNewEntry) result.iterator->value = std::make_unique<OriginAccessWhiteList>(); OriginAccessWhiteList* list = result.iterator->value.get(); list->append(OriginAccessEntry(destinationProtocol, destinationDomain, allowDestinationSubdomains ? OriginAccessEntry::AllowSubdomains : OriginAccessEntry::DisallowSubdomains)); }
void SecurityPolicy::removeOriginAccessWhitelistEntry(const SecurityOrigin& sourceOrigin, const String& destinationProtocol, const String& destinationDomain, bool allowDestinationSubdomains) { ASSERT(isMainThread()); ASSERT(!sourceOrigin.isUnique()); if (sourceOrigin.isUnique()) return; String sourceString = sourceOrigin.toString(); OriginAccessMap& map = originAccessMap(); OriginAccessMap::iterator it = map.find(sourceString); if (it == map.end()) return; OriginAccessWhiteList& list = *it->value; OriginAccessEntry originAccessEntry(destinationProtocol, destinationDomain, allowDestinationSubdomains ? OriginAccessEntry::AllowSubdomains : OriginAccessEntry::DisallowSubdomains); if (!list.removeFirst(originAccessEntry)) return; if (list.isEmpty()) map.remove(it); }
void SecurityPolicy::removeOriginAccessWhitelistEntry(const SecurityOrigin& sourceOrigin, const String& destinationProtocol, const String& destinationDomain, bool allowDestinationSubdomains) { ASSERT(isMainThread()); ASSERT(!sourceOrigin.isUnique()); if (sourceOrigin.isUnique()) return; String sourceString = sourceOrigin.toString(); OriginAccessMap& map = originAccessMap(); OriginAccessMap::iterator it = map.find(sourceString); if (it == map.end()) return; OriginAccessWhiteList* list = it->second.get(); size_t index = list->find(OriginAccessEntry(destinationProtocol, destinationDomain, allowDestinationSubdomains ? OriginAccessEntry::AllowSubdomains : OriginAccessEntry::DisallowSubdomains)); if (index == notFound) return; list->remove(index); if (list->isEmpty()) map.remove(it); }
void SecurityPolicy::resetOriginAccessWhitelists() { ASSERT(isMainThread()); originAccessMap().clear(); }