Chromium Code Reviews| Index: third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp |
| diff --git a/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp b/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp |
| index f0cb0d80163f2be68b7f658109acfc6a2cedb745..bf8366695b64c89805be3ab479eba5978a6ee7b9 100644 |
| --- a/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp |
| +++ b/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.cpp |
| @@ -194,16 +194,54 @@ private: |
| RefPtr<ExecutableWithDatabase> m_executableWithDatabase; |
| }; |
| +class UpgradeDatabaseCallback final : public EventListener { |
| +public: |
| + static PassRefPtrWillBeRawPtr<UpgradeDatabaseCallback> create(ExecutableWithDatabase* executableWithDatabase) |
| + { |
| + return adoptRefWillBeNoop(new UpgradeDatabaseCallback(executableWithDatabase)); |
| + } |
| + |
| + ~UpgradeDatabaseCallback() override { } |
| + |
| + bool operator==(const EventListener& other) override |
| + { |
| + return this == &other; |
| + } |
| + |
| + void handleEvent(ExecutionContext* context, Event* event) override |
| + { |
| + if (event->type() != EventTypeNames::upgradeneeded) { |
|
cmumford
2015/10/22 16:10:43
Why not just an ASSERT for this as we're only obse
jsbell
2015/10/22 19:57:31
I'm leaving this as-is (copy/pasta from other hand
|
| + m_executableWithDatabase->requestCallback()->sendFailure("Unexpected event type."); |
| + return; |
| + } |
| + |
| + // If an "upgradeneeded" event comes through then the database that |
| + // had previously been enumerate was deleted. We don't want to |
|
cmumford
2015/10/22 16:10:43
s/enumerate/enumerated/
jsbell
2015/10/22 19:57:31
Done.
|
| + // implicitly re-create it here, so abort the transaction. |
| + IDBOpenDBRequest* idbOpenDBRequest = static_cast<IDBOpenDBRequest*>(event->target()); |
| + NonThrowableExceptionState exceptionState; |
| + idbOpenDBRequest->transaction()->abort(exceptionState); |
| + } |
| + |
| +private: |
| + UpgradeDatabaseCallback(ExecutableWithDatabase* executableWithDatabase) |
| + : EventListener(EventListener::CPPEventListenerType) |
| + , m_executableWithDatabase(executableWithDatabase) { } |
| + RefPtr<ExecutableWithDatabase> m_executableWithDatabase; |
| +}; |
| + |
| void ExecutableWithDatabase::start(IDBFactory* idbFactory, SecurityOrigin*, const String& databaseName) |
| { |
| - RefPtrWillBeRawPtr<OpenDatabaseCallback> callback = OpenDatabaseCallback::create(this); |
| + RefPtrWillBeRawPtr<OpenDatabaseCallback> openCallback = OpenDatabaseCallback::create(this); |
| + RefPtrWillBeRawPtr<UpgradeDatabaseCallback> upgradeCallback = UpgradeDatabaseCallback::create(this); |
| TrackExceptionState exceptionState; |
| IDBOpenDBRequest* idbOpenDBRequest = idbFactory->open(scriptState(), databaseName, exceptionState); |
| if (exceptionState.hadException()) { |
| requestCallback()->sendFailure("Could not open database."); |
| return; |
| } |
| - idbOpenDBRequest->addEventListener(EventTypeNames::success, callback, false); |
| + idbOpenDBRequest->addEventListener(EventTypeNames::success, openCallback, false); |
| + idbOpenDBRequest->addEventListener(EventTypeNames::upgradeneeded, upgradeCallback, false); |
| } |
| static IDBTransaction* transactionForDatabase(ScriptState* scriptState, IDBDatabase* idbDatabase, const String& objectStoreName, const String& mode = IndexedDBNames::readonly) |