blob: ad6006f5a4c90df9328ba942c9186c17d5eb3e8c [file] [log] [blame]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "storage/browser/test/fake_blob.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "mojo/public/cpp/system/data_pipe_utils.h"
#include "net/base/net_errors.h"
namespace storage {
FakeBlob::FakeBlob(const std::string& uuid) : uuid_(uuid) {}
FakeBlob::~FakeBlob() = default;
mojo::PendingRemote<blink::mojom::Blob> FakeBlob::Clone() {
mojo::PendingRemote<blink::mojom::Blob> result;
Clone(result.InitWithNewPipeAndPassReceiver());
return result;
}
void FakeBlob::Clone(mojo::PendingReceiver<blink::mojom::Blob> receiver) {
auto other = std::make_unique<FakeBlob>(uuid_);
if (body_.has_value()) {
other->set_body(*body_);
}
mojo::MakeSelfOwnedReceiver(std::move(other), std::move(receiver));
}
void FakeBlob::AsDataPipeGetter(
mojo::PendingReceiver<network::mojom::DataPipeGetter>) {
NOTREACHED();
}
void FakeBlob::ReadRange(uint64_t offset,
uint64_t size,
mojo::ScopedDataPipeProducerHandle,
mojo::PendingRemote<blink::mojom::BlobReaderClient>) {
NOTREACHED();
}
void FakeBlob::ReadAll(
mojo::ScopedDataPipeProducerHandle handle,
mojo::PendingRemote<blink::mojom::BlobReaderClient> client) {
mojo::Remote<blink::mojom::BlobReaderClient> client_remote(std::move(client));
if (!body_) {
if (client_remote.is_bound()) {
client_remote->OnComplete(net::Error::ERR_FILE_NOT_FOUND, 0);
}
} else {
if (client_remote.is_bound()) {
client_remote->OnCalculatedSize(body_->size(), body_->size());
}
CHECK(mojo::BlockingCopyFromString(*body_, handle));
if (client_remote.is_bound()) {
client_remote->OnComplete(net::Error::OK, body_->size());
}
}
}
void FakeBlob::Load(mojo::PendingReceiver<network::mojom::URLLoader>,
const std::string& method,
const net::HttpRequestHeaders&,
mojo::PendingRemote<network::mojom::URLLoaderClient>) {
NOTREACHED();
}
void FakeBlob::ReadSideData(ReadSideDataCallback) {
NOTREACHED();
}
void FakeBlob::CaptureSnapshot(CaptureSnapshotCallback) {
NOTREACHED();
}
void FakeBlob::GetInternalUUID(GetInternalUUIDCallback callback) {
std::move(callback).Run(uuid_);
}
} // namespace storage