Changeset 244744 in webkit
- Timestamp:
- Apr 29, 2019 12:08:18 PM (5 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r244742 r244744 1 2019-04-29 Alexander Mikhaylenko <exalm7659@gmail.com> 2 3 [GTK] Back/forward gesture snapshot always times out 4 https://bugs.webkit.org/show_bug.cgi?id=197233 5 6 Reviewed by Michael Catanzaro. 7 8 Delaying web process launch caused a regression where we create ViewGestureController when the 9 web process doesn't yet exist. The controller immediately tries to connect to it and fails, 10 and because of that never receives DidHitRenderTreeSizeThreshold() message, so navigation 11 snapshot always stays until timeout after performing the gesture. 12 13 To prevent this, create the controller in webkitWebViewBaseDidRelaunchWebProcess() instead of 14 webkitWebViewBaseCreateWebPage(). Additionally, since settings are now created earlier than 15 ViewGestureController, store the value of whether swipe gesture is enabled in WebKitWebViewBase 16 and immediately apply it when creating the controller. 17 18 Since there is now a point where controller is null, make webkitWebViewBaseViewGestureController() 19 return null and add null checks everywhere. 20 21 * UIProcess/API/glib/WebKitWebView.cpp: 22 (enableBackForwardNavigationGesturesChanged): 23 Move the logic into webkitWebViewBaseSetEnableBackForwardNavigationGesture(). 24 * UIProcess/API/gtk/PageClientImpl.cpp: 25 (WebKit::PageClientImpl::wheelEventWasNotHandledByWebCore): Add a null check. 26 * UIProcess/API/gtk/WebKitWebViewBase.cpp: 27 (webkitWebViewBaseDraw): Ditto. 28 (webkitWebViewBaseScrollEvent): Ditto. 29 (webkitWebViewBaseSetEnableBackForwardNavigationGesture): Added. In addition to what was in 30 WebKitWebViewBase::enableBackForwardNavigationGesturesChanged(), store the value in a field 31 for the case ViewGestureController doesn't exist yet. 32 (webkitWebViewBaseViewGestureController): Return a pointer instead of reference. 33 (webkitWebViewBaseCreateWebPage): Stop creating ViewGestureController. 34 (webkitWebViewBaseDidRelaunchWebProcess): Move creating ViewGestureController here. Also 35 immediately call setSwipeGestureEnabled() with the stored value. 36 (webkitWebViewBaseDidStartProvisionalLoadForMainFrame): Add a null check. 37 (webkitWebViewBaseDidFirstVisuallyNonEmptyLayoutForMainFrame):Ditto. 38 (webkitWebViewBaseDidFinishLoadForMainFrame): Ditto. 39 (webkitWebViewBaseDidFailLoadForMainFrame): Ditto. 40 (webkitWebViewBaseDidSameDocumentNavigationForMainFrame): Ditto. 41 (webkitWebViewBaseDidRestoreScrollPosition): Ditto. 42 * UIProcess/API/gtk/WebKitWebViewBasePrivate.h: 43 1 44 2019-04-29 Chris Dumez <cdumez@apple.com> 2 45 -
trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp
r244732 r244744 515 515 { 516 516 gboolean enable = webkit_settings_get_enable_back_forward_navigation_gestures(settings); 517 518 ViewGestureController& controller = webkitWebViewBaseViewGestureController(WEBKIT_WEB_VIEW_BASE(webView)); 519 controller.setSwipeGestureEnabled(enable); 520 521 getPage(webView).setShouldRecordNavigationSnapshots(enable); 517 webkitWebViewBaseSetEnableBackForwardNavigationGesture(WEBKIT_WEB_VIEW_BASE(webView), enable); 522 518 } 523 519 -
trunk/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp
r244635 r244744 432 432 void PageClientImpl::wheelEventWasNotHandledByWebCore(const NativeWebWheelEvent& event) 433 433 { 434 ViewGestureController &controller = webkitWebViewBaseViewGestureController(WEBKIT_WEB_VIEW_BASE(m_viewWidget));435 if (controller .isSwipeGestureEnabled()) {436 controller .wheelEventWasNotHandledByWebCore(&event.nativeEvent()->scroll);434 ViewGestureController* controller = webkitWebViewBaseViewGestureController(WEBKIT_WEB_VIEW_BASE(m_viewWidget)); 435 if (controller && controller->isSwipeGestureEnabled()) { 436 controller->wheelEventWasNotHandledByWebCore(&event.nativeEvent()->scroll); 437 437 return; 438 438 } -
trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp
r244732 r244744 207 207 #endif 208 208 std::unique_ptr<ViewGestureController> viewGestureController; 209 bool isBackForwardNavigationGestureEnabled { false }; 209 210 }; 210 211 … … 573 574 574 575 if (showingNavigationSnapshot) { 575 ViewGestureController& controller = webkitWebViewBaseViewGestureController(webViewBase);576 576 RefPtr<cairo_pattern_t> group = adoptRef(cairo_pop_group(cr)); 577 controller.draw(cr, group.get()); 577 if (auto* controller = webkitWebViewBaseViewGestureController(webViewBase)) 578 controller->draw(cr, group.get()); 578 579 } 579 580 … … 890 891 } 891 892 892 ViewGestureController &controller = webkitWebViewBaseViewGestureController(webViewBase);893 if (controller .isSwipeGestureEnabled() && controller.handleScrollWheelEvent(event))893 ViewGestureController* controller = webkitWebViewBaseViewGestureController(webViewBase); 894 if (controller && controller->isSwipeGestureEnabled() && controller->handleScrollWheelEvent(event)) 894 895 return GDK_EVENT_STOP; 895 896 … … 1190 1191 #endif 1191 1192 1192 ViewGestureController& webkitWebViewBaseViewGestureController(WebKitWebViewBase* webViewBase) 1193 { 1194 return *webViewBase->priv->viewGestureController; 1193 void webkitWebViewBaseSetEnableBackForwardNavigationGesture(WebKitWebViewBase* webViewBase, bool enabled) 1194 { 1195 WebKitWebViewBasePrivate* priv = webViewBase->priv; 1196 1197 priv->isBackForwardNavigationGestureEnabled = enabled; 1198 1199 if (priv->pageProxy->hasRunningProcess()) 1200 webViewBase->priv->viewGestureController->setSwipeGestureEnabled(enabled); 1201 1202 priv->pageProxy->setShouldRecordNavigationSnapshots(enabled); 1203 } 1204 1205 ViewGestureController* webkitWebViewBaseViewGestureController(WebKitWebViewBase* webViewBase) 1206 { 1207 return webViewBase->priv->viewGestureController.get(); 1195 1208 } 1196 1209 … … 1421 1434 g_signal_connect(webkitWebViewBase, "notify::scale-factor", G_CALLBACK(deviceScaleFactorChanged), nullptr); 1422 1435 #endif 1423 1424 priv->viewGestureController = std::make_unique<WebKit::ViewGestureController>(*priv->pageProxy);1425 1436 } 1426 1437 … … 1640 1651 gtk_widget_queue_resize_no_redraw(GTK_WIDGET(webkitWebViewBase)); 1641 1652 1653 WebKitWebViewBasePrivate* priv = webkitWebViewBase->priv; 1654 1642 1655 #if PLATFORM(X11) && USE(TEXTURE_MAPPER_GL) && !USE(REDIRECTED_XCOMPOSITE_WINDOW) 1643 1656 if (PlatformDisplay::sharedDisplay().type() != PlatformDisplay::Type::X11) 1644 1657 return; 1645 1658 1646 WebKitWebViewBasePrivate* priv = webkitWebViewBase->priv;1647 1659 auto* drawingArea = static_cast<DrawingAreaProxyCoordinatedGraphics*>(priv->pageProxy->drawingArea()); 1648 1660 ASSERT(drawingArea); … … 1656 1668 UNUSED_PARAM(webkitWebViewBase); 1657 1669 #endif 1670 1671 priv->viewGestureController = std::make_unique<WebKit::ViewGestureController>(*priv->pageProxy); 1672 priv->viewGestureController->setSwipeGestureEnabled(priv->isBackForwardNavigationGestureEnabled); 1658 1673 } 1659 1674 … … 1701 1716 void webkitWebViewBaseDidStartProvisionalLoadForMainFrame(WebKitWebViewBase* webkitWebViewBase) 1702 1717 { 1703 if (webkitWebViewBase->priv->viewGestureController->isSwipeGestureEnabled()) 1704 webkitWebViewBase->priv->viewGestureController->didStartProvisionalLoadForMainFrame(); 1718 ViewGestureController* controller = webkitWebViewBaseViewGestureController(webkitWebViewBase); 1719 if (controller && controller->isSwipeGestureEnabled()) 1720 controller->didStartProvisionalLoadForMainFrame(); 1705 1721 } 1706 1722 1707 1723 void webkitWebViewBaseDidFirstVisuallyNonEmptyLayoutForMainFrame(WebKitWebViewBase* webkitWebViewBase) 1708 1724 { 1709 if (webkitWebViewBase->priv->viewGestureController->isSwipeGestureEnabled()) 1710 webkitWebViewBase->priv->viewGestureController->didFirstVisuallyNonEmptyLayoutForMainFrame(); 1725 ViewGestureController* controller = webkitWebViewBaseViewGestureController(webkitWebViewBase); 1726 if (controller && controller->isSwipeGestureEnabled()) 1727 controller->didFirstVisuallyNonEmptyLayoutForMainFrame(); 1711 1728 } 1712 1729 1713 1730 void webkitWebViewBaseDidFinishLoadForMainFrame(WebKitWebViewBase* webkitWebViewBase) 1714 1731 { 1715 if (webkitWebViewBase->priv->viewGestureController->isSwipeGestureEnabled()) 1716 webkitWebViewBase->priv->viewGestureController->didFinishLoadForMainFrame(); 1732 ViewGestureController* controller = webkitWebViewBaseViewGestureController(webkitWebViewBase); 1733 if (controller && controller->isSwipeGestureEnabled()) 1734 controller->didFinishLoadForMainFrame(); 1717 1735 } 1718 1736 1719 1737 void webkitWebViewBaseDidFailLoadForMainFrame(WebKitWebViewBase* webkitWebViewBase) 1720 1738 { 1721 if (webkitWebViewBase->priv->viewGestureController->isSwipeGestureEnabled()) 1722 webkitWebViewBase->priv->viewGestureController->didFailLoadForMainFrame(); 1739 ViewGestureController* controller = webkitWebViewBaseViewGestureController(webkitWebViewBase); 1740 if (controller && controller->isSwipeGestureEnabled()) 1741 controller->didFailLoadForMainFrame(); 1723 1742 } 1724 1743 1725 1744 void webkitWebViewBaseDidSameDocumentNavigationForMainFrame(WebKitWebViewBase* webkitWebViewBase, SameDocumentNavigationType type) 1726 1745 { 1727 if (webkitWebViewBase->priv->viewGestureController->isSwipeGestureEnabled()) 1728 webkitWebViewBase->priv->viewGestureController->didSameDocumentNavigationForMainFrame(type); 1746 ViewGestureController* controller = webkitWebViewBaseViewGestureController(webkitWebViewBase); 1747 if (controller && controller->isSwipeGestureEnabled()) 1748 controller->didSameDocumentNavigationForMainFrame(type); 1729 1749 } 1730 1750 1731 1751 void webkitWebViewBaseDidRestoreScrollPosition(WebKitWebViewBase* webkitWebViewBase) 1732 1752 { 1733 if (webkitWebViewBase->priv->viewGestureController->isSwipeGestureEnabled()) 1753 ViewGestureController* controller = webkitWebViewBaseViewGestureController(webkitWebViewBase); 1754 if (controller && controller->isSwipeGestureEnabled()) 1734 1755 webkitWebViewBase->priv->viewGestureController->didRestoreScrollPosition(); 1735 1756 } -
trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBasePrivate.h
r244732 r244744 85 85 RefPtr<WebKit::ViewSnapshot> webkitWebViewBaseTakeViewSnapshot(WebKitWebViewBase*); 86 86 87 WebKit::ViewGestureController& webkitWebViewBaseViewGestureController(WebKitWebViewBase*); 87 void webkitWebViewBaseSetEnableBackForwardNavigationGesture(WebKitWebViewBase*, bool enabled); 88 WebKit::ViewGestureController* webkitWebViewBaseViewGestureController(WebKitWebViewBase*); 88 89 89 90 void webkitWebViewBaseDidStartProvisionalLoadForMainFrame(WebKitWebViewBase*);
Note: See TracChangeset
for help on using the changeset viewer.