diff options
| author | Selim Gurun <sgurun@google.com> | 2012-08-29 11:43:31 -0700 |
|---|---|---|
| committer | Selim Gurun <sgurun@google.com> | 2012-08-29 11:50:55 -0700 |
| commit | a36dcfdfe0e93cf18ae2c98f92625a593d624bb7 (patch) | |
| tree | 00f0a1b2f76ce76fb26321057b83fd795c767002 /core/java/android | |
| parent | 70574efd8f7105eb73a6ffe31992ed3c5971c8cc (diff) | |
Provide referer to browser on download request.
Bug: 6662557
Provide a private API to provide referer to browser for download
requests.
Change-Id: I6ff393caa43e16db12fb5dab38f1f26cd76bf232
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/webkit/BrowserDownloadListener.java | 57 | ||||
| -rw-r--r-- | core/java/android/webkit/BrowserFrame.java | 4 | ||||
| -rw-r--r-- | core/java/android/webkit/CallbackProxy.java | 14 |
3 files changed, 70 insertions, 5 deletions
diff --git a/core/java/android/webkit/BrowserDownloadListener.java b/core/java/android/webkit/BrowserDownloadListener.java new file mode 100644 index 000000000000..724cc62895b4 --- /dev/null +++ b/core/java/android/webkit/BrowserDownloadListener.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.webkit; + +/** + * An abstract download listener that allows passing extra information as + * part of onDownloadStart callback. + * @hide + */ +public abstract class BrowserDownloadListener implements DownloadListener { + + /** + * Notify the host application that a file should be downloaded + * @param url The full url to the content that should be downloaded + * @param userAgent the user agent to be used for the download. + * @param contentDisposition Content-disposition http header, if + * present. + * @param mimetype The mimetype of the content reported by the server + * @param referer The referer associated with this url + * @param contentLength The file size reported by the server + */ + public abstract void onDownloadStart(String url, String userAgent, + String contentDisposition, String mimetype, String referer, + long contentLength); + + + /** + * Notify the host application that a file should be downloaded + * @param url The full url to the content that should be downloaded + * @param userAgent the user agent to be used for the download. + * @param contentDisposition Content-disposition http header, if + * present. + * @param mimetype The mimetype of the content reported by the server + * @param contentLength The file size reported by the server + */ + @Override + public void onDownloadStart(String url, String userAgent, + String contentDisposition, String mimetype, long contentLength) { + + onDownloadStart(url, userAgent, contentDisposition, mimetype, null, + contentLength); + } +} diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java index fe812af3f451..1b23b189452a 100644 --- a/core/java/android/webkit/BrowserFrame.java +++ b/core/java/android/webkit/BrowserFrame.java @@ -1137,7 +1137,7 @@ class BrowserFrame extends Handler { * DownloadListener. */ private void downloadStart(String url, String userAgent, - String contentDisposition, String mimeType, long contentLength) { + String contentDisposition, String mimeType, String referer, long contentLength) { // This will only work if the url ends with the filename if (mimeType.isEmpty()) { try { @@ -1157,7 +1157,7 @@ class BrowserFrame extends Handler { mKeyStoreHandler = new KeyStoreHandler(mimeType); } else { mCallbackProxy.onDownloadStart(url, userAgent, - contentDisposition, mimeType, contentLength); + contentDisposition, mimeType, referer, contentLength); } } diff --git a/core/java/android/webkit/CallbackProxy.java b/core/java/android/webkit/CallbackProxy.java index 6b87ded3ce53..b47cba834467 100644 --- a/core/java/android/webkit/CallbackProxy.java +++ b/core/java/android/webkit/CallbackProxy.java @@ -452,10 +452,16 @@ class CallbackProxy extends Handler { String contentDisposition = msg.getData().getString("contentDisposition"); String mimetype = msg.getData().getString("mimetype"); + String referer = msg.getData().getString("referer"); Long contentLength = msg.getData().getLong("contentLength"); - mDownloadListener.onDownloadStart(url, userAgent, - contentDisposition, mimetype, contentLength); + if (mDownloadListener instanceof BrowserDownloadListener) { + ((BrowserDownloadListener) mDownloadListener).onDownloadStart(url, + userAgent, contentDisposition, mimetype, referer, contentLength); + } else { + mDownloadListener.onDownloadStart(url, userAgent, + contentDisposition, mimetype, contentLength); + } } break; @@ -1179,7 +1185,8 @@ class CallbackProxy extends Handler { * return false. */ public boolean onDownloadStart(String url, String userAgent, - String contentDisposition, String mimetype, long contentLength) { + String contentDisposition, String mimetype, String referer, + long contentLength) { // Do an unsynchronized quick check to avoid posting if no callback has // been set. if (mDownloadListener == null) { @@ -1192,6 +1199,7 @@ class CallbackProxy extends Handler { bundle.putString("url", url); bundle.putString("userAgent", userAgent); bundle.putString("mimetype", mimetype); + bundle.putString("referer", referer); bundle.putLong("contentLength", contentLength); bundle.putString("contentDisposition", contentDisposition); sendMessage(msg); |
