| OLD | NEW |
| 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 class $CLASSNAME$EXTENDS$IMPLEMENTS native "@*DOMWindow" { | 5 class $CLASSNAME$EXTENDS$IMPLEMENTS native "@*DOMWindow" { |
| 6 | 6 |
| 7 _DocumentImpl get document => JS('_DocumentImpl', '#.document', this); | 7 Document get document => JS('Document', '#.document', this); |
| 8 | 8 |
| 9 Window _open2(url, name) => JS('Window', '#.open(#,#)', this, url, name); | 9 Window _open2(url, name) => JS('Window', '#.open(#,#)', this, url, name); |
| 10 | 10 |
| 11 Window _open3(url, name, options) => | 11 Window _open3(url, name, options) => |
| 12 JS('Window', '#.open(#,#,#)', this, url, name, options); | 12 JS('Window', '#.open(#,#,#)', this, url, name, options); |
| 13 | 13 |
| 14 Window open(String url, String name, [String options]) { | 14 Window open(String url, String name, [String options]) { |
| 15 if (options == null) { | 15 if (options == null) { |
| 16 return _DOMWindowCrossFrameImpl._createSafe(_open2(url, name)); | 16 return _DOMWindowCrossFrame._createSafe(_open2(url, name)); |
| 17 } else { | 17 } else { |
| 18 return _DOMWindowCrossFrameImpl._createSafe(_open3(url, name, options)); | 18 return _DOMWindowCrossFrame._createSafe(_open3(url, name, options)); |
| 19 } | 19 } |
| 20 } | 20 } |
| 21 | 21 |
| 22 // API level getter and setter for Location. | 22 // API level getter and setter for Location. |
| 23 // TODO: The cross domain safe wrapper can be inserted here or folded into | 23 // TODO: The cross domain safe wrapper can be inserted here or folded into |
| 24 // _LocationWrapper. | 24 // _LocationWrapper. |
| 25 LocalLocation get location => _get_location(); | 25 LocalLocation get location() { |
| 26 | 26 // Firefox work-around for Location. The Firefox location object cannot be |
| 27 // TODO: consider forcing users to do: window.location.assign('string'). | 27 // made to behave like a Dart object so must be wrapped. |
| 28 /** | |
| 29 * Sets the window's location, which causes the browser to navigate to the new | |
| 30 * location. [value] may be a Location object or a string. | |
| 31 */ | |
| 32 void set location(value) => _set_location(value); | |
| 33 | |
| 34 // Firefox work-around for Location. The Firefox location object cannot be | |
| 35 // made to behave like a Dart object so must be wrapped. | |
| 36 | |
| 37 LocalLocation _get_location() { | |
| 38 var result = _location; | 28 var result = _location; |
| 39 if (_isDartLocation(result)) return result; // e.g. on Chrome. | 29 if (_isDartLocation(result)) return result; // e.g. on Chrome. |
| 40 if (null == _location_wrapper) { | 30 if (null == _location_wrapper) { |
| 41 _location_wrapper = new _LocationWrapper(result); | 31 _location_wrapper = new _LocationWrapper(result); |
| 42 } | 32 } |
| 43 return _location_wrapper; | 33 return _location_wrapper; |
| 44 } | 34 } |
| 45 | 35 |
| 46 void _set_location(value) { | 36 // TODO: consider forcing users to do: window.location.assign('string'). |
| 37 /** |
| 38 * Sets the window's location, which causes the browser to navigate to the new |
| 39 * location. [value] may be a Location object or a string. |
| 40 */ |
| 41 void set location(value) { |
| 47 if (value is _LocationWrapper) { | 42 if (value is _LocationWrapper) { |
| 48 _location = value._ptr; | 43 _location = value._ptr; |
| 49 } else { | 44 } else { |
| 50 _location = value; | 45 _location = value; |
| 51 } | 46 } |
| 52 } | 47 } |
| 53 | 48 |
| 54 var _location_wrapper; // Cached wrapped Location object. | 49 var _location_wrapper; // Cached wrapped Location object. |
| 55 | 50 |
| 56 // Native getter and setter to access raw Location object. | 51 // Native getter and setter to access raw Location object. |
| 57 Location get _location => JS('Location', '#.location', this); | 52 Location get _location => JS('Location', '#.location', this); |
| 58 void set _location(Location value) { | 53 void set _location(Location value) { |
| 59 JS('void', '#.location = #', this, value); | 54 JS('void', '#.location = #', this, value); |
| 60 } | 55 } |
| 61 // Prevent compiled from thinking 'location' property is available for a Dart | 56 // Prevent compiled from thinking 'location' property is available for a Dart |
| 62 // member. | 57 // member. |
| 63 _protect_location() native 'location'; | 58 _protect_location() native 'location'; |
| 64 | 59 |
| 65 static _isDartLocation(thing) { | 60 static _isDartLocation(thing) { |
| 66 // On Firefox the code that implements 'is Location' fails to find the patch | 61 // On Firefox the code that implements 'is Location' fails to find the patch |
| 67 // stub on Object.prototype and throws an exception. | 62 // stub on Object.prototype and throws an exception. |
| 68 try { | 63 try { |
| 69 return thing is Location; | 64 return thing is Location; |
| 70 } catch (e) { | 65 } catch (e) { |
| 71 return false; | 66 return false; |
| 72 } | 67 } |
| 73 } | 68 } |
| 74 | 69 |
| 75 | 70 /** |
| 71 * Executes a [callback] after the next batch of browser layout measurements |
| 72 * has completed or would have completed if any browser layout measurements |
| 73 * had been scheduled. |
| 74 */ |
| 76 void requestLayoutFrame(TimeoutHandler callback) { | 75 void requestLayoutFrame(TimeoutHandler callback) { |
| 77 _addMeasurementFrameCallback(callback); | 76 _addMeasurementFrameCallback(callback); |
| 78 } | 77 } |
| 79 | 78 |
| 80 /** @domName DOMWindow.requestAnimationFrame */ | 79 /** @domName DOMWindow.requestAnimationFrame */ |
| 81 int requestAnimationFrame(RequestAnimationFrameCallback callback) { | 80 int requestAnimationFrame(RequestAnimationFrameCallback callback) { |
| 82 _ensureRequestAnimationFrame(); | 81 _ensureRequestAnimationFrame(); |
| 83 return _requestAnimationFrame(callback); | 82 return _requestAnimationFrame(callback); |
| 84 } | 83 } |
| 85 | 84 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 113 $this.requestAnimationFrame = function(callback) { | 112 $this.requestAnimationFrame = function(callback) { |
| 114 return window.setTimeout(function() { | 113 return window.setTimeout(function() { |
| 115 callback(Date.now()); | 114 callback(Date.now()); |
| 116 }, 16 /* 16ms ~= 60fps */); | 115 }, 16 /* 16ms ~= 60fps */); |
| 117 }; | 116 }; |
| 118 $this.cancelAnimationFrame = function(id) { clearTimeout(id); } | 117 $this.cancelAnimationFrame = function(id) { clearTimeout(id); } |
| 119 })(#)""", | 118 })(#)""", |
| 120 this); | 119 this); |
| 121 } | 120 } |
| 122 | 121 |
| 123 | 122 IDBFactory get indexedDB() => |
| 124 _IDBFactoryImpl get indexedDB => _get_indexedDB(); | 123 JS('IDBFactory', |
| 125 | |
| 126 _IDBFactoryImpl _get_indexedDB() => | |
| 127 JS('_IDBFactoryImpl', | |
| 128 '#.indexedDB || #.webkitIndexedDB || #.mozIndexedDB', | 124 '#.indexedDB || #.webkitIndexedDB || #.mozIndexedDB', |
| 129 this, this, this); | 125 this, this, this); |
| 130 | 126 |
| 131 // TODO(kasperl): Document these. | 127 /** |
| 132 lookupPort(String name) { | 128 * Lookup a port by its [name]. Return null if no port is |
| 129 * registered under [name]. |
| 130 */ |
| 131 SendPortSync lookupPort(String name) { |
| 133 var port = JSON.parse(localStorage['dart-port:$name']); | 132 var port = JSON.parse(localStorage['dart-port:$name']); |
| 134 return _deserialize(port); | 133 return _deserialize(port); |
| 135 } | 134 } |
| 136 | 135 |
| 137 registerPort(String name, var port) { | 136 /** |
| 137 * Register a [port] on this window under the given [name]. This |
| 138 * port may be retrieved by any isolate (or JavaScript script) |
| 139 * running in this window. |
| 140 */ |
| 141 void registerPort(String name, var port) { |
| 138 var serialized = _serialize(port); | 142 var serialized = _serialize(port); |
| 139 localStorage['dart-port:$name'] = JSON.stringify(serialized); | 143 localStorage['dart-port:$name'] = JSON.stringify(serialized); |
| 140 } | 144 } |
| 141 | 145 |
| 146 /** |
| 147 * Creates a new object URL for the specified object. The URL will be |
| 148 * available until revokeObjectUrl is called. |
| 149 * [object] can be a Blob, MediaStream or MediaSource. |
| 150 */ |
| 142 String createObjectUrl(object) => | 151 String createObjectUrl(object) => |
| 143 JS('String', | 152 JS('String', |
| 144 '(window.URL || window.webkitURL).createObjectURL(#)', object); | 153 '(window.URL || window.webkitURL).createObjectURL(#)', object); |
| 145 | 154 |
| 155 /** @domName DOMURL.revokeObjectURL */ |
| 146 void revokeObjectUrl(String objectUrl) { | 156 void revokeObjectUrl(String objectUrl) { |
| 147 JS('void', | 157 JS('void', |
| 148 '(window.URL || window.webkitURL).revokeObjectURL(#)', objectUrl); | 158 '(window.URL || window.webkitURL).revokeObjectURL(#)', objectUrl); |
| 149 } | 159 } |
| 150 | 160 |
| 151 $!MEMBERS | 161 $!MEMBERS |
| 152 } | 162 } |
| OLD | NEW |