1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/renderer/extensions/page_capture_custom_bindings.h" 6 7 #include "base/bind.h" 8 #include "base/strings/utf_string_conversions.h" 9 #include "chrome/common/extensions/extension_messages.h" 10 #include "content/public/renderer/render_view.h" 11 #include "grit/renderer_resources.h" 12 #include "third_party/WebKit/public/web/WebBlob.h" 13 #include "v8/include/v8.h" 14 15 namespace extensions { 16 17 PageCaptureCustomBindings::PageCaptureCustomBindings( 18 Dispatcher* dispatcher, 19 ChromeV8Context* context) 20 : ChromeV8Extension(dispatcher, context) { 21 RouteFunction("CreateBlob", 22 base::Bind(&PageCaptureCustomBindings::CreateBlob, 23 base::Unretained(this))); 24 RouteFunction("SendResponseAck", 25 base::Bind(&PageCaptureCustomBindings::SendResponseAck, 26 base::Unretained(this))); 27 } 28 29 void PageCaptureCustomBindings::CreateBlob( 30 const v8::FunctionCallbackInfo<v8::Value>& args) { 31 CHECK(args.Length() == 2); 32 CHECK(args[0]->IsString()); 33 CHECK(args[1]->IsInt32()); 34 blink::WebString path(UTF8ToUTF16(*v8::String::Utf8Value(args[0]))); 35 blink::WebBlob blob = 36 blink::WebBlob::createFromFile(path, args[1]->Int32Value()); 37 args.GetReturnValue().Set(blob.toV8Value()); 38 } 39 40 void PageCaptureCustomBindings::SendResponseAck( 41 const v8::FunctionCallbackInfo<v8::Value>& args) { 42 CHECK(args.Length() == 1); 43 CHECK(args[0]->IsInt32()); 44 45 content::RenderView* render_view = GetRenderView(); 46 if (render_view) { 47 render_view->Send(new ExtensionHostMsg_ResponseAck( 48 render_view->GetRoutingID(), args[0]->Int32Value())); 49 } 50 } 51 52 } // namespace extensions 53