Changeset 226609 in webkit


Ignore:
Timestamp:
Jan 8, 2018 7:26:18 PM (6 years ago)
Author:
achristensen@apple.com
Message:

Make ObjC SPI equivalent to WKPageNavigationClient.decidePolicyForPluginLoad
https://bugs.webkit.org/show_bug.cgi?id=181413
<rdar://problem/36169005>

Reviewed by Wenson Hsieh.

  • UIProcess/API/APINavigationClient.h:

(API::NavigationClient::decidePolicyForPluginLoad):

  • UIProcess/API/C/WKPage.cpp:

(WKPageSetPageNavigationClient):

  • UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
  • UIProcess/Cocoa/NavigationState.h:
  • UIProcess/Cocoa/NavigationState.mm:

(WebKit::NavigationState::setNavigationDelegate):
(WebKit::toPluginModuleLoadPolicy):
(WebKit::toWKPluginModuleLoadPolicy):
(WebKit::NavigationState::NavigationClient::decidePolicyForPluginLoad):

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::findPlugin):

Location:
trunk/Source/WebKit
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r226608 r226609  
     12018-01-08  Alex Christensen  <achristensen@webkit.org>
     2
     3        Make ObjC SPI equivalent to WKPageNavigationClient.decidePolicyForPluginLoad
     4        https://bugs.webkit.org/show_bug.cgi?id=181413
     5        <rdar://problem/36169005>
     6
     7        Reviewed by Wenson Hsieh.
     8
     9        * UIProcess/API/APINavigationClient.h:
     10        (API::NavigationClient::decidePolicyForPluginLoad):
     11        * UIProcess/API/C/WKPage.cpp:
     12        (WKPageSetPageNavigationClient):
     13        * UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h:
     14        * UIProcess/Cocoa/NavigationState.h:
     15        * UIProcess/Cocoa/NavigationState.mm:
     16        (WebKit::NavigationState::setNavigationDelegate):
     17        (WebKit::toPluginModuleLoadPolicy):
     18        (WebKit::toWKPluginModuleLoadPolicy):
     19        (WebKit::NavigationState::NavigationClient::decidePolicyForPluginLoad):
     20        * UIProcess/WebPageProxy.cpp:
     21        (WebKit::WebPageProxy::findPlugin):
     22
    1232018-01-08  Ryosuke Niwa  <rniwa@webkit.org>
    224
  • trunk/Source/WebKit/UIProcess/API/APILoaderClient.h

    r223737 r226609  
    104104
    105105#if ENABLE(NETSCAPE_PLUGIN_API)
    106     virtual WebKit::PluginModuleLoadPolicy pluginLoadPolicy(WebKit::WebPageProxy&, WebKit::PluginModuleLoadPolicy currentPluginLoadPolicy, API::Dictionary*, WTF::String& /* unavailabilityDescription */) { return currentPluginLoadPolicy; }
     106    virtual WebKit::PluginModuleLoadPolicy pluginLoadPolicy(WebKit::WebPageProxy&, WebKit::PluginModuleLoadPolicy currentPluginLoadPolicy, API::Dictionary&, WTF::String& /* unavailabilityDescription */) { return currentPluginLoadPolicy; }
    107107    virtual void didFailToInitializePlugin(WebKit::WebPageProxy&, API::Dictionary&) { }
    108108    virtual void didBlockInsecurePluginVersion(WebKit::WebPageProxy&, API::Dictionary*) { }
  • trunk/Source/WebKit/UIProcess/API/APINavigationClient.h

    r225954 r226609  
    114114#if ENABLE(NETSCAPE_PLUGIN_API)
    115115    virtual bool didFailToInitializePlugIn(WebKit::WebPageProxy&, API::Dictionary&) { return false; }
    116     virtual WebKit::PluginModuleLoadPolicy decidePolicyForPluginLoad(WebKit::WebPageProxy&, WebKit::PluginModuleLoadPolicy currentPluginLoadPolicy, Dictionary*, WTF::String&)
     116    virtual WebKit::PluginModuleLoadPolicy decidePolicyForPluginLoad(WebKit::WebPageProxy&, WebKit::PluginModuleLoadPolicy currentPluginLoadPolicy, Dictionary&, WTF::String&)
    117117    {
    118118        return currentPluginLoadPolicy;
  • trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp

    r226323 r226609  
    12791279        }
    12801280
    1281         PluginModuleLoadPolicy pluginLoadPolicy(WebPageProxy& page, PluginModuleLoadPolicy currentPluginLoadPolicy, API::Dictionary* pluginInformation, String& unavailabilityDescription) override
     1281        PluginModuleLoadPolicy pluginLoadPolicy(WebPageProxy& page, PluginModuleLoadPolicy currentPluginLoadPolicy, API::Dictionary& pluginInformation, String& unavailabilityDescription) override
    12821282        {
    12831283            WKStringRef unavailabilityDescriptionOut = 0;
     
    12851285
    12861286            if (m_client.pluginLoadPolicy_deprecatedForUseWithV2)
    1287                 loadPolicy = toPluginModuleLoadPolicy(m_client.pluginLoadPolicy_deprecatedForUseWithV2(toAPI(&page), toWKPluginLoadPolicy(currentPluginLoadPolicy), toAPI(pluginInformation), m_client.base.clientInfo));
     1287                loadPolicy = toPluginModuleLoadPolicy(m_client.pluginLoadPolicy_deprecatedForUseWithV2(toAPI(&page), toWKPluginLoadPolicy(currentPluginLoadPolicy), toAPI(&pluginInformation), m_client.base.clientInfo));
    12881288            else if (m_client.pluginLoadPolicy)
    1289                 loadPolicy = toPluginModuleLoadPolicy(m_client.pluginLoadPolicy(toAPI(&page), toWKPluginLoadPolicy(currentPluginLoadPolicy), toAPI(pluginInformation), &unavailabilityDescriptionOut, m_client.base.clientInfo));
     1289                loadPolicy = toPluginModuleLoadPolicy(m_client.pluginLoadPolicy(toAPI(&page), toWKPluginLoadPolicy(currentPluginLoadPolicy), toAPI(&pluginInformation), &unavailabilityDescriptionOut, m_client.base.clientInfo));
    12901290
    12911291            if (unavailabilityDescriptionOut) {
     
    23142314        }
    23152315#if ENABLE(NETSCAPE_PLUGIN_API)
    2316         PluginModuleLoadPolicy decidePolicyForPluginLoad(WebPageProxy& page, PluginModuleLoadPolicy currentPluginLoadPolicy, API::Dictionary* pluginInformation, String& unavailabilityDescription) override
     2316        PluginModuleLoadPolicy decidePolicyForPluginLoad(WebPageProxy& page, PluginModuleLoadPolicy currentPluginLoadPolicy, API::Dictionary& pluginInformation, String& unavailabilityDescription) override
    23172317        {
    23182318            WKStringRef unavailabilityDescriptionOut = 0;
     
    23202320           
    23212321            if (m_client.decidePolicyForPluginLoad)
    2322                 loadPolicy = toPluginModuleLoadPolicy(m_client.decidePolicyForPluginLoad(toAPI(&page), toWKPluginLoadPolicy(currentPluginLoadPolicy), toAPI(pluginInformation), &unavailabilityDescriptionOut, m_client.base.clientInfo));
     2322                loadPolicy = toPluginModuleLoadPolicy(m_client.decidePolicyForPluginLoad(toAPI(&page), toWKPluginLoadPolicy(currentPluginLoadPolicy), toAPI(&pluginInformation), &unavailabilityDescriptionOut, m_client.base.clientInfo));
    23232323           
    23242324            if (unavailabilityDescriptionOut) {
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationDelegatePrivate.h

    r223737 r226609  
    3939    _WKWebGLLoadPolicyAllowCreation,
    4040    _WKWebGLLoadPolicyPendingCreation,
     41} WK_API_AVAILABLE(macosx(WK_MAC_TBA));
     42
     43typedef NS_ENUM(NSInteger, _WKPluginModuleLoadPolicy) {
     44    _WKPluginModuleLoadPolicyLoadNormally,
     45    _WKPluginModuleLoadPolicyLoadUnsandboxed,
     46    _WKPluginModuleLoadPolicyBlockedForSecurity,
     47    _WKPluginModuleLoadPolicyBlockedForCompatibility,
    4148} WK_API_AVAILABLE(macosx(WK_MAC_TBA));
    4249#endif
     
    93100- (void)_webView:(WKWebView *)webView willGoToBackForwardListItem:(WKBackForwardListItem *)item inPageCache:(BOOL)inPageCache WK_API_AVAILABLE(macosx(WK_MAC_TBA));
    94101- (void)_webView:(WKWebView *)webView didFailToInitializePlugInWithInfo:(NSDictionary *)info WK_API_AVAILABLE(macosx(WK_MAC_TBA));
     102- (_WKPluginModuleLoadPolicy)_webView:(WKWebView *)webView decidePolicyForPluginLoadWithCurrentPolicy:(_WKPluginModuleLoadPolicy)policy pluginInfo:(NSDictionary *)info unavailabilityDescription:(NSString *)unavailabilityDescription WK_API_AVAILABLE(macosx(WK_MAC_TBA));
    95103- (void)_webView:(WKWebView *)webView backForwardListItemAdded:(WKBackForwardListItem *)itemAdded removed:(NSArray<WKBackForwardListItem *> *)itemsRemoved WK_API_AVAILABLE(macosx(WK_MAC_TBA));
    96104#endif
  • trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.h

    r224677 r226609  
    122122        bool willGoToBackForwardListItem(WebPageProxy&, WebBackForwardListItem&, bool inPageCache, API::Object*) final;
    123123        bool didFailToInitializePlugIn(WebPageProxy&, API::Dictionary&) final;
     124        WebKit::PluginModuleLoadPolicy decidePolicyForPluginLoad(WebKit::WebPageProxy&, WebKit::PluginModuleLoadPolicy, API::Dictionary&, WTF::String&) final;
    124125        bool didChangeBackForwardList(WebPageProxy&, WebBackForwardListItem*, const Vector<Ref<WebBackForwardListItem>>&) final;
    125126#endif
     
    222223        bool webViewDidFailToInitializePlugInWithInfo : 1;
    223224        bool webViewWillGoToBackForwardListItemInPageCache : 1;
     225        bool webViewDecidePolicyForPluginLoadWithCurrentPolicyPluginInfoUnavailabilityDescription : 1;
    224226#endif
    225227    } m_navigationDelegateMethods;
  • trunk/Source/WebKit/UIProcess/Cocoa/NavigationState.mm

    r226472 r226609  
    186186    m_navigationDelegateMethods.webViewDidFailToInitializePlugInWithInfo = [delegate respondsToSelector:@selector(_webView:didFailToInitializePlugInWithInfo:)];
    187187    m_navigationDelegateMethods.webViewBackForwardListItemAddedRemoved = [delegate respondsToSelector:@selector(_webView:backForwardListItemAdded:removed:)];
     188    m_navigationDelegateMethods.webViewDecidePolicyForPluginLoadWithCurrentPolicyPluginInfoUnavailabilityDescription = [delegate respondsToSelector:@selector(_webView:decidePolicyForPluginLoadWithCurrentPolicy:pluginInfo:unavailabilityDescription:)];
    188189#endif
    189190}
     
    311312    [(id <WKNavigationDelegatePrivate>)navigationDelegate _webView:m_navigationState.m_webView didFailToInitializePlugInWithInfo:wrapper(info)];
    312313    return true;
     314}
     315
     316static WebKit::PluginModuleLoadPolicy pluginModuleLoadPolicy(_WKPluginModuleLoadPolicy policy)
     317{
     318    switch (policy) {
     319    case _WKPluginModuleLoadPolicyLoadNormally:
     320        return WebKit::PluginModuleLoadNormally;
     321    case _WKPluginModuleLoadPolicyLoadUnsandboxed:
     322        return WebKit::PluginModuleLoadUnsandboxed;
     323    case _WKPluginModuleLoadPolicyBlockedForSecurity:
     324        return WebKit::PluginModuleBlockedForSecurity;
     325    case _WKPluginModuleLoadPolicyBlockedForCompatibility:
     326        return WebKit::PluginModuleBlockedForCompatibility;
     327    }
     328    ASSERT_NOT_REACHED();
     329    return WebKit::PluginModuleLoadNormally;
     330}
     331
     332static _WKPluginModuleLoadPolicy wkPluginModuleLoadPolicy(WebKit::PluginModuleLoadPolicy policy)
     333{
     334    switch (policy) {
     335    case WebKit::PluginModuleLoadNormally:
     336        return _WKPluginModuleLoadPolicyLoadNormally;
     337    case WebKit::PluginModuleLoadUnsandboxed:
     338        return _WKPluginModuleLoadPolicyLoadUnsandboxed;
     339    case WebKit::PluginModuleBlockedForSecurity:
     340        return _WKPluginModuleLoadPolicyBlockedForSecurity;
     341    case WebKit::PluginModuleBlockedForCompatibility:
     342        return _WKPluginModuleLoadPolicyBlockedForCompatibility;
     343    }
     344    ASSERT_NOT_REACHED();
     345    return _WKPluginModuleLoadPolicyLoadNormally;
     346}
     347
     348WebKit::PluginModuleLoadPolicy NavigationState::NavigationClient::decidePolicyForPluginLoad(WebKit::WebPageProxy&, WebKit::PluginModuleLoadPolicy currentPluginLoadPolicy, API::Dictionary& pluginInformation, WTF::String& unavailabilityDescription)
     349{
     350    if (!m_navigationState.m_navigationDelegateMethods.webViewDecidePolicyForPluginLoadWithCurrentPolicyPluginInfoUnavailabilityDescription)
     351        return currentPluginLoadPolicy;
     352   
     353    auto navigationDelegate = m_navigationState.m_navigationDelegate.get();
     354    if (!navigationDelegate)
     355        return currentPluginLoadPolicy;
     356
     357    return pluginModuleLoadPolicy([(id <WKNavigationDelegatePrivate>)navigationDelegate _webView:m_navigationState.m_webView decidePolicyForPluginLoadWithCurrentPolicy:wkPluginModuleLoadPolicy(currentPluginLoadPolicy) pluginInfo:wrapper(pluginInformation) unavailabilityDescription:unavailabilityDescription]);
    313358}
    314359
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r226604 r226609  
    20562056
    20572057#if PLATFORM(COCOA)
    2058     RefPtr<API::Dictionary> pluginInformation = createPluginInformationDictionary(plugin, frameURLString, String(), pageURLString, String(), String());
     2058    auto pluginInformation = createPluginInformationDictionary(plugin, frameURLString, String(), pageURLString, String(), String());
    20592059    if (m_navigationClient)
    20602060        pluginLoadPolicy = m_navigationClient->decidePolicyForPluginLoad(*this, static_cast<PluginModuleLoadPolicy>(pluginLoadPolicy), pluginInformation.get(), unavailabilityDescription);
Note: See TracChangeset for help on using the changeset viewer.