Changeset 173851 in webkit


Ignore:
Timestamp:
Sep 22, 2014 3:00:49 PM (10 years ago)
Author:
dbates@webkit.org
Message:

[Cocoa] Add UI delegate callback when window.close() is called
https://bugs.webkit.org/show_bug.cgi?id=137008
<rdar://problem/17801001>

Reviewed by Anders Carlsson.

Source/WebKit2:

Implement support infrastructure to notify the UI client when window.close() is called.

  • UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Added method declaration for -_webViewClose:.
  • UIProcess/Cocoa/UIDelegate.h: Added override declaration for API::UIClient::close().
  • UIProcess/Cocoa/UIDelegate.mm:

(WebKit::UIDelegate::setDelegate): Wire up delegate method to Objective-C selector, -[WKUIDelegatePrivate _webViewClose:].
(WebKit::UIDelegate::UIClient::close): Added; turns around and calls -[WKUIDelegatePrivate _webViewClose:] (if applicable).

Tools:

Add a test to ensure that -[WKUIDelegatePrivate _webViewClose:] is called on window.close()
for window opened via JavaScript (i.e. window.open()).

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/WebKit2/open-and-close-window.html: Added.
  • TestWebKitAPI/Tests/WebKit2Cocoa/OpenAndCloseWindow.mm: Added.
