Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / renderer / extensions / pepper_request_natives.cc
1 // Copyright 2013 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/pepper_request_natives.h"
6
7 #include <string>
8
9 #include "base/logging.h"
10 #include "base/values.h"
11 #include "chrome/renderer/extensions/chrome_v8_context.h"
12 #include "content/public/renderer/v8_value_converter.h"
13
14 namespace extensions {
15
16 PepperRequestNatives::PepperRequestNatives(ScriptContext* context)
17     : ObjectBackedNativeHandler(context) {
18   RouteFunction(
19       "SendResponse",
20       base::Bind(&PepperRequestNatives::SendResponse, base::Unretained(this)));
21 }
22
23 void PepperRequestNatives::SendResponse(
24     const v8::FunctionCallbackInfo<v8::Value>& args) {
25   DCHECK_EQ(3, args.Length());
26   DCHECK(args[0]->IsInt32());
27   DCHECK(args[1]->IsArray());
28   int request_id = args[0]->Int32Value();
29
30   // TODO(rockot): This downcast should be eliminated.
31   // See http://crbug.com/362616.
32   ChromeV8Context* chrome_context = static_cast<ChromeV8Context*>(context());
33   if (args[2]->IsString()) {
34     chrome_context->pepper_request_proxy()->OnResponseReceived(
35         request_id, false, base::ListValue(), *v8::String::Utf8Value(args[2]));
36     return;
37   }
38
39   scoped_ptr<content::V8ValueConverter> converter(
40       content::V8ValueConverter::create());
41   scoped_ptr<const base::Value> result(
42       converter->FromV8Value(args[1], chrome_context->v8_context()));
43   DCHECK(result);
44   const base::ListValue* result_list = NULL;
45   CHECK(result->GetAsList(&result_list));
46   chrome_context->pepper_request_proxy()->OnResponseReceived(
47       request_id, true, *result_list, "");
48 }
49
50 }  // namespace extensions