| Index: components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java | 
| diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java | 
| index 8c33d769de6fe6d93dd73e96ed7744d482804f0c..c401e22843164623451c85da917086f814941b4a 100644 | 
| --- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java | 
| +++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java | 
| @@ -6,7 +6,6 @@ package org.chromium.net; | 
|  | 
| import android.os.ConditionVariable; | 
| import android.test.suitebuilder.annotation.SmallTest; | 
| -import android.util.Pair; | 
|  | 
| import org.chromium.base.test.util.Feature; | 
| import org.chromium.net.TestUrlRequestListener.FailureType; | 
| @@ -61,19 +60,19 @@ public class CronetUrlRequestTest extends CronetTestBase { | 
| return listener; | 
| } | 
|  | 
| -    private void checkResponseInfo(ResponseInfo responseInfo, | 
| -            String expectedUrl, int expectedHttpStatusCode, | 
| -            String expectedHttpStatusText) { | 
| +    private void checkResponseInfo(UrlResponseInfo responseInfo, String expectedUrl, | 
| +            int expectedHttpStatusCode, String expectedHttpStatusText) { | 
| assertEquals(expectedUrl, responseInfo.getUrl()); | 
| -        assertEquals(expectedUrl, responseInfo.getUrlChain()[ | 
| -                responseInfo.getUrlChain().length - 1]); | 
| +        assertEquals( | 
| +                expectedUrl, responseInfo.getUrlChain().get(responseInfo.getUrlChain().size() - 1)); | 
| assertEquals(expectedHttpStatusCode, responseInfo.getHttpStatusCode()); | 
| assertEquals(expectedHttpStatusText, responseInfo.getHttpStatusText()); | 
| assertFalse(responseInfo.wasCached()); | 
| +        assertTrue(responseInfo.toString().length() > 0); | 
| } | 
|  | 
| -    private void checkResponseInfoHeader(ResponseInfo responseInfo, | 
| -            String headerName, String headerValue) { | 
| +    private void checkResponseInfoHeader( | 
| +            UrlResponseInfo responseInfo, String headerName, String headerValue) { | 
| Map<String, List<String>> responseHeaders = | 
| responseInfo.getAllHeaders(); | 
| List<String> header = responseHeaders.get(headerName); | 
| @@ -120,17 +119,22 @@ public class CronetUrlRequestTest extends CronetTestBase { | 
| @SmallTest | 
| @Feature({"Cronet"}) | 
| public void testSimpleGet() throws Exception { | 
| -        TestUrlRequestListener listener = startAndWaitForComplete( | 
| -                NativeTestServer.getEchoMethodURL()); | 
| +        String url = NativeTestServer.getEchoMethodURL(); | 
| +        TestUrlRequestListener listener = startAndWaitForComplete(url); | 
| assertEquals(200, listener.mResponseInfo.getHttpStatusCode()); | 
| // Default method is 'GET'. | 
| assertEquals("GET", listener.mResponseAsString); | 
| assertEquals(0, listener.mRedirectCount); | 
| assertEquals(listener.mResponseStep, ResponseStep.ON_SUCCEEDED); | 
| +        assertEquals(String.format("UrlResponseInfo[%s]: urlChain = [%s], httpStatus = 200 OK, " | 
| +                                     + "headers = [Connection=close, Content-Length=3, " | 
| +                                     + "Content-Type=text/plain], wasCached = false, " | 
| +                                     + "negotiatedProtocol = unknown, proxyServer= :0, " | 
| +                                     + "receivedBytesCount = 86", | 
| +                             url, url), | 
| +                listener.mResponseInfo.toString()); | 
| checkResponseInfo(listener.mResponseInfo, | 
| NativeTestServer.getEchoMethodURL(), 200, "OK"); | 
| -        checkResponseInfo(listener.mExtendedResponseInfo.getResponseInfo(), | 
| -                NativeTestServer.getEchoMethodURL(), 200, "OK"); | 
| } | 
|  | 
| /** | 
| @@ -155,12 +159,19 @@ public class CronetUrlRequestTest extends CronetTestBase { | 
| assertEquals(1, listener.mRedirectResponseInfoList.size()); | 
| checkResponseInfo(listener.mRedirectResponseInfoList.get(0), | 
| NativeTestServer.getRedirectURL(), 302, "Found"); | 
| -        assertEquals(1, | 
| -                listener.mRedirectResponseInfoList.get(0).getUrlChain().length); | 
| +        assertEquals(1, listener.mRedirectResponseInfoList.get(0).getUrlChain().size()); | 
| assertEquals(NativeTestServer.getSuccessURL(), listener.mRedirectUrlList.get(0)); | 
| checkResponseInfoHeader(listener.mRedirectResponseInfoList.get(0), | 
| "redirect-header", "header-value"); | 
|  | 
| +        assertEquals(String.format("UrlResponseInfo[%s]: urlChain = [%s], httpStatus = 302 Found, " | 
| +                                     + "headers = [Location=/success.txt, " | 
| +                                     + "redirect-header=header-value], wasCached = false, " | 
| +                                     + "negotiatedProtocol = unknown, proxyServer= :0, " | 
| +                                     + "receivedBytesCount = 74", | 
| +                             NativeTestServer.getRedirectURL(), NativeTestServer.getRedirectURL()), | 
| +                listener.mRedirectResponseInfoList.get(0).toString()); | 
| + | 
| // Wait for an unrelated request to finish. The request should not | 
| // advance until followRedirect is invoked. | 
| testSimpleGet(); | 
| @@ -175,9 +186,10 @@ public class CronetUrlRequestTest extends CronetTestBase { | 
| assertEquals(1, listener.mRedirectResponseInfoList.size()); | 
| assertEquals(200, listener.mResponseInfo.getHttpStatusCode()); | 
| checkResponseInfo(listener.mResponseInfo, NativeTestServer.getSuccessURL(), 200, "OK"); | 
| -        assertEquals(2, listener.mResponseInfo.getUrlChain().length); | 
| -        assertEquals(NativeTestServer.getRedirectURL(), listener.mResponseInfo.getUrlChain()[0]); | 
| -        assertEquals(NativeTestServer.getSuccessURL(), listener.mResponseInfo.getUrlChain()[1]); | 
| +        assertEquals(2, listener.mResponseInfo.getUrlChain().size()); | 
| +        assertEquals( | 
| +                NativeTestServer.getRedirectURL(), listener.mResponseInfo.getUrlChain().get(0)); | 
| +        assertEquals(NativeTestServer.getSuccessURL(), listener.mResponseInfo.getUrlChain().get(1)); | 
|  | 
| // Wait for an unrelated request to finish. The request should not | 
| // advance until read is invoked. | 
| @@ -203,6 +215,17 @@ public class CronetUrlRequestTest extends CronetTestBase { | 
| assertEquals(ResponseStep.ON_SUCCEEDED, listener.mResponseStep); | 
| assertEquals(NativeTestServer.SUCCESS_BODY, listener.mResponseAsString); | 
|  | 
| +        assertEquals(String.format("UrlResponseInfo[%s]: urlChain = [%s, %s], httpStatus = 200 OK, " | 
| +                                     + "headers = [Content-Type=text/plain, " | 
| +                                     + "Access-Control-Allow-Origin=*, header-name=header-value, " | 
| +                                     + "multi-header-name=header-value1, " | 
| +                                     + "multi-header-name=header-value2], wasCached = false, " | 
| +                                     + "negotiatedProtocol = unknown, proxyServer= :0, " | 
| +                                     + "receivedBytesCount = 260", | 
| +                             NativeTestServer.getSuccessURL(), NativeTestServer.getRedirectURL(), | 
| +                             NativeTestServer.getSuccessURL()), | 
| +                listener.mResponseInfo.toString()); | 
| + | 
| // Make sure there are no other pending messages, which would trigger | 
| // asserts in TestURLRequestListener. | 
| testSimpleGet(); | 
| @@ -214,8 +237,6 @@ public class CronetUrlRequestTest extends CronetTestBase { | 
| String url = NativeTestServer.getFileURL("/notfound.html"); | 
| TestUrlRequestListener listener = startAndWaitForComplete(url); | 
| checkResponseInfo(listener.mResponseInfo, url, 404, "Not Found"); | 
| -        checkResponseInfo(listener.mExtendedResponseInfo.getResponseInfo(), | 
| -                url, 404, "Not Found"); | 
| assertEquals( | 
| "<!DOCTYPE html>\n<html>\n<head>\n<title>Not found</title>\n" | 
| + "<p>Test page loaded.</p>\n</head>\n</html>\n", | 
| @@ -417,20 +438,19 @@ public class CronetUrlRequestTest extends CronetTestBase { | 
| public void testResponseHeadersList() throws Exception { | 
| TestUrlRequestListener listener = startAndWaitForComplete(NativeTestServer.getSuccessURL()); | 
| assertEquals(200, listener.mResponseInfo.getHttpStatusCode()); | 
| -        List<Pair<String, String>> responseHeaders = | 
| +        List<Map.Entry<String, String>> responseHeaders = | 
| listener.mResponseInfo.getAllHeadersAsList(); | 
| assertEquals(5, responseHeaders.size()); | 
| -        assertEquals("Content-Type", responseHeaders.get(0).first); | 
| -        assertEquals("text/plain", responseHeaders.get(0).second); | 
| -        assertEquals("Access-Control-Allow-Origin", | 
| -                responseHeaders.get(1).first); | 
| -        assertEquals("*", responseHeaders.get(1).second); | 
| -        assertEquals("header-name", responseHeaders.get(2).first); | 
| -        assertEquals("header-value", responseHeaders.get(2).second); | 
| -        assertEquals("multi-header-name", responseHeaders.get(3).first); | 
| -        assertEquals("header-value1", responseHeaders.get(3).second); | 
| -        assertEquals("multi-header-name", responseHeaders.get(4).first); | 
| -        assertEquals("header-value2", responseHeaders.get(4).second); | 
| +        assertEquals("Content-Type", responseHeaders.get(0).getKey()); | 
| +        assertEquals("text/plain", responseHeaders.get(0).getValue()); | 
| +        assertEquals("Access-Control-Allow-Origin", responseHeaders.get(1).getKey()); | 
| +        assertEquals("*", responseHeaders.get(1).getValue()); | 
| +        assertEquals("header-name", responseHeaders.get(2).getKey()); | 
| +        assertEquals("header-value", responseHeaders.get(2).getValue()); | 
| +        assertEquals("multi-header-name", responseHeaders.get(3).getKey()); | 
| +        assertEquals("header-value1", responseHeaders.get(3).getValue()); | 
| +        assertEquals("multi-header-name", responseHeaders.get(4).getKey()); | 
| +        assertEquals("header-value2", responseHeaders.get(4).getValue()); | 
| } | 
|  | 
| @SmallTest | 
| @@ -438,44 +458,45 @@ public class CronetUrlRequestTest extends CronetTestBase { | 
| public void testMockMultiRedirect() throws Exception { | 
| TestUrlRequestListener listener = | 
| startAndWaitForComplete(NativeTestServer.getMultiRedirectURL()); | 
| -        ResponseInfo mResponseInfo = listener.mResponseInfo; | 
| +        UrlResponseInfo mResponseInfo = listener.mResponseInfo; | 
| assertEquals(2, listener.mRedirectCount); | 
| assertEquals(200, mResponseInfo.getHttpStatusCode()); | 
| assertEquals(2, listener.mRedirectResponseInfoList.size()); | 
|  | 
| // Check first redirect (multiredirect.html -> redirect.html) | 
| -        ResponseInfo firstRedirectResponseInfo = | 
| -                listener.mRedirectResponseInfoList.get(0); | 
| -        assertEquals(1, firstRedirectResponseInfo.getUrlChain().length); | 
| -        assertEquals( | 
| -                NativeTestServer.getMultiRedirectURL(), firstRedirectResponseInfo.getUrlChain()[0]); | 
| +        UrlResponseInfo firstRedirectResponseInfo = listener.mRedirectResponseInfoList.get(0); | 
| +        assertEquals(1, firstRedirectResponseInfo.getUrlChain().size()); | 
| +        assertEquals(NativeTestServer.getMultiRedirectURL(), | 
| +                firstRedirectResponseInfo.getUrlChain().get(0)); | 
| checkResponseInfo( | 
| firstRedirectResponseInfo, NativeTestServer.getMultiRedirectURL(), 302, "Found"); | 
| checkResponseInfoHeader(firstRedirectResponseInfo, | 
| "redirect-header0", "header-value"); | 
| +        assertEquals(77, firstRedirectResponseInfo.getReceivedBytesCount()); | 
|  | 
| // Check second redirect (redirect.html -> success.txt) | 
| -        ResponseInfo secondRedirectResponseInfo = | 
| -                listener.mRedirectResponseInfoList.get(1); | 
| -        assertEquals(2, secondRedirectResponseInfo.getUrlChain().length); | 
| +        UrlResponseInfo secondRedirectResponseInfo = listener.mRedirectResponseInfoList.get(1); | 
| +        assertEquals(2, secondRedirectResponseInfo.getUrlChain().size()); | 
| assertEquals(NativeTestServer.getMultiRedirectURL(), | 
| -                secondRedirectResponseInfo.getUrlChain()[0]); | 
| +                secondRedirectResponseInfo.getUrlChain().get(0)); | 
| assertEquals( | 
| -                NativeTestServer.getRedirectURL(), secondRedirectResponseInfo.getUrlChain()[1]); | 
| +                NativeTestServer.getRedirectURL(), secondRedirectResponseInfo.getUrlChain().get(1)); | 
| checkResponseInfo( | 
| secondRedirectResponseInfo, NativeTestServer.getRedirectURL(), 302, "Found"); | 
| checkResponseInfoHeader(secondRedirectResponseInfo, | 
| "redirect-header", "header-value"); | 
| +        assertEquals(151, secondRedirectResponseInfo.getReceivedBytesCount()); | 
|  | 
| // Check final response (success.txt). | 
| assertEquals(NativeTestServer.getSuccessURL(), mResponseInfo.getUrl()); | 
| -        assertEquals(3, mResponseInfo.getUrlChain().length); | 
| -        assertEquals(NativeTestServer.getMultiRedirectURL(), mResponseInfo.getUrlChain()[0]); | 
| -        assertEquals(NativeTestServer.getRedirectURL(), mResponseInfo.getUrlChain()[1]); | 
| -        assertEquals(NativeTestServer.getSuccessURL(), mResponseInfo.getUrlChain()[2]); | 
| +        assertEquals(3, mResponseInfo.getUrlChain().size()); | 
| +        assertEquals(NativeTestServer.getMultiRedirectURL(), mResponseInfo.getUrlChain().get(0)); | 
| +        assertEquals(NativeTestServer.getRedirectURL(), mResponseInfo.getUrlChain().get(1)); | 
| +        assertEquals(NativeTestServer.getSuccessURL(), mResponseInfo.getUrlChain().get(2)); | 
| assertTrue(listener.mHttpResponseDataLength != 0); | 
| assertEquals(2, listener.mRedirectCount); | 
| assertEquals(listener.mResponseStep, ResponseStep.ON_SUCCEEDED); | 
| +        assertEquals(337, mResponseInfo.getReceivedBytesCount()); | 
| } | 
|  | 
| @SmallTest | 
| @@ -484,6 +505,7 @@ public class CronetUrlRequestTest extends CronetTestBase { | 
| TestUrlRequestListener listener = | 
| startAndWaitForComplete(NativeTestServer.getNotFoundURL()); | 
| assertEquals(404, listener.mResponseInfo.getHttpStatusCode()); | 
| +        assertEquals(121, listener.mResponseInfo.getReceivedBytesCount()); | 
| assertTrue(listener.mHttpResponseDataLength != 0); | 
| assertEquals(0, listener.mRedirectCount); | 
| assertFalse(listener.mOnErrorCalled); | 
| @@ -513,6 +535,7 @@ public class CronetUrlRequestTest extends CronetTestBase { | 
| startAndWaitForComplete(MockUrlRequestJobFactory.getMockUrlWithFailure( | 
| FailurePhase.READ_SYNC, arbitraryNetError)); | 
| assertEquals(200, listener.mResponseInfo.getHttpStatusCode()); | 
| +        assertEquals(0, listener.mResponseInfo.getReceivedBytesCount()); | 
| assertNotNull(listener.mError); | 
| assertEquals(arbitraryNetError, listener.mError.netError()); | 
| assertEquals(0, listener.mRedirectCount); | 
| @@ -528,6 +551,7 @@ public class CronetUrlRequestTest extends CronetTestBase { | 
| startAndWaitForComplete(MockUrlRequestJobFactory.getMockUrlWithFailure( | 
| FailurePhase.READ_ASYNC, arbitraryNetError)); | 
| assertEquals(200, listener.mResponseInfo.getHttpStatusCode()); | 
| +        assertEquals(0, listener.mResponseInfo.getReceivedBytesCount()); | 
| assertNotNull(listener.mError); | 
| assertEquals(arbitraryNetError, listener.mError.netError()); | 
| assertEquals(0, listener.mRedirectCount); | 
|  |