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); |
} |