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

Side by Side Diff: tools/dom/src/native_DOMImplementation.dart

Issue 184033007: Prototype of Dart proxies for JS objects. Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: More tests. Created 6 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of html; 5 part of html;
6 6
7 class _ConsoleVariables { 7 class _ConsoleVariables {
8 Map<String, Object> _data = new Map<String, Object>(); 8 Map<String, Object> _data = new Map<String, Object>();
9 9
10 /** 10 /**
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 387
388 static String addTrailingDot(String str) => '${str}.'; 388 static String addTrailingDot(String str) => '${str}.';
389 389
390 static String demangle(String str) { 390 static String demangle(String str) {
391 var atPos = str.indexOf('@'); 391 var atPos = str.indexOf('@');
392 return atPos == -1 ? str : str.substring(0, atPos); 392 return atPos == -1 ? str : str.substring(0, atPos);
393 } 393 }
394 394
395 static bool isNoSuchMethodError(obj) => obj is NoSuchMethodError; 395 static bool isNoSuchMethodError(obj) => obj is NoSuchMethodError;
396 396
397 static bool _isBuiltinType(ClassMirror cls) {
398 // TODO(vsm): Find a less hackish way to do this.
399 LibraryMirror lib = cls.owner;
400 String libName = lib.uri.toString();
401 return libName.startsWith('dart:');
402 }
403
404 static void register(Document document, String tag, Type type, 397 static void register(Document document, String tag, Type type,
405 String extendsTagName) { 398 String extendsTagName) {
406 // TODO(vsm): Move these checks into native code. 399 var nativeClass = _validateCustomType(type);
407 ClassMirror cls = reflectClass(type);
408 if (_isBuiltinType(cls)) {
409 throw new UnsupportedError("Invalid custom element from ${(cls.owner as Li braryMirror).uri}.");
410 }
411 var className = MirrorSystem.getName(cls.simpleName);
412 var createdConstructor = cls.declarations[new Symbol('$className.created')];
413 if (createdConstructor == null ||
414 createdConstructor is! MethodMirror ||
415 !createdConstructor.isConstructor) {
416 throw new UnsupportedError(
417 'Class is missing constructor $className.created');
418 }
419 400
420 if (createdConstructor.parameters.length > 0) {
421 throw new UnsupportedError(
422 'Constructor $className.created must take zero arguments');
423 }
424
425 Symbol objectName = reflectClass(Object).qualifiedName;
426 bool isRoot(ClassMirror cls) =>
427 cls == null || cls.qualifiedName == objectName;
428 Symbol elementName = reflectClass(HtmlElement).qualifiedName;
429 bool isElement(ClassMirror cls) =>
430 cls != null && cls.qualifiedName == elementName;
431 ClassMirror superClass = cls.superclass;
432 ClassMirror nativeClass = _isBuiltinType(superClass) ? superClass : null;
433 while(!isRoot(superClass) && !isElement(superClass)) {
434 superClass = superClass.superclass;
435 if (nativeClass == null && _isBuiltinType(superClass)) {
436 nativeClass = superClass;
437 }
438 }
439 if (extendsTagName == null) { 401 if (extendsTagName == null) {
440 if (nativeClass.reflectedType != HtmlElement) { 402 if (nativeClass.reflectedType != HtmlElement) {
441 throw new UnsupportedError('Class must provide extendsTag if base ' 403 throw new UnsupportedError('Class must provide extendsTag if base '
442 'native class is not HTMLElement'); 404 'native class is not HTMLElement');
443 } 405 }
444 } 406 }
445 407
446 _register(document, tag, type, extendsTagName); 408 _register(document, tag, type, extendsTagName);
447 } 409 }
448 410
449 static void _register(Document document, String tag, Type customType, 411 static void _register(Document document, String tag, Type customType,
450 String extendsTagName) native "Utils_register"; 412 String extendsTagName) native "Utils_register";
451 413
452 static Element createElement(Document document, String tagName) native "Utils_ createElement"; 414 static Element createElement(Document document, String tagName) native "Utils_ createElement";
453 415
454 static void initializeCustomElement(HtmlElement element) native "Utils_initial izeCustomElement"; 416 static void initializeCustomElement(HtmlElement element) native "Utils_initial izeCustomElement";
417
418 static void changeElementWrapper(HtmlElement element, Type type) native "Utils _changeElementWrapper";
455 } 419 }
456 420
457 class _DOMWindowCrossFrame extends NativeFieldWrapperClass2 implements 421 class _DOMWindowCrossFrame extends NativeFieldWrapperClass2 implements
458 WindowBase { 422 WindowBase {
459 _DOMWindowCrossFrame.internal(); 423 _DOMWindowCrossFrame.internal();
460 424
461 // Fields. 425 // Fields.
462 HistoryBase get history native "Window_history_cross_frame_Getter"; 426 HistoryBase get history native "Window_history_cross_frame_Getter";
463 LocationBase get location native "Window_location_cross_frame_Getter"; 427 LocationBase get location native "Window_location_cross_frame_Getter";
464 bool get closed native "Window_closed_Getter"; 428 bool get closed native "Window_closed_Getter";
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 _scheduleImmediateHelper._schedule(callback); 579 _scheduleImmediateHelper._schedule(callback);
616 }; 580 };
617 581
618 get _pureIsolateScheduleImmediateClosure => ((void callback()) => 582 get _pureIsolateScheduleImmediateClosure => ((void callback()) =>
619 throw new UnimplementedError("scheduleMicrotask in background isolates " 583 throw new UnimplementedError("scheduleMicrotask in background isolates "
620 "are not supported in the browser")); 584 "are not supported in the browser"));
621 585
622 void _initializeCustomElement(Element e) { 586 void _initializeCustomElement(Element e) {
623 _Utils.initializeCustomElement(e); 587 _Utils.initializeCustomElement(e);
624 } 588 }
OLDNEW
« no previous file with comments | « tools/dom/src/dartium_CustomElementSupport.dart ('k') | tools/dom/templates/html/dartium/html_dartium.darttemplate » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698