Commit 818f675c authored by Mythri Alle's avatar Mythri Alle Committed by Commit Bot

Change deprecated V8 API calls to use non-deprecated versions

Change the soon to be deprecated API calls to use the alternate
non-deprecated versions in set_icon_natives.cc

Bug: v8:8238
Change-Id: I5b2365fe09bb89dcce5a52979823faee141c5070
Reviewed-on: https://chromium-review.googlesource.com/c/1349696Reviewed-by: default avatarJochen Eisinger <jochen@chromium.org>
Commit-Queue: Mythri Alle <mythria@chromium.org>
Cr-Commit-Position: refs/heads/master@{#611058}
parent 68459b91
......@@ -25,6 +25,40 @@ const char kInvalidDimensions[] = "ImageData has invalid dimensions.";
const char kInvalidData[] = "ImageData data length does not match dimensions.";
const char kNoMemory[] = "Chrome was unable to initialize icon.";
void ThrowException(v8::Isolate* isolate, const char* error_message) {
isolate->ThrowException(v8::Exception::Error(
v8::String::NewFromUtf8(isolate, error_message,
v8::NewStringType::kInternalized)
.ToLocalChecked()));
}
int GetIntPropertyFromV8Object(v8::Local<v8::Object> v8_object,
v8::Local<v8::Context> v8_context,
const char* property_name) {
v8::Local<v8::Value> v8_property_value;
if (!v8_object
->Get(v8_context, v8::String::NewFromUtf8(
v8_context->GetIsolate(), property_name,
v8::NewStringType::kInternalized)
.ToLocalChecked())
.ToLocal(&v8_property_value)) {
return 0;
}
return v8_property_value->Int32Value(v8_context).FromMaybe(0);
}
int GetIntPropertyFromV8Object(v8::Local<v8::Object> v8_object,
v8::Local<v8::Context> v8_context,
int index) {
v8::Local<v8::Value> v8_property_value;
if (!v8_object
->Get(v8_context, v8::Integer::New(v8_context->GetIsolate(), index))
.ToLocal(&v8_property_value)) {
return 0;
}
return v8_property_value->Int32Value(v8_context).FromMaybe(0);
}
} // namespace
namespace extensions {
......@@ -43,31 +77,27 @@ bool SetIconNatives::ConvertImageDataToBitmapValue(
v8::Local<v8::Value>* image_data_bitmap) {
v8::Local<v8::Context> v8_context = context()->v8_context();
v8::Isolate* isolate = v8_context->GetIsolate();
v8::Local<v8::Object> data =
image_data
->Get(v8::String::NewFromUtf8(isolate, "data",
v8::NewStringType::kInternalized)
.ToLocalChecked())
->ToObject(isolate);
int width = image_data
->Get(v8::String::NewFromUtf8(
isolate, "width", v8::NewStringType::kInternalized)
.ToLocalChecked())
->Int32Value(v8_context)
.FromMaybe(0);
int height =
image_data
->Get(v8::String::NewFromUtf8(isolate, "height",
v8::Local<v8::Value> value;
if (!image_data
->Get(v8_context,
v8::String::NewFromUtf8(isolate, "data",
v8::NewStringType::kInternalized)
.ToLocalChecked())
->Int32Value(v8_context)
.FromMaybe(0);
.ToLocal(&value)) {
ThrowException(isolate, kInvalidData);
return false;
}
v8::Local<v8::Object> data;
if (!value->ToObject(v8_context).ToLocal(&data)) {
ThrowException(isolate, kInvalidData);
return false;
}
int width = GetIntPropertyFromV8Object(image_data, v8_context, "width");
int height = GetIntPropertyFromV8Object(image_data, v8_context, "height");
if (width <= 0 || height <= 0) {
isolate->ThrowException(v8::Exception::Error(
v8::String::NewFromUtf8(isolate, kInvalidDimensions,
v8::NewStringType::kInternalized)
.ToLocalChecked()));
ThrowException(isolate, kInvalidDimensions);
return false;
}
......@@ -75,33 +105,19 @@ bool SetIconNatives::ConvertImageDataToBitmapValue(
// without overflowing below.
int max_width = (std::numeric_limits<int>::max() / 4) / height;
if (width > max_width) {
isolate->ThrowException(v8::Exception::Error(
v8::String::NewFromUtf8(isolate, kInvalidDimensions,
v8::NewStringType::kInternalized)
.ToLocalChecked()));
ThrowException(isolate, kInvalidDimensions);
return false;
}
int data_length =
data->Get(v8::String::NewFromUtf8(isolate, "length",
v8::NewStringType::kInternalized)
.ToLocalChecked())
->Int32Value(v8_context)
.FromMaybe(0);
int data_length = GetIntPropertyFromV8Object(data, v8_context, "length");
if (data_length != 4 * width * height) {
isolate->ThrowException(v8::Exception::Error(
v8::String::NewFromUtf8(isolate, kInvalidData,
v8::NewStringType::kInternalized)
.ToLocalChecked()));
ThrowException(isolate, kInvalidData);
return false;
}
SkBitmap bitmap;
if (!bitmap.tryAllocN32Pixels(width, height)) {
isolate->ThrowException(v8::Exception::Error(
v8::String::NewFromUtf8(isolate, kNoMemory,
v8::NewStringType::kInternalized)
.ToLocalChecked()));
ThrowException(isolate, kNoMemory);
return false;
}
bitmap.eraseARGB(0, 0, 0, 0);
......@@ -109,26 +125,14 @@ bool SetIconNatives::ConvertImageDataToBitmapValue(
uint32_t* pixels = bitmap.getAddr32(0, 0);
for (int t = 0; t < width * height; t++) {
// |data| is RGBA, pixels is ARGB.
pixels[t] =
SkPreMultiplyColor(((data->Get(v8::Integer::New(isolate, 4 * t + 3))
->Int32Value(v8_context)
.FromMaybe(0) &
0xFF)
pixels[t] = SkPreMultiplyColor(
((GetIntPropertyFromV8Object(data, v8_context, 4 * t + 3) & 0xFF)
<< 24) |
((data->Get(v8::Integer::New(isolate, 4 * t + 0))
->Int32Value(v8_context)
.FromMaybe(0) &
0xFF)
((GetIntPropertyFromV8Object(data, v8_context, 4 * t + 0) & 0xFF)
<< 16) |
((data->Get(v8::Integer::New(isolate, 4 * t + 1))
->Int32Value(v8_context)
.FromMaybe(0) &
0xFF)
((GetIntPropertyFromV8Object(data, v8_context, 4 * t + 1) & 0xFF)
<< 8) |
((data->Get(v8::Integer::New(isolate, 4 * t + 2))
->Int32Value(v8_context)
.FromMaybe(0) &
0xFF)
((GetIntPropertyFromV8Object(data, v8_context, 4 * t + 2) & 0xFF)
<< 0));
}
......@@ -147,29 +151,48 @@ bool SetIconNatives::ConvertImageDataToBitmapValue(
bool SetIconNatives::ConvertImageDataSetToBitmapValueSet(
v8::Local<v8::Object>& details,
v8::Local<v8::Object>* bitmap_set_value) {
v8::Isolate* isolate = context()->v8_context()->GetIsolate();
v8::Local<v8::Object> image_data_set =
details
->Get(v8::String::NewFromUtf8(isolate, "imageData",
v8::Local<v8::Context> v8_context = context()->v8_context();
v8::Isolate* isolate = v8_context->GetIsolate();
v8::Local<v8::Value> v8_value;
if (!details
->Get(v8_context,
v8::String::NewFromUtf8(isolate, "imageData",
v8::NewStringType::kInternalized)
.ToLocalChecked())
->ToObject(isolate);
.ToLocal(&v8_value)) {
return false;
}
v8::Local<v8::Object> image_data_set;
if (!v8_value->ToObject(v8_context).ToLocal(&image_data_set)) {
return false;
}
DCHECK(bitmap_set_value);
v8::Local<v8::Array> property_names(image_data_set->GetOwnPropertyNames());
v8::Local<v8::Array> property_names(
image_data_set->GetOwnPropertyNames(v8_context)
.FromMaybe(v8::Local<v8::Array>()));
for (size_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(v8_context, i).ToLocalChecked();
v8::String::Utf8Value utf8_key(isolate, key);
int size;
if (!base::StringToInt(std::string(*utf8_key), &size))
continue;
v8::Local<v8::Object> image_data =
image_data_set->Get(key)->ToObject(isolate);
v8::Local<v8::Value> v8_image_value;
if (!image_data_set->Get(v8_context, key).ToLocal(&v8_image_value)) {
return false;
}
v8::Local<v8::Object> image_data;
if (!v8_image_value->ToObject(v8_context).ToLocal(&image_data)) {
return false;
}
v8::Local<v8::Value> image_data_bitmap;
if (!ConvertImageDataToBitmapValue(image_data, &image_data_bitmap))
return false;
(*bitmap_set_value)->Set(key, image_data_bitmap);
(*bitmap_set_value)
->Set(v8_context, key, image_data_bitmap)
.FromMaybe(false);
}
return true;
}
......@@ -178,24 +201,28 @@ void SetIconNatives::SetIconCommon(
const v8::FunctionCallbackInfo<v8::Value>& args) {
CHECK_EQ(1, args.Length());
CHECK(args[0]->IsObject());
v8::Local<v8::Object> details = args[0]->ToObject(args.GetIsolate());
v8::Local<v8::Context> v8_context = context()->v8_context();
v8::Local<v8::Object> details = args[0].As<v8::Object>();
v8::Local<v8::Object> bitmap_set_value(v8::Object::New(args.GetIsolate()));
if (!ConvertImageDataSetToBitmapValueSet(details, &bitmap_set_value))
return;
v8::Local<v8::Object> dict(v8::Object::New(args.GetIsolate()));
dict->Set(v8::String::NewFromUtf8(args.GetIsolate(), "imageData",
dict->Set(v8_context,
v8::String::NewFromUtf8(args.GetIsolate(), "imageData",
v8::NewStringType::kInternalized)
.ToLocalChecked(),
bitmap_set_value);
bitmap_set_value)
.FromMaybe(false);
v8::Local<v8::String> tabId =
v8::String::NewFromUtf8(args.GetIsolate(), "tabId",
v8::NewStringType::kInternalized)
.ToLocalChecked();
bool has_tabid = false;
if (details->Has(context()->v8_context(), tabId).To(&has_tabid) &&
has_tabid) {
dict->Set(tabId, details->Get(tabId));
if (details->Has(v8_context, tabId).To(&has_tabid) && has_tabid) {
dict->Set(v8_context, tabId,
details->Get(v8_context, tabId).ToLocalChecked())
.FromMaybe(false);
}
args.GetReturnValue().Set(dict);
}
......
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