Catching more errors when parsing ICE server URLs.

Every malformed URL should now produce an error message in JS, rather than
silently failing and possibly printing a warning message to the console (and
possibly crashing).

Also added some unit tests, and made "ParseIceServers" public.

BUG=445002

Review URL: https://codereview.webrtc.org/1344143002

Cr-Commit-Position: refs/heads/master@{#10186}
diff --git a/talk/app/webrtc/peerconnectioninterface_unittest.cc b/talk/app/webrtc/peerconnectioninterface_unittest.cc
index 03ceaf2..5e135df 100644
--- a/talk/app/webrtc/peerconnectioninterface_unittest.cc
+++ b/talk/app/webrtc/peerconnectioninterface_unittest.cc
@@ -247,9 +247,11 @@
                             webrtc::MediaConstraintsInterface* constraints) {
     PeerConnectionInterface::IceServer server;
     PeerConnectionInterface::IceServers servers;
-    server.uri = uri;
-    server.password = password;
-    servers.push_back(server);
+    if (!uri.empty()) {
+      server.uri = uri;
+      server.password = password;
+      servers.push_back(server);
+    }
 
     port_allocator_factory_ = FakePortAllocatorFactory::Create();
 
@@ -281,6 +283,21 @@
     EXPECT_EQ(PeerConnectionInterface::kStable, observer_.state_);
   }
 
+  void CreatePeerConnectionExpectFail(const std::string& uri) {
+    PeerConnectionInterface::IceServer server;
+    PeerConnectionInterface::IceServers servers;
+    server.uri = uri;
+    servers.push_back(server);
+
+    scoped_ptr<webrtc::DtlsIdentityStoreInterface> dtls_identity_store;
+    port_allocator_factory_ = FakePortAllocatorFactory::Create();
+    scoped_refptr<PeerConnectionInterface> pc;
+    pc = pc_factory_->CreatePeerConnection(
+        servers, nullptr, port_allocator_factory_.get(),
+        dtls_identity_store.Pass(), &observer_);
+    ASSERT_EQ(nullptr, pc);
+  }
+
   void CreatePeerConnectionWithDifferentConfigurations() {
     CreatePeerConnection(kStunAddressOnly, "", NULL);
     EXPECT_EQ(1u, port_allocator_factory_->stun_configs().size());
@@ -290,17 +307,9 @@
     EXPECT_EQ(kDefaultStunPort,
         port_allocator_factory_->stun_configs()[0].server.port());
 
-    CreatePeerConnection(kStunInvalidPort, "", NULL);
-    EXPECT_EQ(0u, port_allocator_factory_->stun_configs().size());
-    EXPECT_EQ(0u, port_allocator_factory_->turn_configs().size());
-
-    CreatePeerConnection(kStunAddressPortAndMore1, "", NULL);
-    EXPECT_EQ(0u, port_allocator_factory_->stun_configs().size());
-    EXPECT_EQ(0u, port_allocator_factory_->turn_configs().size());
-
-    CreatePeerConnection(kStunAddressPortAndMore2, "", NULL);
-    EXPECT_EQ(0u, port_allocator_factory_->stun_configs().size());
-    EXPECT_EQ(0u, port_allocator_factory_->turn_configs().size());
+    CreatePeerConnectionExpectFail(kStunInvalidPort);
+    CreatePeerConnectionExpectFail(kStunAddressPortAndMore1);
+    CreatePeerConnectionExpectFail(kStunAddressPortAndMore2);
 
     CreatePeerConnection(kTurnIceServerUri, kTurnPassword, NULL);
     EXPECT_EQ(0u, port_allocator_factory_->stun_configs().size());