Index: extensions/renderer/object_backed_native_handler.cc |
diff --git a/extensions/renderer/object_backed_native_handler.cc b/extensions/renderer/object_backed_native_handler.cc |
index b88bf32ca4cb291c6d5cfe86a09732f229e23d67..861a5b3ff1b2c5210804ed54bdf1c1e8cdbca367 100644 |
--- a/extensions/renderer/object_backed_native_handler.cc |
+++ b/extensions/renderer/object_backed_native_handler.cc |
@@ -9,6 +9,7 @@ |
#include "extensions/renderer/console.h" |
#include "extensions/renderer/module_system.h" |
#include "extensions/renderer/script_context.h" |
+#include "extensions/renderer/v8_maybe_helpers.h" |
#include "v8/include/v8.h" |
namespace extensions { |
@@ -28,9 +29,9 @@ ObjectBackedNativeHandler::ObjectBackedNativeHandler(ScriptContext* context) |
ObjectBackedNativeHandler::~ObjectBackedNativeHandler() { |
} |
-v8::Local<v8::Object> ObjectBackedNativeHandler::NewInstance() { |
+v8::MaybeLocal<v8::Object> ObjectBackedNativeHandler::NewInstance() { |
return v8::Local<v8::ObjectTemplate>::New(GetIsolate(), object_template_) |
- ->NewInstance(); |
+ ->NewInstance(context_->v8_context()); |
} |
// static |
@@ -38,11 +39,12 @@ void ObjectBackedNativeHandler::Router( |
const v8::FunctionCallbackInfo<v8::Value>& args) { |
v8::HandleScope handle_scope(args.GetIsolate()); |
v8::Local<v8::Object> data = args.Data().As<v8::Object>(); |
+ v8::Local<v8::Context> context = args.GetIsolate()->GetCurrentContext(); |
- v8::Local<v8::Value> handler_function_value = |
- data->Get(v8::String::NewFromUtf8(args.GetIsolate(), kHandlerFunction)); |
+ v8::Local<v8::Value> handler_function_value; |
// See comment in header file for why we do this. |
- if (handler_function_value.IsEmpty() || |
+ if (!data->Get(context, ToV8String(args.GetIsolate(), kHandlerFunction)) |
+ .ToLocal(&handler_function_value) || |
handler_function_value->IsUndefined()) { |
console::Error(args.GetIsolate()->GetCallingContext(), |
"Extension view no longer exists"); |
@@ -58,11 +60,12 @@ void ObjectBackedNativeHandler::RouteFunction( |
const HandlerFunction& handler_function) { |
v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
v8::HandleScope handle_scope(isolate); |
- v8::Context::Scope context_scope(context_->v8_context()); |
+ v8::Local<v8::Context> v8_context = context_->v8_context(); |
+ v8::Context::Scope context_scope(v8_context); |
v8::Local<v8::Object> data = v8::Object::New(isolate); |
- data->Set( |
- v8::String::NewFromUtf8(isolate, kHandlerFunction), |
+ SetProperty( |
+ v8_context, data, ToV8String(isolate, kHandlerFunction), |
v8::External::New(isolate, new HandlerFunction(handler_function))); |
v8::Local<v8::FunctionTemplate> function_template = |
v8::FunctionTemplate::New(isolate, Router, data); |
@@ -78,16 +81,16 @@ v8::Isolate* ObjectBackedNativeHandler::GetIsolate() const { |
void ObjectBackedNativeHandler::Invalidate() { |
v8::Isolate* isolate = GetIsolate(); |
v8::HandleScope handle_scope(isolate); |
- v8::Context::Scope context_scope(context_->v8_context()); |
+ v8::Local<v8::Context> v8_context = context_->v8_context(); |
+ v8::Context::Scope context_scope(v8_context); |
for (size_t i = 0; i < router_data_.Size(); i++) { |
v8::Local<v8::Object> data = router_data_.Get(i); |
v8::Local<v8::Value> handler_function_value = |
- data->Get(v8::String::NewFromUtf8(isolate, kHandlerFunction)); |
- CHECK(!handler_function_value.IsEmpty()); |
+ UnsafeGet(v8_context, data, ToV8String(isolate, kHandlerFunction)); |
delete static_cast<HandlerFunction*>( |
handler_function_value.As<v8::External>()->Value()); |
- data->Delete(v8::String::NewFromUtf8(isolate, kHandlerFunction)); |
+ data->Delete(v8_context, ToV8String(isolate, kHandlerFunction)); |
} |
router_data_.Clear(); |