Changeset 221621 in webkit


Ignore:
Timestamp:
Sep 5, 2017 10:36:52 AM (7 years ago)
Author:
achristensen@apple.com
Message:

Add WKUIDelegatePrivate equivalent of WKPageUIClient's unavailablePluginButtonClicked
https://bugs.webkit.org/show_bug.cgi?id=176274
<rdar://problem/29270035>

Reviewed by Darin Adler.

Source/WebKit:

  • UIProcess/API/APIUIClient.h:

(API::UIClient::unavailablePluginButtonClicked):

  • UIProcess/API/C/WKPage.cpp:

(WKPageSetPageUIClient):

  • UIProcess/API/Cocoa/WKPreferences.mm:

(-[WKPreferences _setPluginsEnabled:]):
(-[WKPreferences _pluginsEnabled]):

  • UIProcess/API/Cocoa/WKPreferencesPrivate.h:
  • UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
  • UIProcess/Cocoa/UIDelegate.h:
  • UIProcess/Cocoa/UIDelegate.mm:

(WebKit::UIDelegate::setDelegate):
(WebKit::toWKPluginUnavailabilityReason):
(WebKit::UIDelegate::UIClient::unavailablePluginButtonClicked):

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::unavailablePluginButtonClicked):

Tools:

  • TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:

(-[PluginDelegate _webView:unavailablePluginButtonClickedWithReason:pluginInfo:]):
(TEST):

