#ifndef Storage_h
#define Storage_h
#include "bindings/v8/ScriptWrappable.h"
#include "bindings/v8/V8Binding.h"
#include "core/frame/DOMWindowProperty.h"
#include "core/storage/StorageArea.h"
#include "heap/Handle.h"
#include "wtf/Forward.h"
#include "wtf/RefCounted.h"
#include "wtf/RefPtr.h"
namespace WebCore {
class ExceptionState;
class LocalFrame;
class Storage FINAL : public RefCountedWillBeGarbageCollectedFinalized<Storage>, public ScriptWrappable, public DOMWindowProperty {
public:
static PassRefPtrWillBeRawPtr<Storage> create(LocalFrame*, PassOwnPtrWillBeRawPtr<StorageArea>);
virtual ~Storage();
unsigned length(ExceptionState& ec) const { return m_storageArea->length(ec, m_frame); }
String key(unsigned index, ExceptionState& ec) const { return m_storageArea->key(index, ec, m_frame); }
String getItem(const String& key, ExceptionState& ec) const { return m_storageArea->getItem(key, ec, m_frame); }
void setItem(const String& key, const String& value, ExceptionState& ec) { m_storageArea->setItem(key, value, ec, m_frame); }
void removeItem(const String& key, ExceptionState& ec) { m_storageArea->removeItem(key, ec, m_frame); }
void clear(ExceptionState& ec) { m_storageArea->clear(ec, m_frame); }
bool contains(const String& key, ExceptionState& ec) const { return m_storageArea->contains(key, ec, m_frame); }
StorageArea* area() const { return m_storageArea.get(); }
String anonymousIndexedGetter(unsigned, ExceptionState&);
String anonymousNamedGetter(const AtomicString&, ExceptionState&);
bool anonymousNamedSetter(const AtomicString& name, const AtomicString& value, ExceptionState&);
bool anonymousIndexedSetter(unsigned, const AtomicString&, ExceptionState&);
DeleteResult anonymousNamedDeleter(const AtomicString&, ExceptionState&);
DeleteResult anonymousIndexedDeleter(unsigned, ExceptionState&);
void namedPropertyEnumerator(Vector<String>&, ExceptionState&);
bool namedPropertyQuery(const AtomicString&, ExceptionState&);
void trace(Visitor*);
private:
Storage(LocalFrame*, PassOwnPtrWillBeRawPtr<StorageArea>);
OwnPtrWillBeMember<StorageArea> m_storageArea;
};
}
#endif