⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 286831 in webkit


Ignore:
Timestamp:
Dec 9, 2021, 9:05:27 PM (5 years ago)
Author:
Wenson Hsieh
Message:

Add a new WKWebpagePreferences SPI for modal container observation policies
https://bugs.webkit.org/show_bug.cgi?id=234013
rdar://86219613

Reviewed by Brent Fulgham.

Source/WebCore:

Add a new website policy flag ModalContainerObservationPolicy. Refer to rdar://86219613 for more info.

  • loader/DocumentLoader.h:

(WebCore::DocumentLoader::modalContainerObservationPolicy const):
(WebCore::DocumentLoader::setModalContainerObservationPolicy):

Source/WebKit:

Add a new website policy flag ModalContainerObservationPolicy, and expose it as SPI on WKWebpagePreferences.
Refer to rdar://86219613 for additional details.

  • Shared/WebsitePoliciesData.cpp:

(WebKit::WebsitePoliciesData::encode const):
(WebKit::WebsitePoliciesData::decode):
(WebKit::WebsitePoliciesData::applyToDocumentLoader):

  • Shared/WebsitePoliciesData.h:
  • UIProcess/API/APIWebsitePolicies.cpp:

(API::WebsitePolicies::copy const):
(API::WebsitePolicies::data):

  • UIProcess/API/APIWebsitePolicies.h:
  • UIProcess/API/Cocoa/WKWebpagePreferences.mm:

(WebKit::modalContainerObservationPolicy):
(WebKit::coreModalContainerObservationPolicy):
(-[WKWebpagePreferences _setModalContainerObservationPolicy:]):
(-[WKWebpagePreferences _modalContainerObservationPolicy]):

  • UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h:
