| Index: third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
 | 
| diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
 | 
| index 2f035a201a6dd6e53b3f691d8f07dbd57a52a8e3..02b8025660348be8c5d992a4911215e55ceee47c 100644
 | 
| --- a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
 | 
| +++ b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
 | 
| @@ -25,6 +25,7 @@
 | 
|  
 | 
|  #include "modules/indexeddb/IDBObjectStore.h"
 | 
|  
 | 
| +#include "Source/modules/indexeddb/indexed_db.mojom-blink.h"
 | 
|  #include "bindings/core/v8/ExceptionState.h"
 | 
|  #include "bindings/core/v8/ExceptionStatePlaceholder.h"
 | 
|  #include "bindings/core/v8/ScriptState.h"
 | 
| @@ -37,9 +38,9 @@
 | 
|  #include "modules/indexeddb/IDBAny.h"
 | 
|  #include "modules/indexeddb/IDBCursorWithValue.h"
 | 
|  #include "modules/indexeddb/IDBDatabase.h"
 | 
| +#include "modules/indexeddb/IDBDatabaseProxy.h"
 | 
|  #include "modules/indexeddb/IDBKeyPath.h"
 | 
|  #include "modules/indexeddb/IDBTracing.h"
 | 
| -#include "modules/indexeddb/WebIDBCallbacksImpl.h"
 | 
|  #include "platform/SharedBuffer.h"
 | 
|  #include "public/platform/WebBlobInfo.h"
 | 
|  #include "public/platform/WebData.h"
 | 
| @@ -49,11 +50,10 @@
 | 
|  #include <memory>
 | 
|  #include <v8.h>
 | 
|  
 | 
| -using blink::WebBlobInfo;
 | 
| -using blink::WebIDBCallbacks;
 | 
| -using blink::WebIDBCursor;
 | 
| -using blink::WebIDBDatabase;
 | 
| -using blink::WebVector;
 | 
| +using indexed_db::mojom::blink::CursorDirection;
 | 
| +using indexed_db::mojom::blink::KeyPtr;
 | 
| +using indexed_db::mojom::blink::KeyRangePtr;
 | 
| +using indexed_db::mojom::blink::PutMode;
 | 
|  
 | 
|  namespace blink {
 | 
|  
 | 
| @@ -114,7 +114,8 @@ IDBRequest* IDBObjectStore::get(ScriptState* scriptState, const ScriptValue& key
 | 
|      }
 | 
|  
 | 
|      IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
 | 
| -    backendDB()->get(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, keyRange, false, WebIDBCallbacksImpl::create(request).release());
 | 
| +    indexed_db::mojom::blink::Database::GetCallback getCallback = convertToBaseCallback(WTF::bind(&IDBRequest::onGetResult, wrapWeakPersistent(request)));
 | 
| +    backendDB()->Get(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, keyRange, false, getCallback);
 | 
|      return request;
 | 
|  }
 | 
|  
 | 
| @@ -150,7 +151,7 @@ IDBRequest* IDBObjectStore::getAll(ScriptState* scriptState, const ScriptValue&
 | 
|      }
 | 
|  
 | 
|      IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
 | 
| -    backendDB()->getAll(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, maxCount, false, WebIDBCallbacksImpl::create(request).release());
 | 
| +    backendDB()->GetAll(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, maxCount, false);
 | 
|      return request;
 | 
|  }
 | 
|  
 | 
| @@ -186,7 +187,7 @@ IDBRequest* IDBObjectStore::getAllKeys(ScriptState* scriptState, const ScriptVal
 | 
|      }
 | 
|  
 | 
|      IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
 | 
| -    backendDB()->getAll(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, maxCount, true, WebIDBCallbacksImpl::create(request).release());
 | 
| +    backendDB()->GetAll(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, maxCount, true);
 | 
|      return request;
 | 
|  }
 | 
|  
 | 
