blob: 9b7516146aa7a41865af25510195bc059e88fb50 [file] [log] [blame]
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_BLOB_INFO_H_
#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_BLOB_INFO_H_
#include <optional>
#include "base/time/time.h"
#include "third_party/blink/public/mojom/blob/blob.mojom-shared.h"
#include "third_party/blink/public/platform/cross_variant_mojo_util.h"
#include "third_party/blink/public/platform/web_common.h"
#include "third_party/blink/public/platform/web_private_ptr.h"
#include "third_party/blink/public/platform/web_string.h"
namespace blink {
class BlobDataHandle;
class WebBlobInfo {
public:
WebBlobInfo()
: is_file_(false), size_(std::numeric_limits<uint64_t>::max()) {}
BLINK_EXPORT WebBlobInfo(const WebString& uuid,
const WebString& type,
uint64_t size,
CrossVariantMojoRemote<mojom::BlobInterfaceBase>);
BLINK_EXPORT WebBlobInfo(const WebString& uuid,
const WebString& file_name,
const WebString& type,
const std::optional<base::Time>& last_modified,
uint64_t size,
CrossVariantMojoRemote<mojom::BlobInterfaceBase>);
// For testing purposes, these two methods create a WebBlobInfo connected to a
// dangling mojo message pipe. This means that any operations that actually
// depend on the mojo connection to exist will fail, but otherwise you should
// be able to safely pass around these blobs.
BLINK_EXPORT static WebBlobInfo BlobForTesting(const WebString& uuid,
const WebString& type,
uint64_t size);
BLINK_EXPORT static WebBlobInfo FileForTesting(const WebString& uuid,
const WebString& file_name,
const WebString& type);
BLINK_EXPORT ~WebBlobInfo();
BLINK_EXPORT WebBlobInfo(const WebBlobInfo& other);
BLINK_EXPORT WebBlobInfo& operator=(const WebBlobInfo& other);
bool IsFile() const { return is_file_; }
const WebString& Uuid() const { return uuid_; }
const WebString& GetType() const { return type_; }
uint64_t size() const { return size_; }
const WebString& FileName() const { return file_name_; }
std::optional<base::Time> LastModified() const { return last_modified_; }
BLINK_EXPORT CrossVariantMojoRemote<mojom::BlobInterfaceBase>
CloneBlobRemote() const;
#if INSIDE_BLINK
BLINK_EXPORT WebBlobInfo(scoped_refptr<BlobDataHandle>);
BLINK_EXPORT WebBlobInfo(scoped_refptr<BlobDataHandle>,
const WebString& file_name,
const std::optional<base::Time>& last_modified);
// TODO(mek): Get rid of these constructors after ensuring that the
// BlobDataHandle always has the correct type and size.
BLINK_EXPORT WebBlobInfo(scoped_refptr<BlobDataHandle>,
const WebString& type,
uint64_t size);
BLINK_EXPORT WebBlobInfo(scoped_refptr<BlobDataHandle>,
const WebString& file_name,
const WebString& type,
const std::optional<base::Time>& last_modified,
uint64_t size);
BLINK_EXPORT scoped_refptr<BlobDataHandle> GetBlobHandle() const;
#endif
private:
bool is_file_;
WebString uuid_;
WebString type_; // MIME type
uint64_t size_;
WebPrivatePtrForRefCounted<BlobDataHandle> blob_handle_;
WebString file_name_; // Only for File
std::optional<base::Time> last_modified_; // Only for File
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_BLOB_INFO_H_