blob: e6518ec21885f64d120db66853ddf3d76a6f137e [file] [log] [blame]
// Copyright 2017 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/public/platform/web_blob_info.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "third_party/blink/public/mojom/blob/blob.mojom-blink.h"
#include "third_party/blink/renderer/platform/blob/blob_data.h"
namespace blink {
WebBlobInfo::WebBlobInfo(const WebString& uuid,
const WebString& type,
uint64_t size,
CrossVariantMojoRemote<mojom::BlobInterfaceBase> blob)
: WebBlobInfo(BlobDataHandle::Create(
uuid,
type,
size,
mojo::PendingRemote<mojom::blink::Blob>(std::move(blob)))) {}
WebBlobInfo::WebBlobInfo(const WebString& uuid,
const WebString& file_name,
const WebString& type,
const base::Optional<base::Time>& last_modified,
uint64_t size,
CrossVariantMojoRemote<mojom::BlobInterfaceBase> blob)
: WebBlobInfo(BlobDataHandle::Create(
uuid,
type,
size,
mojo::PendingRemote<mojom::blink::Blob>(std::move(blob))),
file_name,
last_modified) {}
// static
WebBlobInfo WebBlobInfo::BlobForTesting(const WebString& uuid,
const WebString& type,
uint64_t size) {
return WebBlobInfo(uuid, type, size, mojo::NullRemote());
}
// static
WebBlobInfo WebBlobInfo::FileForTesting(const WebString& uuid,
const WebString& file_name,
const WebString& type) {
return WebBlobInfo(uuid, file_name, type, base::nullopt,
std::numeric_limits<uint64_t>::max(), mojo::NullRemote());
}
WebBlobInfo::~WebBlobInfo() {
blob_handle_.Reset();
}
WebBlobInfo::WebBlobInfo(const WebBlobInfo& other) {
*this = other;
}
WebBlobInfo& WebBlobInfo::operator=(const WebBlobInfo& other) = default;
CrossVariantMojoRemote<mojom::BlobInterfaceBase> WebBlobInfo::CloneBlobRemote()
const {
if (!blob_handle_)
return mojo::NullRemote();
return blob_handle_->CloneBlobRemote();
}
WebBlobInfo::WebBlobInfo(scoped_refptr<BlobDataHandle> handle)
: WebBlobInfo(handle, handle->GetType(), handle->size()) {}
WebBlobInfo::WebBlobInfo(scoped_refptr<BlobDataHandle> handle,
const WebString& file_name,
const base::Optional<base::Time>& last_modified)
: WebBlobInfo(handle,
file_name,
handle->GetType(),
last_modified,
handle->size()) {}
WebBlobInfo::WebBlobInfo(scoped_refptr<BlobDataHandle> handle,
const WebString& type,
uint64_t size)
: is_file_(false),
uuid_(handle->Uuid()),
type_(type),
size_(size),
blob_handle_(std::move(handle)) {}
WebBlobInfo::WebBlobInfo(scoped_refptr<BlobDataHandle> handle,
const WebString& file_name,
const WebString& type,
const base::Optional<base::Time>& last_modified,
uint64_t size)
: is_file_(true),
uuid_(handle->Uuid()),
type_(type),
size_(size),
blob_handle_(std::move(handle)),
file_name_(file_name),
last_modified_(last_modified) {}
scoped_refptr<BlobDataHandle> WebBlobInfo::GetBlobHandle() const {
return blob_handle_.Get();
}
} // namespace blink