| @@ -217,16 +218,16 @@ static void generateIndexKeysForValue(v8::Isolate* isolate, const IDBIndexMetada
 | 
|  IDBRequest* IDBObjectStore::add(ScriptState* scriptState, const ScriptValue& value, const ScriptValue& key, ExceptionState& exceptionState)
 | 
|  {
 | 
|      IDB_TRACE("IDBObjectStore::add");
 | 
| -    return put(scriptState, WebIDBPutModeAddOnly, IDBAny::create(this), value, key, exceptionState);
 | 
| +    return put(scriptState, PutMode::AddOnly, IDBAny::create(this), value, key, exceptionState);
 | 
|  }
 | 
|  
 | 
|  IDBRequest* IDBObjectStore::put(ScriptState* scriptState, const ScriptValue& value, const ScriptValue& key, ExceptionState& exceptionState)
 | 
|  {
 | 
|      IDB_TRACE("IDBObjectStore::put");
 | 
| -    return put(scriptState, WebIDBPutModeAddOrUpdate, IDBAny::create(this), value, key, exceptionState);
 | 
| +    return put(scriptState, PutMode::AddOrUpdate, IDBAny::create(this), value, key, exceptionState);
 | 
|  }
 | 
|  
 | 
| -IDBRequest* IDBObjectStore::put(ScriptState* scriptState, WebIDBPutMode putMode, IDBAny* source, const ScriptValue& value, const ScriptValue& keyValue, ExceptionState& exceptionState)
 | 
| +IDBRequest* IDBObjectStore::put(ScriptState* scriptState, PutMode putMode, IDBAny* source, const ScriptValue& value, const ScriptValue& keyValue, ExceptionState& exceptionState)
 | 
|  {
 | 
|      IDBKey* key = keyValue.isUndefined() ? nullptr : ScriptValue::to<IDBKey*>(scriptState->isolate(), keyValue, exceptionState);
 | 
|      if (exceptionState.hadException())
 | 
| @@ -234,7 +235,7 @@ IDBRequest* IDBObjectStore::put(ScriptState* scriptState, WebIDBPutMode putMode,
 | 
|      return put(scriptState, putMode, source, value, key, exceptionState);
 | 
|  }
 | 
|  
 | 
| -IDBRequest* IDBObjectStore::put(ScriptState* scriptState, WebIDBPutMode putMode, IDBAny* source, const ScriptValue& value, IDBKey* key, ExceptionState& exceptionState)
 | 
| +IDBRequest* IDBObjectStore::put(ScriptState* scriptState, PutMode putMode, IDBAny* source, const ScriptValue& value, IDBKey* key, ExceptionState& exceptionState)
 | 
|  {
 | 
|      if (isDeleted()) {
 | 
|          exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectStoreDeletedErrorMessage);
 | 
| @@ -269,13 +270,13 @@ IDBRequest* IDBObjectStore::put(ScriptState* scriptState, WebIDBPutMode putMode,
 | 
|      const bool usesInLineKeys = !keyPath.isNull();
 | 
|      const bool hasKeyGenerator = autoIncrement();
 | 
|  
 | 
| -    if (putMode != WebIDBPutModeCursorUpdate && usesInLineKeys && key) {
 | 
| +    if (putMode != PutMode::CursorUpdate && usesInLineKeys && key) {
 | 
|          exceptionState.throwDOMException(DataError, "The object store uses in-line keys and the key parameter was provided.");
 | 
|          return nullptr;
 | 
|      }
 | 
|  
 | 
|      // This test logically belongs in IDBCursor, but must operate on the cloned value.
 | 
| -    if (putMode == WebIDBPutModeCursorUpdate && usesInLineKeys) {
 | 
| +    if (putMode == PutMode::CursorUpdate && usesInLineKeys) {
 | 
|          ASSERT(key);
 | 
|          if (clone.isEmpty())
 | 
|              clone = deserializeScriptValue(scriptState, serializedValue.get(), &blobInfo);
 | 
| @@ -337,11 +338,14 @@ IDBRequest* IDBObjectStore::put(ScriptState* scriptState, WebIDBPutMode putMode,
 | 
|      }
 | 
|  
 | 
|      IDBRequest* request = IDBRequest::create(scriptState, source, m_transaction.get());
 | 
| -    Vector<char> wireBytes;
 | 
| -    serializedValue->toWireBytes(wireBytes);
 | 
| -    RefPtr<SharedBuffer> valueBuffer = SharedBuffer::adoptVector(wireBytes);
 | 
| -
 | 
| -    backendDB()->put(m_transaction->id(), id(), WebData(valueBuffer), blobInfo, key, static_cast<WebIDBPutMode>(putMode), WebIDBCallbacksImpl::create(request).release(), indexIds, indexKeys);
 | 
| +#if 0
 | 
| +    // Should we be using toWireButes, or instead using Mojo's built-in
 | 
| +    // serialization?
 | 
| +    Vector<int8_t> valueWireBytes;
 | 
| +    serializedValue->toWireBytes(valueWireBytes);
 | 
| +
 | 
| +    backendDB()->Put(m_transaction->id(), id(), std::move(valueWireBytes), createBlobInfo(blobInfo), createKey(key), putMode, std::move(indexIds), std::move(indexKeys));
 | 
| +#endif
 | 
|      return request;
 | 
|  }
 | 
|  
 | 
| @@ -378,7 +382,7 @@ IDBRequest* IDBObjectStore::deleteFunction(ScriptState* scriptState, const Scrip
 | 
|      }
 | 
|  
 | 
|      IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
 | 
| -    backendDB()->deleteRange(m_transaction->id(), id(), keyRange, WebIDBCallbacksImpl::create(request).release());
 | 
| +    backendDB()->DeleteRange(m_transaction->id(), id(), keyRange);
 | 
|      return request;
 | 
|  }
 | 
|  
 | 
| @@ -407,7 +411,7 @@ IDBRequest* IDBObjectStore::clear(ScriptState* scriptState, ExceptionState& exce
 | 
|      }
 | 
|  
 | 
|      IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
 | 
| -    backendDB()->clear(m_transaction->id(), id(), WebIDBCallbacksImpl::create(request).release());
 | 
| +    backendDB()->Clear(m_transaction->id(), id());
 | 
|      return request;
 | 
|  }
 | 
|  
 | 
| @@ -475,11 +479,11 @@ private:
 | 
|              HeapVector<IDBObjectStore::IndexKeys> indexKeysList;
 | 
|              indexKeysList.append(indexKeys);
 | 
|  
 | 
| -            m_database->backend()->setIndexKeys(m_transactionId, m_objectStoreId, primaryKey, indexIds, indexKeysList);
 | 
| +            m_database->backend()->SetIndexKeys(m_transactionId, m_objectStoreId, primaryKey, indexIds, indexKeysList);
 | 
|          } else {
 | 
|              // Now that we are done indexing, tell the backend to go
 | 
|              // back to processing tasks of type NormalTask.
 | 
| -            m_database->backend()->setIndexesReady(m_transactionId, m_objectStoreId, indexIds);
 | 
| +            m_database->backend()->SetIndexesReady(m_transactionId, m_objectStoreId, indexIds);
 | 
|              m_database.clear();
 | 
|          }
 | 
|  
 | 
| @@ -493,7 +497,7 @@ private:
 | 
|  };
 | 
|  } // namespace
 | 
|  
 | 
| -IDBIndex* IDBObjectStore::createIndex(ScriptState* scriptState, const String& name, const IDBKeyPath& keyPath, const IDBIndexParameters& options, ExceptionState& exceptionState)
 | 
| +IDBIndex* IDBObjectStore::createIndex(ScriptState* scriptState, const String& name, const StringOrStringSequence& keyPathSeq, const IDBIndexParameters& options, ExceptionState& exceptionState)
 | 
|  {
 | 
|      IDB_TRACE("IDBObjectStore::createIndex");
 | 
|      if (!m_transaction->isVersionChange()) {
 | 
| @@ -512,6 +516,7 @@ IDBIndex* IDBObjectStore::createIndex(ScriptState* scriptState, const String& na
 | 
|          exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase::transactionInactiveErrorMessage);
 | 
|          return nullptr;
 | 
|      }
 | 
| +    IDBKeyPath keyPath(keyPathSeq);
 | 
|      if (!keyPath.isValid()) {
 | 
|          exceptionState.throwDOMException(SyntaxError, "The keyPath argument contains an invalid key path.");
 | 
|          return nullptr;
 | 
| @@ -531,7 +536,7 @@ IDBIndex* IDBObjectStore::createIndex(ScriptState* scriptState, const String& na
 | 
|      }
 | 
|  
 | 
|      int64_t indexId = m_metadata.maxIndexId + 1;
 | 
| -    backendDB()->createIndex(m_transaction->id(), id(), indexId, name, keyPath, options.unique(), options.multiEntry());
 | 
| +    backendDB()->CreateIndex(m_transaction->id(), id(), indexId, name, keyPath, options.unique(), options.multiEntry());
 | 
|  
 | 
|      ++m_metadata.maxIndexId;
 | 
|  
 | 
| @@ -546,7 +551,7 @@ IDBIndex* IDBObjectStore::createIndex(ScriptState* scriptState, const String& na
 | 
|      if (exceptionState.hadException())
 | 
|          return nullptr;
 | 
|  
 | 
| -    IDBRequest* indexRequest = openCursor(scriptState, nullptr, WebIDBCursorDirectionNext, WebIDBTaskTypePreemptive);
 | 
| +    IDBRequest* indexRequest = openCursor(scriptState, nullptr, CursorDirection::Next, indexed_db::mojom::blink::TaskType::Preemptive);
 | 
|      indexRequest->preventPropagation();
 | 
|  
 | 
|      // This is kept alive by being the success handler of the request, which is in turn kept alive by the owning transaction.
 | 
| @@ -621,7 +626,7 @@ void IDBObjectStore::deleteIndex(const String& name, ExceptionState& exceptionSt
 | 
|          return;
 | 
|      }
 | 
|  
 | 
| -    backendDB()->deleteIndex(m_transaction->id(), id(), indexId);
 | 
| +    backendDB()->DeleteIndex(m_transaction->id(), id(), indexId);
 | 
|  
 | 
|      m_metadata.indexes.remove(indexId);
 | 
|      m_transaction->db()->indexDeleted(id(), indexId);
 | 
| @@ -648,7 +653,7 @@ IDBRequest* IDBObjectStore::openCursor(ScriptState* scriptState, const ScriptVal
 | 
|          return nullptr;
 | 
|      }
 | 
|  
 | 
| -    WebIDBCursorDirection direction = IDBCursor::stringToDirection(directionString);
 | 
| +    indexed_db::mojom::blink::CursorDirection direction = IDBCursor::stringToDirection(directionString);
 | 
|      IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->getExecutionContext(), range, exceptionState);
 | 
|      if (exceptionState.hadException())
 | 
|          return nullptr;
 | 
| @@ -658,15 +663,15 @@ IDBRequest* IDBObjectStore::openCursor(ScriptState* scriptState, const ScriptVal
 | 
|          return nullptr;
 | 
|      }
 | 
|  
 | 
| -    return openCursor(scriptState, keyRange, direction, WebIDBTaskTypeNormal);
 | 
| +    return openCursor(scriptState, keyRange, direction, indexed_db::mojom::blink::TaskType::Normal);
 | 
|  }
 | 
|  
 | 
| -IDBRequest* IDBObjectStore::openCursor(ScriptState* scriptState, IDBKeyRange* range, WebIDBCursorDirection direction, WebIDBTaskType taskType)
 | 
| +IDBRequest* IDBObjectStore::openCursor(ScriptState* scriptState, IDBKeyRange* range, CursorDirection direction, indexed_db::mojom::blink::TaskType taskType)
 | 
|  {
 | 
|      IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
 | 
|      request->setCursorDetails(IndexedDB::CursorKeyAndValue, direction);
 | 
|  
 | 
| -    backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, direction, false, taskType, WebIDBCallbacksImpl::create(request).release());
 | 
| +    backendDB()->OpenCursor(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, direction, false, taskType);
 | 
|      return request;
 | 
|  }
 | 
|  
 | 
| @@ -686,7 +691,7 @@ IDBRequest* IDBObjectStore::openKeyCursor(ScriptState* scriptState, const Script
 | 
|          return nullptr;
 | 
|      }
 | 
|  
 | 
| -    WebIDBCursorDirection direction = IDBCursor::stringToDirection(directionString);
 | 
| +    CursorDirection direction = IDBCursor::stringToDirection(directionString);
 | 
|      IDBKeyRange* keyRange = IDBKeyRange::fromScriptValue(scriptState->getExecutionContext(), range, exceptionState);
 | 
|      if (exceptionState.hadException())
 | 
|          return nullptr;
 | 
| @@ -699,7 +704,7 @@ IDBRequest* IDBObjectStore::openKeyCursor(ScriptState* scriptState, const Script
 | 
|      IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
 | 
|      request->setCursorDetails(IndexedDB::CursorKeyOnly, direction);
 | 
|  
 | 
| -    backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, keyRange, direction, true, WebIDBTaskTypeNormal, WebIDBCallbacksImpl::create(request).release());
 | 
| +    backendDB()->OpenCursor(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, keyRange, direction, true, indexed_db::mojom::blink::TaskType::Normal);
 | 
|      return request;
 | 
|  }
 | 
|  
 | 
| @@ -729,7 +734,7 @@ IDBRequest* IDBObjectStore::count(ScriptState* scriptState, const ScriptValue& r
 | 
|      }
 | 
|  
 | 
|      IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
 | 
| -    backendDB()->count(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, keyRange, WebIDBCallbacksImpl::create(request).release());
 | 
| +    backendDB()->Count(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, keyRange);
 | 
|      return request;
 | 
|  }
 | 
|  
 | 
| @@ -760,7 +765,7 @@ int64_t IDBObjectStore::findIndexId(const String& name) const
 | 
|      return IDBIndexMetadata::InvalidId;
 | 
|  }
 | 
|  
 | 
| -WebIDBDatabase* IDBObjectStore::backendDB() const
 | 
| +IDBDatabaseProxy* IDBObjectStore::backendDB() const
 | 
|  {
 | 
|      return m_transaction->backendDB();
 | 
|  }
 | 
| 
 |