Changeset 259209 in webkit
- Timestamp:
- Mar 30, 2020 10:35:11 AM (4 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r259207 r259209 1 2020-03-30 Chris Dumez <cdumez@apple.com> 2 3 Regression(r246188) WebProcess is launched too eagerly when [WKWebView _restoreSessionState] is called 4 https://bugs.webkit.org/show_bug.cgi?id=207908 5 <rdar://problem/59619323> 6 7 Reviewed by Darin Adler. 8 9 Since r246188, the WebProcess is launched eagerly when [WKWebView _restoreSessionState] is called. This is bad 10 for performance because we are unable to leverage the process cache at this point (since we don't know which 11 domain will be loaded). 12 13 This patch thus reverts r246188 and fixes what r246188 was trying to address in a different way. If the process 14 was not launched yet when restoreSessionState() is called, the session state properly gets sent to the WebProcess 15 after launch, via the WebPageCreationParameters. What was missing at that point was that the session state was 16 restore by an API Request. To fix this, we now pass an extra itemStatesWereRestoredByAPIRequest flag in 17 WebPageCreationParameters. 18 19 * Shared/WebPageCreationParameters.cpp: 20 (WebKit::WebPageCreationParameters::encode const): 21 (WebKit::WebPageCreationParameters::decode): 22 * Shared/WebPageCreationParameters.h: 23 * UIProcess/WebPageProxy.cpp: 24 (WebKit::WebPageProxy::restoreFromSessionState): 25 * UIProcess/WebPageProxy.h: 26 * WebProcess/WebPage/WebPage.cpp: 27 (WebKit::m_processDisplayName): 28 1 29 2020-03-30 Wenson Hsieh <wenson_hsieh@apple.com> 2 30 -
trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp
r259187 r259209 53 53 encoder << paginationLineGridEnabled; 54 54 encoder << userAgent; 55 encoder << itemStatesWereRestoredByAPIRequest; 55 56 encoder << itemStates; 56 57 encoder << userContentControllerID; … … 212 213 parameters.userAgent = WTFMove(*userAgent); 213 214 215 Optional<bool> itemStatesWereRestoredByAPIRequest; 216 decoder >> itemStatesWereRestoredByAPIRequest; 217 if (!itemStatesWereRestoredByAPIRequest) 218 return WTF::nullopt; 219 parameters.itemStatesWereRestoredByAPIRequest = *itemStatesWereRestoredByAPIRequest; 220 214 221 Optional<Vector<BackForwardListItemState>> itemStates; 215 222 decoder >> itemStates; -
trunk/Source/WebKit/Shared/WebPageCreationParameters.h
r259187 r259209 98 98 String userAgent; 99 99 100 bool itemStatesWereRestoredByAPIRequest { false }; 100 101 Vector<BackForwardListItemState> itemStates; 101 102 -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r259187 r259209 3499 3499 3500 3500 if (hasBackForwardList) { 3501 // If there isn't a running process yet the RestoreSession message below is just ignored, and 3502 // session is restored when the web process is created via creation parameters which is not 3503 // considered an API request. So, we launch the initial process here before restoring the 3504 // session to ensure the session is restored in the web process via RestoreSession IPC message 3505 // which is considered an API request. See https://bugs.webkit.org/show_bug.cgi?id=198561. 3506 launchInitialProcessIfNecessary(); 3501 m_sessionStateWasRestoredByAPIRequest = true; 3507 3502 3508 3503 m_backForwardList->restoreFromState(WTFMove(sessionState.backForwardListState)); 3509 send(Messages::WebPage::RestoreSession(m_backForwardList->itemStates())); 3504 // If the process is not launched yet, the session will be restored when sending the WebPageCreationParameters; 3505 if (hasRunningProcess()) 3506 send(Messages::WebPage::RestoreSession(m_backForwardList->itemStates())); 3510 3507 3511 3508 auto transaction = m_pageLoadState.transaction(); … … 7685 7682 parameters.paginationLineGridEnabled = m_paginationLineGridEnabled; 7686 7683 parameters.userAgent = userAgent(); 7684 parameters.itemStatesWereRestoredByAPIRequest = m_sessionStateWasRestoredByAPIRequest; 7687 7685 parameters.itemStates = m_backForwardList->itemStates(); 7688 7686 parameters.userContentControllerID = m_userContentController->identifier(); -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r259187 r259209 2752 2752 COMPtr<ID3D11Device1> m_device; 2753 2753 #endif 2754 bool m_sessionStateWasRestoredByAPIRequest { false }; 2754 2755 bool m_isQuotaIncreaseDenied { false }; 2755 2756 bool m_isLayerTreeFrozenDueToSwipeAnimation { false }; -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r259187 r259209 649 649 650 650 if (!parameters.itemStates.isEmpty()) 651 restoreSessionInternal(parameters.itemStates, WasRestoredByAPIRequest::No, WebBackForwardListProxy::OverwriteExistingItem::Yes);651 restoreSessionInternal(parameters.itemStates, parameters.itemStatesWereRestoredByAPIRequest ? WasRestoredByAPIRequest::Yes : WasRestoredByAPIRequest::No, WebBackForwardListProxy::OverwriteExistingItem::Yes); 652 652 653 653 m_drawingArea->enablePainting();
Note: See TracChangeset
for help on using the changeset viewer.