diff options
author | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-05 06:05:31 +0000 |
---|---|---|
committer | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-05 06:05:31 +0000 |
commit | c347c436757c3e37179854861107e1de9ee510a3 (patch) | |
tree | 9baca4c051d9f66355927066f4ceeb1cf8eceaba /android_webview/java | |
parent | c8a26f18938cc35ab25e9992c2b61326804af346 (diff) | |
download | chromium_src-c347c436757c3e37179854861107e1de9ee510a3.zip chromium_src-c347c436757c3e37179854861107e1de9ee510a3.tar.gz chromium_src-c347c436757c3e37179854861107e1de9ee510a3.tar.bz2 |
(Re)implement Android WebView downloads
Current plan for Android WebView downloads is to only support existing
DownloadListener API. This is a very simple API that cancels all
Chromium side downloads and passes the request information to the
listener.
This independence from Chrome on Android's more sophisticated
implementation (support Http POST downloads etc) will allow the Chrome
impelmentation to be refactored more cleanly.
BUG=
Android only change. Ran through Android trybots.
NOTRY=true
Review URL: https://chromiumcodereview.appspot.com/11418301
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@171180 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview/java')
3 files changed, 60 insertions, 1 deletions
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java index 4eb823d..19f3f52 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java @@ -101,6 +101,26 @@ public class AwContents { private CleanupReference mCleanupReference; + private static class DownloadInfo { + final String mUrl; + final String mUserAgent; + final String mContentDisposition; + final String mMimeType; + final long mContentLength; + + DownloadInfo(String url, + String userAgent, + String contentDisposition, + String mimeType, + long contentLength) { + mUrl = url; + mUserAgent = userAgent; + mContentDisposition = contentDisposition; + mMimeType = mimeType; + mContentLength = contentLength; + } + } + // This class is responsible for calling certain client callbacks on the UI thread. Most // callbacks do no go through here, but get forwarded to AwContentsClient directly. // The messages processed here may originate from the IO or UI thread. @@ -108,6 +128,7 @@ public class AwContents { private class ClientCallbackHandler extends Handler { public static final int MSG_ON_LOAD_RESOURCE = 1; public static final int MSG_ON_PAGE_STARTED = 2; + public static final int MSG_ON_DOWNLOAD_START = 3; @Override public void handleMessage(Message msg) { @@ -122,6 +143,15 @@ public class AwContents { AwContents.this.mContentsClient.onPageStarted(url); break; } + case MSG_ON_DOWNLOAD_START: { + DownloadInfo info = (DownloadInfo)msg.obj; + AwContents.this.mContentsClient.onDownloadStart(info.mUrl, + info.mUserAgent, + info.mContentDisposition, + info.mMimeType, + info.mContentLength); + break; + } default: throw new IllegalStateException( "IoThreadClientHandler: unhandled message " + msg.what); @@ -164,6 +194,23 @@ public class AwContents { public boolean shouldBlockNetworkLoads() { return AwContents.this.mSettings.getBlockNetworkLoads(); } + + @Override + public void onDownloadStart(String url, + String userAgent, + String contentDisposition, + String mimeType, + long contentLength) { + DownloadInfo info = new DownloadInfo(url, + userAgent, + contentDisposition, + mimeType, + contentLength); + mClientCallbackHandler.sendMessage( + mClientCallbackHandler.obtainMessage( + ClientCallbackHandler.MSG_ON_DOWNLOAD_START, + info)); + } } private class InterceptNavigationDelegateImpl implements InterceptNavigationDelegate { diff --git a/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java b/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java index 3da0d6f..b5f153b 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java @@ -203,10 +203,15 @@ public abstract class AwContentsClient extends ContentViewClient { public abstract void onFormResubmission(Message dontResend, Message resend); + // TODO(boliu): Make this abstract. + public void onDownloadStart(String url, String userAgent, String contentDisposition, + String mimeType, long contentLength) { + } + protected abstract void handleJsAlert(String url, String message, JsResultReceiver receiver); protected abstract void handleJsBeforeUnload(String url, String message, - JsResultReceiver receiver); + JsResultReceiver receiver); protected abstract void handleJsConfirm(String url, String message, JsResultReceiver receiver); diff --git a/android_webview/java/src/org/chromium/android_webview/AwContentsIoThreadClient.java b/android_webview/java/src/org/chromium/android_webview/AwContentsIoThreadClient.java index 284f0fc..bdbc1b2 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContentsIoThreadClient.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContentsIoThreadClient.java @@ -29,4 +29,11 @@ public interface AwContentsIoThreadClient { @CalledByNative public boolean shouldBlockNetworkLoads(); + + @CalledByNative + public void onDownloadStart(String url, + String userAgent, + String contentDisposition, + String mimeType, + long contentLength); } |