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; }