- added hooks needed to implement showModalDialog on Windows
* Interfaces/IWebUIDelegate.idl: Added canRunModal, createModalDialog,
and runModal functions to the end of IWebUIDelegate3.
* WebChromeClient.h: Added uiDelegate and uiDelegate2 helper functions,
so it's easier to write client functions.
* WebChromeClient.cpp:
(WebChromeClient::createWindow): Implemented dialog case. Calls IWebUIDelegate3.
(WebChromeClient::canRunModal): Implemented. Calls IWebUIDelegate3.
(WebChromeClient::runModal): Ditto.
(WebChromeClient::uiDelegate): Added.
(WebChromeClient::uiDelegate2): Added.
(WebChromeClient::uiDelegate3): Added.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@27481
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2007-11-06 Darin Adler <darin@apple.com>
+
+ Reviewed by Adam and Steve.
+
+ - added hooks needed to implement showModalDialog on Windows
+
+ * Interfaces/IWebUIDelegate.idl: Added canRunModal, createModalDialog,
+ and runModal functions to the end of IWebUIDelegate3.
+
+ * WebChromeClient.h: Added uiDelegate and uiDelegate2 helper functions,
+ so it's easier to write client functions.
+ * WebChromeClient.cpp:
+ (WebChromeClient::createWindow): Implemented dialog case. Calls IWebUIDelegate3.
+ (WebChromeClient::canRunModal): Implemented. Calls IWebUIDelegate3.
+ (WebChromeClient::runModal): Ditto.
+ (WebChromeClient::uiDelegate): Added.
+ (WebChromeClient::uiDelegate2): Added.
+ (WebChromeClient::uiDelegate3): Added.
+
2007-11-06 Alexey Proskuryakov <ap@webkit.org>
Rubber-stamped by Adam Roben.
HRESULT webViewPrintingMarginRect([in] IWebView* webView, [out, retval] RECT* rect);
}
+
+/*!
+ @category WebUIDelegate3
+ @discussion A class that supplements the IWebUIDelegate interface
+*/
+[
+ object,
+ oleautomation,
+ uuid(DD544D90-C233-4562-8EFD-A8D3A0DEBC19),
+ pointer_default(unique)
+]
+interface IWebUIDelegate3 : IWebUIDelegate2
+{
+ HRESULT canRunModal([in] IWebView* webView, [out, retval] BOOL* canRunBoolean);
+ HRESULT createModalDialog([in] IWebView* sender, [in] IWebURLRequest* request, [out, retval] IWebView** newWebView);
+ HRESULT runModal([in] IWebView* webView);
+}
Page* WebChromeClient::createWindow(Frame*, const FrameLoadRequest& frameLoadRequest, const WindowFeatures& features)
{
+ if (features.dialog) {
+ COMPtr<IWebUIDelegate3> delegate = uiDelegate3();
+ 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))) {
- if (features.dialog) {
- notImplemented();
- } else {
- IWebView* webView = 0;
- if (SUCCEEDED(uiDelegate->createWebViewWithRequest(m_webView, request, &webView))) {
- page = core(webView);
- webView->Release();
- }
+ IWebView* webView = 0;
+ if (SUCCEEDED(uiDelegate->createWebViewWithRequest(m_webView, request, &webView))) {
+ page = core(webView);
+ webView->Release();
}
uiDelegate->Release();
bool WebChromeClient::canRunModal()
{
- bool result = false;
- IWebUIDelegate* uiDelegate = 0;
- if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) {
- notImplemented();
- uiDelegate->Release();
- }
+ BOOL result = FALSE;
+ if (COMPtr<IWebUIDelegate3> delegate = uiDelegate3())
+ delegate->canRunModal(m_webView, &result);
return result;
}
void WebChromeClient::runModal()
{
- IWebUIDelegate* uiDelegate = 0;
- if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) {
- notImplemented();
- uiDelegate->Release();
- }
+ if (COMPtr<IWebUIDelegate3> delegate = uiDelegate3())
+ delegate->runModal(m_webView);
}
void WebChromeClient::setToolbarsVisible(bool visible)
notImplemented();
return false;
}
+
+COMPtr<IWebUIDelegate> WebChromeClient::uiDelegate()
+{
+ COMPtr<IWebUIDelegate> delegate;
+ m_webView->uiDelegate(&delegate);
+ return delegate;
+}
+
+COMPtr<IWebUIDelegate2> WebChromeClient::uiDelegate2()
+{
+ return COMPtr<IWebUIDelegate2>(Query, uiDelegate());
+}
+
+COMPtr<IWebUIDelegate3> WebChromeClient::uiDelegate3()
+{
+ return COMPtr<IWebUIDelegate3>(Query, uiDelegate());
+}
*/
#include <WebCore/ChromeClient.h>
+#include <WebCore/COMPtr.h>
#include <WebCore/FocusDirection.h>
#include <wtf/Forward.h>
class WebView;
+interface IWebUIDelegate;
+interface IWebUIDelegate2;
+interface IWebUIDelegate3;
+
class WebChromeClient : public WebCore::ChromeClient {
public:
WebChromeClient(WebView*);
virtual void print(WebCore::Frame*);
virtual bool runDatabaseSizeLimitPrompt(WebCore::Frame*, const WebCore::String& origin);
+
private:
+ COMPtr<IWebUIDelegate> uiDelegate();
+ COMPtr<IWebUIDelegate2> uiDelegate2();
+ COMPtr<IWebUIDelegate3> uiDelegate3();
+
WebView* m_webView;
};