Index: chrome/test/data/webrtc/peerconnection.js |
diff --git a/chrome/test/data/webrtc/peerconnection.js b/chrome/test/data/webrtc/peerconnection.js |
index 96d3c8dac24c416200213b91ef737865bebf0423..78d63cff84cbcdc54b7d7b667c6abdc3d8040abb 100644 |
--- a/chrome/test/data/webrtc/peerconnection.js |
+++ b/chrome/test/data/webrtc/peerconnection.js |
@@ -57,7 +57,7 @@ function createLocalOffer(constraints) { |
success_('createOffer'); |
setLocalDescription(peerConnection, localOffer); |
- returnToTest('ok-' + JSON.stringify(localOffer)); |
+ returnToTest('ok-' + stringifyDOMObject_(localOffer)); |
}, |
function(error) { failure_('createOffer', error); }, |
constraints); |
@@ -89,7 +89,7 @@ function receiveOfferFromPeer(sessionDescJson, constraints) { |
function(answer) { |
success_('createAnswer'); |
setLocalDescription(peerConnection, answer); |
- returnToTest('ok-' + JSON.stringify(answer)); |
+ returnToTest('ok-' + stringifyDOMObject_(answer)); |
}, |
function(error) { failure_('createAnswer', error); }, |
constraints); |
@@ -178,7 +178,7 @@ function getAllIceCandidates() { |
return; |
} |
- returnToTest(JSON.stringify(gIceCandidates)); |
+ returnToTest(stringifyDOMObject_(gIceCandidates)); |
} |
/** |
@@ -245,7 +245,7 @@ function success_(method) { |
/** @private */ |
function failure_(method, error) { |
- throw failTest(method + '() failed: ' + JSON.stringify(error)); |
+ throw failTest(method + '() failed: ' + stringifyDOMObject_(error)); |
} |
/** @private */ |
@@ -280,6 +280,28 @@ function removeStreamCallback_(event) { |
} |
/** |
+ * Stringifies a DOM object. |
+ * |
+ * This function stringifies not only own properties but also DOM attributes |
+ * which are on a prototype chain. Note that JSON.stringify only stringifies |
+ * own properties. |
+ * @private |
+ */ |
+function stringifyDOMObject_(object) |
+{ |
+ function deepCopy(src) { |
+ if (typeof src != "object") |
+ return src; |
+ var dst = Array.isArray(src) ? [] : {}; |
+ for (var property in src) { |
+ dst[property] = deepCopy(src[property]); |
+ } |
+ return dst; |
+ } |
+ return JSON.stringify(deepCopy(object)); |
+} |
+ |
+/** |
* Parses JSON-encoded session descriptions and ICE candidates. |
* @private |
*/ |