Yes, currently Chromium only reports IceConnectionState as Failed on the Offerer side. (This is still an unresolved issue in the specification at the W3C.)
You can restart the ice connection by creating a new offer with peerConnection.createOffer(successCallback, failureCallback, {mandatory: {IceRestart: true}}), and configuring your successCallback to do a complete negotiation (setLocalDescription, send offer over the signaling channel, etc.).
I'm not sure about all possible orderings of addCandidate and set*Description, but it should be OK to call addCandidate before or after setRemoteDescription, and if you're calling it at the wrong time, you should get an error or failure callback in javascript.