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 library _isolate_helper; | 5 library _isolate_helper; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:isolate'; | 8 import 'dart:isolate'; |
| 9 | 9 |
| 10 ReceivePort lazyPort; | 10 ReceivePort lazyPort; |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 378 get id => JS("", "#.id", this); | 378 get id => JS("", "#.id", this); |
| 379 void set id(i) { JS("void", "#.id = #", this, i); } | 379 void set id(i) { JS("void", "#.id = #", this, i); } |
| 380 void set onmessage(f) { JS("void", "#.onmessage = #", this, f); } | 380 void set onmessage(f) { JS("void", "#.onmessage = #", this, f); } |
| 381 void postMessage(msg) { JS("void", "#.postMessage(#)", this, msg); } | 381 void postMessage(msg) { JS("void", "#.postMessage(#)", this, msg); } |
| 382 void terminate() { JS("void", "#.terminate()", this); } | 382 void terminate() { JS("void", "#.terminate()", this); } |
| 383 } | 383 } |
| 384 | 384 |
| 385 const String _SPAWNED_SIGNAL = "spawned"; | 385 const String _SPAWNED_SIGNAL = "spawned"; |
| 386 | 386 |
| 387 var globalThis = IsolateNatives.computeGlobalThis(); | 387 var globalThis = IsolateNatives.computeGlobalThis(); |
| 388 var globalWindow = JS('', "#['window']", globalThis); | 388 var globalWindow = JS('', "#.window", globalThis); |
| 389 var globalWorker = JS('', "#['Worker']", globalThis); | 389 var globalWorker = JS('', "#.Worker", globalThis); |
| 390 bool globalPostMessageDefined = | 390 bool globalPostMessageDefined = |
| 391 JS('', "#['postMessage'] !== (void 0)", globalThis); | 391 JS('', "#.postMessage !== (void 0)", globalThis); |
| 392 | 392 |
| 393 class IsolateNatives { | 393 class IsolateNatives { |
| 394 | 394 |
| 395 static String thisScript = computeThisScript(); | 395 static String thisScript = computeThisScript(); |
| 396 | 396 |
| 397 /** | 397 /** |
| 398 * The src url for the script tag that loaded this code. Used to create | 398 * The src url for the script tag that loaded this code. Used to create |
| 399 * JavaScript workers. | 399 * JavaScript workers. |
| 400 */ | 400 */ |
| 401 static String computeThisScript() { | 401 static String computeThisScript() { |
| 402 // TODO(7369): Find a cross-platform non-brittle way of getting the | 402 // TODO(7369): Find a cross-platform non-brittle way of getting the |
| 403 // currently running script. | 403 // currently running script. |
| 404 var scripts = JS('=List', r"document.getElementsByTagName('script')"); | 404 var scripts = JS('=List', r"document.getElementsByTagName('script')"); |
| 405 // The scripts variable only contains the scripts that have already been | 405 // The scripts variable only contains the scripts that have already been |
| 406 // executed. The last one is the currently running script. | 406 // executed. The last one is the currently running script. |
| 407 for (var script in scripts) { | 407 for (var script in scripts) { |
| 408 var src = JS('String|Null', '# && #.src', script, script); | 408 var src = JS('String|Null', '# && #.src', script, script); |
| 409 // Filter out the test controller script, and the Dart | |
| 410 // bootstrap script. | |
| 409 if (src != null | 411 if (src != null |
| 410 && !src.endsWith('test_controller.js') | 412 && !src.endsWith('test_controller.js') |
| 411 && !new RegExp('client.dart\.js').hasMatch(src)) { | 413 && !src.endsWith('dart.js')) { |
|
ngeoffray
2013/01/16 10:33:38
The path has now changed. To make things simple, I
| |
| 412 return src; | 414 return src; |
| 413 } | 415 } |
| 414 } | 416 } |
| 415 return null; | 417 return null; |
| 416 } | 418 } |
| 417 | 419 |
| 418 static computeGlobalThis() => JS('', 'function() { return this; }()'); | 420 static computeGlobalThis() => JS('', 'function() { return this; }()'); |
| 419 | 421 |
| 420 /** Starts a new worker with the given URL. */ | 422 /** Starts a new worker with the given URL. */ |
| 421 static _WorkerStub _newWorker(url) => JS("_WorkerStub", r"new Worker(#)", url) ; | 423 static _WorkerStub _newWorker(url) => JS("_WorkerStub", r"new Worker(#)", url) ; |
| (...skipping 904 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1326 JS('void', '#.clearInterval(#)', globalThis, _handle); | 1328 JS('void', '#.clearInterval(#)', globalThis, _handle); |
| 1327 } | 1329 } |
| 1328 _handle = null; | 1330 _handle = null; |
| 1329 } else { | 1331 } else { |
| 1330 throw new UnsupportedError("Canceling a timer."); | 1332 throw new UnsupportedError("Canceling a timer."); |
| 1331 } | 1333 } |
| 1332 } | 1334 } |
| 1333 } | 1335 } |
| 1334 | 1336 |
| 1335 bool hasTimer() => JS('', '#.setTimeout', globalThis) != null; | 1337 bool hasTimer() => JS('', '#.setTimeout', globalThis) != null; |
| OLD | NEW |