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)); }
static inline bool areOriginsMatching(const SecurityOrigin& origin1, const SecurityOrigin& origin2) { if (origin1.isUnique() || origin2.isUnique()) return origin1.isUnique() == origin2.isUnique(); if (origin1.protocol() != origin2.protocol()) return false; if (origin1.protocol() == "file") return true; if (origin1.host() != origin2.host()) return false; return origin1.port() == origin2.port(); }
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); }
ScriptPromise StorageQuota::queryInfo(ExecutionContext* executionContext, String type) { ASSERT(executionContext); ScriptPromise promise = ScriptPromise::createPending(executionContext); RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(promise, executionContext); SecurityOrigin* securityOrigin = executionContext->securityOrigin(); if (securityOrigin->isUnique()) { resolver->reject(DOMError::create(NotSupportedError)); return promise; } KURL storagePartition = KURL(KURL(), securityOrigin->toString()); blink::Platform::current()->queryStorageUsageAndQuota(storagePartition, stringToStorageQuotaType(type), WebStorageQuotaCallbacksImpl::createLeakedPtr(resolver, executionContext)); return promise; }
void DeprecatedStorageQuota::queryUsageAndQuota(ExecutionContext* executionContext, PassOwnPtr<StorageUsageCallback> successCallback, PassOwnPtr<StorageErrorCallback> errorCallback) { ASSERT(executionContext); blink::WebStorageQuotaType storageType = static_cast<blink::WebStorageQuotaType>(m_type); if (storageType != blink::WebStorageQuotaTypeTemporary && storageType != blink::WebStorageQuotaTypePersistent) { // Unknown storage type is requested. executionContext->postTask(StorageErrorCallback::CallbackTask::create(errorCallback, NotSupportedError)); return; } SecurityOrigin* securityOrigin = executionContext->securityOrigin(); if (securityOrigin->isUnique()) { executionContext->postTask(StorageErrorCallback::CallbackTask::create(errorCallback, NotSupportedError)); return; } KURL storagePartition = KURL(KURL(), securityOrigin->toString()); OwnPtr<StorageQuotaCallbacks> callbacks = DeprecatedStorageQuotaCallbacksImpl::create(successCallback, errorCallback); blink::Platform::current()->queryStorageUsageAndQuota(storagePartition, storageType, callbacks.release()); }