diff options
author | Grace Kloba <klobag@google.com> | 2010-01-26 18:08:28 -0800 |
---|---|---|
committer | Grace Kloba <klobag@google.com> | 2010-01-27 12:28:11 -0800 |
commit | d0d9bc2f2fe737d186c0cc8c29a325e4f2907e8e (patch) | |
tree | f2cf97810b503211f57c972fb0db36d94e195703 /core | |
parent | 946e007283d76d6855824ed00910fb1470d369c2 (diff) | |
download | frameworks_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.java | 45 | ||||
-rw-r--r-- | core/java/android/webkit/BrowserFrame.java | 13 | ||||
-rw-r--r-- | core/java/android/webkit/WebView.java | 20 | ||||
-rw-r--r-- | core/java/android/webkit/WebViewCore.java | 15 |
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) { |