Fix "IsLoopbackIp" to cover all loopback addresses; not just 127.0.0.1.

The loopback range is 127.0.0.0/8, which is everything from 127.0.0.0 to
127.255.255.255.

BUG=chromium:649118

Review-Url: https://codereview.webrtc.org/2445933003
Cr-Commit-Position: refs/heads/master@{#14807}
diff --git a/webrtc/base/ipaddress.cc b/webrtc/base/ipaddress.cc
index b1d1265..c06a1a7 100644
--- a/webrtc/base/ipaddress.cc
+++ b/webrtc/base/ipaddress.cc
@@ -294,7 +294,7 @@
 bool IPIsLoopback(const IPAddress& ip) {
   switch (ip.family()) {
     case AF_INET: {
-      return ip == IPAddress(INADDR_LOOPBACK);
+      return (ip.v4AddressAsHostOrderInteger() >> 24) == 127;
     }
     case AF_INET6: {
       return ip == IPAddress(in6addr_loopback);
diff --git a/webrtc/base/ipaddress_unittest.cc b/webrtc/base/ipaddress_unittest.cc
index cbe8f26..802b47b 100644
--- a/webrtc/base/ipaddress_unittest.cc
+++ b/webrtc/base/ipaddress_unittest.cc
@@ -575,6 +575,9 @@
   EXPECT_FALSE(IPIsLoopback(IPAddress(kIPv4MappedPublicAddr)));
 
   EXPECT_TRUE(IPIsLoopback(IPAddress(INADDR_LOOPBACK)));
+  // Try an address in the loopback range (127.0.0.0/8) other than the typical
+  // 127.0.0.1.
+  EXPECT_TRUE(IPIsLoopback(IPAddress(0x7f010203)));
   EXPECT_TRUE(IPIsLoopback(IPAddress(in6addr_loopback)));
 }
 
diff --git a/webrtc/p2p/base/turnport_unittest.cc b/webrtc/p2p/base/turnport_unittest.cc
index a8153ee..e99bd34 100644
--- a/webrtc/p2p/base/turnport_unittest.cc
+++ b/webrtc/p2p/base/turnport_unittest.cc
@@ -452,7 +452,9 @@
         ipv6 ? kTurnIPv6IntAddr : kTurnIntAddr;
 
     std::vector<rtc::SocketAddress> redirect_addresses;
-    SocketAddress loopback_address(ipv6 ? "::1" : "127.0.0.1",
+    // Pick an unusual address in the 127.0.0.0/8 range to make sure more than
+    // 127.0.0.1 is covered.
+    SocketAddress loopback_address(ipv6 ? "::1" : "127.1.2.3",
                                    TURN_SERVER_PORT);
     redirect_addresses.push_back(loopback_address);