WebKit Bugzilla
Attachment 342701 Details for
Bug 186611
: Disable AR support in WKWebView clients
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-186611-20180614085242.patch (text/plain), 18.00 KB, created by
Dean Jackson
on 2018-06-13 15:52:44 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Dean Jackson
Created:
2018-06-13 15:52:44 PDT
Size:
18.00 KB
patch
obsolete
>Subversion Revision: 232551 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 84bdcfc1e2a8d5c074373c679591b519222613a6..aac0ef0ff81927f9a38e9e52021c834aba698bcf 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,30 @@ >+2018-06-13 Dean Jackson <dino@apple.com> >+ >+ Disable AR support in WKWebView clients >+ https://bugs.webkit.org/show_bug.cgi?id=186611 >+ <rdar://problem/39544684> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Since it hasn't been adequately tested, System Preview (AR) should >+ be disabled by default for WKWebViews. >+ >+ Add a new RuntimeEnabledFeature to control this, and guard for >+ this case everywhere we use system previews. >+ >+ * html/HTMLAnchorElement.cpp: >+ (WebCore::HTMLAnchorElement::isSystemPreviewLink const): >+ (WebCore::HTMLAnchorElement::handleClick): >+ * html/HTMLImageElement.cpp: >+ (WebCore::HTMLImageElement::isSystemPreviewImage const): >+ * html/HTMLPictureElement.cpp: >+ (WebCore::HTMLPictureElement::isSystemPreviewImage const): >+ * page/RuntimeEnabledFeatures.h: >+ (WebCore::RuntimeEnabledFeatures::setSystemPreviewEnabled): >+ (WebCore::RuntimeEnabledFeatures::systemPreviewEnabled const): >+ * rendering/RenderImage.cpp: >+ (WebCore::RenderImage::paintIntoRect): >+ > 2018-06-08 Dean Jackson <dino@apple.com> > > 'setRenderPipelineState:' is unavailable: not available on iOS >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 1c8434d9f6d05d2824b2c1d89ed5b413f9148ca5..a45f05b3a1a0e78bb7cff486727a2a7c9b662434 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,35 @@ >+2018-06-13 Dean Jackson <dino@apple.com> >+ >+ Disable AR support in WKWebView clients >+ https://bugs.webkit.org/show_bug.cgi?id=186611 >+ <rdar://problem/39544684> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Since it hasn't been adequately tested, System Preview (AR) should >+ be disabled by default for WKWebViews. >+ >+ Add a new WebPreference, and SPI into WKWebViewConfiguration. Also >+ don't register the WebViewContentProvider if the feature is >+ disabled. >+ >+ * Shared/WebPreferences.yaml: >+ * UIProcess/API/Cocoa/WKWebView.mm: >+ (-[WKWebView _initializeWithConfiguration:]): >+ * UIProcess/API/Cocoa/WKWebViewConfiguration.mm: >+ (-[WKWebViewConfiguration init]): >+ (-[WKWebViewConfiguration encodeWithCoder:]): >+ (-[WKWebViewConfiguration initWithCoder:]): >+ (-[WKWebViewConfiguration copyWithZone:]): >+ (-[WKWebViewConfiguration _contentProviderRegistry]): >+ (-[WKWebViewConfiguration _systemPreviewEnabled]): >+ (-[WKWebViewConfiguration _setSystemPreviewEnabled:]): >+ * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h: >+ * UIProcess/Cocoa/WKWebViewContentProviderRegistry.h: >+ * UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm: >+ (-[WKWebViewContentProviderRegistry initWithConfiguration:]): >+ (-[WKWebViewContentProviderRegistry init]): Deleted. >+ > 2018-06-07 Dean Jackson <dino@apple.com> > > Match HI spec for thumbnail view sizing and location >diff --git a/Source/WebCore/html/HTMLAnchorElement.cpp b/Source/WebCore/html/HTMLAnchorElement.cpp >index aae8b6bc2766a778256b1d7a68379f321a28026c..08ca042a76433421ac448c40da8ffd073158f6dc 100644 >--- a/Source/WebCore/html/HTMLAnchorElement.cpp >+++ b/Source/WebCore/html/HTMLAnchorElement.cpp >@@ -380,6 +380,9 @@ void HTMLAnchorElement::sendPings(const URL& destinationURL) > #if USE(SYSTEM_PREVIEW) > bool HTMLAnchorElement::isSystemPreviewLink() const > { >+ if (!RuntimeEnabledFeatures::sharedFeatures().systemPreviewEnabled()) >+ return false; >+ > #if USE(APPLE_INTERNAL_SDK) > auto systemPreviewRelValue = getSystemPreviewRelValue(); > #else >@@ -428,7 +431,7 @@ void HTMLAnchorElement::handleClick(Event& event) > > SystemPreviewInfo systemPreviewInfo; > #if USE(SYSTEM_PREVIEW) >- systemPreviewInfo.isSystemPreview = isSystemPreviewLink(); >+ systemPreviewInfo.isSystemPreview = isSystemPreviewLink() && RuntimeEnabledFeatures::sharedFeatures().systemPreviewEnabled(); > > if (systemPreviewInfo.isSystemPreview) { > if (auto* child = firstElementChild()) >diff --git a/Source/WebCore/html/HTMLImageElement.cpp b/Source/WebCore/html/HTMLImageElement.cpp >index 57399a4d4552c6e972d878e3d16b0c43870e8d48..2f0291609f7f889d640829ebf5a3ae778503ed44 100644 >--- a/Source/WebCore/html/HTMLImageElement.cpp >+++ b/Source/WebCore/html/HTMLImageElement.cpp >@@ -42,6 +42,7 @@ > #include "NodeTraversal.h" > #include "RenderImage.h" > #include "RenderView.h" >+#include "RuntimeEnabledFeatures.h" > #include "Settings.h" > #include "ShadowRoot.h" > #include "SizesAttributeParser.h" >@@ -686,6 +687,9 @@ bool HTMLImageElement::willRespondToMouseClickEvents() > #if USE(SYSTEM_PREVIEW) > bool HTMLImageElement::isSystemPreviewImage() const > { >+ if (!RuntimeEnabledFeatures::sharedFeatures().systemPreviewEnabled()) >+ return false; >+ > const auto* parent = parentElement(); > if (is<HTMLAnchorElement>(parent)) > return downcast<HTMLAnchorElement>(parent)->isSystemPreviewLink(); >diff --git a/Source/WebCore/html/HTMLPictureElement.cpp b/Source/WebCore/html/HTMLPictureElement.cpp >index e9c6e7ef9db6480008ab8b1c22b9d325d5e7f130..aa2aad6de6a42365f491b9c189411551d37857a7 100644 >--- a/Source/WebCore/html/HTMLPictureElement.cpp >+++ b/Source/WebCore/html/HTMLPictureElement.cpp >@@ -30,6 +30,7 @@ > #include "HTMLAnchorElement.h" > #include "HTMLImageElement.h" > #include "Logging.h" >+#include "RuntimeEnabledFeatures.h" > #include <wtf/IsoMallocInlines.h> > > namespace WebCore { >@@ -79,6 +80,9 @@ bool HTMLPictureElement::viewportChangeAffectedPicture() const > #if USE(SYSTEM_PREVIEW) > bool HTMLPictureElement::isSystemPreviewImage() const > { >+ if (!RuntimeEnabledFeatures::sharedFeatures().systemPreviewEnabled()) >+ return false; >+ > const auto* parent = parentElement(); > if (!is<HTMLAnchorElement>(parent)) > return false; >diff --git a/Source/WebCore/page/RuntimeEnabledFeatures.h b/Source/WebCore/page/RuntimeEnabledFeatures.h >index 6a687fe3655f2cd3ec05e24820cfe6185fe6e437..8ac422ec490e36f4417c7aef7d57a14aa139c1a1 100644 >--- a/Source/WebCore/page/RuntimeEnabledFeatures.h >+++ b/Source/WebCore/page/RuntimeEnabledFeatures.h >@@ -265,6 +265,11 @@ public: > void setDisabledAdaptationsMetaTagEnabled(bool isEnabled) { m_disabledAdaptationsMetaTagEnabled = isEnabled; } > bool disabledAdaptationsMetaTagEnabled() const { return m_disabledAdaptationsMetaTagEnabled; } > >+#if USE(SYSTEM_PREVIEW) >+ void setSystemPreviewEnabled(bool isEnabled) { m_systemPreviewEnabled = isEnabled; } >+ bool systemPreviewEnabled() const { return m_systemPreviewEnabled; } >+#endif >+ > WEBCORE_EXPORT static RuntimeEnabledFeatures& sharedFeatures(); > > private: >@@ -280,7 +285,6 @@ private: > bool m_isInteractiveFormValidationEnabled { false }; > bool m_isWebAuthenticationEnabled { false }; > bool m_isSecureContextAttributeEnabled { false }; >- > bool m_isDisplayContentsEnabled { true }; > bool m_isShadowDOMEnabled { true }; > bool m_areCustomElementsEnabled { true }; >@@ -363,7 +367,6 @@ private: > #endif > > bool m_isImageBitmapOffscreenCanvasEnabled { true }; >- > bool m_isCacheAPIEnabled { false }; > bool m_isFetchAPIEnabled { true }; > >@@ -386,29 +389,24 @@ private: > #if ENABLE(SERVICE_WORKER) > bool m_serviceWorkerEnabled { false }; > #endif >- bool m_fetchAPIKeepAliveEnabled { false }; > >+ bool m_fetchAPIKeepAliveEnabled { false }; > bool m_inspectorAdditionsEnabled { false }; > bool m_webVREnabled { false }; >- > bool m_accessibilityObjectModelEnabled { false }; >- > bool m_mediaCapabilitiesEnabled { false }; >- > bool m_resourceLoadStatisticsDebugMode { false }; >- > bool m_isRestrictedHTTPResponseAccess { true }; >- > bool m_crossOriginResourcePolicyEnabled { true }; >- > bool m_isWebGLCompressedTextureASTCSupportEnabled { false }; >- > bool m_promptForStorageAccessAPIEnabled { false }; >- > bool m_isServerTimingEnabled { false }; >- > bool m_disabledAdaptationsMetaTagEnabled { false }; > >+#if USE(SYSTEM_PREVIEW) >+ bool m_systemPreviewEnabled { false }; >+#endif >+ > friend class WTF::NeverDestroyed<RuntimeEnabledFeatures>; > }; > >diff --git a/Source/WebCore/rendering/RenderImage.cpp b/Source/WebCore/rendering/RenderImage.cpp >index 92422b362a412746f4589f1e6dc732ceb718e84b..7fbe6cf5f5c4e46f0095ddb80e9a5bffa6cfe460 100644 >--- a/Source/WebCore/rendering/RenderImage.cpp >+++ b/Source/WebCore/rendering/RenderImage.cpp >@@ -51,6 +51,7 @@ > #include "RenderImageResourceStyleImage.h" > #include "RenderTheme.h" > #include "RenderView.h" >+#include "RuntimeEnabledFeatures.h" > #include "SVGImage.h" > #include <wtf/IsoMallocInlines.h> > #include <wtf/StackStats.h> >@@ -594,7 +595,7 @@ ImageDrawResult RenderImage::paintIntoRect(PaintInfo& paintInfo, const FloatRect > imageResource().cachedImage()->addPendingImageDrawingClient(*this); > > #if USE(SYSTEM_PREVIEW) >- if (imageElement && imageElement->isSystemPreviewImage() && drawResult == ImageDrawResult::DidDraw) >+ if (imageElement && imageElement->isSystemPreviewImage() && drawResult == ImageDrawResult::DidDraw && RuntimeEnabledFeatures::sharedFeatures().systemPreviewEnabled()) > theme().paintSystemPreviewBadge(*img, paintInfo, rect); > #endif > >diff --git a/Source/WebKit/Shared/WebPreferences.yaml b/Source/WebKit/Shared/WebPreferences.yaml >index 34246b8547dde4b97e594d5fe8591eafb3a0096a..ac1b5285a5e5b44fc5b0e2abf38ea9693fc0147f 100644 >--- a/Source/WebKit/Shared/WebPreferences.yaml >+++ b/Source/WebKit/Shared/WebPreferences.yaml >@@ -1059,6 +1059,12 @@ MediaCapabilitiesEnabled: > defaultValue: false > webcoreBinding: RuntimeEnabledFeatures > >+SystemPreviewEnabled: >+ type: bool >+ defaultValue: false >+ webcoreBinding: RuntimeEnabledFeatures >+ condition: USE(SYSTEM_PREVIEW) >+ > # For experimental features: > # The type should be boolean. > # You must provide a humanReadableName and humanReadableName for all experimental features. They >diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm b/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm >index 90b88900077c245f89f4f7e030b2573d2aa3784a..61984798e87a05c7c5f315c9af299a902666b751 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm >+++ b/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm >@@ -585,6 +585,9 @@ static void validate(WKWebViewConfiguration *configuration) > pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::userInterfaceDirectionPolicyKey(), WebKit::WebPreferencesStore::Value(static_cast<uint32_t>(WebCore::UserInterfaceDirectionPolicy::Content))); > pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::systemLayoutDirectionKey(), WebKit::WebPreferencesStore::Value(static_cast<uint32_t>(WebCore::LTR))); > pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::allowSettingAnyXHRHeaderFromFileURLsKey(), WebKit::WebPreferencesStore::Value(shouldAllowSettingAnyXHRHeaderFromFileURLs())); >+#if USE(SYSTEM_PREVIEW) >+ pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::systemPreviewEnabledKey(), WebKit::WebPreferencesStore::Value(!![_configuration _systemPreviewEnabled])); >+#endif > #endif > > WKAudiovisualMediaTypes mediaTypesRequiringUserGesture = [_configuration mediaTypesRequiringUserActionForPlayback]; >diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm b/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm >index 1258b42698dcb2ea3efc6c394c7d276c259828d8..00d8625634146978406418187f5ffb1d571cfa59 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm >+++ b/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm >@@ -132,6 +132,7 @@ static _WKDragLiftDelay toDragLiftDelay(NSUInteger value) > _WKDragLiftDelay _dragLiftDelay; > BOOL _textInteractionGesturesEnabled; > BOOL _longPressActionsEnabled; >+ BOOL _systemPreviewEnabled; > #endif > > BOOL _invisibleAutoplayNotPermitted; >@@ -238,6 +239,7 @@ static _WKDragLiftDelay toDragLiftDelay(NSUInteger value) > _textInteractionGesturesEnabled = YES; > _longPressActionsEnabled = YES; > #endif >+ _systemPreviewEnabled = NO; > #endif // PLATFORM(IOS) > > _mediaContentTypesRequiringHardwareSupport = Settings::defaultMediaContentTypesRequiringHardwareSupport(); >@@ -280,6 +282,7 @@ static _WKDragLiftDelay toDragLiftDelay(NSUInteger value) > [coder encodeInteger:self._dragLiftDelay forKey:@"dragLiftDelay"]; > [coder encodeBool:self._textInteractionGesturesEnabled forKey:@"textInteractionGesturesEnabled"]; > [coder encodeBool:self._longPressActionsEnabled forKey:@"longPressActionsEnabled"]; >+ [coder encodeBool:self._systemPreviewEnabled forKey:@"systemPreviewEnabled"]; > #else > [coder encodeInteger:self.userInterfaceDirectionPolicy forKey:@"userInterfaceDirectionPolicy"]; > #endif >@@ -310,6 +313,7 @@ static _WKDragLiftDelay toDragLiftDelay(NSUInteger value) > self._dragLiftDelay = toDragLiftDelay([coder decodeIntegerForKey:@"dragLiftDelay"]); > self._textInteractionGesturesEnabled = [coder decodeBoolForKey:@"textInteractionGesturesEnabled"]; > self._longPressActionsEnabled = [coder decodeBoolForKey:@"longPressActionsEnabled"]; >+ self._systemPreviewEnabled = [coder decodeBoolForKey:@"systemPreviewEnabled"]; > #else > auto userInterfaceDirectionPolicyCandidate = static_cast<WKUserInterfaceDirectionPolicy>([coder decodeIntegerForKey:@"userInterfaceDirectionPolicy"]); > if (userInterfaceDirectionPolicyCandidate == WKUserInterfaceDirectionPolicyContent || userInterfaceDirectionPolicyCandidate == WKUserInterfaceDirectionPolicySystem) >@@ -366,6 +370,7 @@ static _WKDragLiftDelay toDragLiftDelay(NSUInteger value) > configuration->_dragLiftDelay = self->_dragLiftDelay; > configuration->_textInteractionGesturesEnabled = self->_textInteractionGesturesEnabled; > configuration->_longPressActionsEnabled = self->_longPressActionsEnabled; >+ configuration->_systemPreviewEnabled = self->_systemPreviewEnabled; > #endif > #if PLATFORM(MAC) > configuration->_cpuLimit = self->_cpuLimit; >@@ -520,7 +525,7 @@ static NSString *defaultApplicationNameForUserAgent() > #if PLATFORM(IOS) > - (WKWebViewContentProviderRegistry *)_contentProviderRegistry > { >- return _contentProviderRegistry.get([] { return adoptNS([[WKWebViewContentProviderRegistry alloc] init]); }); >+ return _contentProviderRegistry.get([self] { return adoptNS([[WKWebViewContentProviderRegistry alloc] initWithConfiguration:self]); }); > } > > - (void)_setContentProviderRegistry:(WKWebViewContentProviderRegistry *)registry >@@ -704,6 +709,15 @@ static NSString *defaultApplicationNameForUserAgent() > _longPressActionsEnabled = enabled; > } > >+- (BOOL)_systemPreviewEnabled >+{ >+ return _systemPreviewEnabled; >+} >+ >+- (void)_setSystemPreviewEnabled:(BOOL)enabled >+{ >+ _systemPreviewEnabled = enabled; >+} > > #endif // PLATFORM(IOS) > >diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h b/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h >index 8a95278ce6af9f54b6e0e51a2bda65fb0b71f2ee..b47f23be3fbf17fae0be4d4401dffd1582359fd5 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h >+++ b/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h >@@ -78,6 +78,7 @@ typedef NS_ENUM(NSUInteger, _WKDragLiftDelay) { > @property (nonatomic, setter=_setDragLiftDelay:) _WKDragLiftDelay _dragLiftDelay WK_API_AVAILABLE(ios(11.0)); > @property (nonatomic, setter=_setTextInteractionGesturesEnabled:) BOOL _textInteractionGesturesEnabled WK_API_AVAILABLE(ios(WK_IOS_TBA)); > @property (nonatomic, setter=_setLongPressActionsEnabled:) BOOL _longPressActionsEnabled WK_API_AVAILABLE(ios(WK_IOS_TBA)); >+@property (nonatomic, setter=_setSystemPreviewEnabled:) BOOL _systemPreviewEnabled WK_API_AVAILABLE(ios(WK_IOS_TBA)); > #else > @property (nonatomic, setter=_setShowsURLsInToolTips:) BOOL _showsURLsInToolTips WK_API_AVAILABLE(macosx(10.12)); > @property (nonatomic, setter=_setServiceControlsEnabled:) BOOL _serviceControlsEnabled WK_API_AVAILABLE(macosx(10.12)); >diff --git a/Source/WebKit/UIProcess/Cocoa/WKWebViewContentProviderRegistry.h b/Source/WebKit/UIProcess/Cocoa/WKWebViewContentProviderRegistry.h >index 59b6e3bd81e699d3f7474e7b44f3ee4f70703816..8c0979363c7bbcc4fe8f535d8415164e65336093 100644 >--- a/Source/WebKit/UIProcess/Cocoa/WKWebViewContentProviderRegistry.h >+++ b/Source/WebKit/UIProcess/Cocoa/WKWebViewContentProviderRegistry.h >@@ -35,10 +35,13 @@ namespace WebKit { > class WebPageProxy; > } > >+@class WKWebViewConfiguration; > @protocol WKWebViewContentProvider; > > @interface WKWebViewContentProviderRegistry : NSObject > >+- (instancetype)initWithConfiguration:(WKWebViewConfiguration *)configuration; >+ > - (void)addPage:(WebKit::WebPageProxy&)page; > - (void)removePage:(WebKit::WebPageProxy&)page; > >diff --git a/Source/WebKit/UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm b/Source/WebKit/UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm >index 79b6113c1df857533c8a406233ecd1decd4998da..b987896f102c7b6cb60ab69073c36104a79ecfd6 100644 >--- a/Source/WebKit/UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm >+++ b/Source/WebKit/UIProcess/Cocoa/WKWebViewContentProviderRegistry.mm >@@ -33,6 +33,7 @@ > #import "WKLegacyPDFView.h" > #import "WKPDFView.h" > #import "WKSystemPreviewView.h" >+#import "WKWebViewConfigurationPrivate.h" > #import "WKWebViewInternal.h" > #import "WebPageProxy.h" > #import <WebCore/MIMETypeRegistry.h> >@@ -52,7 +53,7 @@ using namespace WebKit; > HashCountedSet<WebPageProxy*> _pages; > } > >-- (instancetype)init >+- (instancetype)initWithConfiguration:(WKWebViewConfiguration *)configuration > { > if (!(self = [super init])) > return nil; >@@ -66,8 +67,10 @@ using namespace WebKit; > #endif > > #if USE(SYSTEM_PREVIEW) && USE(APPLE_INTERNAL_SDK) >- for (auto& mimeType : getSystemPreviewMIMETypes()) >- [self registerProvider:[WKSystemPreviewView class] forMIMEType:mimeType]; >+ if (configuration._systemPreviewEnabled) { >+ for (auto& mimeType : getSystemPreviewMIMETypes()) >+ [self registerProvider:[WKSystemPreviewView class] forMIMEType:mimeType]; >+ } > #endif > > return self;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
jonlee
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 186611
: 342701