diff options
Diffstat (limited to 'Source/WebCore/Modules/indexeddb/IDBIndex.h')
-rw-r--r-- | Source/WebCore/Modules/indexeddb/IDBIndex.h | 161 |
1 files changed, 84 insertions, 77 deletions
diff --git a/Source/WebCore/Modules/indexeddb/IDBIndex.h b/Source/WebCore/Modules/indexeddb/IDBIndex.h index f954ad6ac..b3134fde2 100644 --- a/Source/WebCore/Modules/indexeddb/IDBIndex.h +++ b/Source/WebCore/Modules/indexeddb/IDBIndex.h @@ -1,101 +1,108 @@ /* - * Copyright (C) 2010 Google Inc. All rights reserved. + * Copyright (C) 2015 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. * - * 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 AND ITS CONTRIBUTORS "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 OR ITS 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. + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``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 ITS 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. */ -#ifndef IDBIndex_h -#define IDBIndex_h +#pragma once + +#if ENABLE(INDEXED_DATABASE) #include "IDBCursor.h" -#include "IDBDatabase.h" -#include "IDBDatabaseMetadata.h" -#include "IDBKeyPath.h" -#include "IDBKeyRange.h" -#include "IDBObjectStore.h" +#include "IDBIndexInfo.h" #include "IDBRequest.h" -#include "ScriptWrappable.h" -#include <wtf/Forward.h> -#include <wtf/text/WTFString.h> -#if ENABLE(INDEXED_DATABASE) +namespace JSC { +class ExecState; +} namespace WebCore { -class IDBObjectStore; +class IDBKeyRange; + +struct IDBKeyRangeData; -class IDBIndex : public ScriptWrappable, public RefCounted<IDBIndex> { +class IDBIndex final : private ActiveDOMObject { public: - static PassRefPtr<IDBIndex> create(const IDBIndexMetadata& metadata, IDBObjectStore* objectStore, IDBTransaction* transaction) - { - return adoptRef(new IDBIndex(metadata, objectStore, transaction)); - } - ~IDBIndex(); - - // Implement the IDL - const String name() const { return m_metadata.name; } - PassRefPtr<IDBObjectStore> objectStore() const { return m_objectStore; } - PassRefPtr<IDBAny> keyPathAny() const { return IDBAny::create(m_metadata.keyPath); } - const IDBKeyPath keyPath() const { return m_metadata.keyPath; } - bool unique() const { return m_metadata.unique; } - bool multiEntry() const { return m_metadata.multiEntry; } - int64_t id() const { return m_metadata.id; } - - // FIXME: Try to modify the code generator so this is unneeded. - PassRefPtr<IDBRequest> openCursor(ScriptExecutionContext* context, ExceptionCode& ec) { return openCursor(context, static_cast<IDBKeyRange*>(0), ec); } - PassRefPtr<IDBRequest> openCursor(ScriptExecutionContext* context, PassRefPtr<IDBKeyRange> keyRange, ExceptionCode& ec) { return openCursor(context, keyRange, IDBCursor::directionNext(), ec); } - PassRefPtr<IDBRequest> openCursor(ScriptExecutionContext* context, const Deprecated::ScriptValue& key, ExceptionCode& ec) { return openCursor(context, key, IDBCursor::directionNext(), ec); } - PassRefPtr<IDBRequest> openCursor(ScriptExecutionContext*, PassRefPtr<IDBKeyRange>, const String& direction, ExceptionCode&); - PassRefPtr<IDBRequest> openCursor(ScriptExecutionContext*, const Deprecated::ScriptValue& key, const String& direction, ExceptionCode&); - PassRefPtr<IDBRequest> count(ScriptExecutionContext* context, ExceptionCode& ec) { return count(context, static_cast<IDBKeyRange*>(0), ec); } - PassRefPtr<IDBRequest> count(ScriptExecutionContext*, PassRefPtr<IDBKeyRange>, ExceptionCode&); - PassRefPtr<IDBRequest> count(ScriptExecutionContext*, const Deprecated::ScriptValue& key, ExceptionCode&); - - PassRefPtr<IDBRequest> openKeyCursor(ScriptExecutionContext* context, ExceptionCode& ec) { return openKeyCursor(context, static_cast<IDBKeyRange*>(0), ec); } - PassRefPtr<IDBRequest> openKeyCursor(ScriptExecutionContext* context, PassRefPtr<IDBKeyRange> keyRange, ExceptionCode& ec) { return openKeyCursor(context, keyRange, IDBCursor::directionNext(), ec); } - PassRefPtr<IDBRequest> openKeyCursor(ScriptExecutionContext* context, const Deprecated::ScriptValue& key, ExceptionCode& ec) { return openKeyCursor(context, key, IDBCursor::directionNext(), ec); } - PassRefPtr<IDBRequest> openKeyCursor(ScriptExecutionContext*, PassRefPtr<IDBKeyRange>, const String& direction, ExceptionCode&); - PassRefPtr<IDBRequest> openKeyCursor(ScriptExecutionContext*, const Deprecated::ScriptValue& key, const String& direction, ExceptionCode&); - - PassRefPtr<IDBRequest> get(ScriptExecutionContext*, PassRefPtr<IDBKeyRange>, ExceptionCode&); - PassRefPtr<IDBRequest> get(ScriptExecutionContext*, const Deprecated::ScriptValue& key, ExceptionCode&); - PassRefPtr<IDBRequest> getKey(ScriptExecutionContext*, PassRefPtr<IDBKeyRange>, ExceptionCode&); - PassRefPtr<IDBRequest> getKey(ScriptExecutionContext*, const Deprecated::ScriptValue& key, ExceptionCode&); - - void markDeleted() { m_deleted = true; } - - IDBDatabaseBackend* backendDB() const; + IDBIndex(ScriptExecutionContext&, const IDBIndexInfo&, IDBObjectStore&); + + virtual ~IDBIndex(); + + const String& name() const; + ExceptionOr<void> setName(const String&); + IDBObjectStore& objectStore(); + const IDBKeyPath& keyPath() const; + bool unique() const; + bool multiEntry() const; + + void rollbackInfoForVersionChangeAbort(); + + ExceptionOr<Ref<IDBRequest>> openCursor(JSC::ExecState&, IDBKeyRange*, IDBCursorDirection); + ExceptionOr<Ref<IDBRequest>> openCursor(JSC::ExecState&, JSC::JSValue key, IDBCursorDirection); + ExceptionOr<Ref<IDBRequest>> openKeyCursor(JSC::ExecState&, IDBKeyRange*, IDBCursorDirection); + ExceptionOr<Ref<IDBRequest>> openKeyCursor(JSC::ExecState&, JSC::JSValue key, IDBCursorDirection); + + ExceptionOr<Ref<IDBRequest>> count(JSC::ExecState&, IDBKeyRange*); + ExceptionOr<Ref<IDBRequest>> count(JSC::ExecState&, JSC::JSValue key); + + ExceptionOr<Ref<IDBRequest>> get(JSC::ExecState&, IDBKeyRange*); + ExceptionOr<Ref<IDBRequest>> get(JSC::ExecState&, JSC::JSValue key); + ExceptionOr<Ref<IDBRequest>> getKey(JSC::ExecState&, IDBKeyRange*); + ExceptionOr<Ref<IDBRequest>> getKey(JSC::ExecState&, JSC::JSValue key); + + ExceptionOr<Ref<IDBRequest>> getAll(JSC::ExecState&, RefPtr<IDBKeyRange>, std::optional<uint32_t> count); + ExceptionOr<Ref<IDBRequest>> getAll(JSC::ExecState&, JSC::JSValue key, std::optional<uint32_t> count); + ExceptionOr<Ref<IDBRequest>> getAllKeys(JSC::ExecState&, RefPtr<IDBKeyRange>, std::optional<uint32_t> count); + ExceptionOr<Ref<IDBRequest>> getAllKeys(JSC::ExecState&, JSC::JSValue key, std::optional<uint32_t> count); + + const IDBIndexInfo& info() const { return m_info; } + + void markAsDeleted(); + bool isDeleted() const { return m_deleted; } + + void ref(); + void deref(); + + void* objectStoreAsOpaqueRoot() { return &m_objectStore; } private: - IDBIndex(const IDBIndexMetadata&, IDBObjectStore*, IDBTransaction*); + ExceptionOr<Ref<IDBRequest>> doCount(JSC::ExecState&, const IDBKeyRangeData&); + ExceptionOr<Ref<IDBRequest>> doGet(JSC::ExecState&, const IDBKeyRangeData&); + ExceptionOr<Ref<IDBRequest>> doGetKey(JSC::ExecState&, const IDBKeyRangeData&); + + const char* activeDOMObjectName() const final; + bool canSuspendForDocumentSuspension() const final; + bool hasPendingActivity() const final; + + IDBIndexInfo m_info; + IDBIndexInfo m_originalInfo; - IDBIndexMetadata m_metadata; - RefPtr<IDBObjectStore> m_objectStore; - RefPtr<IDBTransaction> m_transaction; - bool m_deleted; + bool m_deleted { false }; + + // IDBIndex objects are always owned by their referencing IDBObjectStore. + // Indexes will never outlive ObjectStores so its okay to keep a raw C++ reference here. + IDBObjectStore& m_objectStore; }; } // namespace WebCore -#endif - -#endif // IDBIndex_h +#endif // ENABLE(INDEXED_DATABASE) |