| Index: extensions/renderer/blob_native_handler.cc
|
| diff --git a/extensions/renderer/blob_native_handler.cc b/extensions/renderer/blob_native_handler.cc
|
| index c887af63f67aa23d73089ac876e0db794f9ec451..dd10289d21a3f38e992a50b21bac4bef15dccefd 100644
|
| --- a/extensions/renderer/blob_native_handler.cc
|
| +++ b/extensions/renderer/blob_native_handler.cc
|
| @@ -5,6 +5,8 @@
|
| #include "extensions/renderer/blob_native_handler.h"
|
|
|
| #include "base/bind.h"
|
| +#include "third_party/WebKit/public/platform/Platform.h"
|
| +#include "third_party/WebKit/public/platform/WebBlobRegistry.h"
|
| #include "third_party/WebKit/public/platform/WebCString.h"
|
| #include "third_party/WebKit/public/platform/WebURL.h"
|
| #include "third_party/WebKit/public/web/WebBlob.h"
|
| @@ -19,6 +21,26 @@ void GetBlobUuid(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| v8::String::NewFromUtf8(args.GetIsolate(), blob.uuid().utf8().data()));
|
| }
|
|
|
| +// Take ownership of a Blob created on the browse process. Expects the Blob's
|
| +// UUID, type, and size as arguments.
|
| +void TakeBrowserProcessBlob(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| + DCHECK_EQ(3, args.Length());
|
| + DCHECK(args[0]->IsString());
|
| + DCHECK(args[1]->IsString());
|
| + DCHECK(args[2]->IsInt32());
|
| + std::string uuid(*v8::String::Utf8Value(args[0]->ToString()));
|
| + std::string type(*v8::String::Utf8Value(args[1]->ToString()));
|
| + blink::WebBlob blob = blink::WebBlob::createFromUUID(
|
| + blink::WebString::fromUTF8(uuid), blink::WebString::fromUTF8(type),
|
| + args[2]->Int32Value());
|
| + args.GetReturnValue().Set(blob.toV8Value());
|
| +
|
| + // Need to decrement the refcount to compensate for the extra count left over
|
| + // from the construction process in the browser side.
|
| + blink::Platform::current()->blobRegistry()->removeBlobDataRef(
|
| + blink::WebString::fromUTF8(uuid));
|
| +}
|
| +
|
| } // namespace
|
|
|
| namespace extensions {
|
| @@ -26,6 +48,7 @@ namespace extensions {
|
| BlobNativeHandler::BlobNativeHandler(ScriptContext* context)
|
| : ObjectBackedNativeHandler(context) {
|
| RouteFunction("GetBlobUuid", base::Bind(&GetBlobUuid));
|
| + RouteFunction("TakeBrowserProcessBlob", base::Bind(&TakeBrowserProcessBlob));
|
| }
|
|
|
| } // namespace extensions
|
|
|