Changeset 166270 in webkit


Ignore:
Timestamp:
Mar 25, 2014 5:01:09 PM (10 years ago)
Author:
andersca@apple.com
Message:

Add a UI delegate callback for handling window.open
https://bugs.webkit.org/show_bug.cgi?id=130757

Reviewed by Sam Weinig.

  • UIProcess/API/Cocoa/WKUIDelegate.h:
  • UIProcess/API/Cocoa/WKWebView.mm:
  • UIProcess/API/Cocoa/WKWebViewInternal.h:
  • UIProcess/Cocoa/UIClient.h:
  • UIProcess/Cocoa/UIClient.mm:

(WebKit::UIClient::setDelegate):
(WebKit::UIClient::createNewPage):

Location:
trunk/Source/WebKit2
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r166269 r166270  
     12014-03-25  Anders Carlsson  <andersca@apple.com>
     2
     3        Add a UI delegate callback for handling window.open
     4        https://bugs.webkit.org/show_bug.cgi?id=130757
     5
     6        Reviewed by Sam Weinig.
     7
     8        * UIProcess/API/Cocoa/WKUIDelegate.h:
     9        * UIProcess/API/Cocoa/WKWebView.mm:
     10        * UIProcess/API/Cocoa/WKWebViewInternal.h:
     11        * UIProcess/Cocoa/UIClient.h:
     12        * UIProcess/Cocoa/UIClient.mm:
     13        (WebKit::UIClient::setDelegate):
     14        (WebKit::UIClient::createNewPage):
     15
    1162014-03-25  Anders Carlsson  <andersca@apple.com>
    217
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUIDelegate.h

    r164460 r166270  
    3030
    3131@class WKFrameInfo;
     32@class WKWebViewConfiguration;
     33@class WKWindowFeatures;
    3234
    3335@protocol WKUIDelegate <NSObject>
    3436
    3537@optional
     38
     39// FIXME: Maybe we should pass a WKNavigationAction instead of request and frame.
     40// The C SPI has the key modifiers and mouse button as well.
     41- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration request:(NSURLRequest *)request windowFeatures:(WKWindowFeatures *)windowFeatures initiatedByFrame:(WKFrameInfo *)frame;
    3642
    3743- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)())completionHandler;
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm

    r166269 r166270  
    7878
    7979@implementation WKWebView {
    80     RetainPtr<WKWebViewConfiguration> _configuration;
    8180    std::unique_ptr<WebKit::NavigationState> _navigationState;
    8281
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h

    r165303 r166270  
    2929
    3030#import <wtf/RefPtr.h>
     31#import <wtf/RetainPtr.h>
    3132
    3233#if PLATFORM(IOS)
     
    5152
    5253@package
     54    RetainPtr<WKWebViewConfiguration> _configuration;
     55
    5356    RefPtr<WebKit::WebPageProxy> _page;
    5457}
  • trunk/Source/WebKit2/UIProcess/Cocoa/UIClient.h

    r164666 r166270  
    5353private:
    5454    // API::UIClient
     55    virtual PassRefPtr<WebKit::WebPageProxy> createNewPage(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, WebKit::WebEvent::Modifiers, WebKit::WebMouseEvent::Button) override;
    5556    virtual void runJavaScriptAlert(WebKit::WebPageProxy*, const WTF::String&, WebKit::WebFrameProxy*, std::function<void ()> completionHandler) override;
    5657    virtual void runJavaScriptConfirm(WebKit::WebPageProxy*, const WTF::String&, WebKit::WebFrameProxy*, std::function<void (bool)> completionHandler) override;
     
    6162
    6263    struct {
     64        bool webViewCreateWebViewWithConfigurationRequestWindowFeaturesInitiatedByFrame : 1;
    6365        bool webViewRunJavaScriptAlertPanelWithMessageInitiatedByFrameCompletionHandler : 1;
    6466        bool webViewRunJavaScriptConfirmPanelWithMessageInitiatedByFrameCompletionHandler : 1;
  • trunk/Source/WebKit2/UIProcess/Cocoa/UIClient.mm

    r164666 r166270  
    3030
    3131#import "WKFrameInfoInternal.h"
     32#import "WKWebViewConfigurationInternal.h"
     33#import "WKWebViewInternal.h"
     34#import "WKWindowFeaturesInternal.h"
    3235#import "WKUIDelegatePrivate.h"
    3336
     
    5255    m_delegate = delegate;
    5356
     57    m_delegateMethods.webViewCreateWebViewWithConfigurationRequestWindowFeaturesInitiatedByFrame = [delegate respondsToSelector:@selector(webView:createWebViewWithConfiguration:request:windowFeatures:initiatedByFrame:)];
    5458    m_delegateMethods.webViewRunJavaScriptAlertPanelWithMessageInitiatedByFrameCompletionHandler = [delegate respondsToSelector:@selector(webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:)];
    5559    m_delegateMethods.webViewRunJavaScriptConfirmPanelWithMessageInitiatedByFrameCompletionHandler = [delegate respondsToSelector:@selector(webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:)];
     
    7377#endif
    7478    return defaultActions;
     79}
     80
     81PassRefPtr<WebKit::WebPageProxy> UIClient::createNewPage(WebKit::WebPageProxy*, WebKit::WebFrameProxy* initiatingFrame, const WebCore::ResourceRequest& request, const WebCore::WindowFeatures& windowFeatures, WebKit::WebEvent::Modifiers, WebKit::WebMouseEvent::Button)
     82{
     83    if (!m_delegateMethods.webViewCreateWebViewWithConfigurationRequestWindowFeaturesInitiatedByFrame)
     84        return nullptr;
     85
     86    auto delegate = m_delegate.get();
     87    if (!delegate)
     88        return nullptr;
     89
     90    auto configuration = adoptNS([m_webView->_configuration copy]);
     91    [configuration _setRelatedWebView:m_webView];
     92
     93    WKWebView *webView = [delegate webView:m_webView createWebViewWithConfiguration:configuration.get() request:request.nsURLRequest(WebCore::DoNotUpdateHTTPBody) windowFeatures:adoptNS([[WKWindowFeatures alloc] _initWithWindowFeatures:windowFeatures]).get() initiatedByFrame:adoptNS([[WKFrameInfo alloc] initWithWebFrameProxy:*initiatingFrame]).get()];
     94
     95    if (!webView)
     96        return nullptr;
     97
     98    if ([webView->_configuration _relatedWebView] != m_webView)
     99        [NSException raise:NSInternalInconsistencyException format:@"Returned WKWebView was not created with the given configuration."];
     100
     101    return webView->_page.get();
    75102}
    76103
Note: See TracChangeset for help on using the changeset viewer.