String IDBDatabaseIdentifier::databaseDirectoryRelativeToRoot(const SecurityOriginData& topLevelOrigin, const SecurityOriginData& openingOrigin, const String& rootDirectory) { String mainFrameDirectory = pathByAppendingComponent(rootDirectory, topLevelOrigin.databaseIdentifier()); // If the opening origin and main frame origins are the same, there is no partitioning. if (openingOrigin == topLevelOrigin) return mainFrameDirectory; return pathByAppendingComponent(mainFrameDirectory, openingOrigin.databaseIdentifier()); }
bool WebsiteData::Entry::decode(IPC::ArgumentDecoder& decoder, WebsiteData::Entry& result) { SecurityOriginData securityOriginData; if (!decoder.decode(securityOriginData)) return false; if (!decoder.decodeEnum(result.type)) return false; result.origin = securityOriginData.securityOrigin(); return true; }
static void dispatchToMainThread(WebDatabaseManager* databaseManager, const SecurityOriginData& origin) { DidModifyOriginData* context = new DidModifyOriginData(databaseManager, origin.isolatedCopy()); callOnMainThread([context] { dispatchDidModifyOriginOnMainThread(context); }); }
void DatabaseProcess::deleteIndexedDatabaseEntriesForOrigin(const SecurityOriginData& originData) { if (m_indexedDatabaseDirectory.isEmpty()) return; RefPtr<SecurityOrigin> origin = originData.securityOrigin(); String databaseIdentifier = origin->databaseIdentifier(); String originPath = pathByAppendingComponent(m_indexedDatabaseDirectory, databaseIdentifier); removeAllDatabasesForOriginPath(originPath, std::numeric_limits<double>::lowest(), std::numeric_limits<double>::max()); }
void LocalStorageDatabaseTracker::deleteDatabaseWithOrigin(const SecurityOriginData& securityOrigin) { removeDatabaseWithOriginIdentifier(securityOrigin.databaseIdentifier()); }
void LocalStorageDatabaseTracker::didOpenDatabaseWithOrigin(const SecurityOriginData& securityOrigin) { addDatabaseWithOriginIdentifier(securityOrigin.databaseIdentifier(), databasePath(securityOrigin)); }
String LocalStorageDatabaseTracker::databasePath(const SecurityOriginData& securityOrigin) const { return databasePath(securityOrigin.databaseIdentifier() + ".localstorage"); }
void WebDatabaseManager::dispatchDidModifyDatabase(const SecurityOriginData& origin, const String& databaseName) { if (!isMainThread()) { DidModifyOriginData::dispatchToMainThread(this, origin); return; } static BSTR databaseDidModifyOriginName = SysAllocString(WebDatabaseDidModifyDatabaseNotification); IWebNotificationCenter* notifyCenter = WebNotificationCenter::defaultCenterInternal(); COMPtr<WebSecurityOrigin> securityOrigin(AdoptCOM, WebSecurityOrigin::createInstance(origin.securityOrigin().ptr())); HashMap<String, String> userInfo; userInfo.set(WebDatabaseNameKey, databaseName); COMPtr<IPropertyBag> userInfoBag(AdoptCOM, COMPropertyBag<String>::adopt(userInfo)); notifyCenter->postNotificationName(databaseDidModifyOriginName, securityOrigin.get(), userInfoBag.get()); }
void WebDatabaseManager::dispatchDidModifyOrigin(const SecurityOriginData& origin) { if (!isMainThread()) { DidModifyOriginData::dispatchToMainThread(this, origin); return; } static BSTR databaseDidModifyOriginName = SysAllocString(WebDatabaseDidModifyOriginNotification); IWebNotificationCenter* notifyCenter = WebNotificationCenter::defaultCenterInternal(); COMPtr<WebSecurityOrigin> securityOrigin(AdoptCOM, WebSecurityOrigin::createInstance(origin.securityOrigin().ptr())); notifyCenter->postNotificationName(databaseDidModifyOriginName, securityOrigin.get(), 0); }