普通文本  |  47行  |  1.49 KB

// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/renderer/extensions/pepper_request_natives.h"

#include <string>

#include "base/logging.h"
#include "base/values.h"
#include "chrome/renderer/extensions/chrome_v8_context.h"
#include "content/public/renderer/v8_value_converter.h"

namespace extensions {

PepperRequestNatives::PepperRequestNatives(ChromeV8Context* context)
    : ObjectBackedNativeHandler(context) {
  RouteFunction(
      "SendResponse",
      base::Bind(&PepperRequestNatives::SendResponse, base::Unretained(this)));
}

void PepperRequestNatives::SendResponse(
    const v8::FunctionCallbackInfo<v8::Value>& args) {
  DCHECK_EQ(3, args.Length());
  DCHECK(args[0]->IsInt32());
  DCHECK(args[1]->IsArray());
  int request_id = args[0]->Int32Value();
  if (args[2]->IsString()) {
    context()->pepper_request_proxy()->OnResponseReceived(
        request_id, false, base::ListValue(), *v8::String::Utf8Value(args[2]));
    return;
  }

  scoped_ptr<content::V8ValueConverter> converter(
      content::V8ValueConverter::create());
  scoped_ptr<const base::Value> result(
      converter->FromV8Value(args[1], context()->v8_context()));
  DCHECK(result);
  const base::ListValue* result_list = NULL;
  CHECK(result->GetAsList(&result_list));
  context()->pepper_request_proxy()->OnResponseReceived(
      request_id, true, *result_list, "");
}

}  // namespace extensions