WebCore/ChangeLog

 12010-07-13 Marcus Bulach <bulach@chromium.org>
 2
 3 Reviewed by NOBODY (OOPS!).
 4
 5 Removes cycles caused by "m_this" members in a few IndexedDB classes.
 6 https://bugs.webkit.org/show_bug.cgi?id=42161
 7
 8 Adds IDBAny::create for the various types.
 9 No functionality change, just cleaning up.
 10
 11 * storage/IDBAny.cpp:
 12 (WebCore::createIDBAny):
 13 (WebCore::IDBAny::create):
 14 * storage/IDBAny.h:
 15 * storage/IDBDatabaseRequest.cpp:
 16 (WebCore::IDBDatabaseRequest::IDBDatabaseRequest):
 17 (WebCore::IDBDatabaseRequest::createObjectStore):
 18 (WebCore::IDBDatabaseRequest::removeObjectStore):
 19 * storage/IDBDatabaseRequest.h:
 20 * storage/IDBKeyRange.cpp:
 21 (WebCore::IDBKeyRange::IDBKeyRange):
 22 * storage/IDBKeyRange.h:
 23 (WebCore::IDBKeyRange::left):
 24 (WebCore::IDBKeyRange::right):
 25 * storage/IDBObjectStoreRequest.cpp:
 26 (WebCore::IDBObjectStoreRequest::IDBObjectStoreRequest):
 27 (WebCore::IDBObjectStoreRequest::get):
 28 (WebCore::IDBObjectStoreRequest::add):
 29 (WebCore::IDBObjectStoreRequest::put):
 30 (WebCore::IDBObjectStoreRequest::remove):
 31 (WebCore::IDBObjectStoreRequest::createIndex):
 32 (WebCore::IDBObjectStoreRequest::removeIndex):
 33 * storage/IDBObjectStoreRequest.h:
 34 * storage/IndexedDatabaseRequest.cpp:
 35 (WebCore::IndexedDatabaseRequest::IndexedDatabaseRequest):
 36 (WebCore::IndexedDatabaseRequest::open):
 37 * storage/IndexedDatabaseRequest.h:
 38
1392010-07-13 Andreas Kling <andreas.kling@nokia.com>
240
341 Reviewed by Antti Koivisto.

WebCore/storage/IDBAny.h

@@class SerializedScriptValue;
4444class IDBAny : public RefCounted<IDBAny> {
4545public:
4646 static PassRefPtr<IDBAny> create();
 47 // Only valid with T accepted by set().
 48 template<typename T>
 49 static PassRefPtr<IDBAny> create(PassRefPtr<T> idbObject)
 50 {
 51 RefPtr<IDBAny> any = IDBAny::create();
 52 any->set(idbObject);
 53 return any.release();
 54 }
4755 ~IDBAny();
4856
4957 enum Type {

WebCore/storage/IDBDatabaseRequest.cpp

@@namespace WebCore {
3939IDBDatabaseRequest::IDBDatabaseRequest(PassRefPtr<IDBDatabase> database)
4040 : m_database(database)
4141{
42  m_this = IDBAny::create();
4342 // We pass a reference to this object before it can be adopted.
4443 relaxAdoptionRequirement();
45  m_this->set(this);
4644}
4745
4846IDBDatabaseRequest::~IDBDatabaseRequest()

@@IDBDatabaseRequest::~IDBDatabaseRequest()
5149
5250PassRefPtr<IDBRequest> IDBDatabaseRequest::createObjectStore(ScriptExecutionContext* context, const String& name, const String& keyPath, bool autoIncrement)
5351{
54  RefPtr<IDBRequest> request = IDBRequest::create(context, m_this);
 52 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create<IDBDatabaseRequest>(this));
5553 m_database->createObjectStore(name, keyPath, autoIncrement, request);
5654 return request;
5755}

@@PassRefPtr<IDBObjectStoreRequest> IDBDatabaseRequest::objectStore(const String&
6563
6664PassRefPtr<IDBRequest> IDBDatabaseRequest::removeObjectStore(ScriptExecutionContext* context, const String& name)
6765{
68  RefPtr<IDBRequest> request = IDBRequest::create(context, m_this);
 66 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create<IDBDatabaseRequest>(this));
6967 m_database->removeObjectStore(name, request);
7068 return request;
7169}

WebCore/storage/IDBDatabaseRequest.h

@@private:
6363 IDBDatabaseRequest(PassRefPtr<IDBDatabase>);
6464
6565 RefPtr<IDBDatabase> m_database;
66  RefPtr<IDBAny> m_this;
6766};
6867
6968} // namespace WebCore

WebCore/storage/IDBKeyRange.cpp

3434namespace WebCore {
3535
3636IDBKeyRange::IDBKeyRange(PassRefPtr<SerializedScriptValue> left, PassRefPtr<SerializedScriptValue> right, unsigned short flags)
37  : m_left(IDBAny::create())
38  , m_right(IDBAny::create())
 37 : m_left(left)
 38 , m_right(right)
3939 , m_flags(flags)
4040{
41  m_left->set(left);
42  m_right->set(right);
4341}
4442
4543} // namespace WebCore

WebCore/storage/IDBKeyRange.h

@@public:
5353 ~IDBKeyRange() { }
5454
5555
56  PassRefPtr<IDBAny> left() const { return m_left; }
57  PassRefPtr<IDBAny> right() const { return m_right; }
 56 PassRefPtr<IDBAny> left() const { return IDBAny::create<SerializedScriptValue>(m_left); }
 57 PassRefPtr<IDBAny> right() const { return IDBAny::create<SerializedScriptValue>(m_right); }
