diff --git a/webrtc/api/android/jni/peerconnection_jni.cc b/webrtc/api/android/jni/peerconnection_jni.cc
index 5095b15..f47787f 100644
--- a/webrtc/api/android/jni/peerconnection_jni.cc
+++ b/webrtc/api/android/jni/peerconnection_jni.cc
@@ -1668,7 +1668,8 @@
       reinterpret_cast<PeerConnectionFactoryInterface*>(
           factoryFromJava(factory)));
 
-  PeerConnectionInterface::RTCConfiguration rtc_config;
+  PeerConnectionInterface::RTCConfiguration rtc_config =
+      PeerConnectionInterface::RTCConfiguration::AggressiveConfiguration();
   JavaRTCConfigurationToJsepRTCConfiguration(jni, j_rtc_config, &rtc_config);
 
   jclass j_rtc_config_class = GetObjectClass(jni, j_rtc_config);
@@ -1809,7 +1810,8 @@
 
 JOW(jboolean, PeerConnection_setConfiguration)(
     JNIEnv* jni, jobject j_pc, jobject j_rtc_config) {
-  PeerConnectionInterface::RTCConfiguration rtc_config;
+  PeerConnectionInterface::RTCConfiguration rtc_config =
+      PeerConnectionInterface::RTCConfiguration::AggressiveConfiguration();
   JavaRTCConfigurationToJsepRTCConfiguration(jni, j_rtc_config, &rtc_config);
   return ExtractNativePC(jni, j_pc)->SetConfiguration(rtc_config);
 }
diff --git a/webrtc/api/peerconnection.cc b/webrtc/api/peerconnection.cc
index c675015..b13113a 100644
--- a/webrtc/api/peerconnection.cc
+++ b/webrtc/api/peerconnection.cc
@@ -627,7 +627,9 @@
       factory_->worker_thread(), factory_->signaling_thread(),
       port_allocator_.get(),
       std::unique_ptr<cricket::TransportController>(
-          factory_->CreateTransportController(port_allocator_.get()))));
+          factory_->CreateTransportController(
+              port_allocator_.get(),
+              configuration.redetermine_role_on_ice_restart))));
 
   stats_.reset(new StatsCollector(this));
 
diff --git a/webrtc/api/peerconnectionfactory.cc b/webrtc/api/peerconnectionfactory.cc
index 82cd5d4..f49c291 100644
--- a/webrtc/api/peerconnectionfactory.cc
+++ b/webrtc/api/peerconnectionfactory.cc
@@ -309,10 +309,12 @@
 }
 
 cricket::TransportController* PeerConnectionFactory::CreateTransportController(
-    cricket::PortAllocator* port_allocator) {
+    cricket::PortAllocator* port_allocator,
+    bool redetermine_role_on_ice_restart) {
   RTC_DCHECK(signaling_thread_->IsCurrent());
   return new cricket::TransportController(signaling_thread_, network_thread_,
-                                          port_allocator);
+                                          port_allocator,
+                                          redetermine_role_on_ice_restart);
 }
 
 rtc::Thread* PeerConnectionFactory::signaling_thread() {
diff --git a/webrtc/api/peerconnectionfactory.h b/webrtc/api/peerconnectionfactory.h
index 377ad73..7684b95 100644
--- a/webrtc/api/peerconnectionfactory.h
+++ b/webrtc/api/peerconnectionfactory.h
@@ -91,7 +91,8 @@
   virtual webrtc::MediaControllerInterface* CreateMediaController(
       const cricket::MediaConfig& config) const;
   virtual cricket::TransportController* CreateTransportController(
-      cricket::PortAllocator* port_allocator);
+      cricket::PortAllocator* port_allocator,
+      bool redetermine_role_on_ice_restart);
   virtual rtc::Thread* signaling_thread();
   virtual rtc::Thread* worker_thread();
   virtual rtc::Thread* network_thread();
diff --git a/webrtc/api/peerconnectioninterface.h b/webrtc/api/peerconnectioninterface.h
index fdf9cef..1dba14c 100644
--- a/webrtc/api/peerconnectioninterface.h
+++ b/webrtc/api/peerconnectioninterface.h
@@ -240,6 +240,18 @@
     // methods for all settings which are of interest to applications,
     // Chrome in particular.
 
+    // A configuration that is safer to use, despite it may not have the best
+    // performance.
+    static RTCConfiguration SafeConfiguration() { return RTCConfiguration(); }
+
+    // An aggressive configuration that has better performance, although it
+    // may be riskier and may need extra support in the application.
+    static RTCConfiguration AggressiveConfiguration() {
+      RTCConfiguration config;
+      config.redetermine_role_on_ice_restart = false;
+      return config;
+    }
+
     bool dscp() { return media_config.enable_dscp; }
     void set_dscp(bool enable) { media_config.enable_dscp = enable; }
 
@@ -305,6 +317,9 @@
     // If set to true, this means the ICE transport should presume TURN-to-TURN
     // candidate pairs will succeed, even before a binding response is received.
     bool presume_writable_when_fully_relayed = false;
+    // If true, ICE role is redetermined when peerconnection sets a local
+    // transport description that indicates an ICE restart.
+    bool redetermine_role_on_ice_restart = true;
   };
 
   struct RTCOfferAnswerOptions {
diff --git a/webrtc/api/peerconnectioninterface_unittest.cc b/webrtc/api/peerconnectioninterface_unittest.cc
index 0b24fcb..d9c8af0 100644
--- a/webrtc/api/peerconnectioninterface_unittest.cc
+++ b/webrtc/api/peerconnectioninterface_unittest.cc
@@ -568,9 +568,11 @@
   }
 
   cricket::TransportController* CreateTransportController(
-      cricket::PortAllocator* port_allocator) override {
+      cricket::PortAllocator* port_allocator,
+      bool redetermine_role_on_ice_restart) override {
     transport_controller = new cricket::TransportController(
-        rtc::Thread::Current(), rtc::Thread::Current(), port_allocator);
+        rtc::Thread::Current(), rtc::Thread::Current(), port_allocator,
+        redetermine_role_on_ice_restart);
     return transport_controller;
   }
 
