feat: promisify session.getBlobData() (#17303)
This commit is contained in:
parent
c082b3964c
commit
aa8b66aae1
8 changed files with 45 additions and 38 deletions
|
@ -27,12 +27,10 @@ void FreeNodeBufferData(char* data, void* hint) {
|
|||
delete[] data;
|
||||
}
|
||||
|
||||
void RunCallbackInUI(const AtomBlobReader::CompletionCallback& callback,
|
||||
char* blob_data,
|
||||
int size) {
|
||||
void RunPromiseInUI(util::Promise promise, char* blob_data, int size) {
|
||||
DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
||||
v8::Isolate* isolate = promise.isolate();
|
||||
|
||||
v8::Isolate* isolate = v8::Isolate::GetCurrent();
|
||||
v8::Locker locker(isolate);
|
||||
v8::HandleScope handle_scope(isolate);
|
||||
if (blob_data) {
|
||||
|
@ -40,9 +38,9 @@ void RunCallbackInUI(const AtomBlobReader::CompletionCallback& callback,
|
|||
node::Buffer::New(isolate, blob_data, static_cast<size_t>(size),
|
||||
&FreeNodeBufferData, nullptr)
|
||||
.ToLocalChecked();
|
||||
callback.Run(buffer);
|
||||
promise.Resolve(buffer);
|
||||
} else {
|
||||
callback.Run(v8::Null(isolate));
|
||||
promise.RejectWithErrorMessage("Could not get blob data");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -53,29 +51,29 @@ AtomBlobReader::AtomBlobReader(content::ChromeBlobStorageContext* blob_context)
|
|||
|
||||
AtomBlobReader::~AtomBlobReader() {}
|
||||
|
||||
void AtomBlobReader::StartReading(
|
||||
const std::string& uuid,
|
||||
const AtomBlobReader::CompletionCallback& completion_callback) {
|
||||
void AtomBlobReader::StartReading(const std::string& uuid,
|
||||
util::Promise promise) {
|
||||
DCHECK_CURRENTLY_ON(BrowserThread::IO);
|
||||
|
||||
auto blob_data_handle = blob_context_->context()->GetBlobDataFromUUID(uuid);
|
||||
auto callback = base::Bind(&RunCallbackInUI, completion_callback);
|
||||
if (!blob_data_handle) {
|
||||
base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI},
|
||||
base::BindOnce(callback, nullptr, 0));
|
||||
util::Promise::RejectPromise(std::move(promise),
|
||||
"Could not get blob data handle");
|
||||
return;
|
||||
}
|
||||
|
||||
auto blob_reader = blob_data_handle->CreateReader();
|
||||
BlobReadHelper* blob_read_helper =
|
||||
new BlobReadHelper(std::move(blob_reader), callback);
|
||||
new BlobReadHelper(std::move(blob_reader),
|
||||
base::BindOnce(&RunPromiseInUI, std::move(promise)));
|
||||
blob_read_helper->Read();
|
||||
}
|
||||
|
||||
AtomBlobReader::BlobReadHelper::BlobReadHelper(
|
||||
std::unique_ptr<storage::BlobReader> blob_reader,
|
||||
const BlobReadHelper::CompletionCallback& callback)
|
||||
: blob_reader_(std::move(blob_reader)), completion_callback_(callback) {}
|
||||
BlobReadHelper::CompletionCallback callback)
|
||||
: blob_reader_(std::move(blob_reader)),
|
||||
completion_callback_(std::move(callback)) {}
|
||||
|
||||
AtomBlobReader::BlobReadHelper::~BlobReadHelper() {}
|
||||
|
||||
|
@ -117,8 +115,9 @@ void AtomBlobReader::BlobReadHelper::DidReadBlobData(
|
|||
|
||||
char* data = new char[size];
|
||||
memcpy(data, blob_data->data(), size);
|
||||
base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI},
|
||||
base::BindOnce(completion_callback_, data, size));
|
||||
base::PostTaskWithTraits(
|
||||
FROM_HERE, {BrowserThread::UI},
|
||||
base::BindOnce(std::move(completion_callback_), data, size));
|
||||
delete this;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue