summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorGrace Kloba <klobag@google.com>2010-01-26 18:08:28 -0800
committerGrace Kloba <klobag@google.com>2010-01-27 12:28:11 -0800
commitd0d9bc2f2fe737d186c0cc8c29a325e4f2907e8e (patch)
treef2cf97810b503211f57c972fb0db36d94e195703 /core
parent946e007283d76d6855824ed00910fb1470d369c2 (diff)
downloadframeworks_base-d0d9bc2f2fe737d186c0cc8c29a325e4f2907e8e.zip
frameworks_base-d0d9bc2f2fe737d186c0cc8c29a325e4f2907e8e.tar.gz
frameworks_base-d0d9bc2f2fe737d186c0cc8c29a325e4f2907e8e.tar.bz2
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 1 of 3-project checkin.
Diffstat (limited to 'core')
-rw-r--r--core/java/android/provider/Browser.java45
-rw-r--r--core/java/android/webkit/BrowserFrame.java13
-rw-r--r--core/java/android/webkit/WebView.java20
-rw-r--r--core/java/android/webkit/WebViewCore.java15
4 files changed, 57 insertions, 36 deletions
diff --git a/core/java/android/provider/Browser.java b/core/java/android/provider/Browser.java
index d67169f..ef43afe 100644
--- a/core/java/android/provider/Browser.java
+++ b/core/java/android/provider/Browser.java
@@ -34,12 +34,6 @@ public class Browser {
Uri.parse("content://browser/bookmarks");
/**
- * The inline scheme to show embedded content in a browser.
- * @hide
- */
- public static final Uri INLINE_URI = Uri.parse("inline:");
-
- /**
* The name of extra data when starting Browser with ACTION_VIEW or
* ACTION_SEARCH intent.
* <p>
@@ -62,24 +56,6 @@ public class Browser {
"com.android.browser.application_id";
/**
- * The content to be rendered when url's scheme is inline.
- * @hide
- */
- public static final String EXTRA_INLINE_CONTENT ="com.android.browser.inline.content";
-
- /**
- * The encoding of the inlined content for inline scheme.
- * @hide
- */
- public static final String EXTRA_INLINE_ENCODING ="com.android.browser.inline.encoding";
-
- /**
- * The url used when the inline content is falied to render.
- * @hide
- */
- public static final String EXTRA_INLINE_FAILURL ="com.android.browser.inline.failurl";
-
- /**
* The name of the extra data in the VIEW intent. The data is in boolean.
* <p>
* If the Browser is handling the intent and the setting for
@@ -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.
+ * <p>
+ * 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).
+ * <p>
+ */
+ 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.
+ * <p>
+ * 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).
+ * <p>
+ */
+ 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 1337bed..3f1672a 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<String, String> 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<String, String> 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 93e72ff..ecea55f 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -1376,6 +1376,22 @@ public class WebView extends AbsoluteLayout
}
/**
+ * 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<String, String> 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 6700d71..1e21cb4 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<String, String> 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<String, String> 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) {