blob: 69fd96e2d19e7c5bd3950b7cbc03c5a0c240b79e [file] [log] [blame]
[email protected]701a94e2014-04-17 04:37:371// Copyright 2014 The Chromium Authors. All rights reserved.
[email protected]4d6f38f2013-06-18 11:09:582// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]701a94e2014-04-17 04:37:375#include "extensions/renderer/blob_native_handler.h"
[email protected]4d6f38f2013-06-18 11:09:586
7#include "base/bind.h"
yukishiino42bd05a22015-06-15 08:17:088#include "extensions/renderer/script_context.h"
Blink Reformata30d4232018-04-07 15:31:069#include "third_party/blink/public/platform/web_url.h"
10#include "third_party/blink/public/web/web_blob.h"
[email protected]4d6f38f2013-06-18 11:09:5811
12namespace {
13
[email protected]4084ef92013-11-22 22:30:1614// Expects a single Blob argument. Returns the Blob's UUID.
15void GetBlobUuid(const v8::FunctionCallbackInfo<v8::Value>& args) {
rdevlin.cronin415b73b2015-11-13 01:14:4716 CHECK_EQ(1, args.Length());
Blink Reformat1c4d759e2017-04-09 16:34:5417 blink::WebBlob blob = blink::WebBlob::FromV8Value(args[0]);
Yang Guo1d9f5a62018-09-25 19:17:3718 args.GetReturnValue().Set(v8::String::NewFromUtf8(args.GetIsolate(),
19 blob.Uuid().Utf8().data(),
20 v8::NewStringType::kNormal)
21 .ToLocalChecked());
[email protected]4d6f38f2013-06-18 11:09:5822}
23
yukishiino42bd05a22015-06-15 08:17:0824} // namespace
25
26namespace extensions {
27
28BlobNativeHandler::BlobNativeHandler(ScriptContext* context)
Devlin Cronind9ea8342018-01-27 06:00:0429 : ObjectBackedNativeHandler(context) {}
30
31void BlobNativeHandler::AddRoutes() {
Devlin Cronincc02a0c2019-01-03 22:15:0732 RouteHandlerFunction("GetBlobUuid", base::BindRepeating(&GetBlobUuid));
33 RouteHandlerFunction(
34 "TakeBrowserProcessBlob",
35 base::BindRepeating(&BlobNativeHandler::TakeBrowserProcessBlob,
36 base::Unretained(this)));
yukishiino42bd05a22015-06-15 08:17:0837}
38
[email protected]c0b5eb02014-06-02 17:28:1039// Take ownership of a Blob created on the browser process. Expects the Blob's
40// UUID, type, and size as arguments. Returns the Blob we just took to
41// Javascript. The Blob reference in the browser process is dropped through
42// a separate flow to avoid leaking Blobs if the script context is destroyed.
yukishiino42bd05a22015-06-15 08:17:0843void BlobNativeHandler::TakeBrowserProcessBlob(
44 const v8::FunctionCallbackInfo<v8::Value>& args) {
rdevlin.cronin415b73b2015-11-13 01:14:4745 CHECK_EQ(3, args.Length());
46 CHECK(args[0]->IsString());
47 CHECK(args[1]->IsString());
48 CHECK(args[2]->IsInt32());
Adam Klein686c0e52018-01-17 23:42:3349 v8::Isolate* isolate = args.GetIsolate();
50 std::string uuid(*v8::String::Utf8Value(isolate, args[0]));
51 std::string type(*v8::String::Utf8Value(isolate, args[1]));
Blink Reformat1c4d759e2017-04-09 16:34:5452 blink::WebBlob blob = blink::WebBlob::CreateFromUUID(
53 blink::WebString::FromUTF8(uuid), blink::WebString::FromUTF8(type),
Dan Elphickd010a85a2018-08-03 11:32:2654 args[2].As<v8::Int32>()->Value());
Blink Reformat1c4d759e2017-04-09 16:34:5455 args.GetReturnValue().Set(
Adam Klein686c0e52018-01-17 23:42:3356 blob.ToV8Value(context()->v8_context()->Global(), isolate));
[email protected]4d6f38f2013-06-18 11:09:5857}
58
59} // namespace extensions