blob: 801ca372319141ea450477bf78ef2450c0cbf826 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/modules/indexeddb/web_idb_factory_impl.h"
#include "base/memory/ptr_util.h"
#include "mojo/public/cpp/bindings/strong_associated_binding.h"
#include "third_party/blink/renderer/modules/indexeddb/indexed_db_callbacks_impl.h"
#include "third_party/blink/renderer/modules/indexeddb/indexed_db_database_callbacks_impl.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
namespace blink {
WebIDBFactoryImpl::WebIDBFactoryImpl(
mojom::blink::IDBFactoryPtrInfo factory_info)
: factory_(std::move(factory_info)) {}
WebIDBFactoryImpl::~WebIDBFactoryImpl() = default;
void WebIDBFactoryImpl::GetDatabaseInfo(
WebIDBCallbacks* callbacks,
scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
callbacks->SetState(nullptr, IndexedDBCallbacksImpl::kNoTransaction);
auto callbacks_impl =
std::make_unique<IndexedDBCallbacksImpl>(base::WrapUnique(callbacks));
factory_->GetDatabaseInfo(GetCallbacksProxy(std::move(callbacks_impl)));
}
void WebIDBFactoryImpl::GetDatabaseNames(
WebIDBCallbacks* callbacks,
scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
callbacks->SetState(nullptr, IndexedDBCallbacksImpl::kNoTransaction);
auto callbacks_impl =
std::make_unique<IndexedDBCallbacksImpl>(base::WrapUnique(callbacks));
factory_->GetDatabaseNames(GetCallbacksProxy(std::move(callbacks_impl)));
}
void WebIDBFactoryImpl::Open(
const String& name,
long long version,
long long transaction_id,
WebIDBCallbacks* callbacks,
WebIDBDatabaseCallbacks* database_callbacks,
scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
callbacks->SetState(nullptr, IndexedDBCallbacksImpl::kNoTransaction);
auto callbacks_impl =
std::make_unique<IndexedDBCallbacksImpl>(base::WrapUnique(callbacks));
auto database_callbacks_impl =
std::make_unique<IndexedDBDatabaseCallbacksImpl>(
base::WrapUnique(database_callbacks));
DCHECK(!name.IsNull());
factory_->Open(GetCallbacksProxy(std::move(callbacks_impl)),
GetDatabaseCallbacksProxy(std::move(database_callbacks_impl)),
name, version, transaction_id);
}
void WebIDBFactoryImpl::DeleteDatabase(
const String& name,
WebIDBCallbacks* callbacks,
bool force_close,
scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
callbacks->SetState(nullptr, IndexedDBCallbacksImpl::kNoTransaction);
auto callbacks_impl =
std::make_unique<IndexedDBCallbacksImpl>(base::WrapUnique(callbacks));
DCHECK(!name.IsNull());
factory_->DeleteDatabase(GetCallbacksProxy(std::move(callbacks_impl)), name,
force_close);
}
mojom::blink::IDBCallbacksAssociatedPtrInfo
WebIDBFactoryImpl::GetCallbacksProxy(
std::unique_ptr<IndexedDBCallbacksImpl> callbacks) {
mojom::blink::IDBCallbacksAssociatedPtrInfo ptr_info;
auto request = mojo::MakeRequest(&ptr_info);
mojo::MakeStrongAssociatedBinding(std::move(callbacks), std::move(request));
return ptr_info;
}
mojom::blink::IDBDatabaseCallbacksAssociatedPtrInfo
WebIDBFactoryImpl::GetDatabaseCallbacksProxy(
std::unique_ptr<IndexedDBDatabaseCallbacksImpl> callbacks) {
mojom::blink::IDBDatabaseCallbacksAssociatedPtrInfo ptr_info;
auto request = mojo::MakeRequest(&ptr_info);
mojo::MakeStrongAssociatedBinding(std::move(callbacks), std::move(request));
return ptr_info;
}
} // namespace blink