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);
