Chromium Code Reviews| Index: lib/html/frog/html_frog.dart | 
| diff --git a/lib/html/frog/html_frog.dart b/lib/html/frog/html_frog.dart | 
| index 6cf802fd42b3c0f55e5773d1556f4dbde23edfe0..719ec906cab3af5ad8bdc38badc8c38b67f045c1 100644 | 
| --- a/lib/html/frog/html_frog.dart | 
| +++ b/lib/html/frog/html_frog.dart | 
| @@ -24,6 +24,144 @@ _DocumentImpl get _document() native "return document;"; | 
| class _HTMLElementImpl extends _ElementImpl native "*HTMLElement" { | 
| } | 
| +class _HistoryCrossFrameImpl implements History { | 
| + | 
| + void back() { | 
| + _ptr.back(); | 
| + return; | 
| + } | 
| + | 
| + void forward() { | 
| + _ptr.forward(); | 
| + return; | 
| + } | 
| + | 
| + void go(int distance) { | 
| + _ptr.go(distance); | 
| + return; | 
| + } | 
| + | 
| + // Implementation. | 
| + _HistoryImpl _ptr; | 
| + | 
| + _HistoryCrossFrameImpl._(this._ptr); | 
| + | 
| + static _createSafe(ptr) { | 
| + if (ptr === window.history) { | 
| + return window.history; | 
| + } else { | 
| + // TODO(vsm): Should we cache to try to get reference equality? | 
| + return new _HistoryCrossFrameImpl._(ptr); | 
| + } | 
| + } | 
| + | 
| + operator ==(other) { | 
| + return (other is _HistoryCrossFrameImpl) && | 
| + (this._ptr === other._ptr); | 
| + } | 
| +} | 
| + | 
| +class _LocationCrossFrameImpl implements Location { | 
| + | 
| + void set href(String value) { _ptr.href = value; } | 
| + | 
| + // Implementation. | 
| + _LocationImpl _ptr; | 
| + | 
| + _LocationCrossFrameImpl._(this._ptr); | 
| + | 
| + static _createSafe(ptr) { | 
| + if (ptr === window.location) { | 
| + return window.location; | 
| + } else { | 
| + // TODO(vsm): Should we cache to try to get reference equality? | 
| + return new _LocationCrossFrameImpl._(ptr); | 
| + } | 
| + } | 
| + | 
| + operator ==(other) { | 
| + return (other is _LocationCrossFrameImpl) && | 
| + (this._ptr === other._ptr); | 
| + } | 
| +} | 
| + | 
| +class _WindowCrossFrameImpl implements Window { | 
| + | 
| + bool get closed() => _ptr.closed; | 
| + | 
| + Window get frames() => _ptr.frames; | 
| + | 
| + History get history() => _ptr.history; | 
| + | 
| + int get length() => _ptr.length; | 
| + | 
| + Location get location() => _ptr.location; | 
| + | 
| + void set location(Location value) { _ptr.location = value; } | 
| + | 
| + Window get opener() => _ptr.opener; | 
| + | 
| + Window get parent() => _ptr.parent; | 
| + | 
| + Window get self() => _ptr.self; | 
| + | 
| + Window get top() => _ptr.top; | 
| + | 
| + void blur() { | 
| + _ptr.blur(); | 
| + return; | 
| + } | 
| + | 
| + void close() { | 
| + _ptr.close(); | 
| + return; | 
| + } | 
| + | 
| + void focus() { | 
| + _ptr.focus(); | 
| + return; | 
| + } | 
| + | 
| + void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List messagePorts = null]) { | 
| + if (messagePorts === null) { | 
| + _ptr.postMessage(message, targetOrigin, messagePorts); | 
| 
 
sra1
2012/05/10 00:12:06
Why are the branches the same?
The main point of g
 
 | 
| + return; | 
| + } else { | 
| + _ptr.postMessage(message, targetOrigin, messagePorts); | 
| + return; | 
| + } | 
| + } | 
| + | 
| + void webkitPostMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List transferList = null]) { | 
| + if (transferList === null) { | 
| + _ptr.webkitPostMessage(message, targetOrigin, transferList); | 
| + return; | 
| + } else { | 
| + _ptr.webkitPostMessage(message, targetOrigin, transferList); | 
| + return; | 
| + } | 
| + } | 
| + | 
| + // Implementation. | 
| + _WindowImpl _ptr; | 
| + | 
| + _WindowCrossFrameImpl._(this._ptr); | 
| + | 
| + static _createSafe(ptr) { | 
| + if (ptr === window) { | 
| + return window; | 
| + } else { | 
| + // TODO(vsm): Should we cache to try to get reference equality? | 
| + return new _WindowCrossFrameImpl._(ptr); | 
| + } | 
| + } | 
| + | 
| + operator ==(other) { | 
| + return (other is _WindowCrossFrameImpl) && | 
| + (this._ptr === other._ptr); | 
| + } | 
| +} | 
| + | 
| class _AbstractWorkerImpl extends _EventTargetImpl implements AbstractWorker native "*AbstractWorker" { | 
| _AbstractWorkerEventsImpl get on() => | 
| @@ -4730,8 +4868,11 @@ class _DocumentImpl extends _NodeImpl | 
| String cookie; | 
| - _WindowImpl get window() native "return this.defaultView;"; | 
| + _WindowImpl get _window() native "return this.defaultView;"; | 
| + Window get window() { | 
| + return _WindowCrossFrameImpl._createSafe(_window); | 
| + } | 
| final _ElementImpl documentElement; | 
| final String domain; | 
| @@ -7214,10 +7355,11 @@ class _FormElementImpl extends _ElementImpl implements FormElement native "*HTML | 
| class _FrameElementImpl extends _ElementImpl implements FrameElement native "*HTMLFrameElement" { | 
| - final _DocumentImpl contentDocument; | 
| - | 
| - final _WindowImpl contentWindow; | 
| + _WindowImpl get _contentWindow() native "return this.contentWindow;"; | 
| + Window get contentWindow() { | 
| + return _WindowCrossFrameImpl._createSafe(_contentWindow); | 
| + } | 
| String frameBorder; | 
| final int height; | 
| @@ -7753,10 +7895,11 @@ class _IFrameElementImpl extends _ElementImpl implements IFrameElement native "* | 
| String align; | 
| - final _DocumentImpl contentDocument; | 
| - | 
| - final _WindowImpl contentWindow; | 
| + _WindowImpl get _contentWindow() native "return this.contentWindow;"; | 
| + Window get contentWindow() { | 
| + return _WindowCrossFrameImpl._createSafe(_contentWindow); | 
| + } | 
| String frameBorder; | 
| String height; | 
| @@ -8872,8 +9015,11 @@ class _MessageEventImpl extends _EventImpl implements MessageEvent native "*Mess | 
| final List ports; | 
| - final _WindowImpl source; | 
| + _WindowImpl get _source() native "return this.source;"; | 
| + Window get source() { | 
| + return _WindowCrossFrameImpl._createSafe(_source); | 
| + } | 
| void initMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, _WindowImpl sourceArg, List messagePorts) native; | 
| void webkitInitMessageEvent(String typeArg, bool canBubbleArg, bool cancelableArg, Object dataArg, String originArg, String lastEventIdArg, _WindowImpl sourceArg, List transferables) native; | 
| @@ -9739,8 +9885,6 @@ class _ObjectElementImpl extends _ElementImpl implements ObjectElement native "* | 
| String codeType; | 
| - final _DocumentImpl contentDocument; | 
| - | 
| String data; | 
| bool declare; | 
| @@ -14872,8 +15016,11 @@ class _UIEventImpl extends _EventImpl implements UIEvent native "*UIEvent" { | 
| final int pageY; | 
| - final _WindowImpl view; | 
| + _WindowImpl get _view() native "return this.view;"; | 
| + Window get view() { | 
| + return _WindowCrossFrameImpl._createSafe(_view); | 
| + } | 
| final int which; | 
| void initUIEvent(String type, bool canBubble, bool cancelable, _WindowImpl view, int detail) native; | 
| @@ -16474,12 +16621,16 @@ class _WindowImpl extends _EventTargetImpl implements Window native "@*DOMWindow | 
| final _EventImpl event; | 
| - final _ElementImpl frameElement; | 
| - | 
| - final _WindowImpl frames; | 
| + _WindowImpl get _frames() native "return this.frames;"; | 
| - final _HistoryImpl history; | 
| + Window get frames() { | 
| + return _WindowCrossFrameImpl._createSafe(_frames); | 
| + } | 
| + _HistoryImpl get _history() native "return this.history;"; | 
| + History get history() { | 
| + return _history; | 
| + } | 
| final int innerHeight; | 
| final int innerWidth; | 
| @@ -16488,7 +16639,12 @@ class _WindowImpl extends _EventTargetImpl implements Window native "@*DOMWindow | 
| final _StorageImpl localStorage; | 
| - _LocationImpl location; | 
| + _LocationImpl get _location() native "return this.location;"; | 
| + | 
| + Location get location() { | 
| + return _location; | 
| + } | 
| + void set location(_LocationImpl value) native "this.location = value;"; | 
| final _BarInfoImpl locationbar; | 
| @@ -16500,8 +16656,11 @@ class _WindowImpl extends _EventTargetImpl implements Window native "@*DOMWindow | 
| final bool offscreenBuffering; | 
| - final _WindowImpl opener; | 
| + _WindowImpl get _opener() native "return this.opener;"; | 
| + Window get opener() { | 
| + return _WindowCrossFrameImpl._createSafe(_opener); | 
| + } | 
| final int outerHeight; | 
| final int outerWidth; | 
| @@ -16510,8 +16669,11 @@ class _WindowImpl extends _EventTargetImpl implements Window native "@*DOMWindow | 
| final int pageYOffset; | 
| - final _WindowImpl parent; | 
| + _WindowImpl get _parent() native "return this.parent;"; | 
| + Window get parent() { | 
| + return _WindowCrossFrameImpl._createSafe(_parent); | 
| + } | 
| final _PerformanceImpl performance; | 
| final _BarInfoImpl personalbar; | 
| @@ -16532,8 +16694,11 @@ class _WindowImpl extends _EventTargetImpl implements Window native "@*DOMWindow | 
| final _BarInfoImpl scrollbars; | 
| - final _WindowImpl self; | 
| + _WindowImpl get _self() native "return this.self;"; | 
| + Window get self() { | 
| + return _WindowCrossFrameImpl._createSafe(_self); | 
| + } | 
| final _StorageImpl sessionStorage; | 
| String status; | 
| @@ -16544,16 +16709,17 @@ class _WindowImpl extends _EventTargetImpl implements Window native "@*DOMWindow | 
| final _BarInfoImpl toolbar; | 
| - final _WindowImpl top; | 
| + _WindowImpl get _top() native "return this.top;"; | 
| + Window get top() { | 
| + return _WindowCrossFrameImpl._createSafe(_top); | 
| + } | 
| final _IDBFactoryImpl webkitIndexedDB; | 
| final _NotificationCenterImpl webkitNotifications; | 
| final _StorageInfoImpl webkitStorageInfo; | 
| - final _WindowImpl window; | 
| - | 
| void $dom_addEventListener(String type, EventListener listener, [bool useCapture = null]) native "addEventListener"; | 
| void alert(String message) native; | 
| @@ -16592,7 +16758,9 @@ class _WindowImpl extends _EventTargetImpl implements Window native "@*DOMWindow | 
| void moveTo(num x, num y) native; | 
| - _WindowImpl open(String url, String name, [String options = null]) native; | 
| + _WindowImpl _open(String url, String name, [String options = null]) native "open"; | 
| + | 
| + Window open(String url, String name, [String options = null]) => _WindowCrossFrameImpl._createSafe(_open(url, name, options)); | 
| _DatabaseImpl openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback = null]) native; | 
| @@ -23973,9 +24141,6 @@ interface FormElement extends Element { | 
| /// @domName HTMLFrameElement | 
| interface FrameElement extends Element { | 
| - /** @domName HTMLFrameElement.contentDocument */ | 
| - final Document contentDocument; | 
| - | 
| /** @domName HTMLFrameElement.contentWindow */ | 
| final Window contentWindow; | 
| @@ -24729,9 +24894,6 @@ interface IFrameElement extends Element { | 
| /** @domName HTMLIFrameElement.align */ | 
| String align; | 
| - /** @domName HTMLIFrameElement.contentDocument */ | 
| - final Document contentDocument; | 
| - | 
| /** @domName HTMLIFrameElement.contentWindow */ | 
| final Window contentWindow; | 
| @@ -26889,9 +27051,6 @@ interface ObjectElement extends Element { | 
| /** @domName HTMLObjectElement.codeType */ | 
| String codeType; | 
| - /** @domName HTMLObjectElement.contentDocument */ | 
| - final Document contentDocument; | 
| - | 
| /** @domName HTMLObjectElement.data */ | 
| String data; | 
| @@ -34575,9 +34734,6 @@ interface Window extends EventTarget { | 
| /** @domName DOMWindow.event */ | 
| final Event event; | 
| - /** @domName DOMWindow.frameElement */ | 
| - final Element frameElement; | 
| - | 
| /** @domName DOMWindow.frames */ | 
| final Window frames; | 
| @@ -34692,9 +34848,6 @@ interface Window extends EventTarget { | 
| /** @domName DOMWindow.webkitStorageInfo */ | 
| final StorageInfo webkitStorageInfo; | 
| - /** @domName DOMWindow.window */ | 
| - final Window window; | 
| - | 
| /** @domName DOMWindow.addEventListener */ | 
| void $dom_addEventListener(String type, EventListener listener, [bool useCapture]); |