anchor.diff:    }
   }
   
  +
  +// Test that the deprecated callbacks still work.
  +class FooOldCallbacks extends HtmlElement {
  +  factory FooOldCallbacks() => null;
  +  FooOldCallbacks.created() : super.created() {
  +    invocations.add('created');
  +  }
  +
  +  void enteredView() {
  +    invocations.add('enteredView');
  +  }
  +
  +  void leftView() {
  +    invocations.add('leftView');
  +  }
  +
  +  void attributeChanged(String name, String oldValue, String newValue) {
  +    invocations.add('attribute changed');
  +  }
  +}
  +
   main() {
     useHtmlIndividualConfiguration();
   
     // Adapted from Blink's
  -  // fast/dom/custom/entered-left-document.html test.
  +  // fast/dom/custom/attached-detached-document.html test.
   
     var docA = document;
     var docB = document.implementation.createHtmlDocument('');
  
positive.code:     if (registeredTypes) return;
      registeredTypes = true;
      document.register('x-a', Foo);
    }));
  
    group('standard_events', () {
  
negative.code:     invocations.add('created');
    }
  
    void attached() {
      invocations.add('attached');
    }
  
    void enteredView() {
      // Deprecated name. Should never be called since we override "attached".
      invocations.add('enteredView');
    }
  
    void detached() {
      invocations.add('detached');
    }
  
    void leftView() {
      // Deprecated name. Should never be called since we override "detached".
      invocations.add('leftView');
    }
  
    void attributeChanged(String name, String oldValue, String newValue) {
  