Changeset 237087 in webkit
- Timestamp:
- Oct 12, 2018, 4:13:37 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 5 added
- 27 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/viewport/ios/constant-width-viewport-after-changing-view-scale-expected.txt (added)
-
LayoutTests/fast/viewport/ios/constant-width-viewport-after-changing-view-scale.html (added)
-
LayoutTests/fast/viewport/ios/device-width-viewport-after-changing-view-scale-expected.txt (added)
-
LayoutTests/fast/viewport/ios/device-width-viewport-after-changing-view-scale.html (added)
-
LayoutTests/resources/ui-helper.js (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/page/ViewportConfiguration.cpp (modified) (12 diffs)
-
Source/WebCore/page/ViewportConfiguration.h (modified) (4 diffs)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/Shared/WebPageCreationParameters.cpp (modified) (2 diffs)
-
Source/WebKit/Shared/WebPageCreationParameters.h (modified) (1 diff)
-
Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (modified) (2 diffs)
-
Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h (modified) (1 diff)
-
Source/WebKit/UIProcess/API/mac/WKView.mm (modified) (1 diff)
-
Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm (modified) (1 diff)
-
Source/WebKit/UIProcess/WebPageProxy.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/WebPageProxy.h (modified) (3 diffs)
-
Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm (modified) (1 diff)
-
Source/WebKit/WebProcess/WebPage/WebPage.cpp (modified) (1 diff)
-
Source/WebKit/WebProcess/WebPage/WebPage.h (modified) (1 diff)
-
Source/WebKit/WebProcess/WebPage/WebPage.messages.in (modified) (1 diff)
-
Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/DumpRenderTree/ios/UIScriptControllerIOS.mm (modified) (1 diff)
-
Tools/DumpRenderTree/mac/UIScriptControllerMac.mm (modified) (1 diff)
-
Tools/TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl (modified) (1 diff)
-
Tools/TestRunnerShared/UIScriptContext/UIScriptController.cpp (modified) (1 diff)
-
Tools/TestRunnerShared/UIScriptContext/UIScriptController.h (modified) (1 diff)
-
Tools/WebKitTestRunner/UIScriptControllerCocoa.mm (added)
-
Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj (modified) (4 diffs)
-
Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r237072 r237087 1 2018-10-12 Wenson Hsieh <wenson_hsieh@apple.com> 2 3 [iOS] Allow SPI clients to lay out at arbitrarily scaled sizes and scale to fit the view 4 https://bugs.webkit.org/show_bug.cgi?id=190504 5 <rdar://problem/45117760> 6 7 Reviewed by Tim Horton. 8 9 Add two new layout tests on iOS that change WKWebView's view scale, and measure the resulting window sizes and 10 lengths of viewport units. 11 12 * fast/viewport/ios/constant-width-viewport-after-changing-view-scale-expected.txt: Added. 13 * fast/viewport/ios/constant-width-viewport-after-changing-view-scale.html: Added. 14 15 Add a test page with a viewport meta tag that has a constant width and an explicit initial scale of 0.5. 16 17 * fast/viewport/ios/device-width-viewport-after-changing-view-scale-expected.txt: Added. 18 * fast/viewport/ios/device-width-viewport-after-changing-view-scale.html: Added. 19 20 Add a test page with a viewport meta tag at device-width, with initial scale 1. 21 22 * resources/ui-helper.js: 23 (window.UIHelper.setViewScale): 24 25 Add a convenience function that wraps a UI script invocation of `setViewScale` in a promise. 26 27 (window.UIHelper): 28 1 29 2018-10-12 Dawei Fenton <realdawei@apple.com> 2 30 -
trunk/LayoutTests/resources/ui-helper.js
r237012 r237087 340 340 }); 341 341 } 342 343 static setViewScale(scale) 344 { 345 if (!this.isWebKit2()) 346 return Promise.resolve(); 347 348 return new Promise(resolve => testRunner.runUIScript(`uiController.setViewScale(${scale})`, resolve)); 349 } 342 350 } -
trunk/Source/WebCore/ChangeLog
r237082 r237087 1 2018-10-12 Wenson Hsieh <wenson_hsieh@apple.com> 2 3 [iOS] Allow SPI clients to lay out at arbitrarily scaled sizes and scale to fit the view 4 https://bugs.webkit.org/show_bug.cgi?id=190504 5 <rdar://problem/45117760> 6 7 Reviewed by Tim Horton. 8 9 Add support in ViewportConfiguration for applying a layout size scale factor to the viewport. See below for 10 more details. 11 12 Tests: fast/viewport/ios/constant-width-viewport-after-changing-view-scale.html 13 fast/viewport/ios/device-width-viewport-after-changing-view-scale.html 14 15 * page/ViewportConfiguration.cpp: 16 (WebCore::ViewportConfiguration::setViewLayoutSize): 17 18 The viewport's layout size may now be changed alongside the layout size scale factor. If either of these two 19 variables change, we recompute our minimum layout size and viewport configuration parameters. 20 21 (WebCore::ViewportConfiguration::shouldIgnoreHorizontalScalingConstraints const): 22 (WebCore::ViewportConfiguration::nativeWebpageParameters): 23 (WebCore::ViewportConfiguration::testingParameters): 24 (WebCore::ViewportConfiguration::updateConfiguration): 25 26 Multiply the minimum scale, initial scale, and maximum scale by the layout size scale factor. This allows us to 27 keep the document well-proportioned within the viewport, while still laying out at a different layout size. 28 29 (WebCore::ViewportConfiguration::updateMinimumLayoutSize): 30 31 Compute the minimum layout size by scaling the default layout size derived from our view's size. 32 33 (WebCore::ViewportConfiguration::layoutWidth const): 34 (WebCore::ViewportConfiguration::layoutHeight const): 35 * page/ViewportConfiguration.h: 36 37 Maintain the original initial scale, unaffected by the layout size scale factor. This is used when computing 38 layout width and height to prevent scaling by the layout size scale factor twice when computing layout sizes. 39 40 (WebCore::ViewportConfiguration::description const): 41 42 Include the layout size scale factor in ViewportConfiguration's description string. 43 44 (WebCore::ViewportConfiguration::Parameters::operator== const): 45 (WebCore::operator<<): 46 1 47 2018-10-12 Youenn Fablet <youenn@apple.com> 2 48 -
trunk/Source/WebCore/page/ViewportConfiguration.cpp
r236530 r237087 115 115 } 116 116 117 bool ViewportConfiguration::setViewLayoutSize(const FloatSize& viewLayoutSize) 118 { 119 if (m_viewLayoutSize == viewLayoutSize) 120 return false; 121 117 bool ViewportConfiguration::setViewLayoutSize(const FloatSize& viewLayoutSize, std::optional<double>&& scaleFactor) 118 { 119 double newScaleFactor = scaleFactor.value_or(m_layoutSizeScaleFactor); 120 if (m_viewLayoutSize == viewLayoutSize && m_layoutSizeScaleFactor == newScaleFactor) 121 return false; 122 123 m_layoutSizeScaleFactor = newScaleFactor; 122 124 m_viewLayoutSize = viewLayoutSize; 123 125 … … 192 194 return laidOutWiderThanViewport; 193 195 194 if (m_configuration.initialScaleIsSet && m_configuration.initialScale == 1)196 if (m_configuration.initialScaleIsSet && m_configuration.initialScaleIgnoringLayoutScaleFactor == 1) 195 197 return laidOutWiderThanViewport; 196 198 … … 300 302 parameters.maximumScale = 5; 301 303 parameters.initialScale = 1; 304 parameters.initialScaleIgnoringLayoutScaleFactor = 1; 302 305 parameters.initialScaleIsSet = true; 303 306 return parameters; … … 358 361 Parameters parameters; 359 362 parameters.initialScale = 1; 363 parameters.initialScaleIgnoringLayoutScaleFactor = 1; 360 364 parameters.initialScaleIsSet = true; 361 365 parameters.allowsShrinkToFit = true; … … 427 431 428 432 m_configuration.avoidsUnsafeArea = m_viewportArguments.viewportFit != ViewportFit::Cover; 433 m_configuration.initialScaleIgnoringLayoutScaleFactor = m_configuration.initialScale; 434 m_configuration.initialScale *= m_layoutSizeScaleFactor; 435 m_configuration.minimumScale *= m_layoutSizeScaleFactor; 436 m_configuration.maximumScale *= m_layoutSizeScaleFactor; 429 437 430 438 LOG_WITH_STREAM(Viewports, stream << "ViewportConfiguration " << this << " updateConfiguration " << *this << " gives initial scale " << initialScale() << " based on contentSize " << m_contentSize << " and layout size " << layoutWidth() << "x" << layoutHeight()); … … 433 441 void ViewportConfiguration::updateMinimumLayoutSize() 434 442 { 435 if (!shouldOverrideDeviceWidthAndShrinkToFit()) { 436 m_minimumLayoutSize = m_viewLayoutSize; 443 m_minimumLayoutSize = m_viewLayoutSize / m_layoutSizeScaleFactor; 444 445 if (!shouldOverrideDeviceWidthAndShrinkToFit()) 437 446 return; 438 }439 447 440 448 float minDeviceWidth = platformDeviceWidthOverride(); 441 m_minimumLayoutSize = FloatSize(minDeviceWidth, std::roundf(m_ viewLayoutSize.height() * (minDeviceWidth / m_viewLayoutSize.width())));449 m_minimumLayoutSize = FloatSize(minDeviceWidth, std::roundf(m_minimumLayoutSize.height() * (minDeviceWidth / m_minimumLayoutSize.width()))); 442 450 } 443 451 … … 470 478 471 479 // If not, make sure the viewport width and initial scale can co-exist. 472 double initialContentWidthInViewportCoordinate = m_configuration.width * m_configuration.initialScale ;480 double initialContentWidthInViewportCoordinate = m_configuration.width * m_configuration.initialScaleIgnoringLayoutScaleFactor; 473 481 if (initialContentWidthInViewportCoordinate < minimumLayoutSize.width()) { 474 482 // The specified width does not fit in viewport. Return the minimum width that satisfy the initialScale constraint. 475 return std::round(minimumLayoutSize.width() / m_configuration.initialScale );483 return std::round(minimumLayoutSize.width() / m_configuration.initialScaleIgnoringLayoutScaleFactor); 476 484 } 477 485 return std::round(m_configuration.width); … … 480 488 // If the page has a real scale, then just return the minimum size over the initial scale. 481 489 if (m_configuration.initialScaleIsSet && !m_configuration.heightIsSet) 482 return std::round(minimumLayoutSize.width() / m_configuration.initialScale );490 return std::round(minimumLayoutSize.width() / m_configuration.initialScaleIgnoringLayoutScaleFactor); 483 491 484 492 if (minimumLayoutSize.height() > 0) … … 506 514 507 515 // If not, make sure the viewport width and initial scale can co-exist. 508 double initialContentHeightInViewportCoordinate = m_configuration.height * m_configuration.initialScale ;516 double initialContentHeightInViewportCoordinate = m_configuration.height * m_configuration.initialScaleIgnoringLayoutScaleFactor; 509 517 if (initialContentHeightInViewportCoordinate < minimumLayoutSize.height()) { 510 518 // The specified width does not fit in viewport. Return the minimum height that satisfy the initialScale constraint. 511 return std::round(minimumLayoutSize.height() / m_configuration.initialScale );519 return std::round(minimumLayoutSize.height() / m_configuration.initialScaleIgnoringLayoutScaleFactor); 512 520 } 513 521 return std::round(m_configuration.height); … … 516 524 // If the page has a real scale, then just return the minimum size over the initial scale. 517 525 if (m_configuration.initialScaleIsSet && !m_configuration.widthIsSet) 518 return std::round(minimumLayoutSize.height() / m_configuration.initialScale );526 return std::round(minimumLayoutSize.height() / m_configuration.initialScaleIgnoringLayoutScaleFactor); 519 527 520 528 if (minimumLayoutSize.width() > 0) … … 539 547 ts.endGroup(); 540 548 549 ts.dumpProperty("initialScaleIgnoringLayoutScaleFactor", parameters.initialScaleIgnoringLayoutScaleFactor); 541 550 ts.dumpProperty("minimumScale", parameters.minimumScale); 542 551 ts.dumpProperty("maximumScale", parameters.maximumScale); … … 577 586 ts.dumpProperty("contentSize", m_contentSize); 578 587 ts.dumpProperty("minimumLayoutSize", m_minimumLayoutSize); 588 ts.dumpProperty("layoutSizeScaleFactor", m_layoutSizeScaleFactor); 579 589 ts.dumpProperty("computed initial scale", initialScale()); 580 590 ts.dumpProperty("computed minimum scale", minimumScale()); -
trunk/Source/WebCore/page/ViewportConfiguration.h
r236530 r237087 50 50 double height { 0 }; 51 51 double initialScale { 0 }; 52 double initialScaleIgnoringLayoutScaleFactor { 0 }; 52 53 double minimumScale { 0 }; 53 54 double maximumScale { 0 }; … … 63 64 { 64 65 return width == other.width && height == other.height 65 && initialScale == other.initialScale && minimumScale == other.minimumScale && maximumScale == other.maximumScale66 && initialScale == other.initialScale && initialScaleIgnoringLayoutScaleFactor == other.initialScaleIgnoringLayoutScaleFactor && minimumScale == other.minimumScale && maximumScale == other.maximumScale 66 67 && allowsUserScaling == other.allowsUserScaling && allowsShrinkToFit == other.allowsShrinkToFit && avoidsUnsafeArea == other.avoidsUnsafeArea 67 68 && widthIsSet == other.widthIsSet && heightIsSet == other.heightIsSet && initialScaleIsSet == other.initialScaleIsSet; … … 80 81 81 82 const FloatSize& minimumLayoutSize() const { return m_minimumLayoutSize; } 82 WEBCORE_EXPORT bool setViewLayoutSize(const FloatSize& );83 WEBCORE_EXPORT bool setViewLayoutSize(const FloatSize&, std::optional<double>&& scaleFactor = std::nullopt); 83 84 84 85 const OptionSet<DisabledAdaptations>& disabledAdaptations() const { return m_disabledAdaptations; } … … 138 139 OptionSet<DisabledAdaptations> m_disabledAdaptations; 139 140 141 double m_layoutSizeScaleFactor { 1 }; 140 142 bool m_canIgnoreScalingConstraints; 141 143 bool m_forceAlwaysUserScalable; -
trunk/Source/WebKit/ChangeLog
r237074 r237087 1 2018-10-12 Wenson Hsieh <wenson_hsieh@apple.com> 2 3 [iOS] Allow SPI clients to lay out at arbitrarily scaled sizes and scale to fit the view 4 https://bugs.webkit.org/show_bug.cgi?id=190504 5 <rdar://problem/45117760> 6 7 Reviewed by Tim Horton. 8 9 Add support for _setViewScale: and _viewScale on iOS. While similar in concept to macOS, changing this property 10 on iOS uses viewport configurations to change the minimum layout size of the document and apply view scaling. 11 Setting the view scale on iOS to a value `s` multiplies the minimium layout size by a factor `1 / s`, but also 12 multiplies the initial, minimum and maximum scales by a factor of `s`. The net effect of applying this scale 13 causes the page to lay out at a larger width and shrink (or a smaller width and expand) to fit the viewport. 14 15 * Shared/WebPageCreationParameters.cpp: 16 (WebKit::WebPageCreationParameters::encode const): 17 (WebKit::WebPageCreationParameters::decode): 18 * Shared/WebPageCreationParameters.h: 19 20 Send `viewportConfigurationLayoutSizeScaleFactor` alongside `viewportConfigurationViewLayoutSize`. 21 22 (-[WKWebView _dispatchSetViewLayoutSize:]): 23 (-[WKWebView _viewScale]): 24 (-[WKWebView _setViewScale:]): 25 26 Provide a different implementation of `_setViewScale:` on iOS, by scaling the effective minimum layout size. 27 (See above for more detail). 28 29 * UIProcess/API/Cocoa/WKWebViewPrivate.h: 30 31 Add missing API availability annotations for the _viewScale property. 32 33 * UIProcess/API/mac/WKView.mm: 34 (-[WKView _setViewScale:]): 35 * UIProcess/Cocoa/WebViewImpl.mm: 36 37 Both -[WKView _setViewScale:] and -[WKWebView _setViewScale:] throw Objective C exceptions upon receiving a bad 38 argument (e.g. scale <= 0). However, logic for throwing this exception is specific to iOS in WKWebView, and 39 handled in WebViewImpl on macOS. To make this less confusing, move the exception throwing code out of 40 !PLATFORM(MAC) in WKWebView, and move the path for raising this exception in WKView on macOS from WebViewImpl to 41 WKView. 42 43 * UIProcess/WebPageProxy.cpp: 44 (WebKit::WebPageProxy::creationParameters): 45 * UIProcess/WebPageProxy.h: 46 (WebKit::WebPageProxy::layoutSizeScaleFactor const): 47 48 Tie the notion of "view scale" on iOS to `layoutSizeScaleFactor`. As its name suggests, this is a scale factor 49 by which we transform the layout size. 50 51 * UIProcess/ios/WebPageProxyIOS.mm: 52 (WebKit::WebPageProxy::setViewportConfigurationViewLayoutSize): 53 * WebProcess/WebPage/WebPage.cpp: 54 * WebProcess/WebPage/WebPage.h: 55 * WebProcess/WebPage/WebPage.messages.in: 56 57 Plumb the layout size scale factor over to the web process, along with the layout size. 58 59 * WebProcess/WebPage/ios/WebPageIOS.mm: 60 (WebKit::WebPage::setViewportConfigurationViewLayoutSize): 61 1 62 2018-10-12 Alex Christensen <achristensen@webkit.org> 2 63 -
trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp
r236865 r237087 91 91 encoder << ignoresViewportScaleLimits; 92 92 encoder << viewportConfigurationViewLayoutSize; 93 encoder << viewportConfigurationLayoutSizeScaleFactor; 93 94 encoder << viewportConfigurationViewSize; 94 95 encoder << maximumUnobscuredSize; … … 258 259 if (!decoder.decode(parameters.viewportConfigurationViewLayoutSize)) 259 260 return std::nullopt; 261 if (!decoder.decode(parameters.viewportConfigurationLayoutSizeScaleFactor)) 262 return std::nullopt; 260 263 if (!decoder.decode(parameters.viewportConfigurationViewSize)) 261 264 return std::nullopt; -
trunk/Source/WebKit/Shared/WebPageCreationParameters.h
r236865 r237087 148 148 bool ignoresViewportScaleLimits; 149 149 WebCore::FloatSize viewportConfigurationViewLayoutSize; 150 double viewportConfigurationLayoutSizeScaleFactor; 150 151 WebCore::FloatSize viewportConfigurationViewSize; 151 152 WebCore::FloatSize maximumUnobscuredSize; -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
r237055 r237087 2641 2641 2642 2642 LOG_WITH_STREAM(VisibleRects, stream << "-[WKWebView " << _page->pageID() << " _dispatchSetViewLayoutSize:] " << viewLayoutSize << " contentZoomScale " << contentZoomScale(self)); 2643 _page->setViewportConfigurationViewLayoutSize(viewLayoutSize );2643 _page->setViewportConfigurationViewLayoutSize(viewLayoutSize, _page->layoutSizeScaleFactor()); 2644 2644 _lastSentViewLayoutSize = viewLayoutSize; 2645 2645 } … … 5151 5151 - (CGFloat)_viewScale 5152 5152 { 5153 #if PLATFORM(MAC) 5153 5154 return _page->viewScaleFactor(); 5155 #else 5156 return _page->layoutSizeScaleFactor(); 5157 #endif 5154 5158 } 5155 5159 5156 5160 - (void)_setViewScale:(CGFloat)viewScale 5157 5161 { 5162 if (viewScale <= 0 || isnan(viewScale) || isinf(viewScale)) 5163 [NSException raise:NSInvalidArgumentException format:@"View scale should be a positive number"]; 5164 5158 5165 #if PLATFORM(MAC) 5159 5166 _impl->setViewScale(viewScale); 5160 5167 #else 5161 if ( viewScale <= 0 || isnan(viewScale) || isinf(viewScale))5162 [NSException raise:NSInvalidArgumentException format:@"View scale should be a positive number"];5163 5164 _page->s caleView(viewScale);5168 if (_page->layoutSizeScaleFactor() == viewScale) 5169 return; 5170 5171 _page->setViewportConfigurationViewLayoutSize([self activeViewLayoutSize:self.bounds], viewScale); 5165 5172 #endif 5166 5173 } -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h
r237012 r237087 178 178 @property (nonatomic, setter=_setViewportSizeForCSSViewportUnits:) CGSize _viewportSizeForCSSViewportUnits WK_API_AVAILABLE(macosx(10.13), ios(11.0)); 179 179 180 @property (nonatomic, setter=_setViewScale:) CGFloat _viewScale ;180 @property (nonatomic, setter=_setViewScale:) CGFloat _viewScale WK_API_AVAILABLE(macosx(10.11), ios(9.0)); 181 181 182 182 @property (nonatomic, setter=_setBackgroundExtendsBeyondPage:) BOOL _backgroundExtendsBeyondPage WK_API_AVAILABLE(macosx(10.13.4), ios(8.0)); -
trunk/Source/WebKit/UIProcess/API/mac/WKView.mm
r236902 r237087 1431 1431 - (void)_setViewScale:(CGFloat)viewScale 1432 1432 { 1433 if (viewScale <= 0 || isnan(viewScale) || isinf(viewScale)) 1434 [NSException raise:NSInvalidArgumentException format:@"View scale should be a positive number"]; 1435 1433 1436 _data->_impl->setViewScale(viewScale); 1434 1437 } -
trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm
r237012 r237087 1887 1887 return; 1888 1888 1889 if (viewScale <= 0 || isnan(viewScale) || isinf(viewScale))1890 [NSException raise:NSInvalidArgumentException format:@"View scale should be a positive number"];1891 1892 1889 m_page->scaleView(viewScale); 1893 1890 [m_layoutStrategy didChangeViewScale]; -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r237008 r237087 6340 6340 parameters.ignoresViewportScaleLimits = m_forceAlwaysUserScalable; 6341 6341 parameters.viewportConfigurationViewLayoutSize = m_viewportConfigurationViewLayoutSize; 6342 parameters.viewportConfigurationLayoutSizeScaleFactor = m_viewportConfigurationLayoutSizeScaleFactor; 6342 6343 parameters.maximumUnobscuredSize = m_maximumUnobscuredSize; 6343 6344 #endif -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r237074 r237087 586 586 void dynamicViewportSizeUpdate(const WebCore::FloatSize& viewLayoutSize, const WebCore::FloatSize& maximumUnobscuredSize, const WebCore::FloatRect& targetExposedContentRect, const WebCore::FloatRect& targetUnobscuredRect, const WebCore::FloatRect& targetUnobscuredRectInScrollViewCoordinates, const WebCore::FloatBoxExtent& unobscuredSafeAreaInsets, double targetScale, int32_t deviceOrientation, DynamicViewportSizeUpdateID); 587 587 588 void setViewportConfigurationViewLayoutSize(const WebCore::FloatSize& );588 void setViewportConfigurationViewLayoutSize(const WebCore::FloatSize&, double scaleFactor); 589 589 void setMaximumUnobscuredSize(const WebCore::FloatSize&); 590 590 void setDeviceOrientation(int32_t); … … 638 638 void setForceAlwaysUserScalable(bool); 639 639 bool forceAlwaysUserScalable() const { return m_forceAlwaysUserScalable; } 640 double layoutSizeScaleFactor() const { return m_viewportConfigurationLayoutSizeScaleFactor; } 640 641 void setIsScrollingOrZooming(bool); 641 642 void requestRectsForGranularityWithSelectionOffset(WebCore::TextGranularity, uint32_t offset, WTF::Function<void(const Vector<WebCore::SelectionRect>&, CallbackBase::Error)>&&); … … 2230 2231 bool m_forceAlwaysUserScalable { false }; 2231 2232 WebCore::FloatSize m_viewportConfigurationViewLayoutSize; 2233 double m_viewportConfigurationLayoutSizeScaleFactor { 1 }; 2232 2234 WebCore::FloatSize m_maximumUnobscuredSize; 2233 2235 #endif -
trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm
r236865 r237087 319 319 } 320 320 321 void WebPageProxy::setViewportConfigurationViewLayoutSize(const WebCore::FloatSize& size )321 void WebPageProxy::setViewportConfigurationViewLayoutSize(const WebCore::FloatSize& size, double scaleFactor) 322 322 { 323 323 m_viewportConfigurationViewLayoutSize = size; 324 m_viewportConfigurationLayoutSizeScaleFactor = scaleFactor; 324 325 325 326 if (isValid()) 326 m_process->send(Messages::WebPage::SetViewportConfigurationViewLayoutSize(size ), m_pageID);327 m_process->send(Messages::WebPage::SetViewportConfigurationViewLayoutSize(size, scaleFactor), m_pageID); 327 328 } 328 329 -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r237004 r237087 624 624 625 625 #if PLATFORM(IOS) 626 setViewportConfigurationViewLayoutSize(parameters.viewportConfigurationViewLayoutSize );626 setViewportConfigurationViewLayoutSize(parameters.viewportConfigurationViewLayoutSize, parameters.viewportConfigurationLayoutSizeScaleFactor); 627 627 setMaximumUnobscuredSize(parameters.maximumUnobscuredSize); 628 628 #endif -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.h
r236867 r237087 894 894 895 895 #if PLATFORM(IOS) 896 void setViewportConfigurationViewLayoutSize(const WebCore::FloatSize& );896 void setViewportConfigurationViewLayoutSize(const WebCore::FloatSize&, double scaleFactor); 897 897 void setMaximumUnobscuredSize(const WebCore::FloatSize&); 898 898 void setDeviceOrientation(int32_t); -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in
r237074 r237087 46 46 MouseEvent(WebKit::WebMouseEvent event) 47 47 #if PLATFORM(IOS) 48 SetViewportConfigurationViewLayoutSize(WebCore::FloatSize size )48 SetViewportConfigurationViewLayoutSize(WebCore::FloatSize size, double scaleFactor) 49 49 SetMaximumUnobscuredSize(WebCore::FloatSize size) 50 50 SetDeviceOrientation(int32_t deviceOrientation) -
trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
r236619 r237087 2519 2519 } 2520 2520 2521 void WebPage::setViewportConfigurationViewLayoutSize(const FloatSize& size )2522 { 2523 LOG_WITH_STREAM(VisibleRects, stream << "WebPage " << m_pageID << " setViewportConfigurationViewLayoutSize " << size );2524 if (m_viewportConfiguration.setViewLayoutSize(size ))2521 void WebPage::setViewportConfigurationViewLayoutSize(const FloatSize& size, double scaleFactor) 2522 { 2523 LOG_WITH_STREAM(VisibleRects, stream << "WebPage " << m_pageID << " setViewportConfigurationViewLayoutSize " << size << " scaleFactor " << scaleFactor); 2524 if (m_viewportConfiguration.setViewLayoutSize(size, scaleFactor)) 2525 2525 viewportConfigurationChanged(); 2526 2526 } -
trunk/Tools/ChangeLog
r237083 r237087 1 2018-10-12 Wenson Hsieh <wenson_hsieh@apple.com> 2 3 [iOS] Allow SPI clients to lay out at arbitrarily scaled sizes and scale to fit the view 4 https://bugs.webkit.org/show_bug.cgi?id=190504 5 <rdar://problem/45117760> 6 7 Reviewed by Tim Horton. 8 9 Teach UIScriptController to set WKWebView's view scale via a new `setViewScale` method, supported in WebKit2 on 10 macOS and iOS. 11 12 * DumpRenderTree/ios/UIScriptControllerIOS.mm: 13 (WTR::UIScriptController::setViewScale): 14 * DumpRenderTree/mac/UIScriptControllerMac.mm: 15 (WTR::UIScriptController::setViewScale): 16 * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl: 17 * TestRunnerShared/UIScriptContext/UIScriptController.cpp: 18 (WTR::UIScriptController::setViewScale): 19 * TestRunnerShared/UIScriptContext/UIScriptController.h: 20 * WebKitTestRunner/UIScriptControllerCocoa.mm: Added. 21 22 Add a new file for UIScriptController methods on Cocoa platforms. 23 24 (WTR::UIScriptController::setViewScale): 25 * WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj: 26 * WebKitTestRunner/cocoa/TestControllerCocoa.mm: 27 (WTR::TestController::cocoaResetStateToConsistentValues): 28 29 Ensure that _viewScale is reset to 1 after running a layout test. 30 1 31 2018-10-12 Aakash Jain <aakash_jain@apple.com> 2 32 -
trunk/Tools/DumpRenderTree/ios/UIScriptControllerIOS.mm
r237012 r237087 83 83 } 84 84 85 void UIScriptController::setViewScale(double) 86 { 87 } 88 85 89 void UIScriptController::simulateAccessibilitySettingsChangeNotification(JSValueRef) 86 90 { -
trunk/Tools/DumpRenderTree/mac/UIScriptControllerMac.mm
r237012 r237087 88 88 m_context->asyncTaskComplete(callbackID); 89 89 }); 90 } 91 92 void UIScriptController::setViewScale(double) 93 { 90 94 } 91 95 -
trunk/Tools/TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl
r237012 r237087 217 217 void zoomToScale(double scale, object callback); 218 218 219 void setViewScale(double scale); 220 219 221 void scrollToOffset(long x, long y); // Initiate an animated scroll in the UI process. 220 222 attribute object didEndScrollingCallback; -
trunk/Tools/TestRunnerShared/UIScriptContext/UIScriptController.cpp
r237012 r237087 211 211 } 212 212 213 void UIScriptController::setViewScale(double) 214 { 215 } 216 213 217 void UIScriptController::simulateAccessibilitySettingsChangeNotification(JSValueRef) 214 218 { -
trunk/Tools/TestRunnerShared/UIScriptContext/UIScriptController.h
r237012 r237087 67 67 68 68 void zoomToScale(double scale, JSValueRef callback); 69 void setViewScale(double); 69 70 70 71 void simulateAccessibilitySettingsChangeNotification(JSValueRef callback); -
trunk/Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/project.pbxproj
r236913 r237087 136 136 E1C642C317CBCC7300D66A3C /* PoseAsClass.mm in Sources */ = {isa = PBXBuildFile; fileRef = E1C642C117CBCC7300D66A3C /* PoseAsClass.mm */; }; 137 137 E1C642C617CBCD4C00D66A3C /* WebKitTestRunnerPasteboard.mm in Sources */ = {isa = PBXBuildFile; fileRef = E1C642C417CBCD4C00D66A3C /* WebKitTestRunnerPasteboard.mm */; }; 138 F46240B1217013E500917B16 /* UIScriptControllerCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = F46240AF2170128300917B16 /* UIScriptControllerCocoa.mm */; }; 138 139 F4C3578C20E8444600FA0748 /* LayoutTestSpellChecker.mm in Sources */ = {isa = PBXBuildFile; fileRef = F4C3578A20E8444000FA0748 /* LayoutTestSpellChecker.mm */; }; 139 140 /* End PBXBuildFile section */ … … 379 380 E1C642C417CBCD4C00D66A3C /* WebKitTestRunnerPasteboard.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebKitTestRunnerPasteboard.mm; sourceTree = "<group>"; }; 380 381 E1C642C517CBCD4C00D66A3C /* WebKitTestRunnerPasteboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebKitTestRunnerPasteboard.h; sourceTree = "<group>"; }; 382 F46240AF2170128300917B16 /* UIScriptControllerCocoa.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = UIScriptControllerCocoa.mm; sourceTree = "<group>"; }; 381 383 F4C3578A20E8444000FA0748 /* LayoutTestSpellChecker.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = LayoutTestSpellChecker.mm; path = ../TestRunnerShared/cocoa/LayoutTestSpellChecker.mm; sourceTree = "<group>"; }; 382 384 F4C3578B20E8444000FA0748 /* LayoutTestSpellChecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LayoutTestSpellChecker.h; path = ../TestRunnerShared/cocoa/LayoutTestSpellChecker.h; sourceTree = "<group>"; }; … … 557 559 0F87B6141BACC4B9004EC572 /* TestRunnerWKWebView.h */, 558 560 0F87B6151BACC4B9004EC572 /* TestRunnerWKWebView.mm */, 561 F46240AF2170128300917B16 /* UIScriptControllerCocoa.mm */, 559 562 ); 560 563 name = cocoa; … … 1083 1086 0F18E6E51D6B9B9E0027E547 /* UIScriptContext.cpp in Sources */, 1084 1087 0F18E6E61D6B9BA20027E547 /* UIScriptController.cpp in Sources */, 1088 F46240B1217013E500917B16 /* UIScriptControllerCocoa.mm in Sources */, 1085 1089 0F73B55C1BA89042004B3EF4 /* UIScriptControllerIOS.mm in Sources */, 1086 1090 A18510431B9AE14500744AEB /* WebNotificationProvider.cpp in Sources */, -
trunk/Tools/WebKitTestRunner/cocoa/TestControllerCocoa.mm
r236481 r237087 216 216 [[_WKUserContentExtensionStore defaultStore] _removeAllContentExtensions]; 217 217 218 if (PlatformWebView* webView = mainWebView()) 219 [webView->platformView().configuration.userContentController _removeAllUserContentFilters]; 218 if (auto* webView = mainWebView()) { 219 TestRunnerWKWebView *platformView = webView->platformView(); 220 [platformView.configuration.userContentController _removeAllUserContentFilters]; 221 platformView._viewScale = 1; 222 } 220 223 #endif 221 224 }
Note:
See TracChangeset
for help on using the changeset viewer.