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
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 4c05906..4d75a5f 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -594,7 +594,7 @@
                             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 @@
 
     @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 @@
                 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 0148fda..3562f80 100644
--- a/src/com/android/browser/DownloadHandler.java
+++ b/src/com/android/browser/DownloadHandler.java
@@ -32,8 +32,11 @@
 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 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 @@
         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 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 @@
                 .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 @@
             }
         }
         onDownloadStartNoStream(activity, url, userAgent, contentDisposition,
-                mimetype, referer, privateBrowsing, contentLength);
+                mimetype, referer, auth, privateBrowsing, contentLength);
         return false;
     }
 
@@ -284,7 +292,8 @@
      */
     /* 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 @@
         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 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 @@
         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 7f1150a..d84d3b7 100644
--- a/src/com/android/browser/DownloadSettings.java
+++ b/src/com/android/browser/DownloadSettings.java
@@ -67,6 +67,7 @@
     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 @@
         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 @@
             // 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 56ea4c3..e5abebb 100644
--- a/src/com/android/browser/FetchUrlMimeType.java
+++ b/src/com/android/browser/FetchUrlMimeType.java
@@ -57,12 +57,13 @@
     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 @@
         mPrivateBrowsing = privateBrowsing;
         mFilename = filename;
         mReferer = referer;
+        mAuth = auth;
     }
 
     @Override
@@ -185,7 +187,7 @@
         }
 
         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 a307e7b..a9a7786 100644
--- a/src/com/android/browser/PreloadController.java
+++ b/src/com/android/browser/PreloadController.java
@@ -151,7 +151,7 @@
     @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 7fafa03..f5f72e7 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -1188,10 +1188,10 @@
 
         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 @@
             // 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 6bf2f69..c0ef23b 100644
--- a/src/com/android/browser/WebViewController.java
+++ b/src/com/android/browser/WebViewController.java
@@ -71,7 +71,7 @@
             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);