Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(988)

Unified Diff: extensions/renderer/dispatcher.cc

Issue 1167423002: Use V8 Maybe APIs in extensions/renderer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/renderer/console.cc ('k') | extensions/renderer/event_bindings.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/renderer/dispatcher.cc
diff --git a/extensions/renderer/dispatcher.cc b/extensions/renderer/dispatcher.cc
index cf4bb57884563c16530c38bf7769cb048d9faee6..e7d62477845eca014295a07bdffbd8031eb3fefb 100644
--- a/extensions/renderer/dispatcher.cc
+++ b/extensions/renderer/dispatcher.cc
@@ -80,6 +80,7 @@
#include "extensions/renderer/user_gestures_native_handler.h"
#include "extensions/renderer/utils_native_handler.h"
#include "extensions/renderer/v8_context_native_handler.h"
+#include "extensions/renderer/v8_maybe_helpers.h"
#include "grit/extensions_renderer_resources.h"
#include "third_party/WebKit/public/platform/WebString.h"
#include "third_party/WebKit/public/platform/WebURLRequest.h"
@@ -124,13 +125,14 @@ static const char kOnSuspendCanceledEvent[] = "runtime.onSuspendCanceled";
// Note that this isn't necessarily an object, since webpages can write, for
// example, "window.chrome = true".
v8::Local<v8::Value> GetOrCreateChrome(ScriptContext* context) {
- v8::Local<v8::String> chrome_string(
- v8::String::NewFromUtf8(context->isolate(), "chrome"));
- v8::Local<v8::Object> global(context->v8_context()->Global());
- v8::Local<v8::Value> chrome(global->Get(chrome_string));
- if (chrome->IsUndefined()) {
+ v8::Local<v8::Context> v8_context(context->v8_context());
+ v8::Local<v8::String> chrome_string(ToV8String(context->isolate(), "chrome"));
+ v8::Local<v8::Object> global(v8_context->Global());
+ v8::Local<v8::Value> chrome;
+ if (!global->Get(v8_context, chrome_string).ToLocal(&chrome) ||
+ chrome->IsUndefined()) {
chrome = v8::Object::New(context->isolate());
- global->Set(chrome_string, chrome);
+ SetProperty(v8_context, global, chrome_string, chrome);
}
return chrome;
}
@@ -1194,9 +1196,11 @@ void Dispatcher::RegisterBinding(const std::string& api_name,
if (bind_object.IsEmpty())
return;
+ v8::Local<v8::Context> v8_context = context->v8_context();
v8::Local<v8::String> v8_bind_name =
- v8::String::NewFromUtf8(context->isolate(), bind_name.c_str());
- if (bind_object->HasRealNamedProperty(v8_bind_name)) {
+ ToV8String(context->isolate(), bind_name.c_str());
+ if (CheckV8Call(
+ bind_object->HasRealNamedProperty(v8_context, v8_bind_name))) {
// The bind object may already have the property if the API has been
// registered before (or if the extension has put something there already,
// but, whatevs).
@@ -1206,9 +1210,12 @@ void Dispatcher::RegisterBinding(const std::string& api_name,
// others so that we don't destroy state such as event listeners.
//
// TODO(kalman): Only register available APIs to make this all moot.
- if (bind_object->HasRealNamedCallbackProperty(v8_bind_name))
+ if (CheckV8Call(bind_object->HasRealNamedCallbackProperty(v8_context,
+ v8_bind_name)))
return; // lazy binding still there, nothing to do
- if (bind_object->Get(v8_bind_name)->IsObject())
+ v8::Local<v8::Value> bind;
+ if (bind_object->Get(v8_context, v8_bind_name).ToLocal(&bind) &&
+ bind->IsObject())
return; // binding has already been fully installed
}
@@ -1308,20 +1315,22 @@ v8::Local<v8::Object> Dispatcher::GetOrCreateObject(
const v8::Local<v8::Object>& object,
const std::string& field,
v8::Isolate* isolate) {
- v8::Local<v8::String> key = v8::String::NewFromUtf8(isolate, field.c_str());
+ DCHECK(field.size() < v8::String::kMaxLength);
+ v8::Local<v8::String> key = ToV8String(isolate, field.c_str());
+ v8::Local<v8::Context> context = isolate->GetCurrentContext();
// If the object has a callback property, it is assumed it is an unavailable
// API, so it is safe to delete. This is checked before GetOrCreateObject is
// called.
- if (object->HasRealNamedCallbackProperty(key)) {
- object->Delete(key);
- } else if (object->HasRealNamedProperty(key)) {
- v8::Local<v8::Value> value = object->Get(key);
+ if (CheckV8Call(object->HasRealNamedCallbackProperty(context, key))) {
+ object->Delete(context, key);
+ } else if (CheckV8Call(object->HasRealNamedProperty(context, key))) {
+ v8::Local<v8::Value> value = object->Get(context, key).ToLocalChecked();
CHECK(value->IsObject());
return v8::Local<v8::Object>::Cast(value);
}
v8::Local<v8::Object> new_object = v8::Object::New(isolate);
- object->Set(key, new_object);
+ SetProperty(context, object, key, new_object);
return new_object;
}
« no previous file with comments | « extensions/renderer/console.cc ('k') | extensions/renderer/event_bindings.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698