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

Side by Side Diff: tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate

Issue 1832713002: Optimize dartium dart:html bindings so real world application performance is acceptable. Improves d… (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: update cached patches Created 4 years, 8 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
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 // WARNING: Do not edit - generated code. 5 // WARNING: Do not edit - generated code.
6 6
7 part of $LIBRARYNAME; 7 part of $LIBRARYNAME;
8 8
9 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS { 9 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
10 $!MEMBERS 10 $!MEMBERS
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 // 406 //
407 // var myProto = Object.create(HTMLElement.prototype); 407 // var myProto = Object.create(HTMLElement.prototype);
408 // var myElement = document.registerElement('x-foo', {prototype: myPro to}); 408 // var myElement = document.registerElement('x-foo', {prototype: myPro to});
409 var baseElement = js.JsNative.getProperty(js.context, jsClassName); 409 var baseElement = js.JsNative.getProperty(js.context, jsClassName);
410 if (baseElement == null) { 410 if (baseElement == null) {
411 // Couldn't find the HTML element so use a generic one. 411 // Couldn't find the HTML element so use a generic one.
412 baseElement = js.JsNative.getProperty(js.context, 'HTMLElement'); 412 baseElement = js.JsNative.getProperty(js.context, 'HTMLElement');
413 } 413 }
414 var elemProto = js.JsNative.callMethod(js.JsNative.getProperty(js.context, 'Object'), "create", [js.JsNative.getProperty(baseElement, 'prototype')]); 414 var elemProto = js.JsNative.callMethod(js.JsNative.getProperty(js.context, 'Object'), "create", [js.JsNative.getProperty(baseElement, 'prototype')]);
415 415
416 // Remember for any upgrading done in wrap_jso.
417 addCustomElementType(tag, customElementClass, extendsTag);
418
419 // TODO(terry): Hack to stop recursion re-creating custom element when the 416 // TODO(terry): Hack to stop recursion re-creating custom element when the
420 // created() constructor of the custom element does e.g., 417 // created() constructor of the custom element does e.g.,
421 // 418 //
422 // MyElement.created() : super.created() { 419 // MyElement.created() : super.created() {
423 // this.innerHtml = "<b>I'm an x-foo-with-markup!</b>"; 420 // this.innerHtml = "<b>I'm an x-foo-with-markup!</b>";
424 // } 421 // }
425 // 422 //
426 // sanitizing causes custom element to created recursively 423 // sanitizing causes custom element to created recursively
427 // until stack overflow. 424 // until stack overflow.
428 // 425 //
429 // See https://github.com/dart-lang/sdk/issues/23666 426 // See https://github.com/dart-lang/sdk/issues/23666
430 int creating = 0; 427 int creating = 0; // TODO(jacobr): I think I broke thise case. Will fix mo nday.
431 428
432 // If any JS code is hooked we want to call it too. 429 // If any JS code is hooked we want to call it too.
433 var oldCreatedCallback = elemProto['createdCallback']; 430 var oldCreatedCallback = js.JsNative.getProperty(elemProto, 'createdCallba ck');
434 var oldAttributeChangedCallback = elemProto['attributeChangedCallback']; 431 var oldAttributeChangedCallback = js.JsNative.getProperty(elemProto, 'attr ibuteChangedCallback');
435 var oldAttachedCallback = elemProto['attachedCallback']; 432 var oldAttachedCallback = js.JsNative.getProperty(elemProto, 'attachedCall back');
436 var oldDetachedCallback = elemProto['detachedCallback']; 433 var oldDetachedCallback = js.JsNative.getProperty(elemProto, 'detachedCall back');
437 434
438 // TODO(jacobr): warning: 435 js.JsNative.setProperty(elemProto, 'createdCallback', js.allowInteropCaptu reThis(($this) {
439 elemProto['createdCallback'] = js.JsNative.withThis(($this) { 436 // The created callback has already been called by the very act of passi ng a JS
440 if (_getJSClassName(reflectClass(customElementClass).superclass) != null && creating < 2) { 437 // custom element from JS to Dart.
441 creating++;
442
443 var dartClass;
444 try {
445 if (extendsTag != null) {
446 // If we're extending a native element then create that element.
447 // Then upgrade that element to the customElementClass through
448 // normal flow.
449 dartClass = document.createElement(extendsTag);
450 js.setDartHtmlWrapperFor($this, dartClass);
451 dartClass.blink_jsObject = $this;
452 }
453
454 // Upgrade to the CustomElement Dart class.
455 dartClass = _blink.Blink_Utils.constructElement(customElementClass, $this);
456 } catch (e) {
457 // Got a problem make it an HtmlElement and rethrow the error.
458 dartClass = HtmlElement.internalCreateHtmlElement();
459 // We need to remember the JS object (because constructElement faile d
460 // it normally sets up the blink_jsObject.
461 dartClass.blink_jsObject = $this;
462
463 // Mark to only try this once don't try upgrading from HtmlElement
464 // to the user's Dart class - we had a problem.
465 dartClass._badUpgrade();
466 throw e;
467 } finally {
468 // Need to remember the Dart class that was created for this custom so
469 // return it and setup the blink_jsObject to the $this that we'll be working
470 // with as we talk to blink.
471 js.setDartHtmlWrapperFor($this, dartClass);
472
473 creating--;
474 }
475 }
476
477 if (oldCreatedCallback != null) 438 if (oldCreatedCallback != null)
478 oldCreatedCallback.apply([], thisArg: unwrap_jso($this)); 439 oldCreatedCallback.apply([], thisArg: $this);
479 }); 440 }));
480 elemProto['attributeChangedCallback'] = new js.JsFunction.withThis(($this, attrName, oldVal, newVal) { 441 js.JsNative.setProperty(elemProto, 'attributeChangedCallback', js.allowInt eropCaptureThis(($this, attrName, oldVal, newVal) {
481 $this.attributeChanged(attrName, oldVal, newVal); 442 $this.attributeChanged(attrName, oldVal, newVal);
482 443
483 if (oldAttributeChangedCallback != null) 444 if (oldAttributeChangedCallback != null)
484 oldAttributeChangedCallback.apply([], thisArg: unwrap_jso($this)); 445 oldAttributeChangedCallback.apply([], thisArg: $this);
485 }); 446 }));
486 elemProto['attachedCallback'] = new js.JsFunction.withThis(($this) { 447 js.JsNative.setProperty(elemProto, 'attachedCallback', js.allowInteropCapt ureThis(($this) {
487 $this.attached(); 448 $this.attached();
488 449
489 if (oldAttachedCallback != null) 450 if (oldAttachedCallback != null)
490 oldAttachedCallback.apply([], thisArg: unwrap_jso($this)); 451 oldAttachedCallback.apply([], thisArg: $this);
491 }); 452 }));
492 elemProto['detachedCallback'] = new js.JsFunction.withThis(($this) { 453 js.JsNative.setProperty(elemProto, 'detachedCallback', js.allowInteropCapt ureThis(($this) {
493 $this.detached(); 454 $this.detached();
494 455
495 if (oldDetachedCallback != null) 456 if (oldDetachedCallback != null)
496 oldDetachedCallback.apply([], thisArg: unwrap_jso($this)); 457 oldDetachedCallback.apply([], thisArg: $this);
497 }); 458 }));
498 // document.registerElement('x-foo', {prototype: elemProto, extends: exten dsTag}); 459 // document.registerElement('x-foo', {prototype: elemProto, extends: exten dsTag});
499 var jsMap = new js.JsObject.jsify({'prototype': elemProto, 'extends': exte ndsTag}); 460 var jsMap = new js.JsObject.jsify({'prototype': elemProto, 'extends': exte ndsTag});
500 js.JsNative.callMethod(js.JsNative.getProperty(js.context, 'document'), 'r egisterElement', [tag, jsMap]); 461 _blink.Blink_Utils.defineInterceptorCustomElement(elemProto, customElement Class);
462 js.JsNative.callMethod(document, 'registerElement', [tag, jsMap]);
501 } 463 }
502 $endif 464 $endif
503 } 465 }
504 466
505 /** *Deprecated*: use [registerElement] instead. */ 467 /** *Deprecated*: use [registerElement] instead. */
506 @deprecated 468 @deprecated
507 @Experimental() 469 @Experimental()
508 void register(String tag, Type customElementClass, {String extendsTag}) { 470 void register(String tag, Type customElementClass, {String extendsTag}) {
509 return registerElement(tag, customElementClass, extendsTag: extendsTag); 471 return registerElement(tag, customElementClass, extendsTag: extendsTag);
510 } 472 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 /// parameter must be provided. 521 /// parameter must be provided.
560 @Experimental() 522 @Experimental()
561 ElementUpgrader createElementUpgrader(Type type, {String extendsTag}) { 523 ElementUpgrader createElementUpgrader(Type type, {String extendsTag}) {
562 $if DART2JS 524 $if DART2JS
563 return new _JSElementUpgrader(this, type, extendsTag); 525 return new _JSElementUpgrader(this, type, extendsTag);
564 $else 526 $else
565 return new _VMElementUpgrader(this, type, extendsTag); 527 return new _VMElementUpgrader(this, type, extendsTag);
566 $endif 528 $endif
567 } 529 }
568 } 530 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698