@@ -102,6 +78,27 @@ public class Browser {
*/
public static final String EXTRA_POST_DATA = "com.android.browser.post_data";
+ /**
+ * The name of the extra data in the VIEW intent. The data is in the format
+ * of String array. This should be paired with EXTRA_HEADERS_VALUE.
+ *
+ * The keys will be combined with the values and sent in the HTTP request
+ * headers for the provided url. The keys can't be the standard HTTP headers
+ * as they are set by the WebView. The url's schema must be http(s).
+ *
+ */
+ public static final String EXTRA_HEADERS_KEY = "com.android.browser.headers_key";
+
+ /**
+ * The name of the extra data in the VIEW intent. The data is in the format
+ * of String array. This should be paired with EXTRA_HEADERS_KEY.
+ *
+ * The values will be combined with the keys and sent in the HTTP request
+ * headers for the provided url. The url's schema must be http(s).
+ *
+ */
+ public static final String EXTRA_HEADERS_VALUE = "com.android.browser.headers_value";
+
/* if you change column order you must also change indices
below */
public static final String[] HISTORY_PROJECTION = new String[] {
diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java
index 1337beda70384..3f1672af29bf0 100644
--- a/core/java/android/webkit/BrowserFrame.java
+++ b/core/java/android/webkit/BrowserFrame.java
@@ -177,18 +177,21 @@ class BrowserFrame extends Handler {
/**
* Load a url from the network or the filesystem into the main frame.
- * Following the same behaviour as Safari, javascript: URLs are not
- * passed to the main frame, instead they are evaluated immediately.
+ * Following the same behaviour as Safari, javascript: URLs are not passed
+ * to the main frame, instead they are evaluated immediately.
* @param url The url to load.
+ * @param extraHeaders The extra headers sent with this url. This should not
+ * include the common headers like "user-agent". If it does, it
+ * will be replaced by the intrinsic value of the WebView.
*/
- public void loadUrl(String url) {
+ public void loadUrl(String url, Map extraHeaders) {
mLoadInitFromJava = true;
if (URLUtil.isJavaScriptUrl(url)) {
// strip off the scheme and evaluate the string
stringByEvaluatingJavaScriptFromString(
url.substring("javascript:".length()));
} else {
- nativeLoadUrl(url);
+ nativeLoadUrl(url, extraHeaders);
}
mLoadInitFromJava = false;
}
@@ -904,7 +907,7 @@ class BrowserFrame extends Handler {
/**
* Returns false if the url is bad.
*/
- private native void nativeLoadUrl(String url);
+ private native void nativeLoadUrl(String url, Map headers);
private native void nativePostUrl(String url, byte[] postData);
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 93e72ffd41b2d..ecea55fe4a9e9 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -1375,6 +1375,22 @@ public class WebView extends AbsoluteLayout
return returnList;
}
+ /**
+ * Load the given url with the extra headers.
+ * @param url The url of the resource to load.
+ * @param extraHeaders The extra headers sent with this url. This should not
+ * include the common headers like "user-agent". If it does, it
+ * will be replaced by the intrinsic value of the WebView.
+ */
+ public void loadUrl(String url, Map extraHeaders) {
+ switchOutDrawHistory();
+ WebViewCore.GetUrlData arg = new WebViewCore.GetUrlData();
+ arg.mUrl = url;
+ arg.mExtraHeaders = extraHeaders;
+ mWebViewCore.sendMessage(EventHub.LOAD_URL, arg);
+ clearTextEntry();
+ }
+
/**
* Load the given url.
* @param url The url of the resource to load.
@@ -1383,9 +1399,7 @@ public class WebView extends AbsoluteLayout
if (url == null) {
return;
}
- switchOutDrawHistory();
- mWebViewCore.sendMessage(EventHub.LOAD_URL, url);
- clearTextEntry();
+ loadUrl(url, null);
}
/**
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 6700d712cfb4f..1e21cb4ccaab4 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -686,6 +686,11 @@ final class WebViewCore {
int mY;
}
+ static class GetUrlData {
+ String mUrl;
+ Map mExtraHeaders;
+ }
+
static class PostUrlData {
String mUrl;
byte[] mPostData;
@@ -958,9 +963,11 @@ final class WebViewCore {
((Float) msg.obj).floatValue(), msg.arg1);
break;
- case LOAD_URL:
- loadUrl((String) msg.obj);
+ case LOAD_URL: {
+ GetUrlData param = (GetUrlData) msg.obj;
+ loadUrl(param.mUrl, param.mExtraHeaders);
break;
+ }
case POST_URL: {
PostUrlData param = (PostUrlData) msg.obj;
@@ -1545,9 +1552,9 @@ final class WebViewCore {
}
}
- private void loadUrl(String url) {
+ private void loadUrl(String url, Map extraHeaders) {
if (DebugFlags.WEB_VIEW_CORE) Log.v(LOGTAG, " CORE loadUrl " + url);
- mBrowserFrame.loadUrl(url);
+ mBrowserFrame.loadUrl(url, extraHeaders);
}
private void key(KeyEvent evt, boolean isDown) {