Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a36dcfdf authored by Selim Gurun's avatar Selim Gurun
Browse files

Provide referer to browser on download request.

Bug: 6662557

Provide a private API to provide referer to browser for download
requests.

Change-Id: I6ff393caa43e16db12fb5dab38f1f26cd76bf232
parent 70574efd
Loading
Loading
Loading
Loading
+57 −0
Original line number Diff line number Diff line
/*
 * 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);
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -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);
        }
    }

+11 −3
Original line number Diff line number Diff line
@@ -452,11 +452,17 @@ 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");

                    if (mDownloadListener instanceof BrowserDownloadListener) {
                        ((BrowserDownloadListener) mDownloadListener).onDownloadStart(url,
                             userAgent, contentDisposition, mimetype, referer, contentLength);
                    } else {
                        mDownloadListener.onDownloadStart(url, userAgent,
                             contentDisposition, mimetype, contentLength);
                    }
                }
                break;

            case CREATE_WINDOW:
@@ -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);