| Index: net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java
|
| diff --git a/net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java b/net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java
|
| index 5ce3726ac7259f0e96f28146dbe45fd08c0233b7..c892afe9bc85a9a7bebadf2fa5a5109c5c88df94 100644
|
| --- a/net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java
|
| +++ b/net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java
|
| @@ -88,6 +88,9 @@ public class TestWebServer {
|
| }
|
| }
|
|
|
| + // The Maps below are modified on both the client thread and the internal server thread, so
|
| + // need to use a lock when accessing them.
|
| + private final Object mLock = new Object();
|
| private Map<String, Response> mResponseMap = new HashMap<String, Response>();
|
| private Map<String, Integer> mResponseCountMap = new HashMap<String, Integer>();
|
| private Map<String, HttpRequest> mLastRequestMap = new HashMap<String, HttpRequest>();
|
| @@ -157,9 +160,12 @@ public class TestWebServer {
|
| List<Pair<String, String>> responseHeaders,
|
| int status) {
|
| final boolean isRedirect = (status == RESPONSE_STATUS_MOVED_TEMPORARILY);
|
| - mResponseMap.put(requestPath, new Response(responseData, responseHeaders, isRedirect));
|
| - mResponseCountMap.put(requestPath, Integer.valueOf(0));
|
| - mLastRequestMap.put(requestPath, null);
|
| +
|
| + synchronized (mLock) {
|
| + mResponseMap.put(requestPath, new Response(responseData, responseHeaders, isRedirect));
|
| + mResponseCountMap.put(requestPath, Integer.valueOf(0));
|
| + mLastRequestMap.put(requestPath, null);
|
| + }
|
| return getResponseUrl(requestPath);
|
| }
|
|
|
| @@ -235,7 +241,10 @@ public class TestWebServer {
|
| * Get the number of requests was made at this path since it was last set.
|
| */
|
| public int getRequestCount(String requestPath) {
|
| - Integer count = mResponseCountMap.get(requestPath);
|
| + Integer count = null;
|
| + synchronized (mLock) {
|
| + count = mResponseCountMap.get(requestPath);
|
| + }
|
| if (count == null) throw new IllegalArgumentException("Path not set: " + requestPath);
|
| return count.intValue();
|
| }
|
| @@ -244,9 +253,11 @@ public class TestWebServer {
|
| * Returns the last HttpRequest at this path. Can return null if it is never requested.
|
| */
|
| public HttpRequest getLastRequest(String requestPath) {
|
| - if (!mLastRequestMap.containsKey(requestPath))
|
| - throw new IllegalArgumentException("Path not set: " + requestPath);
|
| - return mLastRequestMap.get(requestPath);
|
| + synchronized (mLock) {
|
| + if (!mLastRequestMap.containsKey(requestPath))
|
| + throw new IllegalArgumentException("Path not set: " + requestPath);
|
| + return mLastRequestMap.get(requestPath);
|
| + }
|
| }
|
|
|
| public String getBaseUrl() {
|
| @@ -310,9 +321,11 @@ public class TestWebServer {
|
| }
|
|
|
| private void servedResponseFor(String path, HttpRequest request) {
|
| - mResponseCountMap.put(path, Integer.valueOf(
|
| - mResponseCountMap.get(path).intValue() + 1));
|
| - mLastRequestMap.put(path, request);
|
| + synchronized (mLock) {
|
| + mResponseCountMap.put(path, Integer.valueOf(
|
| + mResponseCountMap.get(path).intValue() + 1));
|
| + mLastRequestMap.put(path, request);
|
| + }
|
| }
|
|
|
| /**
|
| @@ -327,7 +340,10 @@ public class TestWebServer {
|
| URI uri = URI.create(uriString);
|
| String path = uri.getPath();
|
|
|
| - Response response = mResponseMap.get(path);
|
| + Response response = null;
|
| + synchronized (mLock) {
|
| + response = mResponseMap.get(path);
|
| + }
|
| if (path.equals(SHUTDOWN_PREFIX)) {
|
| httpResponse = createResponse(HttpStatus.SC_OK);
|
| } else if (response == null) {
|
| @@ -362,16 +378,21 @@ public class TestWebServer {
|
| */
|
| private HttpResponse createResponse(int status) {
|
| HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_0, status, null);
|
| -
|
| - if (sReasons == null) {
|
| - sReasons = new Hashtable<Integer, String>();
|
| - sReasons.put(HttpStatus.SC_UNAUTHORIZED, "Unauthorized");
|
| - sReasons.put(HttpStatus.SC_NOT_FOUND, "Not Found");
|
| - sReasons.put(HttpStatus.SC_FORBIDDEN, "Forbidden");
|
| - sReasons.put(HttpStatus.SC_MOVED_TEMPORARILY, "Moved Temporarily");
|
| + String reason = null;
|
| +
|
| + // This synchronized silences findbugs.
|
| + synchronized (TestWebServer.class) {
|
| + if (sReasons == null) {
|
| + sReasons = new Hashtable<Integer, String>();
|
| + sReasons.put(HttpStatus.SC_UNAUTHORIZED, "Unauthorized");
|
| + sReasons.put(HttpStatus.SC_NOT_FOUND, "Not Found");
|
| + sReasons.put(HttpStatus.SC_FORBIDDEN, "Forbidden");
|
| + sReasons.put(HttpStatus.SC_MOVED_TEMPORARILY, "Moved Temporarily");
|
| + }
|
| + // Fill in error reason. Avoid use of the ReasonPhraseCatalog, which is
|
| + // Locale-dependent.
|
| + reason = sReasons.get(status);
|
| }
|
| - // Fill in error reason. Avoid use of the ReasonPhraseCatalog, which is Locale-dependent.
|
| - String reason = sReasons.get(status);
|
|
|
| if (reason != null) {
|
| StringBuffer buf = new StringBuffer("<html><head><title>");
|
|
|