// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.android_webview.test.util;

import org.chromium.content.browser.ContentViewCore;

/**
 * This class is used to be notified when a javascript event happened. It add itself as
 * a javascript interface, so it could be notified by javascript when needed.
 *
 * 1. Call register() is to add a javascript interface into ContentViewCore.
 * 2. Using waitForEnvent() to wait javascript event.
 * 3. In javascript call notifyJava() when you want Java side know something is done.
 */
public class JavascriptEventObserver {
    private Object mEvent = new Object();
    private boolean mHappened;

    /**
     * Register into javascript, must be called in UI thread.
     *
     * @param contentViewCore
     * @param name the name of object used in javascript
     */
    public void register(ContentViewCore contentViewCore, String name) {
        contentViewCore.addPossiblyUnsafeJavascriptInterface(this, name, null);
    }

    /**
     * Wait for the javascript event happen for specific time, there is no timeout parameter,
     * return true if the event happened.
     */
    public boolean waitForEvent(long time) throws InterruptedException {
        synchronized (mEvent) {
            if (mHappened) return mHappened;
            mEvent.wait(time);
            boolean happened = mHappened;
            mHappened = false;
            return happened;
        }
    }

    /**
     * Wait for the javascript event happen, there is no timeout parameter, you usually
     * should depend on unit test's timeout.
     */
    public void waitForEvent() throws InterruptedException {
        synchronized (mEvent) {
            if (mHappened) return;
            while (!mHappened) {
                mEvent.wait();
            }
            mHappened = false;
        }
    }

    /**
     * Javascript should call this method by name.notifyJava, the name is the |name|
     * parameter of register() method.
     */
    public void notifyJava() {
        synchronized (mEvent) {
            mHappened = true;
            mEvent.notify();
        }
    }
}
