Add request header support for the Browser/WebView.
QSB can use this instead of POST to send the location
data. After QSB makes the switch, we should also
remove the POST_DATA intent which is hidden.
Add loadUrl(String url, HashMap extraHeaders) to
WebView so that the caller can send the extra http
headers.
Remove "inline:" as no one is using it and it is a
hidden feature.
Part 2 of 3-project checkin.
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index df71e9e..451b3b2 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -123,6 +123,7 @@
import java.text.ParseException;
import java.util.Date;
import java.util.HashMap;
+import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -408,10 +409,6 @@
waitForCredentials();
}
} else {
- if (extra != null) {
- urlData.setPostData(extra
- .getByteArray(Browser.EXTRA_POST_DATA));
- }
urlData.loadIn(webView);
}
} else {
@@ -464,8 +461,6 @@
if (urlData.isEmpty()) {
urlData = new UrlData(mSettings.getHomePage());
}
- urlData.setPostData(intent
- .getByteArrayExtra(Browser.EXTRA_POST_DATA));
final String appId = intent
.getStringExtra(Browser.EXTRA_APPLICATION_ID);
@@ -627,6 +622,7 @@
private UrlData getUrlDataFromIntent(Intent intent) {
String url = null;
+ Map<String, String> headers = null;
if (intent != null) {
final String action = intent.getAction();
if (Intent.ACTION_VIEW.equals(action)) {
@@ -638,12 +634,18 @@
url += "?" + mimeType;
}
}
- if ("inline:".equals(url)) {
- return new InlinedUrlData(
- intent.getStringExtra(Browser.EXTRA_INLINE_CONTENT),
- intent.getType(),
- intent.getStringExtra(Browser.EXTRA_INLINE_ENCODING),
- intent.getStringExtra(Browser.EXTRA_INLINE_FAILURL));
+ if (url != null && url.startsWith("http")) {
+ String[] keys = intent
+ .getStringArrayExtra(Browser.EXTRA_HEADERS_KEY);
+ String[] values = intent
+ .getStringArrayExtra(Browser.EXTRA_HEADERS_VALUE);
+ if (keys != null && values != null && keys.length > 0
+ && keys.length == values.length) {
+ headers = new HashMap<String, String>();
+ for (int i = 0; i < keys.length; i++) {
+ headers.put(keys[i], values[i]);
+ }
+ }
}
} else if (Intent.ACTION_SEARCH.equals(action)
|| MediaStore.INTENT_ACTION_MEDIA_SEARCH.equals(action)
@@ -671,7 +673,7 @@
}
}
}
- return new UrlData(url);
+ return new UrlData(url, headers);
}
/* package */ static String fixUrl(String inUrl) {
@@ -3887,15 +3889,17 @@
* This base class uses loadUrl to show the content.
*/
private static class UrlData {
- String mUrl;
- byte[] mPostData;
+ final String mUrl;
+ final Map<String, String> mHeaders;
UrlData(String url) {
this.mUrl = url;
+ this.mHeaders = null;
}
- void setPostData(byte[] postData) {
- mPostData = postData;
+ UrlData(String url, Map<String, String> headers) {
+ this.mUrl = url;
+ this.mHeaders = headers;
}
boolean isEmpty() {
@@ -3903,38 +3907,9 @@
}
public void loadIn(WebView webView) {
- if (mPostData != null) {
- webView.postUrl(mUrl, mPostData);
- } else {
- webView.loadUrl(mUrl);
- }
+ webView.loadUrl(mUrl, mHeaders);
}
};
- /**
- * A subclass of UrlData class that can display inlined content using
- * {@link WebView#loadDataWithBaseURL(String, String, String, String, String)}.
- */
- private static class InlinedUrlData extends UrlData {
- InlinedUrlData(String inlined, String mimeType, String encoding, String failUrl) {
- super(failUrl);
- mInlined = inlined;
- mMimeType = mimeType;
- mEncoding = encoding;
- }
- String mMimeType;
- String mInlined;
- String mEncoding;
- @Override
- boolean isEmpty() {
- return mInlined == null || mInlined.length() == 0 || super.isEmpty();
- }
-
- @Override
- public void loadIn(WebView webView) {
- webView.loadDataWithBaseURL(null, mInlined, mMimeType, mEncoding, mUrl);
- }
- }
-
/* package */ static final UrlData EMPTY_URL_DATA = new UrlData(null);
}