Index: sdk/lib/io/secure_socket.dart |
diff --git a/sdk/lib/io/secure_socket.dart b/sdk/lib/io/secure_socket.dart |
index d76b5ada3f2168949c078a75938e3e5eaede004d..af3b9f3e4943942e89f271407a877f6ec00e31ec 100644 |
--- a/sdk/lib/io/secure_socket.dart |
+++ b/sdk/lib/io/secure_socket.dart |
@@ -23,7 +23,9 @@ abstract class SecureSocket implements Socket { |
* client connections, and server certificates to provide on server |
* connections. The password argument should be used when creating |
* secure server sockets, to allow the private key of the server |
- * certificate to be fetched. |
+ * certificate to be fetched. If useBuiltinRoots is true (the default), |
+ * then an built-in set of root certificates for trusted certificate |
Mads Ager (google)
2012/11/29 20:13:05
an built-in set -> a built-in set?
Bill Hesse
2012/11/30 12:51:16
Done.
|
+ * authorities is merged with the certificates in the database. |
* |
* The database should be an NSS certificate database directory |
* containing a cert9.db file, not a cert8.db file. This version of |
@@ -32,7 +34,8 @@ abstract class SecureSocket implements Socket { |
* environment variable NSS_DEFAULT_DB_TYPE to "sql". |
*/ |
external static void setCertificateDatabase(String certificateDatabase, |
Mads Ager (google)
2012/11/29 20:13:05
How do you get away with only using the built-in s
Bill Hesse
2012/11/30 12:51:16
Done.
|
- [String password]); |
+ {String password, |
+ bool useBuiltinRoots: true}); |
} |
@@ -299,21 +302,31 @@ class _SecureSocket implements SecureSocket { |
} |
void _secureDataHandler() { |
- if (_status == HANDSHAKE) { |
- _secureHandshake(); |
- } else { |
- _writeEncryptedData(); // TODO(whesse): Removing this causes a failure. |
- _readEncryptedData(); |
- if (!_filterReadEmpty) { |
- // Call the onData event. |
- if (scheduledDataEvent != null) { |
- scheduledDataEvent.cancel(); |
- scheduledDataEvent = null; |
- } |
- if (_socketDataHandler != null) { |
- _socketDataHandler(); |
+ bool inUserCode = false; |
+ try { |
Mads Ager (google)
2012/11/29 20:13:05
I think we should do our best to avoid this type o
Bill Hesse
2012/11/30 12:51:16
In the socket class, the onError handler can be ca
|
+ if (_status == HANDSHAKE) { |
+ _secureHandshake(); |
+ } else { |
+ _writeEncryptedData(); // TODO(whesse): Removing this causes a failure. |
+ _readEncryptedData(); |
+ if (!_filterReadEmpty) { |
+ // Call the onData event. |
+ if (scheduledDataEvent != null) { |
+ scheduledDataEvent.cancel(); |
+ scheduledDataEvent = null; |
+ } |
+ if (_socketDataHandler != null) { |
+ inUserCode = true; |
+ _socketDataHandler(); |
+ } |
} |
} |
+ } catch (e) { |
+ if (inUserCode) { |
+ throw e; |
+ } else { |
+ _reportError(e, "SecureSocket error"); |
+ } |
} |
} |
@@ -331,6 +344,7 @@ class _SecureSocket implements SecureSocket { |
} else { |
e = new SocketIOException('$message (${error.toString()})', null); |
} |
+ close(false); |
bool reported = false; |
if (_socketErrorHandler != null) { |
reported = true; |
@@ -342,7 +356,6 @@ class _SecureSocket implements SecureSocket { |
if (_outputStream != null) { |
reported = reported || _outputStream._onSocketError(e); |
} |
- |
if (!reported) throw e; |
} |