Index: site/try/src/iframe_error_handler.dart |
diff --git a/site/try/src/iframe_error_handler.dart b/site/try/src/iframe_error_handler.dart |
deleted file mode 100644 |
index a1077be5455f386eb83bd1ea3452391f2413fcc4..0000000000000000000000000000000000000000 |
--- a/site/try/src/iframe_error_handler.dart |
+++ /dev/null |
@@ -1,96 +0,0 @@ |
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-library trydart.iframe_error_handler; |
- |
-// TODO(ahe): Remove this import if issue 17936 is fixed. |
-import 'dart:js' as hack; |
- |
-import 'dart:html' show |
- Event, |
- IFrameElement, |
- window; |
- |
-import 'dart:async' show |
- Stream, |
- StreamController; |
- |
-class ErrorMessage { |
- final String message; |
- final String filename; |
- final num lineno; |
- final num colno; |
- final String stack; |
- |
- ErrorMessage( |
- this.message, this.filename, this.lineno, this.colno, this.stack); |
- |
- String toString() { |
- String result = filename == null ? '' : filename; |
- if (lineno != null && lineno != 0 && !lineno.isNaN) { |
- result += ':$lineno'; |
- } |
- if (colno != null && colno != 0 && !colno.isNaN) { |
- result += ':$colno'; |
- } |
- if (message != null && !message.isEmpty) { |
- if (!result.isEmpty) { |
- result += ': '; |
- } |
- result += message; |
- } |
- if (stack != null && !stack.isEmpty) { |
- if (!result.isEmpty) { |
- result += '\n'; |
- } |
- result += stack; |
- } |
- return result; |
- } |
-} |
- |
-Stream<ErrorMessage> errorStream(IFrameElement iframe) { |
- StreamController<ErrorMessage> controller = |
- new StreamController<ErrorMessage>(); |
- void onError( |
- String message, |
- String filename, |
- int lineno, |
- [int colno, |
- error]) { |
- // See: |
- // https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror |
- String stack; |
- if (error != null) { |
- var jsStack = error['stack']; |
- if (jsStack != null) { |
- stack = hack.context.callMethod('String', [jsStack]); |
- } |
- } |
- controller.add(new ErrorMessage(message, filename, lineno, colno, stack)); |
- } |
- |
- void installErrorHandler() { |
- // This method uses dart:js to install an error event handler on the content |
- // window of [iframe]. This is a workaround for http://dartbug.com/17936. |
- var iframeProxy = new hack.JsObject.fromBrowserObject(iframe); |
- var contentWindowProxy = iframeProxy['contentWindow']; |
- if (contentWindowProxy == null) { |
- String message = |
- 'No contentWindow, call this method *after* adding iframe to' |
- ' document.'; |
- window.console.error(message); |
- throw message; |
- } |
- |
- // Note: we have two options, use "iframe.contentWindow.onerror = ..." or |
- // "iframe.contentWindow.addEventListener('error', ...)". The former seems |
- // to provide more details on both Chrome and Firefox (which provides no |
- // information at all in error events). |
- contentWindowProxy['onerror'] = onError; |
- } |
- iframe.onLoad.listen((Event event) => installErrorHandler()); |
- installErrorHandler(); |
- return controller.stream; |
-} |