Changeset 235345 in webkit
- Timestamp:
- Aug 26, 2018 7:44:15 PM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r235344 r235345 1 2018-08-26 Youenn Fablet <youenn@apple.com> 2 3 Make IDBCursor::m_request a WeakPtr 4 https://bugs.webkit.org/show_bug.cgi?id=188938 5 6 Reviewed by Alex Christensen. 7 8 Make m_request a WeakPtr so that if m_request is destroyed, the related cursor will not use the invalid pointer. 9 10 Covered by existing tests. 11 12 * Modules/indexeddb/IDBCursor.cpp: 13 (WebCore::IDBCursor::continuePrimaryKey): Other continue and advance methods that are calling uncheckedIterateCursor do check for m_request. 14 Apply the same check for continuePrimaryKey. 15 (WebCore::IDBCursor::uncheckedIterateCursor): 16 * Modules/indexeddb/IDBCursor.h: 17 (WebCore::IDBCursor::setRequest): 18 (WebCore::IDBCursor::clearRequest): 19 (WebCore::IDBCursor::request): 20 * Modules/indexeddb/IDBRequest.h: 21 1 22 2018-08-26 Youenn Fablet <youenn@apple.com> 2 23 -
trunk/Source/WebCore/Modules/indexeddb/IDBCursor.cpp
r235344 r235345 168 168 ExceptionOr<void> IDBCursor::continuePrimaryKey(ExecState& state, JSValue keyValue, JSValue primaryKeyValue) 169 169 { 170 if (!m_request) 171 return Exception { InvalidStateError }; 172 170 173 if (!transaction().isActive()) 171 174 return Exception { TransactionInactiveError, "Failed to execute 'continuePrimaryKey' on 'IDBCursor': The transaction is inactive or finished."_s }; … … 261 264 void IDBCursor::uncheckedIterateCursor(const IDBKeyData& key, unsigned count) 262 265 { 266 ASSERT(m_request); 263 267 ASSERT(&effectiveObjectStore().transaction().database().originThread() == &Thread::current()); 264 268 … … 269 273 void IDBCursor::uncheckedIterateCursor(const IDBKeyData& key, const IDBKeyData& primaryKey) 270 274 { 275 ASSERT(m_request); 271 276 ASSERT(&effectiveObjectStore().transaction().database().originThread() == &Thread::current()); 272 277 -
trunk/Source/WebCore/Modules/indexeddb/IDBCursor.h
r235344 r235345 33 33 #include <JavaScriptCore/Strong.h> 34 34 #include <wtf/Variant.h> 35 #include <wtf/WeakPtr.h> 35 36 36 37 namespace WebCore { … … 66 67 const IDBCursorInfo& info() const { return m_info; } 67 68 68 void setRequest(IDBRequest& request) { m_request = &request; }69 void clearRequest() { m_request = nullptr; }70 IDBRequest* request() { return m_request ; }69 void setRequest(IDBRequest& request) { m_request = makeWeakPtr(&request); } 70 void clearRequest() { m_request.clear(); } 71 IDBRequest* request() { return m_request.get(); } 71 72 72 73 void setGetResult(IDBRequest&, const IDBGetResult&); … … 88 89 IDBCursorInfo m_info; 89 90 Source m_source; 90 IDBRequest* m_request { nullptr };91 WeakPtr<IDBRequest> m_request; 91 92 92 93 bool m_gotValue { false }; -
trunk/Source/WebCore/Modules/indexeddb/IDBRequest.h
r235344 r235345 37 37 #include <wtf/Function.h> 38 38 #include <wtf/Scope.h> 39 #include <wtf/WeakPtr.h> 39 40 40 41 namespace WebCore { … … 57 58 } 58 59 59 class IDBRequest : public EventTargetWithInlineData, public IDBActiveDOMObject, public RefCounted<IDBRequest> {60 class IDBRequest : public EventTargetWithInlineData, public IDBActiveDOMObject, public RefCounted<IDBRequest>, public CanMakeWeakPtr<IDBRequest> { 60 61 public: 61 62 static Ref<IDBRequest> create(ScriptExecutionContext&, IDBObjectStore&, IDBTransaction&);
Note: See TracChangeset
for help on using the changeset viewer.