From 809b92bd2e752fb3de4c8adc65f9c5a37a85c606 Mon Sep 17 00:00:00 2001 From: Wenson Hsieh Date: Thu, 18 Apr 2019 23:38:53 +0000 Subject: [PATCH] Add new compatibility mode API on WKNavigation https://bugs.webkit.org/show_bug.cgi?id=197069 Reviewed by Tim Horton. Source/WebKit: Adds a new property on WKNavigation. * Shared/WebCompatibilityMode.h: Drive-by fix: make this enum class 8 bits wide. * UIProcess/API/APINavigation.h: (API::Navigation::setEffectiveCompatibilityMode): (API::Navigation::effectiveCompatibilityMode const): Add a new member variable to API::Navigation. * UIProcess/API/Cocoa/WKNavigation.h: * UIProcess/API/Cocoa/WKNavigation.mm: * UIProcess/API/Cocoa/WKWebpagePreferences.mm: * UIProcess/API/Cocoa/WKWebpagePreferencesInternal.h: Add various hooks into WebKitAdditions. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::decidePolicyForNavigationAction): Set API::Navigation's effective compatibility mode. (WebKit::WebPageProxy::effectiveCompatibilityModeAfterAdjustingPolicies): Renamed and refactored this method to return the effective compatibility mode, chosen while adjusting website policies. (WebKit::WebPageProxy::adjustPoliciesForCompatibilityMode): Deleted. * UIProcess/WebPageProxy.h: Tools: Add a block property for -didCommitNavigation to TestNavigationDelegate. * TestWebKitAPI/cocoa/TestNavigationDelegate.h: * TestWebKitAPI/cocoa/TestNavigationDelegate.mm: (-[TestNavigationDelegate webView:didCommitNavigation:]): Canonical link: https://commits.webkit.org/211326@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@244444 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- Source/WebKit/ChangeLog | 40 +++++++++++++++++++ Source/WebKit/Shared/WebCompatibilityMode.h | 2 +- Source/WebKit/UIProcess/API/APINavigation.h | 5 +++ .../WebKit/UIProcess/API/Cocoa/WKNavigation.h | 5 +++ .../UIProcess/API/Cocoa/WKNavigation.mm | 5 +++ .../API/Cocoa/WKWebpagePreferences.mm | 6 ++- .../API/Cocoa/WKWebpagePreferencesInternal.h | 4 ++ Source/WebKit/UIProcess/WebPageProxy.cpp | 5 ++- Source/WebKit/UIProcess/WebPageProxy.h | 3 +- Tools/ChangeLog | 14 +++++++ .../cocoa/TestNavigationDelegate.h | 1 + .../cocoa/TestNavigationDelegate.mm | 6 +++ 12 files changed, 91 insertions(+), 5 deletions(-) diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog index 427920a35061..7457e498de7e 100644 --- a/Source/WebKit/ChangeLog +++ b/Source/WebKit/ChangeLog @@ -1,3 +1,43 @@ +2019-04-18 Wenson Hsieh + + Add new compatibility mode API on WKNavigation + https://bugs.webkit.org/show_bug.cgi?id=197069 + + + Reviewed by Tim Horton. + + Adds a new property on WKNavigation. + + * Shared/WebCompatibilityMode.h: + + Drive-by fix: make this enum class 8 bits wide. + + * UIProcess/API/APINavigation.h: + (API::Navigation::setEffectiveCompatibilityMode): + (API::Navigation::effectiveCompatibilityMode const): + + Add a new member variable to API::Navigation. + + * UIProcess/API/Cocoa/WKNavigation.h: + * UIProcess/API/Cocoa/WKNavigation.mm: + * UIProcess/API/Cocoa/WKWebpagePreferences.mm: + * UIProcess/API/Cocoa/WKWebpagePreferencesInternal.h: + + Add various hooks into WebKitAdditions. + + * UIProcess/WebPageProxy.cpp: + (WebKit::WebPageProxy::decidePolicyForNavigationAction): + + Set API::Navigation's effective compatibility mode. + + (WebKit::WebPageProxy::effectiveCompatibilityModeAfterAdjustingPolicies): + + Renamed and refactored this method to return the effective compatibility mode, chosen while adjusting website + policies. + + (WebKit::WebPageProxy::adjustPoliciesForCompatibilityMode): Deleted. + * UIProcess/WebPageProxy.h: + 2019-04-18 Don Olmstead [CMake] Make WebCore headers copies diff --git a/Source/WebKit/Shared/WebCompatibilityMode.h b/Source/WebKit/Shared/WebCompatibilityMode.h index 91b5bb185c44..cedf18f7b8ee 100644 --- a/Source/WebKit/Shared/WebCompatibilityMode.h +++ b/Source/WebKit/Shared/WebCompatibilityMode.h @@ -29,7 +29,7 @@ namespace WebKit { -enum class WebCompatibilityMode { +enum class WebCompatibilityMode : uint8_t { Recommended, Legacy, Modern, diff --git a/Source/WebKit/UIProcess/API/APINavigation.h b/Source/WebKit/UIProcess/API/APINavigation.h index bba071969a6a..92418f885f8b 100644 --- a/Source/WebKit/UIProcess/API/APINavigation.h +++ b/Source/WebKit/UIProcess/API/APINavigation.h @@ -30,6 +30,7 @@ #include "FrameInfoData.h" #include "NavigationActionData.h" #include "WebBackForwardListItem.h" +#include "WebCompatibilityMode.h" #include #include #include @@ -141,6 +142,9 @@ class Navigation : public ObjectImpl { void setDestinationFrameSecurityOrigin(const WebCore::SecurityOriginData& origin) { m_destinationFrameSecurityOrigin = origin; } const WebCore::SecurityOriginData& destinationFrameSecurityOrigin() const { return m_destinationFrameSecurityOrigin; } + void setEffectiveCompatibilityMode(WebKit::WebCompatibilityMode compatibilityMode) { m_effectiveCompatibilityMode = compatibilityMode; } + WebKit::WebCompatibilityMode effectiveCompatibilityMode() const { return m_effectiveCompatibilityMode; } + #if !LOG_DISABLED const char* loggingString() const; #endif @@ -169,6 +173,7 @@ class Navigation : public ObjectImpl { WebKit::FrameInfoData m_originatingFrameInfo; WebCore::SecurityOriginData m_destinationFrameSecurityOrigin; bool m_userContentExtensionsEnabled { true }; + WebKit::WebCompatibilityMode m_effectiveCompatibilityMode { WebKit::WebCompatibilityMode::Recommended }; }; } // namespace API diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKNavigation.h b/Source/WebKit/UIProcess/API/Cocoa/WKNavigation.h index 357451e3ec04..e881dfc6a100 100644 --- a/Source/WebKit/UIProcess/API/Cocoa/WKNavigation.h +++ b/Source/WebKit/UIProcess/API/Cocoa/WKNavigation.h @@ -26,6 +26,7 @@ #import #import +#import /*! A WKNavigation object can be used for tracking the loading progress of a webpage. @discussion A navigation is returned from the web view load methods, and is @@ -35,4 +36,8 @@ WK_CLASS_AVAILABLE(macos(10.10), ios(8.0)) @interface WKNavigation : NSObject +#if USE(APPLE_INTERNAL_SDK) +#import +#endif + @end diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKNavigation.mm b/Source/WebKit/UIProcess/API/Cocoa/WKNavigation.mm index fdb4490f029d..905309c9e8c2 100644 --- a/Source/WebKit/UIProcess/API/Cocoa/WKNavigation.mm +++ b/Source/WebKit/UIProcess/API/Cocoa/WKNavigation.mm @@ -25,6 +25,7 @@ #import "config.h" #import "WKNavigationInternal.h" +#import "WKWebpagePreferencesInternal.h" #import "APINavigation.h" @@ -44,6 +45,10 @@ - (NSURLRequest *)_request return _navigation->originalRequest().nsURLRequest(WebCore::HTTPBodyUpdatePolicy::DoNotUpdateHTTPBody); } +#if USE(APPLE_INTERNAL_SDK) +#import +#endif + #pragma mark WKObject protocol implementation - (API::Object&)_apiObject diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferences.mm b/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferences.mm index b431d84159e8..9f5cd76f2fe6 100644 --- a/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferences.mm +++ b/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferences.mm @@ -32,6 +32,10 @@ #import "_WKWebsitePoliciesInternal.h" #import +#if USE(APPLE_INTERNAL_SDK) +#import +#endif + @implementation WKWebpagePreferences + (instancetype)defaultPreferences @@ -278,7 +282,7 @@ - (NSString *)_customNavigatorPlatform } #if USE(APPLE_INTERNAL_SDK) -#import +#import #endif @end diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferencesInternal.h b/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferencesInternal.h index 6d8130f34398..db611887c93d 100644 --- a/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferencesInternal.h +++ b/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferencesInternal.h @@ -36,6 +36,10 @@ template<> struct WrapperTraits { using WrapperClass = WKWebpagePreferences; }; +#if USE(APPLE_INTERNAL_SDK) +#import +#endif + } @interface WKWebpagePreferences () { diff --git a/Source/WebKit/UIProcess/WebPageProxy.cpp b/Source/WebKit/UIProcess/WebPageProxy.cpp index bbf043faf9ea..14ca021de284 100644 --- a/Source/WebKit/UIProcess/WebPageProxy.cpp +++ b/Source/WebKit/UIProcess/WebPageProxy.cpp @@ -4592,7 +4592,7 @@ void WebPageProxy::decidePolicyForNavigationAction(Ref&& proces policies = defaultPolicies->copy(); } if (policies) - adjustPoliciesForCompatibilityMode(*policies); + navigation->setEffectiveCompatibilityMode(effectiveCompatibilityModeAfterAdjustingPolicies(*policies)); } receivedNavigationPolicyDecision(policyAction, navigation.get(), processSwapRequestedByClient, frame, policies.get(), WTFMove(sender)); }; @@ -8999,8 +8999,9 @@ void WebPageProxy::speechSynthesisResume(CompletionHandler&& completionH #if !PLATFORM(IOS_FAMILY) || !USE(APPLE_INTERNAL_SDK) -void WebPageProxy::adjustPoliciesForCompatibilityMode(API::WebsitePolicies&) +WebCompatibilityMode WebPageProxy::effectiveCompatibilityModeAfterAdjustingPolicies(API::WebsitePolicies&) { + return WebCompatibilityMode::Recommended; } #endif // !PLATFORM(IOS_FAMILY) || !USE(APPLE_INTERNAL_SDK) diff --git a/Source/WebKit/UIProcess/WebPageProxy.h b/Source/WebKit/UIProcess/WebPageProxy.h index 0845d15683fd..8f812fb266a8 100644 --- a/Source/WebKit/UIProcess/WebPageProxy.h +++ b/Source/WebKit/UIProcess/WebPageProxy.h @@ -293,6 +293,7 @@ struct URLSchemeTaskParameters; enum class ProcessSwapRequestedByClient; enum class UndoOrRedo : bool; +enum class WebCompatibilityMode : uint8_t; #if USE(QUICK_LOOK) class QuickLookDocumentData; @@ -1625,7 +1626,7 @@ WEBPAGEPROXY_LOADOPTIMIZER_ADDITIONS_1 void unableToImplementPolicy(uint64_t frameID, const WebCore::ResourceError&, const UserData&); void beginSafeBrowsingCheck(const URL&, bool, WebFramePolicyListenerProxy&); - void adjustPoliciesForCompatibilityMode(API::WebsitePolicies&); + WebCompatibilityMode effectiveCompatibilityModeAfterAdjustingPolicies(API::WebsitePolicies&); void willSubmitForm(uint64_t frameID, uint64_t sourceFrameID, const Vector>& textFieldValues, uint64_t listenerID, const UserData&); diff --git a/Tools/ChangeLog b/Tools/ChangeLog index 108af91b8996..ccae8d9ffdc0 100644 --- a/Tools/ChangeLog +++ b/Tools/ChangeLog @@ -1,3 +1,17 @@ +2019-04-18 Wenson Hsieh + + Add new compatibility mode API on WKNavigation + https://bugs.webkit.org/show_bug.cgi?id=197069 + + + Reviewed by Tim Horton. + + Add a block property for -didCommitNavigation to TestNavigationDelegate. + + * TestWebKitAPI/cocoa/TestNavigationDelegate.h: + * TestWebKitAPI/cocoa/TestNavigationDelegate.mm: + (-[TestNavigationDelegate webView:didCommitNavigation:]): + 2019-04-18 Don Olmstead [CMake] Make WebCore headers copies diff --git a/Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.h b/Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.h index 75a83c20577b..effbd49915b1 100644 --- a/Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.h +++ b/Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.h @@ -33,6 +33,7 @@ @property (nonatomic, copy) void (^decidePolicyForNavigationAction)(WKNavigationAction *, void (^)(WKNavigationActionPolicy)); @property (nonatomic, copy) void (^didFailProvisionalNavigation)(WKWebView *, WKNavigation *, NSError *); @property (nonatomic, copy) void (^didStartProvisionalNavigation)(WKWebView *, WKNavigation *); +@property (nonatomic, copy) void (^didCommitNavigation)(WKWebView *, WKNavigation *); @property (nonatomic, copy) void (^didFinishNavigation)(WKWebView *, WKNavigation *); @property (nonatomic, copy) void (^renderingProgressDidChange)(WKWebView *, _WKRenderingProgressEvents); @property (nonatomic, copy) void (^webContentProcessDidTerminate)(WKWebView *); diff --git a/Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.mm b/Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.mm index 9a18358cda28..742ac7a812ca 100644 --- a/Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.mm +++ b/Tools/TestWebKitAPI/cocoa/TestNavigationDelegate.mm @@ -45,6 +45,12 @@ - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation _didStartProvisionalNavigation(webView, navigation); } +- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation +{ + if (_didCommitNavigation) + _didCommitNavigation(webView, navigation); +} + - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error { if (_didFailProvisionalNavigation)