5858 unsigned short flags() const { return m_flags; }
5959
6060private:
6161 IDBKeyRange(PassRefPtr<SerializedScriptValue> left, PassRefPtr<SerializedScriptValue> right, unsigned short flags);
6262
63  RefPtr<IDBAny> m_left;
64  RefPtr<IDBAny> m_right;
 63 RefPtr<SerializedScriptValue> m_left;
 64 RefPtr<SerializedScriptValue> m_right;
6565 unsigned short m_flags;
6666};
6767

WebCore/storage/IDBObjectStoreRequest.cpp

@@namespace WebCore {
4040IDBObjectStoreRequest::IDBObjectStoreRequest(PassRefPtr<IDBObjectStore> idbObjectStore)
4141 : m_objectStore(idbObjectStore)
4242{
43  m_this = IDBAny::create();
4443 // We pass a reference to this object before it can be adopted.
4544 relaxAdoptionRequirement();
46  m_this->set(this);
4745}
4846
4947String IDBObjectStoreRequest::name() const

@@PassRefPtr<DOMStringList> IDBObjectStoreRequest::indexNames() const
6361
6462PassRefPtr<IDBRequest> IDBObjectStoreRequest::get(ScriptExecutionContext* context, PassRefPtr<IDBKey> key)
6563{
66  RefPtr<IDBRequest> request = IDBRequest::create(context, m_this);
 64 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create<IDBObjectStoreRequest>(this));
6765 m_objectStore->get(key, request);
6866 return request;
6967}
7068
7169PassRefPtr<IDBRequest> IDBObjectStoreRequest::add(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key)
7270{
73  RefPtr<IDBRequest> request = IDBRequest::create(context, m_this);
 71 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create<IDBObjectStoreRequest>(this));
7472 m_objectStore->put(value, key, true, request);
7573 return request;
7674}
7775
7876PassRefPtr<IDBRequest> IDBObjectStoreRequest::put(ScriptExecutionContext* context, PassRefPtr<SerializedScriptValue> value, PassRefPtr<IDBKey> key)
7977{
80  RefPtr<IDBRequest> request = IDBRequest::create(context, m_this);
 78 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create<IDBObjectStoreRequest>(this));
8179 m_objectStore->put(value, key, false, request);
8280 return request;
8381}
8482
8583PassRefPtr<IDBRequest> IDBObjectStoreRequest::remove(ScriptExecutionContext* context, PassRefPtr<IDBKey> key)
8684{
87  RefPtr<IDBRequest> request = IDBRequest::create(context, m_this);
 85 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create<IDBObjectStoreRequest>(this));
8886 m_objectStore->remove(key, request);
8987 return request;
9088}
9189
9290PassRefPtr<IDBRequest> IDBObjectStoreRequest::createIndex(ScriptExecutionContext* context, const String& name, const String& keyPath, bool unique)
9391{
94  RefPtr<IDBRequest> request = IDBRequest::create(context, m_this);
 92 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create<IDBObjectStoreRequest>(this));
9593 m_objectStore->createIndex(name, keyPath, unique, request);
9694 return request;
9795}

@@PassRefPtr<IDBIndexRequest> IDBObjectStoreRequest::index(const String& name)
105103
106104PassRefPtr<IDBRequest> IDBObjectStoreRequest::removeIndex(ScriptExecutionContext* context, const String& name)
107105{
108  RefPtr<IDBRequest> request = IDBRequest::create(context, m_this);
 106 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create<IDBObjectStoreRequest>(this));
109107 m_objectStore->removeIndex(name, request);
110108 return request;
111109}

WebCore/storage/IDBObjectStoreRequest.h

@@private:
6868 IDBObjectStoreRequest(PassRefPtr<IDBObjectStore>);
6969
7070 RefPtr<IDBObjectStore> m_objectStore;
71  RefPtr<IDBAny> m_this;
7271};
7372
7473} // namespace WebCore

WebCore/storage/IndexedDatabaseRequest.cpp

@@namespace WebCore {
4444IndexedDatabaseRequest::IndexedDatabaseRequest(IndexedDatabase* indexedDatabase)
4545 : m_indexedDatabase(indexedDatabase)
4646{
47  m_this = IDBAny::create();
4847 // We pass a reference to this object before it can be adopted.
4948 relaxAdoptionRequirement();
50  m_this->set(this);
5149}
5250
5351IndexedDatabaseRequest::~IndexedDatabaseRequest()

@@PassRefPtr<IDBRequest> IndexedDatabaseRequest::open(ScriptExecutionContext* cont
6563 if (!document->frame())
6664 return 0;
6765
68  RefPtr<IDBRequest> request = IDBRequest::create(document, m_this);
 66 RefPtr<IDBRequest> request = IDBRequest::create(document, IDBAny::create<IndexedDatabaseRequest>(this));
6967 m_indexedDatabase->open(name, description, request, document->securityOrigin(), document->frame());
7068 return request;
7169}

WebCore/storage/IndexedDatabaseRequest.h

@@private:
6464 IndexedDatabaseRequest(IndexedDatabase*);
6565
6666 RefPtr<IndexedDatabase> m_indexedDatabase;
67  RefPtr<IDBAny> m_this;
6867};
6968
7069} // namespace WebCore