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

Commit 46507f4b authored by Jonathan Dixon's avatar Jonathan Dixon Committed by Android (Google) Code Review
Browse files

Merge "Decouple construction of WebView, CookieSyncManager, WebViewDatabase" into klp-dev

parents b77b7bab eb9e8014
Loading
Loading
Loading
Loading
+20 −11
Original line number Diff line number Diff line
@@ -59,8 +59,10 @@ public final class CookieSyncManager extends WebSyncManager {

    private static CookieSyncManager sRef;

    private CookieSyncManager(Context context) {
        super(context, "CookieSyncManager");
    private static boolean sGetInstanceAllowed = false;

    private CookieSyncManager() {
        super("CookieSyncManager");
    }

    /**
@@ -71,7 +73,10 @@ public final class CookieSyncManager extends WebSyncManager {
     * @return CookieSyncManager
     */
    public static synchronized CookieSyncManager getInstance() {
        checkInstanceIsCreated();
        checkInstanceIsAllowed();
        if (sRef == null) {
            sRef = new CookieSyncManager();
        }
        return sRef;
    }

@@ -80,16 +85,13 @@ public final class CookieSyncManager extends WebSyncManager {
     * @param context
     * @return CookieSyncManager
     */
    public static synchronized CookieSyncManager createInstance(
            Context context) {
    public static synchronized CookieSyncManager createInstance(Context context) {
        if (context == null) {
            throw new IllegalArgumentException("Invalid context argument");
        }

        if (sRef == null) {
            sRef = new CookieSyncManager(context);
        }
        return sRef;
        setGetInstanceIsAllowed();
        return getInstance();
    }

    protected void syncFromRamToFlash() {
@@ -110,8 +112,15 @@ public final class CookieSyncManager extends WebSyncManager {
        }
    }

    private static void checkInstanceIsCreated() {
        if (sRef == null) {
    static void setGetInstanceIsAllowed() {
        sGetInstanceAllowed = true;
    }

    private static void checkInstanceIsAllowed() {
        // Prior to Android KK, calling createInstance() or constructing a WebView is
        // a hard pre-condition for calling getInstance(). We retain that contract to aid
        // developers targeting a range of SDK levels.
        if (!sGetInstanceAllowed) {
            throw new IllegalStateException(
                    "CookieSyncManager::createInstance() needs to be called "
                            + "before CookieSyncManager::getInstance()");
+10 −11
Original line number Diff line number Diff line
@@ -36,7 +36,7 @@ abstract class WebSyncManager implements Runnable {
    private String mThreadName;
    // handler of the sync thread
    protected Handler mHandler;
    // database for the persistent storage
    // database for the persistent storage. Always null.
    protected WebViewDatabase mDataBase;
    // Ref count for calls to start/stop sync
    private int mStartSyncRefCount;
@@ -60,16 +60,15 @@ abstract class WebSyncManager implements Runnable {
    }

    protected WebSyncManager(Context context, String name) {
        this(name);
    }

    /** @hide */
    WebSyncManager(String name) {
        mThreadName = name;
        if (context != null) {
            mDataBase = WebViewDatabase.getInstance(context);
        mSyncThread = new Thread(this);
        mSyncThread.setName(mThreadName);
        mSyncThread.start();
        } else {
            throw new IllegalStateException(
                    "WebSyncManager can't be created without context");
        }
    }

    protected Object clone() throws CloneNotSupportedException {
+2 −2
Original line number Diff line number Diff line
@@ -506,8 +506,8 @@ public class WebView extends AbsoluteLayout

        ensureProviderCreated();
        mProvider.init(javaScriptInterfaces, privateBrowsing);
        // Post condition of creating a webview is the CookieSyncManager instance exists.
        CookieSyncManager.createInstance(getContext());
        // Post condition of creating a webview is the CookieSyncManager.getInstance() is allowed.
        CookieSyncManager.setGetInstanceIsAllowed();
    }

    /**