Location:
trunk/Source
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r286827 r286831  
     12021-12-09  Wenson Hsieh  <wenson_hsieh@apple.com>
     2
     3        Add a new WKWebpagePreferences SPI for modal container observation policies
     4        https://bugs.webkit.org/show_bug.cgi?id=234013
     5        rdar://86219613
     6
     7        Reviewed by Brent Fulgham.
     8
     9        Add a new website policy flag `ModalContainerObservationPolicy`. Refer to rdar://86219613 for more info.
     10
     11        * loader/DocumentLoader.h:
     12        (WebCore::DocumentLoader::modalContainerObservationPolicy const):
     13        (WebCore::DocumentLoader::setModalContainerObservationPolicy):
     14
    1152021-12-09  Cathie Chen  <cathiechen@igalia.com>
    216
  • trunk/Source/WebCore/loader/DocumentLoader.h

    r286545 r286831  
    145145};
    146146
     147enum class ModalContainerObservationPolicy : uint8_t {
     148    Disabled,
     149    Prompt,
     150    Allow,
     151    Disallow,
     152};
     153
    147154DECLARE_ALLOCATOR_WITH_HEAP_IDENTIFIER(DocumentLoader);
    148155class DocumentLoader
     
    343350    WEBCORE_EXPORT MouseEventPolicy mouseEventPolicy() const;
    344351    void setMouseEventPolicy(MouseEventPolicy policy) { m_mouseEventPolicy = policy; }
     352
     353    ModalContainerObservationPolicy modalContainerObservationPolicy() const { return m_modalContainerObservationPolicy; }
     354    void setModalContainerObservationPolicy(ModalContainerObservationPolicy policy) { m_modalContainerObservationPolicy = policy; }
    345355
    346356    void addSubresourceLoader(ResourceLoader&);
     
    668678    LegacyOverflowScrollingTouchPolicy m_legacyOverflowScrollingTouchPolicy { LegacyOverflowScrollingTouchPolicy::Default };
    669679    MouseEventPolicy m_mouseEventPolicy { MouseEventPolicy::Default };
     680    ModalContainerObservationPolicy m_modalContainerObservationPolicy { ModalContainerObservationPolicy::Disabled };
    670681
    671682#if ENABLE(SERVICE_WORKER)
     
    783794};
    784795
     796template<> struct EnumTraits<WebCore::ModalContainerObservationPolicy> {
     797    using values = EnumValues<
     798        WebCore::ModalContainerObservationPolicy,
     799        WebCore::ModalContainerObservationPolicy::Disabled,
     800        WebCore::ModalContainerObservationPolicy::Prompt,
     801        WebCore::ModalContainerObservationPolicy::Allow,
     802        WebCore::ModalContainerObservationPolicy::Disallow
     803    >;
     804};
     805
    785806} // namespace WTF
  • trunk/Source/WebKit/ChangeLog

    r286830 r286831  
     12021-12-09  Wenson Hsieh  <wenson_hsieh@apple.com>
     2
     3        Add a new WKWebpagePreferences SPI for modal container observation policies
     4        https://bugs.webkit.org/show_bug.cgi?id=234013
     5        rdar://86219613
     6
     7        Reviewed by Brent Fulgham.
     8
     9        Add a new website policy flag `ModalContainerObservationPolicy`, and expose it as SPI on WKWebpagePreferences.
     10        Refer to rdar://86219613 for additional details.
     11
     12        * Shared/WebsitePoliciesData.cpp:
     13        (WebKit::WebsitePoliciesData::encode const):
     14        (WebKit::WebsitePoliciesData::decode):
     15        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
     16        * Shared/WebsitePoliciesData.h:
     17        * UIProcess/API/APIWebsitePolicies.cpp:
     18        (API::WebsitePolicies::copy const):
     19        (API::WebsitePolicies::data):
     20        * UIProcess/API/APIWebsitePolicies.h:
     21        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
     22        (WebKit::modalContainerObservationPolicy):
     23        (WebKit::coreModalContainerObservationPolicy):
     24        (-[WKWebpagePreferences _setModalContainerObservationPolicy:]):
     25        (-[WKWebpagePreferences _modalContainerObservationPolicy]):
     26        * UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h:
     27
    1282021-12-09  Jigen Zhou  <jigen.zhou@sony.com>
    229
  • trunk/Source/WebKit/Shared/WebsitePoliciesData.cpp

    r286545 r286831  
    5555    encoder << allowsContentJavaScript;
    5656    encoder << mouseEventPolicy;
     57    encoder << modalContainerObservationPolicy;
    5758    encoder << idempotentModeAutosizingOnlyHonorsPercentages;
    5859}
     
    145146    decoder >> mouseEventPolicy;
    146147    if (!mouseEventPolicy)
     148        return std::nullopt;
     149
     150    std::optional<WebCore::ModalContainerObservationPolicy> modalContainerObservationPolicy;
     151    decoder >> modalContainerObservationPolicy;
     152    if (!modalContainerObservationPolicy)
    147153        return std::nullopt;
    148154
     
    172178        WTFMove(*allowsContentJavaScript),
    173179        WTFMove(*mouseEventPolicy),
     180        WTFMove(*modalContainerObservationPolicy),
    174181        WTFMove(*idempotentModeAutosizingOnlyHonorsPercentages),
    175182    } };
     
    296303    }
    297304
     305    documentLoader.setModalContainerObservationPolicy(websitePolicies.modalContainerObservationPolicy);
    298306    documentLoader.setAllowContentChangeObserverQuirk(websitePolicies.allowContentChangeObserverQuirk);
    299307    documentLoader.setIdempotentModeAutosizingOnlyHonorsPercentages(websitePolicies.idempotentModeAutosizingOnlyHonorsPercentages);
  • trunk/Source/WebKit/Shared/WebsitePoliciesData.h

    r286545 r286831  
    7272    WebCore::AllowsContentJavaScript allowsContentJavaScript { WebCore::AllowsContentJavaScript::Yes };
    7373    WebCore::MouseEventPolicy mouseEventPolicy { WebCore::MouseEventPolicy::Default };
     74    WebCore::ModalContainerObservationPolicy modalContainerObservationPolicy { WebCore::ModalContainerObservationPolicy::Disabled };
    7475    bool idempotentModeAutosizingOnlyHonorsPercentages { false };
    7576
  • trunk/Source/WebKit/UIProcess/API/APIWebsitePolicies.cpp

    r285980 r286831  
    7777    policies->setCaptivePortalModeEnabled(m_captivePortalModeEnabled);
    7878    policies->setMouseEventPolicy(m_mouseEventPolicy);
     79    policies->setModalContainerObservationPolicy(m_modalContainerObservationPolicy);
    7980    return policies;
    8081}
     
    122123        m_allowsContentJavaScript,
    123124        m_mouseEventPolicy,
     125        m_modalContainerObservationPolicy,
    124126        m_idempotentModeAutosizingOnlyHonorsPercentages
    125127    };
  • trunk/Source/WebKit/UIProcess/API/APIWebsitePolicies.h

    r286602 r286831  
    136136    void setMouseEventPolicy(WebCore::MouseEventPolicy policy) { m_mouseEventPolicy = policy; }
    137137
     138    WebCore::ModalContainerObservationPolicy modalContainerObservationPolicy() const { return m_modalContainerObservationPolicy; }
     139    void setModalContainerObservationPolicy(WebCore::ModalContainerObservationPolicy policy) { m_modalContainerObservationPolicy = policy; }
     140
    138141    bool idempotentModeAutosizingOnlyHonorsPercentages() const { return m_idempotentModeAutosizingOnlyHonorsPercentages; }
    139142    void setIdempotentModeAutosizingOnlyHonorsPercentages(bool idempotentModeAutosizingOnlyHonorsPercentages) { m_idempotentModeAutosizingOnlyHonorsPercentages = idempotentModeAutosizingOnlyHonorsPercentages; }
     
    166169    WebCore::AllowsContentJavaScript m_allowsContentJavaScript { WebCore::AllowsContentJavaScript::Yes };
    167170    WebCore::MouseEventPolicy m_mouseEventPolicy { WebCore::MouseEventPolicy::Default };
     171    WebCore::ModalContainerObservationPolicy m_modalContainerObservationPolicy { WebCore::ModalContainerObservationPolicy::Disabled };
    168172    bool m_idempotentModeAutosizingOnlyHonorsPercentages { false };
    169173    std::optional<bool> m_captivePortalModeEnabled;
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferences.mm

    r286661 r286831  
    105105}
    106106
     107static _WKWebsiteModalContainerObservationPolicy modalContainerObservationPolicy(WebCore::ModalContainerObservationPolicy policy)
     108{
     109    switch (policy) {
     110    case WebCore::ModalContainerObservationPolicy::Disabled:
     111        return _WKWebsiteModalContainerObservationPolicyDisabled;
     112    case WebCore::ModalContainerObservationPolicy::Prompt:
     113        return _WKWebsiteModalContainerObservationPolicyPrompt;
     114    case WebCore::ModalContainerObservationPolicy::Allow:
     115        return _WKWebsiteModalContainerObservationPolicyAllow;
     116    case WebCore::ModalContainerObservationPolicy::Disallow:
     117        return _WKWebsiteModalContainerObservationPolicyDisallow;
     118    }
     119    ASSERT_NOT_REACHED();
     120    return _WKWebsiteModalContainerObservationPolicyDisabled;
     121}
     122
     123static WebCore::ModalContainerObservationPolicy coreModalContainerObservationPolicy(_WKWebsiteModalContainerObservationPolicy policy)
     124{
     125    switch (policy) {
     126    case _WKWebsiteModalContainerObservationPolicyDisabled:
     127        return WebCore::ModalContainerObservationPolicy::Disabled;
     128    case _WKWebsiteModalContainerObservationPolicyPrompt:
     129        return WebCore::ModalContainerObservationPolicy::Prompt;
     130    case _WKWebsiteModalContainerObservationPolicyAllow:
     131        return WebCore::ModalContainerObservationPolicy::Allow;
     132    case _WKWebsiteModalContainerObservationPolicyDisallow:
     133        return WebCore::ModalContainerObservationPolicy::Disallow;
     134    }
     135    ASSERT_NOT_REACHED();
     136    return WebCore::ModalContainerObservationPolicy::Disabled;
     137}
     138
    107139class WebPagePreferencesCaptivePortalModeObserver final : public CaptivePortalModeObserver {
    108140    WTF_MAKE_FAST_ALLOCATED;
     
    494526}
    495527
     528- (void)_setModalContainerObservationPolicy:(_WKWebsiteModalContainerObservationPolicy)policy
     529{
     530    _websitePolicies->setModalContainerObservationPolicy(WebKit::coreModalContainerObservationPolicy(policy));
     531}
     532
     533- (_WKWebsiteModalContainerObservationPolicy)_modalContainerObservationPolicy
     534{
     535    return WebKit::modalContainerObservationPolicy(_websitePolicies->modalContainerObservationPolicy());
     536}
     537
    496538#if USE(APPLE_INTERNAL_SDK)
    497539#import <WebKitAdditions/WKWebpagePreferencesAdditions.mm>
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferencesPrivate.h

    r286545 r286831  
    6363} WK_API_AVAILABLE(macos(11.0), ios(14.0));
    6464
     65typedef NS_OPTIONS(NSUInteger, _WKWebsiteModalContainerObservationPolicy) {
     66    _WKWebsiteModalContainerObservationPolicyDisabled,
     67    _WKWebsiteModalContainerObservationPolicyPrompt,
     68    _WKWebsiteModalContainerObservationPolicyAllow,
     69    _WKWebsiteModalContainerObservationPolicyDisallow,
     70} WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
     71
    6572@class _WKCustomHeaderFields;
    6673@class WKUserContentController;
     
    8693
    8794@property (nonatomic, setter=_setMouseEventPolicy:) _WKWebsiteMouseEventPolicy _mouseEventPolicy WK_API_AVAILABLE(macos(11.0), ios(14.0));
     95@property (nonatomic, setter=_setModalContainerObservationPolicy:) _WKWebsiteModalContainerObservationPolicy _modalContainerObservationPolicy WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
    8896
    8997@property (nonatomic, setter=_setCaptivePortalModeEnabled:) BOOL _captivePortalModeEnabled WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
Note: See TracChangeset for help on using the changeset viewer.