| 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);
|
|
|