📄 storagearea.cpp
字号:
/* * Copyright (C) 2008 Apple Inc. All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "config.h"#include "StorageArea.h"#include "CString.h"#include "ExceptionCode.h"#include "SecurityOrigin.h"#include "StorageMap.h"namespace WebCore {StorageArea::StorageArea(SecurityOrigin* origin) : m_securityOrigin(origin) , m_storageMap(StorageMap::create()){}StorageArea::StorageArea(SecurityOrigin* origin, StorageArea* area) : m_securityOrigin(origin) , m_storageMap(area->m_storageMap){}StorageArea::~StorageArea(){}unsigned StorageArea::internalLength() const{ return m_storageMap->length();}String StorageArea::internalKey(unsigned index, ExceptionCode& ec) const{ String key; if (!m_storageMap->key(index, key)) { ec = INDEX_SIZE_ERR; return String(); } return key;}String StorageArea::internalGetItem(const String& key) const{ return m_storageMap->getItem(key);}void StorageArea::internalSetItem(const String& key, const String& value, ExceptionCode&, Frame* frame){ ASSERT(!value.isNull()); // FIXME: For LocalStorage where a disk quota will be enforced, here is where we need to do quota checking. // If we decide to enforce a memory quota for SessionStorage, this is where we'd do that, also. // if (<over quota>) { // ec = INVALID_ACCESS_ERR; // return; // } String oldValue; RefPtr<StorageMap> newMap = m_storageMap->setItem(key, value, oldValue); if (newMap) m_storageMap = newMap.release(); // Only notify the client if an item was actually changed if (oldValue != value) itemChanged(key, oldValue, value, frame);}void StorageArea::internalRemoveItem(const String& key, Frame* frame){ String oldValue; RefPtr<StorageMap> newMap = m_storageMap->removeItem(key, oldValue); if (newMap) m_storageMap = newMap.release(); // Only notify the client if an item was actually removed if (!oldValue.isNull()) itemRemoved(key, oldValue, frame);}void StorageArea::internalClear(Frame* frame){ m_storageMap = StorageMap::create(); areaCleared(frame);}bool StorageArea::internalContains(const String& key) const{ return m_storageMap->contains(key);}void StorageArea::importItem(const String& key, const String& value){ m_storageMap->importItem(key, value);}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -