Page* WebChromeClient::createWindow(Frame*, const FrameLoadRequest& frameLoadRequest, const WindowFeatures& features) { if (features.dialog) { COMPtr<IWebUIDelegate> delegate = uiDelegate(); if (!delegate) return 0; COMPtr<IWebMutableURLRequest> request(AdoptCOM, WebMutableURLRequest::createInstance(frameLoadRequest.resourceRequest())); COMPtr<IWebView> dialog; if (FAILED(delegate->createModalDialog(m_webView, request.get(), &dialog))) return 0; return core(dialog.get()); } Page* page = 0; IWebUIDelegate* uiDelegate = 0; IWebMutableURLRequest* request = WebMutableURLRequest::createInstance(frameLoadRequest.resourceRequest()); if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) { IWebView* webView = 0; if (SUCCEEDED(uiDelegate->createWebViewWithRequest(m_webView, request, &webView))) { page = core(webView); webView->Release(); } uiDelegate->Release(); } request->Release(); return page; }
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; }
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; }