OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 | 82 |
83 namespace IndexedDBAgentState { | 83 namespace IndexedDBAgentState { |
84 static const char indexedDBAgentEnabled[] = "indexedDBAgentEnabled"; | 84 static const char indexedDBAgentEnabled[] = "indexedDBAgentEnabled"; |
85 }; | 85 }; |
86 | 86 |
87 namespace { | 87 namespace { |
88 | 88 |
89 class GetDatabaseNamesCallback final : public EventListener { | 89 class GetDatabaseNamesCallback final : public EventListener { |
90 WTF_MAKE_NONCOPYABLE(GetDatabaseNamesCallback); | 90 WTF_MAKE_NONCOPYABLE(GetDatabaseNamesCallback); |
91 public: | 91 public: |
92 static PassRefPtr<GetDatabaseNamesCallback> create(PassRefPtrWillBeRawPtr<Re
questDatabaseNamesCallback> requestCallback, const String& securityOrigin) | 92 static PassRefPtrWillBeRawPtr<GetDatabaseNamesCallback> create(PassRefPtrWil
lBeRawPtr<RequestDatabaseNamesCallback> requestCallback, const String& securityO
rigin) |
93 { | 93 { |
94 return adoptRef(new GetDatabaseNamesCallback(requestCallback, securityOr
igin)); | 94 return adoptRefWillBeNoop(new GetDatabaseNamesCallback(requestCallback,
securityOrigin)); |
95 } | 95 } |
96 | 96 |
97 ~GetDatabaseNamesCallback() override { } | 97 ~GetDatabaseNamesCallback() override { } |
98 | 98 |
99 bool operator==(const EventListener& other) override | 99 bool operator==(const EventListener& other) override |
100 { | 100 { |
101 return this == &other; | 101 return this == &other; |
102 } | 102 } |
103 | 103 |
104 void handleEvent(ExecutionContext*, Event* event) override | 104 void handleEvent(ExecutionContext*, Event* event) override |
(...skipping 12 matching lines...) Expand all Loading... |
117 return; | 117 return; |
118 } | 118 } |
119 | 119 |
120 RefPtrWillBeRawPtr<DOMStringList> databaseNamesList = requestResult->dom
StringList(); | 120 RefPtrWillBeRawPtr<DOMStringList> databaseNamesList = requestResult->dom
StringList(); |
121 RefPtr<TypeBuilder::Array<String>> databaseNames = TypeBuilder::Array<St
ring>::create(); | 121 RefPtr<TypeBuilder::Array<String>> databaseNames = TypeBuilder::Array<St
ring>::create(); |
122 for (size_t i = 0; i < databaseNamesList->length(); ++i) | 122 for (size_t i = 0; i < databaseNamesList->length(); ++i) |
123 databaseNames->addItem(databaseNamesList->anonymousIndexedGetter(i))
; | 123 databaseNames->addItem(databaseNamesList->anonymousIndexedGetter(i))
; |
124 m_requestCallback->sendSuccess(databaseNames.release()); | 124 m_requestCallback->sendSuccess(databaseNames.release()); |
125 } | 125 } |
126 | 126 |
| 127 DEFINE_INLINE_VIRTUAL_TRACE() |
| 128 { |
| 129 visitor->trace(m_requestCallback); |
| 130 EventListener::trace(visitor); |
| 131 } |
| 132 |
127 private: | 133 private: |
128 GetDatabaseNamesCallback(PassRefPtrWillBeRawPtr<RequestDatabaseNamesCallback
> requestCallback, const String& securityOrigin) | 134 GetDatabaseNamesCallback(PassRefPtrWillBeRawPtr<RequestDatabaseNamesCallback
> requestCallback, const String& securityOrigin) |
129 : EventListener(EventListener::CPPEventListenerType) | 135 : EventListener(EventListener::CPPEventListenerType) |
130 , m_requestCallback(requestCallback) | 136 , m_requestCallback(requestCallback) |
131 , m_securityOrigin(securityOrigin) { } | 137 , m_securityOrigin(securityOrigin) { } |
132 RefPtrWillBePersistent<RequestDatabaseNamesCallback> m_requestCallback; | 138 RefPtrWillBeMember<RequestDatabaseNamesCallback> m_requestCallback; |
133 String m_securityOrigin; | 139 String m_securityOrigin; |
134 }; | 140 }; |
135 | 141 |
136 class ExecutableWithDatabase : public RefCounted<ExecutableWithDatabase> { | 142 class ExecutableWithDatabase : public RefCounted<ExecutableWithDatabase> { |
137 public: | 143 public: |
138 ExecutableWithDatabase(ScriptState* scriptState) | 144 ExecutableWithDatabase(ScriptState* scriptState) |
139 : m_scriptState(scriptState) { } | 145 : m_scriptState(scriptState) { } |
140 virtual ~ExecutableWithDatabase() { } | 146 virtual ~ExecutableWithDatabase() { } |
141 void start(IDBFactory*, SecurityOrigin*, const String& databaseName); | 147 void start(IDBFactory*, SecurityOrigin*, const String& databaseName); |
142 virtual void execute(IDBDatabase*) = 0; | 148 virtual void execute(IDBDatabase*) = 0; |
143 virtual RequestCallback* requestCallback() = 0; | 149 virtual RequestCallback* requestCallback() = 0; |
144 ExecutionContext* context() const { return m_scriptState->executionContext()
; } | 150 ExecutionContext* context() const { return m_scriptState->executionContext()
; } |
145 ScriptState* scriptState() const { return m_scriptState.get(); } | 151 ScriptState* scriptState() const { return m_scriptState.get(); } |
146 private: | 152 private: |
147 RefPtr<ScriptState> m_scriptState; | 153 RefPtr<ScriptState> m_scriptState; |
148 }; | 154 }; |
149 | 155 |
150 class OpenDatabaseCallback final : public EventListener { | 156 class OpenDatabaseCallback final : public EventListener { |
151 public: | 157 public: |
152 static PassRefPtr<OpenDatabaseCallback> create(ExecutableWithDatabase* execu
tableWithDatabase) | 158 static PassRefPtrWillBeRawPtr<OpenDatabaseCallback> create(ExecutableWithDat
abase* executableWithDatabase) |
153 { | 159 { |
154 return adoptRef(new OpenDatabaseCallback(executableWithDatabase)); | 160 return adoptRefWillBeNoop(new OpenDatabaseCallback(executableWithDatabas
e)); |
155 } | 161 } |
156 | 162 |
157 ~OpenDatabaseCallback() override { } | 163 ~OpenDatabaseCallback() override { } |
158 | 164 |
159 bool operator==(const EventListener& other) override | 165 bool operator==(const EventListener& other) override |
160 { | 166 { |
161 return this == &other; | 167 return this == &other; |
162 } | 168 } |
163 | 169 |
164 void handleEvent(ExecutionContext* context, Event* event) override | 170 void handleEvent(ExecutionContext* context, Event* event) override |
(...skipping 18 matching lines...) Expand all Loading... |
183 | 189 |
184 private: | 190 private: |
185 OpenDatabaseCallback(ExecutableWithDatabase* executableWithDatabase) | 191 OpenDatabaseCallback(ExecutableWithDatabase* executableWithDatabase) |
186 : EventListener(EventListener::CPPEventListenerType) | 192 : EventListener(EventListener::CPPEventListenerType) |
187 , m_executableWithDatabase(executableWithDatabase) { } | 193 , m_executableWithDatabase(executableWithDatabase) { } |
188 RefPtr<ExecutableWithDatabase> m_executableWithDatabase; | 194 RefPtr<ExecutableWithDatabase> m_executableWithDatabase; |
189 }; | 195 }; |
190 | 196 |
191 void ExecutableWithDatabase::start(IDBFactory* idbFactory, SecurityOrigin*, cons
t String& databaseName) | 197 void ExecutableWithDatabase::start(IDBFactory* idbFactory, SecurityOrigin*, cons
t String& databaseName) |
192 { | 198 { |
193 RefPtr<OpenDatabaseCallback> callback = OpenDatabaseCallback::create(this); | 199 RefPtrWillBeRawPtr<OpenDatabaseCallback> callback = OpenDatabaseCallback::cr
eate(this); |
194 TrackExceptionState exceptionState; | 200 TrackExceptionState exceptionState; |
195 IDBOpenDBRequest* idbOpenDBRequest = idbFactory->open(scriptState(), databas
eName, exceptionState); | 201 IDBOpenDBRequest* idbOpenDBRequest = idbFactory->open(scriptState(), databas
eName, exceptionState); |
196 if (exceptionState.hadException()) { | 202 if (exceptionState.hadException()) { |
197 requestCallback()->sendFailure("Could not open database."); | 203 requestCallback()->sendFailure("Could not open database."); |
198 return; | 204 return; |
199 } | 205 } |
200 idbOpenDBRequest->addEventListener(EventTypeNames::success, callback, false)
; | 206 idbOpenDBRequest->addEventListener(EventTypeNames::success, callback, false)
; |
201 } | 207 } |
202 | 208 |
203 static IDBTransaction* transactionForDatabase(ScriptState* scriptState, IDBDatab
ase* idbDatabase, const String& objectStoreName, const String& mode = IndexedDBN
ames::readonly) | 209 static IDBTransaction* transactionForDatabase(ScriptState* scriptState, IDBDatab
ase* idbDatabase, const String& objectStoreName, const String& mode = IndexedDBN
ames::readonly) |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 return nullptr; | 388 return nullptr; |
383 IDBKeyRange::UpperBoundType upperBoundType = upperOpen ? IDBKeyRange::UpperB
oundOpen : IDBKeyRange::UpperBoundClosed; | 389 IDBKeyRange::UpperBoundType upperBoundType = upperOpen ? IDBKeyRange::UpperB
oundOpen : IDBKeyRange::UpperBoundClosed; |
384 | 390 |
385 return IDBKeyRange::create(idbLower, idbUpper, lowerBoundType, upperBoundTyp
e); | 391 return IDBKeyRange::create(idbLower, idbUpper, lowerBoundType, upperBoundTyp
e); |
386 } | 392 } |
387 | 393 |
388 class DataLoader; | 394 class DataLoader; |
389 | 395 |
390 class OpenCursorCallback final : public EventListener { | 396 class OpenCursorCallback final : public EventListener { |
391 public: | 397 public: |
392 static PassRefPtr<OpenCursorCallback> create(ScriptState* scriptState, PassR
efPtrWillBeRawPtr<RequestDataCallback> requestCallback, int skipCount, unsigned
pageSize) | 398 static PassRefPtrWillBeRawPtr<OpenCursorCallback> create(ScriptState* script
State, PassRefPtrWillBeRawPtr<RequestDataCallback> requestCallback, int skipCoun
t, unsigned pageSize) |
393 { | 399 { |
394 return adoptRef(new OpenCursorCallback(scriptState, requestCallback, ski
pCount, pageSize)); | 400 return adoptRefWillBeNoop(new OpenCursorCallback(scriptState, requestCal
lback, skipCount, pageSize)); |
395 } | 401 } |
396 | 402 |
397 ~OpenCursorCallback() override { } | 403 ~OpenCursorCallback() override { } |
398 | 404 |
399 bool operator==(const EventListener& other) override | 405 bool operator==(const EventListener& other) override |
400 { | 406 { |
401 return this == &other; | 407 return this == &other; |
402 } | 408 } |
403 | 409 |
404 void handleEvent(ExecutionContext*, Event* event) override | 410 void handleEvent(ExecutionContext*, Event* event) override |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
466 | 472 |
467 } | 473 } |
468 | 474 |
469 void end(bool hasMore) | 475 void end(bool hasMore) |
470 { | 476 { |
471 if (!m_requestCallback->isActive()) | 477 if (!m_requestCallback->isActive()) |
472 return; | 478 return; |
473 m_requestCallback->sendSuccess(m_result.release(), hasMore); | 479 m_requestCallback->sendSuccess(m_result.release(), hasMore); |
474 } | 480 } |
475 | 481 |
| 482 DEFINE_INLINE_VIRTUAL_TRACE() |
| 483 { |
| 484 visitor->trace(m_requestCallback); |
| 485 EventListener::trace(visitor); |
| 486 } |
| 487 |
476 private: | 488 private: |
477 OpenCursorCallback(ScriptState* scriptState, PassRefPtrWillBeRawPtr<RequestD
ataCallback> requestCallback, int skipCount, unsigned pageSize) | 489 OpenCursorCallback(ScriptState* scriptState, PassRefPtrWillBeRawPtr<RequestD
ataCallback> requestCallback, int skipCount, unsigned pageSize) |
478 : EventListener(EventListener::CPPEventListenerType) | 490 : EventListener(EventListener::CPPEventListenerType) |
479 , m_scriptState(scriptState) | 491 , m_scriptState(scriptState) |
480 , m_requestCallback(requestCallback) | 492 , m_requestCallback(requestCallback) |
481 , m_skipCount(skipCount) | 493 , m_skipCount(skipCount) |
482 , m_pageSize(pageSize) | 494 , m_pageSize(pageSize) |
483 { | 495 { |
484 m_result = Array<DataEntry>::create(); | 496 m_result = Array<DataEntry>::create(); |
485 } | 497 } |
486 | 498 |
487 RefPtr<ScriptState> m_scriptState; | 499 RefPtr<ScriptState> m_scriptState; |
488 RefPtrWillBePersistent<RequestDataCallback> m_requestCallback; | 500 RefPtrWillBeMember<RequestDataCallback> m_requestCallback; |
489 int m_skipCount; | 501 int m_skipCount; |
490 unsigned m_pageSize; | 502 unsigned m_pageSize; |
491 RefPtr<Array<DataEntry>> m_result; | 503 RefPtr<Array<DataEntry>> m_result; |
492 }; | 504 }; |
493 | 505 |
494 class DataLoader final : public ExecutableWithDatabase { | 506 class DataLoader final : public ExecutableWithDatabase { |
495 public: | 507 public: |
496 static PassRefPtr<DataLoader> create(ScriptState* scriptState, PassRefPtrWil
lBeRawPtr<RequestDataCallback> requestCallback, const String& objectStoreName, c
onst String& indexName, IDBKeyRange* idbKeyRange, int skipCount, unsigned pageSi
ze) | 508 static PassRefPtr<DataLoader> create(ScriptState* scriptState, PassRefPtrWil
lBeRawPtr<RequestDataCallback> requestCallback, const String& objectStoreName, c
onst String& indexName, IDBKeyRange* idbKeyRange, int skipCount, unsigned pageSi
ze) |
497 { | 509 { |
498 return adoptRef(new DataLoader(scriptState, requestCallback, objectStore
Name, indexName, idbKeyRange, skipCount, pageSize)); | 510 return adoptRef(new DataLoader(scriptState, requestCallback, objectStore
Name, indexName, idbKeyRange, skipCount, pageSize)); |
499 } | 511 } |
500 | 512 |
501 ~DataLoader() override { } | 513 ~DataLoader() override { } |
502 | 514 |
503 void execute(IDBDatabase* idbDatabase) override | 515 void execute(IDBDatabase* idbDatabase) override |
504 { | 516 { |
505 if (!requestCallback()->isActive()) | 517 if (!requestCallback()->isActive()) |
506 return; | 518 return; |
507 IDBTransaction* idbTransaction = transactionForDatabase(scriptState(), i
dbDatabase, m_objectStoreName); | 519 IDBTransaction* idbTransaction = transactionForDatabase(scriptState(), i
dbDatabase, m_objectStoreName); |
508 if (!idbTransaction) { | 520 if (!idbTransaction) { |
509 m_requestCallback->sendFailure("Could not get transaction"); | 521 m_requestCallback->sendFailure("Could not get transaction"); |
510 return; | 522 return; |
511 } | 523 } |
512 IDBObjectStore* idbObjectStore = objectStoreForTransaction(idbTransactio
n, m_objectStoreName); | 524 IDBObjectStore* idbObjectStore = objectStoreForTransaction(idbTransactio
n, m_objectStoreName); |
513 if (!idbObjectStore) { | 525 if (!idbObjectStore) { |
514 m_requestCallback->sendFailure("Could not get object store"); | 526 m_requestCallback->sendFailure("Could not get object store"); |
515 return; | 527 return; |
516 } | 528 } |
517 | 529 |
518 RefPtr<OpenCursorCallback> openCursorCallback = OpenCursorCallback::crea
te(scriptState(), m_requestCallback, m_skipCount, m_pageSize); | 530 RefPtrWillBeRawPtr<OpenCursorCallback> openCursorCallback = OpenCursorCa
llback::create(scriptState(), m_requestCallback, m_skipCount, m_pageSize); |
519 | 531 |
520 IDBRequest* idbRequest; | 532 IDBRequest* idbRequest; |
521 if (!m_indexName.isEmpty()) { | 533 if (!m_indexName.isEmpty()) { |
522 IDBIndex* idbIndex = indexForObjectStore(idbObjectStore, m_indexName
); | 534 IDBIndex* idbIndex = indexForObjectStore(idbObjectStore, m_indexName
); |
523 if (!idbIndex) { | 535 if (!idbIndex) { |
524 m_requestCallback->sendFailure("Could not get index"); | 536 m_requestCallback->sendFailure("Could not get index"); |
525 return; | 537 return; |
526 } | 538 } |
527 | 539 |
528 idbRequest = idbIndex->openCursor(scriptState(), m_idbKeyRange.get()
, WebIDBCursorDirectionNext); | 540 idbRequest = idbIndex->openCursor(scriptState(), m_idbKeyRange.get()
, WebIDBCursorDirectionNext); |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
680 | 692 |
681 ScriptState* scriptState = ScriptState::forMainWorld(frame); | 693 ScriptState* scriptState = ScriptState::forMainWorld(frame); |
682 ScriptState::Scope scope(scriptState); | 694 ScriptState::Scope scope(scriptState); |
683 RefPtr<DataLoader> dataLoader = DataLoader::create(scriptState, requestCallb
ack, objectStoreName, indexName, idbKeyRange, skipCount, pageSize); | 695 RefPtr<DataLoader> dataLoader = DataLoader::create(scriptState, requestCallb
ack, objectStoreName, indexName, idbKeyRange, skipCount, pageSize); |
684 dataLoader->start(idbFactory, document->securityOrigin(), databaseName); | 696 dataLoader->start(idbFactory, document->securityOrigin(), databaseName); |
685 } | 697 } |
686 | 698 |
687 class ClearObjectStoreListener final : public EventListener { | 699 class ClearObjectStoreListener final : public EventListener { |
688 WTF_MAKE_NONCOPYABLE(ClearObjectStoreListener); | 700 WTF_MAKE_NONCOPYABLE(ClearObjectStoreListener); |
689 public: | 701 public: |
690 static PassRefPtr<ClearObjectStoreListener> create(PassRefPtrWillBeRawPtr<Cl
earObjectStoreCallback> requestCallback) | 702 static PassRefPtrWillBeRawPtr<ClearObjectStoreListener> create(PassRefPtrWil
lBeRawPtr<ClearObjectStoreCallback> requestCallback) |
691 { | 703 { |
692 return adoptRef(new ClearObjectStoreListener(requestCallback)); | 704 return adoptRefWillBeNoop(new ClearObjectStoreListener(requestCallback))
; |
693 } | 705 } |
694 | 706 |
695 ~ClearObjectStoreListener() override { } | 707 ~ClearObjectStoreListener() override { } |
696 | 708 |
697 bool operator==(const EventListener& other) override | 709 bool operator==(const EventListener& other) override |
698 { | 710 { |
699 return this == &other; | 711 return this == &other; |
700 } | 712 } |
701 | 713 |
702 void handleEvent(ExecutionContext*, Event* event) override | 714 void handleEvent(ExecutionContext*, Event* event) override |
703 { | 715 { |
704 if (!m_requestCallback->isActive()) | 716 if (!m_requestCallback->isActive()) |
705 return; | 717 return; |
706 if (event->type() != EventTypeNames::complete) { | 718 if (event->type() != EventTypeNames::complete) { |
707 m_requestCallback->sendFailure("Unexpected event type."); | 719 m_requestCallback->sendFailure("Unexpected event type."); |
708 return; | 720 return; |
709 } | 721 } |
710 | 722 |
711 m_requestCallback->sendSuccess(); | 723 m_requestCallback->sendSuccess(); |
712 } | 724 } |
| 725 |
| 726 DEFINE_INLINE_VIRTUAL_TRACE() |
| 727 { |
| 728 visitor->trace(m_requestCallback); |
| 729 EventListener::trace(visitor); |
| 730 } |
| 731 |
713 private: | 732 private: |
714 ClearObjectStoreListener(PassRefPtrWillBeRawPtr<ClearObjectStoreCallback> re
questCallback) | 733 ClearObjectStoreListener(PassRefPtrWillBeRawPtr<ClearObjectStoreCallback> re
questCallback) |
715 : EventListener(EventListener::CPPEventListenerType) | 734 : EventListener(EventListener::CPPEventListenerType) |
716 , m_requestCallback(requestCallback) | 735 , m_requestCallback(requestCallback) |
717 { | 736 { |
718 } | 737 } |
719 | 738 |
720 RefPtrWillBePersistent<ClearObjectStoreCallback> m_requestCallback; | 739 RefPtrWillBeMember<ClearObjectStoreCallback> m_requestCallback; |
721 }; | 740 }; |
722 | 741 |
723 | 742 |
724 class ClearObjectStore final : public ExecutableWithDatabase { | 743 class ClearObjectStore final : public ExecutableWithDatabase { |
725 public: | 744 public: |
726 static PassRefPtr<ClearObjectStore> create(ScriptState* scriptState, const S
tring& objectStoreName, PassRefPtrWillBeRawPtr<ClearObjectStoreCallback> request
Callback) | 745 static PassRefPtr<ClearObjectStore> create(ScriptState* scriptState, const S
tring& objectStoreName, PassRefPtrWillBeRawPtr<ClearObjectStoreCallback> request
Callback) |
727 { | 746 { |
728 return adoptRef(new ClearObjectStore(scriptState, objectStoreName, reque
stCallback)); | 747 return adoptRef(new ClearObjectStore(scriptState, objectStoreName, reque
stCallback)); |
729 } | 748 } |
730 | 749 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
783 clearObjectStore->start(idbFactory, document->securityOrigin(), databaseName
); | 802 clearObjectStore->start(idbFactory, document->securityOrigin(), databaseName
); |
784 } | 803 } |
785 | 804 |
786 DEFINE_TRACE(InspectorIndexedDBAgent) | 805 DEFINE_TRACE(InspectorIndexedDBAgent) |
787 { | 806 { |
788 visitor->trace(m_page); | 807 visitor->trace(m_page); |
789 InspectorBaseAgent::trace(visitor); | 808 InspectorBaseAgent::trace(visitor); |
790 } | 809 } |
791 | 810 |
792 } // namespace blink | 811 } // namespace blink |
OLD | NEW |