Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / modules / indexeddb / IDBCursor.h
index 1865991..be9afbc 100644 (file)
 #include "wtf/RefCounted.h"
 #include "wtf/RefPtr.h"
 
+namespace blink {
+
+class WebBlobInfo;
+
+} // namespace blink
+
 namespace WebCore {
 
-class DOMRequestState;
 class ExceptionState;
 class IDBAny;
 class IDBTransaction;
 class ExecutionContext;
 class SharedBuffer;
 
-class IDBCursor : public ScriptWrappable, public WTF::RefCountedBase {
+#if ENABLE(OILPAN)
+typedef GarbageCollectedFinalized<IDBCursor> IDBCursorBase;
+#else
+typedef WTF::RefCountedBase IDBCursorBase;
+#endif
+
+class IDBCursor : public IDBCursorBase, public ScriptWrappable {
 public:
     static const AtomicString& directionNext();
     static const AtomicString& directionNextUnique();
@@ -55,35 +66,39 @@ public:
     static blink::WebIDBCursor::Direction stringToDirection(const String& modeString, ExceptionState&);
     static const AtomicString& directionToString(unsigned short mode);
 
-    static PassRefPtr<IDBCursor> create(PassOwnPtr<blink::WebIDBCursor>, blink::WebIDBCursor::Direction, IDBRequest*, IDBAny* source, IDBTransaction*);
+    static PassRefPtrWillBeRawPtr<IDBCursor> create(PassOwnPtr<blink::WebIDBCursor>, blink::WebIDBCursor::Direction, IDBRequest*, IDBAny* source, IDBTransaction*);
     virtual ~IDBCursor();
+    void trace(Visitor*);
+    void contextWillBeDestroyed() { m_backend.clear(); }
 
     // Implement the IDL
     const String& direction() const { return directionToString(m_direction); }
-    ScriptValue key(ExecutionContext*);
-    ScriptValue primaryKey(ExecutionContext*);
-    ScriptValue value(ExecutionContext*);
-    ScriptValue source(ExecutionContext*) const;
+    ScriptValue key(ScriptState*);
+    ScriptValue primaryKey(ScriptState*);
+    ScriptValue value(ScriptState*);
+    ScriptValue source(ScriptState*) const;
 
-    PassRefPtr<IDBRequest> update(ScriptState*, ScriptValue&, ExceptionState&);
+    PassRefPtrWillBeRawPtr<IDBRequest> update(ExecutionContext*, ScriptValue&, ExceptionState&);
     void advance(unsigned long, ExceptionState&);
     void continueFunction(ExecutionContext*, const ScriptValue& key, ExceptionState&);
     void continuePrimaryKey(ExecutionContext*, const ScriptValue& key, const ScriptValue& primaryKey, ExceptionState&);
-    PassRefPtr<IDBRequest> deleteFunction(ExecutionContext*, ExceptionState&);
+    PassRefPtrWillBeRawPtr<IDBRequest> deleteFunction(ExecutionContext*, ExceptionState&);
 
     bool isKeyDirty() const { return m_keyDirty; }
     bool isPrimaryKeyDirty() const { return m_primaryKeyDirty; }
     bool isValueDirty() const { return m_valueDirty; }
 
-    void continueFunction(PassRefPtr<IDBKey>, PassRefPtr<IDBKey> primaryKey, ExceptionState&);
+    void continueFunction(PassRefPtrWillBeRawPtr<IDBKey>, PassRefPtrWillBeRawPtr<IDBKey> primaryKey, ExceptionState&);
     void postSuccessHandlerCallback();
+    bool isDeleted() const;
     void close();
-    void setValueReady(PassRefPtr<IDBKey>, PassRefPtr<IDBKey> primaryKey, PassRefPtr<SharedBuffer> value);
-    PassRefPtr<IDBKey> idbPrimaryKey() const { return m_primaryKey; }
+    void setValueReady(PassRefPtrWillBeRawPtr<IDBKey>, PassRefPtrWillBeRawPtr<IDBKey> primaryKey, PassRefPtr<SharedBuffer> value, PassOwnPtr<Vector<blink::WebBlobInfo> >);
+    PassRefPtrWillBeRawPtr<IDBKey> idbPrimaryKey() const { return m_primaryKey; }
     IDBRequest* request() const { return m_request.get(); }
     virtual bool isKeyCursor() const { return true; }
     virtual bool isCursorWithValue() const { return false; }
 
+#if !ENABLE(OILPAN)
     void deref()
     {
         if (derefBase())
@@ -91,28 +106,32 @@ public:
         else if (hasOneRef())
             checkForReferenceCycle();
     }
+#endif
 
 protected:
     IDBCursor(PassOwnPtr<blink::WebIDBCursor>, blink::WebIDBCursor::Direction, IDBRequest*, IDBAny* source, IDBTransaction*);
 
 private:
-    PassRefPtr<IDBObjectStore> effectiveObjectStore() const;
+    PassRefPtrWillBeRawPtr<IDBObjectStore> effectiveObjectStore() const;
+    void handleBlobAcks();
 
+#if !ENABLE(OILPAN)
     void checkForReferenceCycle();
-    bool isDeleted() const;
+#endif
 
     OwnPtr<blink::WebIDBCursor> m_backend;
-    RefPtr<IDBRequest> m_request;
+    RefPtrWillBeMember<IDBRequest> m_request;
     const blink::WebIDBCursor::Direction m_direction;
-    RefPtr<IDBAny> m_source;
-    RefPtr<IDBTransaction> m_transaction;
+    RefPtrWillBeMember<IDBAny> m_source;
+    RefPtrWillBeMember<IDBTransaction> m_transaction;
     bool m_gotValue;
     bool m_keyDirty;
     bool m_primaryKeyDirty;
     bool m_valueDirty;
-    RefPtr<IDBKey> m_key;
-    RefPtr<IDBKey> m_primaryKey;
+    RefPtrWillBeMember<IDBKey> m_key;
+    RefPtrWillBeMember<IDBKey> m_primaryKey;
     RefPtr<SharedBuffer> m_value;
+    OwnPtr<Vector<blink::WebBlobInfo> > m_blobInfo;
 };
 
 } // namespace WebCore