Commit ceb8e984 authored by Ross McIlroy's avatar Ross McIlroy Committed by Commit Bot

[Cleanup] Avoid using deprecated V8 functions in pepper/v8_var_converter.

BUG=v8:7287,v8:8238,v8:7279,v8:7283

Change-Id: I088ba421cd1613616be2e613136ccebc09a900a2
Reviewed-on: https://chromium-review.googlesource.com/c/1349325
Commit-Queue: Ross McIlroy <rmcilroy@chromium.org>
Reviewed-by: default avatarDan Elphick <delphick@chromium.org>
Reviewed-by: default avatarRaymes Khoury <raymes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#611647}
parent f9955912
...@@ -210,11 +210,12 @@ bool GetOrCreateVar(v8::Local<v8::Value> val, ...@@ -210,11 +210,12 @@ bool GetOrCreateVar(v8::Local<v8::Value> val,
// we still add them to |visited_handles| so that the corresponding string // we still add them to |visited_handles| so that the corresponding string
// PP_Var created will be properly refcounted. // PP_Var created will be properly refcounted.
if (val->IsObject() || val->IsString()) { if (val->IsObject() || val->IsString()) {
if (parent_handles->count(HashedHandle(val->ToObject(isolate))) != 0) if (parent_handles->count(
HashedHandle(val->ToObject(context).ToLocalChecked())) != 0)
return false; return false;
HandleVarMap::const_iterator it = HandleVarMap::const_iterator it = visited_handles->find(
visited_handles->find(HashedHandle(val->ToObject(isolate))); HashedHandle(val->ToObject(context).ToLocalChecked()));
if (it != visited_handles->end()) { if (it != visited_handles->end()) {
*result = it->second.get(); *result = it->second.get();
return true; return true;
...@@ -228,11 +229,12 @@ bool GetOrCreateVar(v8::Local<v8::Value> val, ...@@ -228,11 +229,12 @@ bool GetOrCreateVar(v8::Local<v8::Value> val,
} else if (val->IsBoolean() || val->IsBooleanObject()) { } else if (val->IsBoolean() || val->IsBooleanObject()) {
*result = PP_MakeBool(PP_FromBool(val->ToBoolean(isolate)->Value())); *result = PP_MakeBool(PP_FromBool(val->ToBoolean(isolate)->Value()));
} else if (val->IsInt32()) { } else if (val->IsInt32()) {
*result = PP_MakeInt32(val->ToInt32(isolate)->Value()); *result = PP_MakeInt32(val.As<v8::Int32>()->Value());
} else if (val->IsNumber() || val->IsNumberObject()) { } else if (val->IsNumber() || val->IsNumberObject()) {
*result = PP_MakeDouble(val->ToNumber(isolate)->Value()); *result = PP_MakeDouble(val->NumberValue(context).ToChecked());
} else if (val->IsString() || val->IsStringObject()) { } else if (val->IsString() || val->IsStringObject()) {
v8::String::Utf8Value utf8(isolate, val->ToString(isolate)); v8::String::Utf8Value utf8(isolate,
val->ToString(context).ToLocalChecked());
*result = StringVar::StringToPPVar(std::string(*utf8, utf8.length())); *result = StringVar::StringToPPVar(std::string(*utf8, utf8.length()));
} else if (val->IsObject()) { } else if (val->IsObject()) {
// For any other v8 objects, the conversion happens as follows: // For any other v8 objects, the conversion happens as follows:
...@@ -274,7 +276,7 @@ bool GetOrCreateVar(v8::Local<v8::Value> val, ...@@ -274,7 +276,7 @@ bool GetOrCreateVar(v8::Local<v8::Value> val,
*did_create = true; *did_create = true;
if (val->IsObject() || val->IsString()) { if (val->IsObject() || val->IsString()) {
visited_handles->insert( visited_handles->insert(
make_pair(HashedHandle(val->ToObject(isolate)), make_pair(HashedHandle(val->ToObject(context).ToLocalChecked()),
ScopedPPVar(ScopedPPVar::PassRef(), *result))); ScopedPPVar(ScopedPPVar::PassRef(), *result)));
} }
return true; return true;
...@@ -383,9 +385,8 @@ bool V8VarConverter::ToV8Value(const PP_Var& var, ...@@ -383,9 +385,8 @@ bool V8VarConverter::ToV8Value(const PP_Var& var,
} }
if (did_create && CanHaveChildren(child_var)) if (did_create && CanHaveChildren(child_var))
stack.push_back(child_var); stack.push_back(child_var);
v8::TryCatch try_catch(isolate); if (v8_array->Set(context, static_cast<uint32_t>(i), child_v8)
v8_array->Set(static_cast<uint32_t>(i), child_v8); .IsNothing()) {
if (try_catch.HasCaught()) {
LOG(ERROR) << "Setter for index " << i << " threw an exception."; LOG(ERROR) << "Setter for index " << i << " threw an exception.";
return false; return false;
} }
...@@ -418,13 +419,15 @@ bool V8VarConverter::ToV8Value(const PP_Var& var, ...@@ -418,13 +419,15 @@ bool V8VarConverter::ToV8Value(const PP_Var& var,
} }
if (did_create && CanHaveChildren(child_var)) if (did_create && CanHaveChildren(child_var))
stack.push_back(child_var); stack.push_back(child_var);
v8::TryCatch try_catch(isolate);
v8_object->Set(v8::String::NewFromUtf8(isolate, key.c_str(), if (v8_object
v8::NewStringType::kInternalized, ->Set(context,
key.length()) v8::String::NewFromUtf8(isolate, key.c_str(),
.ToLocalChecked(), v8::NewStringType::kInternalized,
child_v8); key.length())
if (try_catch.HasCaught()) { .ToLocalChecked(),
child_v8)
.IsNothing()) {
LOG(ERROR) << "Setter for property " << key.c_str() << " threw an " LOG(ERROR) << "Setter for property " << key.c_str() << " threw an "
<< "exception."; << "exception.";
return false; return false;
...@@ -524,12 +527,11 @@ bool V8VarConverter::FromV8ValueInternal( ...@@ -524,12 +527,11 @@ bool V8VarConverter::FromV8ValueInternal(
} }
for (uint32_t i = 0; i < v8_array->Length(); ++i) { for (uint32_t i = 0; i < v8_array->Length(); ++i) {
v8::TryCatch try_catch(context->GetIsolate()); v8::Local<v8::Value> child_v8;
v8::Local<v8::Value> child_v8 = v8_array->Get(i); if (!v8_array->Get(context, i).ToLocal(&child_v8))
if (try_catch.HasCaught())
return false; return false;
if (!v8_array->HasRealIndexedProperty(i)) if (!v8_array->HasRealIndexedProperty(context, i).FromMaybe(false))
continue; continue;
PP_Var child_var; PP_Var child_var;
...@@ -560,9 +562,11 @@ bool V8VarConverter::FromV8ValueInternal( ...@@ -560,9 +562,11 @@ bool V8VarConverter::FromV8ValueInternal(
return false; return false;
} }
v8::Local<v8::Array> property_names(v8_object->GetOwnPropertyNames()); v8::Local<v8::Array> property_names(
v8_object->GetOwnPropertyNames(context).ToLocalChecked());
for (uint32_t i = 0; i < property_names->Length(); ++i) { for (uint32_t i = 0; i < property_names->Length(); ++i) {
v8::Local<v8::Value> key(property_names->Get(i)); v8::Local<v8::Value> key(
property_names->Get(context, i).ToLocalChecked());
// Extend this test to cover more types as necessary and if sensible. // Extend this test to cover more types as necessary and if sensible.
if (!key->IsString() && !key->IsNumber()) { if (!key->IsString() && !key->IsNumber()) {
...@@ -574,16 +578,17 @@ bool V8VarConverter::FromV8ValueInternal( ...@@ -574,16 +578,17 @@ bool V8VarConverter::FromV8ValueInternal(
} }
v8::Local<v8::String> key_string = v8::Local<v8::String> key_string =
key->ToString(context->GetIsolate()); key->ToString(context).ToLocalChecked();
// Skip all callbacks: crbug.com/139933 // Skip all callbacks: crbug.com/139933
if (v8_object->HasRealNamedCallbackProperty(key_string)) if (v8_object->HasRealNamedCallbackProperty(context, key_string)
.ToChecked()) {
continue; continue;
}
v8::String::Utf8Value name_utf8(context->GetIsolate(), key_string); v8::String::Utf8Value name_utf8(context->GetIsolate(), key_string);
v8::TryCatch try_catch(context->GetIsolate()); v8::Local<v8::Value> child_v8;
v8::Local<v8::Value> child_v8 = v8_object->Get(key); if (!v8_object->Get(context, key).ToLocal(&child_v8))
if (try_catch.HasCaught())
return false; return false;
PP_Var child_var; PP_Var child_var;
......
...@@ -87,6 +87,7 @@ bool Equals(const PP_Var& var, ...@@ -87,6 +87,7 @@ bool Equals(const PP_Var& var,
} }
v8::Isolate* isolate = v8::Isolate::GetCurrent(); v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::Local<v8::Context> context = isolate->GetCurrentContext();
if (val->IsUndefined()) { if (val->IsUndefined()) {
return var.type == PP_VARTYPE_UNDEFINED; return var.type == PP_VARTYPE_UNDEFINED;
} else if (val->IsNull()) { } else if (val->IsNull()) {
...@@ -96,10 +97,10 @@ bool Equals(const PP_Var& var, ...@@ -96,10 +97,10 @@ bool Equals(const PP_Var& var,
PP_FromBool(val->ToBoolean(isolate)->Value()) == var.value.as_bool; PP_FromBool(val->ToBoolean(isolate)->Value()) == var.value.as_bool;
} else if (val->IsInt32()) { } else if (val->IsInt32()) {
return var.type == PP_VARTYPE_INT32 && return var.type == PP_VARTYPE_INT32 &&
val->ToInt32(isolate)->Value() == var.value.as_int; val.As<v8::Int32>()->Value() == var.value.as_int;
} else if (val->IsNumber() || val->IsNumberObject()) { } else if (val->IsNumber() || val->IsNumberObject()) {
return var.type == PP_VARTYPE_DOUBLE && return var.type == PP_VARTYPE_DOUBLE &&
fabs(val->ToNumber(isolate)->Value() - var.value.as_double) <= fabs(val->NumberValue(context).ToChecked() - var.value.as_double) <=
1.0e-4; 1.0e-4;
} else if (val->IsString() || val->IsStringObject()) { } else if (val->IsString() || val->IsStringObject()) {
if (var.type != PP_VARTYPE_STRING) if (var.type != PP_VARTYPE_STRING)
...@@ -133,15 +134,18 @@ bool Equals(const PP_Var& var, ...@@ -133,15 +134,18 @@ bool Equals(const PP_Var& var,
return false; return false;
DictionaryVar* dict_var = DictionaryVar::FromPPVar(var); DictionaryVar* dict_var = DictionaryVar::FromPPVar(var);
DCHECK(dict_var); DCHECK(dict_var);
v8::Local<v8::Array> property_names(v8_object->GetOwnPropertyNames()); v8::Local<v8::Array> property_names(
v8_object->GetOwnPropertyNames(context).ToLocalChecked());
if (property_names->Length() != dict_var->key_value_map().size()) if (property_names->Length() != dict_var->key_value_map().size())
return false; return false;
for (uint32_t i = 0; i < property_names->Length(); ++i) { for (uint32_t i = 0; i < property_names->Length(); ++i) {
v8::Local<v8::Value> key(property_names->Get(i)); v8::Local<v8::Value> key(
property_names->Get(context, i).ToLocalChecked());
if (!key->IsString() && !key->IsNumber()) if (!key->IsString() && !key->IsNumber())
return false; return false;
v8::Local<v8::Value> child_v8 = v8_object->Get(key); v8::Local<v8::Value> child_v8 =
v8_object->Get(context, key).ToLocalChecked();
v8::String::Utf8Value name_utf8(isolate, key); v8::String::Utf8Value name_utf8(isolate, key);
ScopedPPVar release_key(ScopedPPVar::PassRef(), ScopedPPVar release_key(ScopedPPVar::PassRef(),
...@@ -375,12 +379,15 @@ TEST_F(V8VarConverterTest, Cycles) { ...@@ -375,12 +379,15 @@ TEST_F(V8VarConverterTest, Cycles) {
// Array <-> dictionary cycle. // Array <-> dictionary cycle.
std::string key = "1"; std::string key = "1";
object->Set( object
v8::String::NewFromUtf8(isolate_, key.c_str(), ->Set(context,
v8::NewStringType::kInternalized, key.length()) v8::String::NewFromUtf8(isolate_, key.c_str(),
.ToLocalChecked(), v8::NewStringType::kInternalized,
array); key.length())
array->Set(0, object); .ToLocalChecked(),
array)
.ToChecked();
array->Set(context, 0, object).ToChecked();
ASSERT_FALSE(FromV8ValueSync(object, context, &var_result)); ASSERT_FALSE(FromV8ValueSync(object, context, &var_result));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment