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

Unified Diff: Source/bindings/scripts/code_generator_v8.pm

Issue 47853004: IDL Compiler: Make [PerWorldBindings] work with [DoNotCheckSecurity] (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 2 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 | « no previous file | Source/bindings/tests/idls/TestActiveDOMObject.idl » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/scripts/code_generator_v8.pm
diff --git a/Source/bindings/scripts/code_generator_v8.pm b/Source/bindings/scripts/code_generator_v8.pm
index 345632de4ca27269b6d43c547ee7cb8cb3eeffc8..0657249e4bcb9d961bfad9648b7227d4bf8be01b 100644
--- a/Source/bindings/scripts/code_generator_v8.pm
+++ b/Source/bindings/scripts/code_generator_v8.pm
@@ -1168,6 +1168,7 @@ sub GenerateDomainSafeFunctionGetter
{
my $function = shift;
my $interface = shift;
+ my $forMainWorldSuffix = shift;
my $implClassName = GetImplName($interface);
my $v8ClassName = GetV8ClassName($interface);
@@ -1179,11 +1180,11 @@ sub GenerateDomainSafeFunctionGetter
$signature = "v8::Local<v8::Signature>()";
}
- my $newTemplateParams = "${implClassName}V8Internal::${funcName}MethodCallback, v8Undefined(), $signature";
+ my $newTemplateParams = "${implClassName}V8Internal::${funcName}MethodCallback${forMainWorldSuffix}, v8Undefined(), $signature";
AddToImplIncludes("bindings/v8/BindingSecurity.h");
$implementation{nameSpaceInternal}->add(<<END);
-static void ${funcName}AttributeGetter(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info)
+static void ${funcName}AttributeGetter${forMainWorldSuffix}(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info)
{
// This is only for getting a unique pointer which we can pass to privateTemplate.
static int privateTemplateUniqueKey;
@@ -1217,10 +1218,10 @@ static void ${funcName}AttributeGetter(v8::Local<v8::String> name, const v8::Pro
END
$implementation{nameSpaceInternal}->add(<<END);
-static void ${funcName}AttributeGetterCallback(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info)
+static void ${funcName}AttributeGetterCallback${forMainWorldSuffix}(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info)
{
TRACE_EVENT_SET_SAMPLING_STATE("Blink", "DOMGetter");
- ${implClassName}V8Internal::${funcName}AttributeGetter(name, info);
+ ${implClassName}V8Internal::${funcName}AttributeGetter${forMainWorldSuffix}(name, info);
TRACE_EVENT_SET_SAMPLING_STATE("V8", "Execution");
}
@@ -3287,8 +3288,17 @@ sub GenerateNonStandardFunction
$code .= <<END;
// $commentInfo
- ${conditional}$template->SetAccessor(v8::String::NewSymbol("$name"), ${implClassName}V8Internal::${name}AttributeGetterCallback, ${setter}, v8Undefined(), v8::ALL_CAN_READ, static_cast<v8::PropertyAttribute>($property_attributes));
END
+ if ($function->extendedAttributes->{"PerWorldBindings"}) {
+ $code .= " if (currentWorldType == MainWorld) {\n";
+ $code .= " ${conditional}$template->SetAccessor(v8::String::NewSymbol(\"$name\"), ${implClassName}V8Internal::${name}AttributeGetterCallbackForMainWorld, ${setter}, v8Undefined(), v8::ALL_CAN_READ, static_cast<v8::PropertyAttribute>($property_attributes));\n";
+ $code .= " } else {\n";
+ $code .= " ${conditional}$template->SetAccessor(v8::String::NewSymbol(\"$name\"), ${implClassName}V8Internal::${name}AttributeGetterCallback, ${setter}, v8Undefined(), v8::ALL_CAN_READ, static_cast<v8::PropertyAttribute>($property_attributes));\n";
+ $code .= " }\n";
+ } else {
+ $code .= " ${conditional}$template->SetAccessor(v8::String::NewSymbol(\"$name\"), ${implClassName}V8Internal::${name}AttributeGetterCallback, ${setter}, v8Undefined(), v8::ALL_CAN_READ, static_cast<v8::PropertyAttribute>($property_attributes));\n";
+ }
+
return $code;
}
@@ -4234,7 +4244,13 @@ END
# for different calling context.
if ($interface->extendedAttributes->{"CheckSecurity"} && $function->extendedAttributes->{"DoNotCheckSecurity"}) {
if (!HasCustomMethod($function->extendedAttributes) || $function->{overloadIndex} == 1) {
- GenerateDomainSafeFunctionGetter($function, $interface);
+ my @worldSuffixes = ("");
+ if ($function->extendedAttributes->{"PerWorldBindings"}) {
+ push(@worldSuffixes, "ForMainWorld");
+ }
+ foreach my $worldSuffix (@worldSuffixes) {
+ GenerateDomainSafeFunctionGetter($function, $interface, $worldSuffix);
+ }
if (!$function->extendedAttributes->{"ReadOnly"}) {
$needsDomainSafeFunctionSetter = 1;
}
« no previous file with comments | « no previous file | Source/bindings/tests/idls/TestActiveDOMObject.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698