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."; ...@@ -25,6 +25,40 @@ const char kInvalidDimensions[] = "ImageData has invalid dimensions.";
const char kInvalidData[] = "ImageData data length does not match dimensions."; const char kInvalidData[] = "ImageData data length does not match dimensions.";
const char kNoMemory[] = "Chrome was unable to initialize icon."; 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
namespace extensions { namespace extensions {
...@@ -43,31 +77,27 @@ bool SetIconNatives::ConvertImageDataToBitmapValue( ...@@ -43,31 +77,27 @@ bool SetIconNatives::ConvertImageDataToBitmapValue(
v8::Local<v8::Value>* image_data_bitmap) { v8::Local<v8::Value>* image_data_bitmap) {
v8::Local<v8::Context> v8_context = context()->v8_context(); v8::Local<v8::Context> v8_context = context()->v8_context();
v8::Isolate* isolate = v8_context->GetIsolate(); v8::Isolate* isolate = v8_context->GetIsolate();
v8::Local<v8::Object> data = v8::Local<v8::Value> value;
image_data if (!image_data
->Get(v8::String::NewFromUtf8(isolate, "data", ->Get(v8_context,
v8::NewStringType::kInternalized) v8::String::NewFromUtf8(isolate, "data",
.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::NewStringType::kInternalized) v8::NewStringType::kInternalized)
.ToLocalChecked()) .ToLocalChecked())
->Int32Value(v8_context) .ToLocal(&value)) {
.FromMaybe(0); 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) { if (width <= 0 || height <= 0) {
isolate->ThrowException(v8::Exception::Error( ThrowException(isolate, kInvalidDimensions);
v8::String::NewFromUtf8(isolate, kInvalidDimensions,
v8::NewStringType::kInternalized)
.ToLocalChecked()));
return false; return false;
} }
...@@ -75,33 +105,19 @@ bool SetIconNatives::ConvertImageDataToBitmapValue( ...@@ -75,33 +105,19 @@ bool SetIconNatives::ConvertImageDataToBitmapValue(
// without overflowing below. // without overflowing below.
int max_width = (std::numeric_limits<int>::max() / 4) / height; int max_width = (std::numeric_limits<int>::max() / 4) / height;
if (width > max_width) { if (width > max_width) {
isolate->ThrowException(v8::Exception::Error( ThrowException(isolate, kInvalidDimensions);
v8::String::NewFromUtf8(isolate, kInvalidDimensions,
v8::NewStringType::kInternalized)
.ToLocalChecked()));
return false; return false;
} }
int data_length = int data_length = GetIntPropertyFromV8Object(data, v8_context, "length");
data->Get(v8::String::NewFromUtf8(isolate, "length",
v8::NewStringType::kInternalized)
.ToLocalChecked())
->Int32Value(v8_context)
.FromMaybe(0);
if (data_length != 4 * width * height) { if (data_length != 4 * width * height) {
isolate->ThrowException(v8::Exception::Error( ThrowException(isolate, kInvalidData);
v8::String::NewFromUtf8(isolate, kInvalidData,
v8::NewStringType::kInternalized)
.ToLocalChecked()));
return false; return false;
} }
SkBitmap bitmap; SkBitmap bitmap;
if (!bitmap.tryAllocN32Pixels(width, height)) { if (!bitmap.tryAllocN32Pixels(width, height)) {
isolate->ThrowException(v8::Exception::Error( ThrowException(isolate, kNoMemory);
v8::String::NewFromUtf8(isolate, kNoMemory,
v8::NewStringType::kInternalized)
.ToLocalChecked()));
return false; return false;
} }
bitmap.eraseARGB(0, 0, 0, 0); bitmap.eraseARGB(0, 0, 0, 0);
...@@ -109,26 +125,14 @@ bool SetIconNatives::ConvertImageDataToBitmapValue( ...@@ -109,26 +125,14 @@ bool SetIconNatives::ConvertImageDataToBitmapValue(
uint32_t* pixels = bitmap.getAddr32(0, 0); uint32_t* pixels = bitmap.getAddr32(0, 0);
for (int t = 0; t < width * height; t++) { for (int t = 0; t < width * height; t++) {
// |data| is RGBA, pixels is ARGB. // |data| is RGBA, pixels is ARGB.
pixels[t] = pixels[t] = SkPreMultiplyColor(
SkPreMultiplyColor(((data->Get(v8::Integer::New(isolate, 4 * t + 3)) ((GetIntPropertyFromV8Object(data, v8_context, 4 * t + 3) & 0xFF)
->Int32Value(v8_context)
.FromMaybe(0) &
0xFF)
<< 24) | << 24) |
((data->Get(v8::Integer::New(isolate, 4 * t + 0)) ((GetIntPropertyFromV8Object(data, v8_context, 4 * t + 0) & 0xFF)
->Int32Value(v8_context)
.FromMaybe(0) &
0xFF)
<< 16) | << 16) |
((data->Get(v8::Integer::New(isolate, 4 * t + 1)) ((GetIntPropertyFromV8Object(data, v8_context, 4 * t + 1) & 0xFF)
->Int32Value(v8_context)
.FromMaybe(0) &
0xFF)
<< 8) | << 8) |
((data->Get(v8::Integer::New(isolate, 4 * t + 2)) ((GetIntPropertyFromV8Object(data, v8_context, 4 * t + 2) & 0xFF)
->Int32Value(v8_context)
.FromMaybe(0) &
0xFF)
<< 0)); << 0));
} }
...@@ -147,29 +151,48 @@ bool SetIconNatives::ConvertImageDataToBitmapValue( ...@@ -147,29 +151,48 @@ bool SetIconNatives::ConvertImageDataToBitmapValue(
bool SetIconNatives::ConvertImageDataSetToBitmapValueSet( bool SetIconNatives::ConvertImageDataSetToBitmapValueSet(
v8::Local<v8::Object>& details, v8::Local<v8::Object>& details,
v8::Local<v8::Object>* bitmap_set_value) { v8::Local<v8::Object>* bitmap_set_value) {
v8::Isolate* isolate = context()->v8_context()->GetIsolate(); v8::Local<v8::Context> v8_context = context()->v8_context();
v8::Local<v8::Object> image_data_set = v8::Isolate* isolate = v8_context->GetIsolate();
details v8::Local<v8::Value> v8_value;
->Get(v8::String::NewFromUtf8(isolate, "imageData", if (!details
->Get(v8_context,
v8::String::NewFromUtf8(isolate, "imageData",
v8::NewStringType::kInternalized) v8::NewStringType::kInternalized)
.ToLocalChecked()) .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); 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) { 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); v8::String::Utf8Value utf8_key(isolate, key);
int size; int size;
if (!base::StringToInt(std::string(*utf8_key), &size)) if (!base::StringToInt(std::string(*utf8_key), &size))
continue; continue;
v8::Local<v8::Object> image_data = v8::Local<v8::Value> v8_image_value;
image_data_set->Get(key)->ToObject(isolate); 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; v8::Local<v8::Value> image_data_bitmap;
if (!ConvertImageDataToBitmapValue(image_data, &image_data_bitmap)) if (!ConvertImageDataToBitmapValue(image_data, &image_data_bitmap))
return false; return false;
(*bitmap_set_value)->Set(key, image_data_bitmap); (*bitmap_set_value)
->Set(v8_context, key, image_data_bitmap)
.FromMaybe(false);
} }
return true; return true;
} }
...@@ -178,24 +201,28 @@ void SetIconNatives::SetIconCommon( ...@@ -178,24 +201,28 @@ void SetIconNatives::SetIconCommon(
const v8::FunctionCallbackInfo<v8::Value>& args) { const v8::FunctionCallbackInfo<v8::Value>& args) {
CHECK_EQ(1, args.Length()); CHECK_EQ(1, args.Length());
CHECK(args[0]->IsObject()); 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())); v8::Local<v8::Object> bitmap_set_value(v8::Object::New(args.GetIsolate()));
if (!ConvertImageDataSetToBitmapValueSet(details, &bitmap_set_value)) if (!ConvertImageDataSetToBitmapValueSet(details, &bitmap_set_value))
return; return;
v8::Local<v8::Object> dict(v8::Object::New(args.GetIsolate())); 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) v8::NewStringType::kInternalized)
.ToLocalChecked(), .ToLocalChecked(),
bitmap_set_value); bitmap_set_value)
.FromMaybe(false);
v8::Local<v8::String> tabId = v8::Local<v8::String> tabId =
v8::String::NewFromUtf8(args.GetIsolate(), "tabId", v8::String::NewFromUtf8(args.GetIsolate(), "tabId",
v8::NewStringType::kInternalized) v8::NewStringType::kInternalized)
.ToLocalChecked(); .ToLocalChecked();
bool has_tabid = false; bool has_tabid = false;
if (details->Has(context()->v8_context(), tabId).To(&has_tabid) && if (details->Has(v8_context, tabId).To(&has_tabid) && has_tabid) {
has_tabid) { dict->Set(v8_context, tabId,
dict->Set(tabId, details->Get(tabId)); details->Get(v8_context, tabId).ToLocalChecked())
.FromMaybe(false);
} }
args.GetReturnValue().Set(dict); 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