Chromium Code Reviews| 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 // Bootstrap support for Dart scripts on the page as this script. | 5 // Bootstrap support for Dart scripts on the page as this script. |
| 6 if (navigator.webkitStartDart) { | 6 if (navigator.webkitStartDart) { |
| 7 if (!navigator.webkitStartDart()) { | 7 if (!navigator.webkitStartDart()) { |
| 8 document.body.innerHTML = 'This build has expired. Please download a new Da rtium at http://www.dartlang.org/dartium/index.html'; | 8 document.body.innerHTML = 'This build has expired. Please download a new Da rtium at http://www.dartlang.org/dartium/index.html'; |
| 9 } | 9 } |
| 10 } else { | 10 } else { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 46 } | 46 } |
| 47 | 47 |
| 48 (function() { | 48 (function() { |
| 49 function serialize(message) { | 49 function serialize(message) { |
| 50 if (message == null) { | 50 if (message == null) { |
| 51 return null; // Convert undefined to null. | 51 return null; // Convert undefined to null. |
| 52 } else if (typeof(message) == 'string' || | 52 } else if (typeof(message) == 'string' || |
| 53 typeof(message) == 'number' || | 53 typeof(message) == 'number' || |
| 54 typeof(message) == 'boolean') { | 54 typeof(message) == 'boolean') { |
| 55 return message; | 55 return message; |
| 56 } else if (message instanceof Array) { | |
| 57 var values = new Array(message.length); | |
| 58 for (var i = 0; i < message.length; i++) { | |
| 59 values[i] = serialize(message[i]); | |
| 60 } | |
| 61 return [ 'list', message.length, values ]; | |
| 56 } else if (message instanceof LocalSendPortSync) { | 62 } else if (message instanceof LocalSendPortSync) { |
| 57 return [ 'sendport', 'nativejs', message.receivePort.id ]; | 63 return [ 'sendport', 'nativejs', message.receivePort.id ]; |
| 58 } else if (message instanceof DartSendPortSync) { | 64 } else if (message instanceof DartSendPortSync) { |
| 59 return [ 'sendport', 'dart', message.receivePort.isolateId, | 65 return [ 'sendport', 'dart', message.receivePort.isolateId, |
| 60 message.receivePort.portId ]; | 66 message.receivePort.portId ]; |
| 61 } else { | 67 } else { |
| 62 var id = 0; | 68 var id = 0; |
| 63 var keys = Object.getOwnPropertyNames(message); | 69 var keys = Object.getOwnPropertyNames(message); |
| 64 var values = new Array(keys.length); | 70 var values = new Array(keys.length); |
| 65 for (var i = 0; i < keys.length; i++) { | 71 for (var i = 0; i < keys.length; i++) { |
| 66 values[i] = message[keys[i]]; | 72 values[i] = serialize(message[keys[i]]); |
| 67 } | 73 } |
| 68 return [ 'map', id, keys, values ]; | 74 return [ 'map', id, keys, values ]; |
| 69 } | 75 } |
| 70 } | 76 } |
| 71 | 77 |
| 72 function deserialize(message) { | 78 function deserialize(message) { |
| 73 return deserializeHelper(message); | 79 return deserializeHelper(message); |
| 74 } | 80 } |
| 75 | 81 |
| 76 function deserializeHelper(x) { | 82 function deserializeHelper(x) { |
| 77 if (x == null || | 83 if (x == null || |
| 78 typeof(x) == 'string' || | 84 typeof(x) == 'string' || |
| 79 typeof(x) == 'number' || | 85 typeof(x) == 'number' || |
| 80 typeof(x) == 'boolean') { | 86 typeof(x) == 'boolean') { |
| 81 return x; | 87 return x; |
| 82 } | 88 } |
| 83 switch (x[0]) { | 89 switch (x[0]) { |
| 84 case 'map': return deserializeMap(x); | 90 case 'map': return deserializeMap(x); |
| 85 case 'sendport': return deserializeSendPort(x); | 91 case 'sendport': return deserializeSendPort(x); |
| 92 case 'list': return deserializeList(x); | |
| 86 default: throw 'unimplemented'; | 93 default: throw 'unimplemented'; |
| 87 } | 94 } |
| 88 } | 95 } |
| 89 | 96 |
| 90 function deserializeMap(x) { | 97 function deserializeMap(x) { |
| 91 var result = { }; | 98 var result = { }; |
| 92 var id = x[1]; | 99 var id = x[1]; |
| 93 var keys = x[2]; | 100 var keys = x[2]; |
| 94 var values = x[3]; | 101 var values = x[3]; |
| 95 for (var i = 0, length = keys.length; i < length; i++) { | 102 for (var i = 0, length = keys.length; i < length; i++) { |
| 96 var key = deserializeHelper(keys[i]); | 103 var key = deserializeHelper(keys[i]); |
| 97 var value = deserializeHelper(values[i]); | 104 var value = deserializeHelper(values[i]); |
| 98 result[key] = value; | 105 result[key] = value; |
| 99 } | 106 } |
| 100 return result; | 107 return result; |
| 101 } | 108 } |
| 102 | 109 |
| 103 function deserializeSendPort(x) { | 110 function deserializeSendPort(x) { |
| 104 var tag = x[1]; | 111 var tag = x[1]; |
| 105 switch (tag) { | 112 switch (tag) { |
| 106 case 'nativejs': | 113 case 'nativejs': |
| 107 var id = x[2]; | 114 var id = x[2]; |
| 108 return new LocalSendPortSync(id); | 115 return new LocalSendPortSync(ReceivePortSync.map[id]); |
|
sammccall
2012/07/06 16:01:41
I think this was just an oversight before?
| |
| 109 case 'dart': | 116 case 'dart': |
| 110 var isolateId = x[2]; | 117 var isolateId = x[2]; |
| 111 var portId = x[3]; | 118 var portId = x[3]; |
| 112 return new DartSendPortSync(isolateId, portId); | 119 return new DartSendPortSync(isolateId, portId); |
| 113 default: | 120 default: |
| 114 throw 'Illegal SendPortSync type: $tag'; | 121 throw 'Illegal SendPortSync type: $tag'; |
| 115 } | 122 } |
| 116 } | 123 } |
| 117 | 124 |
| 125 function deserializeList(x) { | |
| 126 var length = x[1]; | |
| 127 var values = x[2]; | |
| 128 var result = new Array(length); | |
| 129 for (var i = 0; i < length; i++) { | |
| 130 result[i] = values[i]; | |
| 131 } | |
| 132 return result; | |
| 133 } | |
| 134 | |
| 118 window.registerPort = function(name, port) { | 135 window.registerPort = function(name, port) { |
| 119 var stringified = JSON.stringify(serialize(port)); | 136 var stringified = JSON.stringify(serialize(port)); |
| 120 window.localStorage['dart-port:' + name] = stringified; | 137 window.localStorage['dart-port:' + name] = stringified; |
| 121 }; | 138 }; |
| 122 | 139 |
| 123 window.lookupPort = function(name) { | 140 window.lookupPort = function(name) { |
| 124 var stringified = window.localStorage['dart-port:' + name]; | 141 var stringified = window.localStorage['dart-port:' + name]; |
| 125 return deserialize(JSON.parse(stringified)); | 142 return deserialize(JSON.parse(stringified)); |
| 126 }; | 143 }; |
| 127 | 144 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 192 var result = null; | 209 var result = null; |
| 193 var listener = function (e) { | 210 var listener = function (e) { |
| 194 result = JSON.parse(e.data); | 211 result = JSON.parse(e.data); |
| 195 }; | 212 }; |
| 196 window.addEventListener(source, listener, false); | 213 window.addEventListener(source, listener, false); |
| 197 dispatchEvent(target, [source, serialized]); | 214 dispatchEvent(target, [source, serialized]); |
| 198 window.removeEventListener(source, listener, false); | 215 window.removeEventListener(source, listener, false); |
| 199 return deserialize(result); | 216 return deserialize(result); |
| 200 } | 217 } |
| 201 })(); | 218 })(); |
| OLD | NEW |