Changeset 169465 in webkit
- Timestamp:
- May 29, 2014, 2:44:27 PM (11 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r169460 r169465 1 2014-05-29 Matthew Hanson <matthew_hanson@apple.com> 2 3 Roll out r169439. <rdar://problem/17069364> 4 5 2014-05-28 Gavin Barraclough <baraclough@apple.com> 6 7 viewStateDidChange should always fully update ViewState 8 https://bugs.webkit.org/show_bug.cgi?id=133159 9 10 Reviewed by Anders Carlson. 11 12 Currently WebPageProxy::viewStateDidChange is passed a mask of bits to update. 13 14 This has the following negative consequences: 15 – WKWebView implicitly requires more detailed knowledge of the internal implementation of the PageClient. 16 – Updates may unnecessarily be split over multiple IPC messages. 17 – In order to support partial updates we make multiple virtual function calls to PageClient, which then makes duplicate objc calls. 18 19 Better to just always update the entire ViewState. 20 21 * UIProcess/API/Cocoa/WKWebView.mm: 22 (-[WKWebView didMoveToWindow]): 23 - removed argument to viewStateDidChange. 24 * UIProcess/API/gtk/PageClientImpl.cpp: 25 (WebKit::PageClientImpl::viewState): 26 (WebKit::PageClientImpl::isViewWindowActive): Deleted. 27 (WebKit::PageClientImpl::isViewFocused): Deleted. 28 (WebKit::PageClientImpl::isViewVisible): Deleted. 29 (WebKit::PageClientImpl::isViewInWindow): Deleted. 30 * UIProcess/API/gtk/PageClientImpl.h: 31 - merged isViewWindowActive/isViewFocused/isViewVisible/isViewInWindow to viewState. 32 * UIProcess/API/mac/WKView.mm: 33 (-[WKView becomeFirstResponder]): 34 (-[WKView resignFirstResponder]): 35 (-[WKView viewDidMoveToWindow]): 36 (-[WKView _windowDidBecomeKey:]): 37 (-[WKView _windowDidResignKey:]): 38 (-[WKView _windowDidMiniaturize:]): 39 (-[WKView _windowDidDeminiaturize:]): 40 (-[WKView _windowDidOrderOffScreen:]): 41 (-[WKView _windowDidOrderOnScreen:]): 42 (-[WKView _windowDidChangeOcclusionState:]): 43 (-[WKView viewDidHide]): 44 (-[WKView viewDidUnhide]): 45 (-[WKView _activeSpaceDidChange:]): 46 (-[WKView _setThumbnailView:]): 47 (-[WKView endDeferringViewInWindowChanges]): 48 (-[WKView endDeferringViewInWindowChangesSync]): 49 - removed argument to viewStateDidChange. 50 * UIProcess/CoordinatedGraphics/WebView.cpp: 51 (WebKit::WebView::viewState): 52 (WebKit::WebView::isViewWindowActive): Deleted. 53 (WebKit::WebView::isViewFocused): Deleted. 54 (WebKit::WebView::isViewVisible): Deleted. 55 (WebKit::WebView::isViewInWindow): Deleted. 56 * UIProcess/CoordinatedGraphics/WebView.h: 57 - merged isViewWindowActive/isViewFocused/isViewVisible/isViewInWindow to viewState. 58 * UIProcess/PageClient.h: 59 (WebKit::PageClient::isViewVisibleOrOccluded): Deleted. 60 (WebKit::PageClient::isVisuallyIdle): Deleted. 61 - merged isViewVisibleOrOccluded/isVisuallyIdle to subclass viewState methods. 62 * UIProcess/WebPageProxy.cpp: 63 (WebKit::WebPageProxy::WebPageProxy): 64 (WebKit::WebPageProxy::reattachToWebProcess): 65 - updateViewState -> PageClient::viewState 66 (WebKit::WebPageProxy::viewStateDidChange): 67 - argument removed; updateViewState -> PageClient::viewState. 68 (WebKit::WebPageProxy::setCursor): 69 - call isViewWindowActive on WebPageProxy, rather than PageClient. 70 (WebKit::WebPageProxy::updateBackingStoreDiscardableState): 71 - call isViewWindowActive on WebPageProxy, rather than PageClient. 72 (WebKit::WebPageProxy::updateViewState): Deleted. 73 - removed - viewState method moved to PageClient. 74 * UIProcess/WebPageProxy.h: 75 (WebKit::WebPageProxy::isViewWindowActive): 76 - added missing implementation. 77 (WebKit::WebPageProxy::isViewVisible): 78 - removed argument to viewStateDidChange. 79 * UIProcess/WebProcessProxy.cpp: 80 (WebKit::WebProcessProxy::windowServerConnectionStateChanged): 81 - removed argument to viewStateDidChange. 82 * UIProcess/ios/PageClientImplIOS.h: 83 * UIProcess/ios/PageClientImplIOS.mm: 84 (WebKit::PageClientImpl::viewState): 85 (WebKit::PageClientImpl::isViewWindowActive): Deleted. 86 (WebKit::PageClientImpl::isViewFocused): Deleted. 87 (WebKit::PageClientImpl::isViewVisible): Deleted. 88 (WebKit::PageClientImpl::isViewInWindow): Deleted. 89 (WebKit::PageClientImpl::isViewVisibleOrOccluded): Deleted. 90 (WebKit::PageClientImpl::isVisuallyIdle): Deleted. 91 - merged isViewWindowActive/isViewFocused/isViewVisible/isViewInWindow to viewState. 92 * UIProcess/ios/WKContentView.mm: 93 (-[WKContentView didMoveToWindow]): 94 (-[WKContentView _applicationDidEnterBackground:]): 95 (-[WKContentView _applicationWillEnterForeground:]): 96 - removed argument to viewStateDidChange. 97 * UIProcess/mac/PageClientImpl.h: 98 * UIProcess/mac/PageClientImpl.mm: 99 (WebKit::PageClientImpl::viewState): 100 (WebKit::PageClientImpl::showCorrectionPanel): 101 (WebKit::PageClientImpl::showDictationAlternativeUI): 102 (WebKit::PageClientImpl::isViewWindowActive): Deleted. 103 (WebKit::PageClientImpl::isViewFocused): Deleted. 104 (WebKit::PageClientImpl::isViewVisibleOrOccluded): Deleted. 105 (WebKit::PageClientImpl::isVisuallyIdle): Deleted. 106 - merged isViewWindowActive/isViewFocused/isViewVisible/isViewInWindow to viewState. 107 1 108 2014-05-29 Dan Bernstein <mitz@apple.com> 2 109 -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm
r169439 r169465 919 919 - (void)didMoveToWindow 920 920 { 921 _page->viewStateDidChange( );921 _page->viewStateDidChange(WebCore::ViewState::IsInWindow); 922 922 } 923 923 -
trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp
r169439 r169465 98 98 } 99 99 100 ViewState::Flags PageClientImpl::viewState() 101 { 102 WebKitWebViewBase* webView = WEBKIT_WEB_VIEW_BASE(m_viewWidget); 103 ViewState::Flags viewState = ViewState::NoFlags; 104 105 if (webkitWebViewBaseIsFocused(webView)) 106 viewState |= ViewState::IsFocused; 107 if (webkitWebViewBaseIsInWindowActive(webView)) 108 viewState |= ViewState::WindowIsActive; 109 if (webkitWebViewBaseIsInWindow(webView)) 110 viewState |= ViewState::IsInWindow; 111 if (webkitWebViewBaseIsVisible(webView)) 112 viewState |= (ViewState::IsVisible | ViewState::IsVisibleOrOccluded); 113 else 114 viewState |= ViewState::IsVisuallyIdle; 115 116 return viewState; 117 } 118 100 bool PageClientImpl::isViewWindowActive() 101 { 102 return webkitWebViewBaseIsInWindowActive(WEBKIT_WEB_VIEW_BASE(m_viewWidget)); 103 } 104 105 bool PageClientImpl::isViewFocused() 106 { 107 return webkitWebViewBaseIsFocused(WEBKIT_WEB_VIEW_BASE(m_viewWidget)); 108 } 109 110 bool PageClientImpl::isViewVisible() 111 { 112 return webkitWebViewBaseIsVisible(WEBKIT_WEB_VIEW_BASE(m_viewWidget)); 113 } 114 115 bool PageClientImpl::isViewInWindow() 116 { 117 return webkitWebViewBaseIsInWindow(WEBKIT_WEB_VIEW_BASE(m_viewWidget)); 118 } 119 119 120 void PageClientImpl::PageClientImpl::processDidExit() 120 121 { -
trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h
r169439 r169465 68 68 virtual void requestScroll(const WebCore::FloatPoint& scrollPosition, bool isProgrammaticScroll) override; 69 69 virtual WebCore::IntSize viewSize() override; 70 virtual WebCore::ViewState::Flags viewState() override; 70 virtual bool isViewWindowActive() override; 71 virtual bool isViewFocused() override; 72 virtual bool isViewVisible() override; 73 virtual bool isViewInWindow() override; 71 74 virtual void processDidExit() override; 72 75 virtual void didRelaunchProcess() override; -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp
r169445 r169465 176 176 if (!priv->isInWindowActive) { 177 177 priv->isInWindowActive = true; 178 priv->pageProxy->viewStateDidChange( );178 priv->pageProxy->viewStateDidChange(ViewState::WindowIsActive); 179 179 } 180 180 … … 187 187 if (priv->isInWindowActive) { 188 188 priv->isInWindowActive = false; 189 priv->pageProxy->viewStateDidChange( );189 priv->pageProxy->viewStateDidChange(ViewState::WindowIsActive); 190 190 } 191 191 … … 199 199 if (priv->isWindowVisible != isWindowVisible) { 200 200 priv->isWindowVisible = isWindowVisible; 201 priv->pageProxy->viewStateDidChange( );201 priv->pageProxy->viewStateDidChange(ViewState::IsVisible); 202 202 } 203 203 … … 229 229 230 230 priv->toplevelOnScreenWindow = window; 231 priv->pageProxy->viewStateDidChange( );231 priv->pageProxy->viewStateDidChange(ViewState::IsInWindow); 232 232 if (!priv->toplevelOnScreenWindow) 233 233 return; … … 570 570 if (!priv->isVisible) { 571 571 priv->isVisible = true; 572 priv->pageProxy->viewStateDidChange( );572 priv->pageProxy->viewStateDidChange(ViewState::IsVisible); 573 573 } 574 574 … … 589 589 if (priv->isVisible) { 590 590 priv->isVisible = false; 591 priv->pageProxy->viewStateDidChange( );591 priv->pageProxy->viewStateDidChange(ViewState::IsVisible); 592 592 } 593 593 } … … 1143 1143 return; 1144 1144 1145 unsigned viewStateFlags = ViewState::IsFocused; 1145 1146 priv->isFocused = focused; 1146 1147 … … 1150 1151 // set programatically like WebKitTestRunner does, because POPUP 1151 1152 // can't be focused. 1152 if (priv->isFocused && !priv->isInWindowActive) 1153 if (priv->isFocused && !priv->isInWindowActive) { 1153 1154 priv->isInWindowActive = true; 1154 priv->pageProxy->viewStateDidChange(); 1155 viewStateFlags |= ViewState::WindowIsActive; 1156 } 1157 priv->pageProxy->viewStateDidChange(viewStateFlags); 1155 1158 } 1156 1159 -
trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm
r169439 r169465 354 354 355 355 [self _updateSecureInputState]; 356 _data->_page->viewStateDidChange( );356 _data->_page->viewStateDidChange(ViewState::IsFocused); 357 357 358 358 _data->_inBecomeFirstResponder = false; … … 386 386 _data->_page->clearSelection(); 387 387 388 _data->_page->viewStateDidChange( );388 _data->_page->viewStateDidChange(ViewState::IsFocused); 389 389 390 390 _data->_inResignFirstResponder = false; … … 2449 2449 [self doWindowDidChangeScreen]; 2450 2450 2451 ViewState::Flags viewStateChanges = ViewState::WindowIsActive | ViewState::IsVisible; 2451 2452 if ([self isDeferringViewInWindowChanges]) 2452 2453 _data->_viewInWindowChangeWasDeferred = YES; 2453 _data->_page->viewStateDidChange(); 2454 else 2455 viewStateChanges |= ViewState::IsInWindow; 2456 _data->_page->viewStateDidChange(viewStateChanges); 2454 2457 2455 2458 [self _updateWindowAndViewFrames]; … … 2464 2467 [self _accessibilityRegisterUIProcessTokens]; 2465 2468 } else { 2469 ViewState::Flags viewStateChanges = ViewState::WindowIsActive | ViewState::IsVisible; 2466 2470 if ([self isDeferringViewInWindowChanges]) 2467 2471 _data->_viewInWindowChangeWasDeferred = YES; 2468 _data->_page->viewStateDidChange(); 2472 else 2473 viewStateChanges |= ViewState::IsInWindow; 2474 _data->_page->viewStateDidChange(viewStateChanges); 2469 2475 2470 2476 [NSEvent removeMonitor:_data->_flagsChangedEventMonitor]; … … 2487 2493 if (keyWindow == [self window] || keyWindow == [[self window] attachedSheet]) { 2488 2494 [self _updateSecureInputState]; 2489 _data->_page->viewStateDidChange( );2495 _data->_page->viewStateDidChange(ViewState::WindowIsActive); 2490 2496 } 2491 2497 } … … 2506 2512 if (formerKeyWindow == [self window] || formerKeyWindow == [[self window] attachedSheet]) { 2507 2513 [self _updateSecureInputState]; 2508 _data->_page->viewStateDidChange( );2514 _data->_page->viewStateDidChange(ViewState::WindowIsActive); 2509 2515 } 2510 2516 } … … 2512 2518 - (void)_windowDidMiniaturize:(NSNotification *)notification 2513 2519 { 2514 _data->_page->viewStateDidChange( );2520 _data->_page->viewStateDidChange(ViewState::IsVisible); 2515 2521 } 2516 2522 2517 2523 - (void)_windowDidDeminiaturize:(NSNotification *)notification 2518 2524 { 2519 _data->_page->viewStateDidChange( );2525 _data->_page->viewStateDidChange(ViewState::IsVisible); 2520 2526 } 2521 2527 … … 2532 2538 - (void)_windowDidOrderOffScreen:(NSNotification *)notification 2533 2539 { 2534 _data->_page->viewStateDidChange( );2540 _data->_page->viewStateDidChange(ViewState::IsVisible | ViewState::WindowIsActive); 2535 2541 } 2536 2542 2537 2543 - (void)_windowDidOrderOnScreen:(NSNotification *)notification 2538 2544 { 2539 _data->_page->viewStateDidChange( );2545 _data->_page->viewStateDidChange(ViewState::IsVisible | ViewState::WindowIsActive); 2540 2546 } 2541 2547 … … 2553 2559 - (void)_windowDidChangeOcclusionState:(NSNotification *)notification 2554 2560 { 2555 _data->_page->viewStateDidChange( );2561 _data->_page->viewStateDidChange(ViewState::IsVisible); 2556 2562 } 2557 2563 #endif … … 2577 2583 - (void)viewDidHide 2578 2584 { 2579 _data->_page->viewStateDidChange( );2585 _data->_page->viewStateDidChange(ViewState::IsVisible); 2580 2586 } 2581 2587 2582 2588 - (void)viewDidUnhide 2583 2589 { 2584 _data->_page->viewStateDidChange( );2590 _data->_page->viewStateDidChange(ViewState::IsVisible); 2585 2591 } 2586 2592 … … 2598 2604 - (void)_activeSpaceDidChange:(NSNotification *)notification 2599 2605 { 2600 _data->_page->viewStateDidChange( );2606 _data->_page->viewStateDidChange(ViewState::IsVisible); 2601 2607 } 2602 2608 … … 3485 3491 [self _setAcceleratedCompositingModeRootLayer:_data->_rootLayer.get()]; 3486 3492 3487 _data->_page->viewStateDidChange( );3493 _data->_page->viewStateDidChange(ViewState::WindowIsActive | ViewState::IsInWindow | ViewState::IsVisible); 3488 3494 } 3489 3495 … … 3743 3749 3744 3750 if (_data->_viewInWindowChangeWasDeferred) { 3745 _data->_page->viewStateDidChange( );3751 _data->_page->viewStateDidChange(ViewState::IsInWindow); 3746 3752 _data->_viewInWindowChangeWasDeferred = NO; 3747 3753 } … … 3761 3767 3762 3768 if (_data->_viewInWindowChangeWasDeferred) { 3763 _data->_page->viewStateDidChange( hasPendingViewInWindowChange ? WebPageProxy::WantsReplyOrNot::DoesWantReply : WebPageProxy::WantsReplyOrNot::DoesNotWantReply);3769 _data->_page->viewStateDidChange(ViewState::IsInWindow, hasPendingViewInWindowChange ? WebPageProxy::WantsReplyOrNot::DoesWantReply : WebPageProxy::WantsReplyOrNot::DoesNotWantReply); 3764 3770 _data->_viewInWindowChangeWasDeferred = NO; 3765 3771 } -
trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp
r169439 r169465 93 93 94 94 scene->setActive(active); 95 m_page->viewStateDidChange( );95 m_page->viewStateDidChange(ViewState::WindowIsActive); 96 96 } 97 97 … … 112 112 113 113 m_focused = focused; 114 m_page->viewStateDidChange( );114 m_page->viewStateDidChange(ViewState::IsFocused | ViewState::WindowIsActive); 115 115 } 116 116 … … 121 121 122 122 m_visible = visible; 123 m_page->viewStateDidChange( );123 m_page->viewStateDidChange(ViewState::IsVisible); 124 124 125 125 if (CoordinatedDrawingAreaProxy* drawingArea = static_cast<CoordinatedDrawingAreaProxy*>(page()->drawingArea())) … … 127 127 } 128 128 129 ViewState::Flags WebView::viewState()130 {131 ViewState::Flags viewState = ViewState::IsInWindow | ViewState::WindowIsActive;132 133 if (isFocused())134 viewState |= ViewState::IsFocused;135 136 if (isVisible())137 viewState |= (ViewState::IsVisible | ViewState::IsVisibleOrOccluded);138 else139 viewState |= ViewState::IsVisuallyIdle;140 141 return viewState;142 }143 144 129 void WebView::setUserViewportTranslation(double tx, double ty) 145 130 { … … 339 324 } 340 325 326 bool WebView::isViewWindowActive() 327 { 328 notImplemented(); 329 return true; 330 } 331 332 bool WebView::isViewFocused() 333 { 334 return isFocused(); 335 } 336 337 bool WebView::isViewVisible() 338 { 339 return isVisible(); 340 } 341 342 bool WebView::isViewInWindow() 343 { 344 notImplemented(); 345 return true; 346 } 347 341 348 void WebView::processDidExit() 342 349 { -
trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.h
r169439 r169465 136 136 virtual WebCore::IntSize viewSize() override; 137 137 138 virtual WebCore::ViewState::Flags viewState() override; 138 virtual bool isViewWindowActive() override; 139 virtual bool isViewFocused() override; 140 virtual bool isViewVisible() override; 141 virtual bool isViewInWindow() override; 139 142 140 143 virtual void processDidExit() override; -
trunk/Source/WebKit2/UIProcess/PageClient.h
r169439 r169465 33 33 #include <WebCore/AlternativeTextClient.h> 34 34 #include <WebCore/EditorClient.h> 35 #include <WebCore/ViewState.h>36 35 #include <wtf/Forward.h> 37 36 … … 102 101 virtual WebCore::IntSize viewSize() = 0; 103 102 104 #if PLATFORM(MAC) 103 // Return whether the view's containing window is active. 104 virtual bool isViewWindowActive() = 0; 105 106 // Return whether the view is focused. 107 virtual bool isViewFocused() = 0; 108 109 // Return whether the view is visible. 110 virtual bool isViewVisible() = 0; 111 112 // Return whether the view is visible, or occluded by another window. 113 virtual bool isViewVisibleOrOccluded() { return isViewVisible(); } 114 105 115 // Return whether the view is in a window. 106 116 virtual bool isViewInWindow() = 0; 107 #endif 108 109 virtual WebCore::ViewState::Flags viewState() = 0;117 118 // Return whether the view is visually idle. 119 virtual bool isVisuallyIdle() { return !isViewVisible(); } 110 120 111 121 // Return the layer hosting mode for the view. -
trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp
r169445 r169465 275 275 , m_geolocationPermissionRequestManager(*this) 276 276 , m_notificationPermissionRequestManager(*this) 277 , m_viewState( m_pageClient.viewState())277 , m_viewState(ViewState::NoFlags) 278 278 , m_backForwardList(WebBackForwardList::create(*this)) 279 279 , m_loadStateAtProcessExit(FrameLoadState::State::Finished) … … 367 367 m_visitedLinkProvider->addProcess(m_process.get()); 368 368 } 369 369 370 updateViewState(); 370 371 updateActivityToken(); 371 372 … … 534 535 m_process->addMessageReceiver(Messages::WebPageProxy::messageReceiverName(), m_pageID, *this); 535 536 536 m_viewState = m_pageClient.viewState();537 updateViewState(); 537 538 updateActivityToken(); 538 539 … … 1054 1055 } 1055 1056 1056 void WebPageProxy::viewStateDidChange(WantsReplyOrNot wantsReply) 1057 { 1058 if (!isValid()) 1059 return; 1057 void WebPageProxy::updateViewState(ViewState::Flags flagsToUpdate) 1058 { 1059 m_viewState &= ~flagsToUpdate; 1060 if (flagsToUpdate & ViewState::IsFocused && m_pageClient.isViewFocused()) 1061 m_viewState |= ViewState::IsFocused; 1062 if (flagsToUpdate & ViewState::WindowIsActive && m_pageClient.isViewWindowActive()) 1063 m_viewState |= ViewState::WindowIsActive; 1064 if (flagsToUpdate & ViewState::IsVisible && m_pageClient.isViewVisible()) 1065 m_viewState |= ViewState::IsVisible; 1066 if (flagsToUpdate & ViewState::IsVisibleOrOccluded && m_pageClient.isViewVisibleOrOccluded()) 1067 m_viewState |= ViewState::IsVisibleOrOccluded; 1068 if (flagsToUpdate & ViewState::IsInWindow && m_pageClient.isViewInWindow()) 1069 m_viewState |= ViewState::IsInWindow; 1070 if (flagsToUpdate & ViewState::IsVisuallyIdle && m_pageClient.isVisuallyIdle()) 1071 m_viewState |= ViewState::IsVisuallyIdle; 1072 } 1073 1074 void WebPageProxy::viewStateDidChange(ViewState::Flags mayHaveChanged, WantsReplyOrNot wantsReply) 1075 { 1076 if (!isValid()) 1077 return; 1078 1079 // If the visibility state may have changed, then so may the visually idle & occluded agnostic state. 1080 if (mayHaveChanged & ViewState::IsVisible) 1081 mayHaveChanged |= ViewState::IsVisibleOrOccluded | ViewState::IsVisuallyIdle; 1060 1082 1061 1083 // Record the prior view state, update the flags that may have changed, 1062 1084 // and check which flags have actually changed. 1063 1085 ViewState::Flags previousViewState = m_viewState; 1064 m_viewState = m_pageClient.viewState();1086 updateViewState(mayHaveChanged); 1065 1087 ViewState::Flags changed = m_viewState ^ previousViewState; 1066 1088 … … 1080 1102 m_process->responsivenessTimer()->stop(); 1081 1103 1082 if (( changed & ViewState::IsInWindow) && (m_viewState & ViewState::IsInWindow)) {1104 if ((mayHaveChanged & ViewState::IsInWindow) && (m_viewState & ViewState::IsInWindow)) { 1083 1105 LayerHostingMode layerHostingMode = m_pageClient.viewLayerHostingMode(); 1084 1106 if (m_layerHostingMode != layerHostingMode) { … … 1088 1110 } 1089 1111 1090 if (( changed & ViewState::IsInWindow) && !(m_viewState & ViewState::IsInWindow)) {1112 if ((mayHaveChanged & ViewState::IsInWindow) && !(m_viewState & ViewState::IsInWindow)) { 1091 1113 #if ENABLE(INPUT_TYPE_COLOR_POPOVER) 1092 1114 // When leaving the current page, close the popover color well. … … 3790 3812 // The Web process may have asked to change the cursor when the view was in an active window, but 3791 3813 // if it is no longer in a window or the window is not active, then the cursor should not change. 3792 if ( isViewWindowActive())3814 if (m_pageClient.isViewWindowActive()) 3793 3815 m_pageClient.setCursor(cursor); 3794 3816 } … … 4678 4700 isDiscardable = false; 4679 4701 else 4680 isDiscardable = ! isViewWindowActive() || !isViewVisible();4702 isDiscardable = !m_pageClient.isViewWindowActive() || !isViewVisible(); 4681 4703 4682 4704 m_drawingArea->setBackingStoreIsDiscardable(isDiscardable); -
trunk/Source/WebKit2/UIProcess/WebPageProxy.h
r169439 r169465 569 569 570 570 enum class WantsReplyOrNot { DoesNotWantReply, DoesWantReply }; 571 void viewStateDidChange(W antsReplyOrNot = WantsReplyOrNot::DoesNotWantReply);571 void viewStateDidChange(WebCore::ViewState::Flags mayHaveChanged, WantsReplyOrNot = WantsReplyOrNot::DoesNotWantReply); 572 572 bool isInWindow() const { return m_viewState & WebCore::ViewState::IsInWindow; } 573 573 void waitForDidUpdateViewState(); … … 576 576 577 577 WebCore::IntSize viewSize() const; 578 bool isViewWindowActive() const { return m_viewState & WebCore::ViewState::WindowIsActive; }579 578 bool isViewVisible() const { return m_viewState & WebCore::ViewState::IsVisible; } 579 bool isViewWindowActive() const; 580 580 bool isProcessSuppressible() const; 581 581 … … 1103 1103 void platformInitialize(); 1104 1104 1105 void updateViewState(WebCore::ViewState::Flags flagsToUpdate = WebCore::ViewState::AllFlags); 1105 1106 void updateActivityToken(); 1106 1107 -
trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp
r169439 r169465 670 670 { 671 671 for (const auto& page : m_pageMap.values()) 672 page->viewStateDidChange( );672 page->viewStateDidChange(ViewState::IsVisuallyIdle); 673 673 } 674 674 -
trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.h
r169439 r169465 56 56 virtual void requestScroll(const WebCore::FloatPoint& scrollPosition, bool isProgrammaticScroll) override; 57 57 virtual WebCore::IntSize viewSize() override; 58 virtual WebCore::ViewState::Flags viewState() override; 59 58 virtual bool isViewWindowActive() override; 59 virtual bool isViewFocused() override; 60 virtual bool isViewVisible() override; 61 virtual bool isViewInWindow() override; 62 virtual bool isViewVisibleOrOccluded() override; 63 virtual bool isVisuallyIdle() override; 60 64 virtual void processDidExit() override; 61 65 virtual void didRelaunchProcess() override; -
trunk/Source/WebKit2/UIProcess/ios/PageClientImplIOS.mm
r169439 r169465 111 111 } 112 112 113 // FIXME: https://bugs.webkit.org/show_bug.cgi?id=133098 114 ViewState::Flags PageClientImpl::viewState() 115 { 116 ViewState::Flags viewState = ViewState::NoFlags; 117 118 bool isInWindow = [m_webView window]; 119 bool isVisible = isInWindow && [UIApplication sharedApplication].applicationState != UIApplicationStateBackground; 120 121 if (isInWindow) 122 viewState |= ViewState::IsInWindow; 123 124 if (isVisible) 125 viewState |= ViewState::WindowIsActive | ViewState::IsFocused | ViewState::IsVisible | ViewState::IsVisibleOrOccluded; 126 else 127 viewState |= ViewState::IsVisuallyIdle; 128 129 return viewState; 130 } 131 113 bool PageClientImpl::isViewWindowActive() 114 { 115 // FIXME: https://bugs.webkit.org/show_bug.cgi?id=133098 116 return isViewVisible(); 117 } 118 119 bool PageClientImpl::isViewFocused() 120 { 121 // FIXME: https://bugs.webkit.org/show_bug.cgi?id=133098 122 return isViewWindowActive(); 123 } 124 125 bool PageClientImpl::isViewVisible() 126 { 127 return [m_webView window] && [UIApplication sharedApplication].applicationState != UIApplicationStateBackground; 128 } 129 130 bool PageClientImpl::isViewInWindow() 131 { 132 return [m_webView window]; 133 } 134 135 bool PageClientImpl::isViewVisibleOrOccluded() 136 { 137 return isViewVisible(); 138 } 139 140 bool PageClientImpl::isVisuallyIdle() 141 { 142 return !isViewVisible(); 143 } 144 132 145 void PageClientImpl::processDidExit() 133 146 { -
trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm
r169439 r169465 251 251 if (self.window) 252 252 [self _updateForScreen:self.window.screen]; 253 _page->viewStateDidChange( );253 _page->viewStateDidChange(ViewState::AllFlags); 254 254 } 255 255 … … 452 452 - (void)_applicationDidEnterBackground:(NSNotification*)notification 453 453 { 454 _page->viewStateDidChange( );454 _page->viewStateDidChange(ViewState::AllFlags & ~ViewState::IsInWindow); 455 455 } 456 456 … … 458 458 { 459 459 _page->applicationWillEnterForeground(); 460 _page->viewStateDidChange( );460 _page->viewStateDidChange(ViewState::AllFlags & ~ViewState::IsInWindow); 461 461 } 462 462 -
trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.h
r169439 r169465 66 66 67 67 virtual WebCore::IntSize viewSize(); 68 bool isViewVisible(); 68 virtual bool isViewWindowActive(); 69 virtual bool isViewFocused(); 70 virtual bool isViewVisible(); 71 virtual bool isViewVisibleOrOccluded(); 69 72 virtual bool isViewInWindow(); 70 virtual WebCore::ViewState::Flags viewState() override; 71 73 virtual bool isVisuallyIdle(); 72 74 virtual LayerHostingMode viewLayerHostingMode() override; 73 75 virtual ColorSpaceData colorSpace() override; -
trunk/Source/WebKit2/UIProcess/mac/PageClientImpl.mm
r169439 r169465 191 191 } 192 192 193 bool PageClientImpl::isViewWindowActive() 194 { 195 NSWindow *activeViewWindow = activeView().window; 196 return activeViewWindow.isKeyWindow || [NSApp keyWindow] == activeViewWindow; 197 } 198 199 bool PageClientImpl::isViewFocused() 200 { 201 return [m_wkView _isFocused]; 202 } 203 193 204 void PageClientImpl::makeFirstResponder() 194 205 { … … 225 236 } 226 237 238 bool PageClientImpl::isViewVisibleOrOccluded() 239 { 240 return activeView().window.isVisible; 241 } 242 227 243 bool PageClientImpl::isViewInWindow() 228 244 { … … 230 246 } 231 247 232 ViewState::Flags PageClientImpl::viewState() 233 { 234 ViewState::Flags viewState = ViewState::NoFlags; 235 236 NSWindow *activeViewWindow = activeView().window; 237 bool isVisible = isViewVisible(); 238 239 if (activeViewWindow) 240 viewState |= ViewState::IsInWindow; 241 if (activeViewWindow.isKeyWindow || [NSApp keyWindow] == activeViewWindow) 242 viewState |= ViewState::WindowIsActive; 243 if ([m_wkView _isFocused]) 244 viewState |= ViewState::IsFocused; 245 if (isVisible) 246 viewState |= ViewState::IsVisible; 247 if (activeViewWindow.isVisible) 248 viewState |= ViewState::IsVisibleOrOccluded; 249 if (!isVisible || WindowServerConnection::shared().applicationWindowModificationsHaveStopped()) 250 viewState |= ViewState::IsVisuallyIdle; 251 252 return viewState; 253 } 254 248 bool PageClientImpl::isVisuallyIdle() 249 { 250 return WindowServerConnection::shared().applicationWindowModificationsHaveStopped() || !isViewVisible(); 251 } 252 255 253 LayerHostingMode PageClientImpl::viewLayerHostingMode() 256 254 { … … 543 541 { 544 542 #if USE(AUTOCORRECTION_PANEL) 545 if (!isViewVisible() )543 if (!isViewVisible() || !isViewInWindow()) 546 544 return; 547 ASSERT(isViewInWindow());548 545 m_correctionPanel.show(m_wkView, type, boundingBoxOfReplacedString, replacedString, replacementString, alternativeReplacementStrings); 549 546 #endif … … 624 621 void PageClientImpl::showDictationAlternativeUI(const WebCore::FloatRect& boundingBoxOfDictatedText, uint64_t dictationContext) 625 622 { 626 if (!isViewVisible() )623 if (!isViewVisible() || !isViewInWindow()) 627 624 return; 628 ASSERT(isViewInWindow());629 625 m_alternativeTextUIController->showAlternatives(m_wkView, boundingBoxOfDictatedText, dictationContext, ^(NSString* acceptedAlternative){ 630 626 [m_wkView handleAcceptedAlternativeText:acceptedAlternative];
Note:
See TracChangeset
for help on using the changeset viewer.