Reviewed by Darin Adler.
* WebCoreSupport/ChromeClientQt.cpp:
(WebCore::ChromeClientQt::createWindow):
* WebCoreSupport/ChromeClientQt.h:
Revised to use new WebCore ChromeClient createWindow API.
WebCore:
Reviewed by Darin Adler.
* WebCore.xcodeproj/project.pbxproj:
Set WindowFeatures.h as a Private header.
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::createWindow):
Revised to use a single createWindow function instead of
two createWindow functions and one createModalDialog function.
The logic for this is now addressed in WebKit in an effort
to make this easier to follow.
* page/Chrome.cpp:
(WebCore::Chrome::createWindow):
* page/Chrome.h:
* page/ChromeClient.h:
* page/ContextMenuController.cpp:
(WebCore::openNewWindow):
* platform/graphics/svg/SVGImageEmptyClients.h:
(WebCore::SVGEmptyChromeClient::createWindow):
Revised to take new additional windowFeatures parameter.
WebKit:
Reviewed by Darin Adler.
* DefaultDelegates/WebDefaultUIDelegate.m:
(-[WebDefaultUIDelegate webView:createWebViewWithRequest:windowFeatures:]):
Forward the UI delegate to call webView:createWebViewWithRequest: if
this method doesn't exist.
* WebCoreSupport/WebFrameLoaderClient.mm:
(WebFrameLoaderClient::dispatchCreatePage):
* Plugins/WebBaseNetscapePluginView.mm:
(-[WebBaseNetscapePluginView loadPluginRequest:]):
* WebView/WebView.mm:
(-[WebView _openNewWindowWithRequest:]):
Revised to use new webView:createWebViewWithRequest:windowFeatures: callback.
* WebCoreSupport/WebChromeClient.h:
* WebCoreSupport/WebChromeClient.mm:
(WebChromeClient::createWindow):
Added a new createWindow that accepts 3 parameters, so we can pass up windowFeatures to the chrome.
Removed createModalDialog to use new createWindow function.
* WebView/WebUIDelegatePrivate.h:
Added new webView:createWebViewWithRequest:windowFeatures: method.
win:
Reviewed by Darin Adler.
Part of the WebKit/WebCore API changes for
<rdar://problem/
5368188>
* WebChromeClient.cpp:
(WebChromeClient::createWindow):
Removed usage of createModalDialog and revised to use new createWindow
ChromeClient API.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@27452
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2007-11-02 Tristan O'Tierney <tristan@apple.com>
+
+ Reviewed by Darin Adler.
+
+ * WebCore.xcodeproj/project.pbxproj:
+ Set WindowFeatures.h as a Private header.
+
+ * loader/FrameLoader.cpp:
+ (WebCore::FrameLoader::createWindow):
+ Revised to use a single createWindow function instead of
+ two createWindow functions and one createModalDialog function.
+ The logic for this is now addressed in WebKit in an effort
+ to make this easier to follow.
+
+ * page/Chrome.cpp:
+ (WebCore::Chrome::createWindow):
+ * page/Chrome.h:
+ * page/ChromeClient.h:
+ * page/ContextMenuController.cpp:
+ (WebCore::openNewWindow):
+ * platform/graphics/svg/SVGImageEmptyClients.h:
+ (WebCore::SVGEmptyChromeClient::createWindow):
+ Revised to take new additional windowFeatures parameter.
+
2007-11-04 Geoffrey Garen <ggaren@apple.com>
Reviewed by Darin Adler.
14E8378E09F85D4F00B85AE4 /* JSEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 14E8378D09F85D4F00B85AE4 /* JSEvent.h */; };
14EC267F09CA07E000E1EEEC /* EventTargetNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 14EC267D09CA07E000E1EEEC /* EventTargetNode.h */; settings = {ATTRIBUTES = (Private, ); }; };
14EC268009CA07E000E1EEEC /* EventTargetNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14EC267E09CA07E000E1EEEC /* EventTargetNode.cpp */; };
- 14FD6DFD0AE5EA1B00AD67AD /* WindowFeatures.h in Headers */ = {isa = PBXBuildFile; fileRef = 14FD6DFC0AE5EA1B00AD67AD /* WindowFeatures.h */; };
+ 14FD6DFD0AE5EA1B00AD67AD /* WindowFeatures.h in Headers */ = {isa = PBXBuildFile; fileRef = 14FD6DFC0AE5EA1B00AD67AD /* WindowFeatures.h */; settings = {ATTRIBUTES = (Private, ); }; };
14FFE31D0AE1963300136BF5 /* HTMLFrameElementBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 14FFE31B0AE1963300136BF5 /* HTMLFrameElementBase.h */; };
14FFE31E0AE1963300136BF5 /* HTMLFrameElementBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14FFE31C0AE1963300136BF5 /* HTMLFrameElementBase.cpp */; };
1A0D57360A5C77FE007EDD4C /* OverflowEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0D57340A5C77FE007EDD4C /* OverflowEvent.cpp */; };
requestWithReferrer.resourceRequest().setHTTPReferrer(m_outgoingReferrer);
Page* page = m_frame->page();
- if (page) {
- if (features.dialog)
- page = page->chrome()->createModalDialog(m_frame, requestWithReferrer);
- else
- page = page->chrome()->createWindow(m_frame, requestWithReferrer);
- }
+ if (page)
+ page = page->chrome()->createWindow(m_frame, requestWithReferrer, features);
if (!page)
return 0;
#include "Page.h"
#include "ResourceHandle.h"
#include "Settings.h"
+#include "WindowFeatures.h"
#include "kjs_window.h"
#include <wtf/PassRefPtr.h>
#include <wtf/RefPtr.h>
{
m_client->takeFocus(direction);
}
-
-Page* Chrome::createWindow(Frame* frame, const FrameLoadRequest& request) const
-{
- return m_client->createWindow(frame, request);
-}
-
-Page* Chrome::createModalDialog(Frame* frame, const FrameLoadRequest& request) const
+
+Page* Chrome::createWindow(Frame* frame, const FrameLoadRequest& request, const WindowFeatures& features) const
{
- return m_client->createModalDialog(frame, request);
+ return m_client->createWindow(frame, request, features);
}
void Chrome::show() const
class String;
struct FrameLoadRequest;
+ struct WindowFeatures;
enum MessageSource {
HTMLMessageSource,
bool canTakeFocus(FocusDirection) const;
void takeFocus(FocusDirection) const;
- Page* createWindow(Frame*, const FrameLoadRequest&) const;
- Page* createModalDialog(Frame*, const FrameLoadRequest&) const;
+ Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&) const;
void show() const;
bool canRunModal() const;
class String;
struct FrameLoadRequest;
+ struct WindowFeatures;
class ChromeClient {
public:
// Frame wants to create the new Page. Also, the newly created window
// should not be shown to the user until the ChromeClient of the newly
// created Page has its show method called.
- virtual Page* createWindow(Frame*, const FrameLoadRequest&) = 0;
- virtual Page* createModalDialog(Frame*, const FrameLoadRequest&) = 0;
+ virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&) = 0;
virtual void show() = 0;
virtual bool canRunModal() = 0;
#include "SelectionController.h"
#include "Settings.h"
#include "TextIterator.h"
+#include "WindowFeatures.h"
#include "markup.h"
namespace WebCore {
static void openNewWindow(const KURL& urlToLoad, Frame* frame)
{
- if (Page* oldPage = frame->page())
+ if (Page* oldPage = frame->page()) {
+ WindowFeatures features;
if (Page* newPage = oldPage->chrome()->createWindow(frame,
- FrameLoadRequest(ResourceRequest(urlToLoad, frame->loader()->outgoingReferrer()))))
+ FrameLoadRequest(ResourceRequest(urlToLoad, frame->loader()->outgoingReferrer())), features))
newPage->chrome()->show();
+ }
}
void ContextMenuController::contextMenuItemSelected(ContextMenuItem* item)
virtual bool canTakeFocus(FocusDirection) { return false; }
virtual void takeFocus(FocusDirection) { }
- virtual Page* createWindow(Frame*, const FrameLoadRequest&) { return 0; }
- virtual Page* createModalDialog(Frame*, const FrameLoadRequest&) { return 0; }
+ virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&) { return 0; }
virtual void show() { }
virtual bool canRunModal() { return false; }
+2007-11-02 Tristan O'Tierney <tristan@apple.com>
+
+ Reviewed by Darin Adler.
+
+ * DefaultDelegates/WebDefaultUIDelegate.m:
+ (-[WebDefaultUIDelegate webView:createWebViewWithRequest:windowFeatures:]):
+ Forward the UI delegate to call webView:createWebViewWithRequest: if
+ this method doesn't exist.
+
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (WebFrameLoaderClient::dispatchCreatePage):
+ * Plugins/WebBaseNetscapePluginView.mm:
+ (-[WebBaseNetscapePluginView loadPluginRequest:]):
+ * WebView/WebView.mm:
+ (-[WebView _openNewWindowWithRequest:]):
+ Revised to use new webView:createWebViewWithRequest:windowFeatures: callback.
+
+ * WebCoreSupport/WebChromeClient.h:
+ * WebCoreSupport/WebChromeClient.mm:
+ (WebChromeClient::createWindow):
+ Added a new createWindow that accepts 3 parameters, so we can pass up windowFeatures to the chrome.
+ Removed createModalDialog to use new createWindow function.
+
+ * WebView/WebUIDelegatePrivate.h:
+ Added new webView:createWebViewWithRequest:windowFeatures: method.
+
2007-11-05 Geoffrey Garen <ggaren@apple.com>
Reviewed by Darin Adler.
return sharedDelegate;
}
-- (WebView *)webView: (WebView *)wv createWebViewWithRequest:(NSURLRequest *)request
+- (WebView *)webView: (WebView *)wv createWebViewWithRequest:(NSURLRequest *)request windowFeatures:(NSDictionary *)features
{
+ // If the new API method doesn't exist, fallback to the old version of createWebViewWithRequest
+ // for backwards compatability
+ if (![[wv UIDelegate] respondsToSelector:@selector(webView:createWebViewWithRequest:windowFeatures:)] && [[wv UIDelegate] respondsToSelector:@selector(webView:createWebViewWithRequest:)])
+ return [[wv UIDelegate] webView:wv createWebViewWithRequest:request];
return nil;
}
#import "WebNullPluginView.h"
#import "WebPreferences.h"
#import "WebViewInternal.h"
+#import "WebUIDelegatePrivate.h"
#import <Carbon/Carbon.h>
#import <JavaScriptCore/Assertions.h>
#import <JavaScriptCore/JSLock.h>
if (frame == nil) {
WebView *currentWebView = [self webView];
- WebView *newWebView = CallUIDelegate(currentWebView, @selector(webView:createWebViewWithRequest:), nil);
+ NSDictionary *features = [[NSDictionary alloc] init];
+ WebView *newWebView = [[currentWebView _UIDelegateForwarder] webView:currentWebView
+ createWebViewWithRequest:nil
+ windowFeatures:features];
+ [features release];
if (!newWebView) {
if ([pluginRequest sendNotification]) {
virtual bool canTakeFocus(WebCore::FocusDirection);
virtual void takeFocus(WebCore::FocusDirection);
- virtual WebCore::Page* createWindow(WebCore::Frame*, const WebCore::FrameLoadRequest&);
- virtual WebCore::Page* createModalDialog(WebCore::Frame*, const WebCore::FrameLoadRequest&);
+ virtual WebCore::Page* createWindow(WebCore::Frame*, const WebCore::FrameLoadRequest&, const WebCore::WindowFeatures&);
virtual void show();
virtual bool canRunModal();
#import <WebCore/PlatformScreen.h>
#import <WebCore/PlatformString.h>
#import <WebCore/ResourceRequest.h>
+#import <WebCore/WindowFeatures.h>
#import <wtf/PassRefPtr.h>
@interface NSView (AppKitSecretsWebBridgeKnowsAbout)
}
}
-Page* WebChromeClient::createWindow(Frame*, const FrameLoadRequest& request)
+Page* WebChromeClient::createWindow(Frame* frame, const FrameLoadRequest& request, const WindowFeatures& features)
{
NSURLRequest *URLRequest = nil;
if (!request.isEmpty())
URLRequest = request.resourceRequest().nsURLRequest();
- WebView *newWebView = CallUIDelegate(m_webView, @selector(webView:createWebViewWithRequest:), URLRequest);
- return core(newWebView);
-}
-
-Page* WebChromeClient::createModalDialog(Frame*, const FrameLoadRequest& request)
-{
- NSURLRequest *URLRequest = nil;
- if (!request.isEmpty())
- URLRequest = request.resourceRequest().nsURLRequest();
-
- WebView *newWebView = nil;
+
id delegate = [m_webView UIDelegate];
- if ([delegate respondsToSelector:@selector(webView:createWebViewModalDialogWithRequest:)])
+ WebView *newWebView;
+
+ if ([delegate respondsToSelector:@selector(webView:createWebViewWithRequest:windowFeatures:)]) {
+ NSNumber *x = features.xSet ? [[NSNumber alloc] initWithFloat:features.x] : nil;
+ NSNumber *y = features.ySet ? [[NSNumber alloc] initWithFloat:features.y] : nil;
+ NSNumber *width = features.widthSet ? [[NSNumber alloc] initWithFloat:features.width] : nil;
+ NSNumber *height = features.heightSet ? [[NSNumber alloc] initWithFloat:features.height] : nil;
+ NSNumber *menuBarVisible = [[NSNumber alloc] initWithBool:features.menuBarVisible];
+ NSNumber *statusBarVisible = [[NSNumber alloc] initWithBool:features.statusBarVisible];
+ NSNumber *toolBarVisible = [[NSNumber alloc] initWithBool:features.toolBarVisible];
+ NSNumber *scrollbarsVisible = [[NSNumber alloc] initWithBool:features.scrollbarsVisible];
+ NSNumber *resizable = [[NSNumber alloc] initWithBool:features.resizable];
+ NSNumber *fullscreen = [[NSNumber alloc] initWithBool:features.fullscreen];
+ NSNumber *dialog = [[NSNumber alloc] initWithBool:features.dialog];
+
+ NSMutableDictionary *dictFeatures = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
+ menuBarVisible, @"menuBarVisible",
+ statusBarVisible, @"statusBarVisible",
+ toolBarVisible, @"toolBarVisible",
+ scrollbarsVisible, @"scrollbarsVisible",
+ resizable, @"resizable",
+ fullscreen, @"fullscreen",
+ dialog, @"dialog",
+ nil];
+
+ if (x)
+ [dictFeatures setObject:x forKey:@"x"];
+ if (y)
+ [dictFeatures setObject:y forKey:@"y"];
+ if (width)
+ [dictFeatures setObject:width forKey:@"width"];
+ if (height)
+ [dictFeatures setObject:height forKey:@"height"];
+
+ newWebView = CallUIDelegate(m_webView, @selector(webView:createWebViewWithRequest:windowFeatures:), URLRequest, dictFeatures);
+
+ [dictFeatures release];
+ [x release];
+ [y release];
+ [width release];
+ [height release];
+ [menuBarVisible release];
+ [statusBarVisible release];
+ [toolBarVisible release];
+ [scrollbarsVisible release];
+ [resizable release];
+ [fullscreen release];
+ [dialog release];
+ } else if (features.dialog && [delegate respondsToSelector:@selector(webView:createWebViewModalDialogWithRequest:)]) {
newWebView = CallUIDelegate(m_webView, @selector(webView:createWebViewModalDialogWithRequest:), URLRequest);
- else if ([delegate respondsToSelector:@selector(webView:createWebViewWithRequest:)])
+ } else {
newWebView = CallUIDelegate(m_webView, @selector(webView:createWebViewWithRequest:), URLRequest);
+ }
+
return core(newWebView);
}
#import "WebResourcePrivate.h"
#import "WebScriptDebugServerPrivate.h"
#import "WebUIDelegate.h"
+#import "WebUIDelegatePrivate.h"
#import "WebViewInternal.h"
#import <WebCore/AuthenticationMac.h>
#import <WebCore/BlockExceptions.h>
Frame* WebFrameLoaderClient::dispatchCreatePage()
{
WebView *currentWebView = getWebView(m_webFrame.get());
- WebView *newWebView = CallUIDelegate(currentWebView, @selector(webView:createWebViewWithRequest:), nil);
+ NSDictionary *features = [[NSDictionary alloc] init];
+ WebView *newWebView = [[currentWebView _UIDelegateForwarder] webView:currentWebView
+ createWebViewWithRequest:nil
+ windowFeatures:features];
+ [features release];
return core([newWebView mainFrame]);
}
*/
- (BOOL)webView:(WebView *)sender runDatabaseSizeLimitPromptForOrigin:(NSString *)origin initiatedByFrame:(WebFrame *)frame;
+- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request windowFeatures:(NSDictionary *)features;
+
@end
- (WebView *)_openNewWindowWithRequest:(NSURLRequest *)request
{
- WebView *newWindowWebView = CallUIDelegate(self, @selector(webView:createWebViewWithRequest:), request);
+ NSDictionary *features = [[NSDictionary alloc] init];
+ WebView *newWindowWebView = [[self _UIDelegateForwarder] webView:self
+ createWebViewWithRequest:nil
+ windowFeatures:features];
+ [features release];
if (!newWindowWebView)
return nil;
#include "webkitgtkpage.h"
#include "webkitgtkprivate.h"
#include "NotImplemented.h"
+#include "WindowFeatures.h"
using namespace WebCore;
notImplemented();
}
-Page* ChromeClient::createWindow(Frame*, const FrameLoadRequest&)
+Page* ChromeClient::createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures& features)
{
- /* TODO: FrameLoadRequest is not used */
- WebKitPage* page = WEBKIT_PAGE_GET_CLASS(m_webPage)->create_page(m_webPage);
- if (!page)
+ if (features.dialog) {
+ notImplemented();
return 0;
-
- WebKitPagePrivate *privateData = WEBKIT_PAGE_GET_PRIVATE(WEBKIT_PAGE(page));
- return privateData->page;
-}
-
-Page* ChromeClient::createModalDialog(Frame*, const FrameLoadRequest&)
-{
- notImplemented();
- return 0;
+ } else {
+ /* TODO: FrameLoadRequest is not used */
+ WebKitPage* page = WEBKIT_PAGE_GET_CLASS(m_webPage)->create_page(m_webPage);
+ if (!page)
+ return 0;
+
+ WebKitPagePrivate *privateData = WEBKIT_PAGE_GET_PRIVATE(WEBKIT_PAGE(page));
+ return privateData->page;
+ }
}
void ChromeClient::show()
virtual bool canTakeFocus(WebCore::FocusDirection);
virtual void takeFocus(WebCore::FocusDirection);
- virtual WebCore::Page* createWindow(WebCore::Frame*, const WebCore::FrameLoadRequest&);
- virtual WebCore::Page* createModalDialog(WebCore::Frame*, const WebCore::FrameLoadRequest&);
+ virtual WebCore::Page* createWindow(WebCore::Frame*, const WebCore::FrameLoadRequest&, const WebCore::WindowFeatures&);
virtual void show();
virtual bool canRunModal();
+2007-11-05 Tristan O'Tierney <tristan@apple.com>
+
+ Reviewed by Darin Adler.
+
+ * WebCoreSupport/ChromeClientQt.cpp:
+ (WebCore::ChromeClientQt::createWindow):
+ * WebCoreSupport/ChromeClientQt.h:
+ Revised to use new WebCore ChromeClient createWindow API.
+
2007-10-31 Lars Knoll <lars@trolltech.com>
Reviewed by Simon.
#include "FrameLoaderClientQt.h"
#include "FrameView.h"
#include "NotImplemented.h"
+#include "WindowFeatures.h"
#include "qwebpage.h"
#include "qwebpage_p.h"
}
-Page* ChromeClientQt::createWindow(Frame*, const FrameLoadRequest& request)
+Page* ChromeClientQt::createWindow(Frame*, const FrameLoadRequest& request, const WindowFeatures& features)
{
- QWebPage *newPage = m_webPage->createWindow();
+ QWebPage *newPage = features.dialog ? m_webPage->createModalDialog() : m_webPage->createWindow();
if (!newPage)
return 0;
KURL url = request.resourceRequest().url();
return newPage->d->page;
}
-
-Page* ChromeClientQt::createModalDialog(Frame*, const FrameLoadRequest& request)
-{
- QWebPage *newPage = m_webPage->createModalDialog();
- if (!newPage)
- return 0;
- KURL url = request.resourceRequest().url();
- newPage->open(QUrl(url.prettyURL()));
- return newPage->d->page;
-}
-
-
void ChromeClientQt::show()
{
if (!m_webPage)
virtual bool canTakeFocus(FocusDirection);
virtual void takeFocus(FocusDirection);
- virtual Page* createWindow(Frame*, const FrameLoadRequest&);
- virtual Page* createModalDialog(Frame*, const FrameLoadRequest&);
+ virtual Page* createWindow(Frame*, const FrameLoadRequest&, const WindowFeatures&);
virtual void show();
virtual bool canRunModal();
+2007-11-05 Tristan O'Tierney <tristan@apple.com>
+
+ Reviewed by Darin Adler.
+
+ Part of the WebKit/WebCore API changes for
+ <rdar://problem/5368188>
+
+ * WebChromeClient.cpp:
+ (WebChromeClient::createWindow):
+ Removed usage of createModalDialog and revised to use new createWindow
+ ChromeClient API.
+
2007-11-04 Adam Roben <aroben@apple.com>
Add IWebCache::disabled
#include <WebCore/FrameLoadRequest.h>
#include <WebCore/FrameView.h>
#include <WebCore/NotImplemented.h>
+#include <WebCore/WindowFeatures.h>
#pragma warning(pop)
using namespace WebCore;
}
}
-Page* WebChromeClient::createWindow(Frame*, const FrameLoadRequest& frameLoadRequest)
+Page* WebChromeClient::createWindow(Frame*, const FrameLoadRequest& frameLoadRequest, const WindowFeatures& features)
{
Page* page = 0;
+ IWebUIDelegate* uiDelegate = 0;
IWebMutableURLRequest* request = WebMutableURLRequest::createInstance(frameLoadRequest.resourceRequest());
- IWebUIDelegate* uiDelegate = 0;
if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) {
- IWebView* webView = 0;
- if (SUCCEEDED(uiDelegate->createWebViewWithRequest(m_webView, request, &webView))) {
- page = core(webView);
- webView->Release();
+ if (features.dialog) {
+ notImplemented();
+ } else {
+ IWebView* webView = 0;
+ if (SUCCEEDED(uiDelegate->createWebViewWithRequest(m_webView, request, &webView))) {
+ page = core(webView);
+ webView->Release();
+ }
}
uiDelegate->Release();
return page;
}
-Page* WebChromeClient::createModalDialog(Frame*, const FrameLoadRequest&)
-{
- Page* page = 0;
- IWebUIDelegate* uiDelegate = 0;
- if (SUCCEEDED(m_webView->uiDelegate(&uiDelegate))) {
- notImplemented();
- uiDelegate->Release();
- }
- return page;
-}
-
void WebChromeClient::show()
{
IWebUIDelegate* uiDelegate = 0;