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

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

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

Powered by Google App Engine
This is Rietveld 408576698