summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--luni/src/main/java/java/util/Locale.java11
-rw-r--r--luni/src/main/java/libcore/net/http/HttpEngine.java16
-rw-r--r--luni/src/test/java/libcore/java/net/URLConnectionTest.java21
-rw-r--r--luni/src/test/java/libcore/java/util/LocaleTest.java10
4 files changed, 51 insertions, 7 deletions
diff --git a/luni/src/main/java/java/util/Locale.java b/luni/src/main/java/java/util/Locale.java
index 6b20a1c..0fbe2f5 100644
--- a/luni/src/main/java/java/util/Locale.java
+++ b/luni/src/main/java/java/util/Locale.java
@@ -396,6 +396,17 @@ public final class Locale implements Cloneable, Serializable {
if (languageCode.isEmpty()) {
return "";
}
+
+ // Last-minute workaround for http://b/7291355 in jb-mr1.
+ // This isn't right for all languages, but it's right for en and tl.
+ // We should have more CLDR data in a future release, but we'll still
+ // probably want to have frameworks/base translate the obsolete tl and
+ // tl-rPH locales to fil and fil-rPH at runtime, at which point
+ // libcore and icu4c will just do the right thing.
+ if (languageCode.equals("tl")) {
+ return "Filipino";
+ }
+
String result = ICU.getDisplayLanguageNative(toString(), locale.toString());
if (result == null) { // TODO: do we need to do this, or does ICU do it for us?
result = ICU.getDisplayLanguageNative(toString(), Locale.getDefault().toString());
diff --git a/luni/src/main/java/libcore/net/http/HttpEngine.java b/luni/src/main/java/libcore/net/http/HttpEngine.java
index 8f97c81..42c9b96 100644
--- a/luni/src/main/java/libcore/net/http/HttpEngine.java
+++ b/luni/src/main/java/libcore/net/http/HttpEngine.java
@@ -491,8 +491,15 @@ public class HttpEngine {
reusable = false;
}
- // If the headers specify that the connection shouldn't be reused, don't reuse it.
- if (hasConnectionCloseHeader()) {
+ // If the request specified that the connection shouldn't be reused,
+ // don't reuse it. This advice doesn't apply to CONNECT requests because
+ // the "Connection: close" header goes the origin server, not the proxy.
+ if (requestHeaders.hasConnectionClose() && method != CONNECT) {
+ reusable = false;
+ }
+
+ // If the response specified that the connection shouldn't be reused, don't reuse it.
+ if (responseHeaders != null && responseHeaders.hasConnectionClose()) {
reusable = false;
}
@@ -764,11 +771,6 @@ public class HttpEngine {
return agent != null ? agent : ("Java" + System.getProperty("java.version"));
}
- private boolean hasConnectionCloseHeader() {
- return (responseHeaders != null && responseHeaders.hasConnectionClose())
- || requestHeaders.hasConnectionClose();
- }
-
protected final String getOriginAddress(URL url) {
int port = url.getPort();
String result = url.getHost();
diff --git a/luni/src/test/java/libcore/java/net/URLConnectionTest.java b/luni/src/test/java/libcore/java/net/URLConnectionTest.java
index d7a4544..e40ba57 100644
--- a/luni/src/test/java/libcore/java/net/URLConnectionTest.java
+++ b/luni/src/test/java/libcore/java/net/URLConnectionTest.java
@@ -795,6 +795,27 @@ public final class URLConnectionTest extends TestCase {
assertContainsNoneMatching(get.getHeaders(), "Proxy\\-Authorization.*");
}
+ // Don't disconnect after building a tunnel with CONNECT
+ // http://code.google.com/p/android/issues/detail?id=37221
+ public void testProxyWithConnectionClose() throws IOException {
+ TestSSLContext testSSLContext = TestSSLContext.create();
+ server.useHttps(testSSLContext.serverContext.getSocketFactory(), true);
+ server.enqueue(new MockResponse()
+ .setSocketPolicy(SocketPolicy.UPGRADE_TO_SSL_AT_END)
+ .clearHeaders());
+ server.enqueue(new MockResponse().setBody("this response comes via a proxy"));
+ server.play();
+
+ URL url = new URL("https://android.com/foo");
+ HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(
+ server.toProxyAddress());
+ connection.setRequestProperty("Connection", "close");
+ connection.setSSLSocketFactory(testSSLContext.clientContext.getSocketFactory());
+ connection.setHostnameVerifier(new RecordingHostnameVerifier());
+
+ assertContent("this response comes via a proxy", connection);
+ }
+
public void testDisconnectedConnection() throws IOException {
server.enqueue(new MockResponse().setBody("ABCDEFGHIJKLMNOPQR"));
server.play();
diff --git a/luni/src/test/java/libcore/java/util/LocaleTest.java b/luni/src/test/java/libcore/java/util/LocaleTest.java
index 541dd66..b146b1a 100644
--- a/luni/src/test/java/libcore/java/util/LocaleTest.java
+++ b/luni/src/test/java/libcore/java/util/LocaleTest.java
@@ -46,6 +46,16 @@ public class LocaleTest extends junit.framework.TestCase {
assertEquals("Deutsch", Locale.GERMAN.getDisplayLanguage(Locale.GERMAN));
}
+ // http://b/7291355; Locale.getDisplayLanguage fails for tl in tl in ICU 4.9.
+ public void test_tl() throws Exception {
+ Locale tl = new Locale("tl");
+ Locale tl_PH = new Locale("tl", "PH");
+ assertEquals("Filipino", tl.getDisplayLanguage(Locale.ENGLISH));
+ assertEquals("Filipino", tl_PH.getDisplayLanguage(Locale.ENGLISH));
+ assertEquals("Filipino", tl.getDisplayLanguage(tl));
+ assertEquals("Filipino", tl_PH.getDisplayLanguage(tl_PH));
+ }
+
// http://b/3452611; Locale.getDisplayLanguage fails for the obsolete language codes.
public void test_getDisplayName_obsolete() throws Exception {
// he (new) -> iw (obsolete)