public WebView createWindow(boolean dialog, boolean userGesture) {
    // Do an unsynchronized quick check to avoid posting if no callback has
    // been set.
    if (mWebChromeClient == null) {
      return null;
    }

    WebView.WebViewTransport transport = mWebView.new WebViewTransport();
    final Message msg = obtainMessage(NOTIFY);
    msg.obj = transport;
    synchronized (this) {
      sendMessage(obtainMessage(CREATE_WINDOW, dialog ? 1 : 0, userGesture ? 1 : 0, msg));
      try {
        wait();
      } catch (InterruptedException e) {
        Log.e(LOGTAG, "Caught exception while waiting for createWindow");
        Log.e(LOGTAG, Log.getStackTraceString(e));
      }
    }

    WebView w = transport.getWebView();
    if (w != null) {
      w.getWebViewCore().initializeSubwindow();
    }
    return w;
  }
 /**
  * Request a new window from the client.
  *
  * @return The BrowserFrame object stored in the new WebView.
  */
 private BrowserFrame createWindow(boolean dialog, boolean userGesture) {
   WebView w = mCallbackProxy.createWindow(dialog, userGesture);
   if (w != null) {
     return w.getWebViewCore().getBrowserFrame();
   }
   return null;
 }