Page* WebChromeClient::createWindow(Frame*, const FrameLoadRequest& frameLoadRequest, const WindowFeatures& features, const NavigationAction&) { COMPtr<IWebUIDelegate> delegate = uiDelegate(); if (!delegate) return 0; COMPtr<IWebMutableURLRequest> request(AdoptCOM, WebMutableURLRequest::createInstance(frameLoadRequest.resourceRequest())); COMPtr<IWebUIDelegatePrivate2> delegatePrivate(Query, delegate); if (delegatePrivate) { COMPtr<IWebView> newWebView; HRESULT hr = delegatePrivate->createWebViewWithRequest(m_webView, request.get(), createWindowFeaturesPropertyBag(features).get(), &newWebView); if (SUCCEEDED(hr) && newWebView) return core(newWebView.get()); // If the delegate doesn't implement the IWebUIDelegatePrivate2 version of the call, fall back // to the old versions (even if they support the IWebUIDelegatePrivate2 interface). if (hr != E_NOTIMPL) return 0; } COMPtr<IWebView> newWebView; if (features.dialog) { if (FAILED(delegate->createModalDialog(m_webView, request.get(), &newWebView))) return 0; } else if (FAILED(delegate->createWebViewWithRequest(m_webView, request.get(), &newWebView))) return 0; return newWebView ? core(newWebView.get()) : 0; }
Frame* WebFrameLoaderClient::dispatchCreatePage() { WebView* webView = m_webFrame->webView(); COMPtr<IWebUIDelegate> ui; if (FAILED(webView->uiDelegate(&ui))) return 0; COMPtr<IWebView> newWebView; if (FAILED(ui->createWebViewWithRequest(webView, 0, &newWebView))) return 0; COMPtr<IWebFrame> mainFrame; if (FAILED(newWebView->mainFrame(&mainFrame))) return 0; COMPtr<WebFrame> mainFrameImpl(Query, mainFrame); return core(mainFrameImpl.get()); }
Frame* WebFrameLoaderClient::dispatchCreatePage(const NavigationAction& navigationAction) { WebView* webView = m_webFrame->webView(); COMPtr<IWebUIDelegate> ui; if (FAILED(webView->uiDelegate(&ui))) return 0; COMPtr<IWebView> newWebView; COMPtr<WebMutableURLRequest> request = adoptCOM(WebMutableURLRequest::createInstance(ResourceRequest(navigationAction.url()))); if (FAILED(ui->createWebViewWithRequest(webView, request.get(), &newWebView)) || !newWebView) return 0; COMPtr<IWebFrame> mainFrame; if (FAILED(newWebView->mainFrame(&mainFrame))) return 0; COMPtr<WebFrame> mainFrameImpl(Query, mainFrame); return core(mainFrameImpl.get()); }
Page* WebChromeClient::createWindow(Frame* frame, const FrameLoadRequest&, const WindowFeatures& features, const NavigationAction& navigationAction) { COMPtr<IWebUIDelegate> delegate = uiDelegate(); if (!delegate) return 0; #if ENABLE(FULLSCREEN_API) if (frame->document() && frame->document()->webkitCurrentFullScreenElement()) frame->document()->webkitCancelFullScreen(); #endif COMPtr<WebMutableURLRequest> request = adoptCOM(WebMutableURLRequest::createInstance(ResourceRequest(navigationAction.url()))); COMPtr<IWebUIDelegatePrivate2> delegatePrivate(Query, delegate); if (delegatePrivate) { COMPtr<IWebView> newWebView; HRESULT hr = delegatePrivate->createWebViewWithRequest(m_webView, request.get(), createWindowFeaturesPropertyBag(features).get(), &newWebView); if (SUCCEEDED(hr) && newWebView) return core(newWebView.get()); // If the delegate doesn't implement the IWebUIDelegatePrivate2 version of the call, fall back // to the old versions (even if they support the IWebUIDelegatePrivate2 interface). if (hr != E_NOTIMPL) return 0; } COMPtr<IWebView> newWebView; if (features.dialog) { if (FAILED(delegate->createModalDialog(m_webView, request.get(), &newWebView))) return 0; } else if (FAILED(delegate->createWebViewWithRequest(m_webView, request.get(), &newWebView))) return 0; return newWebView ? core(newWebView.get()) : 0; }