Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(844)

Side by Side Diff: third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp

Issue 2080623002: Revert "Remove OwnPtr from Blink." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 28 matching lines...) Expand all
39 #include "modules/indexeddb/IDBDatabase.h" 39 #include "modules/indexeddb/IDBDatabase.h"
40 #include "modules/indexeddb/IDBKeyPath.h" 40 #include "modules/indexeddb/IDBKeyPath.h"
41 #include "modules/indexeddb/IDBTracing.h" 41 #include "modules/indexeddb/IDBTracing.h"
42 #include "modules/indexeddb/WebIDBCallbacksImpl.h" 42 #include "modules/indexeddb/WebIDBCallbacksImpl.h"
43 #include "platform/SharedBuffer.h" 43 #include "platform/SharedBuffer.h"
44 #include "public/platform/WebBlobInfo.h" 44 #include "public/platform/WebBlobInfo.h"
45 #include "public/platform/WebData.h" 45 #include "public/platform/WebData.h"
46 #include "public/platform/WebVector.h" 46 #include "public/platform/WebVector.h"
47 #include "public/platform/modules/indexeddb/WebIDBKey.h" 47 #include "public/platform/modules/indexeddb/WebIDBKey.h"
48 #include "public/platform/modules/indexeddb/WebIDBKeyRange.h" 48 #include "public/platform/modules/indexeddb/WebIDBKeyRange.h"
49 #include <memory>
50 #include <v8.h> 49 #include <v8.h>
51 50
52 using blink::WebBlobInfo; 51 using blink::WebBlobInfo;
53 using blink::WebIDBCallbacks; 52 using blink::WebIDBCallbacks;
54 using blink::WebIDBCursor; 53 using blink::WebIDBCursor;
55 using blink::WebIDBDatabase; 54 using blink::WebIDBDatabase;
56 using blink::WebVector; 55 using blink::WebVector;
57 56
58 namespace blink { 57 namespace blink {
59 58
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 if (!keyRange) { 106 if (!keyRange) {
108 exceptionState.throwDOMException(DataError, IDBDatabase::noKeyOrKeyRange ErrorMessage); 107 exceptionState.throwDOMException(DataError, IDBDatabase::noKeyOrKeyRange ErrorMessage);
109 return nullptr; 108 return nullptr;
110 } 109 }
111 if (!backendDB()) { 110 if (!backendDB()) {
112 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage); 111 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage);
113 return nullptr; 112 return nullptr;
114 } 113 }
115 114
116 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get()); 115 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
117 backendDB()->get(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, key Range, false, WebIDBCallbacksImpl::create(request).release()); 116 backendDB()->get(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, key Range, false, WebIDBCallbacksImpl::create(request).leakPtr());
118 return request; 117 return request;
119 } 118 }
120 119
121 IDBRequest* IDBObjectStore::getAll(ScriptState* scriptState, const ScriptValue& keyRange, ExceptionState& exceptionState) 120 IDBRequest* IDBObjectStore::getAll(ScriptState* scriptState, const ScriptValue& keyRange, ExceptionState& exceptionState)
122 { 121 {
123 return getAll(scriptState, keyRange, std::numeric_limits<uint32_t>::max(), e xceptionState); 122 return getAll(scriptState, keyRange, std::numeric_limits<uint32_t>::max(), e xceptionState);
124 } 123 }
125 124
126 IDBRequest* IDBObjectStore::getAll(ScriptState* scriptState, const ScriptValue& keyRange, unsigned long maxCount, ExceptionState& exceptionState) 125 IDBRequest* IDBObjectStore::getAll(ScriptState* scriptState, const ScriptValue& keyRange, unsigned long maxCount, ExceptionState& exceptionState)
127 { 126 {
(...skipping 15 matching lines...) Expand all
143 } 142 }
144 IDBKeyRange* range = IDBKeyRange::fromScriptValue(scriptState->getExecutionC ontext(), keyRange, exceptionState); 143 IDBKeyRange* range = IDBKeyRange::fromScriptValue(scriptState->getExecutionC ontext(), keyRange, exceptionState);
145 if (exceptionState.hadException()) 144 if (exceptionState.hadException())
146 return nullptr; 145 return nullptr;
147 if (!backendDB()) { 146 if (!backendDB()) {
148 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage); 147 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage);
149 return nullptr; 148 return nullptr;
150 } 149 }
151 150
152 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get()); 151 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
153 backendDB()->getAll(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, maxCount, false, WebIDBCallbacksImpl::create(request).release()); 152 backendDB()->getAll(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, maxCount, false, WebIDBCallbacksImpl::create(request).leakPtr());
154 return request; 153 return request;
155 } 154 }
156 155
157 IDBRequest* IDBObjectStore::getAllKeys(ScriptState* scriptState, const ScriptVal ue& keyRange, ExceptionState& exceptionState) 156 IDBRequest* IDBObjectStore::getAllKeys(ScriptState* scriptState, const ScriptVal ue& keyRange, ExceptionState& exceptionState)
158 { 157 {
159 return getAllKeys(scriptState, keyRange, std::numeric_limits<uint32_t>::max( ), exceptionState); 158 return getAllKeys(scriptState, keyRange, std::numeric_limits<uint32_t>::max( ), exceptionState);
160 } 159 }
161 160
162 IDBRequest* IDBObjectStore::getAllKeys(ScriptState* scriptState, const ScriptVal ue& keyRange, unsigned long maxCount, ExceptionState& exceptionState) 161 IDBRequest* IDBObjectStore::getAllKeys(ScriptState* scriptState, const ScriptVal ue& keyRange, unsigned long maxCount, ExceptionState& exceptionState)
163 { 162 {
(...skipping 15 matching lines...) Expand all
179 } 178 }
180 IDBKeyRange* range = IDBKeyRange::fromScriptValue(scriptState->getExecutionC ontext(), keyRange, exceptionState); 179 IDBKeyRange* range = IDBKeyRange::fromScriptValue(scriptState->getExecutionC ontext(), keyRange, exceptionState);
181 if (exceptionState.hadException()) 180 if (exceptionState.hadException())
182 return nullptr; 181 return nullptr;
183 if (!backendDB()) { 182 if (!backendDB()) {
184 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage); 183 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage);
185 return nullptr; 184 return nullptr;
186 } 185 }
187 186
188 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get()); 187 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
189 backendDB()->getAll(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, maxCount, true, WebIDBCallbacksImpl::create(request).release()); 188 backendDB()->getAll(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, maxCount, true, WebIDBCallbacksImpl::create(request).leakPtr());
190 return request; 189 return request;
191 } 190 }
192 191
193 static void generateIndexKeysForValue(v8::Isolate* isolate, const IDBIndexMetada ta& indexMetadata, const ScriptValue& objectValue, IDBObjectStore::IndexKeys* in dexKeys) 192 static void generateIndexKeysForValue(v8::Isolate* isolate, const IDBIndexMetada ta& indexMetadata, const ScriptValue& objectValue, IDBObjectStore::IndexKeys* in dexKeys)
194 { 193 {
195 ASSERT(indexKeys); 194 ASSERT(indexKeys);
196 NonThrowableExceptionState exceptionState; 195 NonThrowableExceptionState exceptionState;
197 IDBKey* indexKey = ScriptValue::to<IDBKey*>(isolate, objectValue, exceptionS tate, indexMetadata.keyPath); 196 IDBKey* indexKey = ScriptValue::to<IDBKey*>(isolate, objectValue, exceptionS tate, indexMetadata.keyPath);
198 197
199 if (!indexKey) 198 if (!indexKey)
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 generateIndexKeysForValue(scriptState->isolate(), it.value, clone, &keys ); 333 generateIndexKeysForValue(scriptState->isolate(), it.value, clone, &keys );
335 indexIds.append(it.key); 334 indexIds.append(it.key);
336 indexKeys.append(keys); 335 indexKeys.append(keys);
337 } 336 }
338 337
339 IDBRequest* request = IDBRequest::create(scriptState, source, m_transaction. get()); 338 IDBRequest* request = IDBRequest::create(scriptState, source, m_transaction. get());
340 Vector<char> wireBytes; 339 Vector<char> wireBytes;
341 serializedValue->toWireBytes(wireBytes); 340 serializedValue->toWireBytes(wireBytes);
342 RefPtr<SharedBuffer> valueBuffer = SharedBuffer::adoptVector(wireBytes); 341 RefPtr<SharedBuffer> valueBuffer = SharedBuffer::adoptVector(wireBytes);
343 342
344 backendDB()->put(m_transaction->id(), id(), WebData(valueBuffer), blobInfo, key, static_cast<WebIDBPutMode>(putMode), WebIDBCallbacksImpl::create(request).r elease(), indexIds, indexKeys); 343 backendDB()->put(m_transaction->id(), id(), WebData(valueBuffer), blobInfo, key, static_cast<WebIDBPutMode>(putMode), WebIDBCallbacksImpl::create(request).l eakPtr(), indexIds, indexKeys);
345 return request; 344 return request;
346 } 345 }
347 346
348 IDBRequest* IDBObjectStore::deleteFunction(ScriptState* scriptState, const Scrip tValue& key, ExceptionState& exceptionState) 347 IDBRequest* IDBObjectStore::deleteFunction(ScriptState* scriptState, const Scrip tValue& key, ExceptionState& exceptionState)
349 { 348 {
350 IDB_TRACE("IDBObjectStore::delete"); 349 IDB_TRACE("IDBObjectStore::delete");
351 if (isDeleted()) { 350 if (isDeleted()) {
352 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage); 351 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage);
353 return nullptr; 352 return nullptr;
354 } 353 }
(...skipping 16 matching lines...) Expand all
371 if (!keyRange) { 370 if (!keyRange) {
372 exceptionState.throwDOMException(DataError, IDBDatabase::noKeyOrKeyRange ErrorMessage); 371 exceptionState.throwDOMException(DataError, IDBDatabase::noKeyOrKeyRange ErrorMessage);
373 return nullptr; 372 return nullptr;
374 } 373 }
375 if (!backendDB()) { 374 if (!backendDB()) {
376 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage); 375 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage);
377 return nullptr; 376 return nullptr;
378 } 377 }
379 378
380 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get()); 379 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
381 backendDB()->deleteRange(m_transaction->id(), id(), keyRange, WebIDBCallback sImpl::create(request).release()); 380 backendDB()->deleteRange(m_transaction->id(), id(), keyRange, WebIDBCallback sImpl::create(request).leakPtr());
382 return request; 381 return request;
383 } 382 }
384 383
385 IDBRequest* IDBObjectStore::clear(ScriptState* scriptState, ExceptionState& exce ptionState) 384 IDBRequest* IDBObjectStore::clear(ScriptState* scriptState, ExceptionState& exce ptionState)
386 { 385 {
387 IDB_TRACE("IDBObjectStore::clear"); 386 IDB_TRACE("IDBObjectStore::clear");
388 if (isDeleted()) { 387 if (isDeleted()) {
389 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage); 388 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage);
390 return nullptr; 389 return nullptr;
391 } 390 }
392 if (m_transaction->isFinished() || m_transaction->isFinishing()) { 391 if (m_transaction->isFinished() || m_transaction->isFinishing()) {
393 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionFinishedErrorMessage); 392 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionFinishedErrorMessage);
394 return nullptr; 393 return nullptr;
395 } 394 }
396 if (!m_transaction->isActive()) { 395 if (!m_transaction->isActive()) {
397 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionInactiveErrorMessage); 396 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionInactiveErrorMessage);
398 return nullptr; 397 return nullptr;
399 } 398 }
400 if (m_transaction->isReadOnly()) { 399 if (m_transaction->isReadOnly()) {
401 exceptionState.throwDOMException(ReadOnlyError, IDBDatabase::transaction ReadOnlyErrorMessage); 400 exceptionState.throwDOMException(ReadOnlyError, IDBDatabase::transaction ReadOnlyErrorMessage);
402 return nullptr; 401 return nullptr;
403 } 402 }
404 if (!backendDB()) { 403 if (!backendDB()) {
405 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage); 404 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage);
406 return nullptr; 405 return nullptr;
407 } 406 }
408 407
409 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get()); 408 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
410 backendDB()->clear(m_transaction->id(), id(), WebIDBCallbacksImpl::create(re quest).release()); 409 backendDB()->clear(m_transaction->id(), id(), WebIDBCallbacksImpl::create(re quest).leakPtr());
411 return request; 410 return request;
412 } 411 }
413 412
414 namespace { 413 namespace {
415 // This class creates the index keys for a given index by extracting 414 // This class creates the index keys for a given index by extracting
416 // them from the SerializedScriptValue, for all the existing values in 415 // them from the SerializedScriptValue, for all the existing values in
417 // the objectStore. It only needs to be kept alive by virtue of being 416 // the objectStore. It only needs to be kept alive by virtue of being
418 // a listener on an IDBRequest object, in the same way that JavaScript 417 // a listener on an IDBRequest object, in the same way that JavaScript
419 // cursor success handlers are kept alive. 418 // cursor success handlers are kept alive.
420 class IndexPopulator final : public EventListener { 419 class IndexPopulator final : public EventListener {
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 } 658 }
660 659
661 return openCursor(scriptState, keyRange, direction, WebIDBTaskTypeNormal); 660 return openCursor(scriptState, keyRange, direction, WebIDBTaskTypeNormal);
662 } 661 }
663 662
664 IDBRequest* IDBObjectStore::openCursor(ScriptState* scriptState, IDBKeyRange* ra nge, WebIDBCursorDirection direction, WebIDBTaskType taskType) 663 IDBRequest* IDBObjectStore::openCursor(ScriptState* scriptState, IDBKeyRange* ra nge, WebIDBCursorDirection direction, WebIDBTaskType taskType)
665 { 664 {
666 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get()); 665 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
667 request->setCursorDetails(IndexedDB::CursorKeyAndValue, direction); 666 request->setCursorDetails(IndexedDB::CursorKeyAndValue, direction);
668 667
669 backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::Invalid Id, range, direction, false, taskType, WebIDBCallbacksImpl::create(request).rele ase()); 668 backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::Invalid Id, range, direction, false, taskType, WebIDBCallbacksImpl::create(request).leak Ptr());
670 return request; 669 return request;
671 } 670 }
672 671
673 IDBRequest* IDBObjectStore::openKeyCursor(ScriptState* scriptState, const Script Value& range, const String& directionString, ExceptionState& exceptionState) 672 IDBRequest* IDBObjectStore::openKeyCursor(ScriptState* scriptState, const Script Value& range, const String& directionString, ExceptionState& exceptionState)
674 { 673 {
675 IDB_TRACE("IDBObjectStore::openKeyCursor"); 674 IDB_TRACE("IDBObjectStore::openKeyCursor");
676 if (isDeleted()) { 675 if (isDeleted()) {
677 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage); 676 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage);
678 return nullptr; 677 return nullptr;
679 } 678 }
(...skipping 12 matching lines...) Expand all
692 return nullptr; 691 return nullptr;
693 692
694 if (!backendDB()) { 693 if (!backendDB()) {
695 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage); 694 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage);
696 return nullptr; 695 return nullptr;
697 } 696 }
698 697
699 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get()); 698 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
700 request->setCursorDetails(IndexedDB::CursorKeyOnly, direction); 699 request->setCursorDetails(IndexedDB::CursorKeyOnly, direction);
701 700
702 backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::Invalid Id, keyRange, direction, true, WebIDBTaskTypeNormal, WebIDBCallbacksImpl::create (request).release()); 701 backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::Invalid Id, keyRange, direction, true, WebIDBTaskTypeNormal, WebIDBCallbacksImpl::create (request).leakPtr());
703 return request; 702 return request;
704 } 703 }
705 704
706 IDBRequest* IDBObjectStore::count(ScriptState* scriptState, const ScriptValue& r ange, ExceptionState& exceptionState) 705 IDBRequest* IDBObjectStore::count(ScriptState* scriptState, const ScriptValue& r ange, ExceptionState& exceptionState)
707 { 706 {
708 IDB_TRACE("IDBObjectStore::count"); 707 IDB_TRACE("IDBObjectStore::count");
709 if (isDeleted()) { 708 if (isDeleted()) {
710 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage); 709 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage);
711 return nullptr; 710 return nullptr;
712 } 711 }
713 if (m_transaction->isFinished() || m_transaction->isFinishing()) { 712 if (m_transaction->isFinished() || m_transaction->isFinishing()) {
714 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionFinishedErrorMessage); 713 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionFinishedErrorMessage);
715 return nullptr; 714 return nullptr;
716 } 715 }
717 if (!m_transaction->isActive()) { 716 if (!m_transaction->isActive()) {
718 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionInactiveErrorMessage); 717 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionInactiveErrorMessage);
719 return nullptr; 718 return nullptr;
720 } 719 }
721 720
722 IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->getExecuti onContext(), range, exceptionState); 721 IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->getExecuti onContext(), range, exceptionState);
723 if (exceptionState.hadException()) 722 if (exceptionState.hadException())
724 return nullptr; 723 return nullptr;
725 724
726 if (!backendDB()) { 725 if (!backendDB()) {
727 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage); 726 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::databas eClosedErrorMessage);
728 return nullptr; 727 return nullptr;
729 } 728 }
730 729
731 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get()); 730 IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
732 backendDB()->count(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, k eyRange, WebIDBCallbacksImpl::create(request).release()); 731 backendDB()->count(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, k eyRange, WebIDBCallbacksImpl::create(request).leakPtr());
733 return request; 732 return request;
734 } 733 }
735 734
736 void IDBObjectStore::abort() 735 void IDBObjectStore::abort()
737 { 736 {
738 for (auto& index : m_createdIndexes) 737 for (auto& index : m_createdIndexes)
739 index->markDeleted(); 738 index->markDeleted();
740 } 739 }
741 740
742 void IDBObjectStore::transactionFinished() 741 void IDBObjectStore::transactionFinished()
(...skipping 16 matching lines...) Expand all
759 } 758 }
760 return IDBIndexMetadata::InvalidId; 759 return IDBIndexMetadata::InvalidId;
761 } 760 }
762 761
763 WebIDBDatabase* IDBObjectStore::backendDB() const 762 WebIDBDatabase* IDBObjectStore::backendDB() const
764 { 763 {
765 return m_transaction->backendDB(); 764 return m_transaction->backendDB();
766 } 765 }
767 766
768 } // namespace blink 767 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698