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

Commit 85173055 authored by Kristian Monsen's avatar Kristian Monsen
Browse files

Make CookieManager.removeSessionCookies async

Webkit loadurl() will wait on the webcore thread until oustanding
cookie operations complete.

Change-Id: I067408fdb9acd2e2d1f1f21eef910d0b26304332
parent 5c1619ff
Loading
Loading
Loading
Loading
+30 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.webkit;
import android.net.ParseException;
import android.net.WebAddress;
import android.net.http.AndroidHttpClient;
import android.os.AsyncTask;
import android.util.Log;


@@ -102,6 +103,8 @@ public final class CookieManager {
    // http:/b/3118772
    private static Boolean sUseChromiumHttpStack;

    private int pendingCookieOperations = 0;

    /**
     * This contains a list of 2nd-level domains that aren't allowed to have
     * wildcards when combined with country-codes. For example: [.co.uk].
@@ -523,12 +526,37 @@ public final class CookieManager {
        }
    }

    synchronized void waitForCookieOperationsToComplete() {
        while (pendingCookieOperations > 0) {
            try {
                wait();
            } catch (InterruptedException e) { }
        }
    }

    private synchronized void signalCookieOperationsComplete() {
        pendingCookieOperations--;
        assert pendingCookieOperations > -1;
        notify();
    }

    private synchronized void signalCookieOperationsStart() {
        pendingCookieOperations++;
    }

    /**
     * Remove all session cookies, which are cookies without expiration date
     */
    public void removeSessionCookie() {
        signalCookieOperationsStart();
        if (useChromiumHttpStack()) {
            new AsyncTask<Void, Void, Void>() {
                protected Void doInBackground(Void... none) {
                    nativeRemoveSessionCookie();
                    signalCookieOperationsComplete();
                    return null;
                }
            }.execute();
            return;
        }

@@ -548,6 +576,7 @@ public final class CookieManager {
                        }
                    }
                    CookieSyncManager.getInstance().clearSessionCookies();
                    signalCookieOperationsComplete();
                }
            }
        };
+3 −0
Original line number Diff line number Diff line
@@ -1056,17 +1056,20 @@ final class WebViewCore {
                            break;

                        case LOAD_URL: {
                            CookieManager.getInstance().waitForCookieOperationsToComplete();
                            GetUrlData param = (GetUrlData) msg.obj;
                            loadUrl(param.mUrl, param.mExtraHeaders);
                            break;
                        }

                        case POST_URL: {
                            CookieManager.getInstance().waitForCookieOperationsToComplete();
                            PostUrlData param = (PostUrlData) msg.obj;
                            mBrowserFrame.postUrl(param.mUrl, param.mPostData);
                            break;
                        }
                        case LOAD_DATA:
                            CookieManager.getInstance().waitForCookieOperationsToComplete();
                            BaseUrlData loadParams = (BaseUrlData) msg.obj;
                            String baseUrl = loadParams.mBaseUrl;
                            if (baseUrl != null) {