| Index: extensions/renderer/safe_builtins.cc
|
| diff --git a/extensions/renderer/safe_builtins.cc b/extensions/renderer/safe_builtins.cc
|
| index c3b22df0fc97f4d4e103c991c0d929089b32a745..7227319f4915201c6bbce77163a512a6ba262a5f 100644
|
| --- a/extensions/renderer/safe_builtins.cc
|
| +++ b/extensions/renderer/safe_builtins.cc
|
| @@ -8,6 +8,7 @@
|
| #include "base/stl_util.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "extensions/renderer/script_context.h"
|
| +#include "extensions/renderer/v8_maybe_helpers.h"
|
|
|
| namespace extensions {
|
|
|
| @@ -123,8 +124,9 @@ const char kScript[] =
|
| "}());\n";
|
|
|
| v8::Local<v8::String> MakeKey(const char* name, v8::Isolate* isolate) {
|
| - return v8::String::NewFromUtf8(
|
| - isolate, base::StringPrintf("%s::%s", kClassName, name).c_str());
|
| + std::string key = base::StringPrintf("%s::%s", kClassName, name);
|
| + CHECK(key.size() < v8::String::kMaxLength);
|
| + return ToV8String(isolate, key.c_str());
|
| }
|
|
|
| void SaveImpl(const char* name,
|
| @@ -150,9 +152,10 @@ class ExtensionImpl : public v8::Extension {
|
| v8::Local<v8::FunctionTemplate> GetNativeFunctionTemplate(
|
| v8::Isolate* isolate,
|
| v8::Local<v8::String> name) override {
|
| - if (name->Equals(v8::String::NewFromUtf8(isolate, "Apply")))
|
| + v8::Local<v8::Context> context = isolate->GetCurrentContext();
|
| + if (CheckV8Call(name->Equals(context, ToV8String(isolate, "Apply"))))
|
| return v8::FunctionTemplate::New(isolate, Apply);
|
| - if (name->Equals(v8::String::NewFromUtf8(isolate, "Save")))
|
| + if (CheckV8Call(name->Equals(context, ToV8String(isolate, "Save"))))
|
| return v8::FunctionTemplate::New(isolate, Save);
|
| NOTREACHED() << *v8::String::Utf8Value(name);
|
| return v8::Local<v8::FunctionTemplate>();
|
| @@ -170,27 +173,28 @@ class ExtensionImpl : public v8::Extension {
|
| recv = v8::Local<v8::Object>::Cast(info[1]);
|
| } else if (info[1]->IsString()) {
|
| recv = v8::StringObject::New(v8::Local<v8::String>::Cast(info[1]))
|
| - ->ToObject(info.GetIsolate());
|
| + .As<v8::Object>();
|
| } else {
|
| info.GetIsolate()->ThrowException(
|
| - v8::Exception::TypeError(v8::String::NewFromUtf8(
|
| + v8::Exception::TypeError(ToV8String(
|
| info.GetIsolate(),
|
| "The first argument is the receiver and must be an object")));
|
| return;
|
| }
|
| v8::Local<v8::Object> args = v8::Local<v8::Object>::Cast(info[2]);
|
| - int first_arg_index = info[3]->ToInt32(info.GetIsolate())->Value();
|
| - int args_length = info[4]->ToInt32(info.GetIsolate())->Value();
|
| + int first_arg_index = info[3].As<v8::Int32>()->Value();
|
| + int args_length = info[4].As<v8::Int32>()->Value();
|
|
|
| + v8::Local<v8::Context> context = info.GetIsolate()->GetCurrentContext();
|
| int argc = args_length - first_arg_index;
|
| scoped_ptr<v8::Local<v8::Value> []> argv(new v8::Local<v8::Value>[argc]);
|
| for (int i = 0; i < argc; ++i) {
|
| - CHECK(args->Has(i + first_arg_index));
|
| - argv[i] = args->Get(i + first_arg_index);
|
| + CHECK(CheckV8Call(args->Has(context, i + first_arg_index)));
|
| + argv[i] = args->Get(context, i + first_arg_index).ToLocalChecked();
|
| }
|
|
|
| - v8::Local<v8::Value> return_value = function->Call(recv, argc, argv.get());
|
| - if (!return_value.IsEmpty())
|
| + v8::Local<v8::Value> return_value;
|
| + if (function->Call(context, recv, argc, argv.get()).ToLocal(&return_value))
|
| info.GetReturnValue().Set(return_value);
|
| }
|
|
|
|
|