StorageNamespaceImpl::~StorageNamespaceImpl()
{
    ASSERT(isMainThread() || pthread_main_np());

    if (m_storageType == LocalStorage) {
        ASSERT(localStorageNamespaceMap().get(m_path) == this);
        localStorageNamespaceMap().remove(m_path);
    }

    if (!m_isShutdown)
        close();
}
PassRefPtr<StorageNamespace> StorageNamespaceImpl::localStorageNamespace(const String& path, unsigned quota)
{
    const String lookupPath = path.isNull() ? String("") : path;
    LocalStorageNamespaceMap::iterator it = localStorageNamespaceMap().find(lookupPath);
    if (it == localStorageNamespaceMap().end()) {
        RefPtr<StorageNamespace> storageNamespace = adoptRef(new StorageNamespaceImpl(LocalStorage, lookupPath, quota));
        localStorageNamespaceMap().set(lookupPath, storageNamespace.get());
        return storageNamespace.release();
    }

    return it->second;
}
Esempio n. 3
0
Ref<StorageNamespaceImpl> StorageNamespaceImpl::getOrCreateLocalStorageNamespace(const String& databasePath, unsigned quota)
{
    ASSERT(!databasePath.isNull());

    auto& slot = localStorageNamespaceMap().add(databasePath, nullptr).iterator->value;
    if (slot)
        return *slot;

    Ref<StorageNamespaceImpl> storageNamespace = adoptRef(*new StorageNamespaceImpl(LocalStorage, databasePath, quota));
    slot = storageNamespace.ptr();

    return storageNamespace;
}
Esempio n. 4
0
PassRefPtr<StorageNamespace> StorageNamespaceImpl::localStorageNamespace(PageGroup* pageGroup)
{
    // Need a page in this page group to query the settings for the local storage database path.
    // Having these parameters attached to the page settings is unfortunate since these settings are
    // not per-page (and, in fact, we simply grab the settings from some page at random), but
    // at this point we're stuck with it.
    Page* page = *pageGroup->pages().begin();
    const String& path = page->settings()->localStorageDatabasePath();
    unsigned quota = pageGroup->groupSettings()->localStorageQuotaBytes();
    const String lookupPath = path.isNull() ? emptyString() : path;

    LocalStorageNamespaceMap::AddResult result = localStorageNamespaceMap().add(lookupPath, 0);
    if (!result.isNewEntry)
        return result.iterator->value;

    RefPtr<StorageNamespace> storageNamespace = adoptRef(new StorageNamespaceImpl(LocalStorage, lookupPath, quota));

    result.iterator->value = storageNamespace.get();
    return storageNamespace.release();
}