From 5762b36cd0b80d69b3ded5cbe1a70a326369569f Mon Sep 17 00:00:00 2001 From: Pankaj Garg Date: Mon, 2 Nov 2015 07:57:06 -0800 Subject: Provide authorization value to the download manager - Provides the authorization code to the download manager while downloading a file. CR-Fixed: SWE-6011 Change-Id: Id99349169c138d714b26340b3baa6c9b664ea33c Conflicts: src/com/android/browser/DownloadHandler.java --- src/com/android/browser/Controller.java | 9 +++++---- src/com/android/browser/DownloadHandler.java | 27 ++++++++++++++++++-------- src/com/android/browser/DownloadSettings.java | 4 +++- src/com/android/browser/FetchUrlMimeType.java | 6 ++++-- src/com/android/browser/PreloadController.java | 2 +- src/com/android/browser/Tab.java | 8 ++++---- src/com/android/browser/WebViewController.java | 2 +- 7 files changed, 37 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java index 4c059067..4d75a5ff 100644 --- a/src/com/android/browser/Controller.java +++ b/src/com/android/browser/Controller.java @@ -594,7 +594,7 @@ public class Controller case R.id.download_context_menu_id: DownloadHandler.onDownloadStartNoStream( mActivity, url, view.getSettings().getUserAgentString(), - null, null, null, view.isPrivateBrowsingEnabled(), 0); + null, null, null, null, view.isPrivateBrowsingEnabled(), 0); break; case R.id.save_link_bookmark_context_menu_id: if(title == null || title == "") @@ -1229,12 +1229,13 @@ public class Controller @Override public void onDownloadStart(Tab tab, String url, String userAgent, - String contentDisposition, String mimetype, String referer, + String contentDisposition, String mimetype, String referer, String auth, long contentLength) { WebView w = tab.getWebView(); if ( w == null) return; boolean ret = DownloadHandler.onDownloadStart(mActivity, url, userAgent, - contentDisposition, mimetype, referer, w.isPrivateBrowsingEnabled(), contentLength); + contentDisposition, mimetype, referer, auth, + w.isPrivateBrowsingEnabled(), contentLength); if (ret == false && w.copyBackForwardList().getSize() == 0) { // This Tab was opened for the sole purpose of downloading a // file. Remove it. @@ -2719,7 +2720,7 @@ public class Controller saveDataUri(); } else { DownloadHandler.onDownloadStartNoStream(mActivity, mText, mUserAgent, - null, null, null, mPrivateBrowsing, 0); + null, null, null, null, mPrivateBrowsing, 0); } return true; } diff --git a/src/com/android/browser/DownloadHandler.java b/src/com/android/browser/DownloadHandler.java index 0148fda4..3562f809 100644 --- a/src/com/android/browser/DownloadHandler.java +++ b/src/com/android/browser/DownloadHandler.java @@ -32,8 +32,11 @@ import android.os.Bundle; import android.os.Environment; import android.os.StatFs; import android.os.storage.StorageManager; +import android.text.TextUtils; import android.util.Log; import org.codeaurora.swe.CookieManager; +import org.w3c.dom.Text; + import android.webkit.URLUtil; import android.widget.Toast; @@ -61,7 +64,8 @@ public class DownloadHandler { public static void startingDownload(Activity activity, String url, String userAgent, String contentDisposition, - String mimetype, String referer, boolean privateBrowsing, long contentLength, + String mimetype, String referer, String auth, + boolean privateBrowsing, long contentLength, String filename, String downloadPath) { // java.net.URI is a lot stricter than KURL so we have to encode some // extra characters. Fix for b 2538060 and b 1634719 @@ -107,6 +111,9 @@ public class DownloadHandler { request.addRequestHeader("User-Agent", userAgent); request.addRequestHeader("Referer", referer); request.setVisibleInDownloadsUi(!privateBrowsing); + if (!TextUtils.isEmpty(auth)) { + request.addRequestHeader("Authorization", auth); + } request.setNotificationVisibility( DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); final DownloadManager manager = (DownloadManager) activity @@ -152,7 +159,8 @@ public class DownloadHandler { */ public static boolean onDownloadStart(final Activity activity, final String url, final String userAgent, final String contentDisposition, final String mimetype, - final String referer, final boolean privateBrowsing, final long contentLength) { + final String referer, final String auth, final boolean privateBrowsing, + final long contentLength) { // if we're dealing wih A/V content that's not explicitly marked // for download, check if it's streamable. if (contentDisposition == null @@ -184,7 +192,7 @@ public class DownloadHandler { .setPositiveButton(R.string.video_save, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { onDownloadStartNoStream(activity, url, userAgent, contentDisposition, - mimetype, referer, privateBrowsing, contentLength); + mimetype, referer, auth, privateBrowsing, contentLength); } }) .setNegativeButton(R.string.video_play, new DialogInterface.OnClickListener() { @@ -237,7 +245,7 @@ public class DownloadHandler { } } onDownloadStartNoStream(activity, url, userAgent, contentDisposition, - mimetype, referer, privateBrowsing, contentLength); + mimetype, referer, auth, privateBrowsing, contentLength); return false; } @@ -284,7 +292,8 @@ public class DownloadHandler { */ /* package */static void onDownloadStartNoStream(Activity activity, String url, String userAgent, String contentDisposition, - String mimetype, String referer, boolean privateBrowsing, long contentLength) { + String mimetype, String referer, String auth, + boolean privateBrowsing, long contentLength) { contentDisposition = trimContentDisposition(contentDisposition); @@ -318,12 +327,12 @@ public class DownloadHandler { if (mimetype == null) { // We must have long pressed on a link or image to download it. We // are not sure of the mimetype in this case, so do a head request - new FetchUrlMimeType(activity, url, userAgent, referer, + new FetchUrlMimeType(activity, url, userAgent, referer, auth, privateBrowsing, filename).start(); } else { if (DownloadDirRestriction.getInstance().downloadsAllowed()) { startDownloadSettings(activity, url, userAgent, contentDisposition, mimetype, referer, - privateBrowsing, contentLength, filename); + auth, privateBrowsing, contentLength, filename); } else { Toast.makeText(activity, R.string.managed_by_your_administrator, Toast.LENGTH_SHORT) @@ -365,7 +374,8 @@ public class DownloadHandler { public static void startDownloadSettings(Activity activity, String url, String userAgent, String contentDisposition, - String mimetype, String referer, boolean privateBrowsing, long contentLength, + String mimetype, String referer, String auth, + boolean privateBrowsing, long contentLength, String filename) { Bundle fileInfo = new Bundle(); fileInfo.putString("url", url); @@ -373,6 +383,7 @@ public class DownloadHandler { fileInfo.putString("contentDisposition", contentDisposition); fileInfo.putString("mimetype", mimetype); fileInfo.putString("referer", referer); + fileInfo.putString("authorization", auth); fileInfo.putLong("contentLength", contentLength); fileInfo.putBoolean("privateBrowsing", privateBrowsing); fileInfo.putString("filename", filename); diff --git a/src/com/android/browser/DownloadSettings.java b/src/com/android/browser/DownloadSettings.java index 7f1150a8..d84d3b79 100644 --- a/src/com/android/browser/DownloadSettings.java +++ b/src/com/android/browser/DownloadSettings.java @@ -67,6 +67,7 @@ public class DownloadSettings extends Activity { private String contentDisposition; private String mimetype; private String referer; + private String authorization; private String filenameBase; private String filename; private String filenameExtension; @@ -107,6 +108,7 @@ public class DownloadSettings extends Activity { contentDisposition = fileInfo.getString("contentDisposition"); mimetype = fileInfo.getString("mimetype"); referer = fileInfo.getString("referer"); + authorization = fileInfo.getString("authorization"); contentLength = fileInfo.getLong("contentLength"); privateBrowsing = fileInfo.getBoolean("privateBrowsing"); filename = fileInfo.getString("filename"); @@ -242,7 +244,7 @@ public class DownloadSettings extends Activity { // staring downloading DownloadHandler.startingDownload(DownloadSettings.this, url, userAgent, contentDisposition, - mimetype, referer, privateBrowsing, contentLength, + mimetype, referer, authorization, privateBrowsing, contentLength, Uri.encode(filename), downloadPath); isDownloadStarted = true; } diff --git a/src/com/android/browser/FetchUrlMimeType.java b/src/com/android/browser/FetchUrlMimeType.java index 56ea4c30..e5abebbc 100644 --- a/src/com/android/browser/FetchUrlMimeType.java +++ b/src/com/android/browser/FetchUrlMimeType.java @@ -57,12 +57,13 @@ class FetchUrlMimeType extends Thread { private String mUserAgent; private String mFilename; private String mReferer; + private String mAuth; private Activity mActivity; private boolean mPrivateBrowsing; private long mContentLength; public FetchUrlMimeType(Activity activity, String url, String userAgent, - String referer, boolean privateBrowsing, String filename) { + String referer, String auth, boolean privateBrowsing, String filename) { mActivity = activity; mContext = activity.getApplicationContext(); mUri = url; @@ -70,6 +71,7 @@ class FetchUrlMimeType extends Thread { mPrivateBrowsing = privateBrowsing; mFilename = filename; mReferer = referer; + mAuth = auth; } @Override @@ -185,7 +187,7 @@ class FetchUrlMimeType extends Thread { } DownloadHandler.startDownloadSettings(mActivity, mUri, mUserAgent, contentDisposition, - mimeType, mReferer, mPrivateBrowsing, mContentLength, filename); + mimeType, mReferer, mAuth, mPrivateBrowsing, mContentLength, filename); } /** diff --git a/src/com/android/browser/PreloadController.java b/src/com/android/browser/PreloadController.java index a307e7bd..a9a7786f 100644 --- a/src/com/android/browser/PreloadController.java +++ b/src/com/android/browser/PreloadController.java @@ -151,7 +151,7 @@ public class PreloadController implements WebViewController { @Override public void onDownloadStart(Tab tab, String url, String useragent, String contentDisposition, String mimeType, - String referer, long contentLength) { + String referer, String auth, long contentLength) { if (LOGD_ENABLED) Log.d(LOGTAG, "onDownloadStart()"); } diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java index 7fafa03d..f5f72e7e 100644 --- a/src/com/android/browser/Tab.java +++ b/src/com/android/browser/Tab.java @@ -1188,10 +1188,10 @@ class Tab implements PictureListener { mDownloadListener = new BrowserDownloadListener() { public void onDownloadStart(String url, String userAgent, - String contentDisposition, String mimetype, String referer, + String contentDisposition, String mimetype, String referer, String auth, long contentLength) { mWebViewController.onDownloadStart(Tab.this, url, userAgent, contentDisposition, - mimetype, referer, contentLength); + mimetype, referer, auth, contentLength); } }; @@ -1433,10 +1433,10 @@ class Tab implements PictureListener { // just need to dismiss the mSubView, rather than close the Tab mSubView.setDownloadListener(new BrowserDownloadListener() { public void onDownloadStart(String url, String userAgent, - String contentDisposition, String mimetype, String referer, + String contentDisposition, String mimetype, String referer, String auth, long contentLength) { mWebViewController.onDownloadStart(Tab.this, url, userAgent, - contentDisposition, mimetype, referer, contentLength); + contentDisposition, mimetype, referer, auth, contentLength); if (mSubView.copyBackForwardList().getSize() == 0) { // This subwindow was opened for the sole purpose of // downloading a file. Remove it. diff --git a/src/com/android/browser/WebViewController.java b/src/com/android/browser/WebViewController.java index 6bf2f69b..c0ef23bb 100644 --- a/src/com/android/browser/WebViewController.java +++ b/src/com/android/browser/WebViewController.java @@ -71,7 +71,7 @@ public interface WebViewController { final String host, final String realm); void onDownloadStart(Tab tab, String url, String useragent, String contentDisposition, - String mimeType, String referer, long contentLength); + String mimeType, String referer, String auth, long contentLength); void showCustomView(Tab tab, View view, int requestedOrientation, CustomViewCallback callback); -- cgit v1.2.3