Location:
trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r221620 r221621  
     12017-09-05  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add WKUIDelegatePrivate equivalent of WKPageUIClient's unavailablePluginButtonClicked
     4        https://bugs.webkit.org/show_bug.cgi?id=176274
     5        <rdar://problem/29270035>
     6
     7        Reviewed by Darin Adler.
     8
     9        * UIProcess/API/APIUIClient.h:
     10        (API::UIClient::unavailablePluginButtonClicked):
     11        * UIProcess/API/C/WKPage.cpp:
     12        (WKPageSetPageUIClient):
     13        * UIProcess/API/Cocoa/WKPreferences.mm:
     14        (-[WKPreferences _setPluginsEnabled:]):
     15        (-[WKPreferences _pluginsEnabled]):
     16        * UIProcess/API/Cocoa/WKPreferencesPrivate.h:
     17        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
     18        * UIProcess/Cocoa/UIDelegate.h:
     19        * UIProcess/Cocoa/UIDelegate.mm:
     20        (WebKit::UIDelegate::setDelegate):
     21        (WebKit::toWKPluginUnavailabilityReason):
     22        (WebKit::UIDelegate::UIClient::unavailablePluginButtonClicked):
     23        * UIProcess/WebPageProxy.cpp:
     24        (WebKit::WebPageProxy::unavailablePluginButtonClicked):
     25
    1262017-09-04  Alex Christensen  <achristensen@webkit.org>
    227
  • trunk/Source/WebKit/UIProcess/API/APIUIClient.h

    r221503 r221621  
    9494    virtual void mouseDidMoveOverElement(WebKit::WebPageProxy*, const WebKit::WebHitTestResultData&, WebKit::WebEvent::Modifiers, Object*) { }
    9595#if ENABLE(NETSCAPE_PLUGIN_API)
    96     virtual void unavailablePluginButtonClicked(WebKit::WebPageProxy*, WKPluginUnavailabilityReason, Dictionary*) { }
     96    virtual void unavailablePluginButtonClicked(WebKit::WebPageProxy&, WKPluginUnavailabilityReason, Dictionary&) { }
    9797#endif // ENABLE(NETSCAPE_PLUGIN_API)
    9898
  • trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp

    r221503 r221621  
    17891789
    17901790#if ENABLE(NETSCAPE_PLUGIN_API)
    1791         void unavailablePluginButtonClicked(WebPageProxy* page, WKPluginUnavailabilityReason pluginUnavailabilityReason, API::Dictionary* pluginInformation) final
     1791        void unavailablePluginButtonClicked(WebPageProxy& page, WKPluginUnavailabilityReason pluginUnavailabilityReason, API::Dictionary& pluginInformation) final
    17921792        {
    17931793            if (pluginUnavailabilityReason == kWKPluginUnavailabilityReasonPluginMissing) {
    17941794                if (m_client.missingPluginButtonClicked_deprecatedForUseWithV0)
    17951795                    m_client.missingPluginButtonClicked_deprecatedForUseWithV0(
    1796                         toAPI(page),
    1797                         toAPI(pluginInformation->get<API::String>(pluginInformationMIMETypeKey())),
    1798                         toAPI(pluginInformation->get<API::String>(pluginInformationPluginURLKey())),
    1799                         toAPI(pluginInformation->get<API::String>(pluginInformationPluginspageAttributeURLKey())),
     1796                        toAPI(&page),
     1797                        toAPI(pluginInformation.get<API::String>(pluginInformationMIMETypeKey())),
     1798                        toAPI(pluginInformation.get<API::String>(pluginInformationPluginURLKey())),
     1799                        toAPI(pluginInformation.get<API::String>(pluginInformationPluginspageAttributeURLKey())),
    18001800                        m_client.base.clientInfo);
    18011801            }
     
    18031803            if (m_client.unavailablePluginButtonClicked_deprecatedForUseWithV1)
    18041804                m_client.unavailablePluginButtonClicked_deprecatedForUseWithV1(
    1805                     toAPI(page),
     1805                    toAPI(&page),
    18061806                    pluginUnavailabilityReason,
    1807                     toAPI(pluginInformation->get<API::String>(pluginInformationMIMETypeKey())),
    1808                     toAPI(pluginInformation->get<API::String>(pluginInformationPluginURLKey())),
    1809                     toAPI(pluginInformation->get<API::String>(pluginInformationPluginspageAttributeURLKey())),
     1807                    toAPI(pluginInformation.get<API::String>(pluginInformationMIMETypeKey())),
     1808                    toAPI(pluginInformation.get<API::String>(pluginInformationPluginURLKey())),
     1809                    toAPI(pluginInformation.get<API::String>(pluginInformationPluginspageAttributeURLKey())),
    18101810                    m_client.base.clientInfo);
    18111811
    18121812            if (m_client.unavailablePluginButtonClicked)
    18131813                m_client.unavailablePluginButtonClicked(
    1814                     toAPI(page),
     1814                    toAPI(&page),
    18151815                    pluginUnavailabilityReason,
    1816                     toAPI(pluginInformation),
     1816                    toAPI(&pluginInformation),
    18171817                    m_client.base.clientInfo);
    18181818        }
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm

    r220542 r221621  
    638638}
    639639
     640- (void)_setPlugInsEnabled:(BOOL)enabled
     641{
     642    _preferences->setPluginsEnabled(enabled);
     643}
     644
     645- (BOOL)_plugInsEnabled
     646{
     647    return _preferences->pluginsEnabled();
     648}
     649
    640650- (BOOL)_javaScriptCanAccessClipboard
    641651{
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferencesPrivate.h

    r220542 r221621  
    118118- (void)_setEnabled:(BOOL)value forFeature:(_WKExperimentalFeature *)feature WK_API_AVAILABLE(macosx(10.12), ios(10.0));
    119119
     120#if !TARGET_OS_IPHONE
     121@property (nonatomic, setter=_setPlugInsEnabled:) BOOL _plugInsEnabled WK_API_AVAILABLE(macosx(WK_MAC_TBA));
     122#endif
     123
    120124@end
    121125
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h

    r221503 r221621  
    6363    _WKResourceLimitMemory,
    6464    _WKResourceLimitCPU,
     65} WK_API_AVAILABLE(macosx(WK_MAC_TBA));
     66
     67typedef NS_ENUM(NSInteger, _WKPlugInUnavailabilityReason) {
     68    _WKPlugInUnavailabilityReasonPluginMissing,
     69    _WKPlugInUnavailabilityReasonPluginCrashed,
     70    _WKPlugInUnavailabilityReasonInsecurePluginVersion
    6571} WK_API_AVAILABLE(macosx(WK_MAC_TBA));
    6672
     
    154160- (void)_webView:(WKWebView *)webView saveDataToFile:(NSData *)data suggestedFilename:(NSString *)suggestedFilename mimeType:(NSString *)mimeType originatingURL:(NSURL *)url WK_API_AVAILABLE(macosx(WK_MAC_TBA));
    155161- (void)_webView:(WKWebView *)webView didExceedBackgroundResourceLimitWhileInForeground:(_WKResourceLimit)limit WK_API_AVAILABLE(macosx(WK_MAC_TBA));
     162- (void)_webView:(WKWebView *)webView unavailablePlugInButtonClickedWithReason:(_WKPlugInUnavailabilityReason)reason plugInInfo:(NSDictionary *)plugInInfo;
    156163- (NSMenu *)_webView:(WKWebView *)webView contextMenu:(NSMenu *)menu forElement:(_WKContextMenuElementInfo *)element WK_API_AVAILABLE(macosx(10.12));
    157164- (NSMenu *)_webView:(WKWebView *)webView contextMenu:(NSMenu *)menu forElement:(_WKContextMenuElementInfo *)element userInfo:(id <NSSecureCoding>)userInfo WK_API_AVAILABLE(macosx(10.12));
  • trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h

    r221503 r221621  
    103103        void didNotHandleWheelEvent(WebPageProxy*, const NativeWebWheelEvent&) final;
    104104        void handleAutoplayEvent(WebPageProxy&, WebCore::AutoplayEvent, OptionSet<WebCore::AutoplayEventFlags>) final;
     105        void unavailablePluginButtonClicked(WebKit::WebPageProxy&, WKPluginUnavailabilityReason, API::Dictionary&) final;
    105106        void didClickAutoFillButton(WebPageProxy&, API::Object*) final;
    106107        void toolbarsAreVisible(WebKit::WebPageProxy&, Function<void(bool)>&&) final;
     
    153154        bool webViewDidNotHandleWheelEvent : 1;
    154155        bool webViewHandleAutoplayEventWithFlags : 1;
     156        bool webViewUnavailablePlugInButtonClicked : 1;
    155157        bool webViewDidClickAutoFillButtonWithUserInfo : 1;
    156158        bool webViewGetToolbarsAreVisibleWithCompletionHandler : 1;
  • trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm

    r221503 r221621  
    3737#import "WKFrameInfoInternal.h"
    3838#import "WKNSData.h"
     39#import "WKNSDictionary.h"
    3940#import "WKNavigationActionInternal.h"
    4041#import "WKOpenPanelParametersInternal.h"
     
    109110    m_delegateMethods.webViewGetToolbarsAreVisibleWithCompletionHandler = [delegate respondsToSelector:@selector(_webView:getToolbarsAreVisibleWithCompletionHandler:)];
    110111    m_delegateMethods.webViewDidNotHandleWheelEvent = [delegate respondsToSelector:@selector(_webView:didNotHandleWheelEvent:)];
     112    m_delegateMethods.webViewUnavailablePlugInButtonClicked = [delegate respondsToSelector:@selector(_webView:unavailablePlugInButtonClickedWithReason:plugInInfo:)];
    111113    m_delegateMethods.webViewHandleAutoplayEventWithFlags = [delegate respondsToSelector:@selector(_webView:handleAutoplayEvent:withFlags:)];
    112114    m_delegateMethods.webViewDidClickAutoFillButtonWithUserInfo = [delegate respondsToSelector:@selector(_webView:didClickAutoFillButtonWithUserInfo:)];
     
    431433}
    432434
     435static _WKPlugInUnavailabilityReason toWKPlugInUnavailabilityReason(WKPluginUnavailabilityReason reason)
     436{
     437    switch (reason) {
     438    case kWKPluginUnavailabilityReasonPluginMissing:
     439        return _WKPlugInUnavailabilityReasonPluginMissing;
     440    case kWKPluginUnavailabilityReasonPluginCrashed:
     441        return _WKPlugInUnavailabilityReasonPluginCrashed;
     442    case kWKPluginUnavailabilityReasonInsecurePluginVersion:
     443        return _WKPlugInUnavailabilityReasonInsecurePluginVersion;
     444    }
     445    ASSERT_NOT_REACHED();
     446    return _WKPlugInUnavailabilityReasonPluginMissing;
     447}
     448   
     449void UIDelegate::UIClient::unavailablePluginButtonClicked(WebPageProxy&, WKPluginUnavailabilityReason reason, API::Dictionary& plugInInfo)
     450{
     451    if (!m_uiDelegate.m_delegateMethods.webViewUnavailablePlugInButtonClicked)
     452        return;
     453   
     454    auto delegate = m_uiDelegate.m_delegate.get();
     455    if (!delegate)
     456        return;
     457
     458    [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView unavailablePlugInButtonClickedWithReason:toWKPlugInUnavailabilityReason(reason) plugInInfo:wrapper(plugInInfo)];
     459}
     460   
    433461static _WKResourceLimit toWKResourceLimit(WKResourceLimit limit)
    434462{
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r221503 r221621  
    40164016    MESSAGE_CHECK_URL(pageURLString);
    40174017
    4018     RefPtr<API::Dictionary> pluginInformation;
    40194018    String newMimeType = mimeType;
    40204019    PluginModuleInfo plugin = m_process->processPool().pluginInfoStore().findPlugin(newMimeType, URL(URL(), pluginURLString));
    4021     pluginInformation = createPluginInformationDictionary(plugin, frameURLString, mimeType, pageURLString, pluginspageAttributeURLString, pluginURLString);
     4020    auto pluginInformation = createPluginInformationDictionary(plugin, frameURLString, mimeType, pageURLString, pluginspageAttributeURLString, pluginURLString);
    40224021
    40234022    WKPluginUnavailabilityReason pluginUnavailabilityReason = kWKPluginUnavailabilityReasonPluginMissing;
     
    40364035    }
    40374036
    4038     m_uiClient->unavailablePluginButtonClicked(this, pluginUnavailabilityReason, pluginInformation.get());
     4037    m_uiClient->unavailablePluginButtonClicked(*this, pluginUnavailabilityReason, pluginInformation.get());
    40394038}
    40404039#endif // ENABLE(NETSCAPE_PLUGIN_API)
  • trunk/Tools/ChangeLog

    r221609 r221621  
     12017-09-05  Alex Christensen  <achristensen@webkit.org>
     2
     3        Add WKUIDelegatePrivate equivalent of WKPageUIClient's unavailablePluginButtonClicked
     4        https://bugs.webkit.org/show_bug.cgi?id=176274
     5        <rdar://problem/29270035>
     6
     7        Reviewed by Darin Adler.
     8
     9        * TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm:
     10        (-[PluginDelegate _webView:unavailablePluginButtonClickedWithReason:pluginInfo:]):
     11        (TEST):
     12
    1132017-09-05  Carlos Garcia Campos  <cgarcia@igalia.com>
    214
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/UIDelegate.mm

    r221505 r221621  
    3131#import "Utilities.h"
    3232#import "WKWebViewConfigurationExtras.h"
     33#import <WebKit/WKContextPrivateMac.h>
    3334#import <WebKit/WKPreferencesPrivate.h>
     35#import <WebKit/WKRetainPtr.h>
    3436#import <WebKit/WKUIDelegatePrivate.h>
    3537#import <WebKit/WKWebViewPrivate.h>
     
    121123   
    122124    ASSERT_EQ(webViewFromDelegateCallback, createdWebView);
     125}
     126
     127
     128@interface PlugInDelegate : NSObject <WKUIDelegatePrivate>
     129@end
     130
     131@implementation PlugInDelegate
     132
     133- (void)_webView:(WKWebView *)webView unavailablePlugInButtonClickedWithReason:(_WKPlugInUnavailabilityReason)reason plugInInfo:(NSDictionary *)plugInInfo
     134{
     135    ASSERT_EQ(_WKPlugInUnavailabilityReasonPluginMissing, reason);
     136    ASSERT_TRUE([@"application/x-shockwave-flash" isEqualToString:[plugInInfo objectForKey:@"PluginInformationMIMEType"]]);
     137    done = true;
     138}
     139
     140@end
     141
     142TEST(WebKit, UnavailablePlugIn)
     143{
     144    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
     145    [[configuration preferences] _setPlugInsEnabled:YES];
     146    auto delegate = adoptNS([[PlugInDelegate alloc] init]);
     147    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:configuration.get()]);
     148    [webView setUIDelegate:delegate.get()];
     149    [webView synchronouslyLoadHTMLString:@"<object type='application/x-shockwave-flash'/>"];
     150    [webView sendClicksAtPoint:NSMakePoint(210, 600 - 80) numberOfClicks:1];
     151    TestWebKitAPI::Util::run(&done);
    123152}
    124153
Note: See TracChangeset for help on using the changeset viewer.