Location:
trunk
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r173804 r173851  
     12014-09-22  Daniel Bates  <dabates@apple.com>
     2
     3        [Cocoa] Add UI delegate callback when window.close() is called
     4        https://bugs.webkit.org/show_bug.cgi?id=137008
     5        <rdar://problem/17801001>
     6
     7        Reviewed by Anders Carlsson.
     8
     9        Implement support infrastructure to notify the UI client when window.close() is called.
     10
     11        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Added method declaration for -_webViewClose:.
     12        * UIProcess/Cocoa/UIDelegate.h: Added override declaration for API::UIClient::close().
     13        * UIProcess/Cocoa/UIDelegate.mm:
     14        (WebKit::UIDelegate::setDelegate): Wire up delegate method to Objective-C selector, -[WKUIDelegatePrivate _webViewClose:].
     15        (WebKit::UIDelegate::UIClient::close): Added; turns around and calls -[WKUIDelegatePrivate _webViewClose:] (if applicable).
     16
    1172014-09-21  Chris Dumez  <cdumez@apple.com>
    218
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUIDelegatePrivate.h

    r173662 r173851  
    4545- (void)_webView:(WKWebView *)webView printFrame:(_WKFrameHandle *)frame;
    4646
     47- (void)_webViewClose:(WKWebView *)webView;
     48
    4749#if TARGET_OS_IPHONE
    4850- (NSArray *)_webView:(WKWebView *)webView actionsForElement:(_WKActivatedElementInfo *)element defaultActions:(NSArray *)defaultActions;
  • trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.h

    r170373 r173851  
    6060        // API::UIClient
    6161        virtual PassRefPtr<WebKit::WebPageProxy> createNewPage(WebKit::WebPageProxy*, WebKit::WebFrameProxy*, const WebCore::ResourceRequest&, const WebCore::WindowFeatures&, const WebKit::NavigationActionData&) override;
     62        virtual void close(WebKit::WebPageProxy*) override;
    6263        virtual void runJavaScriptAlert(WebKit::WebPageProxy*, const WTF::String&, WebKit::WebFrameProxy*, std::function<void ()> completionHandler) override;
    6364        virtual void runJavaScriptConfirm(WebKit::WebPageProxy*, const WTF::String&, WebKit::WebFrameProxy*, std::function<void (bool)> completionHandler) override;
     
    8586        bool webViewDecideWebApplicationCacheQuotaForSecurityOriginCurrentQuotaTotalBytesNeeded : 1;
    8687        bool webViewPrintFrame : 1;
     88        bool webViewClose : 1;
    8789#if PLATFORM(IOS)
    8890        bool webViewActionsForElementDefaultActions : 1;
  • trunk/Source/WebKit2/UIProcess/Cocoa/UIDelegate.mm

    r170774 r173851  
    7272    m_delegateMethods.webViewDecideWebApplicationCacheQuotaForSecurityOriginCurrentQuotaTotalBytesNeeded = [delegate respondsToSelector:@selector(_webView:decideWebApplicationCacheQuotaForSecurityOrigin:currentQuota:totalBytesNeeded:decisionHandler:)];
    7373    m_delegateMethods.webViewPrintFrame = [delegate respondsToSelector:@selector(_webView:printFrame:)];
     74    m_delegateMethods.webViewClose = [delegate respondsToSelector:@selector(_webViewClose:)];
    7475#if PLATFORM(IOS)
    7576    m_delegateMethods.webViewActionsForElementDefaultActions = [delegate respondsToSelector:@selector(_webView:actionsForElement:defaultActions:)];
     
    229230}
    230231
     232void UIDelegate::UIClient::close(WebKit::WebPageProxy*)
     233{
     234    if (!m_uiDelegate.m_delegateMethods.webViewClose)
     235        return;
     236
     237    auto delegate = m_uiDelegate.m_delegate.get();
     238    if (!delegate)
     239        return;
     240
     241    [(id <WKUIDelegatePrivate>)delegate _webViewClose:m_uiDelegate.m_webView];
     242}
     243
    231244#if PLATFORM(IOS)
    232245RetainPtr<NSArray> UIDelegate::UIClient::actionsForElement(_WKActivatedElementInfo *elementInfo, RetainPtr<NSArray> defaultActions)
  • trunk/Tools/ChangeLog

    r173841 r173851  
     12014-09-22  Daniel Bates  <dabates@apple.com>
     2
     3        [Cocoa] Add UI delegate callback when window.close() is called
     4        https://bugs.webkit.org/show_bug.cgi?id=137008
     5        <rdar://problem/17801001>
     6
     7        Reviewed by Anders Carlsson.
     8
     9        Add a test to ensure that -[WKUIDelegatePrivate _webViewClose:] is called on window.close()
     10        for window opened via JavaScript (i.e. window.open()).
     11
     12        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     13        * TestWebKitAPI/Tests/WebKit2/open-and-close-window.html: Added.
     14        * TestWebKitAPI/Tests/WebKit2Cocoa/OpenAndCloseWindow.mm: Added.
     15
    1162014-09-22  Youenn Fablet  <youennf@gmail.com>
    217
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r173801 r173851  
    246246                CE14F1A4181873B0001C2705 /* WillPerformClientRedirectToURLCrash.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = CE14F1A2181873B0001C2705 /* WillPerformClientRedirectToURLCrash.html */; };
    247247                CE32C7C818184C4900CD8C28 /* WillPerformClientRedirectToURLCrash.mm in Sources */ = {isa = PBXBuildFile; fileRef = CE32C7C718184C4900CD8C28 /* WillPerformClientRedirectToURLCrash.mm */; };
     248                CEA6CF2319CCF5BD0064F5A7 /* OpenAndCloseWindow.mm in Sources */ = {isa = PBXBuildFile; fileRef = CEA6CF2219CCF5BD0064F5A7 /* OpenAndCloseWindow.mm */; };
     249                CEA6CF2819CCF69D0064F5A7 /* open-and-close-window.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = CEA6CF2719CCF69D0064F5A7 /* open-and-close-window.html */; };
    248250                E1220DA0155B25480013E2FC /* MemoryCacheDisableWithinResourceLoadDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = E1220D9F155B25480013E2FC /* MemoryCacheDisableWithinResourceLoadDelegate.mm */; };
    249251                E1220DCA155B28AA0013E2FC /* MemoryCacheDisableWithinResourceLoadDelegate.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = E1220DC9155B287D0013E2FC /* MemoryCacheDisableWithinResourceLoadDelegate.html */; };
     
    334336                                33E79E06137B5FD900E32D99 /* mouse-move-listener.html in Copy Resources */,
    335337                                A57A34F216AF6B2B00C2501F /* PageVisibilityStateWithWindowChanges.html in Copy Resources */,
     338                                CEA6CF2819CCF69D0064F5A7 /* open-and-close-window.html in Copy Resources */,
    336339                                F6FDDDD614241C6F004F1729 /* push-state.html in Copy Resources */,
    337340                                52B8CF9815868D9100281053 /* SetDocumentURI.html in Copy Resources */,
     
    612615                CE14F1A2181873B0001C2705 /* WillPerformClientRedirectToURLCrash.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = WillPerformClientRedirectToURLCrash.html; sourceTree = "<group>"; };
    613616                CE32C7C718184C4900CD8C28 /* WillPerformClientRedirectToURLCrash.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WillPerformClientRedirectToURLCrash.mm; sourceTree = "<group>"; };
     617                CEA6CF2219CCF5BD0064F5A7 /* OpenAndCloseWindow.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenAndCloseWindow.mm; sourceTree = "<group>"; };
     618                CEA6CF2719CCF69D0064F5A7 /* open-and-close-window.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = "open-and-close-window.html"; sourceTree = "<group>"; };
    614619                E1220D9F155B25480013E2FC /* MemoryCacheDisableWithinResourceLoadDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MemoryCacheDisableWithinResourceLoadDelegate.mm; sourceTree = "<group>"; };
    615620                E1220DC9155B287D0013E2FC /* MemoryCacheDisableWithinResourceLoadDelegate.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = MemoryCacheDisableWithinResourceLoadDelegate.html; sourceTree = "<group>"; };
     
    716721                                A1A4FE5D18DD3DB700B5EA8A /* Download.mm */,
    717722                                1ABC3DED1899BE6D004F0626 /* Navigation.mm */,
     723                                CEA6CF2219CCF5BD0064F5A7 /* OpenAndCloseWindow.mm */,
    718724                                C95501BE19AD2FAF0049BE3E /* Preferences.mm */,
    719725                                7CC3E1FA197E234100BE6252 /* UserContentController.mm */,
     
    969975                                2DD7D3AE178227AC0026E1E3 /* lots-of-text-vertical-lr.html */,
    970976                                33E79E05137B5FCE00E32D99 /* mouse-move-listener.html */,
     977                                CEA6CF2719CCF69D0064F5A7 /* open-and-close-window.html */,
    971978                                F6FDDDD514241C48004F1729 /* push-state.html */,
    972979                                1ADBEFBC130C6A0100D61D19 /* simple-accelerated-compositing.html */,
     
    13821389                                A5E2027315B2181900C13E14 /* WindowlessWebViewWithMedia.mm in Sources */,
    13831390                                F6B7BE9417469209008A3445 /* DidAssociateFormControls.cpp in Sources */,
     1391                                CEA6CF2319CCF5BD0064F5A7 /* OpenAndCloseWindow.mm in Sources */,
    13841392                                BC3C4C7F14587AA60025FB62 /* WKBrowsingContextGroupTest.mm in Sources */,
    13851393                                BC3C4C7214575B6A0025FB62 /* WKBrowsingContextLoadDelegateTest.mm in Sources */,
Note: See TracChangeset for help on using the changeset viewer.