1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
// Copyright 2017 The Chromium Authors
// 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 std::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(BlobDataHandle::CreateForTesting(uuid, type, size));
}
// static
WebBlobInfo WebBlobInfo::FileForTesting(const WebString& uuid,
const WebString& file_name,
const WebString& type) {
return WebBlobInfo(BlobDataHandle::CreateForTesting(
uuid, type, std::numeric_limits<uint64_t>::max()),
file_name, std::nullopt);
}
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 std::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 std::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
|