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

Unified Diff: lib/compiler/implementation/js_backend/native_emitter.dart

Issue 11188004: Add a content-security-policy (CSP) flag. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Minor comment changes and rebase. Created 8 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
Index: lib/compiler/implementation/js_backend/native_emitter.dart
diff --git a/lib/compiler/implementation/js_backend/native_emitter.dart b/lib/compiler/implementation/js_backend/native_emitter.dart
index 065a43d3fc9ffd42dc5496f44f60514d4516233c..9218e6501ae4b70a047d9ef9738897a43a9b3826 100644
--- a/lib/compiler/implementation/js_backend/native_emitter.dart
+++ b/lib/compiler/implementation/js_backend/native_emitter.dart
@@ -94,6 +94,14 @@ class NativeEmitter {
=> '${backend.namer.CURRENT_ISOLATE}.\$defineNativeClass';
String get defineNativeClassFunction {
+ if (emitter.useContentSecurityPolicy) {
+ return """
+function(cls, methods) {
+ for (var method in methods) {
+ $dynamicName(method)[cls] = methods[method];
+ }
+}""";
+ }
return """
function(cls, fields, methods) {
var generateGetterSetter = ${emitter.generateGetterSetterFunction};
@@ -157,20 +165,32 @@ function(cls, fields, methods) {
}
CodeBuffer fieldBuffer = new CodeBuffer();
- List<String> checkedSetters =
- emitter.emitClassFields(classElement, fieldBuffer);
+ List<String> explicitGettersSetters;
+
+ if (emitter.useContentSecurityPolicy) {
+ explicitGettersSetters =
+ emitter.emitClassConstructorGettersSetters(classElement, fieldBuffer);
+ // We don't need the constructor for native classes.
+ fieldBuffer.clear();
+ } else {
+ explicitGettersSetters =
+ emitter.emitClassFields(classElement, fieldBuffer);
+ fieldBuffer.add(", ");
+ }
CodeBuffer methodBuffer = new CodeBuffer();
emitter.emitInstanceMembers(classElement, methodBuffer, false);
- if (methodBuffer.isEmpty() && fieldBuffer.isEmpty()) return;
+ if (methodBuffer.isEmpty()
+ && fieldBuffer.isEmpty()
+ && explicitGettersSetters.isEmpty()) return;
String nativeName = toNativeName(classElement);
- nativeBuffer.add("$defineNativeClassName('$nativeName', [");
+ nativeBuffer.add("$defineNativeClassName('$nativeName', ");
nativeBuffer.add(fieldBuffer);
- nativeBuffer.add('], {');
- if (!checkedSetters.isEmpty()) {
- nativeBuffer.add('${Strings.join(checkedSetters, ",\n")}');
+ nativeBuffer.add('{');
+ if (!explicitGettersSetters.isEmpty()) {
+ nativeBuffer.add('${Strings.join(explicitGettersSetters, ",\n")}');
nativeBuffer.add(',\n');
}
nativeBuffer.add(methodBuffer);

Powered by Google App Engine
This is Rietveld 408576698