Home | History | Annotate | Download | only in extensions
      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/app_runtime_custom_bindings.h"
      6 
      7 #include "base/bind.h"
      8 #include "base/strings/string_number_conversions.h"
      9 #include "third_party/WebKit/public/platform/WebCString.h"
     10 #include "third_party/WebKit/public/platform/WebString.h"
     11 #include "third_party/WebKit/public/web/WebBlob.h"
     12 #include "third_party/WebKit/public/web/WebSerializedScriptValue.h"
     13 
     14 using WebKit::WebBlob;
     15 using WebKit::WebSerializedScriptValue;
     16 using WebKit::WebString;
     17 
     18 namespace {
     19 
     20 void DeserializeString(const v8::FunctionCallbackInfo<v8::Value> &args) {
     21   DCHECK(args.Length() == 1);
     22   DCHECK(args[0]->IsString());
     23 
     24   std::string data_v8(*v8::String::Utf8Value(args[0]));
     25   WebString data_webstring = WebString::fromUTF8(data_v8);
     26   WebSerializedScriptValue serialized =
     27       WebSerializedScriptValue::fromString(data_webstring);
     28   args.GetReturnValue().Set(serialized.deserialize());
     29 }
     30 
     31 void SerializeToString(const v8::FunctionCallbackInfo<v8::Value> &args) {
     32   DCHECK(args.Length() == 1);
     33   WebSerializedScriptValue data =
     34       WebSerializedScriptValue::serialize(args[0]);
     35   WebString data_webstring = data.toString();
     36 
     37   std::string v = std::string(data_webstring.utf8());
     38   args.GetReturnValue().Set(v8::String::New(v.c_str()));
     39 }
     40 
     41 void CreateBlob(const v8::FunctionCallbackInfo<v8::Value> &args) {
     42   DCHECK(args.Length() == 2);
     43   DCHECK(args[0]->IsString());
     44   DCHECK(args[1]->IsNumber());
     45 
     46   std::string blob_file_path(*v8::String::Utf8Value(args[0]));
     47   std::string blob_length_string(*v8::String::Utf8Value(args[1]));
     48   int64 blob_length = 0;
     49   DCHECK(base::StringToInt64(blob_length_string, &blob_length));
     50   WebKit::WebBlob web_blob = WebBlob::createFromFile(
     51       WebString::fromUTF8(blob_file_path), blob_length);
     52   args.GetReturnValue().Set(web_blob.toV8Value());
     53 }
     54 
     55 }  // namespace
     56 
     57 namespace extensions {
     58 
     59 AppRuntimeCustomBindings::AppRuntimeCustomBindings(
     60     Dispatcher* dispatcher,
     61     ChromeV8Context* context) : ChromeV8Extension(dispatcher, context) {
     62   RouteFunction("DeserializeString", base::Bind(&DeserializeString));
     63   RouteFunction("SerializeToString", base::Bind(&SerializeToString));
     64   RouteFunction("CreateBlob", base::Bind(&CreateBlob));
     65 }
     66 
     67 }  // namespace extensions
     68