2019-04-19 Kocsen Chung <kocsen_chung@apple.com> Cherry-pick r244458. rdar://problem/50041560 YouTube and Twitter embeds don't load in News https://bugs.webkit.org/show_bug.cgi?id=197111 <rdar://problem/50010081> Reviewed by Timothy Hatcher. * WebProcess/com.apple.WebProcess.sb.in: Adjust this sandbox exception to include both platforms. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@244458 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-04-19 Tim Horton <timothy_horton@apple.com> YouTube and Twitter embeds don't load in News https://bugs.webkit.org/show_bug.cgi?id=197111 <rdar://problem/50010081> Reviewed by Timothy Hatcher. * WebProcess/com.apple.WebProcess.sb.in: Adjust this sandbox exception to include both platforms. 2019-04-14 Babak Shafiei <bshafiei@apple.com> Cherry-pick r243487. rdar://problem/49788895 Do not terminate the NetworkProcess if a third party application sends a NSCredential with a SecIdentityRef https://bugs.webkit.org/show_bug.cgi?id=196213 Patch by Alex Christensen <achristensen@webkit.org> on 2019-03-25 Reviewed by Geoff Garen. Source/WebKit: A release assertion added in r230225 was reachable. I reached it in a unit test that responds to a challenge with a SecIdentityRef wrapped in an NSCredential. * Shared/cf/ArgumentCodersCF.cpp: (IPC::decode): Tools: * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm: Added. (credentialWithIdentityAndKeychainPath): (-[ChallengeDelegate webView:didFinishNavigation:]): (-[ChallengeDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]): (TestWebKitAPI::TEST): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243487 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-03-25 Alex Christensen <achristensen@webkit.org> Do not terminate the NetworkProcess if a third party application sends a NSCredential with a SecIdentityRef https://bugs.webkit.org/show_bug.cgi?id=196213 Reviewed by Geoff Garen. A release assertion added in r230225 was reachable. I reached it in a unit test that responds to a challenge with a SecIdentityRef wrapped in an NSCredential. * Shared/cf/ArgumentCodersCF.cpp: (IPC::decode): 2019-04-11 Kocsen Chung <kocsen_chung@apple.com> Revert r244165. rdar://problem/49788895 2019-04-11 Alan Coon <alancoon@apple.com> Apply patch. rdar://problem/49788956 2019-04-11 Chris Dumez <cdumez@apple.com> WebProcessCache should keep track of processes being added https://bugs.webkit.org/show_bug.cgi?id=195538 Reviewed by Geoffrey Garen. WebProcessCache should keep track of processes being added, while they are being checked for responsiveness. This is useful so that: - Requests to clear the cache also clear processes being added - Requests to remove a given process from the cache (either because it crashed or because it is being used for a history navigation) actually remove the process if it is still being checked for responsiveness. - The cached process eviction timer applies to such processes in case something goes wrong with the code and the pending request does not get processed. * UIProcess/WebProcessCache.cpp: (WebKit::generateAddRequestIdentifier): (WebKit::WebProcessCache::addProcessIfPossible): (WebKit::WebProcessCache::addProcess): (WebKit::WebProcessCache::clear): (WebKit::WebProcessCache::clearAllProcessesForSession): (WebKit::WebProcessCache::removeProcess): (WebKit::WebProcessCache::CachedProcess::evictionTimerFired): (WebKit::WebProcessCache::evictProcess): Deleted. * UIProcess/WebProcessCache.h: (WebKit::WebProcessCache::size const): * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::processForNavigationInternal): * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch): 2019-04-10 Alan Coon <alancoon@apple.com> Cherry-pick r243841. rdar://problem/49725678 -apple-trailing-word is needed for browser detection https://bugs.webkit.org/show_bug.cgi?id=196575 Unreviewed. PerformanceTests: * MotionMark/resources/debug-runner/motionmark.css: (#intro .start-benchmark p): Source/JavaScriptCore: * Configurations/FeatureDefines.xcconfig: Source/WebCore: This is an unreviewed partial revert of r243819. Turns out there are some websites which use this property to do browser detection. So, we need to continue to parse the property, but we don't need the property to do anything. Test: fast/text/trailing-word-detection.html * Configurations/FeatureDefines.xcconfig: * css/CSSComputedStyleDeclaration.cpp: (WebCore::ComputedStyleExtractor::valueForPropertyinStyle): * css/CSSPrimitiveValueMappings.h: (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): (WebCore::CSSPrimitiveValue::operator TrailingWord const): * css/CSSProperties.json: * css/CSSValueKeywords.in: * css/parser/CSSParserFastPaths.cpp: (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue): (WebCore::CSSParserFastPaths::isKeywordPropertyID): * rendering/style/RenderStyle.h: (WebCore::RenderStyle::trailingWord const): (WebCore::RenderStyle::setTrailingWord): (WebCore::RenderStyle::initialTrailingWord): * rendering/style/RenderStyleConstants.h: Source/WebCore/PAL: * Configurations/FeatureDefines.xcconfig: Source/WebKit: * Configurations/FeatureDefines.xcconfig: Source/WebKitLegacy/mac: * Configurations/FeatureDefines.xcconfig: Tools: * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: LayoutTests: * fast/text/trailing-word-detection-expected.txt: Added. * fast/text/trailing-word-detection.html: Added. * platform/gtk/TestExpectations: * platform/win/TestExpectations: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243841 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-04-03 Myles C. Maxfield <mmaxfield@apple.com> -apple-trailing-word is needed for browser detection https://bugs.webkit.org/show_bug.cgi?id=196575 Unreviewed. * Configurations/FeatureDefines.xcconfig: 2019-04-10 Alan Coon <alancoon@apple.com> Cherry-pick r243819. rdar://problem/49725678 Remove support for -apple-trailing-word https://bugs.webkit.org/show_bug.cgi?id=196525 Reviewed by Zalan Bujtas. This CSS property is nonstandard and not used. .: * Source/cmake/WebKitFeatures.cmake: Source/JavaScriptCore: * Configurations/FeatureDefines.xcconfig: Source/WebCore: * Configurations/FeatureDefines.xcconfig: * css/CSSComputedStyleDeclaration.cpp: (WebCore::ComputedStyleExtractor::valueForPropertyinStyle): * css/CSSPrimitiveValueMappings.h: (WebCore::CSSPrimitiveValue::operator TrailingWord const): Deleted. * css/CSSProperties.json: * css/CSSValueKeywords.in: * css/parser/CSSParserFastPaths.cpp: (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue): (WebCore::CSSParserFastPaths::isKeywordPropertyID): * rendering/SimpleLineLayout.cpp: (WebCore::SimpleLineLayout::canUseForStyle): * rendering/SimpleLineLayoutCoverage.cpp: (WebCore::SimpleLineLayout::printReason): * rendering/SimpleLineLayoutCoverage.h: * rendering/line/BreakingContext.h: (WebCore::BreakingContext::BreakingContext): (WebCore::BreakingContext::lineBreak): (WebCore::BreakingContext::clearLineBreakIfFitsOnLine): (WebCore::BreakingContext::commitLineBreakClear): (WebCore::BreakingContext::commitLineBreakAtCurrentWidth): (WebCore::BreakingContext::handleBR): (WebCore::BreakingContext::handleFloat): (WebCore::BreakingContext::handleText): (WebCore::BreakingContext::handleEndOfLine): (WebCore::BreakingContext::InlineIteratorHistory::InlineIteratorHistory): Deleted. (WebCore::BreakingContext::InlineIteratorHistory::push): Deleted. (WebCore::BreakingContext::InlineIteratorHistory::update): Deleted. (WebCore::BreakingContext::InlineIteratorHistory::renderer const): Deleted. (WebCore::BreakingContext::InlineIteratorHistory::offset const): Deleted. (WebCore::BreakingContext::InlineIteratorHistory::nextBreakablePosition const): Deleted. (WebCore::BreakingContext::InlineIteratorHistory::atTextParagraphSeparator const): Deleted. (WebCore::BreakingContext::InlineIteratorHistory::previousInSameNode const): Deleted. (WebCore::BreakingContext::InlineIteratorHistory::get const): Deleted. (WebCore::BreakingContext::InlineIteratorHistory::current const): Deleted. (WebCore::BreakingContext::InlineIteratorHistory::historyLength const): Deleted. (WebCore::BreakingContext::InlineIteratorHistory::moveTo): Deleted. (WebCore::BreakingContext::InlineIteratorHistory::increment): Deleted. (WebCore::BreakingContext::InlineIteratorHistory::clear): Deleted. (WebCore::BreakingContext::optimalLineBreakLocationForTrailingWord): Deleted. * rendering/style/RenderStyle.h: (WebCore::RenderStyle::trailingWord const): Deleted. (WebCore::RenderStyle::setTrailingWord): Deleted. (WebCore::RenderStyle::initialTrailingWord): Deleted. * rendering/style/RenderStyleConstants.h: * rendering/style/StyleRareInheritedData.cpp: (WebCore::StyleRareInheritedData::StyleRareInheritedData): (WebCore::StyleRareInheritedData::operator== const): * rendering/style/StyleRareInheritedData.h: Source/WebCore/PAL: * Configurations/FeatureDefines.xcconfig: Source/WebInspectorUI: * UserInterface/Models/CSSKeywordCompletions.js: Source/WebKit: * Configurations/FeatureDefines.xcconfig: Source/WebKitLegacy/mac: * Configurations/FeatureDefines.xcconfig: Tools: * Scripts/webkitperl/FeatureList.pm: * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: LayoutTests: * fast/text/trailing-word-expected.html: Removed. * fast/text/trailing-word.html: Removed. * platform/gtk/TestExpectations: * platform/mac/fast/text/trailing-word-parse-expected.txt: Removed. * platform/mac/fast/text/trailing-word-parse.html: Removed. * platform/win/TestExpectations: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243819 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-04-03 Myles C. Maxfield <mmaxfield@apple.com> Remove support for -apple-trailing-word https://bugs.webkit.org/show_bug.cgi?id=196525 Reviewed by Zalan Bujtas. This CSS property is nonstandard and not used. * Configurations/FeatureDefines.xcconfig: 2019-04-10 Alan Coon <alancoon@apple.com> Cherry-pick r243487. rdar://problem/49788895 Do not terminate the NetworkProcess if a third party application sends a NSCredential with a SecIdentityRef https://bugs.webkit.org/show_bug.cgi?id=196213 Patch by Alex Christensen <achristensen@webkit.org> on 2019-03-25 Reviewed by Geoff Garen. Source/WebKit: A release assertion added in r230225 was reachable. I reached it in a unit test that responds to a challenge with a SecIdentityRef wrapped in an NSCredential. * Shared/cf/ArgumentCodersCF.cpp: (IPC::decode): Tools: * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: * TestWebKitAPI/Tests/WebKitCocoa/Challenge.mm: Added. (credentialWithIdentityAndKeychainPath): (-[ChallengeDelegate webView:didFinishNavigation:]): (-[ChallengeDelegate webView:didReceiveAuthenticationChallenge:completionHandler:]): (TestWebKitAPI::TEST): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243487 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-03-25 Alex Christensen <achristensen@webkit.org> Do not terminate the NetworkProcess if a third party application sends a NSCredential with a SecIdentityRef https://bugs.webkit.org/show_bug.cgi?id=196213 Reviewed by Geoff Garen. A release assertion added in r230225 was reachable. I reached it in a unit test that responds to a challenge with a SecIdentityRef wrapped in an NSCredential. * Shared/cf/ArgumentCodersCF.cpp: (IPC::decode): 2019-04-09 Alan Coon <alancoon@apple.com> Cherry-pick r243562. rdar://problem/49725686 [ iOS Sim ] REGRESSION (r242277) Layout Test http/tests/cookies/same-site/lax-samesite-cookie-after-cross-site-history-load.php is a flaky timeout https://bugs.webkit.org/show_bug.cgi?id=195425 <rdar://problem/48682403> Reviewed by Alex Christensen. When process-swapping on history navigation, we lookup the WebProcessProxy we'd like to use from the process identifier that is saved on the WebBackForwardListItem, to try and load the item in the process in which it was previously loaded. However, we were failing to check if the WebProcess in question was still running so we could potentially try to use a process that's already exited. * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::processForNavigationInternal): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243562 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-03-27 Chris Dumez <cdumez@apple.com> [ iOS Sim ] REGRESSION (r242277) Layout Test http/tests/cookies/same-site/lax-samesite-cookie-after-cross-site-history-load.php is a flaky timeout https://bugs.webkit.org/show_bug.cgi?id=195425 <rdar://problem/48682403> Reviewed by Alex Christensen. When process-swapping on history navigation, we lookup the WebProcessProxy we'd like to use from the process identifier that is saved on the WebBackForwardListItem, to try and load the item in the process in which it was previously loaded. However, we were failing to check if the WebProcess in question was still running so we could potentially try to use a process that's already exited. * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::processForNavigationInternal): 2019-04-09 Alan Coon <alancoon@apple.com> Cherry-pick r243848. rdar://problem/49725697 The page's focusedFrame / frameSetLargestFrame do not get cleared on process swap or crash https://bugs.webkit.org/show_bug.cgi?id=196588 <rdar://problem/49365787> Reviewed by Ryosuke Niwa. Source/WebKit: The page's focusedFrame / frameSetLargestFrame do not get cleared on process swap or crash. This can lead to returning stale frames to the client if it asks for those. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::resetState): Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKit/ReloadPageAfterCrash.cpp: (TestWebKitAPI::nullJavaScriptCallback): (TestWebKitAPI::didCrashCheckFrames): (TestWebKitAPI::TEST): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243848 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-04-03 Chris Dumez <cdumez@apple.com> The page's focusedFrame / frameSetLargestFrame do not get cleared on process swap or crash https://bugs.webkit.org/show_bug.cgi?id=196588 <rdar://problem/49365787> Reviewed by Ryosuke Niwa. The page's focusedFrame / frameSetLargestFrame do not get cleared on process swap or crash. This can lead to returning stale frames to the client if it asks for those. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::resetState): 2019-03-27 Alan Coon <alancoon@apple.com> Cherry-pick r243291. rdar://problem/49307996 Fix possible memory leak when dismissing a color picker https://bugs.webkit.org/show_bug.cgi?id=196026 <rdar://problem/48778568> Reviewed by Wenson Hsieh. Fix a problem with WebPageProxy::endColorPicker where an early return could leave a color picker with a +1 reference count after dismissing it. * UIProcess/WebColorPicker.cpp: (WebKit::WebColorPicker::endPicker): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::endColorPicker): (WebKit::WebPageProxy::didEndColorPicker): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243291 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-03-21 Brent Fulgham <bfulgham@apple.com> Fix possible memory leak when dismissing a color picker https://bugs.webkit.org/show_bug.cgi?id=196026 <rdar://problem/48778568> Reviewed by Wenson Hsieh. Fix a problem with WebPageProxy::endColorPicker where an early return could leave a color picker with a +1 reference count after dismissing it. * UIProcess/WebColorPicker.cpp: (WebKit::WebColorPicker::endPicker): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::endColorPicker): (WebKit::WebPageProxy::didEndColorPicker): 2019-03-27 Alan Coon <alancoon@apple.com> Apply patch. rdar://problem/49307967 fix-radar-48878188 2019-03-14 Youenn Fablet <youenn@apple.com> v2: CrashTracer: MobileSafari at WebKit: WebKit::WebPageProxy::setMediaStreamCaptureMuted. rdar://problem/48878188. There are cases where we might not update correctly the stateMap in UserMediaProcessManager.cpp. One such case is: - UserMediaPermissionRequestManagerProxy registers itself at construction time in a map whose key is the page process - UserMediaPermissionRequestManagerProxy unregisters itself at destruction time by using the page process as well. - Page changed process in some cases without UserMediaPermissionRequestManagerProxy being destroyed. In Jazzkon, a new model was implemented that removed the need for this map. For F, to ensure that we do not use wrong managers, keep a Vector of WeakPtr instead of a Vector of raw pointers. Whenever getting the managers, check whether some of them are destroyed and remove them from the vector. * UIProcess/UserMediaProcessManager.cpp: (WebKit::ProcessState::managers): (WebKit::ProcessState::addRequestManager): (WebKit::ProcessState::removeRequestManager): 2019-03-18 Kocsen Chung <kocsen_chung@apple.com> Apply patch. rdar://problem/48839387 2019-03-18 John Wilander <wilander@apple.com> Resource Load Statistics: Further restrict client-side cookie persistence after cross-site navigations with link decoration (branch patch) https://bugs.webkit.org/show_bug.cgi?id=195711 <rdar://problem/48839387> <rdar://problem/48832278> Reviewed by Brent Fulgham. This patch does three things: 1) Applies the changes in https://trac.webkit.org/changeset/242288 to a branch. The only meaningful difference is the use of String instead of WebCore::RegistrableDomain. Tracked by <rdar://problem/48839387>. 2) Set the lifetime cap for client-side cookies in the call to NetworkStorageSession::setPrevalentDomainsToBlockCookiesFor(). This change makes sure that if ITP is enabled, the cap will be applied. Previously, the cap was set when WebProcessPool::ensureNetworkProcess() called WebsiteDataStore::didCreateNetworkProcess() which might fail if the website data store's m_resourceLoadStatistics object is not created yet. Tracked by <rdar://problem/48832278>. 3) Makes sure WebProcessPool::ensureNetworkProcess() calls WebsiteDataStore::didCreateNetworkProcess() also if there was an existing website data store object supplied (the withWebsiteDataStore parameter). Tracked by <rdar://problem/48832278>. * NetworkProcess/NetworkConnectionToWebProcess.cpp: (WebKit::NetworkConnectionToWebProcess::clearPageSpecificDataForResourceLoadStatistics): (WebKit::NetworkConnectionToWebProcess::removeStorageAccessForAllFramesOnPage): Deleted. * NetworkProcess/NetworkConnectionToWebProcess.h: * NetworkProcess/NetworkConnectionToWebProcess.messages.in: * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::committedCrossSiteLoadWithLinkDecoration): (WebKit::NetworkProcess::resetCrossSiteLoadsWithLinkDecorationForTesting): * NetworkProcess/NetworkProcess.h: * NetworkProcess/NetworkProcess.messages.in: * UIProcess/API/C/WKWebsiteDataStoreRef.cpp: (WKWebsiteDataStoreStatisticsResetToConsistentState): * UIProcess/Network/NetworkProcessProxy.cpp: (WebKit::NetworkProcessProxy::resetCrossSiteLoadsWithLinkDecorationForTesting): * UIProcess/Network/NetworkProcessProxy.h: * UIProcess/ResourceLoadStatisticsMemoryStore.cpp: (WebKit::ResourceLoadStatisticsMemoryStore::didCreateNetworkProcess): * UIProcess/WebPageProxy.cpp: (WebKit::isNonUniqueNavigationWithLinkDecoration): (WebKit::WebPageProxy::didCommitLoadForFrame): * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::ensureNetworkProcess): * UIProcess/WebsiteData/WebsiteDataStore.cpp: (WebKit::WebsiteDataStore::resetCrossSiteLoadsWithLinkDecorationForTesting): * UIProcess/WebsiteData/WebsiteDataStore.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::close): 2019-03-06 Kocsen Chung <kocsen_chung@apple.com> Cherry-pick r242554. rdar://problem/48647490 REGRESSION (r238490): YouTube.com: Returning PiP to Safari after sleeping device loses page https://bugs.webkit.org/show_bug.cgi?id=195364 <rdar://problem/48538837> Reviewed by Geoffrey Garen. Make sure we unset the LayerTreeFreezeReason::ProcessSuspended layer tree freeze reason when WebPage::applicationWillEnterForeground() is called. This restores pre-r238490 behavior and addresses the issue with PiP on youtube.com. * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::applicationWillEnterForeground): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242554 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-03-06 Chris Dumez <cdumez@apple.com> REGRESSION (r238490): YouTube.com: Returning PiP to Safari after sleeping device loses page https://bugs.webkit.org/show_bug.cgi?id=195364 <rdar://problem/48538837> Reviewed by Geoffrey Garen. Make sure we unset the LayerTreeFreezeReason::ProcessSuspended layer tree freeze reason when WebPage::applicationWillEnterForeground() is called. This restores pre-r238490 behavior and addresses the issue with PiP on youtube.com. * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::applicationWillEnterForeground): 2019-03-13 Babak Shafiei <bshafiei@apple.com> Apply patch. rdar://problem/48839383 Cherry-pick r242230. rdar://problem/48839383 Revert r232263: it caused processes to crash because process was suspended with locked file https://bugs.webkit.org/show_bug.cgi?id=195122 <rdar://problem/48444599> Reviewed by Geoffrey Garen. * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::NetworkProcess): * NetworkProcess/NetworkProcess.h: * Shared/WebSQLiteDatabaseTracker.cpp: (WebKit::WebSQLiteDatabaseTracker::WebSQLiteDatabaseTracker): (WebKit::WebSQLiteDatabaseTracker::hysteresisUpdated): * Shared/WebSQLiteDatabaseTracker.h: * WebProcess/WebProcess.cpp: (WebKit::m_webSQLiteDatabaseTracker): (WebKit::m_nonVisibleProcessCleanupTimer): Deleted. * WebProcess/WebProcess.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@242230 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-03-13 Babak Shafiei <bshafiei@apple.com> Cherry-pick r242230. rdar://problem/48839383 Revert r232263: it caused processes to crash because process was suspended with locked file https://bugs.webkit.org/show_bug.cgi?id=195122 <rdar://problem/48444599> Reviewed by Geoffrey Garen. * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::NetworkProcess): * NetworkProcess/NetworkProcess.h: * Shared/WebSQLiteDatabaseTracker.cpp: (WebKit::WebSQLiteDatabaseTracker::WebSQLiteDatabaseTracker): (WebKit::WebSQLiteDatabaseTracker::hysteresisUpdated): * Shared/WebSQLiteDatabaseTracker.h: * WebProcess/WebProcess.cpp: (WebKit::m_webSQLiteDatabaseTracker): (WebKit::m_nonVisibleProcessCleanupTimer): Deleted. * WebProcess/WebProcess.h: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@242230 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-28 Sihui Liu <sihui_liu@apple.com> Revert r232263: it caused processes to crash because process was suspended with locked file https://bugs.webkit.org/show_bug.cgi?id=195122 <rdar://problem/48444599> Reviewed by Geoffrey Garen. * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::NetworkProcess): * NetworkProcess/NetworkProcess.h: * Shared/WebSQLiteDatabaseTracker.cpp: (WebKit::WebSQLiteDatabaseTracker::WebSQLiteDatabaseTracker): (WebKit::WebSQLiteDatabaseTracker::hysteresisUpdated): * Shared/WebSQLiteDatabaseTracker.h: * WebProcess/WebProcess.cpp: (WebKit::m_webSQLiteDatabaseTracker): (WebKit::m_nonVisibleProcessCleanupTimer): Deleted. * WebProcess/WebProcess.h: 2019-03-13 Babak Shafiei <bshafiei@apple.com> Cherry-pick r242735. rdar://problem/48780112 Add a WKContentRuleList variant that uses copied memory instead of mmap'd shared memory for class A containerized apps https://bugs.webkit.org/show_bug.cgi?id=195511 <rdar://problem/44873269> Patch by Alex Christensen <achristensen@webkit.org> on 2019-03-11 Reviewed by Darin Adler. Source/WebKit: * NetworkProcess/NetworkContentRuleListManager.cpp: (WebKit::NetworkContentRuleListManager::addContentRuleLists): * NetworkProcess/NetworkContentRuleListManager.h: * NetworkProcess/cache/NetworkCacheFileSystem.cpp: (WebKit::NetworkCache::pathRegisteredAsUnsafeToMemoryMapForTesting): (WebKit::NetworkCache::registerPathAsUnsafeToMemoryMapForTesting): (WebKit::NetworkCache::isSafeToUseMemoryMapForPath): * NetworkProcess/cache/NetworkCacheFileSystem.h: * Shared/WebCompiledContentRuleList.cpp: (WebKit::WebCompiledContentRuleList::usesCopiedMemory const): (WebKit::WebCompiledContentRuleList::conditionsApplyOnlyToDomain const): (WebKit::WebCompiledContentRuleList::filtersWithoutConditionsBytecode const): (WebKit::WebCompiledContentRuleList::filtersWithConditionsBytecode const): (WebKit::WebCompiledContentRuleList::topURLFiltersBytecode const): (WebKit::WebCompiledContentRuleList::actions const): * Shared/WebCompiledContentRuleList.h: * Shared/WebCompiledContentRuleListData.cpp: (WebKit::WebCompiledContentRuleListData::size const): (WebKit::WebCompiledContentRuleListData::dataPointer const): (WebKit::WebCompiledContentRuleListData::encode const): (WebKit::WebCompiledContentRuleListData::decode): * Shared/WebCompiledContentRuleListData.h: (WebKit::WebCompiledContentRuleListData::WebCompiledContentRuleListData): * UIProcess/API/APIContentRuleList.cpp: (API::ContentRuleList::usesCopiedMemory const): * UIProcess/API/APIContentRuleList.h: * UIProcess/API/APIContentRuleListStore.cpp: (API::getData): (API::decodeContentRuleListMetaData): (API::ContentRuleListStore::readContentsOfFile): (API::MappedOrCopiedData::dataPointer const): (API::openAndMapOrCopyContentRuleList): (API::compiledToFile): (API::createExtension): (API::ContentRuleListStore::lookupContentRuleList): (API::ContentRuleListStore::compileContentRuleList): (API::ContentRuleListStore::getContentRuleListSource): (API::openAndMapContentRuleList): Deleted. * UIProcess/API/APIContentRuleListStore.h: * UIProcess/API/Cocoa/APIContentRuleListStoreCocoa.mm: (API::ContentRuleListStore::readContentsOfFile): * UIProcess/API/Cocoa/WKContentRuleListStore.mm: (+[WKContentRuleListStore _registerPathAsUnsafeToMemoryMapForTesting:]): * UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h: * UIProcess/API/Cocoa/_WKUserContentFilter.mm: (-[_WKUserContentFilter usesCopiedMemory]): * UIProcess/API/Cocoa/_WKUserContentFilterPrivate.h: * WebProcess/UserContent/WebUserContentController.cpp: (WebKit::WebUserContentController::addContentRuleLists): * WebProcess/UserContent/WebUserContentController.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::m_hostFileDescriptor): Tools: * TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm: (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:startURLSchemeTask:]): (-[TestSchemeHandlerSubresourceShouldBeBlocked webView:stopURLSchemeTask:]): (TEST_F): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242735 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-03-11 Alex Christensen <achristensen@webkit.org> Add a WKContentRuleList variant that uses copied memory instead of mmap'd shared memory for class A containerized apps https://bugs.webkit.org/show_bug.cgi?id=195511 <rdar://problem/44873269> Reviewed by Darin Adler. * NetworkProcess/NetworkContentRuleListManager.cpp: (WebKit::NetworkContentRuleListManager::addContentRuleLists): * NetworkProcess/NetworkContentRuleListManager.h: * NetworkProcess/cache/NetworkCacheFileSystem.cpp: (WebKit::NetworkCache::pathRegisteredAsUnsafeToMemoryMapForTesting): (WebKit::NetworkCache::registerPathAsUnsafeToMemoryMapForTesting): (WebKit::NetworkCache::isSafeToUseMemoryMapForPath): * NetworkProcess/cache/NetworkCacheFileSystem.h: * Shared/WebCompiledContentRuleList.cpp: (WebKit::WebCompiledContentRuleList::usesCopiedMemory const): (WebKit::WebCompiledContentRuleList::conditionsApplyOnlyToDomain const): (WebKit::WebCompiledContentRuleList::filtersWithoutConditionsBytecode const): (WebKit::WebCompiledContentRuleList::filtersWithConditionsBytecode const): (WebKit::WebCompiledContentRuleList::topURLFiltersBytecode const): (WebKit::WebCompiledContentRuleList::actions const): * Shared/WebCompiledContentRuleList.h: * Shared/WebCompiledContentRuleListData.cpp: (WebKit::WebCompiledContentRuleListData::size const): (WebKit::WebCompiledContentRuleListData::dataPointer const): (WebKit::WebCompiledContentRuleListData::encode const): (WebKit::WebCompiledContentRuleListData::decode): * Shared/WebCompiledContentRuleListData.h: (WebKit::WebCompiledContentRuleListData::WebCompiledContentRuleListData): * UIProcess/API/APIContentRuleList.cpp: (API::ContentRuleList::usesCopiedMemory const): * UIProcess/API/APIContentRuleList.h: * UIProcess/API/APIContentRuleListStore.cpp: (API::getData): (API::decodeContentRuleListMetaData): (API::ContentRuleListStore::readContentsOfFile): (API::MappedOrCopiedData::dataPointer const): (API::openAndMapOrCopyContentRuleList): (API::compiledToFile): (API::createExtension): (API::ContentRuleListStore::lookupContentRuleList): (API::ContentRuleListStore::compileContentRuleList): (API::ContentRuleListStore::getContentRuleListSource): (API::openAndMapContentRuleList): Deleted. * UIProcess/API/APIContentRuleListStore.h: * UIProcess/API/Cocoa/APIContentRuleListStoreCocoa.mm: (API::ContentRuleListStore::readContentsOfFile): * UIProcess/API/Cocoa/WKContentRuleListStore.mm: (+[WKContentRuleListStore _registerPathAsUnsafeToMemoryMapForTesting:]): * UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h: * UIProcess/API/Cocoa/_WKUserContentFilter.mm: (-[_WKUserContentFilter usesCopiedMemory]): * UIProcess/API/Cocoa/_WKUserContentFilterPrivate.h: * WebProcess/UserContent/WebUserContentController.cpp: (WebKit::WebUserContentController::addContentRuleLists): * WebProcess/UserContent/WebUserContentController.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::m_hostFileDescriptor): 2019-03-13 Babak Shafiei <bshafiei@apple.com> Cherry-pick r242587. rdar://problem/48839354 Crash when attempting to change input type while dismissing datalist suggestions https://bugs.webkit.org/show_bug.cgi?id=195384 <rdar://problem/48563718> Reviewed by Brent Fulgham. Source/WebCore: When closing a datalist suggestion menu, WebPageProxy sends a message to WebPage instructing it to tell its active datalist suggestions picker to close. However, for a myriad of reasons, the suggestions picker (kept alive by its text input type) may have already gone away by this point. To mitigate this, make WebPage weakly reference its active datalist suggestions picker. Test: fast/forms/datalist/change-input-type-after-closing-datalist-suggestions.html * platform/DataListSuggestionPicker.h: Make DataListSuggestionPicker capable of being weakly referenced. Additionally, fix some minor preexisting issues in this header (#imports instead of #includes, as well as an unnecessary include of IntRect.h). Source/WebKit: See WebCore ChangeLog for more details. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::setActiveDataListSuggestionPicker): (WebKit::WebPage::didSelectDataListOption): (WebKit::WebPage::didCloseSuggestions): * WebProcess/WebPage/WebPage.h: Turn m_activeDataListSuggestionPicker from a raw pointer into a WeakPtr. LayoutTests: Add a new layout test to exercise this scenario. * fast/forms/datalist/change-input-type-after-closing-datalist-suggestions-expected.txt: Added. * fast/forms/datalist/change-input-type-after-closing-datalist-suggestions.html: Added. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242587 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-03-06 Wenson Hsieh <wenson_hsieh@apple.com> Crash when attempting to change input type while dismissing datalist suggestions https://bugs.webkit.org/show_bug.cgi?id=195384 <rdar://problem/48563718> Reviewed by Brent Fulgham. See WebCore ChangeLog for more details. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::setActiveDataListSuggestionPicker): (WebKit::WebPage::didSelectDataListOption): (WebKit::WebPage::didCloseSuggestions): * WebProcess/WebPage/WebPage.h: Turn m_activeDataListSuggestionPicker from a raw pointer into a WeakPtr. 2019-03-13 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241452. rdar://problem/48839390 Make WebRTCUnifiedPlanEnabled true by default https://bugs.webkit.org/show_bug.cgi?id=194595 Reviewed by Eric Carlson. * Shared/WebPreferences.yaml: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241452 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-13 Youenn Fablet <youenn@apple.com> Make WebRTCUnifiedPlanEnabled true by default https://bugs.webkit.org/show_bug.cgi?id=194595 Reviewed by Eric Carlson. * Shared/WebPreferences.yaml: 2019-03-13 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241002. rdar://problem/48839377 UserMediaPermissionRequestManagerProxy lambdas should check for 'this' being valid https://bugs.webkit.org/show_bug.cgi?id=194246 Reviewed by Eric Carlson. With PSON enabled, the manager proxy can be destroyed. It is thus important for its callbacks to check for 'this' to be valid. * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: (WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged): (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame): (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241002 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-05 Youenn Fablet <youenn@apple.com> UserMediaPermissionRequestManagerProxy lambdas should check for 'this' being valid https://bugs.webkit.org/show_bug.cgi?id=194246 Reviewed by Eric Carlson. With PSON enabled, the manager proxy can be destroyed. It is thus important for its callbacks to check for 'this' to be valid. * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: (WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged): (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame): (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame): 2019-03-12 Kocsen Chung <kocsen_chung@apple.com> Cherry-pick r242502. rdar://problem/48591282 Cherry-pick r242394. rdar://problem/48591281 Unreviewed build fix after r242378 * UIProcess/ios/EditableImageController.mm: (WebKit::EditableImageController::associateWithAttachment): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242394 268f45cc-cd09-0410-ab3c-d52691b4dbfc git-svn-id: https://svn.webkit.org/repository/webkit/branches/safari-607.1.40.0-branch@242502 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-03-05 Kocsen Chung <kocsen_chung@apple.com> Cherry-pick r242394. rdar://problem/48591281 Unreviewed build fix after r242378 * UIProcess/ios/EditableImageController.mm: (WebKit::EditableImageController::associateWithAttachment): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242394 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-03-04 Brent Fulgham <bfulgham@apple.com> Unreviewed build fix after r242378 * UIProcess/ios/EditableImageController.mm: (WebKit::EditableImageController::associateWithAttachment): 2019-03-12 Kocsen Chung <kocsen_chung@apple.com> Cherry-pick r242501. rdar://problem/48591282 Cherry-pick r242378. rdar://problem/48591281 Check contextIDs when handling WebContent messages https://bugs.webkit.org/show_bug.cgi?id=195289 <rdar://problem/48475870> Reviewed by Alex Christensen. The WebContent process is untrusted because it handles arbitrary markup and javascript from untrusted sources. We should handle its messages with suspicion, and make sure the arguments are valid and usable before honoring them. This patch hardens the message passing layer by performing MESSAGE_CHECK in places that had been overlooked. * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm: (WebKit::PlaybackSessionManagerProxy::setUpPlaybackControlsManagerWithID): (WebKit::PlaybackSessionManagerProxy::currentTimeChanged): (WebKit::PlaybackSessionManagerProxy::bufferedTimeChanged): (WebKit::PlaybackSessionManagerProxy::seekableRangesVectorChanged): (WebKit::PlaybackSessionManagerProxy::canPlayFastReverseChanged): (WebKit::PlaybackSessionManagerProxy::audioMediaSelectionOptionsChanged): (WebKit::PlaybackSessionManagerProxy::legibleMediaSelectionOptionsChanged): (WebKit::PlaybackSessionManagerProxy::audioMediaSelectionIndexChanged): (WebKit::PlaybackSessionManagerProxy::legibleMediaSelectionIndexChanged): (WebKit::PlaybackSessionManagerProxy::externalPlaybackPropertiesChanged): (WebKit::PlaybackSessionManagerProxy::wirelessVideoPlaybackDisabledChanged): (WebKit::PlaybackSessionManagerProxy::mutedChanged): (WebKit::PlaybackSessionManagerProxy::volumeChanged): (WebKit::PlaybackSessionManagerProxy::durationChanged): (WebKit::PlaybackSessionManagerProxy::playbackStartedTimeChanged): (WebKit::PlaybackSessionManagerProxy::rateChanged): (WebKit::PlaybackSessionManagerProxy::pictureInPictureSupportedChanged): (WebKit::PlaybackSessionManagerProxy::pictureInPictureActiveChanged): (WebKit::PlaybackSessionManagerProxy::handleControlledElementIDResponse const): * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints): (WebKit::UserMediaCaptureManagerProxy::startProducingData): (WebKit::UserMediaCaptureManagerProxy::stopProducingData): (WebKit::UserMediaCaptureManagerProxy::end): (WebKit::UserMediaCaptureManagerProxy::capabilities): (WebKit::UserMediaCaptureManagerProxy::setMuted): (WebKit::UserMediaCaptureManagerProxy::applyConstraints): * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm: (WebKit::VideoFullscreenManagerProxy::setupFullscreenWithID): (WebKit::VideoFullscreenManagerProxy::setHasVideo): (WebKit::VideoFullscreenManagerProxy::setVideoDimensions): (WebKit::VideoFullscreenManagerProxy::enterFullscreen): (WebKit::VideoFullscreenManagerProxy::exitFullscreen): (WebKit::VideoFullscreenManagerProxy::exitFullscreenWithoutAnimationToMode): (WebKit::VideoFullscreenManagerProxy::setInlineRect): (WebKit::VideoFullscreenManagerProxy::setHasVideoContentLayer): (WebKit::VideoFullscreenManagerProxy::cleanupFullscreen): (WebKit::VideoFullscreenManagerProxy::preparedToReturnToInline): (WebKit::VideoFullscreenManagerProxy::preparedToExitFullscreen): * UIProcess/ios/EditableImageController.mm: (WebKit::EditableImageController::didCreateEditableImage): (WebKit::EditableImageController::didDestroyEditableImage): (WebKit::EditableImageController::associateWithAttachment): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242378 268f45cc-cd09-0410-ab3c-d52691b4dbfc git-svn-id: https://svn.webkit.org/repository/webkit/branches/safari-607.1.40.0-branch@242501 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-03-05 Kocsen Chung <kocsen_chung@apple.com> Cherry-pick r242378. rdar://problem/48591281 Check contextIDs when handling WebContent messages https://bugs.webkit.org/show_bug.cgi?id=195289 <rdar://problem/48475870> Reviewed by Alex Christensen. The WebContent process is untrusted because it handles arbitrary markup and javascript from untrusted sources. We should handle its messages with suspicion, and make sure the arguments are valid and usable before honoring them. This patch hardens the message passing layer by performing MESSAGE_CHECK in places that had been overlooked. * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm: (WebKit::PlaybackSessionManagerProxy::setUpPlaybackControlsManagerWithID): (WebKit::PlaybackSessionManagerProxy::currentTimeChanged): (WebKit::PlaybackSessionManagerProxy::bufferedTimeChanged): (WebKit::PlaybackSessionManagerProxy::seekableRangesVectorChanged): (WebKit::PlaybackSessionManagerProxy::canPlayFastReverseChanged): (WebKit::PlaybackSessionManagerProxy::audioMediaSelectionOptionsChanged): (WebKit::PlaybackSessionManagerProxy::legibleMediaSelectionOptionsChanged): (WebKit::PlaybackSessionManagerProxy::audioMediaSelectionIndexChanged): (WebKit::PlaybackSessionManagerProxy::legibleMediaSelectionIndexChanged): (WebKit::PlaybackSessionManagerProxy::externalPlaybackPropertiesChanged): (WebKit::PlaybackSessionManagerProxy::wirelessVideoPlaybackDisabledChanged): (WebKit::PlaybackSessionManagerProxy::mutedChanged): (WebKit::PlaybackSessionManagerProxy::volumeChanged): (WebKit::PlaybackSessionManagerProxy::durationChanged): (WebKit::PlaybackSessionManagerProxy::playbackStartedTimeChanged): (WebKit::PlaybackSessionManagerProxy::rateChanged): (WebKit::PlaybackSessionManagerProxy::pictureInPictureSupportedChanged): (WebKit::PlaybackSessionManagerProxy::pictureInPictureActiveChanged): (WebKit::PlaybackSessionManagerProxy::handleControlledElementIDResponse const): * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints): (WebKit::UserMediaCaptureManagerProxy::startProducingData): (WebKit::UserMediaCaptureManagerProxy::stopProducingData): (WebKit::UserMediaCaptureManagerProxy::end): (WebKit::UserMediaCaptureManagerProxy::capabilities): (WebKit::UserMediaCaptureManagerProxy::setMuted): (WebKit::UserMediaCaptureManagerProxy::applyConstraints): * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm: (WebKit::VideoFullscreenManagerProxy::setupFullscreenWithID): (WebKit::VideoFullscreenManagerProxy::setHasVideo): (WebKit::VideoFullscreenManagerProxy::setVideoDimensions): (WebKit::VideoFullscreenManagerProxy::enterFullscreen): (WebKit::VideoFullscreenManagerProxy::exitFullscreen): (WebKit::VideoFullscreenManagerProxy::exitFullscreenWithoutAnimationToMode): (WebKit::VideoFullscreenManagerProxy::setInlineRect): (WebKit::VideoFullscreenManagerProxy::setHasVideoContentLayer): (WebKit::VideoFullscreenManagerProxy::cleanupFullscreen): (WebKit::VideoFullscreenManagerProxy::preparedToReturnToInline): (WebKit::VideoFullscreenManagerProxy::preparedToExitFullscreen): * UIProcess/ios/EditableImageController.mm: (WebKit::EditableImageController::didCreateEditableImage): (WebKit::EditableImageController::didDestroyEditableImage): (WebKit::EditableImageController::associateWithAttachment): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242378 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-03-04 Brent Fulgham <bfulgham@apple.com> Check contextIDs when handling WebContent messages https://bugs.webkit.org/show_bug.cgi?id=195289 <rdar://problem/48475870> Reviewed by Alex Christensen. The WebContent process is untrusted because it handles arbitrary markup and javascript from untrusted sources. We should handle its messages with suspicion, and make sure the arguments are valid and usable before honoring them. This patch hardens the message passing layer by performing MESSAGE_CHECK in places that had been overlooked. * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm: (WebKit::PlaybackSessionManagerProxy::setUpPlaybackControlsManagerWithID): (WebKit::PlaybackSessionManagerProxy::currentTimeChanged): (WebKit::PlaybackSessionManagerProxy::bufferedTimeChanged): (WebKit::PlaybackSessionManagerProxy::seekableRangesVectorChanged): (WebKit::PlaybackSessionManagerProxy::canPlayFastReverseChanged): (WebKit::PlaybackSessionManagerProxy::audioMediaSelectionOptionsChanged): (WebKit::PlaybackSessionManagerProxy::legibleMediaSelectionOptionsChanged): (WebKit::PlaybackSessionManagerProxy::audioMediaSelectionIndexChanged): (WebKit::PlaybackSessionManagerProxy::legibleMediaSelectionIndexChanged): (WebKit::PlaybackSessionManagerProxy::externalPlaybackPropertiesChanged): (WebKit::PlaybackSessionManagerProxy::wirelessVideoPlaybackDisabledChanged): (WebKit::PlaybackSessionManagerProxy::mutedChanged): (WebKit::PlaybackSessionManagerProxy::volumeChanged): (WebKit::PlaybackSessionManagerProxy::durationChanged): (WebKit::PlaybackSessionManagerProxy::playbackStartedTimeChanged): (WebKit::PlaybackSessionManagerProxy::rateChanged): (WebKit::PlaybackSessionManagerProxy::pictureInPictureSupportedChanged): (WebKit::PlaybackSessionManagerProxy::pictureInPictureActiveChanged): (WebKit::PlaybackSessionManagerProxy::handleControlledElementIDResponse const): * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints): (WebKit::UserMediaCaptureManagerProxy::startProducingData): (WebKit::UserMediaCaptureManagerProxy::stopProducingData): (WebKit::UserMediaCaptureManagerProxy::end): (WebKit::UserMediaCaptureManagerProxy::capabilities): (WebKit::UserMediaCaptureManagerProxy::setMuted): (WebKit::UserMediaCaptureManagerProxy::applyConstraints): * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm: (WebKit::VideoFullscreenManagerProxy::setupFullscreenWithID): (WebKit::VideoFullscreenManagerProxy::setHasVideo): (WebKit::VideoFullscreenManagerProxy::setVideoDimensions): (WebKit::VideoFullscreenManagerProxy::enterFullscreen): (WebKit::VideoFullscreenManagerProxy::exitFullscreen): (WebKit::VideoFullscreenManagerProxy::exitFullscreenWithoutAnimationToMode): (WebKit::VideoFullscreenManagerProxy::setInlineRect): (WebKit::VideoFullscreenManagerProxy::setHasVideoContentLayer): (WebKit::VideoFullscreenManagerProxy::cleanupFullscreen): (WebKit::VideoFullscreenManagerProxy::preparedToReturnToInline): (WebKit::VideoFullscreenManagerProxy::preparedToExitFullscreen): * UIProcess/ios/EditableImageController.mm: (WebKit::EditableImageController::didCreateEditableImage): (WebKit::EditableImageController::didDestroyEditableImage): (WebKit::EditableImageController::associateWithAttachment): 2019-03-12 Kocsen Chung <kocsen_chung@apple.com> Cherry-pick r242629. rdar://problem/48716552 Crash under RemoteLayerTreePropertyApplier::applyProperties https://bugs.webkit.org/show_bug.cgi?id=195448 <rdar://problem/48588226> Reviewed by Simon Fraser. * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm: (WebKit::RemoteLayerTreeHost::updateLayerTree): Under some currently-unknown circumstances, the UI process is receiving commits referring to layers that it does not know about. One understood case of this was fixed in r241899, but there seem to be cases remaining that are not understood. Also, add a release log so that we can identify any downstream effects. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242629 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-03-07 Tim Horton <timothy_horton@apple.com> Crash under RemoteLayerTreePropertyApplier::applyProperties https://bugs.webkit.org/show_bug.cgi?id=195448 <rdar://problem/48588226> Reviewed by Simon Fraser. * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm: (WebKit::RemoteLayerTreeHost::updateLayerTree): Under some currently-unknown circumstances, the UI process is receiving commits referring to layers that it does not know about. One understood case of this was fixed in r241899, but there seem to be cases remaining that are not understood. Also, add a release log so that we can identify any downstream effects. 2019-03-06 Kocsen Chung <kocsen_chung@apple.com> Cherry-pick r242554. rdar://problem/48647490 REGRESSION (r238490): YouTube.com: Returning PiP to Safari after sleeping device loses page https://bugs.webkit.org/show_bug.cgi?id=195364 <rdar://problem/48538837> Reviewed by Geoffrey Garen. Make sure we unset the LayerTreeFreezeReason::ProcessSuspended layer tree freeze reason when WebPage::applicationWillEnterForeground() is called. This restores pre-r238490 behavior and addresses the issue with PiP on youtube.com. * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::applicationWillEnterForeground): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242554 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-03-06 Chris Dumez <cdumez@apple.com> REGRESSION (r238490): YouTube.com: Returning PiP to Safari after sleeping device loses page https://bugs.webkit.org/show_bug.cgi?id=195364 <rdar://problem/48538837> Reviewed by Geoffrey Garen. Make sure we unset the LayerTreeFreezeReason::ProcessSuspended layer tree freeze reason when WebPage::applicationWillEnterForeground() is called. This restores pre-r238490 behavior and addresses the issue with PiP on youtube.com. * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::applicationWillEnterForeground): 2019-03-04 Kocsen Chung <kocsen_chung@apple.com> Cherry-pick r242302. rdar://problem/48572673 Add setters on WKWebsiteDataStore for sourceApplicationBundleIdentifier and sourceApplicationSecondaryIdentifier https://bugs.webkit.org/show_bug.cgi?id=195229 <rdar://problem/48520362> Reviewed by Chris Dumez. Source/WebKit: Just like _setBoundInterfaceIdentifier, we need a way to set these properties after instantiation of a WKWebsiteDataStore, but we need to make sure we don't set it after the parameters have been copied to the NetworkProcess. Functionality verified by manual testing. See radar. Added an API test that verifies the setter restrictions work as expected. * UIProcess/API/Cocoa/WKWebsiteDataStore.mm: (-[WKWebsiteDataStore _sourceApplicationBundleIdentifier]): (-[WKWebsiteDataStore _setSourceApplicationBundleIdentifier:]): (-[WKWebsiteDataStore _sourceApplicationSecondaryIdentifier]): (-[WKWebsiteDataStore _setSourceApplicationSecondaryIdentifier:]): * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h: * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm: (WebKit::toPKPaymentRequest): * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm: (WebKit::WebsiteDataStore::parameters): * UIProcess/WebsiteData/WebsiteDataStore.cpp: (WebKit::WebsiteDataStore::WebsiteDataStore): (WebKit::WebsiteDataStore::setSourceApplicationSecondaryIdentifier): (WebKit::WebsiteDataStore::setSourceApplicationBundleIdentifier): * UIProcess/WebsiteData/WebsiteDataStore.h: (WebKit::WebsiteDataStore::sourceApplicationBundleIdentifier): (WebKit::WebsiteDataStore::sourceApplicationSecondaryIdentifier): Tools: * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm: (TEST): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242302 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-03-01 Alex Christensen <achristensen@webkit.org> Add setters on WKWebsiteDataStore for sourceApplicationBundleIdentifier and sourceApplicationSecondaryIdentifier https://bugs.webkit.org/show_bug.cgi?id=195229 <rdar://problem/48520362> Reviewed by Chris Dumez. Just like _setBoundInterfaceIdentifier, we need a way to set these properties after instantiation of a WKWebsiteDataStore, but we need to make sure we don't set it after the parameters have been copied to the NetworkProcess. Functionality verified by manual testing. See radar. Added an API test that verifies the setter restrictions work as expected. * UIProcess/API/Cocoa/WKWebsiteDataStore.mm: (-[WKWebsiteDataStore _sourceApplicationBundleIdentifier]): (-[WKWebsiteDataStore _setSourceApplicationBundleIdentifier:]): (-[WKWebsiteDataStore _sourceApplicationSecondaryIdentifier]): (-[WKWebsiteDataStore _setSourceApplicationSecondaryIdentifier:]): * UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h: * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm: (WebKit::toPKPaymentRequest): * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm: (WebKit::WebsiteDataStore::parameters): * UIProcess/WebsiteData/WebsiteDataStore.cpp: (WebKit::WebsiteDataStore::WebsiteDataStore): (WebKit::WebsiteDataStore::setSourceApplicationSecondaryIdentifier): (WebKit::WebsiteDataStore::setSourceApplicationBundleIdentifier): * UIProcess/WebsiteData/WebsiteDataStore.h: (WebKit::WebsiteDataStore::sourceApplicationBundleIdentifier): (WebKit::WebsiteDataStore::sourceApplicationSecondaryIdentifier): 2019-03-04 Babak Shafiei <bshafiei@apple.com> Cherry-pick r242355. rdar://problem/48563894 [iOS] Fullscreen "stay in page" option breaks video playback https://bugs.webkit.org/show_bug.cgi?id=195277 <rdar://problem/48537317> Reviewed by Eric Carlson. Source/WebCore: Add a LOG entry when playback is rejected due to media playback suspension. * html/MediaElementSession.cpp: (WebCore::MediaElementSession::playbackPermitted const): Source/WebKit: Make sure we resume media playback when the user chooses "stay in page" from the deceptive website warning dialog. * UIProcess/ios/fullscreen/WKFullScreenViewController.mm: (-[WKFullScreenViewController _showPhishingAlert]): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242355 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-03-04 Jer Noble <jer.noble@apple.com> [iOS] Fullscreen "stay in page" option breaks video playback https://bugs.webkit.org/show_bug.cgi?id=195277 <rdar://problem/48537317> Reviewed by Eric Carlson. Make sure we resume media playback when the user chooses "stay in page" from the deceptive website warning dialog. * UIProcess/ios/fullscreen/WKFullScreenViewController.mm: (-[WKFullScreenViewController _showPhishingAlert]): 2019-02-28 Andy Estes <aestes@apple.com> [watchOS] Disable Parental Controls content filtering <rdar://problem/48464986> Rubber-stamped by Beth Dakin. * Configurations/FeatureDefines.xcconfig: 2019-02-27 Babak Shafiei <bshafiei@apple.com> Apply patch. rdar://problem/48429676 2019-02-27 Alex Christensen <achristensen@webkit.org> Move ephemeral local storage from WebProcess to UIProcess https://bugs.webkit.org/show_bug.cgi?id=195074 <rdar://problem/47937975> Reviewed by Geoff Garen. Before PSON, a page could navigate to another domain that navigates back and still have its local storage. Since PSON makes it unreliable to retain the state in the WebProcess, move it to the process with the rest of the local storage. If it's ephemeral, we obviously can't use the SQLite on-disk storage implementation, so use the same WebCore::StorageMap we used to in the WebProcess. * UIProcess/WebStorage/StorageManager.cpp: (WebKit::StorageManager::LocalStorageNamespace::LocalStorageNamespace): (WebKit::StorageManager::StorageManager): (WebKit::StorageManager::createLocalStorageMap): (WebKit::StorageManager::createTransientLocalStorageMap): (WebKit::StorageManager::createSessionStorageMap): (WebKit::StorageManager::destroyStorageMap): (WebKit::StorageManager::getValues): (WebKit::StorageManager::setItem): (WebKit::StorageManager::removeItem): (WebKit::StorageManager::clear): * UIProcess/WebStorage/StorageManager.h: * UIProcess/WebStorage/StorageManager.messages.in: * UIProcess/WebsiteData/WebsiteDataStore.cpp: (WebKit::WebsiteDataStore::WebsiteDataStore): * WebProcess/WebStorage/StorageAreaMap.cpp: (WebKit::StorageAreaMap::StorageAreaMap): (WebKit::StorageAreaMap::setItem): (WebKit::StorageAreaMap::removeItem): (WebKit::StorageAreaMap::clear): (WebKit::StorageAreaMap::loadValuesIfNeeded): * WebProcess/WebStorage/StorageNamespaceImpl.cpp: (WebKit::StorageNamespaceImpl::createEphemeralLocalStorageNamespace): (WebKit::StorageNamespaceImpl::storageArea): (WebKit::StorageNamespaceImpl::copy): (): Deleted. (WebKit::StorageNamespaceImpl::ephemeralLocalStorageArea): Deleted. * WebProcess/WebStorage/StorageNamespaceImpl.h: 2019-02-27 Babak Shafiei <bshafiei@apple.com> Cherry-pick r242099. rdar://problem/48429675 [iOS] Regression(PSON) Scroll position is no longer restored when navigating back to reddit.com https://bugs.webkit.org/show_bug.cgi?id=195054 <rdar://problem/48330549> Reviewed by Geoff Garen. Source/WebCore: Add MaintainMemoryCache flag to indicate that the memory cache should not get purged. * page/MemoryRelease.cpp: (WebCore::releaseNoncriticalMemory): (WebCore::releaseCriticalMemory): (WebCore::releaseMemory): * page/MemoryRelease.h: Source/WebKit: We attempt to restore the scroll position twice, on first layout and then on load completion. Before PSON, the scroll position would fail to get restored on first layout but would succeed on load completion because the view is tall enough by then. With PSON however, we would fail to restore the scroll position on load completion because the view would not be tall enough yet by this point. The reason is that the dynamic resources would not be in the memory cache and would then get reloaded abd finish loading *after* the load event. To address the issue, we now make sure to not purge the memory cache on process suspension on iOS if there is currently a SuspendedPageProxy in the UIProcess for this process. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::SuspendedPageProxy): (WebKit::SuspendedPageProxy::~SuspendedPageProxy): * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::incrementSuspendedPageCount): (WebKit::WebProcessProxy::decrementSuspendedPageCount): * UIProcess/WebProcessProxy.h: * WebProcess/WebProcess.cpp: (WebKit::WebProcess::initializeWebProcess): (WebKit::WebProcess::setHasSuspendedPageProxy): * WebProcess/WebProcess.h: * WebProcess/WebProcess.messages.in: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242099 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-26 Chris Dumez <cdumez@apple.com> [iOS] Regression(PSON) Scroll position is no longer restored when navigating back to reddit.com https://bugs.webkit.org/show_bug.cgi?id=195054 <rdar://problem/48330549> Reviewed by Geoff Garen. We attempt to restore the scroll position twice, on first layout and then on load completion. Before PSON, the scroll position would fail to get restored on first layout but would succeed on load completion because the view is tall enough by then. With PSON however, we would fail to restore the scroll position on load completion because the view would not be tall enough yet by this point. The reason is that the dynamic resources would not be in the memory cache and would then get reloaded abd finish loading *after* the load event. To address the issue, we now make sure to not purge the memory cache on process suspension on iOS if there is currently a SuspendedPageProxy in the UIProcess for this process. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::SuspendedPageProxy): (WebKit::SuspendedPageProxy::~SuspendedPageProxy): * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::incrementSuspendedPageCount): (WebKit::WebProcessProxy::decrementSuspendedPageCount): * UIProcess/WebProcessProxy.h: * WebProcess/WebProcess.cpp: (WebKit::WebProcess::initializeWebProcess): (WebKit::WebProcess::setHasSuspendedPageProxy): * WebProcess/WebProcess.h: * WebProcess/WebProcess.messages.in: 2019-02-27 Babak Shafiei <bshafiei@apple.com> Cherry-pick r242089. rdar://problem/48429668 WebPageProxy should nullify m_userMediaPermissionRequestManager after resetting the media state https://bugs.webkit.org/show_bug.cgi?id=195028 <rdar://problem/48243733> Reviewed by Eric Carlson. Source/WebKit: Covered by API test. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::resetState): Tools: * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242089 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-26 Youenn Fablet <youenn@apple.com> WebPageProxy should nullify m_userMediaPermissionRequestManager after resetting the media state https://bugs.webkit.org/show_bug.cgi?id=195028 <rdar://problem/48243733> Reviewed by Eric Carlson. Covered by API test. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::resetState): 2019-02-27 Babak Shafiei <bshafiei@apple.com> Cherry-pick r242098. rdar://problem/48429674 [iOS] REGRESSION(r238490?): Safari sometimes shows blank page until a cross site navigation or re-opening the tab https://bugs.webkit.org/show_bug.cgi?id=195037 <rdar://problem/48154508> Reviewed by Antti Koivisto. Restore the pre-r238490 behavior of WebPage::didCompletePageTransition clearing LayerTreeFreezeReason::ProcessSuspended as this has been an issue when I was able to reproduce the issue locally. Also added release logging to help diagnose the issue in the future. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::freezeLayerTree): (WebKit::WebPage::unfreezeLayerTree): (WebKit::WebPage::didCompletePageTransition): * WebProcess/WebProcess.cpp: (WebKit::WebProcess::freezeAllLayerTrees): (WebKit::WebProcess::unfreezeAllLayerTrees): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242098 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-26 Ryosuke Niwa <rniwa@webkit.org> [iOS] REGRESSION(r238490?): Safari sometimes shows blank page until a cross site navigation or re-opening the tab https://bugs.webkit.org/show_bug.cgi?id=195037 <rdar://problem/48154508> Reviewed by Antti Koivisto. Restore the pre-r238490 behavior of WebPage::didCompletePageTransition clearing LayerTreeFreezeReason::ProcessSuspended as this has been an issue when I was able to reproduce the issue locally. Also added release logging to help diagnose the issue in the future. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::freezeLayerTree): (WebKit::WebPage::unfreezeLayerTree): (WebKit::WebPage::didCompletePageTransition): * WebProcess/WebProcess.cpp: (WebKit::WebProcess::freezeAllLayerTrees): (WebKit::WebProcess::unfreezeAllLayerTrees): 2019-02-24 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241963. rdar://problem/48350367 Regression(PSON) Unable to preview password-protected documents on iCloud.com https://bugs.webkit.org/show_bug.cgi?id=194954 <rdar://problem/48127957> Reviewed by Alex Christensen. Source/WebKit: Make sure the ProvisionalPageProxy forwards to the WebPageProxy the QuickLook-related IPC on iOS. * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::didRequestPasswordForQuickLookDocumentInMainFrame): (WebKit::ProvisionalPageProxy::didReceiveMessage): * UIProcess/ProvisionalPageProxy.h: * UIProcess/WebPageProxy.h: * UIProcess/ios/WebPageProxyIOS.mm: (WebKit::WebPageProxy::didRequestPasswordForQuickLookDocumentInMainFrame): (WebKit::WebPageProxy::didRequestPasswordForQuickLookDocumentInMainFrameShared): Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: (-[PSONNavigationDelegate _webViewDidRequestPasswordForQuickLookDocument:]): (-[PSONNavigationDelegate _webView:didStartLoadForQuickLookDocumentInMainFrameWithFileName:uti:]): (-[PSONNavigationDelegate _webView:didFinishLoadForQuickLookDocumentInMainFrame:]): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241963 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-22 Chris Dumez <cdumez@apple.com> Regression(PSON) Unable to preview password-protected documents on iCloud.com https://bugs.webkit.org/show_bug.cgi?id=194954 <rdar://problem/48127957> Reviewed by Alex Christensen. Make sure the ProvisionalPageProxy forwards to the WebPageProxy the QuickLook-related IPC on iOS. * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::didRequestPasswordForQuickLookDocumentInMainFrame): (WebKit::ProvisionalPageProxy::didReceiveMessage): * UIProcess/ProvisionalPageProxy.h: * UIProcess/WebPageProxy.h: * UIProcess/ios/WebPageProxyIOS.mm: (WebKit::WebPageProxy::didRequestPasswordForQuickLookDocumentInMainFrame): (WebKit::WebPageProxy::didRequestPasswordForQuickLookDocumentInMainFrameShared): 2019-02-24 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241950. rdar://problem/48317455 REGRESSION(PSON) Scroll position is sometimes not restored on history navigation https://bugs.webkit.org/show_bug.cgi?id=194924 <rdar://problem/48216125> Reviewed by Geoffrey Garen. Source/WebKit: When process-swapping, we would create a new WebPage in the new process, which would call restoreSessionInternal() to restore the HistoryItems based on the UIProcess's backforward list. The issue is that this session restoring would send HistoryItem updates back to the UIProcess. Without PSON, this would be unnecessary but harmless. With PSON though, this may end up overwriting values set by the previous process, such as the scroll position. Address the issue by temporarily disabling the HistoryItem update notifications to the UIProcess while restoring a session. * UIProcess/API/Cocoa/WKBackForwardListItem.mm: (-[WKBackForwardListItem _scrollPosition]): * UIProcess/API/Cocoa/WKBackForwardListItemPrivate.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::restoreSessionInternal): Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241950 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-22 Chris Dumez <cdumez@apple.com> REGRESSION(PSON) Scroll position is sometimes not restored on history navigation https://bugs.webkit.org/show_bug.cgi?id=194924 <rdar://problem/48216125> Reviewed by Geoffrey Garen. When process-swapping, we would create a new WebPage in the new process, which would call restoreSessionInternal() to restore the HistoryItems based on the UIProcess's backforward list. The issue is that this session restoring would send HistoryItem updates back to the UIProcess. Without PSON, this would be unnecessary but harmless. With PSON though, this may end up overwriting values set by the previous process, such as the scroll position. Address the issue by temporarily disabling the HistoryItem update notifications to the UIProcess while restoring a session. * UIProcess/API/Cocoa/WKBackForwardListItem.mm: (-[WKBackForwardListItem _scrollPosition]): * UIProcess/API/Cocoa/WKBackForwardListItemPrivate.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::restoreSessionInternal): 2019-02-24 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241928. rdar://problem/48317429 Discard cached processes when clearing website data store https://bugs.webkit.org/show_bug.cgi?id=194894 Reviewed by Chris Dumez. Source/WebKit: Clear the process cache when clearing the website data store so that there is no way to infer which site the user had visited by observing for which sites WebContent processes had been cached. There is one sublty in WebsiteDataStore::removeData that we have to delay the clearing of the web process cache until the next run loop because SuspendedPageProxy::~SuspendedPageProxy invokes WebProcessProxy::maybeShutDown in the next run loop. We also have to disable the process cache during this time as it would otherwise trigger the responsiveness check of WebContent process can take arbitrarily long time. * UIProcess/API/Cocoa/WKProcessPool.mm: (-[WKProcessPool _processCacheCapacity]): Added for testing. * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: * UIProcess/WebProcessCache.cpp: (WebKit::WebProcessCache::addProcess): Avoid adding web processes to the cache while the suspended pages are being cleared. * UIProcess/WebProcessCache.h: (WebKit::WebProcessCache::disabled const): Added. (WebKit::WebProcessCache::setDisabled): Added. * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::handleMemoryPressureWarning): (WebKit::WebProcessPool::clearSuspendedPages): Added. * UIProcess/WebProcessPool.h: * UIProcess/WebsiteData/WebsiteDataStore.cpp: (WebKit::WebsiteDataStore::removeData): Tools: Added a test case. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: (TestWebKitAPI.ProcessSwap.NumberOfCachedProcesses): Added. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241928 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-21 Ryosuke Niwa <rniwa@webkit.org> Discard cached processes when clearing website data store https://bugs.webkit.org/show_bug.cgi?id=194894 Reviewed by Chris Dumez. Clear the process cache when clearing the website data store so that there is no way to infer which site the user had visited by observing for which sites WebContent processes had been cached. There is one sublty in WebsiteDataStore::removeData that we have to delay the clearing of the web process cache until the next run loop because SuspendedPageProxy::~SuspendedPageProxy invokes WebProcessProxy::maybeShutDown in the next run loop. We also have to disable the process cache during this time as it would otherwise trigger the responsiveness check of WebContent process can take arbitrarily long time. * UIProcess/API/Cocoa/WKProcessPool.mm: (-[WKProcessPool _processCacheCapacity]): Added for testing. * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: * UIProcess/WebProcessCache.cpp: (WebKit::WebProcessCache::addProcess): Avoid adding web processes to the cache while the suspended pages are being cleared. * UIProcess/WebProcessCache.h: (WebKit::WebProcessCache::disabled const): Added. (WebKit::WebProcessCache::setDisabled): Added. * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::handleMemoryPressureWarning): (WebKit::WebProcessPool::clearSuspendedPages): Added. * UIProcess/WebProcessPool.h: * UIProcess/WebsiteData/WebsiteDataStore.cpp: (WebKit::WebsiteDataStore::removeData): 2019-02-24 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241899. rdar://problem/48317463 Crash under RemoteLayerTreePropertyApplier::applyProperties when reattaching to old process https://bugs.webkit.org/show_bug.cgi?id=194845 <rdar://problem/47944579> Reviewed by Antti Koivisto. Source/WebKit: New test: ProcessSwap.PageOverlayLayerPersistence * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h: (WebKit::RemoteLayerTreeTransaction::LayerProperties::notePropertiesChanged): Keep track of all properties that have ever changed on a layer, so we can re-send them if a layer moves between contexts. * WebProcess/WebPage/DrawingArea.cpp: (WebKit::DrawingArea::~DrawingArea): (WebKit::DrawingArea::removeMessageReceiverIfNeeded): * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::layerHostDidFlushLayers): Make it possible to tear down DrawingArea's MessageReceiver before it is destroyed, so that we can keep two DrawingAreas alive in a single process for a short time. (WebKit::DrawingArea::adoptLayersFromDrawingArea): Add adoptLayersFromDrawingArea; see below for its only useful implementation. * WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.cpp: (WebKit::GraphicsLayerCARemote::GraphicsLayerCARemote): (WebKit::GraphicsLayerCARemote::~GraphicsLayerCARemote): (WebKit::GraphicsLayerCARemote::createPlatformCALayer): (WebKit::GraphicsLayerCARemote::createPlatformCALayerForEmbeddedView): (WebKit::GraphicsLayerCARemote::moveToContext): * WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.h: Make it possible to move a GraphicsLayerCARemote between RemoteLayerTreeContexts. * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp: (WebKit::PlatformCALayerRemote::create): (WebKit::PlatformCALayerRemote::createForEmbeddedView): (WebKit::PlatformCALayerRemote::~PlatformCALayerRemote): (WebKit::PlatformCALayerRemote::moveToContext): * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h: * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.mm: (WebKit::PlatformCALayerRemoteCustom::create): (WebKit::PlatformCALayerRemoteCustom::clone const): Make it possible to move a PlatformCALayerRemote between RemoteLayerTreeContexts. * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::~RemoteLayerTreeContext): (WebKit::RemoteLayerTreeContext::adoptLayersFromContext): (WebKit::RemoteLayerTreeContext::layerDidEnterContext): (WebKit::RemoteLayerTreeContext::layerWillLeaveContext): (WebKit::RemoteLayerTreeContext::graphicsLayerDidEnterContext): (WebKit::RemoteLayerTreeContext::graphicsLayerWillLeaveContext): (WebKit::RemoteLayerTreeContext::layerWasCreated): Deleted. (WebKit::RemoteLayerTreeContext::layerWillBeDestroyed): Deleted. Keep track of all GraphicsLayerCARemote instances in the context, like we do for PlatformCALayerRemote, so that we can update their context backpointers if needed. Also make it possible to move all outstanding layers to a new context. * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::adoptLayersFromDrawingArea): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::reinitializeWebPage): When doing a DrawingArea swap, transition all layers from the old context to the new one. In order to do this, we temporarily keep both DrawingAreas alive, but make use of the new mechanism to remove the old one's MessageReceiver before installing the new one, so that destroying the old one later doesn't remove it (avoiding re-introducing bug 189481). Tools: * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241899 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-21 Tim Horton <timothy_horton@apple.com> Crash under RemoteLayerTreePropertyApplier::applyProperties when reattaching to old process https://bugs.webkit.org/show_bug.cgi?id=194845 <rdar://problem/47944579> Reviewed by Antti Koivisto. New test: ProcessSwap.PageOverlayLayerPersistence * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h: (WebKit::RemoteLayerTreeTransaction::LayerProperties::notePropertiesChanged): Keep track of all properties that have ever changed on a layer, so we can re-send them if a layer moves between contexts. * WebProcess/WebPage/DrawingArea.cpp: (WebKit::DrawingArea::~DrawingArea): (WebKit::DrawingArea::removeMessageReceiverIfNeeded): * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::layerHostDidFlushLayers): Make it possible to tear down DrawingArea's MessageReceiver before it is destroyed, so that we can keep two DrawingAreas alive in a single process for a short time. (WebKit::DrawingArea::adoptLayersFromDrawingArea): Add adoptLayersFromDrawingArea; see below for its only useful implementation. * WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.cpp: (WebKit::GraphicsLayerCARemote::GraphicsLayerCARemote): (WebKit::GraphicsLayerCARemote::~GraphicsLayerCARemote): (WebKit::GraphicsLayerCARemote::createPlatformCALayer): (WebKit::GraphicsLayerCARemote::createPlatformCALayerForEmbeddedView): (WebKit::GraphicsLayerCARemote::moveToContext): * WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.h: Make it possible to move a GraphicsLayerCARemote between RemoteLayerTreeContexts. * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.cpp: (WebKit::PlatformCALayerRemote::create): (WebKit::PlatformCALayerRemote::createForEmbeddedView): (WebKit::PlatformCALayerRemote::~PlatformCALayerRemote): (WebKit::PlatformCALayerRemote::moveToContext): * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemote.h: * WebProcess/WebPage/RemoteLayerTree/PlatformCALayerRemoteCustom.mm: (WebKit::PlatformCALayerRemoteCustom::create): (WebKit::PlatformCALayerRemoteCustom::clone const): Make it possible to move a PlatformCALayerRemote between RemoteLayerTreeContexts. * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm: (WebKit::RemoteLayerTreeContext::~RemoteLayerTreeContext): (WebKit::RemoteLayerTreeContext::adoptLayersFromContext): (WebKit::RemoteLayerTreeContext::layerDidEnterContext): (WebKit::RemoteLayerTreeContext::layerWillLeaveContext): (WebKit::RemoteLayerTreeContext::graphicsLayerDidEnterContext): (WebKit::RemoteLayerTreeContext::graphicsLayerWillLeaveContext): (WebKit::RemoteLayerTreeContext::layerWasCreated): Deleted. (WebKit::RemoteLayerTreeContext::layerWillBeDestroyed): Deleted. Keep track of all GraphicsLayerCARemote instances in the context, like we do for PlatformCALayerRemote, so that we can update their context backpointers if needed. Also make it possible to move all outstanding layers to a new context. * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h: * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::adoptLayersFromDrawingArea): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::reinitializeWebPage): When doing a DrawingArea swap, transition all layers from the old context to the new one. In order to do this, we temporarily keep both DrawingAreas alive, but make use of the new mechanism to remove the old one's MessageReceiver before installing the new one, so that destroying the old one later doesn't remove it (avoiding re-introducing bug 189481). 2019-02-24 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241128. rdar://problem/48317438 [macOS] API test times out after r241026 https://bugs.webkit.org/show_bug.cgi?id=194372 Reviewed by Alex Christensen. The API test TestWebKitAPI.RenderingProgress.FirstMeaningfulPaint times out after r241026. A new function pointer, layoutMilestones, is added to WKBundlePageLoaderClient, in order for clients to decide which milestones they would like to listen for. * WebProcess/InjectedBundle/API/c/WKBundlePageLoaderClient.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: (layoutMilestones): (setUpPageLoaderClient): * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp: (WebKit::InjectedBundlePageLoaderClient::layoutMilestones const): * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241128 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-07 Per Arne Vollan <pvollan@apple.com> [macOS] API test times out after r241026 https://bugs.webkit.org/show_bug.cgi?id=194372 Reviewed by Alex Christensen. The API test TestWebKitAPI.RenderingProgress.FirstMeaningfulPaint times out after r241026. A new function pointer, layoutMilestones, is added to WKBundlePageLoaderClient, in order for clients to decide which milestones they would like to listen for. * WebProcess/InjectedBundle/API/c/WKBundlePageLoaderClient.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: (layoutMilestones): (setUpPageLoaderClient): * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp: (WebKit::InjectedBundlePageLoaderClient::layoutMilestones const): * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h: 2019-02-24 Babak Shafiei <bshafiei@apple.com> Apply patch. rdar://problem/48317433 2019-02-24 Chris Dumez <cdumez@apple.com> REGRESSION(PSON): Google login page refreshes repeatedly in Reeder 3 app <rdar://problem/47471222> Reviewed by Alex Christensen. When we process swap, we first call removeWebPage() on the previous process and then call addExistingWebPage() on the new one. removeWebPage() would call WebProcessPool::pageEndUsingWebsiteDataStore() and then addExistingWebPage() would call WebProcessPool::pageBeginUsingWebsiteDataStore(). This was leading to loosing session cookies because the call to WebProcessPool::pageEndUsingWebsiteDataStore() would send an IPC to the Network process to destroy the session. The later call to pageBeginUsingWebsiteDataStore() would re-construct the session but it would be too late, previous cookies would be gone. To address the issue, r238828 updated removeWebPage() / addExistingWebPage() so that they no longer call pageBeginUsingWebsiteDataStore() / pageEndUsingWebsiteDataStore() in case of a process swap. This partly fixed the issue. However, I failed to notice that pageBeginUsingWebsiteDataStore() / pageEndUsingWebsiteDataStore() also send IPC to the WebProcess to construct / destroy the session. We still want this IPC to happen in case of a process-swap or the new process will not know about the session. To address this issue, I moved the WebProcess IPC sending from WebProcessPool::pageEndUsingWebsiteDataStore() / pageEndUsingWebsiteDataStore() to WebProcessProxy::removeWebPage() / addExistingWebPage() so that it happens no matter what. It is also clearer for the WebProcessProxy to send the IPC by itself. This patch is only needed on the branch since Alex refactored the code in r239737 so that the WebSiteDataStore-related IPC to the WebProcess is no longer needed on trunk. * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::pageBeginUsingWebsiteDataStore): (WebKit::WebProcessPool::pageEndUsingWebsiteDataStore): * UIProcess/WebProcessPool.h: * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::addExistingWebPage): (WebKit::WebProcessProxy::removeWebPage): (WebKit::WebProcessProxy::hasPageUsingSession const): 2019-02-21 Alan Coon <alancoon@apple.com> Cherry-pick r241919. rdar://problem/48267027 Fix API test crashes after r241855. Reviewed by Ryosuke Niwa. * UIProcess/WebProcessCache.cpp: (WebKit::WebProcessCache::addProcessIfPossible): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241919 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-21 Chris Dumez <cdumez@apple.com> Fix API test crashes after r241855. Reviewed by Ryosuke Niwa. * UIProcess/WebProcessCache.cpp: (WebKit::WebProcessCache::addProcessIfPossible): 2019-02-21 Alan Coon <alancoon@apple.com> Cherry-pick r241868. rdar://problem/48267027 Unreviewed API test fix after r241855. * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::~WebProcessProxy): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241868 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-21 Chris Dumez <cdumez@apple.com> Unreviewed API test fix after r241855. * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::~WebProcessProxy): 2019-02-21 Alan Coon <alancoon@apple.com> Cherry-pick r241728. rdar://problem/48243264 Disable safe browsing in WKWebView and remove its WKPreferences API https://bugs.webkit.org/show_bug.cgi?id=194723 <rdar://problem/48122993> Reviewed by Geoffrey Garen. Source/WebKit: * Shared/WebPreferences.yaml: * UIProcess/API/Cocoa/WKPreferences.h: * UIProcess/API/Cocoa/WKPreferences.mm: (-[WKPreferences setSafeBrowsingEnabled:]): Deleted. (-[WKPreferences isSafeBrowsingEnabled]): Deleted. Tools: * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm: (TEST): (safeBrowsingView): Make tests use SPI instead of API. LayoutTests: * platform/mac-wk2/http/tests/navigation/keyboard-events-during-provisional-navigation-expected.txt: This test has results that depend on timing, and I need to update its results when I disable safe browsing. I've done this several times before. See r237876 for an example. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241728 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-18 Alex Christensen <achristensen@webkit.org> Disable safe browsing in WKWebView and remove its WKPreferences API https://bugs.webkit.org/show_bug.cgi?id=194723 <rdar://problem/48122993> Reviewed by Geoffrey Garen. * Shared/WebPreferences.yaml: * UIProcess/API/Cocoa/WKPreferences.h: * UIProcess/API/Cocoa/WKPreferences.mm: (-[WKPreferences setSafeBrowsingEnabled:]): Deleted. (-[WKPreferences isSafeBrowsingEnabled]): Deleted. 2019-02-21 Alan Coon <alancoon@apple.com> Cherry-pick r241618. rdar://problem/48243264 Add SPI version of WKPreferences.safeBrowsingEnabled https://bugs.webkit.org/show_bug.cgi?id=194718 <rdar://problem/48122993> Rubber-stamped by Brady Eidson. * UIProcess/API/Cocoa/WKPreferences.mm: (-[WKPreferences _isSafeBrowsingEnabled]): (-[WKPreferences _setSafeBrowsingEnabled:]): * UIProcess/API/Cocoa/WKPreferencesPrivate.h: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241618 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-15 Alex Christensen <achristensen@webkit.org> Add SPI version of WKPreferences.safeBrowsingEnabled https://bugs.webkit.org/show_bug.cgi?id=194718 <rdar://problem/48122993> Rubber-stamped by Brady Eidson. * UIProcess/API/Cocoa/WKPreferences.mm: (-[WKPreferences _isSafeBrowsingEnabled]): (-[WKPreferences _setSafeBrowsingEnabled:]): * UIProcess/API/Cocoa/WKPreferencesPrivate.h: 2019-02-21 Alan Coon <alancoon@apple.com> Cherry-pick r241855. rdar://problem/48267027 [PSON] Make sure hung processes are not kept alive by suspended pages or process caching https://bugs.webkit.org/show_bug.cgi?id=194881 <rdar://problem/48249014> Reviewed by Geoffrey Garen. After we construct a SuspendedPageProxy and before we send the IPC to the WebProcess to ask it to suspend, start a 10 seconds timer. If the process does not answer the request to suspend before the timer fires, we destroy the SuspendedPageProxy so that we do not keep a hung process around. For the WebProcessCache, we now call WebProcessProxy::isResponsive() on the process before adding it to the cache. Internally, this relies on an IPC handshake with the WebProcess. If the process is not responsive, we do not add it to the cache and we shut it down. If it is responsive then we proceed normally with adding it to the cache. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::SuspendedPageProxy): (WebKit::SuspendedPageProxy::didProcessRequestToSuspend): (WebKit::SuspendedPageProxy::suspensionTimedOut): * UIProcess/SuspendedPageProxy.h: * UIProcess/WebProcessCache.cpp: (WebKit::WebProcessCache::addProcessIfPossible): (WebKit::WebProcessCache::addProcess): * UIProcess/WebProcessCache.h: * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch): (WebKit::WebProcessProxy::maybeShutDown): (WebKit::WebProcessProxy::isResponsive): * UIProcess/WebProcessProxy.h: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241855 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-20 Chris Dumez <cdumez@apple.com> [PSON] Make sure hung processes are not kept alive by suspended pages or process caching https://bugs.webkit.org/show_bug.cgi?id=194881 <rdar://problem/48249014> Reviewed by Geoffrey Garen. After we construct a SuspendedPageProxy and before we send the IPC to the WebProcess to ask it to suspend, start a 10 seconds timer. If the process does not answer the request to suspend before the timer fires, we destroy the SuspendedPageProxy so that we do not keep a hung process around. For the WebProcessCache, we now call WebProcessProxy::isResponsive() on the process before adding it to the cache. Internally, this relies on an IPC handshake with the WebProcess. If the process is not responsive, we do not add it to the cache and we shut it down. If it is responsive then we proceed normally with adding it to the cache. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::SuspendedPageProxy): (WebKit::SuspendedPageProxy::didProcessRequestToSuspend): (WebKit::SuspendedPageProxy::suspensionTimedOut): * UIProcess/SuspendedPageProxy.h: * UIProcess/WebProcessCache.cpp: (WebKit::WebProcessCache::addProcessIfPossible): (WebKit::WebProcessCache::addProcess): * UIProcess/WebProcessCache.h: * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch): (WebKit::WebProcessProxy::maybeShutDown): (WebKit::WebProcessProxy::isResponsive): * UIProcess/WebProcessProxy.h: 2019-02-21 Alan Coon <alancoon@apple.com> Cherry-pick r241845. rdar://problem/48267029 Regression(PSON) "Reload without content extensions" does not work when the main resource is blocked https://bugs.webkit.org/show_bug.cgi?id=194872 <rdar://problem/47924500> Reviewed by Alex Christensen. Source/WebKit: [WKWebView _reloadWithoutContentBlockers] relies on a ReloadOption flag that is passed to WebCore instead of using WebsitePolicies.contentBlockersEnabled flag. If the reload causes a process swap due to PSON, then the new process does not know about this ReloadOption and fails to honor it. Since the modern way to do this is WebsitePolicies, and since WebsitePolicies are properly propagated cross-process in case of process swap, this patch updates _reloadWithoutContentBlockers to set a flag on the Navigation which we use to later set the WebsitePolicies.contentBlockersEnabled flag in WebPageProxy::receivedNavigationPolicyDecision(). * UIProcess/API/APINavigation.h: (API::Navigation::setUserContentExtensionsEnabled): (API::Navigation::userContentExtensionsEnabled const): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::reload): (WebKit::WebPageProxy::receivedNavigationPolicyDecision): Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241845 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-20 Chris Dumez <cdumez@apple.com> Regression(PSON) "Reload without content extensions" does not work when the main resource is blocked https://bugs.webkit.org/show_bug.cgi?id=194872 <rdar://problem/47924500> Reviewed by Alex Christensen. [WKWebView _reloadWithoutContentBlockers] relies on a ReloadOption flag that is passed to WebCore instead of using WebsitePolicies.contentBlockersEnabled flag. If the reload causes a process swap due to PSON, then the new process does not know about this ReloadOption and fails to honor it. Since the modern way to do this is WebsitePolicies, and since WebsitePolicies are properly propagated cross-process in case of process swap, this patch updates _reloadWithoutContentBlockers to set a flag on the Navigation which we use to later set the WebsitePolicies.contentBlockersEnabled flag in WebPageProxy::receivedNavigationPolicyDecision(). * UIProcess/API/APINavigation.h: (API::Navigation::setUserContentExtensionsEnabled): (API::Navigation::userContentExtensionsEnabled const): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::reload): (WebKit::WebPageProxy::receivedNavigationPolicyDecision): 2019-02-21 Alan Coon <alancoon@apple.com> Cherry-pick r241853. rdar://problem/48248223 Unreviewed build fix after r241823. * UIProcess/SuspendedPageProxy.h: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241853 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-20 Chris Dumez <cdumez@apple.com> Unreviewed build fix after r241823. * UIProcess/SuspendedPageProxy.h: 2019-02-21 Alan Coon <alancoon@apple.com> Cherry-pick r241823. rdar://problem/48248223 Regression(PSON) Crash under WebKit::WebPageProxy::decidePolicyForNavigationActionSync https://bugs.webkit.org/show_bug.cgi?id=194857 <rdar://problem/47759323> Reviewed by Alex Christensen. Source/WebKit: The ProvisionalPageProxy was blindly forwarding the DecidePolicyForNavigationActionSync synchronous IPC to the WebPageProxy, without passing it the process the IPC came from. As a result, WebPageProxy::decidePolicyForNavigationActionSync() would try to look up a WebFrameProxy using the provided frameID from the wrong process and we would end up hitting a RELEASE_ASSERT(). * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionSync): (WebKit::ProvisionalPageProxy::didReceiveSyncMessage): * UIProcess/ProvisionalPageProxy.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::decidePolicyForNavigationActionSync): (WebKit::WebPageProxy::decidePolicyForNavigationActionSyncShared): * UIProcess/WebPageProxy.h: Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241823 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-20 Chris Dumez <cdumez@apple.com> Regression(PSON) Crash under WebKit::WebPageProxy::decidePolicyForNavigationActionSync https://bugs.webkit.org/show_bug.cgi?id=194857 <rdar://problem/47759323> Reviewed by Alex Christensen. The ProvisionalPageProxy was blindly forwarding the DecidePolicyForNavigationActionSync synchronous IPC to the WebPageProxy, without passing it the process the IPC came from. As a result, WebPageProxy::decidePolicyForNavigationActionSync() would try to look up a WebFrameProxy using the provided frameID from the wrong process and we would end up hitting a RELEASE_ASSERT(). * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionSync): (WebKit::ProvisionalPageProxy::didReceiveSyncMessage): * UIProcess/ProvisionalPageProxy.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::decidePolicyForNavigationActionSync): (WebKit::WebPageProxy::decidePolicyForNavigationActionSyncShared): * UIProcess/WebPageProxy.h: 2019-02-21 Alan Coon <alancoon@apple.com> Apply patch. rdar://problem/48243214 REGRESSION (PSON): Can't access optumbank.com from myuhc.com https://bugs.webkit.org/show_bug.cgi?id=194797 <rdar://problem/48055151> Reviewed by Geoffrey Garen. Source/WebKit: The issue was caused by us mistakenly process-swapping for a same-site server side redirect. The reason we were getting it wrong is because the logic in WebProcessPool::processForNavigationInternal() was expecting page.process() to be the source process and page.pageLoadState().url() to be the source URL. Those assumptions are incorrect when a server-side redirect occurs in a provisional process. In such case, the source process is the ProvisionalPageProxy's process and the source URL is the provisional URL, not the committed one. * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::didPerformServerRedirect): (WebKit::ProvisionalPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didReceiveMessage): * UIProcess/ProvisionalPageProxy.h: Make sure the provisional page forwards IPC related to server-side redirects to the page so that the client gets informed. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::receivedNavigationPolicyDecision): (WebKit::WebPageProxy::didPerformServerRedirect): (WebKit::WebPageProxy::didPerformServerRedirectShared): * UIProcess/WebPageProxy.h: * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::processForNavigation): (WebKit::WebProcessPool::processForNavigationInternal): * UIProcess/WebProcessPool.h: Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@241752 268f45cc-cd09-0410-ab3c-d52691b4dbfc (cherry picked from commit 53ac6d765e577c36c5c5e02659ee3ca21f25599f) 2019-02-18 Chris Dumez <cdumez@apple.com> REGRESSION (PSON): Can't access optumbank.com from myuhc.com https://bugs.webkit.org/show_bug.cgi?id=194797 <rdar://problem/48055151> Reviewed by Geoffrey Garen. The issue was caused by us mistakenly process-swapping for a same-site server side redirect. The reason we were getting it wrong is because the logic in WebProcessPool::processForNavigationInternal() was expecting page.process() to be the source process and page.pageLoadState().url() to be the source URL. Those assumptions are incorrect when a server-side redirect occurs in a provisional process. In such case, the source process is the ProvisionalPageProxy's process and the source URL is the provisional URL, not the committed one. * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::didPerformServerRedirect): (WebKit::ProvisionalPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didReceiveMessage): * UIProcess/ProvisionalPageProxy.h: Make sure the provisional page forwards IPC related to server-side redirects to the page so that the client gets informed. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::receivedNavigationPolicyDecision): (WebKit::WebPageProxy::didPerformServerRedirect): (WebKit::WebPageProxy::didPerformServerRedirectShared): * UIProcess/WebPageProxy.h: * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::processForNavigation): (WebKit::WebProcessPool::processForNavigationInternal): * UIProcess/WebProcessPool.h: 2019-02-20 Alan Coon <alancoon@apple.com> Cherry-pick r241777. rdar://problem/48248215 Remove assertion introduced in r229683 https://bugs.webkit.org/show_bug.cgi?id=194825 <rdar://problem/47628258> Reviewed by Geoffrey Garen. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm): If we reach this code and the form's original Document's Frame has been destroyed, we have already been told to submit the form so do so, just like we do if the WebPage has been destroyed. This is a rare edge case having to do with the timing of Frame destruction and decidePolicyForNavigationAction response, which unfortunately does not reproduce with a test case unless the timing of IPC is just right. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241777 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-19 Alex Christensen <achristensen@webkit.org> Remove assertion introduced in r229683 https://bugs.webkit.org/show_bug.cgi?id=194825 <rdar://problem/47628258> Reviewed by Geoffrey Garen. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchWillSubmitForm): If we reach this code and the form's original Document's Frame has been destroyed, we have already been told to submit the form so do so, just like we do if the WebPage has been destroyed. This is a rare edge case having to do with the timing of Frame destruction and decidePolicyForNavigationAction response, which unfortunately does not reproduce with a test case unless the timing of IPC is just right. 2019-02-20 Alan Coon <alancoon@apple.com> Cherry-pick r241721. rdar://problem/48243376 AX: PSON: Going back from apple.com to search results, cannot interact with HTML content. Disabling Swap Processes on Cross-Site Navigation resolves the issue. https://bugs.webkit.org/show_bug.cgi?id=194742 Reviewed by Chris Dumez. Source/WebCore: With the new process model, WebProcess hits a case where it tries to send the "page loaded" notification before VoiceOver had a chance to register for any notifications. This leads to those notifications being dropped (and thus this bug). This change instead asks the UIProcess to send the notification, which we know VoiceOver has registered for, and can reliably receive notifications. It also sends the notification for "load failures," which to the VO users' perspective amounts to the same thing as a successful page load. * accessibility/mac/AXObjectCacheMac.mm: (WebCore::AXObjectCache::frameLoadingEventPlatformNotification): Source/WebKit: Re-initialize the accessibility web process tokens when swapping processes. Send page load notifications from the UIProcess instead of the WebProcess to improve reliability. * UIProcess/mac/PageClientImplMac.mm: (WebKit::PageClientImpl::didFinishLoadForMainFrame): (WebKit::PageClientImpl::didFailLoadForMainFrame): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::reinitializeWebPage): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/gtk/WebPageGtk.cpp: (WebKit::WebPage::platformReinitialize): (WebKit::WebPage::platformDetach): Deleted. (WebKit::WebPage::platformEditorState const): Deleted. (WebKit::WebPage::updateAccessibilityTree): Deleted. (WebKit::WebPage::performDefaultBehaviorForKeyEvent): Deleted. (WebKit::WebPage::platformCanHandleRequest): Deleted. (WebKit::WebPage::platformUserAgent const): Deleted. (WebKit::WebPage::getCenterForZoomGesture): Deleted. (WebKit::WebPage::setInputMethodState): Deleted. (WebKit::WebPage::collapseSelectionInFrame): Deleted. * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::platformReinitialize): * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::platformReinitialize): * WebProcess/WebPage/win/WebPageWin.cpp: (WebKit::WebPage::platformReinitialize): * WebProcess/WebPage/wpe/WebPageWPE.cpp: (WebKit::WebPage::platformReinitialize): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241721 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-18 Chris Fleizach <cfleizach@apple.com> AX: PSON: Going back from apple.com to search results, cannot interact with HTML content. Disabling Swap Processes on Cross-Site Navigation resolves the issue. https://bugs.webkit.org/show_bug.cgi?id=194742 Reviewed by Chris Dumez. Re-initialize the accessibility web process tokens when swapping processes. Send page load notifications from the UIProcess instead of the WebProcess to improve reliability. * UIProcess/mac/PageClientImplMac.mm: (WebKit::PageClientImpl::didFinishLoadForMainFrame): (WebKit::PageClientImpl::didFailLoadForMainFrame): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::reinitializeWebPage): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/gtk/WebPageGtk.cpp: (WebKit::WebPage::platformReinitialize): (WebKit::WebPage::platformDetach): Deleted. (WebKit::WebPage::platformEditorState const): Deleted. (WebKit::WebPage::updateAccessibilityTree): Deleted. (WebKit::WebPage::performDefaultBehaviorForKeyEvent): Deleted. (WebKit::WebPage::platformCanHandleRequest): Deleted. (WebKit::WebPage::platformUserAgent const): Deleted. (WebKit::WebPage::getCenterForZoomGesture): Deleted. (WebKit::WebPage::setInputMethodState): Deleted. (WebKit::WebPage::collapseSelectionInFrame): Deleted. * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::platformReinitialize): * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::platformReinitialize): * WebProcess/WebPage/win/WebPageWin.cpp: (WebKit::WebPage::platformReinitialize): * WebProcess/WebPage/wpe/WebPageWPE.cpp: (WebKit::WebPage::platformReinitialize): 2019-02-20 Alan Coon <alancoon@apple.com> Cherry-pick r241658. rdar://problem/48243434 https://device.login.microsoftonline.com is hanging on STP75 https://bugs.webkit.org/show_bug.cgi?id=194734 <rdar://problem/47573830> Reviewed by Jiewen Tan. Make sure to only go the XPC route if SecKeyProxyStore has credentials. Tested manually by going to the above website with and without the patch. Load hangs without the patch and completes with the patch. * UIProcess/Authentication/AuthenticationChallengeProxy.cpp: (WebKit::AuthenticationChallengeProxy::AuthenticationChallengeProxy): * UIProcess/Authentication/cocoa/SecKeyProxyStore.h: * UIProcess/Authentication/cocoa/SecKeyProxyStore.mm: (WebKit::SecKeyProxyStore::initialize): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241658 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-17 Youenn Fablet <youenn@apple.com> https://device.login.microsoftonline.com is hanging on STP75 https://bugs.webkit.org/show_bug.cgi?id=194734 <rdar://problem/47573830> Reviewed by Jiewen Tan. Make sure to only go the XPC route if SecKeyProxyStore has credentials. Tested manually by going to the above website with and without the patch. Load hangs without the patch and completes with the patch. * UIProcess/Authentication/AuthenticationChallengeProxy.cpp: (WebKit::AuthenticationChallengeProxy::AuthenticationChallengeProxy): * UIProcess/Authentication/cocoa/SecKeyProxyStore.h: * UIProcess/Authentication/cocoa/SecKeyProxyStore.mm: (WebKit::SecKeyProxyStore::initialize): 2019-02-20 Alan Coon <alancoon@apple.com> Cherry-pick r241606. rdar://problem/48243273 Regression(PSON) Navigating quickly back and forth can lead to getting 'about:blank' in the backforward list https://bugs.webkit.org/show_bug.cgi?id=194717 <rdar://problem/47884404> Reviewed by Brady Eidson. Source/WebKit: When the client does a history navigation, the UIProcess sends a WebPage::GoToBackForwardItem IPC to the WebProcess and the WebProcess sends a WebPageProxy::BackForwardGoToItem IPC back to the UIProcess to update the current item in the BackForwardList. This means that there is a slight delay between the point a client requests a history navigation and the point where the BackForwardList's current item gets update. This delay is pre-existing behavior and not new to PSON. However, with PSON enabled, if we decide to process-swap for the history navigation, we'll tell the previous (committed) process to ignore the load and we ask a new (provisional) process to do the history navigation. When the previous process receives the request to ignore the history navigation, it restores the History's current item to the one previous the navigation, which sends a WebPageProxy::GoToBackForwardItem IPC to the UIProcess to update the BackForwardList as well. In parallel, the new process starts the history navigation and also sends a WebPageProxy::GoToBackForwardItem to update the BackForwardList's current item as well. We end up with a race between the 2 GoToBackForwardItem IPC messages coming from the old and new process. If the old process's message loses the race, we end up with the wrong current history item getting set in the UIProcess. Later, when we commit the provisional load and try to suspend the previous page, we would save the SuspendedPage on the *wrong* BackForwardList item. If one tries to load this BackForwardList item later, we'll use its SuspendedPage and try to unsuspend it. However, because the PageCache entry is saved on another HistoryItem than the one getting loaded in the WebProcess side, we attempt to do a regular load instead of a PageCache restore. We end up failing the load because pages cannot trigger new loads while in page cache. Because the load fails, we end up loading the initial empty document and this is how we end up with 'about:blank' in the back forward list. To address the issue, update WebPageProxy::backForwardGoToItem() to ignore messages from the old/committed WebProcess when there is a pending provisional load. If the committed processes starts a legit new load, it would clear any existing pending provisional load before attempting the call backForwardGoToItem(). As a result, ignoring such messages from the old processes when there is a pending provisional load is safe. In the future, we should probably move more of the history / backForwardList management to the UIProcess to avoid this sort of issues. This would be a much larger refactoring though so I am going with this simpler fix that is easily cherry-pickable for now. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::suspendCurrentPageIfPossible): (WebKit::WebPageProxy::continueNavigationInNewProcess): (WebKit::WebPageProxy::backForwardGoToItem): Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241606 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-15 Chris Dumez <cdumez@apple.com> Regression(PSON) Navigating quickly back and forth can lead to getting 'about:blank' in the backforward list https://bugs.webkit.org/show_bug.cgi?id=194717 <rdar://problem/47884404> Reviewed by Brady Eidson. When the client does a history navigation, the UIProcess sends a WebPage::GoToBackForwardItem IPC to the WebProcess and the WebProcess sends a WebPageProxy::BackForwardGoToItem IPC back to the UIProcess to update the current item in the BackForwardList. This means that there is a slight delay between the point a client requests a history navigation and the point where the BackForwardList's current item gets update. This delay is pre-existing behavior and not new to PSON. However, with PSON enabled, if we decide to process-swap for the history navigation, we'll tell the previous (committed) process to ignore the load and we ask a new (provisional) process to do the history navigation. When the previous process receives the request to ignore the history navigation, it restores the History's current item to the one previous the navigation, which sends a WebPageProxy::GoToBackForwardItem IPC to the UIProcess to update the BackForwardList as well. In parallel, the new process starts the history navigation and also sends a WebPageProxy::GoToBackForwardItem to update the BackForwardList's current item as well. We end up with a race between the 2 GoToBackForwardItem IPC messages coming from the old and new process. If the old process's message loses the race, we end up with the wrong current history item getting set in the UIProcess. Later, when we commit the provisional load and try to suspend the previous page, we would save the SuspendedPage on the *wrong* BackForwardList item. If one tries to load this BackForwardList item later, we'll use its SuspendedPage and try to unsuspend it. However, because the PageCache entry is saved on another HistoryItem than the one getting loaded in the WebProcess side, we attempt to do a regular load instead of a PageCache restore. We end up failing the load because pages cannot trigger new loads while in page cache. Because the load fails, we end up loading the initial empty document and this is how we end up with 'about:blank' in the back forward list. To address the issue, update WebPageProxy::backForwardGoToItem() to ignore messages from the old/committed WebProcess when there is a pending provisional load. If the committed processes starts a legit new load, it would clear any existing pending provisional load before attempting the call backForwardGoToItem(). As a result, ignoring such messages from the old processes when there is a pending provisional load is safe. In the future, we should probably move more of the history / backForwardList management to the UIProcess to avoid this sort of issues. This would be a much larger refactoring though so I am going with this simpler fix that is easily cherry-pickable for now. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::suspendCurrentPageIfPossible): (WebKit::WebPageProxy::continueNavigationInNewProcess): (WebKit::WebPageProxy::backForwardGoToItem): 2019-02-20 Alan Coon <alancoon@apple.com> Cherry-pick r241549. rdar://problem/48243406 AX: ARIA Reflection was disabled in error https://bugs.webkit.org/show_bug.cgi?id=194647 <rdar://problem/48068336> Reviewed by Ryosuke Niwa. Source/WebKit: * Shared/WebPreferences.yaml: Tools: Remove test override now that this feature should be enabled by default. * WebKitTestRunner/TestController.cpp: (WTR::TestController::resetPreferencesToConsistentValues): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241549 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-14 Chris Fleizach <cfleizach@apple.com> AX: ARIA Reflection was disabled in error https://bugs.webkit.org/show_bug.cgi?id=194647 <rdar://problem/48068336> Reviewed by Ryosuke Niwa. * Shared/WebPreferences.yaml: 2019-02-18 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241635. rdar://problem/48165262 [PSON] Allow tweaking WebProcess cache parameters via user defaults https://bugs.webkit.org/show_bug.cgi?id=194731 <rdar://problem/48125377> Reviewed by Geoffrey Garen. Allow tweaking WebProcess cache parameters via user defaults like so: $ defaults write com.apple.Safari WebProcessCacheCachedProcessLifetimeInSeconds 120 -> Cached processes will be evicted after 2 minutes (instead of 30) $ defaults write com.apple.Safari WebProcessCacheClearingDelayAfterApplicationResignsActiveInSeconds 60 -> Web process cache will be cleared if Safari is no longer active for 1 minutes (instead of 5). * SourcesCocoa.txt: * UIProcess/Cocoa/WebProcessCacheCocoa.mm: Copied from Source/WebKit/UIProcess/WebProcessCache.h. (WebKit::WebProcessCache::platformInitialize): * UIProcess/WebProcessCache.cpp: (WebKit::WebProcessCache::WebProcessCache): (WebKit::WebProcessCache::platformInitialize): * UIProcess/WebProcessCache.h: * WebKit.xcodeproj/project.pbxproj: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241635 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-15 Chris Dumez <cdumez@apple.com> [PSON] Allow tweaking WebProcess cache parameters via user defaults https://bugs.webkit.org/show_bug.cgi?id=194731 <rdar://problem/48125377> Reviewed by Geoffrey Garen. Allow tweaking WebProcess cache parameters via user defaults like so: $ defaults write com.apple.Safari WebProcessCacheCachedProcessLifetimeInSeconds 120 -> Cached processes will be evicted after 2 minutes (instead of 30) $ defaults write com.apple.Safari WebProcessCacheClearingDelayAfterApplicationResignsActiveInSeconds 60 -> Web process cache will be cleared if Safari is no longer active for 1 minutes (instead of 5). * SourcesCocoa.txt: * UIProcess/Cocoa/WebProcessCacheCocoa.mm: Copied from Source/WebKit/UIProcess/WebProcessCache.h. (WebKit::WebProcessCache::platformInitialize): * UIProcess/WebProcessCache.cpp: (WebKit::WebProcessCache::WebProcessCache): (WebKit::WebProcessCache::platformInitialize): * UIProcess/WebProcessCache.h: * WebKit.xcodeproj/project.pbxproj: 2019-02-18 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241631. rdar://problem/48165260 [PSON] Disable WebContent process cache on devices with less than 3GB of RAM https://bugs.webkit.org/show_bug.cgi?id=194726 <rdar://problem/48126255> Reviewed by Geoffrey Garen. * UIProcess/WebProcessCache.cpp: (WebKit::WebProcessCache::updateCapacity): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241631 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-15 Chris Dumez <cdumez@apple.com> [PSON] Disable WebContent process cache on devices with less than 3GB of RAM https://bugs.webkit.org/show_bug.cgi?id=194726 <rdar://problem/48126255> Reviewed by Geoffrey Garen. * UIProcess/WebProcessCache.cpp: (WebKit::WebProcessCache::updateCapacity): 2019-02-18 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241584. rdar://problem/48122553 Unreviewed. Fix GTK+ build after r241556 I guess this is due to unified builds after a new file being added in r241556. Patch by Carlos Garcia Campos <cgarcia@igalia.com> on 2019-02-15 * UIProcess/API/C/WKAuthenticationDecisionListener.cpp: * UIProcess/API/C/WKPage.cpp: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241584 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-15 Carlos Garcia Campos <cgarcia@igalia.com> Unreviewed. Fix GTK+ build after r241556 I guess this is due to unified builds after a new file being added in r241556. * UIProcess/API/C/WKAuthenticationDecisionListener.cpp: * UIProcess/API/C/WKPage.cpp: 2019-02-18 Babak Shafiei <bshafiei@apple.com> Apply patch. rdar://problem/48122553 Introduce a WebContent Process cache https://bugs.webkit.org/show_bug.cgi?id=194594 <rdar://problem/46793397> Reviewed by Geoff Garen. Source/WebCore: Update localizable strings. * en.lproj/Localizable.strings: Source/WebKit: Introduce a WebContent Process cache to reduce the number of process launches when process swap on navigation is enabled, and to reduce the power cost of the feature. If a WebProcess loaded pages from a single registrable domain then it is eligible for the cache. When process-swapping on navigation to a new registrable domain, we now attempt to retrieve a process from the cache for the domain in question instead of always launching a new one. The WebProcess cache currently has the following attributes: - It may contains 4 processes per GB of RAM the machine has, up to 30 processes. - WebProcesses automatically get evicted from the cache after 30 minutes. - If the application is no longer the active app, then the cache will get cleared after 5 minutes. - WebProcesses that are in the cache are reported as "(Cached)" in Activity Monitor. The WebProcess cache is currently disabled by default and can by enabled by the client via SPI. * Shared/WebBackForwardListItem.cpp: (WebKit::WebBackForwardListItem::WebBackForwardListItem): * Shared/WebBackForwardListItem.h: (WebKit::WebBackForwardListItem::lastProcessIdentifier const): (WebKit::WebBackForwardListItem::setLastProcessIdentifier): Add new lastProcessIdentifier data member that reflects which process this item was last loaded in. It is normally identical to the identifier of the process that created the item but it gets overriden in case of cross-site client-side redirect, since a new process takes over the item in this case. * Sources.txt: Add new source file. * UIProcess/API/APIProcessPoolConfiguration.cpp: (API::ProcessPoolConfiguration::copy): * UIProcess/API/APIProcessPoolConfiguration.h: * UIProcess/API/C/WKContextConfigurationRef.cpp: (WKContextConfigurationUsesWebProcessCache): (WKContextConfigurationSetUsesWebProcessCache): * UIProcess/API/C/WKContextConfigurationRef.h: * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h: * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm: (-[_WKProcessPoolConfiguration setUsesWebProcessCache:]): (-[_WKProcessPoolConfiguration usesWebProcessCache]): Add new SPI to enable the WebProcess cache. * UIProcess/API/Cocoa/WKProcessPool.mm: (-[WKProcessPool _webProcessCountIgnoringPrewarmedAndCached]): * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: Add new SPI for testing which returns the number of WebProcesses ignoring both prewarmed and cached ones. * UIProcess/Cocoa/WebProcessPoolCocoa.mm: (WebKit::WebProcessPool::registerNotificationObservers): (WebKit::WebProcessPool::unregisterNotificationObservers): Add application active state observers as the WebProcess cache gets cleared when the application resigns active state for more than 5 minutes. * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::loadRequest): When doing a load in a new process with the BackForwardList locked (i.e. client-side redirect), make sure we update the last process identifier for the BackForwardListItem. This is important because the logic in WebProcessPool::processForNavigation() relies on this identifier to select which process to do the history navigation into, and we want to do the load in the post-redirect process, not the pre-redirect one. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared): Tell the WebProcess whenever a main frame provisional load is started, providing the URL. * UIProcess/WebProcessCache.cpp: Added. (WebKit::WebProcessCache::WebProcessCache): (WebKit::WebProcessCache::addProcess): (WebKit::WebProcessCache::takeProcess): (WebKit::WebProcessCache::updateMaximumSize): (WebKit::WebProcessCache::clear): (WebKit::WebProcessCache::setApplicationIsActive): (WebKit::WebProcessCache::evictProcess): (WebKit::WebProcessCache::CachedProcess::CachedProcess): (WebKit::WebProcessCache::CachedProcess::~CachedProcess): (WebKit::WebProcessCache::CachedProcess::takeProcess): (WebKit::WebProcessCache::CachedProcess::evictionTimerFired): * UIProcess/WebProcessCache.h: Added. (WebKit::WebProcessCache::maximumSize): (WebKit::WebProcessCache::size const): (WebKit::WebProcessCache::CachedProcess::process): Add process cache implementation. * UIProcess/WebProcessPool.cpp: (WebKit::m_webProcessCache): WebProcessCache is stored on the WebProcessPool via m_webProcessCache data member. (WebKit::WebProcessPool::~WebProcessPool): Clear the WebProcess cache in the destructor. (WebKit::WebProcessPool::setApplicationIsActive): Notify the WebProcessCache whenever the application's active state changes. (WebKit::WebProcessPool::createWebPage): If the state of PSON changes via the experimental features menu, dynamically update the WebProcessCache's size. This is needed because the cache is disabled when PSON is disabled. (WebKit::WebProcessPool::handleMemoryPressureWarning): Clear the WebProcess cache on memory pressure. (WebKit::WebProcessPool::processForNavigationInternal): Query the WebProcessCache before attempting to create a new WebProcess for a cross-site navigation. (WebKit::WebProcessPool::findReusableSuspendedPageProcess): This logic was split out of processForNavigationInternal() to reduce the size of the method. * UIProcess/WebProcessPool.h: * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::setIsInProcessCache): Update the isInProcessCache flag on the WebProcessProxy and send an IPC to the WebContent process so that it can update its name in Activity Monitor. We also need to stop holding a strong reference to the WebProcessPool whenever the process is in the cache, similarly to what we do for pre-warmed processes, given that such processes should not keep the process pool alive. (WebKit::WebProcessProxy::addExistingWebPage): Assert that we never try to add a page to a cached process, it should be taken out of the cache before use. (WebKit::WebProcessProxy::hasProvisionalPageWithID const): (WebKit::WebProcessProxy::isAllowedToUpdateBackForwardItem const): (WebKit::WebProcessProxy::updateBackForwardItem): In case of client-side redirects, the previous process would sometimes send an IPC causing the UIProcess' backforward list item to get updated with the pre-redirect URL after we've already redirected. This previously would be unlikely to occur because we do not suspend client-redirect pages and their process would normally exit before getting a chance to send the IPC. However, with the process cache, the bug became obvious as the process would stay alive and send up the "bad" IPC. To address the issue, we now only let the IPC update the item if the item's page is (still) associated with the process. In the future, we may want to update the IPC so that it gets sent to the WebPageProxy instead of the WebProcessProxy. (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch): If a cached WebProcess crashes, remove it from the cache so that we do not attempt to use it for a load later. (WebKit::WebProcessProxy::canBeAddedToWebProcessCache const): Only cache WebProcesses that have loaded a single registrable domain. Also prevent caching for service worker and inspector processes. (WebKit::WebProcessProxy::maybeShutDown): If the process is cacheable, add it to the cache instead of shutting it down right away. (WebKit::WebProcessProxy::canTerminateAuxiliaryProcess): Make sure we do not attempt to terminate a processes that is in the cache. (WebKit::WebProcessProxy::didStartProvisionalLoadForMainFrame): Whenever a main frame provisional load starts, make sure we update the process's associated registrable domain. nullopt indicates that there is no associated domain yet. Null string indicates that the process is associated with several registrable domain and is therefore not eligible for caching. * UIProcess/WebProcessProxy.h: (WebKit::WebProcessProxy::registrableDomain const): (WebKit::WebProcessProxy::isInProcessCache const): (WebKit::WebProcessProxy::provisionalPageCount const): Add convenience getters. * WebKit.xcodeproj/project.pbxproj: Add new files to project. * WebProcess/WebProcess.cpp: (WebKit::WebProcess::setIsInProcessCache): * WebProcess/WebProcess.h: * WebProcess/WebProcess.messages.in: * WebProcess/cocoa/WebProcessCocoa.mm: (WebKit::WebProcess::updateProcessName): Update the WebProcess' name in Activity Monitor whenever it goes into or out of the WebProcess cache. Tools: Update API tests to turn on the WebContent Process cache. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@241556 268f45cc-cd09-0410-ab3c-d52691b4dbfc (cherry picked from commit dc197d35fd5d947ff4c81c2e0f5636b9cad36b3c) 2019-02-14 Chris Dumez <cdumez@apple.com> [PSON] Introduce a WebContent Process cache https://bugs.webkit.org/show_bug.cgi?id=194594 <rdar://problem/46793397> Reviewed by Geoff Garen. Introduce a WebContent Process cache to reduce the number of process launches when process swap on navigation is enabled, and to reduce the power cost of the feature. If a WebProcess loaded pages from a single registrable domain then it is eligible for the cache. When process-swapping on navigation to a new registrable domain, we now attempt to retrieve a process from the cache for the domain in question instead of always launching a new one. The WebProcess cache currently has the following attributes: - It may contains 4 processes per GB of RAM the machine has, up to 30 processes. - WebProcesses automatically get evicted from the cache after 30 minutes. - If the application is no longer the active app, then the cache will get cleared after 5 minutes. - WebProcesses that are in the cache are reported as "(Cached)" in Activity Monitor. The WebProcess cache is currently disabled by default and can by enabled by the client via SPI. * Shared/WebBackForwardListItem.cpp: (WebKit::WebBackForwardListItem::WebBackForwardListItem): * Shared/WebBackForwardListItem.h: (WebKit::WebBackForwardListItem::lastProcessIdentifier const): (WebKit::WebBackForwardListItem::setLastProcessIdentifier): Add new lastProcessIdentifier data member that reflects which process this item was last loaded in. It is normally identical to the identifier of the process that created the item but it gets overriden in case of cross-site client-side redirect, since a new process takes over the item in this case. * Sources.txt: Add new source file. * UIProcess/API/APIProcessPoolConfiguration.cpp: (API::ProcessPoolConfiguration::copy): * UIProcess/API/APIProcessPoolConfiguration.h: * UIProcess/API/C/WKContextConfigurationRef.cpp: (WKContextConfigurationUsesWebProcessCache): (WKContextConfigurationSetUsesWebProcessCache): * UIProcess/API/C/WKContextConfigurationRef.h: * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h: * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm: (-[_WKProcessPoolConfiguration setUsesWebProcessCache:]): (-[_WKProcessPoolConfiguration usesWebProcessCache]): Add new SPI to enable the WebProcess cache. * UIProcess/API/Cocoa/WKProcessPool.mm: (-[WKProcessPool _webProcessCountIgnoringPrewarmedAndCached]): * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: Add new SPI for testing which returns the number of WebProcesses ignoring both prewarmed and cached ones. * UIProcess/Cocoa/WebProcessPoolCocoa.mm: (WebKit::WebProcessPool::registerNotificationObservers): (WebKit::WebProcessPool::unregisterNotificationObservers): Add application active state observers as the WebProcess cache gets cleared when the application resigns active state for more than 5 minutes. * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::loadRequest): When doing a load in a new process with the BackForwardList locked (i.e. client-side redirect), make sure we update the last process identifier for the BackForwardListItem. This is important because the logic in WebProcessPool::processForNavigation() relies on this identifier to select which process to do the history navigation into, and we want to do the load in the post-redirect process, not the pre-redirect one. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared): Tell the WebProcess whenever a main frame provisional load is started, providing the URL. * UIProcess/WebProcessCache.cpp: Added. (WebKit::WebProcessCache::WebProcessCache): (WebKit::WebProcessCache::addProcess): (WebKit::WebProcessCache::takeProcess): (WebKit::WebProcessCache::updateMaximumSize): (WebKit::WebProcessCache::clear): (WebKit::WebProcessCache::setApplicationIsActive): (WebKit::WebProcessCache::evictProcess): (WebKit::WebProcessCache::CachedProcess::CachedProcess): (WebKit::WebProcessCache::CachedProcess::~CachedProcess): (WebKit::WebProcessCache::CachedProcess::takeProcess): (WebKit::WebProcessCache::CachedProcess::evictionTimerFired): * UIProcess/WebProcessCache.h: Added. (WebKit::WebProcessCache::maximumSize): (WebKit::WebProcessCache::size const): (WebKit::WebProcessCache::CachedProcess::process): Add process cache implementation. * UIProcess/WebProcessPool.cpp: (WebKit::m_webProcessCache): WebProcessCache is stored on the WebProcessPool via m_webProcessCache data member. (WebKit::WebProcessPool::~WebProcessPool): Clear the WebProcess cache in the destructor. (WebKit::WebProcessPool::setApplicationIsActive): Notify the WebProcessCache whenever the application's active state changes. (WebKit::WebProcessPool::createWebPage): If the state of PSON changes via the experimental features menu, dynamically update the WebProcessCache's size. This is needed because the cache is disabled when PSON is disabled. (WebKit::WebProcessPool::handleMemoryPressureWarning): Clear the WebProcess cache on memory pressure. (WebKit::WebProcessPool::processForNavigationInternal): Query the WebProcessCache before attempting to create a new WebProcess for a cross-site navigation. (WebKit::WebProcessPool::findReusableSuspendedPageProcess): This logic was split out of processForNavigationInternal() to reduce the size of the method. * UIProcess/WebProcessPool.h: * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::setIsInProcessCache): Update the isInProcessCache flag on the WebProcessProxy and send an IPC to the WebContent process so that it can update its name in Activity Monitor. We also need to stop holding a strong reference to the WebProcessPool whenever the process is in the cache, similarly to what we do for pre-warmed processes, given that such processes should not keep the process pool alive. (WebKit::WebProcessProxy::addExistingWebPage): Assert that we never try to add a page to a cached process, it should be taken out of the cache before use. (WebKit::WebProcessProxy::hasProvisionalPageWithID const): (WebKit::WebProcessProxy::isAllowedToUpdateBackForwardItem const): (WebKit::WebProcessProxy::updateBackForwardItem): In case of client-side redirects, the previous process would sometimes send an IPC causing the UIProcess' backforward list item to get updated with the pre-redirect URL after we've already redirected. This previously would be unlikely to occur because we do not suspend client-redirect pages and their process would normally exit before getting a chance to send the IPC. However, with the process cache, the bug became obvious as the process would stay alive and send up the "bad" IPC. To address the issue, we now only let the IPC update the item if the item's page is (still) associated with the process. In the future, we may want to update the IPC so that it gets sent to the WebPageProxy instead of the WebProcessProxy. (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch): If a cached WebProcess crashes, remove it from the cache so that we do not attempt to use it for a load later. (WebKit::WebProcessProxy::canBeAddedToWebProcessCache const): Only cache WebProcesses that have loaded a single registrable domain. Also prevent caching for service worker and inspector processes. (WebKit::WebProcessProxy::maybeShutDown): If the process is cacheable, add it to the cache instead of shutting it down right away. (WebKit::WebProcessProxy::canTerminateAuxiliaryProcess): Make sure we do not attempt to terminate a processes that is in the cache. (WebKit::WebProcessProxy::didStartProvisionalLoadForMainFrame): Whenever a main frame provisional load starts, make sure we update the process's associated registrable domain. nullopt indicates that there is no associated domain yet. Null string indicates that the process is associated with several registrable domain and is therefore not eligible for caching. * UIProcess/WebProcessProxy.h: (WebKit::WebProcessProxy::registrableDomain const): (WebKit::WebProcessProxy::isInProcessCache const): (WebKit::WebProcessProxy::provisionalPageCount const): Add convenience getters. * WebKit.xcodeproj/project.pbxproj: Add new files to project. * WebProcess/WebProcess.cpp: (WebKit::WebProcess::setIsInProcessCache): * WebProcess/WebProcess.h: * WebProcess/WebProcess.messages.in: * WebProcess/cocoa/WebProcessCocoa.mm: (WebKit::WebProcess::updateProcessName): Update the WebProcess' name in Activity Monitor whenever it goes into or out of the WebProcess cache. 2019-02-13 Babak Shafiei <bshafiei@apple.com> Apply patch. rdar://problem/47673836 2019-02-13 Brent Fulgham <bfulgham@apple.com> [iOS] Revert ability to set programmatic focus when hardware keyboard is attached https://bugs.webkit.org/show_bug.cgi?id=194570 <rdar://problem/47673836> Reviewed by Dan Bates. * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]): * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::platformEditorState const): 2019-02-13 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241500. rdar://problem/48065631 Crash in WKBundleFrameGetParentFrame when called inside didRemoveFrameFromHierarchy https://bugs.webkit.org/show_bug.cgi?id=194641 Reviewed by Geoffrey Garen. Source/WebKit: Fixed the bug by adding a null check to WebFrame::parentFrame. * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::parentFrame const): Tools: Added a call to WKBundleFrameGetParentFrame to an existing test for didRemoveFrameFromHierarchy so that the test would fail without this fix. * TestWebKitAPI/Tests/WebKit/DidRemoveFrameFromHiearchyInPageCache_Bundle.cpp: (TestWebKitAPI::didRemoveFrameFromHierarchyCallback): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241500 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-13 Ryosuke Niwa <rniwa@webkit.org> Crash in WKBundleFrameGetParentFrame when called inside didRemoveFrameFromHierarchy https://bugs.webkit.org/show_bug.cgi?id=194641 Reviewed by Geoffrey Garen. Fixed the bug by adding a null check to WebFrame::parentFrame. * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::parentFrame const): 2019-02-13 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241481. rdar://problem/48065616 Encrypted PDFs inside <embed> or <object> crash the Web Content process https://bugs.webkit.org/show_bug.cgi?id=194605 <rdar://problem/19894818> Reviewed by Andy Estes. Source/WebKit: * WebProcess/Plugins/PDF/PDFPlugin.mm: (WebKit::PDFPlugin::createPasswordEntryForm): Don't try to create a password form field if we can't make form fields. This means you will be left with a useless embedded PDF, but at least the Web Content process won't crash. We'll need to find an alternative implementation of PDF embedded form fields that is compatible with <embed> and <object> if we want to support this. Currently we piggy-back off the fact that we can just insert <input>s into the PluginDocument's DOM, but we can't do that if there is no PluginDocument, just a main document, like in the <embed> case. LayoutTests: * fast/replaced/encrypted-pdf-as-object-and-embed-expected.txt: Added. * fast/replaced/encrypted-pdf-as-object-and-embed.html: Added. * fast/replaced/resources/encrypted-image.pdf: Added. Add a test ensuring that we don't crash with encrypted PDF in <object> or <embed>. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241481 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-13 Tim Horton <timothy_horton@apple.com> Encrypted PDFs inside <embed> or <object> crash the Web Content process https://bugs.webkit.org/show_bug.cgi?id=194605 <rdar://problem/19894818> Reviewed by Andy Estes. * WebProcess/Plugins/PDF/PDFPlugin.mm: (WebKit::PDFPlugin::createPasswordEntryForm): Don't try to create a password form field if we can't make form fields. This means you will be left with a useless embedded PDF, but at least the Web Content process won't crash. We'll need to find an alternative implementation of PDF embedded form fields that is compatible with <embed> and <object> if we want to support this. Currently we piggy-back off the fact that we can just insert <input>s into the PluginDocument's DOM, but we can't do that if there is no PluginDocument, just a main document, like in the <embed> case. 2019-02-13 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241480. rdar://problem/48065618 Further restricting webarchive loads https://bugs.webkit.org/show_bug.cgi?id=194567 <rdar://problem/47610130> Reviewed by Youenn Fablet. Source/WebCore: This patch futher restricts main frame webarchive loads to the followings: 1) loaded by clients; 2) loaded by drag; 3) reloaded from any of the previous two. It moves setAlwaysAllowLocalWebarchive, which is used for testing only, from Document to FrameLoader such that the option is remembered during redirections. Covered by API tests. * dom/Document.h: (WebCore::Document::setAlwaysAllowLocalWebarchive): Deleted. (WebCore::Document::alwaysAllowLocalWebarchive const): Deleted. * loader/DocumentLoader.cpp: (WebCore::DocumentLoader::disallowWebArchive const): * loader/DocumentLoader.h: (WebCore::DocumentLoader::setAllowsWebArchiveForMainFrame): (WebCore::DocumentLoader::allowsWebArchiveForMainFrame): * loader/FrameLoadRequest.h: (WebCore::FrameLoadRequest::setIsRequestFromClientOrUserInput): (WebCore::FrameLoadRequest::isRequestFromClientOrUserInput): * loader/FrameLoader.cpp: (WebCore::FrameLoader::load): (WebCore::FrameLoader::reload): * loader/FrameLoader.h: (WebCore::FrameLoader::setAlwaysAllowLocalWebarchive): (WebCore::FrameLoader::alwaysAllowLocalWebarchive const): * page/DragController.cpp: (WebCore::DragController::performDragOperation): * testing/Internals.cpp: (WebCore::Internals::setAlwaysAllowLocalWebarchive const): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::loadRequest): Set a flag to indicate a load is started from clients. Tools: Besides adding API tests, this patch also enhances DragAndDropSimulator to allow navigations on drop. * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: * TestWebKitAPI/Tests/mac/LoadWebArchive.mm: Added. (-[TestLoadWebArchiveNavigationDelegate webView:didFinishNavigation:]): (-[TestLoadWebArchiveNavigationDelegate webView:didFailProvisionalNavigation:withError:]): (-[TestLoadWebArchiveNavigationDelegate webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:]): (TestWebKitAPI::TEST): * TestWebKitAPI/Tests/mac/helloworld.webarchive: Added. * TestWebKitAPI/Tests/mac/load-web-archive-1.html: Added. * TestWebKitAPI/Tests/mac/load-web-archive-2.html: Added. * TestWebKitAPI/cocoa/DragAndDropSimulator.h: * TestWebKitAPI/mac/DragAndDropSimulatorMac.mm: (-[DragAndDropSimulator initWithWebViewFrame:configuration:]): (-[DragAndDropSimulator _webView:dragDestinationActionMaskForDraggingInfo:]): LayoutTests: * platform/mac/fast/loader/webarchive-encoding-respected.html: * webarchive/loading/cache-expired-subresource.html: * webarchive/loading/javascript-url-iframe-crash.html: * webarchive/loading/mainresource-null-mimetype-crash.html: * webarchive/loading/missing-data.html: * webarchive/loading/object.html: * webarchive/loading/test-loading-archive-subresource-null-mimetype.html: * webarchive/loading/test-loading-archive-subresource.html: * webarchive/loading/test-loading-archive.html: * webarchive/loading/test-loading-top-archive.html: * webarchive/loading/video-in-webarchive.html: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241480 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-12 Jiewen Tan <jiewen_tan@apple.com> Further restricting webarchive loads https://bugs.webkit.org/show_bug.cgi?id=194567 <rdar://problem/47610130> Reviewed by Youenn Fablet. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::loadRequest): Set a flag to indicate a load is started from clients. 2019-02-13 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241453. rdar://problem/48065612 Fix -Wformat warning from r241401 https://bugs.webkit.org/show_bug.cgi?id=194584 <rdar://problem/47761293> * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::setActivityState): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241453 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-13 Michael Catanzaro <mcatanzaro@igalia.com> Fix -Wformat warning from r241401 https://bugs.webkit.org/show_bug.cgi?id=194584 <rdar://problem/47761293> * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::setActivityState): 2019-02-13 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241448. rdar://problem/48065637 Crash in WebKit::CacheStorage::Engine::cachesRootPath https://bugs.webkit.org/show_bug.cgi?id=194588 <rdar://problem/46363997> Reviewed by Youenn Fablet. * NetworkProcess/cache/CacheStorageEngine.cpp: (WebKit::CacheStorage::Engine::cachesRootPath): Salt may have not been initialized yet when the Engine is destroyed. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241448 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-13 Antti Koivisto <antti@apple.com> Crash in WebKit::CacheStorage::Engine::cachesRootPath https://bugs.webkit.org/show_bug.cgi?id=194588 <rdar://problem/46363997> Reviewed by Youenn Fablet. * NetworkProcess/cache/CacheStorageEngine.cpp: (WebKit::CacheStorage::Engine::cachesRootPath): Salt may have not been initialized yet when the Engine is destroyed. 2019-02-13 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241401. rdar://problem/48065612 Crash in Page::setActivityState because m_page is null https://bugs.webkit.org/show_bug.cgi?id=194584 Reviewed by Antti Koivisto. Add a null check to avoid the crash. Also add a debug assertion to help diagnose this in the future. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::setActivityState): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241401 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-13 Ryosuke Niwa <rniwa@webkit.org> Crash in Page::setActivityState because m_page is null https://bugs.webkit.org/show_bug.cgi?id=194584 Reviewed by Antti Koivisto. Add a null check to avoid the crash. Also add a debug assertion to help diagnose this in the future. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::setActivityState): 2019-02-13 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241349. rdar://problem/48065639 Null deref in userInterfaceLayoutDirection under ViewGestureController::handleSwipeGesture https://bugs.webkit.org/show_bug.cgi?id=194569 <rdar://problem/46711049> Reviewed by Wenson Hsieh. * UIProcess/mac/ViewGestureControllerMac.mm: (WebKit::ViewGestureController::handleSwipeGesture): It is conceivable that we could get here if the client closes the page e.g. in the callback from willEndSwipeGesture. We already guarded against this ... one line too late! Rearrange the lines so we don't call into WebPageProxy at all if we don't have a drawing area (which is a strict subset of the time that isValid would return true). This is a speculative fix, since I can no longer reproduce the crash on demand. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241349 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-12 Tim Horton <timothy_horton@apple.com> Null deref in userInterfaceLayoutDirection under ViewGestureController::handleSwipeGesture https://bugs.webkit.org/show_bug.cgi?id=194569 <rdar://problem/46711049> Reviewed by Wenson Hsieh. * UIProcess/mac/ViewGestureControllerMac.mm: (WebKit::ViewGestureController::handleSwipeGesture): It is conceivable that we could get here if the client closes the page e.g. in the callback from willEndSwipeGesture. We already guarded against this ... one line too late! Rearrange the lines so we don't call into WebPageProxy at all if we don't have a drawing area (which is a strict subset of the time that isValid would return true). This is a speculative fix, since I can no longer reproduce the crash on demand. 2019-02-13 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241336. rdar://problem/48065621 Regression(PSON) MESSAGE_CHECK() hit under WebPageProxy::didFailProvisionalLoadForFrameShared() https://bugs.webkit.org/show_bug.cgi?id=194568 <rdar://problem/47944490> Reviewed by Ryosuke Niwa. Source/WebKit: When the provisional process crashes, it is unsafe to call ProvisionalPageProxy::cancel() because the WebProcessProxy clears its frame map as soon as the process crashes. Calling cancel() after that would call WebPageProxy::didFailProvisionalLoadForFrameShared(), which would try to look up the frame by ID and MESSAGE_CHECK() that the frame is not null. We would fail this check since the frame has been removed from the WebProcessProxy at this point. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _provisionalWebProcessIdentifier]): * UIProcess/API/Cocoa/WKWebViewPrivate.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared): (WebKit::WebPageProxy::provisionalProcessDidTerminate): Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: (-[PSONNavigationDelegate webView:didStartProvisionalNavigation:]): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241336 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-12 Chris Dumez <cdumez@apple.com> Regression(PSON) MESSAGE_CHECK() hit under WebPageProxy::didFailProvisionalLoadForFrameShared() https://bugs.webkit.org/show_bug.cgi?id=194568 <rdar://problem/47944490> Reviewed by Ryosuke Niwa. When the provisional process crashes, it is unsafe to call ProvisionalPageProxy::cancel() because the WebProcessProxy clears its frame map as soon as the process crashes. Calling cancel() after that would call WebPageProxy::didFailProvisionalLoadForFrameShared(), which would try to look up the frame by ID and MESSAGE_CHECK() that the frame is not null. We would fail this check since the frame has been removed from the WebProcessProxy at this point. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _provisionalWebProcessIdentifier]): * UIProcess/API/Cocoa/WKWebViewPrivate.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared): (WebKit::WebPageProxy::provisionalProcessDidTerminate): 2019-02-13 Alan Coon <alancoon@apple.com> Apply patch. rdar://problem/40966400 2019-02-13 Brent Fulgham <bfulgham@apple.com> Branch-Only: Use Async message infrastructure for storageAccess API https://bugs.webkit.org/show_bug.cgi?id=194511 <rdar://problem/40966400> Back-port the trunk async message handling implementation of the StorageAccess API methods. The generated async message handling code does a better job of managing the bookkeeping and error handling of cross-process message passing, and gives us fewer opportunities to make coding errors that might lead to dropped messages or sending messages multiple times. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::hasStorageAccess): (WebKit::WebPageProxy::requestStorageAccess): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::hasStorageAccess): (WebKit::WebPage::requestStorageAccess): (WebKit::nextRequestStorageAccessContextId): Deleted. (WebKit::WebPage::storageAccessResponse): Deleted. * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: 2019-02-13 Alan Coon <alancoon@apple.com> Cherry-pick r241352. rdar://problem/48038900 Release assert in PolicyCheckIdentifier::isValidFor via WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction https://bugs.webkit.org/show_bug.cgi?id=194582 Reviewed by Antti Koivisto. Source/WebCore: Check the zero-ness of m_policyCheck first so that we can differentiate process ID being wrong from the non-generated identifier being sent to us as it was the case in this failure. * loader/PolicyChecker.cpp: (WebCore::PolicyCheckIdentifier::isValidFor): Source/WebKit: The bug was caused by WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction invoking the callback with responseIdentifier even when we had failed to send the policy check IPC. Clearly, responseIdentifier is invalid in that case, and we should be using requestIdentifier instead. Unfortunately no new tests since I'm not aware of a way to make sendSync fail in this case. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241352 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-13 Ryosuke Niwa <rniwa@webkit.org> Release assert in PolicyCheckIdentifier::isValidFor via WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction https://bugs.webkit.org/show_bug.cgi?id=194582 Reviewed by Antti Koivisto. The bug was caused by WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction invoking the callback with responseIdentifier even when we had failed to send the policy check IPC. Clearly, responseIdentifier is invalid in that case, and we should be using requestIdentifier instead. Unfortunately no new tests since I'm not aware of a way to make sendSync fail in this case. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): 2019-02-12 Alan Coon <alancoon@apple.com> Apply patch. rdar://problem/48009995 2019-02-12 Alex Christensen <achristensen@webkit.org> WebPage::close needs to remove all message receivers associated with that WebPage, not WebPage::~WebPage https://bugs.webkit.org/show_bug.cgi?id=194522 <rdar://problem/47789393> Reviewed by Chris Dumez. The InjectedBundle SPI can retain the WebPage or wrapping objects (WKWebProcessPlugInBrowserContextController/WKBundlePageRef). This can make it so WebPage::close is called before WebPage::~WebPage, and if the SuspendedPageProxy is reused for a subsequent navigation to the same domain, the WebProcess is reused with a different WebPage instance with the same PageID, which causes problems when another WebPage registers message handlers and then the previous WebPage is destroyed, which removes both message handlers. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::~WebPage): (WebKit::WebPage::close): (WebKit::WebPage::mainFrameDidLayout): * WebProcess/WebPage/WebPage.h: * WebProcess/WebProcess.h: (WebKit::WebProcess::eventDispatcher): 2019-02-07 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241171. rdar://problem/47908156 [iOS] Clicking links in Safari using Apple Pencil is much more difficult after r238475 https://bugs.webkit.org/show_bug.cgi?id=194415 <rdar://problem/47550281> Reviewed by Tim Horton. Source/WebKit: Fix the bug by not firing the Apple-pencil-exclusive tap gesture recognizer in the case where editable images are disabled. This gesture recognizer is only used for inserting editable images, and currently conflicts with the synthetic click gesture recognizer used to recognize clicks from generic digitizer inputs. * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView gestureRecognizerShouldBegin:]): (-[WKContentView _stylusSingleTapRecognized:]): LayoutTests: Add a layout test to verify that a stylus tap dispatches clicks. * fast/events/touch/ios/pencil-tap-dispatches-click-expected.txt: Added. * fast/events/touch/ios/pencil-tap-dispatches-click.html: Added. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241171 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-07 Wenson Hsieh <wenson_hsieh@apple.com> [iOS] Clicking links in Safari using Apple Pencil is much more difficult after r238475 https://bugs.webkit.org/show_bug.cgi?id=194415 <rdar://problem/47550281> Reviewed by Tim Horton. Fix the bug by not firing the Apple-pencil-exclusive tap gesture recognizer in the case where editable images are disabled. This gesture recognizer is only used for inserting editable images, and currently conflicts with the synthetic click gesture recognizer used to recognize clicks from generic digitizer inputs. * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView gestureRecognizerShouldBegin:]): (-[WKContentView _stylusSingleTapRecognized:]): 2019-02-07 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241143. rdar://problem/47908161 Permit additional IOKit Properties needed by Media PlugIns on older Mac Hardware https://bugs.webkit.org/show_bug.cgi?id=194412 <rdar://problem/47820615> Reviewed by Per Arne Vollan. * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241143 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-07 Brent Fulgham <bfulgham@apple.com> Permit additional IOKit Properties needed by Media PlugIns on older Mac Hardware https://bugs.webkit.org/show_bug.cgi?id=194412 <rdar://problem/47820615> Reviewed by Per Arne Vollan. * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in: 2019-02-07 Babak Shafiei <bshafiei@apple.com> Cherry-pick r241142. rdar://problem/47908158 Permit additional IOKit Properties needed by older Mac Hardware https://bugs.webkit.org/show_bug.cgi?id=194410 <rdar://problem/47820620> Reviewed by Per Arne Vollan. * WebProcess/com.apple.WebProcess.sb.in: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241142 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-07 Brent Fulgham <bfulgham@apple.com> Permit additional IOKit Properties needed by older Mac Hardware https://bugs.webkit.org/show_bug.cgi?id=194410 <rdar://problem/47820620> Reviewed by Per Arne Vollan. * WebProcess/com.apple.WebProcess.sb.in: 2019-02-07 Alan Coon <alancoon@apple.com> Cherry-pick r241131. rdar://problem/47893578 Print backgrounds preference should be honored instead of WKWebViewConfiguration value https://bugs.webkit.org/show_bug.cgi?id=194364 <rdar://problem/47627599> Reviewed by Tim Horton. Without this patch, changing the preference for printing the background has no effect. This patch fixes that, and I verified it manually by checking "Print backgrounds" in Safari's print menu. Unfortunately, the only way to test this is actually printing because only values from WebPageProxy::preferences or WebPageProxy::configuration's preferences are exposed to the API, but values from WebPageProxy::preferencesStore are used when printing. Actually printing verifies this change fixes the bug. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _initializeWithConfiguration:]): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241131 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-07 Alex Christensen <achristensen@webkit.org> Print backgrounds preference should be honored instead of WKWebViewConfiguration value https://bugs.webkit.org/show_bug.cgi?id=194364 <rdar://problem/47627599> Reviewed by Tim Horton. Without this patch, changing the preference for printing the background has no effect. This patch fixes that, and I verified it manually by checking "Print backgrounds" in Safari's print menu. Unfortunately, the only way to test this is actually printing because only values from WebPageProxy::preferences or WebPageProxy::configuration's preferences are exposed to the API, but values from WebPageProxy::preferencesStore are used when printing. Actually printing verifies this change fixes the bug. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _initializeWithConfiguration:]): 2019-02-07 Alan Coon <alancoon@apple.com> Cherry-pick r241124. rdar://problem/47893586 Shrink and hyphenate safe browsing warning text on watchOS https://bugs.webkit.org/show_bug.cgi?id=194361 <rdar://problem/47466549> Reviewed by Geoffrey Garen. Some internationalizations use long words that didn't fit on small watches. * UIProcess/Cocoa/WKSafeBrowsingWarning.mm: (fontOfSize): (-[WKSafeBrowsingWarning addContent]): (-[WKSafeBrowsingTextView initWithAttributedString:forWarning:]): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241124 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-07 Alex Christensen <achristensen@webkit.org> Shrink and hyphenate safe browsing warning text on watchOS https://bugs.webkit.org/show_bug.cgi?id=194361 <rdar://problem/47466549> Reviewed by Geoffrey Garen. Some internationalizations use long words that didn't fit on small watches. * UIProcess/Cocoa/WKSafeBrowsingWarning.mm: (fontOfSize): (-[WKSafeBrowsingWarning addContent]): (-[WKSafeBrowsingTextView initWithAttributedString:forWarning:]): 2019-02-07 Alan Coon <alancoon@apple.com> Cherry-pick r241105. rdar://problem/47893571 [Payment Request] It should be possible to require a phonetic name for shipping contacts https://bugs.webkit.org/show_bug.cgi?id=194311 <rdar://46733045> Reviewed by Alex Christensen. Source/WebCore: It should be possible to require that a shipping contact has a phonetic name in Payment Request. To accomplish this, move requiredShippingContactFields from ApplePayPaymentRequest to ApplePayRequestBase so that it can be used as part of an Apple Pay payment method data. Since required shipping contact fields can now be specified both in requiredShippingContactFields and PaymentOptions, we merge the required fields from these two sources such that, e.g., email is required if it is specified in either place. So that clients can detect this new feature, the API version number is bumped from 5 to 6. Added test cases to ApplePayRequestShippingContact.https.html and ApplePayRequestShippingContactV3.https.html. * DerivedSources.make: * Modules/applepay/ApplePayPaymentRequest.h: * Modules/applepay/ApplePayPaymentRequest.idl: * Modules/applepay/ApplePayRequestBase.cpp: (WebCore::convertAndValidate): * Modules/applepay/ApplePayRequestBase.h: * Modules/applepay/ApplePayRequestBase.idl: * Modules/applepay/ApplePaySession.cpp: (WebCore::convertAndValidate): * Modules/applepay/PaymentCoordinatorClient.cpp: Added. (WebCore::PaymentCoordinatorClient::supportsVersion): * Modules/applepay/PaymentCoordinatorClient.h: * Modules/applepay/paymentrequest/ApplePayPaymentHandler.cpp: (WebCore::mergePaymentOptions): (WebCore::ApplePayPaymentHandler::show): * SourcesCocoa.txt: * WebCore.xcodeproj/project.pbxproj: * loader/EmptyClients.cpp: * testing/MockPaymentContactFields.h: Added. (WebCore::MockPaymentContactFields::MockPaymentContactFields): * testing/MockPaymentContactFields.idl: Added. * testing/MockPaymentCoordinator.cpp: (WebCore::MockPaymentCoordinator::showPaymentUI): (WebCore::MockPaymentCoordinator::supportsVersion): Deleted. * testing/MockPaymentCoordinator.h: * testing/MockPaymentCoordinator.idl: Source/WebKit: * WebProcess/ApplePay/WebPaymentCoordinator.cpp: (WebKit::WebPaymentCoordinator::supportsVersion): Deleted. * WebProcess/ApplePay/WebPaymentCoordinator.h: Source/WebKitLegacy/mac: * WebCoreSupport/WebPaymentCoordinatorClient.h: * WebCoreSupport/WebPaymentCoordinatorClient.mm: (WebPaymentCoordinatorClient::supportsVersion): Deleted. LayoutTests: * http/tests/ssl/applepay/ApplePayRequestShippingContact.https-expected.txt: * http/tests/ssl/applepay/ApplePayRequestShippingContact.https.html: * http/tests/ssl/applepay/ApplePayRequestShippingContactV3.https-expected.txt: * http/tests/ssl/applepay/ApplePayRequestShippingContactV3.https.html: * http/tests/ssl/applepay/PaymentRequest.https-expected.txt: * http/tests/ssl/applepay/PaymentRequest.https.html: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241105 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-06 Andy Estes <aestes@apple.com> [Payment Request] It should be possible to require a phonetic name for shipping contacts https://bugs.webkit.org/show_bug.cgi?id=194311 <rdar://46733045> Reviewed by Alex Christensen. * WebProcess/ApplePay/WebPaymentCoordinator.cpp: (WebKit::WebPaymentCoordinator::supportsVersion): Deleted. * WebProcess/ApplePay/WebPaymentCoordinator.h: 2019-02-07 Alan Coon <alancoon@apple.com> Cherry-pick r241026. rdar://problem/47774548 Roll out parts of r238819 since it is a PLT performance regression. https://bugs.webkit.org/show_bug.cgi?id=194346 Unreviewed performance fix. * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: (didStartProvisionalLoadForFrame): (didReceiveServerRedirectForProvisionalLoadForFrame): (didFinishLoadForFrame): (globalObjectIsAvailableForFrame): (didRemoveFrameFromHierarchy): (didCommitLoadForFrame): (didFinishDocumentLoadForFrame): (didFailProvisionalLoadWithErrorForFrame): (didFailLoadWithErrorForFrame): (didSameDocumentNavigationForFrame): (didLayoutForFrame): (didReachLayoutMilestone): (didFirstVisuallyNonEmptyLayoutForFrame): (didHandleOnloadEventsForFrame): (userAgentForURL): (setUpPageLoaderClient): (willSendRequestForFrame): (didInitiateLoadForResource): (didFinishLoadForResource): (didFailLoadForResource): (setUpResourceLoadClient): (-[WKWebProcessPlugInBrowserContextController setLoadDelegate:]): (ResourceLoadClient::ResourceLoadClient): Deleted. (ResourceLoadClient::loadDelegate const): Deleted. (ResourceLoadClient::pluginContextController const): Deleted. (PageLoaderClient::PageLoaderClient): Deleted. (PageLoaderClient::loadDelegate const): Deleted. (PageLoaderClient::pluginContextController const): Deleted. (PageLoaderClient::didStartProvisionalLoadForFrame): Deleted. (PageLoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame): Deleted. (PageLoaderClient::didFinishLoadForFrame): Deleted. (PageLoaderClient::globalObjectIsAvailableForFrame): Deleted. (PageLoaderClient::didRemoveFrameFromHierarchy): Deleted. (PageLoaderClient::didCommitLoadForFrame): Deleted. (PageLoaderClient::didFinishDocumentLoadForFrame): Deleted. (PageLoaderClient::didFailProvisionalLoadWithErrorForFrame): Deleted. (PageLoaderClient::didFailLoadWithErrorForFrame): Deleted. (PageLoaderClient::didSameDocumentNavigationForFrame): Deleted. (PageLoaderClient::didLayoutForFrame): Deleted. (PageLoaderClient::didReachLayoutMilestone): Deleted. (PageLoaderClient::didFirstVisuallyNonEmptyLayoutForFrame): Deleted. (PageLoaderClient::layoutMilestones const): Deleted. (PageLoaderClient::didHandleOnloadEventsForFrame): Deleted. (PageLoaderClient::userAgentForURL const): Deleted. (ResourceLoadClient::willSendRequestForFrame): Deleted. (ResourceLoadClient::didInitiateLoadForResource): Deleted. (ResourceLoadClient::didFinishLoadForResource): Deleted. (ResourceLoadClient::didFailLoadForResource): Deleted. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241026 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-06 Per Arne Vollan <pvollan@apple.com> Roll out parts of r238819 since it is a PLT performance regression. https://bugs.webkit.org/show_bug.cgi?id=194346 Unreviewed performance fix. * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: (didStartProvisionalLoadForFrame): (didReceiveServerRedirectForProvisionalLoadForFrame): (didFinishLoadForFrame): (globalObjectIsAvailableForFrame): (didRemoveFrameFromHierarchy): (didCommitLoadForFrame): (didFinishDocumentLoadForFrame): (didFailProvisionalLoadWithErrorForFrame): (didFailLoadWithErrorForFrame): (didSameDocumentNavigationForFrame): (didLayoutForFrame): (didReachLayoutMilestone): (didFirstVisuallyNonEmptyLayoutForFrame): (didHandleOnloadEventsForFrame): (userAgentForURL): (setUpPageLoaderClient): (willSendRequestForFrame): (didInitiateLoadForResource): (didFinishLoadForResource): (didFailLoadForResource): (setUpResourceLoadClient): (-[WKWebProcessPlugInBrowserContextController setLoadDelegate:]): (ResourceLoadClient::ResourceLoadClient): Deleted. (ResourceLoadClient::loadDelegate const): Deleted. (ResourceLoadClient::pluginContextController const): Deleted. (PageLoaderClient::PageLoaderClient): Deleted. (PageLoaderClient::loadDelegate const): Deleted. (PageLoaderClient::pluginContextController const): Deleted. (PageLoaderClient::didStartProvisionalLoadForFrame): Deleted. (PageLoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame): Deleted. (PageLoaderClient::didFinishLoadForFrame): Deleted. (PageLoaderClient::globalObjectIsAvailableForFrame): Deleted. (PageLoaderClient::didRemoveFrameFromHierarchy): Deleted. (PageLoaderClient::didCommitLoadForFrame): Deleted. (PageLoaderClient::didFinishDocumentLoadForFrame): Deleted. (PageLoaderClient::didFailProvisionalLoadWithErrorForFrame): Deleted. (PageLoaderClient::didFailLoadWithErrorForFrame): Deleted. (PageLoaderClient::didSameDocumentNavigationForFrame): Deleted. (PageLoaderClient::didLayoutForFrame): Deleted. (PageLoaderClient::didReachLayoutMilestone): Deleted. (PageLoaderClient::didFirstVisuallyNonEmptyLayoutForFrame): Deleted. (PageLoaderClient::layoutMilestones const): Deleted. (PageLoaderClient::didHandleOnloadEventsForFrame): Deleted. (PageLoaderClient::userAgentForURL const): Deleted. (ResourceLoadClient::willSendRequestForFrame): Deleted. (ResourceLoadClient::didInitiateLoadForResource): Deleted. (ResourceLoadClient::didFinishLoadForResource): Deleted. (ResourceLoadClient::didFailLoadForResource): Deleted. 2019-02-07 Alan Coon <alancoon@apple.com> Cherry-pick r240808. rdar://problem/47774548 Revert r238819 which is unneeded and caused a performance regression. https://bugs.webkit.org/show_bug.cgi?id=192272 <rdar://problem/46664625> Source/WebCore: * loader/EmptyFrameLoaderClient.h: * loader/FrameLoader.cpp: (WebCore::FrameLoader::prepareForLoadStart): (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): (WebCore::FrameLoader::loadProvisionalItemFromCachedPage): * loader/FrameLoader.h: * loader/FrameLoaderClient.h: Source/WebKit: * WebProcess/InjectedBundle/API/APIInjectedBundlePageLoaderClient.h: (API::InjectedBundle::PageLoaderClient::didStartProvisionalLoadForFrame): * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h: * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: (PageLoaderClient::didStartProvisionalLoadForFrame): * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp: (WebKit::InjectedBundlePageLoaderClient::didStartProvisionalLoadForFrame): * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad): * WebProcess/WebCoreSupport/WebFrameLoaderClient.h: Source/WebKitLegacy/mac: * WebCoreSupport/WebFrameLoaderClient.h: * WebCoreSupport/WebFrameLoaderClient.mm: (WebFrameLoaderClient::dispatchDidStartProvisionalLoad): Source/WebKitLegacy/win: * WebCoreSupport/WebFrameLoaderClient.cpp: (WebFrameLoaderClient::dispatchDidStartProvisionalLoad): * WebCoreSupport/WebFrameLoaderClient.h: Tools: * TestWebKitAPI/Tests/WebKitCocoa/ParserYieldTokenPlugIn.mm: (-[ParserYieldTokenPlugIn webProcessPlugInBrowserContextController:didCommitLoadForFrame:]): (-[ParserYieldTokenPlugIn webProcessPlugInBrowserContextController:willStartProvisionalLoadForFrame:completionHandler:]): Deleted. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240808 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-31 Alex Christensen <achristensen@webkit.org> Revert r238819 which is unneeded and caused a performance regression. https://bugs.webkit.org/show_bug.cgi?id=192272 <rdar://problem/46664625> * WebProcess/InjectedBundle/API/APIInjectedBundlePageLoaderClient.h: (API::InjectedBundle::PageLoaderClient::didStartProvisionalLoadForFrame): * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h: * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: (PageLoaderClient::didStartProvisionalLoadForFrame): * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp: (WebKit::InjectedBundlePageLoaderClient::didStartProvisionalLoadForFrame): * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad): * WebProcess/WebCoreSupport/WebFrameLoaderClient.h: 2019-02-07 Alan Coon <alancoon@apple.com> Cherry-pick r239697. rdar://problem/47776479 Web Inspector: Remote inspector can crash if attempting to navigate inspector page https://bugs.webkit.org/show_bug.cgi?id=193204 <rdar://problem/45550428> Patch by Joseph Pecoraro <pecoraro@apple.com> on 2019-01-07 Reviewed by Devin Rousso. * UIProcess/mac/RemoteWebInspectorProxyMac.mm: (WebKit::RemoteWebInspectorProxy::platformCreateFrontendPageAndWindow): * UIProcess/mac/WKInspectorViewController.mm: (-[WKInspectorViewController webView:decidePolicyForNavigationAction:decisionHandler:]): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239697 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-07 Joseph Pecoraro <pecoraro@apple.com> Web Inspector: Remote inspector can crash if attempting to navigate inspector page https://bugs.webkit.org/show_bug.cgi?id=193204 <rdar://problem/45550428> Reviewed by Devin Rousso. * UIProcess/mac/RemoteWebInspectorProxyMac.mm: (WebKit::RemoteWebInspectorProxy::platformCreateFrontendPageAndWindow): * UIProcess/mac/WKInspectorViewController.mm: (-[WKInspectorViewController webView:decidePolicyForNavigationAction:decisionHandler:]): 2019-02-06 Alan Coon <alancoon@apple.com> Apply patch. rdar://problem/47822019 2019-02-06 Ryosuke Niwa <rniwa@webkit.org> Validate navigation policy decisions to avoid crashes in continueLoadAfterNavigationPolicy https://bugs.webkit.org/show_bug.cgi?id=194189 Reviewed by Geoffrey Garen. Pass the policy check identifier around functions and store it in PolicyDecisionSender so that we can send it back to WebCore with the navigation policy decision. We also store it in WebFrame in the case the policy decision had to be invalidated before the decision was received (via WebFrame::invalidatePolicyListener). * Scripts/webkit/messages.py: * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync): (WebKit::ProvisionalPageProxy::decidePolicyForResponse): * UIProcess/ProvisionalPageProxy.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::PolicyDecisionSender): Added PolicyCheckIdentifier as a member. (WebKit::WebPageProxy::PolicyDecisionSender::create): (WebKit::WebPageProxy::PolicyDecisionSender::send): (WebKit::WebPageProxy::PolicyDecisionSender::PolicyDecisionSender): (WebKit::WebPageProxy::receivedNavigationPolicyDecision): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared): (WebKit::WebPageProxy::decidePolicyForNavigationAction): (WebKit::WebPageProxy::decidePolicyForNavigationActionSync): (WebKit::WebPageProxy::decidePolicyForNewWindowAction): (WebKit::WebPageProxy::decidePolicyForResponse): (WebKit::WebPageProxy::decidePolicyForResponseShared): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse): (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction): (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): * WebProcess/WebCoreSupport/WebFrameLoaderClient.h: * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::setUpPolicyListener): (WebKit::WebFrame::invalidatePolicyListener): (WebKit::WebFrame::didReceivePolicyDecision): * WebProcess/WebPage/WebFrame.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::didReceivePolicyDecision): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: 2019-02-06 Alan Coon <alancoon@apple.com> Cherry-pick r239845. rdar://problem/47776472 [macOS] Add name of IORegistry key in sandbox. https://bugs.webkit.org/show_bug.cgi?id=193335 <rdar://problem/47184951> Reviewed by Alexey Proskuryakov. The property IOGVAHEVCDecodeCapabilities was added in https://bugs.webkit.org/show_bug.cgi?id=193324. Also, the property IOGVAHEVCEncodeCapabilities needs to be added. * WebProcess/com.apple.WebProcess.sb.in: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239845 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-10 Per Arne Vollan <pvollan@apple.com> [macOS] Add name of IORegistry key in sandbox. https://bugs.webkit.org/show_bug.cgi?id=193335 <rdar://problem/47184951> Reviewed by Alexey Proskuryakov. The property IOGVAHEVCDecodeCapabilities was added in https://bugs.webkit.org/show_bug.cgi?id=193324. Also, the property IOGVAHEVCEncodeCapabilities needs to be added. * WebProcess/com.apple.WebProcess.sb.in: 2019-02-06 Alan Coon <alancoon@apple.com> Cherry-pick r239834. rdar://problem/47776472 [macOS] Add name of IORegistry key in sandbox. https://bugs.webkit.org/show_bug.cgi?id=193324 Reviewed by Brent Fulgham. IOGVAVTCapabilities key has been changed to IOGVAHEVCDecodeCapabilities. * WebProcess/com.apple.WebProcess.sb.in: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239834 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-10 Per Arne Vollan <pvollan@apple.com> [macOS] Add name of IORegistry key in sandbox. https://bugs.webkit.org/show_bug.cgi?id=193324 Reviewed by Brent Fulgham. IOGVAVTCapabilities key has been changed to IOGVAHEVCDecodeCapabilities. * WebProcess/com.apple.WebProcess.sb.in: 2019-02-06 Alan Coon <alancoon@apple.com> Cherry-pick r240995. rdar://problem/47843415 Reproducible crash under WKShareSheet presentWithParameters when cancelling a share https://bugs.webkit.org/show_bug.cgi?id=194301 <rdar://problem/47719379> Reviewed by Beth Dakin. * UIProcess/Cocoa/WKShareSheet.mm: (-[WKShareSheet presentWithParameters:completionHandler:]): NSSharingServicePicker's delegate callbacks can be called synchronously. We release the WKShareSheet (which holds our reference to the NSSharingServicePicker) under sharingServicePicker:didChooseSharingService:. On older versions of macOS, there was nothing keeping the NSSharingServicePicker alive inside showRelativeToRect:ofView:preferredEdge:, thus the whole chain of references would fall and result in sending a message to a released NSSharingServicePicker. To resolve this, keep an extra reference to the WKShareSheet until presentation is complete. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240995 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-05 Tim Horton <timothy_horton@apple.com> Reproducible crash under WKShareSheet presentWithParameters when cancelling a share https://bugs.webkit.org/show_bug.cgi?id=194301 <rdar://problem/47719379> Reviewed by Beth Dakin. * UIProcess/Cocoa/WKShareSheet.mm: (-[WKShareSheet presentWithParameters:completionHandler:]): NSSharingServicePicker's delegate callbacks can be called synchronously. We release the WKShareSheet (which holds our reference to the NSSharingServicePicker) under sharingServicePicker:didChooseSharingService:. On older versions of macOS, there was nothing keeping the NSSharingServicePicker alive inside showRelativeToRect:ofView:preferredEdge:, thus the whole chain of references would fall and result in sending a message to a released NSSharingServicePicker. To resolve this, keep an extra reference to the WKShareSheet until presentation is complete. 2019-02-05 Alan Coon <alancoon@apple.com> Cherry-pick r240928. rdar://problem/47810458 Capture state should be managed consistently when doing process swapping https://bugs.webkit.org/show_bug.cgi?id=194122 <rdar://problem/47609293> Reviewed by Eric Carlson. Source/WebKit: When doing PSON, WebPageProxy::resetState is called. It resets the media state, but does not call the client delegates. Instead of directly updating the media state, call the routine used to update it so that client delegates are called. Covered by new API test and layout test. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _mediaCaptureState]): * UIProcess/API/Cocoa/WKWebViewPrivate.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::resetState): (WebKit::WebPageProxy::isPlayingMediaDidChange): (WebKit::WebPageProxy::updatePlayingMediaDidChange): * UIProcess/WebPageProxy.h: Tools: * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: (-[GetUserMediaUIDelegate _webView:requestUserMediaAuthorizationForDevices:url:mainFrameURL:decisionHandler:]): (-[GetUserMediaUIDelegate _webView:checkUserMediaPermissionForURL:mainFrameURL:frameIdentifier:decisionHandler:]): (-[GetUserMediaUIDelegate _webView:mediaCaptureStateDidChange:]): * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: * WebKitTestRunner/InjectedBundle/TestRunner.cpp: (WTR::TestRunner::isDoingMediaCapture const): * WebKitTestRunner/InjectedBundle/TestRunner.h: * WebKitTestRunner/TestController.cpp: (WTR::TestController::isDoingMediaCapture const): * WebKitTestRunner/TestController.h: * WebKitTestRunner/TestInvocation.cpp: (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle): * WebKitTestRunner/cocoa/TestControllerCocoa.mm: (WTR::TestController::isDoingMediaCapture const): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240928 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-04 Youenn Fablet <youenn@apple.com> Capture state should be managed consistently when doing process swapping https://bugs.webkit.org/show_bug.cgi?id=194122 <rdar://problem/47609293> Reviewed by Eric Carlson. When doing PSON, WebPageProxy::resetState is called. It resets the media state, but does not call the client delegates. Instead of directly updating the media state, call the routine used to update it so that client delegates are called. Covered by new API test and layout test. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _mediaCaptureState]): * UIProcess/API/Cocoa/WKWebViewPrivate.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::resetState): (WebKit::WebPageProxy::isPlayingMediaDidChange): (WebKit::WebPageProxy::updatePlayingMediaDidChange): * UIProcess/WebPageProxy.h: 2019-02-05 Alan Coon <alancoon@apple.com> Apply patch. rdar://problem/47810458 fix-194122 2019-02-04 Youenn Fablet <youenn@apple.com> Capture state should be managed consistently when doing process swapping https://bugs.webkit.org/show_bug.cgi?id=194122 <rdar://problem/47609293> When doing PSON, WebPageProxy::resetState is called. It resets the media state, but does not call the client delegates. Instead of directly updating the media state, call the routine used to update it so that client delegates are called. Covered by new API test and layout test. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _mediaCaptureState]): * UIProcess/API/Cocoa/WKWebViewPrivate.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::resetState): (WebKit::WebPageProxy::isPlayingMediaDidChange): (WebKit::WebPageProxy::updatePlayingMediaDidChange): * UIProcess/WebPageProxy.h: 2019-02-05 Alan Coon <alancoon@apple.com> Cherry-pick r239752. rdar://problem/47776478 [WebAuthN] Support U2F HID Authenticators on macOS https://bugs.webkit.org/show_bug.cgi?id=191535 <rdar://problem/47102027> Reviewed by Brent Fulgham. Source/WebCore: This patch changes U2fCommandConstructor to produce register commands with enforcing test of user presence. Otherwise, authenticators would silently generate credentials. It also renames readFromU2fSignResponse to readU2fSignResponse. Tests: http/wpt/webauthn/public-key-credential-create-failure-u2f-silent.https.html http/wpt/webauthn/public-key-credential-create-failure-u2f.https.html http/wpt/webauthn/public-key-credential-create-success-u2f.https.html http/wpt/webauthn/public-key-credential-get-failure-u2f-silent.https.html http/wpt/webauthn/public-key-credential-get-failure-u2f.https.html http/wpt/webauthn/public-key-credential-get-success-u2f.https.html * Modules/webauthn/fido/U2fCommandConstructor.cpp: (fido::WebCore::constructU2fRegisterCommand): * Modules/webauthn/fido/U2fResponseConverter.cpp: (fido::readU2fSignResponse): (fido::readFromU2fSignResponse): Deleted. * Modules/webauthn/fido/U2fResponseConverter.h: Source/WebKit: This patch implements the support for U2F authenticators, and enables it for hid devices. It follows the CTAP spec to map WebAuthN requests to U2F commands and return the responses: https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-client-to-authenticator-protocol-v2.0-id-20180227.html#u2f-interoperability Most of the parts are done before this patch, this patch focues on: 7.2.2 and 7.3.2. Besides implementing the U2fHidAuthenticator, this patch also adds support in the mocking environment for U2F authenticators. It is done by extending the stages in MockHidConnection from 4 to indefinite as multi-round communications are expected to map WebAuthN requests to U2F requests. * Sources.txt: * UIProcess/API/C/WKWebsiteDataStoreRef.cpp: (WKWebsiteDataStoreSetWebAuthenticationMockConfiguration): * UIProcess/WebAuthentication/Cocoa/HidService.mm: (WebKit::HidService::continueAddDeviceAfterGetInfo): * UIProcess/WebAuthentication/fido/CtapHidDriver.cpp: (WebKit::CtapHidDriver::continueAfterChannelAllocated): * UIProcess/WebAuthentication/fido/CtapHidDriver.h: (WebKit::CtapHidDriver::setProtocol): * UIProcess/WebAuthentication/fido/U2fHidAuthenticator.cpp: Added. (WebKit::U2fHidAuthenticator::U2fHidAuthenticator): (WebKit::U2fHidAuthenticator::makeCredential): (WebKit::U2fHidAuthenticator::checkExcludeList): (WebKit::U2fHidAuthenticator::issueRegisterCommand): (WebKit::U2fHidAuthenticator::getAssertion): (WebKit::U2fHidAuthenticator::issueSignCommand): (WebKit::U2fHidAuthenticator::issueNewCommand): (WebKit::U2fHidAuthenticator::issueCommand): (WebKit::U2fHidAuthenticator::responseReceived): (WebKit::U2fHidAuthenticator::continueRegisterCommandAfterResponseReceived): (WebKit::U2fHidAuthenticator::continueCheckOnlyCommandAfterResponseReceived): (WebKit::U2fHidAuthenticator::continueBogusCommandAfterResponseReceived): (WebKit::U2fHidAuthenticator::continueSignCommandAfterResponseReceived): * UIProcess/WebAuthentication/fido/U2fHidAuthenticator.h: Added. * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp: (WebKit::MockHidConnection::parseRequest): (WebKit::MockHidConnection::feedReports): * UIProcess/WebAuthentication/Mock/MockHidConnection.h: * UIProcess/WebAuthentication/Mock/MockWebAuthenticationConfiguration.h: * WebKit.xcodeproj/project.pbxproj: Tools: This patch: 1) adds support for U2F mocking mechanism; 2) updates tests to reflect U2fCommandConstructor changes. * TestWebKitAPI/Tests/WebCore/CtapResponseTest.cpp: (TestWebKitAPI::TEST): * TestWebKitAPI/Tests/WebCore/FidoTestData.h: * WebKitTestRunner/InjectedBundle/TestRunner.cpp: (WTR::TestRunner::setWebAuthenticationMockConfiguration): LayoutTests: Besiding adding tests for U2F authenticators, it also changes payloadBase64 from a string to a vector of strings. New tests are skipped for iOS. * http/wpt/webauthn/ctap-hid-failure.https.html: * http/wpt/webauthn/ctap-hid-success.https.html: * http/wpt/webauthn/public-key-credential-create-failure-hid-silent.https.html: * http/wpt/webauthn/public-key-credential-create-failure-hid.https.html: * http/wpt/webauthn/public-key-credential-create-failure-u2f-silent.https-expected.txt: Added. * http/wpt/webauthn/public-key-credential-create-failure-u2f-silent.https.html: Added. * http/wpt/webauthn/public-key-credential-create-failure-u2f.https-expected.txt: Added. * http/wpt/webauthn/public-key-credential-create-failure-u2f.https.html: Added. * http/wpt/webauthn/public-key-credential-create-success-hid.https.html: * http/wpt/webauthn/public-key-credential-create-success-u2f.https-expected.txt: Added. * http/wpt/webauthn/public-key-credential-create-success-u2f.https.html: Copied from LayoutTests/http/wpt/webauthn/public-key-credential-create-success-hid.https.html. * http/wpt/webauthn/public-key-credential-get-failure-hid-silent.https.html: * http/wpt/webauthn/public-key-credential-get-failure-hid.https.html: * http/wpt/webauthn/public-key-credential-get-failure-u2f-silent.https-expected.txt: Added. * http/wpt/webauthn/public-key-credential-get-failure-u2f-silent.https.html: Added. * http/wpt/webauthn/public-key-credential-get-failure-u2f.https-expected.txt: Added. * http/wpt/webauthn/public-key-credential-get-failure-u2f.https.html: Added. * http/wpt/webauthn/public-key-credential-get-success-hid.https.html: * http/wpt/webauthn/public-key-credential-get-success-u2f.https-expected.txt: Added. * http/wpt/webauthn/public-key-credential-get-success-u2f.https.html: Added. * http/wpt/webauthn/resources/util.js: * platform/ios-wk2/TestExpectations: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239752 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-08 Jiewen Tan <jiewen_tan@apple.com> [WebAuthN] Support U2F HID Authenticators on macOS https://bugs.webkit.org/show_bug.cgi?id=191535 <rdar://problem/47102027> Reviewed by Brent Fulgham. This patch implements the support for U2F authenticators, and enables it for hid devices. It follows the CTAP spec to map WebAuthN requests to U2F commands and return the responses: https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-client-to-authenticator-protocol-v2.0-id-20180227.html#u2f-interoperability Most of the parts are done before this patch, this patch focues on: 7.2.2 and 7.3.2. Besides implementing the U2fHidAuthenticator, this patch also adds support in the mocking environment for U2F authenticators. It is done by extending the stages in MockHidConnection from 4 to indefinite as multi-round communications are expected to map WebAuthN requests to U2F requests. * Sources.txt: * UIProcess/API/C/WKWebsiteDataStoreRef.cpp: (WKWebsiteDataStoreSetWebAuthenticationMockConfiguration): * UIProcess/WebAuthentication/Cocoa/HidService.mm: (WebKit::HidService::continueAddDeviceAfterGetInfo): * UIProcess/WebAuthentication/fido/CtapHidDriver.cpp: (WebKit::CtapHidDriver::continueAfterChannelAllocated): * UIProcess/WebAuthentication/fido/CtapHidDriver.h: (WebKit::CtapHidDriver::setProtocol): * UIProcess/WebAuthentication/fido/U2fHidAuthenticator.cpp: Added. (WebKit::U2fHidAuthenticator::U2fHidAuthenticator): (WebKit::U2fHidAuthenticator::makeCredential): (WebKit::U2fHidAuthenticator::checkExcludeList): (WebKit::U2fHidAuthenticator::issueRegisterCommand): (WebKit::U2fHidAuthenticator::getAssertion): (WebKit::U2fHidAuthenticator::issueSignCommand): (WebKit::U2fHidAuthenticator::issueNewCommand): (WebKit::U2fHidAuthenticator::issueCommand): (WebKit::U2fHidAuthenticator::responseReceived): (WebKit::U2fHidAuthenticator::continueRegisterCommandAfterResponseReceived): (WebKit::U2fHidAuthenticator::continueCheckOnlyCommandAfterResponseReceived): (WebKit::U2fHidAuthenticator::continueBogusCommandAfterResponseReceived): (WebKit::U2fHidAuthenticator::continueSignCommandAfterResponseReceived): * UIProcess/WebAuthentication/fido/U2fHidAuthenticator.h: Added. * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp: (WebKit::MockHidConnection::parseRequest): (WebKit::MockHidConnection::feedReports): * UIProcess/WebAuthentication/Mock/MockHidConnection.h: * UIProcess/WebAuthentication/Mock/MockWebAuthenticationConfiguration.h: * WebKit.xcodeproj/project.pbxproj: 2019-02-05 Alan Coon <alancoon@apple.com> Cherry-pick r240974. rdar://problem/47830620 Protect globalWebSocketStreamMap with a Lock https://bugs.webkit.org/show_bug.cgi?id=194224 <rdar://problem/47581081> Reviewed by Ryosuke Niwa. * WebProcess/Network/WebSocketStream.cpp: (WebKit::WebSocketStream::streamWithIdentifier): (WebKit::WebSocketStream::networkProcessCrashed): (WebKit::WebSocketStream::WebSocketStream): (WebKit::WebSocketStream::~WebSocketStream): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240974 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-05 Alex Christensen <achristensen@webkit.org> Protect globalWebSocketStreamMap with a Lock https://bugs.webkit.org/show_bug.cgi?id=194224 <rdar://problem/47581081> Reviewed by Ryosuke Niwa. * WebProcess/Network/WebSocketStream.cpp: (WebKit::WebSocketStream::streamWithIdentifier): (WebKit::WebSocketStream::networkProcessCrashed): (WebKit::WebSocketStream::WebSocketStream): (WebKit::WebSocketStream::~WebSocketStream): 2019-02-05 Alan Coon <alancoon@apple.com> Cherry-pick r240925. rdar://problem/47774545 Unreviewed, avoid -Wswitch warnings introduced in r240880 https://bugs.webkit.org/show_bug.cgi?id=193740 <rdar://problem/47527267> * NetworkProcess/soup/NetworkDataTaskSoup.cpp: (WebKit::NetworkDataTaskSoup::dispatchDidReceiveResponse): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240925 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-04 Michael Catanzaro <mcatanzaro@igalia.com> Unreviewed, avoid -Wswitch warnings introduced in r240880 https://bugs.webkit.org/show_bug.cgi?id=193740 <rdar://problem/47527267> * NetworkProcess/soup/NetworkDataTaskSoup.cpp: (WebKit::NetworkDataTaskSoup::dispatchDidReceiveResponse): 2019-02-05 Alan Coon <alancoon@apple.com> Cherry-pick r240880. rdar://problem/47774545 REGRESSION: Flaky ASSERTION FAILED: m_uncommittedState.state == State::Committed on http/tests/cookies/same-site/fetch-after-top-level-navigation-initiated-from-iframe-in-cross-origin-page.html https://bugs.webkit.org/show_bug.cgi?id=193740 <rdar://problem/47527267> Reviewed by Alex Christensen. Source/WebCore: * loader/DocumentLoader.cpp: (WebCore::DocumentLoader::willSendRequest): (WebCore::DocumentLoader::continueAfterContentPolicy): * loader/FrameLoader.cpp: (WebCore::FrameLoader::loadURL): (WebCore::FrameLoader::loadWithDocumentLoader): (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): * loader/FrameLoader.h: * loader/FrameLoaderTypes.h: * loader/PolicyChecker.cpp: (WebCore::PolicyChecker::checkNavigationPolicy): (WebCore::PolicyChecker::checkNewWindowPolicy): * loader/PolicyChecker.h: Source/WebKit: The issue was happening when the page is triggering a cross-site navigation while in the middle of parsing. This would cause us to start a new provisional load in a new process before the previous process sends the DidFinishLoadForFrame() IPC to the UIProcess. Getting such IPC after a provisional load has started would mess up our state machine and trip assertions. This patch restores non-PSON behavior which is that the previous load in the old process now gets stopped so that no DidFinishLoadForFrame() / DidFailLoadForFrame() gets sent. To achieve this behavior, I introduced a new "StopAllLoads" PolicyAction that we now send the old process when the load is continuing in a new process, instead of sending it "Ignore". * NetworkProcess/NetworkDataTaskBlob.cpp: (WebKit::NetworkDataTaskBlob::dispatchDidReceiveResponse): * NetworkProcess/cocoa/NetworkSessionCocoa.mm: (toNSURLSessionResponseDisposition): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::receivedNavigationPolicyDecision): Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240880 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-02-01 Chris Dumez <cdumez@apple.com> REGRESSION: Flaky ASSERTION FAILED: m_uncommittedState.state == State::Committed on http/tests/cookies/same-site/fetch-after-top-level-navigation-initiated-from-iframe-in-cross-origin-page.html https://bugs.webkit.org/show_bug.cgi?id=193740 <rdar://problem/47527267> Reviewed by Alex Christensen. The issue was happening when the page is triggering a cross-site navigation while in the middle of parsing. This would cause us to start a new provisional load in a new process before the previous process sends the DidFinishLoadForFrame() IPC to the UIProcess. Getting such IPC after a provisional load has started would mess up our state machine and trip assertions. This patch restores non-PSON behavior which is that the previous load in the old process now gets stopped so that no DidFinishLoadForFrame() / DidFailLoadForFrame() gets sent. To achieve this behavior, I introduced a new "StopAllLoads" PolicyAction that we now send the old process when the load is continuing in a new process, instead of sending it "Ignore". * NetworkProcess/NetworkDataTaskBlob.cpp: (WebKit::NetworkDataTaskBlob::dispatchDidReceiveResponse): * NetworkProcess/cocoa/NetworkSessionCocoa.mm: (toNSURLSessionResponseDisposition): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::receivedNavigationPolicyDecision): 2019-02-05 Alan Coon <alancoon@apple.com> Cherry-pick r240818. rdar://problem/47774549 Page zoom level is lost after a process swap or a crash https://bugs.webkit.org/show_bug.cgi?id=194105 <rdar://problem/47610781> Reviewed by Alex Christensen. Source/WebKit: Previously, when the client would call setPageAndTextZoomFactors() on the WebPageProxy, we would update the WebPageProxy's corresponding data members and send an IPC to the WebProcess to apply the zoom factors. The issue is that on process crash or process-swap, we never communicate those zoom factors to the new WebProcess. Even if the client were to call setPageAndTextZoomFactors() with the same factors again, it would be a no-op since the WebPageProxy's data members already reflect the expected values. To address the issue, pass both the page zoom and the text zoom factors to the WebProcess via WebPageCreationParameters. This way, there is no need to send an extra IPC and we're sure the WebPageProxy's factors are properly applied to the WebPage on WebContent process side upon creation (whether after a crash or a process swap). * Shared/WebPageCreationParameters.cpp: (WebKit::WebPageCreationParameters::encode const): (WebKit::WebPageCreationParameters::decode): * Shared/WebPageCreationParameters.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::creationParameters): * WebProcess/WebPage/WebPage.cpp: Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: (-[PSONNavigationDelegate webView:didCommitNavigation:]): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240818 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-31 Chris Dumez <cdumez@apple.com> Page zoom level is lost after a process swap or a crash https://bugs.webkit.org/show_bug.cgi?id=194105 <rdar://problem/47610781> Reviewed by Alex Christensen. Previously, when the client would call setPageAndTextZoomFactors() on the WebPageProxy, we would update the WebPageProxy's corresponding data members and send an IPC to the WebProcess to apply the zoom factors. The issue is that on process crash or process-swap, we never communicate those zoom factors to the new WebProcess. Even if the client were to call setPageAndTextZoomFactors() with the same factors again, it would be a no-op since the WebPageProxy's data members already reflect the expected values. To address the issue, pass both the page zoom and the text zoom factors to the WebProcess via WebPageCreationParameters. This way, there is no need to send an extra IPC and we're sure the WebPageProxy's factors are properly applied to the WebPage on WebContent process side upon creation (whether after a crash or a process swap). * Shared/WebPageCreationParameters.cpp: (WebKit::WebPageCreationParameters::encode const): (WebKit::WebPageCreationParameters::decode): * Shared/WebPageCreationParameters.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::creationParameters): * WebProcess/WebPage/WebPage.cpp: 2019-02-05 Alan Coon <alancoon@apple.com> Cherry-pick r240803. rdar://problem/47774506 Regression(PSON) Crash under WebProcessProxy::canTerminateChildProcess() https://bugs.webkit.org/show_bug.cgi?id=194094 <rdar://problem/47580753> Reviewed by Ryosuke Niwa. If a SuspendedPageProxy gets destroyed while a WebPageProxy is waiting for its to finish to suspend, call the "failure to suspend" completion handler asynchronously instead of synchronouly to make sure the completion handler cannot try and use the suspended page proxy while it is being destroyed. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::~SuspendedPageProxy): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240803 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-31 Chris Dumez <cdumez@apple.com> Regression(PSON) Crash under WebProcessProxy::canTerminateChildProcess() https://bugs.webkit.org/show_bug.cgi?id=194094 <rdar://problem/47580753> Reviewed by Ryosuke Niwa. If a SuspendedPageProxy gets destroyed while a WebPageProxy is waiting for its to finish to suspend, call the "failure to suspend" completion handler asynchronously instead of synchronouly to make sure the completion handler cannot try and use the suspended page proxy while it is being destroyed. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::~SuspendedPageProxy): 2019-02-05 Alan Coon <alancoon@apple.com> Cherry-pick r240772. rdar://problem/47774490 iOS: Crash in InteractiveUpdateHandler set by ViewGestureController::beginSwipeGesture https://bugs.webkit.org/show_bug.cgi?id=194083 Reviewed by Tim Horton. We think this crash is a regression from r236966. Prior to r236966, we could only called removeSwipeSnapshot() only when m_provisionalOrSameDocumentLoadCallback was set but now we can call it either when m_snapshotRemovalTracker::start was called, or it had been reset. This can result in m_webPageProxyForBackForwardListForCurrentSwipe getting cleared before InteractiveUpdateHandler is called by UIGestureRecognizer, resulting in the crash. This patch tries to restore the behavior prior to r236966 by only invoking removeSwipeSnapshot() when SnapshotRemovalTracker has a valid removal callback set. Unfortunately no new tests since there is no reproducible test case, and neither API tests nor layout tests seem to have the capability to trigger swipe gestures via UIGestureRecognizer, which is required for this crash to occur. Notably, back-forward swipe tests I enabled in r240765 bypass UIKit and emulates the action instead. * UIProcess/Cocoa/ViewGestureController.cpp: (WebKit::ViewGestureController::didReachMainFrameLoadTerminalState): * UIProcess/Cocoa/ViewGestureController.h: (WebKit::ViewGestureController::SnapshotRemovalTracker::hasRemovalCallback const): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240772 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-31 Ryosuke Niwa <rniwa@webkit.org> iOS: Crash in InteractiveUpdateHandler set by ViewGestureController::beginSwipeGesture https://bugs.webkit.org/show_bug.cgi?id=194083 Reviewed by Tim Horton. We think this crash is a regression from r236966. Prior to r236966, we could only called removeSwipeSnapshot() only when m_provisionalOrSameDocumentLoadCallback was set but now we can call it either when m_snapshotRemovalTracker::start was called, or it had been reset. This can result in m_webPageProxyForBackForwardListForCurrentSwipe getting cleared before InteractiveUpdateHandler is called by UIGestureRecognizer, resulting in the crash. This patch tries to restore the behavior prior to r236966 by only invoking removeSwipeSnapshot() when SnapshotRemovalTracker has a valid removal callback set. Unfortunately no new tests since there is no reproducible test case, and neither API tests nor layout tests seem to have the capability to trigger swipe gestures via UIGestureRecognizer, which is required for this crash to occur. Notably, back-forward swipe tests I enabled in r240765 bypass UIKit and emulates the action instead. * UIProcess/Cocoa/ViewGestureController.cpp: (WebKit::ViewGestureController::didReachMainFrameLoadTerminalState): * UIProcess/Cocoa/ViewGestureController.h: (WebKit::ViewGestureController::SnapshotRemovalTracker::hasRemovalCallback const): 2019-02-05 Alan Coon <alancoon@apple.com> Cherry-pick r240757. rdar://problem/47774493 [iOS] REGRESSION (r238635): Text area fails to re-focus after dismissal of keyboard on support.apple.com https://bugs.webkit.org/show_bug.cgi?id=193987 <rdar://problem/47230785> Reviewed by Tim Horton. It is unnecessary to relinquish first responder status when a user explicitly dismissing the keyboard. Moreover, doing so prevents key commands from being intercepted when a hardware keyboard is subsequently attached. Following r238635 a page becomes focused (accepting of keyboard input) and defocused when the WKContentView becomes first responder and resigns first responder, respectively. When a user explicitly dismisses the keyboard by tapping Done (iPhone) or the hide keyboard button (iPad) then UIKit tells WKContentView to resign its first responder status only to make its superview, WKWebView, first responder. When a person subsequently taps on the page again, the WKContentView requests to become the first responder. However changes to page focus are not guaranteed to be sent to the WebProcess immediately (WebPageProxy::activityStateDidChange() will schedule an update). In particular, they are not guaranteed to be sent before the WebProcess is told about a tap. Therefore, the WebProcess has out-of-date information on focus state of the page. Instead we should detect when WKWebView is being asked to resign as a result of the keyboard dismissal and refuse the request, taking care to end the current editing session, blur the focused element, and dismiss the on-screen keyboard. * Platform/spi/ios/UIKitSPI.h: Expose some SPI. * UIProcess/ios/WKContentViewInteraction.h: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView setupInteraction]): Register to receive notifications whenever a user explicitly dismisses the keyboard. (-[WKContentView resignFirstResponderForWebView]): If we are being asked to resign as a result of a user explicitly dismissing the keyboard then refuse to resign. (-[WKContentView _keyboardDidRequestDismissal:]): Update state, if applicable. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240757 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-30 Daniel Bates <dabates@apple.com> [iOS] REGRESSION (r238635): Text area fails to re-focus after dismissal of keyboard on support.apple.com https://bugs.webkit.org/show_bug.cgi?id=193987 <rdar://problem/47230785> Reviewed by Tim Horton. It is unnecessary to relinquish first responder status when a user explicitly dismissing the keyboard. Moreover, doing so prevents key commands from being intercepted when a hardware keyboard is subsequently attached. Following r238635 a page becomes focused (accepting of keyboard input) and defocused when the WKContentView becomes first responder and resigns first responder, respectively. When a user explicitly dismisses the keyboard by tapping Done (iPhone) or the hide keyboard button (iPad) then UIKit tells WKContentView to resign its first responder status only to make its superview, WKWebView, first responder. When a person subsequently taps on the page again, the WKContentView requests to become the first responder. However changes to page focus are not guaranteed to be sent to the WebProcess immediately (WebPageProxy::activityStateDidChange() will schedule an update). In particular, they are not guaranteed to be sent before the WebProcess is told about a tap. Therefore, the WebProcess has out-of-date information on focus state of the page. Instead we should detect when WKWebView is being asked to resign as a result of the keyboard dismissal and refuse the request, taking care to end the current editing session, blur the focused element, and dismiss the on-screen keyboard. * Platform/spi/ios/UIKitSPI.h: Expose some SPI. * UIProcess/ios/WKContentViewInteraction.h: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView setupInteraction]): Register to receive notifications whenever a user explicitly dismisses the keyboard. (-[WKContentView resignFirstResponderForWebView]): If we are being asked to resign as a result of a user explicitly dismissing the keyboard then refuse to resign. (-[WKContentView _keyboardDidRequestDismissal:]): Update state, if applicable. 2019-02-05 Alan Coon <alancoon@apple.com> Cherry-pick r240725. rdar://problem/47774554 Regression(PSON) Load hang can occur on history navigation https://bugs.webkit.org/show_bug.cgi?id=194030 <rdar://problem/47656939> Reviewed by Antti Koivisto. Source/WebKit: We do not support having more than one WebPage in a WebProcess with the same page ID. As a result, if we decide to reuse an existing process on process-swap, we need to make sure that we either use its suspended page (when possible, meaning that it is for the right HistoryItem / page) or we need make sure we drop the existing suspended page for this process / pagePID combination, so that the WebPage on WebProcess side gets closed before we attempt to do the new load. We were doing this correctly in 2 places in WebProcessPool::processForNavigationInternal() but failed to do so in a third place, when doing back to a HistoryItem which does not have a SuspendedPage but whose process is still alive (presumably because it is kept alive by another suspended page). This patch fixes this third place to remove any suspended page in the process for the current page before reusing the process. An assertion was also added to the call site in WebPageProxy::receivedNavigationPolicyDecision() to make sure we catch this more easily in the future. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::receivedNavigationPolicyDecision): * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::processForNavigationInternal): (WebKit::WebProcessPool::removeAllSuspendedPagesForPage): (WebKit::WebProcessPool::hasSuspendedPageFor const): * UIProcess/WebProcessPool.h: Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240725 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-30 Chris Dumez <cdumez@apple.com> Regression(PSON) Load hang can occur on history navigation https://bugs.webkit.org/show_bug.cgi?id=194030 <rdar://problem/47656939> Reviewed by Antti Koivisto. We do not support having more than one WebPage in a WebProcess with the same page ID. As a result, if we decide to reuse an existing process on process-swap, we need to make sure that we either use its suspended page (when possible, meaning that it is for the right HistoryItem / page) or we need make sure we drop the existing suspended page for this process / pagePID combination, so that the WebPage on WebProcess side gets closed before we attempt to do the new load. We were doing this correctly in 2 places in WebProcessPool::processForNavigationInternal() but failed to do so in a third place, when doing back to a HistoryItem which does not have a SuspendedPage but whose process is still alive (presumably because it is kept alive by another suspended page). This patch fixes this third place to remove any suspended page in the process for the current page before reusing the process. An assertion was also added to the call site in WebPageProxy::receivedNavigationPolicyDecision() to make sure we catch this more easily in the future. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::receivedNavigationPolicyDecision): * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::processForNavigationInternal): (WebKit::WebProcessPool::removeAllSuspendedPagesForPage): (WebKit::WebProcessPool::hasSuspendedPageFor const): * UIProcess/WebProcessPool.h: 2019-02-05 Alan Coon <alancoon@apple.com> Cherry-pick r240717. rdar://problem/47774504 Crash in WebKit::RemoteLayerTreePropertyApplier::updateChildren https://bugs.webkit.org/show_bug.cgi?id=193897 <rdar://problem/47427750> Reviewed by Simon Fraser. There has been some null pointer crashes where we fail to find a remote layer tree node that matches the transaction properties. * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm: (WebKit::RemoteLayerTreePropertyApplier::updateChildren): Null check the nodes. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240717 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-30 Antti Koivisto <antti@apple.com> Crash in WebKit::RemoteLayerTreePropertyApplier::updateChildren https://bugs.webkit.org/show_bug.cgi?id=193897 <rdar://problem/47427750> Reviewed by Simon Fraser. There has been some null pointer crashes where we fail to find a remote layer tree node that matches the transaction properties. * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm: (WebKit::RemoteLayerTreePropertyApplier::updateChildren): Null check the nodes. 2019-02-05 Alan Coon <alancoon@apple.com> Cherry-pick r240702. rdar://problem/47774503 iOS: Nullptr crash in WebPage::getPositionInformation dereferencing an input element for data list https://bugs.webkit.org/show_bug.cgi?id=193996 Reviewed by Wenson Hsieh. Added a missing nullptr check. * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::getPositionInformation): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240702 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-29 Ryosuke Niwa <rniwa@webkit.org> iOS: Nullptr crash in WebPage::getPositionInformation dereferencing an input element for data list https://bugs.webkit.org/show_bug.cgi?id=193996 Reviewed by Wenson Hsieh. Added a missing nullptr check. * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::getPositionInformation): 2019-02-05 Alan Coon <alancoon@apple.com> Cherry-pick r240675. rdar://problem/47776350 Regression (r240046): [PSON] Spurious changes to [WKWebView url] and [WKWebView loading] after [WKWebView loadRequest] https://bugs.webkit.org/show_bug.cgi?id=193967 <rdar://problem/47635348> Reviewed by Alex Christensen. Source/WebKit: Update WebPageProxy::receivedPolicyDecision() to no longer clear the pending URL when we send PolicyAction::Ignore to the old process when the load is continuing in a new process due to PSON. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::receivedNavigationPolicyDecision): (WebKit::WebPageProxy::receivedPolicyDecision): * UIProcess/WebPageProxy.h: Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: (-[PSONLoadingObserver observeValueForKeyPath:ofObject:change:context:]): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240675 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-29 Chris Dumez <cdumez@apple.com> Regression (r240046): [PSON] Spurious changes to [WKWebView url] and [WKWebView loading] after [WKWebView loadRequest] https://bugs.webkit.org/show_bug.cgi?id=193967 <rdar://problem/47635348> Reviewed by Alex Christensen. Update WebPageProxy::receivedPolicyDecision() to no longer clear the pending URL when we send PolicyAction::Ignore to the old process when the load is continuing in a new process due to PSON. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::receivedNavigationPolicyDecision): (WebKit::WebPageProxy::receivedPolicyDecision): * UIProcess/WebPageProxy.h: 2019-02-05 Alan Coon <alancoon@apple.com> Cherry-pick r240663. rdar://problem/47774492 REGRESSION (PSON): Flash on link navigation on Mac https://bugs.webkit.org/show_bug.cgi?id=193961 <rdar://problem/47482507> Reviewed by Chris Dumez. The target page sends EnterAcceleratedCompositingMode message too early, before we have a valid layer tree. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attach): Deleted. Not needed anymore. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::reinitializeWebPage): (WebKit::WebPage::didCompletePageTransition): (WebKit::m_shouldAttachDrawingAreaOnPageTransition): Deleted. Move message sending logic fully to TiledCoreAnimationDrawingArea. Unfreezing the layer tree is sufficient to trigger the message. * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): There is no need to treat process swap case differently. (WebKit::TiledCoreAnimationDrawingArea::sendEnterAcceleratedCompositingModeIfNeeded): Send this after the first successful layer flush with the root layer set. (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::attach): Deleted. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240663 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-29 Antti Koivisto <antti@apple.com> REGRESSION (PSON): Flash on link navigation on Mac https://bugs.webkit.org/show_bug.cgi?id=193961 <rdar://problem/47482507> Reviewed by Chris Dumez. The target page sends EnterAcceleratedCompositingMode message too early, before we have a valid layer tree. * WebProcess/WebPage/DrawingArea.h: (WebKit::DrawingArea::attach): Deleted. Not needed anymore. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::reinitializeWebPage): (WebKit::WebPage::didCompletePageTransition): (WebKit::m_shouldAttachDrawingAreaOnPageTransition): Deleted. Move message sending logic fully to TiledCoreAnimationDrawingArea. Unfreezing the layer tree is sufficient to trigger the message. * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): There is no need to treat process swap case differently. (WebKit::TiledCoreAnimationDrawingArea::sendEnterAcceleratedCompositingModeIfNeeded): Send this after the first successful layer flush with the root layer set. (WebKit::TiledCoreAnimationDrawingArea::flushLayers): (WebKit::TiledCoreAnimationDrawingArea::attach): Deleted. 2019-02-05 Alan Coon <alancoon@apple.com> Cherry-pick r240660. rdar://problem/47774552 REGRESSION (PSON): Twitter link gets stuck at t.co after navigating back in tab https://bugs.webkit.org/show_bug.cgi?id=193932 <rdar://problem/47598947> Reviewed by Brady Eidson. Source/WebKit: When doing a client side redirect from origin A to origin B, we would swap process and create a SuspendedPageProxy and save it on the source BackForwardListItem. The issue is that the BackForwardList is locked for such redirect so we end up updating the current BackForwardListItem with origin B's URL while origin A's suspended page remained on the item. When going to another URL in the same origin A, we would not create a suspended page since no process-swap would occur. When pressing the back button, we would go back to the previous BackForwardListItem and use its SuspendedPageProxy, which is for the wrong URL (The pre-client redirect one). To address the issue, we no longer create a SuspendedPageProxy for cross-site client side redirects. There will be no way no go back to this suspended page anyway since the back/forward list item will be updated with the redirection URL. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::suspendCurrentPageIfPossible): Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240660 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-29 Chris Dumez <cdumez@apple.com> REGRESSION (PSON): Twitter link gets stuck at t.co after navigating back in tab https://bugs.webkit.org/show_bug.cgi?id=193932 <rdar://problem/47598947> Reviewed by Brady Eidson. When doing a client side redirect from origin A to origin B, we would swap process and create a SuspendedPageProxy and save it on the source BackForwardListItem. The issue is that the BackForwardList is locked for such redirect so we end up updating the current BackForwardListItem with origin B's URL while origin A's suspended page remained on the item. When going to another URL in the same origin A, we would not create a suspended page since no process-swap would occur. When pressing the back button, we would go back to the previous BackForwardListItem and use its SuspendedPageProxy, which is for the wrong URL (The pre-client redirect one). To address the issue, we no longer create a SuspendedPageProxy for cross-site client side redirects. There will be no way no go back to this suspended page anyway since the back/forward list item will be updated with the redirection URL. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::suspendCurrentPageIfPossible): 2019-02-05 Alan Coon <alancoon@apple.com> Cherry-pick r239895. rdar://problem/47776475 Allow WebContent process access to some drawing-related IOKit properties https://bugs.webkit.org/show_bug.cgi?id=193086 <rdar://problem/46568088> Reviewed by Eric Carlson. Add one missing IOKit property, and revise the regexp used for another. * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239895 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-11 Brent Fulgham <bfulgham@apple.com> Allow WebContent process access to some drawing-related IOKit properties https://bugs.webkit.org/show_bug.cgi?id=193086 <rdar://problem/46568088> Reviewed by Eric Carlson. Add one missing IOKit property, and revise the regexp used for another. * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: 2019-02-05 Alan Coon <alancoon@apple.com> Cherry-pick r239881. rdar://problem/47776480 [iOS] Precision drop state thrashes when dragging near the top edge of an editable element https://bugs.webkit.org/show_bug.cgi?id=193364 <rdar://problem/47214117> Reviewed by Tim Horton. Source/WebCore: Add a new helper method on DragCaretController to compute the bounds of the editable element around the drop caret position. This is either the enclosing form control (in the case of text fields and text areas), or the highest editable root. See WebKit ChangeLog for more details. Test: DragAndDropTests.AvoidPreciseDropNearTopOfTextArea * editing/FrameSelection.cpp: (WebCore::DragCaretController::editableElementRectInRootViewCoordinates const): * editing/FrameSelection.h: Source/WebKit: On iOS, marking a UIDropProposal as precise offsets the hit-testing location of the drop by a small distance either upwards or downwards from the actual location of the user's finger. When dragging over an editable element, WebKit currently marks the drop proposal as precise; however, when dragging over the top edge of an editable element, what happens is that the hit-testing location is offset to a location outside of the editable element, which causes us to turn off precision drop mode; subsequently, turning off precision drop mode removes the offset, which causes us to hit-test within the editable element once again and re-enable precision mode, and the cycle continues. In order to mitigate this, bail out of precision drop mode when dragging near the top or bottom edges of the highest editable root that contains the current drop caret position (or, if the drop caret is inside of a text form control, use the form control as the editable element instead). * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didPerformDragControllerAction): * UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::currentDragCaretEditableElementRect const): * UIProcess/WebPageProxy.messages.in: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView dropInteraction:sessionDidUpdate:]): Avoid precise mode when we're less than 25pt away from the top and bottom edge of the editable element rect. Since the drag location offset amount is a fixed offset in window coordinates, we first convert this minimum distance to the content view's coordinate space by dividing by the content scale factor. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::performDragControllerAction): Tools: Add a test to verify that dragging near the top of a textarea element does not flag the drop proposal as precise, whereas dragging near the middle of the textarea does. * TestWebKitAPI/Tests/ios/DragAndDropTestsIOS.mm: (TestWebKitAPI::TEST): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239881 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-11 Wenson Hsieh <wenson_hsieh@apple.com> [iOS] Precision drop state thrashes when dragging near the top edge of an editable element https://bugs.webkit.org/show_bug.cgi?id=193364 <rdar://problem/47214117> Reviewed by Tim Horton. On iOS, marking a UIDropProposal as precise offsets the hit-testing location of the drop by a small distance either upwards or downwards from the actual location of the user's finger. When dragging over an editable element, WebKit currently marks the drop proposal as precise; however, when dragging over the top edge of an editable element, what happens is that the hit-testing location is offset to a location outside of the editable element, which causes us to turn off precision drop mode; subsequently, turning off precision drop mode removes the offset, which causes us to hit-test within the editable element once again and re-enable precision mode, and the cycle continues. In order to mitigate this, bail out of precision drop mode when dragging near the top or bottom edges of the highest editable root that contains the current drop caret position (or, if the drop caret is inside of a text form control, use the form control as the editable element instead). * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didPerformDragControllerAction): * UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::currentDragCaretEditableElementRect const): * UIProcess/WebPageProxy.messages.in: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView dropInteraction:sessionDidUpdate:]): Avoid precise mode when we're less than 25pt away from the top and bottom edge of the editable element rect. Since the drag location offset amount is a fixed offset in window coordinates, we first convert this minimum distance to the content view's coordinate space by dividing by the content scale factor. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::performDragControllerAction): 2019-02-05 Alan Coon <alancoon@apple.com> Apply patch. rdar://problem/47774509 fix-194106 2019-01-31 Youenn Fablet <youenn@apple.com> Add an API test to cover UIClient checkUserMediaPermissionForOrigin being nullptr https://bugs.webkit.org/show_bug.cgi?id=194106 <rdar://problem/47676333> Make sure handler is not called after being moved. * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo): 2019-01-30 Babak Shafiei <bshafiei@apple.com> Cherry-pick r240633. rdar://problem/47682687 [watchOS] Enable Parental Controls content filtering https://bugs.webkit.org/show_bug.cgi?id=193939 <rdar://problem/46641912> Reviewed by Ryosuke Niwa. Source/JavaScriptCore: * Configurations/FeatureDefines.xcconfig: Source/WebCore: * Configurations/FeatureDefines.xcconfig: Source/WebCore/PAL: * Configurations/FeatureDefines.xcconfig: Source/WebKit: * Configurations/FeatureDefines.xcconfig: Source/WebKitLegacy/mac: * Configurations/FeatureDefines.xcconfig: Source/WTF: * wtf/Platform.h: Tools: * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240633 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-28 Andy Estes <aestes@apple.com> [watchOS] Enable Parental Controls content filtering https://bugs.webkit.org/show_bug.cgi?id=193939 <rdar://problem/46641912> Reviewed by Ryosuke Niwa. * Configurations/FeatureDefines.xcconfig: 2019-01-30 Babak Shafiei <bshafiei@apple.com> Cherry-pick r240729. rdar://problem/47685553 Ensure image picker sourceType is set before cameraDevice https://bugs.webkit.org/show_bug.cgi?id=193998 Reviewed by Beth Dakin. * UIProcess/ios/forms/WKFileUploadPanel.mm: (-[WKFileUploadPanel _showPhotoPickerWithSourceType:]): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240729 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-29 Conrad Shultz <conrad_shultz@apple.com> Ensure image picker sourceType is set before cameraDevice https://bugs.webkit.org/show_bug.cgi?id=193998 Reviewed by Beth Dakin. * UIProcess/ios/forms/WKFileUploadPanel.mm: (-[WKFileUploadPanel _showPhotoPickerWithSourceType:]): 2019-01-30 Babak Shafiei <bshafiei@apple.com> Cherry-pick r240578. rdar://problem/47685372 WebUserContentController::removeUserScriptMessageHandlerInternal may deref and delete itself https://bugs.webkit.org/show_bug.cgi?id=193901 <rdar://problem/47338669> Reviewed by David Kilzer. Don't know how to repro. * WebProcess/UserContent/WebUserContentController.cpp: (WebKit::WebUserContentController::removeUserScriptMessageHandlerInternal): Calling userMessageHandlers.removeFirstMatching() may remove the last ref to this (because WebUserMessageHandlerDescriptorProxy refs WebUserContentController). Fix by protecting this over the function. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240578 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-28 Antti Koivisto <antti@apple.com> WebUserContentController::removeUserScriptMessageHandlerInternal may deref and delete itself https://bugs.webkit.org/show_bug.cgi?id=193901 <rdar://problem/47338669> Reviewed by David Kilzer. Don't know how to repro. * WebProcess/UserContent/WebUserContentController.cpp: (WebKit::WebUserContentController::removeUserScriptMessageHandlerInternal): Calling userMessageHandlers.removeFirstMatching() may remove the last ref to this (because WebUserMessageHandlerDescriptorProxy refs WebUserContentController). Fix by protecting this over the function. 2019-01-30 Alan Coon <alancoon@apple.com> Cherry-pick r240733. rdar://problem/47683434 [macOS] Sandbox fails to compile on 10.12 https://bugs.webkit.org/show_bug.cgi?id=194035 <rdar://problem/47651260> Reviewed by Brent Fulgham. This was caused by the commit <https://trac.webkit.org/changeset/239994>, which is only valid for 10.14 and later. * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in: * WebProcess/com.apple.WebProcess.sb.in: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240733 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-30 Per Arne Vollan <pvollan@apple.com> [macOS] Sandbox fails to compile on 10.12 https://bugs.webkit.org/show_bug.cgi?id=194035 <rdar://problem/47651260> Reviewed by Brent Fulgham. This was caused by the commit <https://trac.webkit.org/changeset/239994>, which is only valid for 10.14 and later. * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in: * WebProcess/com.apple.WebProcess.sb.in: 2019-01-29 Alan Coon <alancoon@apple.com> Cherry-pick r240659. rdar://problem/47639406 Regression(r240046) VoiceOver is no longer working after a process swap https://bugs.webkit.org/show_bug.cgi?id=193953 <rdar://problem/47612398> Reviewed by Alex Christensen. ProvisionalPageProxy used to forward the RegisterWebProcessAccessibilityToken IPC from the provisional WebProcess to the WebPageProxy right away. This in turn would notify the PageClient whose logic would rely on WebPageProxy::process(), which returns the committed process instead of the provisional one. To address the issue, the ProvisionalPageProxy now stores the token sent by the provisional WebProcess and we only call registerWebProcessAccessibilityToken() on the WebPageProxy *after* we've swapped to the provisional process. * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::registerWebProcessAccessibilityToken): (WebKit::ProvisionalPageProxy::didReceiveMessage): * UIProcess/ProvisionalPageProxy.h: (WebKit::ProvisionalPageProxy::takeAccessibilityToken): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::commitProvisionalPage): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240659 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-29 Chris Dumez <cdumez@apple.com> Regression(r240046) VoiceOver is no longer working after a process swap https://bugs.webkit.org/show_bug.cgi?id=193953 <rdar://problem/47612398> Reviewed by Alex Christensen. ProvisionalPageProxy used to forward the RegisterWebProcessAccessibilityToken IPC from the provisional WebProcess to the WebPageProxy right away. This in turn would notify the PageClient whose logic would rely on WebPageProxy::process(), which returns the committed process instead of the provisional one. To address the issue, the ProvisionalPageProxy now stores the token sent by the provisional WebProcess and we only call registerWebProcessAccessibilityToken() on the WebPageProxy *after* we've swapped to the provisional process. * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::registerWebProcessAccessibilityToken): (WebKit::ProvisionalPageProxy::didReceiveMessage): * UIProcess/ProvisionalPageProxy.h: (WebKit::ProvisionalPageProxy::takeAccessibilityToken): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::commitProvisionalPage): 2019-01-28 Alan Coon <alancoon@apple.com> Cherry-pick r240599. rdar://problem/47609799 Regression(PSON) Crash under WebPageProxy::didStartProgress() https://bugs.webkit.org/show_bug.cgi?id=193915 <rdar://problem/47560907> Reviewed by Alex Christensen. Source/WebKit: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::close): Make sure we destroy the ProvisionalPageProxy if the page gets closed as we do not want to keep receiving IPC after this or even worse, commit the provisional page. (WebKit::WebPageProxy::didStartProgress): Add an assertion in didStartProgress() to make sure we do not receive this IPC after the page has been closed. Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240599 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-28 Chris Dumez <cdumez@apple.com> Regression(PSON) Crash under WebPageProxy::didStartProgress() https://bugs.webkit.org/show_bug.cgi?id=193915 <rdar://problem/47560907> Reviewed by Alex Christensen. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::close): Make sure we destroy the ProvisionalPageProxy if the page gets closed as we do not want to keep receiving IPC after this or even worse, commit the provisional page. (WebKit::WebPageProxy::didStartProgress): Add an assertion in didStartProgress() to make sure we do not receive this IPC after the page has been closed. 2019-01-28 Babak Shafiei <bshafiei@apple.com> Cherry-pick r240516. rdar://problem/47586889 Add SPI to inform an application that "Go Back" has been clicked from a safe browsing warning https://bugs.webkit.org/show_bug.cgi?id=193802 <rdar://problem/46010580> Reviewed by Andy Estes. Source/WebKit: * UIProcess/API/APIUIClient.h: (API::UIClient::didClickGoBackFromSafeBrowsingWarning): * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: * UIProcess/Cocoa/UIDelegate.h: * UIProcess/Cocoa/UIDelegate.mm: (WebKit::UIDelegate::setDelegate): (WebKit::UIDelegate::UIClient::didClickGoBackFromSafeBrowsingWarning): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::decidePolicyForNavigationAction): Tools: * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm: (-[SafeBrowsingNavigationDelegate _webViewDidClickGoBackFromSafeBrowsingWarning:]): (TEST): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240516 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-25 Alex Christensen <achristensen@webkit.org> Add SPI to inform an application that "Go Back" has been clicked from a safe browsing warning https://bugs.webkit.org/show_bug.cgi?id=193802 <rdar://problem/46010580> Reviewed by Andy Estes. * UIProcess/API/APIUIClient.h: (API::UIClient::didClickGoBackFromSafeBrowsingWarning): * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: * UIProcess/Cocoa/UIDelegate.h: * UIProcess/Cocoa/UIDelegate.mm: (WebKit::UIDelegate::setDelegate): (WebKit::UIDelegate::UIClient::didClickGoBackFromSafeBrowsingWarning): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::decidePolicyForNavigationAction): 2019-01-28 Babak Shafiei <bshafiei@apple.com> Cherry-pick r240533. rdar://problem/47586823 REGRESSION: Some USDz from 3rd party websites don't go directly to AR QL https://bugs.webkit.org/show_bug.cgi?id=193831 <rdar://problem/47399263> Reviewed by Chris Dumez. Source/WebKit: A System Preview (<a rel="ar">) displays in a modal and doesn't trigger a navigation. If the link was cross origin, it was causing a process swap, which meant that the response defaulted back to a navigation. The fix is to not cause a PSON when the navigation is a system preview. * UIProcess/API/APINavigation.h: (API::Navigation::shouldForceDownload const): This is now just tracking the "download" attribute, and not including System Preview. (API::Navigation::isSystemPreview const): New method to check for a navigation triggered as a System Preview. * UIProcess/WebPageProxy.cpp: Move the code from receivedPolicyDecision to receivedNavigationPolicyDecision, so that downloads and System Previews are detected before we decide to change process. (WebKit::WebPageProxy::receivedNavigationPolicyDecision): (WebKit::WebPageProxy::receivedPolicyDecision): Tools: Two new tests that exercise cross-origin and same-origin System Previews. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240533 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-25 Dean Jackson <dino@apple.com> REGRESSION: Some USDz from 3rd party websites don't go directly to AR QL https://bugs.webkit.org/show_bug.cgi?id=193831 <rdar://problem/47399263> Reviewed by Chris Dumez. A System Preview (<a rel="ar">) displays in a modal and doesn't trigger a navigation. If the link was cross origin, it was causing a process swap, which meant that the response defaulted back to a navigation. The fix is to not cause a PSON when the navigation is a system preview. * UIProcess/API/APINavigation.h: (API::Navigation::shouldForceDownload const): This is now just tracking the "download" attribute, and not including System Preview. (API::Navigation::isSystemPreview const): New method to check for a navigation triggered as a System Preview. * UIProcess/WebPageProxy.cpp: Move the code from receivedPolicyDecision to receivedNavigationPolicyDecision, so that downloads and System Previews are detected before we decide to change process. (WebKit::WebPageProxy::receivedNavigationPolicyDecision): (WebKit::WebPageProxy::receivedPolicyDecision): 2019-01-28 Babak Shafiei <bshafiei@apple.com> Cherry-pick r240484. rdar://problem/47591281 Drop WebKit::WebKitPolicyAction type as it is no longer needed https://bugs.webkit.org/show_bug.cgi?id=193827 Reviewed by Antti Koivisto. Drop WebKit::WebKitPolicyAction type as it is no longer needed. It is now identical to WebCore::PolicyAction. * Shared/WebPolicyAction.h: Removed. * UIProcess/WebFramePolicyListenerProxy.cpp: (WebKit::WebFramePolicyListenerProxy::didReceiveSafeBrowsingResults): (WebKit::WebFramePolicyListenerProxy::use): (WebKit::WebFramePolicyListenerProxy::download): (WebKit::WebFramePolicyListenerProxy::ignore): * UIProcess/WebFramePolicyListenerProxy.h: * UIProcess/WebFrameProxy.cpp: (WebKit::WebFrameProxy::setUpPolicyListenerProxy): * UIProcess/WebFrameProxy.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::receivedNavigationPolicyDecision): (WebKit::WebPageProxy::receivedPolicyDecision): (WebKit::WebPageProxy::decidePolicyForNavigationAction): (WebKit::WebPageProxy::decidePolicyForNavigationActionSync): (WebKit::WebPageProxy::decidePolicyForNewWindowAction): (WebKit::WebPageProxy::decidePolicyForResponseShared): * UIProcess/WebPageProxy.h: * WebKit.xcodeproj/project.pbxproj: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse): (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::didReceivePolicyDecision): (WebKit::toPolicyAction): Deleted. * WebProcess/WebPage/WebFrame.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::didReceivePolicyDecision): * WebProcess/WebPage/WebPage.h: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240484 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-25 Chris Dumez <cdumez@apple.com> Drop WebKit::WebKitPolicyAction type as it is no longer needed https://bugs.webkit.org/show_bug.cgi?id=193827 Reviewed by Antti Koivisto. Drop WebKit::WebKitPolicyAction type as it is no longer needed. It is now identical to WebCore::PolicyAction. * Shared/WebPolicyAction.h: Removed. * UIProcess/WebFramePolicyListenerProxy.cpp: (WebKit::WebFramePolicyListenerProxy::didReceiveSafeBrowsingResults): (WebKit::WebFramePolicyListenerProxy::use): (WebKit::WebFramePolicyListenerProxy::download): (WebKit::WebFramePolicyListenerProxy::ignore): * UIProcess/WebFramePolicyListenerProxy.h: * UIProcess/WebFrameProxy.cpp: (WebKit::WebFrameProxy::setUpPolicyListenerProxy): * UIProcess/WebFrameProxy.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::receivedNavigationPolicyDecision): (WebKit::WebPageProxy::receivedPolicyDecision): (WebKit::WebPageProxy::decidePolicyForNavigationAction): (WebKit::WebPageProxy::decidePolicyForNavigationActionSync): (WebKit::WebPageProxy::decidePolicyForNewWindowAction): (WebKit::WebPageProxy::decidePolicyForResponseShared): * UIProcess/WebPageProxy.h: * WebKit.xcodeproj/project.pbxproj: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse): (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::didReceivePolicyDecision): (WebKit::toPolicyAction): Deleted. * WebProcess/WebPage/WebFrame.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::didReceivePolicyDecision): * WebProcess/WebPage/WebPage.h: 2019-01-28 Babak Shafiei <bshafiei@apple.com> Cherry-pick r240542. rdar://problem/47586850 REGRESSION (r238818): Snapshot is removed too late after swiping back on Twitter https://bugs.webkit.org/show_bug.cgi?id=193860 <rdar://problem/47535022> Reviewed by Antti Koivisto. * UIProcess/Cocoa/ViewGestureController.cpp: (WebKit::ViewGestureController::didStartProvisionalOrSameDocumentLoadForMainFrame): (WebKit::ViewGestureController::didStartProvisionalLoadForMainFrame): (WebKit::ViewGestureController::didSameDocumentNavigationForMainFrame): * UIProcess/Cocoa/ViewGestureController.h: Treat provisional load and same document load the same: they already both unpause the snapshot removal tracker, request render tree size notifications, but same-document navigation was missing the call to dispatchAfterEnsuringDrawing and thus would get stuck waiting for RepaintAfterNavigation. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240542 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-25 Tim Horton <timothy_horton@apple.com> REGRESSION (r238818): Snapshot is removed too late after swiping back on Twitter https://bugs.webkit.org/show_bug.cgi?id=193860 <rdar://problem/47535022> Reviewed by Antti Koivisto. * UIProcess/Cocoa/ViewGestureController.cpp: (WebKit::ViewGestureController::didStartProvisionalOrSameDocumentLoadForMainFrame): (WebKit::ViewGestureController::didStartProvisionalLoadForMainFrame): (WebKit::ViewGestureController::didSameDocumentNavigationForMainFrame): * UIProcess/Cocoa/ViewGestureController.h: Treat provisional load and same document load the same: they already both unpause the snapshot removal tracker, request render tree size notifications, but same-document navigation was missing the call to dispatchAfterEnsuringDrawing and thus would get stuck waiting for RepaintAfterNavigation. 2019-01-28 Babak Shafiei <bshafiei@apple.com> Cherry-pick r240497. rdar://problem/47586863 iOS: inputmode="none" disables hardware keyboard's globe key https://bugs.webkit.org/show_bug.cgi?id=193811 <rdar://problem/47406553> Reviewed by Wenson Hsieh. Source/WebKit: Removed the support for inputmode="none" for now since we need a new SPI from UIKit to properly implement this feature some time in the future. * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView _zoomToRevealFocusedElement]): (-[WKContentView inputView]): (-[WKContentView requiresAccessoryView]): (-[WKContentView textInputTraits]): LayoutTests: Updated and renamed the test expecting the keyboard to update upon inputmode content attribute changed to use inputmode="decimal" instead of inputmode="none", and updated another test to expect inputmode="none" has no effect instead of hiding the keyboard. * fast/forms/ios/inputmode-change-update-keyboard-expected.txt: Renamed from inputmode-none-removed-expected.txt. * fast/forms/ios/inputmode-change-update-keyboard.html: Renamed from inputmode-none-removed.html. * fast/forms/ios/inputmode-none-expected.txt: * fast/forms/ios/inputmode-none.html: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240497 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-25 Ryosuke Niwa <rniwa@webkit.org> iOS: inputmode="none" disables hardware keyboard's globe key https://bugs.webkit.org/show_bug.cgi?id=193811 <rdar://problem/47406553> Reviewed by Wenson Hsieh. Removed the support for inputmode="none" for now since we need a new SPI from UIKit to properly implement this feature some time in the future. * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView _zoomToRevealFocusedElement]): (-[WKContentView inputView]): (-[WKContentView requiresAccessoryView]): (-[WKContentView textInputTraits]): 2019-01-28 Babak Shafiei <bshafiei@apple.com> Cherry-pick r240493. rdar://problem/47586905 REGRESSION (PSON): After swipe back, first few attempts to swipe forward not recognized as swipe gestures https://bugs.webkit.org/show_bug.cgi?id=193818 <rdar://problem/47456584> Reviewed by Tim Horton. We don't hit the RenderTreeSizeThreshold milestone to remove the snapshot and allow interaction because we request it from a wrong process (the one we are leaving behind). * UIProcess/Cocoa/ViewGestureController.cpp: (WebKit::ViewGestureController::didStartProvisionalLoadForMainFrame): Request the RenderTreeSizeThreshold notification when the load has started and we know the process to use. (WebKit::ViewGestureController::SnapshotRemovalTracker::hasOutstandingEvent): * UIProcess/Cocoa/ViewGestureController.h: (WebKit::ViewGestureController::SnapshotRemovalTracker::renderTreeSizeThreshold const): (WebKit::ViewGestureController::SnapshotRemovalTracker::setRenderTreeSizeThreshold): * UIProcess/mac/ViewGestureControllerMac.mm: (WebKit::ViewGestureController::endSwipeGesture): Don't request immediately, save the threshold to SnapshotRemovalTracker. (WebKit::ViewGestureController::requestRenderTreeSizeNotificationIfNeeded): Do the request to the right process. * WebProcess/WebPage/ViewGestureGeometryCollector.cpp: (WebKit::ViewGestureGeometryCollector::setRenderTreeSizeNotificationThreshold): Ensure we send the notification even if we reached the threshold before it was requested. (WebKit::ViewGestureGeometryCollector::sendDidHitRenderTreeSizeThresholdIfNeeded): (WebKit::ViewGestureGeometryCollector::mainFrameDidLayout): * WebProcess/WebPage/ViewGestureGeometryCollector.h: (WebKit::ViewGestureGeometryCollector::setRenderTreeSizeNotificationThreshold): Deleted. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240493 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-25 Antti Koivisto <antti@apple.com> REGRESSION (PSON): After swipe back, first few attempts to swipe forward not recognized as swipe gestures https://bugs.webkit.org/show_bug.cgi?id=193818 <rdar://problem/47456584> Reviewed by Tim Horton. We don't hit the RenderTreeSizeThreshold milestone to remove the snapshot and allow interaction because we request it from a wrong process (the one we are leaving behind). * UIProcess/Cocoa/ViewGestureController.cpp: (WebKit::ViewGestureController::didStartProvisionalLoadForMainFrame): Request the RenderTreeSizeThreshold notification when the load has started and we know the process to use. (WebKit::ViewGestureController::SnapshotRemovalTracker::hasOutstandingEvent): * UIProcess/Cocoa/ViewGestureController.h: (WebKit::ViewGestureController::SnapshotRemovalTracker::renderTreeSizeThreshold const): (WebKit::ViewGestureController::SnapshotRemovalTracker::setRenderTreeSizeThreshold): * UIProcess/mac/ViewGestureControllerMac.mm: (WebKit::ViewGestureController::endSwipeGesture): Don't request immediately, save the threshold to SnapshotRemovalTracker. (WebKit::ViewGestureController::requestRenderTreeSizeNotificationIfNeeded): Do the request to the right process. * WebProcess/WebPage/ViewGestureGeometryCollector.cpp: (WebKit::ViewGestureGeometryCollector::setRenderTreeSizeNotificationThreshold): Ensure we send the notification even if we reached the threshold before it was requested. (WebKit::ViewGestureGeometryCollector::sendDidHitRenderTreeSizeThresholdIfNeeded): (WebKit::ViewGestureGeometryCollector::mainFrameDidLayout): * WebProcess/WebPage/ViewGestureGeometryCollector.h: (WebKit::ViewGestureGeometryCollector::setRenderTreeSizeNotificationThreshold): Deleted. 2019-01-28 Babak Shafiei <bshafiei@apple.com> Cherry-pick r240490. rdar://problem/47586864 WKWebView.goBack should reload if there is a safe browsing warning https://bugs.webkit.org/show_bug.cgi?id=193805 <rdar://problem/46908216> Reviewed by Geoff Garen. Source/WebKit: If a WKWebView is showing a safe browsing warning and the user clicks a back button in the app which calls WKWebView.goBack, the WKWebView is in a state where it has not navigated yet, so actually going back will appear to the user to go back twice. We can't just do nothing because the app is in a state where it is expecting a navigation to happen. Reloading achieves what the user expects and makes the app work like the app expects. * UIProcess/API/C/WKPage.cpp: (WKPageGoBack): * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView goBack]): * UIProcess/PageClient.h: (WebKit::PageClient::hasSafeBrowsingWarning const): * UIProcess/mac/PageClientImplMac.h: * UIProcess/mac/PageClientImplMac.mm: (WebKit::PageClientImpl::hasSafeBrowsingWarning const): Tools: * TestWebKitAPI/Tests/WebKitCocoa/SafeBrowsing.mm: (+[Simple3LookupContext sharedLookupContext]): (-[Simple3LookupContext lookUpURL:completionHandler:]): (-[WKWebViewGoBackNavigationDelegate webView:didFinishNavigation:]): (TEST): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240490 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-25 Alex Christensen <achristensen@webkit.org> WKWebView.goBack should reload if there is a safe browsing warning https://bugs.webkit.org/show_bug.cgi?id=193805 <rdar://problem/46908216> Reviewed by Geoff Garen. If a WKWebView is showing a safe browsing warning and the user clicks a back button in the app which calls WKWebView.goBack, the WKWebView is in a state where it has not navigated yet, so actually going back will appear to the user to go back twice. We can't just do nothing because the app is in a state where it is expecting a navigation to happen. Reloading achieves what the user expects and makes the app work like the app expects. * UIProcess/API/C/WKPage.cpp: (WKPageGoBack): * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView goBack]): * UIProcess/PageClient.h: (WebKit::PageClient::hasSafeBrowsingWarning const): * UIProcess/mac/PageClientImplMac.h: * UIProcess/mac/PageClientImplMac.mm: (WebKit::PageClientImpl::hasSafeBrowsingWarning const): 2019-01-28 Babak Shafiei <bshafiei@apple.com> Cherry-pick r240485. rdar://problem/47586895 Regression(PSON) cross-site provisional page is not canceled if a new same-site one is started https://bugs.webkit.org/show_bug.cgi?id=193788 <rdar://problem/47531231> Reviewed by Alex Christensen. Source/WebKit: When the page starts a new provisional load, make sure we cancel any pending one in the provisional process, as it would have happened in the first provisional load happened in the same process. Without this, we could have 2 parallel loads happening, one in the committed process and another in the provisional one, leading to assertion failures in debug. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared): Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: (-[PSONNavigationDelegate webView:didStartProvisionalNavigation:]): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240485 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-25 Chris Dumez <cdumez@apple.com> Regression(PSON) cross-site provisional page is not canceled if a new same-site one is started https://bugs.webkit.org/show_bug.cgi?id=193788 <rdar://problem/47531231> Reviewed by Alex Christensen. When the page starts a new provisional load, make sure we cancel any pending one in the provisional process, as it would have happened in the first provisional load happened in the same process. Without this, we could have 2 parallel loads happening, one in the committed process and another in the provisional one, leading to assertion failures in debug. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared): 2019-01-28 Babak Shafiei <bshafiei@apple.com> Cherry-pick r240477. rdar://problem/47586845 Regression(PSON?) Crash under NavigationState::NavigationClient::decidePolicyForNavigationAction() https://bugs.webkit.org/show_bug.cgi?id=193779 <rdar://problem/46170903> Reviewed by Antti Koivisto. Source/WebKit: * UIProcess/Cocoa/NavigationState.mm: (WebKit::tryAppLink): (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction): We were crashing when trying to get the URL of the main frame, which was sad because we never ended up using the main frame URL. Therefore, this patch drops the code in question. * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync): Add assertion to make sure that the DecidePolicyForNavigationActionAsync IPC it is getting from the process is related to its main frame. Tools: Add API test that quickly navigates forward to a previous process without waiting for it to suspend. I suspect the crash could have been happening due to receiving leftover IPC from the process' previous page when reconnecting the it for the forward navigation. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240477 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-25 Chris Dumez <cdumez@apple.com> Regression(PSON?) Crash under NavigationState::NavigationClient::decidePolicyForNavigationAction() https://bugs.webkit.org/show_bug.cgi?id=193779 <rdar://problem/46170903> Reviewed by Antti Koivisto. * UIProcess/Cocoa/NavigationState.mm: (WebKit::tryAppLink): (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction): We were crashing when trying to get the URL of the main frame, which was sad because we never ended up using the main frame URL. Therefore, this patch drops the code in question. * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync): Add assertion to make sure that the DecidePolicyForNavigationActionAsync IPC it is getting from the process is related to its main frame. 2019-01-28 Babak Shafiei <bshafiei@apple.com> Cherry-pick r240443. rdar://problem/47586900 [PSON] Flash on back navigation on Mac https://bugs.webkit.org/show_bug.cgi?id=193716 <rdar://problem/47148458> Reviewed by Chris Dumez. Source/WebKit: We close the page immediately if we fail to suspend. Layers disappear and we get a flash. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::~SuspendedPageProxy): (WebKit::SuspendedPageProxy::close): Track closed state so we don't send the message twice, causing unhandled message errors in web process. (WebKit::SuspendedPageProxy::didProcessRequestToSuspend): Close the suspended page if the suspension fails. Skip this if we are using web process side compositing on Mac. * UIProcess/SuspendedPageProxy.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::enterAcceleratedCompositingMode): On Mac, close the failed SuspendedPageProxy when entering compositing mode. At this point we don't need it to keep layers alive. * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::closeFailedSuspendedPagesForPage): * UIProcess/WebProcessPool.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::suspendForProcessSwap): Don't close the page on suspension failure. This is now managed by the UI process. Tools: * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: Closing of the previous page is delayed so waiting for didFinishNavigation is not sufficient to guarantee we have received all the messages. Wait for them. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240443 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-24 Antti Koivisto <antti@apple.com> [PSON] Flash on back navigation on Mac https://bugs.webkit.org/show_bug.cgi?id=193716 <rdar://problem/47148458> Reviewed by Chris Dumez. We close the page immediately if we fail to suspend. Layers disappear and we get a flash. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::~SuspendedPageProxy): (WebKit::SuspendedPageProxy::close): Track closed state so we don't send the message twice, causing unhandled message errors in web process. (WebKit::SuspendedPageProxy::didProcessRequestToSuspend): Close the suspended page if the suspension fails. Skip this if we are using web process side compositing on Mac. * UIProcess/SuspendedPageProxy.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::enterAcceleratedCompositingMode): On Mac, close the failed SuspendedPageProxy when entering compositing mode. At this point we don't need it to keep layers alive. * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::closeFailedSuspendedPagesForPage): * UIProcess/WebProcessPool.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::suspendForProcessSwap): Don't close the page on suspension failure. This is now managed by the UI process. 2019-01-28 Babak Shafiei <bshafiei@apple.com> Cherry-pick r240442. rdar://problem/47586826 Regression(PSON) Back/Forward list items' URL sometimes gets replaced with the URL of a subframe https://bugs.webkit.org/show_bug.cgi?id=193761 <rdar://problem/47456405> Reviewed by Alex Christensen. Source/WebKit: When doing a history navigation cross-process, the UIProcess would first send the back/forward list items to the destination WebProcess via WebPage::updateBackForwardListForReattach(), then ask the process to navigate to the expected back/forward list item. WebPage::updateBackForwardListForReattach() would call restoreSessionInternal(), which would call toHistoryItem() on each BackForwardListItem. This may end up creating more than one HistoryItem for each BackForwardListItem because HistoryItems are part of a tree (each frame has its own list of history items). Note that BackForwardListItems and HistoryItem share a BackForwardItemIdentifier which is a (processIdentifier, itemIdentifier) pair. We normally generate the HistoryItem's identifier from inside its constructor like so: `{ Process::identifier(), generateObjectIdentifier<BackForwardItemIdentifier::ItemIdentifierType>() }` However, when calling updateBackForwardListForReattach() and constructing children HistoryItem, applyFrameState() would generate the identifier by itself and passing it to the HistoryItem constructor. Its genegates the ID the exact same way so this would in theory not be a problem. Unfortunately, both calls to generateObjectIdentifier() get inlined and both call sites end up with their own static counter to generate ids. As a result, we may end up with conflicts as HistoryItems for child frames (restored by restoreSessionInternal()) can end up with the same identifier as HistoryItems for top frames. This confusion would lead to the WebContent process sending the UIProcess bad information and the URL of subframes could end up as the WebBackForwardListItem's mainframe URL. * WebProcess/WebCoreSupport/SessionStateConversion.cpp: (WebKit::applyFrameState): Stop calling generateObjectIdentifier() explicitly and let the HistoryItem constructor take care of it. Calling generateObjectIdentifier() for the same type from different places is not safe due to inlining. Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240442 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-24 Chris Dumez <cdumez@apple.com> Regression(PSON) Back/Forward list items' URL sometimes gets replaced with the URL of a subframe https://bugs.webkit.org/show_bug.cgi?id=193761 <rdar://problem/47456405> Reviewed by Alex Christensen. When doing a history navigation cross-process, the UIProcess would first send the back/forward list items to the destination WebProcess via WebPage::updateBackForwardListForReattach(), then ask the process to navigate to the expected back/forward list item. WebPage::updateBackForwardListForReattach() would call restoreSessionInternal(), which would call toHistoryItem() on each BackForwardListItem. This may end up creating more than one HistoryItem for each BackForwardListItem because HistoryItems are part of a tree (each frame has its own list of history items). Note that BackForwardListItems and HistoryItem share a BackForwardItemIdentifier which is a (processIdentifier, itemIdentifier) pair. We normally generate the HistoryItem's identifier from inside its constructor like so: `{ Process::identifier(), generateObjectIdentifier<BackForwardItemIdentifier::ItemIdentifierType>() }` However, when calling updateBackForwardListForReattach() and constructing children HistoryItem, applyFrameState() would generate the identifier by itself and passing it to the HistoryItem constructor. Its genegates the ID the exact same way so this would in theory not be a problem. Unfortunately, both calls to generateObjectIdentifier() get inlined and both call sites end up with their own static counter to generate ids. As a result, we may end up with conflicts as HistoryItems for child frames (restored by restoreSessionInternal()) can end up with the same identifier as HistoryItems for top frames. This confusion would lead to the WebContent process sending the UIProcess bad information and the URL of subframes could end up as the WebBackForwardListItem's mainframe URL. * WebProcess/WebCoreSupport/SessionStateConversion.cpp: (WebKit::applyFrameState): Stop calling generateObjectIdentifier() explicitly and let the HistoryItem constructor take care of it. Calling generateObjectIdentifier() for the same type from different places is not safe due to inlining. 2019-01-24 Alan Coon <alancoon@apple.com> Cherry-pick r240461. rdar://problem/47536283 [iOS] Silence MediaPlayer compile warnings https://bugs.webkit.org/show_bug.cgi?id=193780 <rdar://problem/47518428> Reviewed by Jer Noble. Source/WebCore/PAL: * pal/spi/ios/MediaPlayerSPI.h: Source/WebKit: * UIProcess/ios/forms/WKAirPlayRoutePicker.mm: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240461 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-24 Eric Carlson <eric.carlson@apple.com> [iOS] Silence MediaPlayer compile warnings https://bugs.webkit.org/show_bug.cgi?id=193780 <rdar://problem/47518428> Reviewed by Jer Noble. * UIProcess/ios/forms/WKAirPlayRoutePicker.mm: 2019-01-23 Alan Coon <alancoon@apple.com> Cherry-pick r240325. rdar://problem/47494727 Regression(r240178) Some API tests are crashing https://bugs.webkit.org/show_bug.cgi?id=193680 Reviewed by Alex Christensen. r240178 made sure that userScripts / scriptMessageHandlers / contentExtensions are always properly populated in the WebPageCreationParameters. This was needed in case we need to reconstruct the WebUserContentController on the WebProcess side. However, this caused a regression in the case we reuse a process where the WebUserContentController still exists (because it was kept alive, e.g. by the WebPageGroup). In that case, we would add duplicate entries to the existing WebUserContentController instance because its "add" methods did not have duplicate checks. To address the issue, this patch adds duplicate checks to the WebUserContentController "add" methods. * WebProcess/UserContent/WebUserContentController.cpp: (WebKit::WebUserContentController::addUserScriptMessageHandlerInternal): (WebKit::WebUserContentController::removeUserScriptMessageHandlerInternal): (WebKit::WebUserContentController::addUserScriptInternal): (WebKit::WebUserContentController::removeUserScriptInternal): (WebKit::WebUserContentController::addUserStyleSheetInternal): (WebKit::WebUserContentController::removeUserStyleSheetInternal): (WebKit::WebUserContentController::forEachUserMessageHandler const): * WebProcess/UserContent/WebUserContentController.h: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240325 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-22 Chris Dumez <cdumez@apple.com> Regression(r240178) Some API tests are crashing https://bugs.webkit.org/show_bug.cgi?id=193680 Reviewed by Alex Christensen. r240178 made sure that userScripts / scriptMessageHandlers / contentExtensions are always properly populated in the WebPageCreationParameters. This was needed in case we need to reconstruct the WebUserContentController on the WebProcess side. However, this caused a regression in the case we reuse a process where the WebUserContentController still exists (because it was kept alive, e.g. by the WebPageGroup). In that case, we would add duplicate entries to the existing WebUserContentController instance because its "add" methods did not have duplicate checks. To address the issue, this patch adds duplicate checks to the WebUserContentController "add" methods. * WebProcess/UserContent/WebUserContentController.cpp: (WebKit::WebUserContentController::addUserScriptMessageHandlerInternal): (WebKit::WebUserContentController::removeUserScriptMessageHandlerInternal): (WebKit::WebUserContentController::addUserScriptInternal): (WebKit::WebUserContentController::removeUserScriptInternal): (WebKit::WebUserContentController::addUserStyleSheetInternal): (WebKit::WebUserContentController::removeUserStyleSheetInternal): (WebKit::WebUserContentController::forEachUserMessageHandler const): * WebProcess/UserContent/WebUserContentController.h: 2019-01-23 Alan Coon <alancoon@apple.com> Cherry-pick r240298. rdar://problem/47494772 [iOS] Flash when swiping back to Google search result page https://bugs.webkit.org/show_bug.cgi?id=193668 <rdar://problem/47071684> Reviewed by Simon Fraser. If the google page is scrolled, there is sometimes a short flash. When restoring the page state we also restore exposedContentRect which is used to determine which part of the page to create layers for. Scroll position is restored by the UI process later so we rely on this to get the right layers for the initial view update. A viewport configuration update may sometimes trample over the restored exposedContentRect, moving it to top left. In this case the initial layer tree unfreeze commit may not have layers to cover the actual visible view position. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::didCommitLoad): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::restorePageState): Set a bit to indicate we have already restored the exposedContentRect. (WebKit::WebPage::viewportConfigurationChanged): Only reset exposedContentRect if wasn't already set by restorePageState. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240298 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-22 Antti Koivisto <antti@apple.com> [iOS] Flash when swiping back to Google search result page https://bugs.webkit.org/show_bug.cgi?id=193668 <rdar://problem/47071684> Reviewed by Simon Fraser. If the google page is scrolled, there is sometimes a short flash. When restoring the page state we also restore exposedContentRect which is used to determine which part of the page to create layers for. Scroll position is restored by the UI process later so we rely on this to get the right layers for the initial view update. A viewport configuration update may sometimes trample over the restored exposedContentRect, moving it to top left. In this case the initial layer tree unfreeze commit may not have layers to cover the actual visible view position. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::didCommitLoad): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::restorePageState): Set a bit to indicate we have already restored the exposedContentRect. (WebKit::WebPage::viewportConfigurationChanged): Only reset exposedContentRect if wasn't already set by restorePageState. 2019-01-23 Alan Coon <alancoon@apple.com> Cherry-pick r240178. rdar://problem/47494727 Regression(PSON) Content blockers are sometimes lost on back navigation cross-site https://bugs.webkit.org/show_bug.cgi?id=193588 <rdar://problem/47131566> Reviewed by Alex Christensen. Source/WebKit: When the WebPageProxy needs to create initialization parameters for its WebPage in the WebContent process, it calls WebProcessProxy::addWebUserContentControllerProxy() which calls WebUserContentControllerProxy::addProcess(). This last call is supposed to register the WebProcessProxy with the WebUserContentControllerProxy and adding the contentRuleLists to the WebPageCreationParameters. The issue is that if the WebUserContentControllerProxy already knows about this WebProcessProxy, it would return early and not populate the WebPageCreationParameters. In PSON world, when navigating back to a page that failed to enter page cache, we reuse the process where we previously loaded the page but re-create a new WebPage on the WebContent process site. When this happens, WebUserContentControllerProxy would not add the contentRuleLists to the WebPageCreationParameters and the new WebPage in the previously-suspended process would be missing them. * UIProcess/UserContent/WebUserContentControllerProxy.cpp: (WebKit::WebUserContentControllerProxy::addProcess): Tools: Add layout test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240178 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-18 Chris Dumez <cdumez@apple.com> Regression(PSON) Content blockers are sometimes lost on back navigation cross-site https://bugs.webkit.org/show_bug.cgi?id=193588 <rdar://problem/47131566> Reviewed by Alex Christensen. When the WebPageProxy needs to create initialization parameters for its WebPage in the WebContent process, it calls WebProcessProxy::addWebUserContentControllerProxy() which calls WebUserContentControllerProxy::addProcess(). This last call is supposed to register the WebProcessProxy with the WebUserContentControllerProxy and adding the contentRuleLists to the WebPageCreationParameters. The issue is that if the WebUserContentControllerProxy already knows about this WebProcessProxy, it would return early and not populate the WebPageCreationParameters. In PSON world, when navigating back to a page that failed to enter page cache, we reuse the process where we previously loaded the page but re-create a new WebPage on the WebContent process site. When this happens, WebUserContentControllerProxy would not add the contentRuleLists to the WebPageCreationParameters and the new WebPage in the previously-suspended process would be missing them. * UIProcess/UserContent/WebUserContentControllerProxy.cpp: (WebKit::WebUserContentControllerProxy::addProcess): 2019-01-23 Alan Coon <alancoon@apple.com> Cherry-pick r239994. rdar://problem/47295338 Add allow directive for MTLCompilerService.xpc to PluginProcess and WebContent https://bugs.webkit.org/show_bug.cgi?id=193453 <rdar://problem/47268166> Reviewed by Brent Fulgham. * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in: * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: * WebProcess/com.apple.WebProcess.sb.in: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239994 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-15 Per Arne Vollan <pvollan@apple.com> Add allow directive for MTLCompilerService.xpc to PluginProcess and WebContent https://bugs.webkit.org/show_bug.cgi?id=193453 <rdar://problem/47268166> Reviewed by Brent Fulgham. * PluginProcess/mac/com.apple.WebKit.plugin-common.sb.in: * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: * WebProcess/com.apple.WebProcess.sb.in: 2019-01-23 Alan Coon <alancoon@apple.com> Cherry-pick r239947. rdar://problem/47295371 Re-enable ability to build --cloop builds. https://bugs.webkit.org/show_bug.cgi?id=192955 Source/JavaScriptCore: <rdar://problem/46882363> Reviewed by Saam barati and Keith Miller. * Configurations/FeatureDefines.xcconfig: Source/WebCore: Reviewed by Saam barati and Keith Miller. * Configurations/FeatureDefines.xcconfig: Source/WebCore/PAL: <rdar://problem/46882363> Reviewed by Saam barati and Keith Miller. * Configurations/FeatureDefines.xcconfig: Source/WebKit: <rdar://problem/46882363> Reviewed by Saam barati and Keith Miller. * Configurations/FeatureDefines.xcconfig: Source/WebKitLegacy/mac: <rdar://problem/46882363> Reviewed by Saam barati and Keith Miller. * Configurations/FeatureDefines.xcconfig: Tools: <rdar://problem/46882363> Reviewed by Saam barati and Keith Miller. The --cloop build option was being ignored this whole time since r236381. This patch makes it possible to build CLoop builds again. * Scripts/build-jsc: * Scripts/webkitperl/FeatureList.pm: * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239947 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-14 Mark Lam <mark.lam@apple.com> Re-enable ability to build --cloop builds. https://bugs.webkit.org/show_bug.cgi?id=192955 <rdar://problem/46882363> Reviewed by Saam barati and Keith Miller. * Configurations/FeatureDefines.xcconfig: 2019-01-23 Alan Coon <alancoon@apple.com> Revert r239619. rdar://problem/47465051 2019-01-23 Kocsen Chung <kocsen_chung@apple.com> Cherry-pick r240010. rdar://problem/47457965 Cannot tab out of WKWebView on macOS https://bugs.webkit.org/show_bug.cgi?id=161448 <rdar://problem/28100085> Reviewed by Dean Jackson. Source/WebCore/PAL: * pal/spi/mac/NSViewSPI.h: * pal/spi/mac/NSWindowSPI.h: Move some SPI declarations in here from WebKitLegacy. Source/WebKit: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::takeFocus): If the UIDelegate doesn't implement takeFocus, provide a simple default implementation that just uses AppKit's key view loop to move the focus. * UIProcess/API/APIUIClient.h: (API::UIClient::takeFocus): * UIProcess/API/C/WKPage.cpp: (WKPageSetPageUIClient): * UIProcess/Cocoa/UIDelegate.h: * UIProcess/Cocoa/UIDelegate.mm: (WebKit::UIDelegate::UIClient::takeFocus): Make API::UIClient's takeFocus return a bool indicating whether the client implements it or not. * UIProcess/PageClient.h: * UIProcess/mac/PageClientImplMac.h: * UIProcess/mac/PageClientImplMac.mm: (WebKit::PageClientImpl::takeFocus): Plumb takeFocus to WebViewImpl. * UIProcess/Cocoa/WebViewImpl.h: * UIProcess/Cocoa/WebViewImpl.mm: (WebKit::WebViewImpl::takeFocus): Borrow the relevant portion of WebKitLegacy's implementation of takeFocus, shifting focus to the next/previous key view in the window. Source/WebKitLegacy/mac: * WebCoreSupport/WebChromeClient.mm: * WebView/WebView.mm: Make use of SPI headers. Tools: Add a test that tabbing into and out of WKWebView works correctly. * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: * TestWebKitAPI/Tests/WebKitCocoa/CommandBackForward.mm: (WebKit2_CommandBackForwardTest::SetUp): (-[CommandBackForwardOffscreenWindow isKeyWindow]): Deleted. (-[CommandBackForwardOffscreenWindow isVisible]): Deleted. * TestWebKitAPI/Tests/WebKitCocoa/TabOutOfWebView.mm: Added. (-[FocusableView canBecomeKeyView]): (TEST): * TestWebKitAPI/mac/OffscreenWindow.h: Added. * TestWebKitAPI/mac/OffscreenWindow.mm: Added. (-[OffscreenWindow initWithSize:]): (-[OffscreenWindow isKeyWindow]): (-[OffscreenWindow isVisible]): * TestWebKitAPI/mac/PlatformWebViewMac.mm: (TestWebKitAPI::PlatformWebView::initialize): (-[ActiveOffscreenWindow isKeyWindow]): Deleted. (-[ActiveOffscreenWindow isVisible]): Deleted. Factor ActiveOffscreenWindow out into OffscreenWindow and share it. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240010 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-15 Tim Horton <timothy_horton@apple.com> Cannot tab out of WKWebView on macOS https://bugs.webkit.org/show_bug.cgi?id=161448 <rdar://problem/28100085> Reviewed by Dean Jackson. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::takeFocus): If the UIDelegate doesn't implement takeFocus, provide a simple default implementation that just uses AppKit's key view loop to move the focus. * UIProcess/API/APIUIClient.h: (API::UIClient::takeFocus): * UIProcess/API/C/WKPage.cpp: (WKPageSetPageUIClient): * UIProcess/Cocoa/UIDelegate.h: * UIProcess/Cocoa/UIDelegate.mm: (WebKit::UIDelegate::UIClient::takeFocus): Make API::UIClient's takeFocus return a bool indicating whether the client implements it or not. * UIProcess/PageClient.h: * UIProcess/mac/PageClientImplMac.h: * UIProcess/mac/PageClientImplMac.mm: (WebKit::PageClientImpl::takeFocus): Plumb takeFocus to WebViewImpl. * UIProcess/Cocoa/WebViewImpl.h: * UIProcess/Cocoa/WebViewImpl.mm: (WebKit::WebViewImpl::takeFocus): Borrow the relevant portion of WebKitLegacy's implementation of takeFocus, shifting focus to the next/previous key view in the window. 2019-01-23 Alan Coon <alancoon@apple.com> Cherry-pick r240161. rdar://problem/47458286 Regression(PSON) Scroll position is not always restored properly when navigating back https://bugs.webkit.org/show_bug.cgi?id=193578 <rdar://problem/47386331> Reviewed by Tim Horton. Source/WebKit: Fix issues causing the scroll position to not be restored at all (or incorrectly) when navigating back cross-site with PSON enabled. Also make sure that the swipe gesture snapshot really stays up until we've restored the scroll position. Note that even after those changes, I can still sometimes reproduce a white flash when swiping back to Google search results (scroll position being correct now). This is tracked by <rdar://problem/47071684> and happens even if I disable PSON entirely. * Shared/SessionState.cpp: (WebKit::FrameState::encode const): (WebKit::FrameState::decode): * Shared/SessionState.h: * WebProcess/WebCoreSupport/SessionStateConversion.cpp: (WebKit::toFrameState): (WebKit::applyFrameState): obscuredInsets is present on the HistoryItem in the WebProcess but was never passed to or stored by the UIProcess on the WebBackForwardListItem. obscuredInsets is needed to properly restore the scrollPosition (position was 70px off on my iPad without this). With PSON enabled, if you swipe back cross-process and the previous page was not put into PageCache, then the HistoryItem is gone on the WebProcess side. What happens is that the UIProcess sends its WebBackForwardListItem to the WebProcess, which restores the HistoryItem there, and then asks it to load it. The obscuredInsets was getting lost in the process since the UIProcess never knew about it. * UIProcess/Cocoa/ViewGestureController.cpp: (WebKit::ViewGestureController::didReachMainFrameLoadTerminalState): Drop logic that was causing the ViewGestureController to not wait for the scroll position to be restored before taking down the snapshot, when UI-side compositing is enabled. If you look at the comment above the code, you'll see that the code in question was meant to impact only the non-UI side compositing code path. As a matter of fact, when the code was reviewed at https://bugs.webkit.org/show_bug.cgi?id=151224, it was protected by a #if PLATFORM(MAC), before getting modified the wrong way before landing. In practice, we would have often restored the scroll position by the time the load is finished so it would not cause a flash in most cases. However, with PSON enabled and the layer tree freezing we do on process-swap, the first post-scroll restoration layer tree commit may now occur a little bit later and we would lose the race more often. * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::updateBackForwardItem): * UIProcess/WebProcessProxy.h: When adding PageCache support to PSON, we used to navigate the "suspended" page to about:blank. This would lead to unwanted WebProcessProxy::updateBackForwardItem() calls from the WebProcess which we wanted to ignore. We thus added logic to ignore updateBackForwardItem() IPC from the old WebProcess after a swap. The issue with this is that we sometimes miss/ignore legit updates to the HistoryItem from the old process, in particular with regards to the scroll position and the pageScaleFactor. So if you swiped and then quickly enough did a cross-site navigation, the UIProcess' WebBackForwardList would not get updated with the latest scroll position and we would thus fail to restore it later on. To address the issue, we now stop ignoring updates from the old WebProcess after a swap. This logic is no longer needed since we no longer navigate the old page to about:blank after a swap, we merely suspend it "in place". Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240161 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-18 Chris Dumez <cdumez@apple.com> Regression(PSON) Scroll position is not always restored properly when navigating back https://bugs.webkit.org/show_bug.cgi?id=193578 <rdar://problem/47386331> Reviewed by Tim Horton. Fix issues causing the scroll position to not be restored at all (or incorrectly) when navigating back cross-site with PSON enabled. Also make sure that the swipe gesture snapshot really stays up until we've restored the scroll position. Note that even after those changes, I can still sometimes reproduce a white flash when swiping back to Google search results (scroll position being correct now). This is tracked by <rdar://problem/47071684> and happens even if I disable PSON entirely. * Shared/SessionState.cpp: (WebKit::FrameState::encode const): (WebKit::FrameState::decode): * Shared/SessionState.h: * WebProcess/WebCoreSupport/SessionStateConversion.cpp: (WebKit::toFrameState): (WebKit::applyFrameState): obscuredInsets is present on the HistoryItem in the WebProcess but was never passed to or stored by the UIProcess on the WebBackForwardListItem. obscuredInsets is needed to properly restore the scrollPosition (position was 70px off on my iPad without this). With PSON enabled, if you swipe back cross-process and the previous page was not put into PageCache, then the HistoryItem is gone on the WebProcess side. What happens is that the UIProcess sends its WebBackForwardListItem to the WebProcess, which restores the HistoryItem there, and then asks it to load it. The obscuredInsets was getting lost in the process since the UIProcess never knew about it. * UIProcess/Cocoa/ViewGestureController.cpp: (WebKit::ViewGestureController::didReachMainFrameLoadTerminalState): Drop logic that was causing the ViewGestureController to not wait for the scroll position to be restored before taking down the snapshot, when UI-side compositing is enabled. If you look at the comment above the code, you'll see that the code in question was meant to impact only the non-UI side compositing code path. As a matter of fact, when the code was reviewed at https://bugs.webkit.org/show_bug.cgi?id=151224, it was protected by a #if PLATFORM(MAC), before getting modified the wrong way before landing. In practice, we would have often restored the scroll position by the time the load is finished so it would not cause a flash in most cases. However, with PSON enabled and the layer tree freezing we do on process-swap, the first post-scroll restoration layer tree commit may now occur a little bit later and we would lose the race more often. * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::updateBackForwardItem): * UIProcess/WebProcessProxy.h: When adding PageCache support to PSON, we used to navigate the "suspended" page to about:blank. This would lead to unwanted WebProcessProxy::updateBackForwardItem() calls from the WebProcess which we wanted to ignore. We thus added logic to ignore updateBackForwardItem() IPC from the old WebProcess after a swap. The issue with this is that we sometimes miss/ignore legit updates to the HistoryItem from the old process, in particular with regards to the scroll position and the pageScaleFactor. So if you swiped and then quickly enough did a cross-site navigation, the UIProcess' WebBackForwardList would not get updated with the latest scroll position and we would thus fail to restore it later on. To address the issue, we now stop ignoring updates from the old WebProcess after a swap. This logic is no longer needed since we no longer navigate the old page to about:blank after a swap, we merely suspend it "in place". 2019-01-23 Alan Coon <alancoon@apple.com> Cherry-pick r240087. rdar://problem/47458394 Revert r239938 https://bugs.webkit.org/show_bug.cgi?id=193267 <rdar://problem/47297304> * Configurations/WebContent-iOS.entitlements: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240087 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-16 Alex Christensen <achristensen@webkit.org> Revert r239938 https://bugs.webkit.org/show_bug.cgi?id=193267 <rdar://problem/47297304> * Configurations/WebContent-iOS.entitlements: 2019-01-23 Alan Coon <alancoon@apple.com> Cherry-pick r240045. rdar://problem/47458249 Frequent null-deref under TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded() https://bugs.webkit.org/show_bug.cgi?id=193468 <rdar://problem/38645869> Reviewed by Zalan Bujtas. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded): Adjust the null-check a bit; Zalan pointed out that the layout could be responsible for the Frame/RenderView going away, so we should bail *after* layout, not before. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240045 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-16 Tim Horton <timothy_horton@apple.com> Frequent null-deref under TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded() https://bugs.webkit.org/show_bug.cgi?id=193468 <rdar://problem/38645869> Reviewed by Zalan Bujtas. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded): Adjust the null-check a bit; Zalan pointed out that the layout could be responsible for the Frame/RenderView going away, so we should bail *after* layout, not before. 2019-01-23 Alan Coon <alancoon@apple.com> Cherry-pick r240016. rdar://problem/47458249 Frequent null-deref under TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded() https://bugs.webkit.org/show_bug.cgi?id=193468 <rdar://problem/38645869> Reviewed by Beth Dakin. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded): I'm not sure why this got *worse*, but we should null-check RenderView. It's OK to bail from scaleViewToFitDocumentIfNeeded, we'll re-do it the next time we paint (which will surely happen if we gain a RenderView). git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240016 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-15 Tim Horton <timothy_horton@apple.com> Frequent null-deref under TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded() https://bugs.webkit.org/show_bug.cgi?id=193468 <rdar://problem/38645869> Reviewed by Beth Dakin. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::scaleViewToFitDocumentIfNeeded): I'm not sure why this got *worse*, but we should null-check RenderView. It's OK to bail from scaleViewToFitDocumentIfNeeded, we'll re-do it the next time we paint (which will surely happen if we gain a RenderView). 2019-01-22 Alan Coon <alancoon@apple.com> Cherry-pick r240055. rdar://problem/47099573 Regression(r240046) Several API tests are crashing https://bugs.webkit.org/show_bug.cgi?id=193509 Reviewed by Geoffrey Garen. The crashes would happen because loadRequestShared() would take a WebProcessProxy& in parameter but then call reattachToWebProcess() if the page is not valid, which would replace m_process and invalidate our process reference. To address the issue, move the reattachToWebProcess() call to loadRequest(), before calling loadRequestShared(). Also, update *Shared() methods to take a Ref<WebProcessProxy>&& instead of a WebProcessProxy& in parameter. Since we call client delegates, we need to make sure our process stays alive. * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::loadData): (WebKit::ProvisionalPageProxy::loadRequest): (WebKit::ProvisionalPageProxy::didCreateMainFrame): (WebKit::ProvisionalPageProxy::didPerformClientRedirect): (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didNavigateWithNavigationData): (WebKit::ProvisionalPageProxy::didChangeProvisionalURLForFrame): (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync): (WebKit::ProvisionalPageProxy::decidePolicyForResponse): (WebKit::ProvisionalPageProxy::startURLSchemeTask): (WebKit::ProvisionalPageProxy::backForwardGoToItem): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::loadRequest): (WebKit::WebPageProxy::loadRequestWithNavigationShared): (WebKit::WebPageProxy::loadData): (WebKit::WebPageProxy::loadDataWithNavigationShared): (WebKit::WebPageProxy::didPerformDragControllerAction): (WebKit::WebPageProxy::findPlugin): (WebKit::WebPageProxy::didCreateMainFrame): (WebKit::WebPageProxy::didCreateSubframe): (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared): (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame): (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrameShared): (WebKit::WebPageProxy::willPerformClientRedirectForFrame): (WebKit::WebPageProxy::didCancelClientRedirectForFrame): (WebKit::WebPageProxy::didChangeProvisionalURLForFrame): (WebKit::WebPageProxy::didChangeProvisionalURLForFrameShared): (WebKit::WebPageProxy::didFailProvisionalLoadForFrame): (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared): (WebKit::WebPageProxy::didCommitLoadForFrame): (WebKit::WebPageProxy::didFinishDocumentLoadForFrame): (WebKit::WebPageProxy::didFinishLoadForFrame): (WebKit::WebPageProxy::didFailLoadForFrame): (WebKit::WebPageProxy::didSameDocumentNavigationForFrame): (WebKit::WebPageProxy::didReceiveTitleForFrame): (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame): (WebKit::WebPageProxy::didDisplayInsecureContentForFrame): (WebKit::WebPageProxy::didRunInsecureContentForFrame): (WebKit::WebPageProxy::frameDidBecomeFrameSet): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared): (WebKit::WebPageProxy::decidePolicyForNavigationAction): (WebKit::WebPageProxy::decidePolicyForNavigationActionSync): (WebKit::WebPageProxy::decidePolicyForNewWindowAction): (WebKit::WebPageProxy::decidePolicyForResponse): (WebKit::WebPageProxy::decidePolicyForResponseShared): (WebKit::WebPageProxy::unableToImplementPolicy): (WebKit::WebPageProxy::willSubmitForm): (WebKit::WebPageProxy::didNavigateWithNavigationData): (WebKit::WebPageProxy::didNavigateWithNavigationDataShared): (WebKit::WebPageProxy::didPerformClientRedirect): (WebKit::WebPageProxy::didPerformClientRedirectShared): (WebKit::WebPageProxy::didPerformServerRedirect): (WebKit::WebPageProxy::didUpdateHistoryTitle): (WebKit::WebPageProxy::createNewPage): (WebKit::WebPageProxy::runJavaScriptAlert): (WebKit::WebPageProxy::runJavaScriptConfirm): (WebKit::WebPageProxy::runJavaScriptPrompt): (WebKit::WebPageProxy::unavailablePluginButtonClicked): (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel): (WebKit::WebPageProxy::runOpenPanel): (WebKit::WebPageProxy::printFrame): (WebKit::WebPageProxy::backForwardGoToItem): (WebKit::WebPageProxy::backForwardGoToItemShared): (WebKit::WebPageProxy::learnWord): (WebKit::WebPageProxy::ignoreWord): (WebKit::WebPageProxy::didReceiveEvent): (WebKit::WebPageProxy::editingRangeCallback): (WebKit::WebPageProxy::rectForCharacterRangeCallback): (WebKit::WebPageProxy::focusedFrameChanged): (WebKit::WebPageProxy::frameSetLargestFrameChanged): (WebKit::WebPageProxy::exceededDatabaseQuota): (WebKit::WebPageProxy::requestGeolocationPermissionForFrame): (WebKit::WebPageProxy::requestUserMediaPermissionForFrame): (WebKit::WebPageProxy::enumerateMediaDevicesForFrame): (WebKit::WebPageProxy::startURLSchemeTask): (WebKit::WebPageProxy::startURLSchemeTaskShared): (WebKit::WebPageProxy::stopURLSchemeTask): (WebKit::WebPageProxy::loadSynchronousURLSchemeTask): * UIProcess/WebPageProxy.h: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240055 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-16 Chris Dumez <cdumez@apple.com> Regression(r240046) Several API tests are crashing https://bugs.webkit.org/show_bug.cgi?id=193509 Reviewed by Geoffrey Garen. The crashes would happen because loadRequestShared() would take a WebProcessProxy& in parameter but then call reattachToWebProcess() if the page is not valid, which would replace m_process and invalidate our process reference. To address the issue, move the reattachToWebProcess() call to loadRequest(), before calling loadRequestShared(). Also, update *Shared() methods to take a Ref<WebProcessProxy>&& instead of a WebProcessProxy& in parameter. Since we call client delegates, we need to make sure our process stays alive. * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::loadData): (WebKit::ProvisionalPageProxy::loadRequest): (WebKit::ProvisionalPageProxy::didCreateMainFrame): (WebKit::ProvisionalPageProxy::didPerformClientRedirect): (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didNavigateWithNavigationData): (WebKit::ProvisionalPageProxy::didChangeProvisionalURLForFrame): (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync): (WebKit::ProvisionalPageProxy::decidePolicyForResponse): (WebKit::ProvisionalPageProxy::startURLSchemeTask): (WebKit::ProvisionalPageProxy::backForwardGoToItem): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::loadRequest): (WebKit::WebPageProxy::loadRequestWithNavigationShared): (WebKit::WebPageProxy::loadData): (WebKit::WebPageProxy::loadDataWithNavigationShared): (WebKit::WebPageProxy::didPerformDragControllerAction): (WebKit::WebPageProxy::findPlugin): (WebKit::WebPageProxy::didCreateMainFrame): (WebKit::WebPageProxy::didCreateSubframe): (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared): (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame): (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrameShared): (WebKit::WebPageProxy::willPerformClientRedirectForFrame): (WebKit::WebPageProxy::didCancelClientRedirectForFrame): (WebKit::WebPageProxy::didChangeProvisionalURLForFrame): (WebKit::WebPageProxy::didChangeProvisionalURLForFrameShared): (WebKit::WebPageProxy::didFailProvisionalLoadForFrame): (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared): (WebKit::WebPageProxy::didCommitLoadForFrame): (WebKit::WebPageProxy::didFinishDocumentLoadForFrame): (WebKit::WebPageProxy::didFinishLoadForFrame): (WebKit::WebPageProxy::didFailLoadForFrame): (WebKit::WebPageProxy::didSameDocumentNavigationForFrame): (WebKit::WebPageProxy::didReceiveTitleForFrame): (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame): (WebKit::WebPageProxy::didDisplayInsecureContentForFrame): (WebKit::WebPageProxy::didRunInsecureContentForFrame): (WebKit::WebPageProxy::frameDidBecomeFrameSet): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared): (WebKit::WebPageProxy::decidePolicyForNavigationAction): (WebKit::WebPageProxy::decidePolicyForNavigationActionSync): (WebKit::WebPageProxy::decidePolicyForNewWindowAction): (WebKit::WebPageProxy::decidePolicyForResponse): (WebKit::WebPageProxy::decidePolicyForResponseShared): (WebKit::WebPageProxy::unableToImplementPolicy): (WebKit::WebPageProxy::willSubmitForm): (WebKit::WebPageProxy::didNavigateWithNavigationData): (WebKit::WebPageProxy::didNavigateWithNavigationDataShared): (WebKit::WebPageProxy::didPerformClientRedirect): (WebKit::WebPageProxy::didPerformClientRedirectShared): (WebKit::WebPageProxy::didPerformServerRedirect): (WebKit::WebPageProxy::didUpdateHistoryTitle): (WebKit::WebPageProxy::createNewPage): (WebKit::WebPageProxy::runJavaScriptAlert): (WebKit::WebPageProxy::runJavaScriptConfirm): (WebKit::WebPageProxy::runJavaScriptPrompt): (WebKit::WebPageProxy::unavailablePluginButtonClicked): (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel): (WebKit::WebPageProxy::runOpenPanel): (WebKit::WebPageProxy::printFrame): (WebKit::WebPageProxy::backForwardGoToItem): (WebKit::WebPageProxy::backForwardGoToItemShared): (WebKit::WebPageProxy::learnWord): (WebKit::WebPageProxy::ignoreWord): (WebKit::WebPageProxy::didReceiveEvent): (WebKit::WebPageProxy::editingRangeCallback): (WebKit::WebPageProxy::rectForCharacterRangeCallback): (WebKit::WebPageProxy::focusedFrameChanged): (WebKit::WebPageProxy::frameSetLargestFrameChanged): (WebKit::WebPageProxy::exceededDatabaseQuota): (WebKit::WebPageProxy::requestGeolocationPermissionForFrame): (WebKit::WebPageProxy::requestUserMediaPermissionForFrame): (WebKit::WebPageProxy::enumerateMediaDevicesForFrame): (WebKit::WebPageProxy::startURLSchemeTask): (WebKit::WebPageProxy::startURLSchemeTaskShared): (WebKit::WebPageProxy::stopURLSchemeTask): (WebKit::WebPageProxy::loadSynchronousURLSchemeTask): * UIProcess/WebPageProxy.h: 2019-01-22 Alan Coon <alancoon@apple.com> Cherry-pick r240046. rdar://problem/47099573 Regression(PSON) View becomes blank after click a cross-site download link https://bugs.webkit.org/show_bug.cgi?id=193361 <rdar://problem/47099573> Reviewed by Geoffrey Garen. Source/WebCore: * loader/FrameLoader.cpp: (WebCore::FrameLoader::commitProvisionalLoad): When restoring from PageCache, make sure we notify the client that the load was committed *before* we tell it that the navigation is complete. This would confuse the ProvisionalPageProxy logic in the UIProcess. Source/WebKit: The issue tracked by rdar://problem/47099573 is that a provisional load may get canceled (or converted into a download) *after* we've decided to process-swap. In such cases, the view should keep displaying the current site and it should still be interactive. However, with the previous PSON model, the view (pageProxy) would have already swapped to the new process and would end up displaying the initially empty document. To address the issue, this patch introduces the concept of a provisional load in the UIProcess, handled by a ProvisionalPageProxy which has its own privisional process. The WebPageProxy owns the ProvisionalPageProxy but we do not commit the provisional page until after the load was committed in the new process. This means that the view / WebPageProxy keeps using the old process and displays the current content until a load has committed in the provisional page. If no load commits in the provisional process (e.g. because the load is cancelled or converted into a download), then we merely destroy the ProvisionalPageProxy and terminate its process, without impacting the WebPageProxy. * Shared/WebPageCreationParameters.cpp: (WebKit::WebPageCreationParameters::encode const): (WebKit::WebPageCreationParameters::decode): * Shared/WebPageCreationParameters.h: Rename isSwapFromSuspended to isProcessSwap for clarity as we always want to delay attaching the drawing area in case of a process-swap, no matter what now that the previous process is kept alive until the provisional load is committed in the new process. * Shared/WebPolicyAction.h: Drop Suspend policy action. At decidePolicyForNavigationAction time, in case of process-swap, we now tell the previous process to simply ignore the load, while we create a ProvisionalPageProxy to do the new load in a new process. Suspension of the previous page in the old process, happens later, when a load is actually committed in the new process. * Sources.txt: Add new ProvisionalPageProxy file. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _killWebContentProcessAndResetState]): When calling _killWebContentProcessAndResetState on a WKWebView, kill both the current process and the provisional one, to maintain previous behavior in our API tests. * UIProcess/API/gtk/PageClientImpl.cpp: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/API/gtk/PageClientImpl.h: * UIProcess/API/wpe/PageClientImpl.cpp: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/API/wpe/PageClientImpl.h: * UIProcess/AcceleratedDrawingAreaProxy.cpp: (WebKit::AcceleratedDrawingAreaProxy::AcceleratedDrawingAreaProxy): (WebKit::AcceleratedDrawingAreaProxy::didUpdateBackingStoreState): (WebKit::AcceleratedDrawingAreaProxy::sendUpdateBackingStoreState): (WebKit::AcceleratedDrawingAreaProxy::waitForAndDispatchDidUpdateBackingStoreState): (WebKit::AcceleratedDrawingAreaProxy::setNativeSurfaceHandleForCompositing): (WebKit::AcceleratedDrawingAreaProxy::destroyNativeSurfaceHandleForCompositing): * UIProcess/AcceleratedDrawingAreaProxy.h: * UIProcess/Cocoa/WebViewImpl.h: * UIProcess/Cocoa/WebViewImpl.mm: (WebKit::WebViewImpl::createDrawingAreaProxy): * UIProcess/DrawingAreaProxy.cpp: (WebKit::DrawingAreaProxy::DrawingAreaProxy): (WebKit::DrawingAreaProxy::~DrawingAreaProxy): (WebKit::DrawingAreaProxy::viewExposedRectChangedTimerFired): * UIProcess/DrawingAreaProxy.h: (WebKit::DrawingAreaProxy::process): * UIProcess/DrawingAreaProxyImpl.cpp: (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl): (WebKit::DrawingAreaProxyImpl::update): * UIProcess/DrawingAreaProxyImpl.h: * UIProcess/PageClient.h: * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h: * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm: (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy): (WebKit::RemoteLayerTreeDrawingAreaProxy::~RemoteLayerTreeDrawingAreaProxy): (WebKit::RemoteLayerTreeDrawingAreaProxy::deviceScaleFactorDidChange): (WebKit::RemoteLayerTreeDrawingAreaProxy::sendUpdateGeometry): (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidStart): (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidEnd): (WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay): (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateActivityState): (WebKit::RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing): * UIProcess/ios/PageClientImplIOS.h: * UIProcess/ios/PageClientImplIOS.mm: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/ios/WKContentView.h: * UIProcess/ios/WKContentView.mm: (-[WKContentView _createDrawingAreaProxy:]): * UIProcess/mac/PageClientImplMac.h: * UIProcess/mac/PageClientImplMac.mm: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h: * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm: (WebKit::TiledCoreAnimationDrawingAreaProxy::TiledCoreAnimationDrawingAreaProxy): (WebKit::TiledCoreAnimationDrawingAreaProxy::deviceScaleFactorDidChange): (WebKit::TiledCoreAnimationDrawingAreaProxy::colorSpaceDidChange): (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForDidUpdateActivityState): (WebKit::TiledCoreAnimationDrawingAreaProxy::createFence): (WebKit::TiledCoreAnimationDrawingAreaProxy::sendUpdateGeometry): (WebKit::TiledCoreAnimationDrawingAreaProxy::adjustTransientZoom): (WebKit::TiledCoreAnimationDrawingAreaProxy::commitTransientZoom): (WebKit::TiledCoreAnimationDrawingAreaProxy::dispatchAfterEnsuringDrawing): * UIProcess/mac/WebPageProxyMac.mm: * UIProcess/win/PageClientImpl.cpp: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/win/PageClientImpl.h: * UIProcess/win/PageClientImpl.cpp: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/win/PageClientImpl.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): Pass the drawing area's associated process when constructing it and store it as a member in addition to the page. This is necessary now that a page can be associated with 2 WebProcesses at a time, each having its own drawing area. * UIProcess/Cocoa/WebPageProxyCocoa.mm: (WebKit::WebPageProxy::createSandboxExtensionsIfNeeded): Pass the process. * UIProcess/ProvisionalPageProxy.cpp: Added. (WebKit::ProvisionalPageProxy::ProvisionalPageProxy): (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy): (WebKit::ProvisionalPageProxy::processDidTerminate): (WebKit::ProvisionalPageProxy::takeDrawingArea): (WebKit::ProvisionalPageProxy::cancel): (WebKit::ProvisionalPageProxy::processDidFinishLaunching): (WebKit::ProvisionalPageProxy::finishInitializingWebPageAfterProcessLaunch): (WebKit::ProvisionalPageProxy::initializeWebPage): (WebKit::ProvisionalPageProxy::loadData): (WebKit::ProvisionalPageProxy::loadRequest): (WebKit::ProvisionalPageProxy::goToBackForwardItem): (WebKit::ProvisionalPageProxy::didCreateMainFrame): (WebKit::ProvisionalPageProxy::didPerformClientRedirect): (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didCommitLoadForFrame): (WebKit::ProvisionalPageProxy::didNavigateWithNavigationData): (WebKit::ProvisionalPageProxy::didChangeProvisionalURLForFrame): (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync): (WebKit::ProvisionalPageProxy::decidePolicyForResponse): (WebKit::ProvisionalPageProxy::startURLSchemeTask): (WebKit::ProvisionalPageProxy::backForwardGoToItem): (WebKit::ProvisionalPageProxy::didReceiveMessage): (WebKit::ProvisionalPageProxy::didReceiveSyncMessage): * UIProcess/ProvisionalPageProxy.h: Added. (WebKit::ProvisionalPageProxy::page): (WebKit::ProvisionalPageProxy::mainFrame const): (WebKit::ProvisionalPageProxy::process): (WebKit::ProvisionalPageProxy::processSwapRequestedByClient const): (WebKit::ProvisionalPageProxy::navigationID const): (WebKit::ProvisionalPageProxy::drawingArea const): New WebPageProxy-like class which is owned by the WebPageProxy and proxies IPC from the provisional process. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::~SuspendedPageProxy): (WebKit::SuspendedPageProxy::unsuspend): (WebKit::SuspendedPageProxy::didProcessRequestToSuspend): Unregister the SuspendedPageProxy as an IPC message receiver a little bit earlier when we're going to unsuspend it. This avoids conflicting with the ProvisionalPageProxy which tries to register itself as an IPC message receiver for the same pageID when a process-swap occurs and we're switching to a suspended page. * UIProcess/WebFrameProxy.cpp: (WebKit::WebFrameProxy::isMainFrame const): WebFrameProxy::isMainFrame() relies on checking that the frame is the WebPageProxy's m_mainFrame. Now that the WebPageProxy can have a ProvisionalPageProxy, also check if it is the ProvisionalPageProxy's m_mainFrame to maintain previous behavior. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::provisionalDrawingArea const): Add getter for the provisional drawing area. We normally only deal with the page's current drawing area, but the ViewGestureController needs access to the provisional once to display the swipe gesture snapshot. (WebKit::WebPageProxy::swapToWebProcess): swapToWebProcess() no longer takes care of unsuspending the SuspendedPage because we now call swapToWebProcess() later, when a load is actually committed in the provisional page / process. swapToWebProcess() now also needs to initialize some data members such as the drawing area and the main frame as it is transferring them over from the ProvisionalPageProxy which started the provisional load. (WebKit::WebPageProxy::finishAttachingToWebProcess): We no longer need IsSwapFromSuspended parameter as this is called later now, after a load has actually been committed in the provisional process. (WebKit::WebPageProxy::setDrawingArea): (WebKit::WebPageProxy::initializeWebPage): - We no longer need IsSwapFromSuspended parameter as this is called later now, after a load has actually been committed in the provisional process. - Factor some code out to WebPageProxy::setDrawingArea() so that it can be shared with swapToWebProcess(). (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle): (WebKit::WebPageProxy::loadRequest): (WebKit::WebPageProxy::loadRequestWithNavigationShared): Only call setPendingAPIRequestURL() in loadRequestWithNavigation() only if ShouldTreatAsContinuingLoad is not Yes. This avoids hitting some assertions as this was already called during the first API call if needed. (WebKit::WebPageProxy::loadData): (WebKit::WebPageProxy::loadDataWithNavigationShared): (WebKit::WebPageProxy::stopLoading): (WebKit::WebPageProxy::reload): (WebKit::WebPageProxy::didPerformDragControllerAction): (WebKit::WebPageProxy::findPlugin): (WebKit::WebPageProxy::receivedNavigationPolicyDecision): In case of process swap, tell the previous process to ignore the load instead of suspending it right away. Suspension now happens later, only if we end up committing the provisional load in the new process. Also discard the SuspendedPage if it failed to suspend (we only reuse its process in this case). This used to happen a bit later but it is clearer if we do this as early as possible I think. (WebKit::WebPageProxy::commitProvisionalPage): When the load is committed in the new process, we call WebPageProxy::commitProvisionalPage(). It takes care of: - Actually swapping the WebPageProxy to the new process by calling processDidTerminate() / swapToWebProcess(). - Suspending the current page. - Letting the client know the load is comitted - Destroy the ProvisionalPageProxy. This work used to happen earlier in continueNavigationInNewProcess(). (WebKit::WebPageProxy::continueNavigationInNewProcess): Moved some of the logic to commitProvisionalPage(). We now merely start the load in a new ProvisionalPageProxy, without actually having the WebPageProxy switch to the new process yet. (WebKit::WebPageProxy::didCreateMainFrame): (WebKit::WebPageProxy::didCreateSubframe): (WebKit::WebPageProxy::didCreateWindow): Drop some code that is no longer needed, now that the ProvisionalPageProxy takes care of this. (WebKit::WebPageProxy::didDestroyNavigation): On process-swap, when telling the previous process to ignore the load and starting the new load in a new ProvisionalPageProxy, the previous WebPage attempts to destroy the navigation. In this case, we ignore the call since the navigation is merely taken over by the ProvisionalPageProxy. (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared): Moved some PSON logic to the ProvisionalPageProxy instead. (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame): (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrameShared): (WebKit::WebPageProxy::willPerformClientRedirectForFrame): (WebKit::WebPageProxy::didCancelClientRedirectForFrame): (WebKit::WebPageProxy::didChangeProvisionalURLForFrame): (WebKit::WebPageProxy::didChangeProvisionalURLForFrameShared): (WebKit::WebPageProxy::didFailProvisionalLoadForFrame): (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared): When didFailProvisionalLoadForFrame() is called for a ProvisionalPageProxy, destroy it. (WebKit::WebPageProxy::didCommitLoadForFrame): (WebKit::WebPageProxy::didFinishDocumentLoadForFrame): (WebKit::WebPageProxy::didFinishLoadForFrame): (WebKit::WebPageProxy::didFailLoadForFrame): (WebKit::WebPageProxy::didSameDocumentNavigationForFrame): (WebKit::WebPageProxy::didReceiveTitleForFrame): (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame): (WebKit::WebPageProxy::didDisplayInsecureContentForFrame): (WebKit::WebPageProxy::didRunInsecureContentForFrame): (WebKit::WebPageProxy::frameDidBecomeFrameSet): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared): (WebKit::WebPageProxy::decidePolicyForNavigationAction): (WebKit::WebPageProxy::decidePolicyForNavigationActionSync): (WebKit::WebPageProxy::decidePolicyForNewWindowAction): (WebKit::WebPageProxy::decidePolicyForResponse): (WebKit::WebPageProxy::decidePolicyForResponseShared): (WebKit::WebPageProxy::unableToImplementPolicy): (WebKit::WebPageProxy::willSubmitForm): (WebKit::WebPageProxy::didNavigateWithNavigationData): (WebKit::WebPageProxy::didNavigateWithNavigationDataShared): (WebKit::WebPageProxy::didPerformClientRedirect): (WebKit::WebPageProxy::didPerformClientRedirectShared): (WebKit::WebPageProxy::didPerformServerRedirect): (WebKit::WebPageProxy::didUpdateHistoryTitle): (WebKit::WebPageProxy::createNewPage): (WebKit::WebPageProxy::runJavaScriptAlert): (WebKit::WebPageProxy::runJavaScriptConfirm): (WebKit::WebPageProxy::runJavaScriptPrompt): (WebKit::WebPageProxy::unavailablePluginButtonClicked): (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel): (WebKit::WebPageProxy::runOpenPanel): (WebKit::WebPageProxy::printFrame): (WebKit::WebPageProxy::backForwardGoToItem): (WebKit::WebPageProxy::backForwardGoToItemShared): (WebKit::WebPageProxy::learnWord): (WebKit::WebPageProxy::ignoreWord): (WebKit::WebPageProxy::didReceiveEvent): (WebKit::WebPageProxy::editingRangeCallback): (WebKit::WebPageProxy::rectForCharacterRangeCallback): (WebKit::WebPageProxy::focusedFrameChanged): (WebKit::WebPageProxy::frameSetLargestFrameChanged): (WebKit::WebPageProxy::provisionalProcessDidTerminate): Cancel the provisiona load and destroy the ProvisionalPageProxy if the provisional process crashes. (WebKit::WebPageProxy::resetState): Drop some code that is no longer needed. (WebKit::WebPageProxy::creationParameters): - Move the hasRegisteredServiceWorkers flag initialization from the call site to here now that we have more than one call site. This was just some bad factoring. - Take the process in parameter now that we page can be associated with several processes at a time. (WebKit::WebPageProxy::exceededDatabaseQuota): (WebKit::WebPageProxy::requestGeolocationPermissionForFrame): (WebKit::WebPageProxy::requestUserMediaPermissionForFrame): (WebKit::WebPageProxy::enumerateMediaDevicesForFrame): (WebKit::WebPageProxy::startURLSchemeTask): (WebKit::WebPageProxy::startURLSchemeTaskShared): (WebKit::WebPageProxy::stopURLSchemeTask): (WebKit::WebPageProxy::loadSynchronousURLSchemeTask): (WebKit::WebPageProxy::checkURLReceivedFromCurrentOrPreviousWebProcess): (WebKit::WebPageProxy::willAcquireUniversalFileReadSandboxExtension): * UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::visitedLinkStore): (WebKit::WebPageProxy::provisionalPageProxy const): * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::hasProvisionalPageWithID const): (WebKit::WebProcessProxy::updateBackForwardItem): (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch): (WebKit::WebProcessProxy::didFinishLaunching): (WebKit::WebProcessProxy::canTerminateChildProcess): * UIProcess/WebProcessProxy.h: (WebKit::WebProcessProxy::addProvisionalPageProxy): (WebKit::WebProcessProxy::removeProvisionalPageProxy): Before updating a BackForwardListItem, we normally make sure the process has a WebPageProxy with the item's pageID. We have to tweak the logic because there may now be no WebPageProxy with this pageID associated with this process yet, because it is still a ProvisionalPageProxy. * UIProcess/WebURLSchemeHandler.cpp: (WebKit::WebURLSchemeHandler::startTask): * UIProcess/WebURLSchemeHandler.h: * UIProcess/WebURLSchemeTask.cpp: (WebKit::WebURLSchemeTask::create): (WebKit::WebURLSchemeTask::WebURLSchemeTask): (WebKit::WebURLSchemeTask::didPerformRedirection): (WebKit::WebURLSchemeTask::didReceiveResponse): (WebKit::WebURLSchemeTask::didReceiveData): (WebKit::WebURLSchemeTask::didComplete): (WebKit::WebURLSchemeTask::pageDestroyed): * UIProcess/WebURLSchemeTask.h: Pass the process when constructing a WebURLSchemeTask and store it as a data member in addition to the page. This is necessary now that a WebPageProxy can be associated with several WebProcesses. * UIProcess/ios/ViewGestureControllerIOS.mm: (WebKit::ViewGestureController::endSwipeGesture): Use the provisional drawing area to display the swipe snapshot as it may differ from the one currently associated with the page in case of process swap. * WebKit.xcodeproj/project.pbxproj: Add ProvisionalPageProxy class. * WebProcess/WebPage/WebFrame.cpp: (WebKit::toPolicyAction): (WebKit::WebFrame::didReceivePolicyDecision): * WebProcess/WebPage/WebPage.cpp: (WebKit::m_shouldAttachDrawingAreaOnPageTransition): (WebKit::WebPage::reinitializeWebPage): (WebKit::WebPage::didReceivePolicyDecision): Stop dealing with WebPolicyAction::Suspend as it no longer exists. (WebKit::WebPage::didCompletePageTransition): (WebKit::WebPage::setIsSuspended): Suspend the Page when setIsSuspended(true) is called, now that there is no longer a WebPolicyAction::Suspend. setIsSuspended(true) IPC is sent when we actually commit the provisional page. * WebProcess/WebPage/WebPage.h: Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: (-[PSONNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]): LayoutTests: Skip test testing the cross-process DOMWindow API as I broke it with this patch. The feature is far from ready and off by default anyway. I will add support back in a follow-up. * platform/wk2/TestExpectations: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240046 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-16 Chris Dumez <cdumez@apple.com> Regression(PSON) View becomes blank after click a cross-site download link https://bugs.webkit.org/show_bug.cgi?id=193361 <rdar://problem/47099573> Reviewed by Geoffrey Garen. The issue tracked by rdar://problem/47099573 is that a provisional load may get canceled (or converted into a download) *after* we've decided to process-swap. In such cases, the view should keep displaying the current site and it should still be interactive. However, with the previous PSON model, the view (pageProxy) would have already swapped to the new process and would end up displaying the initially empty document. To address the issue, this patch introduces the concept of a provisional load in the UIProcess, handled by a ProvisionalPageProxy which has its own privisional process. The WebPageProxy owns the ProvisionalPageProxy but we do not commit the provisional page until after the load was committed in the new process. This means that the view / WebPageProxy keeps using the old process and displays the current content until a load has committed in the provisional page. If no load commits in the provisional process (e.g. because the load is cancelled or converted into a download), then we merely destroy the ProvisionalPageProxy and terminate its process, without impacting the WebPageProxy. * Shared/WebPageCreationParameters.cpp: (WebKit::WebPageCreationParameters::encode const): (WebKit::WebPageCreationParameters::decode): * Shared/WebPageCreationParameters.h: Rename isSwapFromSuspended to isProcessSwap for clarity as we always want to delay attaching the drawing area in case of a process-swap, no matter what now that the previous process is kept alive until the provisional load is committed in the new process. * Shared/WebPolicyAction.h: Drop Suspend policy action. At decidePolicyForNavigationAction time, in case of process-swap, we now tell the previous process to simply ignore the load, while we create a ProvisionalPageProxy to do the new load in a new process. Suspension of the previous page in the old process, happens later, when a load is actually committed in the new process. * Sources.txt: Add new ProvisionalPageProxy file. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _killWebContentProcessAndResetState]): When calling _killWebContentProcessAndResetState on a WKWebView, kill both the current process and the provisional one, to maintain previous behavior in our API tests. * UIProcess/API/gtk/PageClientImpl.cpp: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/API/gtk/PageClientImpl.h: * UIProcess/API/wpe/PageClientImpl.cpp: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/API/wpe/PageClientImpl.h: * UIProcess/AcceleratedDrawingAreaProxy.cpp: (WebKit::AcceleratedDrawingAreaProxy::AcceleratedDrawingAreaProxy): (WebKit::AcceleratedDrawingAreaProxy::didUpdateBackingStoreState): (WebKit::AcceleratedDrawingAreaProxy::sendUpdateBackingStoreState): (WebKit::AcceleratedDrawingAreaProxy::waitForAndDispatchDidUpdateBackingStoreState): (WebKit::AcceleratedDrawingAreaProxy::setNativeSurfaceHandleForCompositing): (WebKit::AcceleratedDrawingAreaProxy::destroyNativeSurfaceHandleForCompositing): * UIProcess/AcceleratedDrawingAreaProxy.h: * UIProcess/Cocoa/WebViewImpl.h: * UIProcess/Cocoa/WebViewImpl.mm: (WebKit::WebViewImpl::createDrawingAreaProxy): * UIProcess/DrawingAreaProxy.cpp: (WebKit::DrawingAreaProxy::DrawingAreaProxy): (WebKit::DrawingAreaProxy::~DrawingAreaProxy): (WebKit::DrawingAreaProxy::viewExposedRectChangedTimerFired): * UIProcess/DrawingAreaProxy.h: (WebKit::DrawingAreaProxy::process): * UIProcess/DrawingAreaProxyImpl.cpp: (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl): (WebKit::DrawingAreaProxyImpl::update): * UIProcess/DrawingAreaProxyImpl.h: * UIProcess/PageClient.h: * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h: * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm: (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy): (WebKit::RemoteLayerTreeDrawingAreaProxy::~RemoteLayerTreeDrawingAreaProxy): (WebKit::RemoteLayerTreeDrawingAreaProxy::deviceScaleFactorDidChange): (WebKit::RemoteLayerTreeDrawingAreaProxy::sendUpdateGeometry): (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidStart): (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidEnd): (WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay): (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateActivityState): (WebKit::RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing): * UIProcess/ios/PageClientImplIOS.h: * UIProcess/ios/PageClientImplIOS.mm: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/ios/WKContentView.h: * UIProcess/ios/WKContentView.mm: (-[WKContentView _createDrawingAreaProxy:]): * UIProcess/mac/PageClientImplMac.h: * UIProcess/mac/PageClientImplMac.mm: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h: * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm: (WebKit::TiledCoreAnimationDrawingAreaProxy::TiledCoreAnimationDrawingAreaProxy): (WebKit::TiledCoreAnimationDrawingAreaProxy::deviceScaleFactorDidChange): (WebKit::TiledCoreAnimationDrawingAreaProxy::colorSpaceDidChange): (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForDidUpdateActivityState): (WebKit::TiledCoreAnimationDrawingAreaProxy::createFence): (WebKit::TiledCoreAnimationDrawingAreaProxy::sendUpdateGeometry): (WebKit::TiledCoreAnimationDrawingAreaProxy::adjustTransientZoom): (WebKit::TiledCoreAnimationDrawingAreaProxy::commitTransientZoom): (WebKit::TiledCoreAnimationDrawingAreaProxy::dispatchAfterEnsuringDrawing): * UIProcess/mac/WebPageProxyMac.mm: * UIProcess/win/PageClientImpl.cpp: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/win/PageClientImpl.h: * UIProcess/win/PageClientImpl.cpp: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/win/PageClientImpl.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): Pass the drawing area's associated process when constructing it and store it as a member in addition to the page. This is necessary now that a page can be associated with 2 WebProcesses at a time, each having its own drawing area. * UIProcess/Cocoa/WebPageProxyCocoa.mm: (WebKit::WebPageProxy::createSandboxExtensionsIfNeeded): Pass the process. * UIProcess/ProvisionalPageProxy.cpp: Added. (WebKit::ProvisionalPageProxy::ProvisionalPageProxy): (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy): (WebKit::ProvisionalPageProxy::processDidTerminate): (WebKit::ProvisionalPageProxy::takeDrawingArea): (WebKit::ProvisionalPageProxy::cancel): (WebKit::ProvisionalPageProxy::processDidFinishLaunching): (WebKit::ProvisionalPageProxy::finishInitializingWebPageAfterProcessLaunch): (WebKit::ProvisionalPageProxy::initializeWebPage): (WebKit::ProvisionalPageProxy::loadData): (WebKit::ProvisionalPageProxy::loadRequest): (WebKit::ProvisionalPageProxy::goToBackForwardItem): (WebKit::ProvisionalPageProxy::didCreateMainFrame): (WebKit::ProvisionalPageProxy::didPerformClientRedirect): (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didCommitLoadForFrame): (WebKit::ProvisionalPageProxy::didNavigateWithNavigationData): (WebKit::ProvisionalPageProxy::didChangeProvisionalURLForFrame): (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync): (WebKit::ProvisionalPageProxy::decidePolicyForResponse): (WebKit::ProvisionalPageProxy::startURLSchemeTask): (WebKit::ProvisionalPageProxy::backForwardGoToItem): (WebKit::ProvisionalPageProxy::didReceiveMessage): (WebKit::ProvisionalPageProxy::didReceiveSyncMessage): * UIProcess/ProvisionalPageProxy.h: Added. (WebKit::ProvisionalPageProxy::page): (WebKit::ProvisionalPageProxy::mainFrame const): (WebKit::ProvisionalPageProxy::process): (WebKit::ProvisionalPageProxy::processSwapRequestedByClient const): (WebKit::ProvisionalPageProxy::navigationID const): (WebKit::ProvisionalPageProxy::drawingArea const): New WebPageProxy-like class which is owned by the WebPageProxy and proxies IPC from the provisional process. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::~SuspendedPageProxy): (WebKit::SuspendedPageProxy::unsuspend): (WebKit::SuspendedPageProxy::didProcessRequestToSuspend): Unregister the SuspendedPageProxy as an IPC message receiver a little bit earlier when we're going to unsuspend it. This avoids conflicting with the ProvisionalPageProxy which tries to register itself as an IPC message receiver for the same pageID when a process-swap occurs and we're switching to a suspended page. * UIProcess/WebFrameProxy.cpp: (WebKit::WebFrameProxy::isMainFrame const): WebFrameProxy::isMainFrame() relies on checking that the frame is the WebPageProxy's m_mainFrame. Now that the WebPageProxy can have a ProvisionalPageProxy, also check if it is the ProvisionalPageProxy's m_mainFrame to maintain previous behavior. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::provisionalDrawingArea const): Add getter for the provisional drawing area. We normally only deal with the page's current drawing area, but the ViewGestureController needs access to the provisional once to display the swipe gesture snapshot. (WebKit::WebPageProxy::swapToWebProcess): swapToWebProcess() no longer takes care of unsuspending the SuspendedPage because we now call swapToWebProcess() later, when a load is actually committed in the provisional page / process. swapToWebProcess() now also needs to initialize some data members such as the drawing area and the main frame as it is transferring them over from the ProvisionalPageProxy which started the provisional load. (WebKit::WebPageProxy::finishAttachingToWebProcess): We no longer need IsSwapFromSuspended parameter as this is called later now, after a load has actually been committed in the provisional process. (WebKit::WebPageProxy::setDrawingArea): (WebKit::WebPageProxy::initializeWebPage): - We no longer need IsSwapFromSuspended parameter as this is called later now, after a load has actually been committed in the provisional process. - Factor some code out to WebPageProxy::setDrawingArea() so that it can be shared with swapToWebProcess(). (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle): (WebKit::WebPageProxy::loadRequest): (WebKit::WebPageProxy::loadRequestWithNavigationShared): Only call setPendingAPIRequestURL() in loadRequestWithNavigation() only if ShouldTreatAsContinuingLoad is not Yes. This avoids hitting some assertions as this was already called during the first API call if needed. (WebKit::WebPageProxy::loadData): (WebKit::WebPageProxy::loadDataWithNavigationShared): (WebKit::WebPageProxy::stopLoading): (WebKit::WebPageProxy::reload): (WebKit::WebPageProxy::didPerformDragControllerAction): (WebKit::WebPageProxy::findPlugin): (WebKit::WebPageProxy::receivedNavigationPolicyDecision): In case of process swap, tell the previous process to ignore the load instead of suspending it right away. Suspension now happens later, only if we end up committing the provisional load in the new process. Also discard the SuspendedPage if it failed to suspend (we only reuse its process in this case). This used to happen a bit later but it is clearer if we do this as early as possible I think. (WebKit::WebPageProxy::commitProvisionalPage): When the load is committed in the new process, we call WebPageProxy::commitProvisionalPage(). It takes care of: - Actually swapping the WebPageProxy to the new process by calling processDidTerminate() / swapToWebProcess(). - Suspending the current page. - Letting the client know the load is comitted - Destroy the ProvisionalPageProxy. This work used to happen earlier in continueNavigationInNewProcess(). (WebKit::WebPageProxy::continueNavigationInNewProcess): Moved some of the logic to commitProvisionalPage(). We now merely start the load in a new ProvisionalPageProxy, without actually having the WebPageProxy switch to the new process yet. (WebKit::WebPageProxy::didCreateMainFrame): (WebKit::WebPageProxy::didCreateSubframe): (WebKit::WebPageProxy::didCreateWindow): Drop some code that is no longer needed, now that the ProvisionalPageProxy takes care of this. (WebKit::WebPageProxy::didDestroyNavigation): On process-swap, when telling the previous process to ignore the load and starting the new load in a new ProvisionalPageProxy, the previous WebPage attempts to destroy the navigation. In this case, we ignore the call since the navigation is merely taken over by the ProvisionalPageProxy. (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared): Moved some PSON logic to the ProvisionalPageProxy instead. (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame): (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrameShared): (WebKit::WebPageProxy::willPerformClientRedirectForFrame): (WebKit::WebPageProxy::didCancelClientRedirectForFrame): (WebKit::WebPageProxy::didChangeProvisionalURLForFrame): (WebKit::WebPageProxy::didChangeProvisionalURLForFrameShared): (WebKit::WebPageProxy::didFailProvisionalLoadForFrame): (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared): When didFailProvisionalLoadForFrame() is called for a ProvisionalPageProxy, destroy it. (WebKit::WebPageProxy::didCommitLoadForFrame): (WebKit::WebPageProxy::didFinishDocumentLoadForFrame): (WebKit::WebPageProxy::didFinishLoadForFrame): (WebKit::WebPageProxy::didFailLoadForFrame): (WebKit::WebPageProxy::didSameDocumentNavigationForFrame): (WebKit::WebPageProxy::didReceiveTitleForFrame): (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame): (WebKit::WebPageProxy::didDisplayInsecureContentForFrame): (WebKit::WebPageProxy::didRunInsecureContentForFrame): (WebKit::WebPageProxy::frameDidBecomeFrameSet): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared): (WebKit::WebPageProxy::decidePolicyForNavigationAction): (WebKit::WebPageProxy::decidePolicyForNavigationActionSync): (WebKit::WebPageProxy::decidePolicyForNewWindowAction): (WebKit::WebPageProxy::decidePolicyForResponse): (WebKit::WebPageProxy::decidePolicyForResponseShared): (WebKit::WebPageProxy::unableToImplementPolicy): (WebKit::WebPageProxy::willSubmitForm): (WebKit::WebPageProxy::didNavigateWithNavigationData): (WebKit::WebPageProxy::didNavigateWithNavigationDataShared): (WebKit::WebPageProxy::didPerformClientRedirect): (WebKit::WebPageProxy::didPerformClientRedirectShared): (WebKit::WebPageProxy::didPerformServerRedirect): (WebKit::WebPageProxy::didUpdateHistoryTitle): (WebKit::WebPageProxy::createNewPage): (WebKit::WebPageProxy::runJavaScriptAlert): (WebKit::WebPageProxy::runJavaScriptConfirm): (WebKit::WebPageProxy::runJavaScriptPrompt): (WebKit::WebPageProxy::unavailablePluginButtonClicked): (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel): (WebKit::WebPageProxy::runOpenPanel): (WebKit::WebPageProxy::printFrame): (WebKit::WebPageProxy::backForwardGoToItem): (WebKit::WebPageProxy::backForwardGoToItemShared): (WebKit::WebPageProxy::learnWord): (WebKit::WebPageProxy::ignoreWord): (WebKit::WebPageProxy::didReceiveEvent): (WebKit::WebPageProxy::editingRangeCallback): (WebKit::WebPageProxy::rectForCharacterRangeCallback): (WebKit::WebPageProxy::focusedFrameChanged): (WebKit::WebPageProxy::frameSetLargestFrameChanged): (WebKit::WebPageProxy::provisionalProcessDidTerminate): Cancel the provisiona load and destroy the ProvisionalPageProxy if the provisional process crashes. (WebKit::WebPageProxy::resetState): Drop some code that is no longer needed. (WebKit::WebPageProxy::creationParameters): - Move the hasRegisteredServiceWorkers flag initialization from the call site to here now that we have more than one call site. This was just some bad factoring. - Take the process in parameter now that we page can be associated with several processes at a time. (WebKit::WebPageProxy::exceededDatabaseQuota): (WebKit::WebPageProxy::requestGeolocationPermissionForFrame): (WebKit::WebPageProxy::requestUserMediaPermissionForFrame): (WebKit::WebPageProxy::enumerateMediaDevicesForFrame): (WebKit::WebPageProxy::startURLSchemeTask): (WebKit::WebPageProxy::startURLSchemeTaskShared): (WebKit::WebPageProxy::stopURLSchemeTask): (WebKit::WebPageProxy::loadSynchronousURLSchemeTask): (WebKit::WebPageProxy::checkURLReceivedFromCurrentOrPreviousWebProcess): (WebKit::WebPageProxy::willAcquireUniversalFileReadSandboxExtension): * UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::visitedLinkStore): (WebKit::WebPageProxy::provisionalPageProxy const): * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::hasProvisionalPageWithID const): (WebKit::WebProcessProxy::updateBackForwardItem): (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch): (WebKit::WebProcessProxy::didFinishLaunching): (WebKit::WebProcessProxy::canTerminateChildProcess): * UIProcess/WebProcessProxy.h: (WebKit::WebProcessProxy::addProvisionalPageProxy): (WebKit::WebProcessProxy::removeProvisionalPageProxy): Before updating a BackForwardListItem, we normally make sure the process has a WebPageProxy with the item's pageID. We have to tweak the logic because there may now be no WebPageProxy with this pageID associated with this process yet, because it is still a ProvisionalPageProxy. * UIProcess/WebURLSchemeHandler.cpp: (WebKit::WebURLSchemeHandler::startTask): * UIProcess/WebURLSchemeHandler.h: * UIProcess/WebURLSchemeTask.cpp: (WebKit::WebURLSchemeTask::create): (WebKit::WebURLSchemeTask::WebURLSchemeTask): (WebKit::WebURLSchemeTask::didPerformRedirection): (WebKit::WebURLSchemeTask::didReceiveResponse): (WebKit::WebURLSchemeTask::didReceiveData): (WebKit::WebURLSchemeTask::didComplete): (WebKit::WebURLSchemeTask::pageDestroyed): * UIProcess/WebURLSchemeTask.h: Pass the process when constructing a WebURLSchemeTask and store it as a data member in addition to the page. This is necessary now that a WebPageProxy can be associated with several WebProcesses. * UIProcess/ios/ViewGestureControllerIOS.mm: (WebKit::ViewGestureController::endSwipeGesture): Use the provisional drawing area to display the swipe snapshot as it may differ from the one currently associated with the page in case of process swap. * WebKit.xcodeproj/project.pbxproj: Add ProvisionalPageProxy class. * WebProcess/WebPage/WebFrame.cpp: (WebKit::toPolicyAction): (WebKit::WebFrame::didReceivePolicyDecision): * WebProcess/WebPage/WebPage.cpp: (WebKit::m_shouldAttachDrawingAreaOnPageTransition): (WebKit::WebPage::reinitializeWebPage): (WebKit::WebPage::didReceivePolicyDecision): Stop dealing with WebPolicyAction::Suspend as it no longer exists. (WebKit::WebPage::didCompletePageTransition): (WebKit::WebPage::setIsSuspended): Suspend the Page when setIsSuspended(true) is called, now that there is no longer a WebPolicyAction::Suspend. setIsSuspended(true) IPC is sent when we actually commit the provisional page. * WebProcess/WebPage/WebPage.h: 2019-01-22 Alan Coon <alancoon@apple.com> Revert r240258. rdar://problem/47099573 2019-01-22 Alan Coon <alancoon@apple.com> Revert r240259. rdar://problem/47099573 2019-01-22 Alan Coon <alancoon@apple.com> Revert r240260. rdar://problem/47099573 2019-01-22 Alan Coon <alancoon@apple.com> Revert r240262. rdar://problem/47099573 2019-01-22 Alan Coon <alancoon@apple.com> Revert r240263. rdar://problem/47099573 2019-01-22 Alan Coon <alancoon@apple.com> Revert r240264. rdar://problem/47099573 2019-01-22 Alan Coon <alancoon@apple.com> Cherry-pick r240055. rdar://problem/47099573 Regression(r240046) Several API tests are crashing https://bugs.webkit.org/show_bug.cgi?id=193509 Reviewed by Geoffrey Garen. The crashes would happen because loadRequestShared() would take a WebProcessProxy& in parameter but then call reattachToWebProcess() if the page is not valid, which would replace m_process and invalidate our process reference. To address the issue, move the reattachToWebProcess() call to loadRequest(), before calling loadRequestShared(). Also, update *Shared() methods to take a Ref<WebProcessProxy>&& instead of a WebProcessProxy& in parameter. Since we call client delegates, we need to make sure our process stays alive. * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::loadData): (WebKit::ProvisionalPageProxy::loadRequest): (WebKit::ProvisionalPageProxy::didCreateMainFrame): (WebKit::ProvisionalPageProxy::didPerformClientRedirect): (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didNavigateWithNavigationData): (WebKit::ProvisionalPageProxy::didChangeProvisionalURLForFrame): (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync): (WebKit::ProvisionalPageProxy::decidePolicyForResponse): (WebKit::ProvisionalPageProxy::startURLSchemeTask): (WebKit::ProvisionalPageProxy::backForwardGoToItem): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::loadRequest): (WebKit::WebPageProxy::loadRequestWithNavigationShared): (WebKit::WebPageProxy::loadData): (WebKit::WebPageProxy::loadDataWithNavigationShared): (WebKit::WebPageProxy::didPerformDragControllerAction): (WebKit::WebPageProxy::findPlugin): (WebKit::WebPageProxy::didCreateMainFrame): (WebKit::WebPageProxy::didCreateSubframe): (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared): (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame): (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrameShared): (WebKit::WebPageProxy::willPerformClientRedirectForFrame): (WebKit::WebPageProxy::didCancelClientRedirectForFrame): (WebKit::WebPageProxy::didChangeProvisionalURLForFrame): (WebKit::WebPageProxy::didChangeProvisionalURLForFrameShared): (WebKit::WebPageProxy::didFailProvisionalLoadForFrame): (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared): (WebKit::WebPageProxy::didCommitLoadForFrame): (WebKit::WebPageProxy::didFinishDocumentLoadForFrame): (WebKit::WebPageProxy::didFinishLoadForFrame): (WebKit::WebPageProxy::didFailLoadForFrame): (WebKit::WebPageProxy::didSameDocumentNavigationForFrame): (WebKit::WebPageProxy::didReceiveTitleForFrame): (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame): (WebKit::WebPageProxy::didDisplayInsecureContentForFrame): (WebKit::WebPageProxy::didRunInsecureContentForFrame): (WebKit::WebPageProxy::frameDidBecomeFrameSet): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared): (WebKit::WebPageProxy::decidePolicyForNavigationAction): (WebKit::WebPageProxy::decidePolicyForNavigationActionSync): (WebKit::WebPageProxy::decidePolicyForNewWindowAction): (WebKit::WebPageProxy::decidePolicyForResponse): (WebKit::WebPageProxy::decidePolicyForResponseShared): (WebKit::WebPageProxy::unableToImplementPolicy): (WebKit::WebPageProxy::willSubmitForm): (WebKit::WebPageProxy::didNavigateWithNavigationData): (WebKit::WebPageProxy::didNavigateWithNavigationDataShared): (WebKit::WebPageProxy::didPerformClientRedirect): (WebKit::WebPageProxy::didPerformClientRedirectShared): (WebKit::WebPageProxy::didPerformServerRedirect): (WebKit::WebPageProxy::didUpdateHistoryTitle): (WebKit::WebPageProxy::createNewPage): (WebKit::WebPageProxy::runJavaScriptAlert): (WebKit::WebPageProxy::runJavaScriptConfirm): (WebKit::WebPageProxy::runJavaScriptPrompt): (WebKit::WebPageProxy::unavailablePluginButtonClicked): (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel): (WebKit::WebPageProxy::runOpenPanel): (WebKit::WebPageProxy::printFrame): (WebKit::WebPageProxy::backForwardGoToItem): (WebKit::WebPageProxy::backForwardGoToItemShared): (WebKit::WebPageProxy::learnWord): (WebKit::WebPageProxy::ignoreWord): (WebKit::WebPageProxy::didReceiveEvent): (WebKit::WebPageProxy::editingRangeCallback): (WebKit::WebPageProxy::rectForCharacterRangeCallback): (WebKit::WebPageProxy::focusedFrameChanged): (WebKit::WebPageProxy::frameSetLargestFrameChanged): (WebKit::WebPageProxy::exceededDatabaseQuota): (WebKit::WebPageProxy::requestGeolocationPermissionForFrame): (WebKit::WebPageProxy::requestUserMediaPermissionForFrame): (WebKit::WebPageProxy::enumerateMediaDevicesForFrame): (WebKit::WebPageProxy::startURLSchemeTask): (WebKit::WebPageProxy::startURLSchemeTaskShared): (WebKit::WebPageProxy::stopURLSchemeTask): (WebKit::WebPageProxy::loadSynchronousURLSchemeTask): * UIProcess/WebPageProxy.h: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240055 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-16 Chris Dumez <cdumez@apple.com> Regression(r240046) Several API tests are crashing https://bugs.webkit.org/show_bug.cgi?id=193509 Reviewed by Geoffrey Garen. The crashes would happen because loadRequestShared() would take a WebProcessProxy& in parameter but then call reattachToWebProcess() if the page is not valid, which would replace m_process and invalidate our process reference. To address the issue, move the reattachToWebProcess() call to loadRequest(), before calling loadRequestShared(). Also, update *Shared() methods to take a Ref<WebProcessProxy>&& instead of a WebProcessProxy& in parameter. Since we call client delegates, we need to make sure our process stays alive. * UIProcess/ProvisionalPageProxy.cpp: (WebKit::ProvisionalPageProxy::loadData): (WebKit::ProvisionalPageProxy::loadRequest): (WebKit::ProvisionalPageProxy::didCreateMainFrame): (WebKit::ProvisionalPageProxy::didPerformClientRedirect): (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didNavigateWithNavigationData): (WebKit::ProvisionalPageProxy::didChangeProvisionalURLForFrame): (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync): (WebKit::ProvisionalPageProxy::decidePolicyForResponse): (WebKit::ProvisionalPageProxy::startURLSchemeTask): (WebKit::ProvisionalPageProxy::backForwardGoToItem): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::loadRequest): (WebKit::WebPageProxy::loadRequestWithNavigationShared): (WebKit::WebPageProxy::loadData): (WebKit::WebPageProxy::loadDataWithNavigationShared): (WebKit::WebPageProxy::didPerformDragControllerAction): (WebKit::WebPageProxy::findPlugin): (WebKit::WebPageProxy::didCreateMainFrame): (WebKit::WebPageProxy::didCreateSubframe): (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared): (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame): (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrameShared): (WebKit::WebPageProxy::willPerformClientRedirectForFrame): (WebKit::WebPageProxy::didCancelClientRedirectForFrame): (WebKit::WebPageProxy::didChangeProvisionalURLForFrame): (WebKit::WebPageProxy::didChangeProvisionalURLForFrameShared): (WebKit::WebPageProxy::didFailProvisionalLoadForFrame): (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared): (WebKit::WebPageProxy::didCommitLoadForFrame): (WebKit::WebPageProxy::didFinishDocumentLoadForFrame): (WebKit::WebPageProxy::didFinishLoadForFrame): (WebKit::WebPageProxy::didFailLoadForFrame): (WebKit::WebPageProxy::didSameDocumentNavigationForFrame): (WebKit::WebPageProxy::didReceiveTitleForFrame): (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame): (WebKit::WebPageProxy::didDisplayInsecureContentForFrame): (WebKit::WebPageProxy::didRunInsecureContentForFrame): (WebKit::WebPageProxy::frameDidBecomeFrameSet): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared): (WebKit::WebPageProxy::decidePolicyForNavigationAction): (WebKit::WebPageProxy::decidePolicyForNavigationActionSync): (WebKit::WebPageProxy::decidePolicyForNewWindowAction): (WebKit::WebPageProxy::decidePolicyForResponse): (WebKit::WebPageProxy::decidePolicyForResponseShared): (WebKit::WebPageProxy::unableToImplementPolicy): (WebKit::WebPageProxy::willSubmitForm): (WebKit::WebPageProxy::didNavigateWithNavigationData): (WebKit::WebPageProxy::didNavigateWithNavigationDataShared): (WebKit::WebPageProxy::didPerformClientRedirect): (WebKit::WebPageProxy::didPerformClientRedirectShared): (WebKit::WebPageProxy::didPerformServerRedirect): (WebKit::WebPageProxy::didUpdateHistoryTitle): (WebKit::WebPageProxy::createNewPage): (WebKit::WebPageProxy::runJavaScriptAlert): (WebKit::WebPageProxy::runJavaScriptConfirm): (WebKit::WebPageProxy::runJavaScriptPrompt): (WebKit::WebPageProxy::unavailablePluginButtonClicked): (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel): (WebKit::WebPageProxy::runOpenPanel): (WebKit::WebPageProxy::printFrame): (WebKit::WebPageProxy::backForwardGoToItem): (WebKit::WebPageProxy::backForwardGoToItemShared): (WebKit::WebPageProxy::learnWord): (WebKit::WebPageProxy::ignoreWord): (WebKit::WebPageProxy::didReceiveEvent): (WebKit::WebPageProxy::editingRangeCallback): (WebKit::WebPageProxy::rectForCharacterRangeCallback): (WebKit::WebPageProxy::focusedFrameChanged): (WebKit::WebPageProxy::frameSetLargestFrameChanged): (WebKit::WebPageProxy::exceededDatabaseQuota): (WebKit::WebPageProxy::requestGeolocationPermissionForFrame): (WebKit::WebPageProxy::requestUserMediaPermissionForFrame): (WebKit::WebPageProxy::enumerateMediaDevicesForFrame): (WebKit::WebPageProxy::startURLSchemeTask): (WebKit::WebPageProxy::startURLSchemeTaskShared): (WebKit::WebPageProxy::stopURLSchemeTask): (WebKit::WebPageProxy::loadSynchronousURLSchemeTask): * UIProcess/WebPageProxy.h: 2019-01-22 Alan Coon <alancoon@apple.com> Cherry-pick r240046. rdar://problem/47099573 Regression(PSON) View becomes blank after click a cross-site download link https://bugs.webkit.org/show_bug.cgi?id=193361 <rdar://problem/47099573> Reviewed by Geoffrey Garen. Source/WebCore: * loader/FrameLoader.cpp: (WebCore::FrameLoader::commitProvisionalLoad): When restoring from PageCache, make sure we notify the client that the load was committed *before* we tell it that the navigation is complete. This would confuse the ProvisionalPageProxy logic in the UIProcess. Source/WebKit: The issue tracked by rdar://problem/47099573 is that a provisional load may get canceled (or converted into a download) *after* we've decided to process-swap. In such cases, the view should keep displaying the current site and it should still be interactive. However, with the previous PSON model, the view (pageProxy) would have already swapped to the new process and would end up displaying the initially empty document. To address the issue, this patch introduces the concept of a provisional load in the UIProcess, handled by a ProvisionalPageProxy which has its own privisional process. The WebPageProxy owns the ProvisionalPageProxy but we do not commit the provisional page until after the load was committed in the new process. This means that the view / WebPageProxy keeps using the old process and displays the current content until a load has committed in the provisional page. If no load commits in the provisional process (e.g. because the load is cancelled or converted into a download), then we merely destroy the ProvisionalPageProxy and terminate its process, without impacting the WebPageProxy. * Shared/WebPageCreationParameters.cpp: (WebKit::WebPageCreationParameters::encode const): (WebKit::WebPageCreationParameters::decode): * Shared/WebPageCreationParameters.h: Rename isSwapFromSuspended to isProcessSwap for clarity as we always want to delay attaching the drawing area in case of a process-swap, no matter what now that the previous process is kept alive until the provisional load is committed in the new process. * Shared/WebPolicyAction.h: Drop Suspend policy action. At decidePolicyForNavigationAction time, in case of process-swap, we now tell the previous process to simply ignore the load, while we create a ProvisionalPageProxy to do the new load in a new process. Suspension of the previous page in the old process, happens later, when a load is actually committed in the new process. * Sources.txt: Add new ProvisionalPageProxy file. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _killWebContentProcessAndResetState]): When calling _killWebContentProcessAndResetState on a WKWebView, kill both the current process and the provisional one, to maintain previous behavior in our API tests. * UIProcess/API/gtk/PageClientImpl.cpp: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/API/gtk/PageClientImpl.h: * UIProcess/API/wpe/PageClientImpl.cpp: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/API/wpe/PageClientImpl.h: * UIProcess/AcceleratedDrawingAreaProxy.cpp: (WebKit::AcceleratedDrawingAreaProxy::AcceleratedDrawingAreaProxy): (WebKit::AcceleratedDrawingAreaProxy::didUpdateBackingStoreState): (WebKit::AcceleratedDrawingAreaProxy::sendUpdateBackingStoreState): (WebKit::AcceleratedDrawingAreaProxy::waitForAndDispatchDidUpdateBackingStoreState): (WebKit::AcceleratedDrawingAreaProxy::setNativeSurfaceHandleForCompositing): (WebKit::AcceleratedDrawingAreaProxy::destroyNativeSurfaceHandleForCompositing): * UIProcess/AcceleratedDrawingAreaProxy.h: * UIProcess/Cocoa/WebViewImpl.h: * UIProcess/Cocoa/WebViewImpl.mm: (WebKit::WebViewImpl::createDrawingAreaProxy): * UIProcess/DrawingAreaProxy.cpp: (WebKit::DrawingAreaProxy::DrawingAreaProxy): (WebKit::DrawingAreaProxy::~DrawingAreaProxy): (WebKit::DrawingAreaProxy::viewExposedRectChangedTimerFired): * UIProcess/DrawingAreaProxy.h: (WebKit::DrawingAreaProxy::process): * UIProcess/DrawingAreaProxyImpl.cpp: (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl): (WebKit::DrawingAreaProxyImpl::update): * UIProcess/DrawingAreaProxyImpl.h: * UIProcess/PageClient.h: * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h: * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm: (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy): (WebKit::RemoteLayerTreeDrawingAreaProxy::~RemoteLayerTreeDrawingAreaProxy): (WebKit::RemoteLayerTreeDrawingAreaProxy::deviceScaleFactorDidChange): (WebKit::RemoteLayerTreeDrawingAreaProxy::sendUpdateGeometry): (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidStart): (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidEnd): (WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay): (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateActivityState): (WebKit::RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing): * UIProcess/ios/PageClientImplIOS.h: * UIProcess/ios/PageClientImplIOS.mm: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/ios/WKContentView.h: * UIProcess/ios/WKContentView.mm: (-[WKContentView _createDrawingAreaProxy:]): * UIProcess/mac/PageClientImplMac.h: * UIProcess/mac/PageClientImplMac.mm: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h: * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm: (WebKit::TiledCoreAnimationDrawingAreaProxy::TiledCoreAnimationDrawingAreaProxy): (WebKit::TiledCoreAnimationDrawingAreaProxy::deviceScaleFactorDidChange): (WebKit::TiledCoreAnimationDrawingAreaProxy::colorSpaceDidChange): (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForDidUpdateActivityState): (WebKit::TiledCoreAnimationDrawingAreaProxy::createFence): (WebKit::TiledCoreAnimationDrawingAreaProxy::sendUpdateGeometry): (WebKit::TiledCoreAnimationDrawingAreaProxy::adjustTransientZoom): (WebKit::TiledCoreAnimationDrawingAreaProxy::commitTransientZoom): (WebKit::TiledCoreAnimationDrawingAreaProxy::dispatchAfterEnsuringDrawing): * UIProcess/mac/WebPageProxyMac.mm: * UIProcess/win/PageClientImpl.cpp: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/win/PageClientImpl.h: * UIProcess/win/PageClientImpl.cpp: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/win/PageClientImpl.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): Pass the drawing area's associated process when constructing it and store it as a member in addition to the page. This is necessary now that a page can be associated with 2 WebProcesses at a time, each having its own drawing area. * UIProcess/Cocoa/WebPageProxyCocoa.mm: (WebKit::WebPageProxy::createSandboxExtensionsIfNeeded): Pass the process. * UIProcess/ProvisionalPageProxy.cpp: Added. (WebKit::ProvisionalPageProxy::ProvisionalPageProxy): (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy): (WebKit::ProvisionalPageProxy::processDidTerminate): (WebKit::ProvisionalPageProxy::takeDrawingArea): (WebKit::ProvisionalPageProxy::cancel): (WebKit::ProvisionalPageProxy::processDidFinishLaunching): (WebKit::ProvisionalPageProxy::finishInitializingWebPageAfterProcessLaunch): (WebKit::ProvisionalPageProxy::initializeWebPage): (WebKit::ProvisionalPageProxy::loadData): (WebKit::ProvisionalPageProxy::loadRequest): (WebKit::ProvisionalPageProxy::goToBackForwardItem): (WebKit::ProvisionalPageProxy::didCreateMainFrame): (WebKit::ProvisionalPageProxy::didPerformClientRedirect): (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didCommitLoadForFrame): (WebKit::ProvisionalPageProxy::didNavigateWithNavigationData): (WebKit::ProvisionalPageProxy::didChangeProvisionalURLForFrame): (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync): (WebKit::ProvisionalPageProxy::decidePolicyForResponse): (WebKit::ProvisionalPageProxy::startURLSchemeTask): (WebKit::ProvisionalPageProxy::backForwardGoToItem): (WebKit::ProvisionalPageProxy::didReceiveMessage): (WebKit::ProvisionalPageProxy::didReceiveSyncMessage): * UIProcess/ProvisionalPageProxy.h: Added. (WebKit::ProvisionalPageProxy::page): (WebKit::ProvisionalPageProxy::mainFrame const): (WebKit::ProvisionalPageProxy::process): (WebKit::ProvisionalPageProxy::processSwapRequestedByClient const): (WebKit::ProvisionalPageProxy::navigationID const): (WebKit::ProvisionalPageProxy::drawingArea const): New WebPageProxy-like class which is owned by the WebPageProxy and proxies IPC from the provisional process. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::~SuspendedPageProxy): (WebKit::SuspendedPageProxy::unsuspend): (WebKit::SuspendedPageProxy::didProcessRequestToSuspend): Unregister the SuspendedPageProxy as an IPC message receiver a little bit earlier when we're going to unsuspend it. This avoids conflicting with the ProvisionalPageProxy which tries to register itself as an IPC message receiver for the same pageID when a process-swap occurs and we're switching to a suspended page. * UIProcess/WebFrameProxy.cpp: (WebKit::WebFrameProxy::isMainFrame const): WebFrameProxy::isMainFrame() relies on checking that the frame is the WebPageProxy's m_mainFrame. Now that the WebPageProxy can have a ProvisionalPageProxy, also check if it is the ProvisionalPageProxy's m_mainFrame to maintain previous behavior. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::provisionalDrawingArea const): Add getter for the provisional drawing area. We normally only deal with the page's current drawing area, but the ViewGestureController needs access to the provisional once to display the swipe gesture snapshot. (WebKit::WebPageProxy::swapToWebProcess): swapToWebProcess() no longer takes care of unsuspending the SuspendedPage because we now call swapToWebProcess() later, when a load is actually committed in the provisional page / process. swapToWebProcess() now also needs to initialize some data members such as the drawing area and the main frame as it is transferring them over from the ProvisionalPageProxy which started the provisional load. (WebKit::WebPageProxy::finishAttachingToWebProcess): We no longer need IsSwapFromSuspended parameter as this is called later now, after a load has actually been committed in the provisional process. (WebKit::WebPageProxy::setDrawingArea): (WebKit::WebPageProxy::initializeWebPage): - We no longer need IsSwapFromSuspended parameter as this is called later now, after a load has actually been committed in the provisional process. - Factor some code out to WebPageProxy::setDrawingArea() so that it can be shared with swapToWebProcess(). (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle): (WebKit::WebPageProxy::loadRequest): (WebKit::WebPageProxy::loadRequestWithNavigationShared): Only call setPendingAPIRequestURL() in loadRequestWithNavigation() only if ShouldTreatAsContinuingLoad is not Yes. This avoids hitting some assertions as this was already called during the first API call if needed. (WebKit::WebPageProxy::loadData): (WebKit::WebPageProxy::loadDataWithNavigationShared): (WebKit::WebPageProxy::stopLoading): (WebKit::WebPageProxy::reload): (WebKit::WebPageProxy::didPerformDragControllerAction): (WebKit::WebPageProxy::findPlugin): (WebKit::WebPageProxy::receivedNavigationPolicyDecision): In case of process swap, tell the previous process to ignore the load instead of suspending it right away. Suspension now happens later, only if we end up committing the provisional load in the new process. Also discard the SuspendedPage if it failed to suspend (we only reuse its process in this case). This used to happen a bit later but it is clearer if we do this as early as possible I think. (WebKit::WebPageProxy::commitProvisionalPage): When the load is committed in the new process, we call WebPageProxy::commitProvisionalPage(). It takes care of: - Actually swapping the WebPageProxy to the new process by calling processDidTerminate() / swapToWebProcess(). - Suspending the current page. - Letting the client know the load is comitted - Destroy the ProvisionalPageProxy. This work used to happen earlier in continueNavigationInNewProcess(). (WebKit::WebPageProxy::continueNavigationInNewProcess): Moved some of the logic to commitProvisionalPage(). We now merely start the load in a new ProvisionalPageProxy, without actually having the WebPageProxy switch to the new process yet. (WebKit::WebPageProxy::didCreateMainFrame): (WebKit::WebPageProxy::didCreateSubframe): (WebKit::WebPageProxy::didCreateWindow): Drop some code that is no longer needed, now that the ProvisionalPageProxy takes care of this. (WebKit::WebPageProxy::didDestroyNavigation): On process-swap, when telling the previous process to ignore the load and starting the new load in a new ProvisionalPageProxy, the previous WebPage attempts to destroy the navigation. In this case, we ignore the call since the navigation is merely taken over by the ProvisionalPageProxy. (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared): Moved some PSON logic to the ProvisionalPageProxy instead. (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame): (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrameShared): (WebKit::WebPageProxy::willPerformClientRedirectForFrame): (WebKit::WebPageProxy::didCancelClientRedirectForFrame): (WebKit::WebPageProxy::didChangeProvisionalURLForFrame): (WebKit::WebPageProxy::didChangeProvisionalURLForFrameShared): (WebKit::WebPageProxy::didFailProvisionalLoadForFrame): (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared): When didFailProvisionalLoadForFrame() is called for a ProvisionalPageProxy, destroy it. (WebKit::WebPageProxy::didCommitLoadForFrame): (WebKit::WebPageProxy::didFinishDocumentLoadForFrame): (WebKit::WebPageProxy::didFinishLoadForFrame): (WebKit::WebPageProxy::didFailLoadForFrame): (WebKit::WebPageProxy::didSameDocumentNavigationForFrame): (WebKit::WebPageProxy::didReceiveTitleForFrame): (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame): (WebKit::WebPageProxy::didDisplayInsecureContentForFrame): (WebKit::WebPageProxy::didRunInsecureContentForFrame): (WebKit::WebPageProxy::frameDidBecomeFrameSet): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared): (WebKit::WebPageProxy::decidePolicyForNavigationAction): (WebKit::WebPageProxy::decidePolicyForNavigationActionSync): (WebKit::WebPageProxy::decidePolicyForNewWindowAction): (WebKit::WebPageProxy::decidePolicyForResponse): (WebKit::WebPageProxy::decidePolicyForResponseShared): (WebKit::WebPageProxy::unableToImplementPolicy): (WebKit::WebPageProxy::willSubmitForm): (WebKit::WebPageProxy::didNavigateWithNavigationData): (WebKit::WebPageProxy::didNavigateWithNavigationDataShared): (WebKit::WebPageProxy::didPerformClientRedirect): (WebKit::WebPageProxy::didPerformClientRedirectShared): (WebKit::WebPageProxy::didPerformServerRedirect): (WebKit::WebPageProxy::didUpdateHistoryTitle): (WebKit::WebPageProxy::createNewPage): (WebKit::WebPageProxy::runJavaScriptAlert): (WebKit::WebPageProxy::runJavaScriptConfirm): (WebKit::WebPageProxy::runJavaScriptPrompt): (WebKit::WebPageProxy::unavailablePluginButtonClicked): (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel): (WebKit::WebPageProxy::runOpenPanel): (WebKit::WebPageProxy::printFrame): (WebKit::WebPageProxy::backForwardGoToItem): (WebKit::WebPageProxy::backForwardGoToItemShared): (WebKit::WebPageProxy::learnWord): (WebKit::WebPageProxy::ignoreWord): (WebKit::WebPageProxy::didReceiveEvent): (WebKit::WebPageProxy::editingRangeCallback): (WebKit::WebPageProxy::rectForCharacterRangeCallback): (WebKit::WebPageProxy::focusedFrameChanged): (WebKit::WebPageProxy::frameSetLargestFrameChanged): (WebKit::WebPageProxy::provisionalProcessDidTerminate): Cancel the provisiona load and destroy the ProvisionalPageProxy if the provisional process crashes. (WebKit::WebPageProxy::resetState): Drop some code that is no longer needed. (WebKit::WebPageProxy::creationParameters): - Move the hasRegisteredServiceWorkers flag initialization from the call site to here now that we have more than one call site. This was just some bad factoring. - Take the process in parameter now that we page can be associated with several processes at a time. (WebKit::WebPageProxy::exceededDatabaseQuota): (WebKit::WebPageProxy::requestGeolocationPermissionForFrame): (WebKit::WebPageProxy::requestUserMediaPermissionForFrame): (WebKit::WebPageProxy::enumerateMediaDevicesForFrame): (WebKit::WebPageProxy::startURLSchemeTask): (WebKit::WebPageProxy::startURLSchemeTaskShared): (WebKit::WebPageProxy::stopURLSchemeTask): (WebKit::WebPageProxy::loadSynchronousURLSchemeTask): (WebKit::WebPageProxy::checkURLReceivedFromCurrentOrPreviousWebProcess): (WebKit::WebPageProxy::willAcquireUniversalFileReadSandboxExtension): * UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::visitedLinkStore): (WebKit::WebPageProxy::provisionalPageProxy const): * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::hasProvisionalPageWithID const): (WebKit::WebProcessProxy::updateBackForwardItem): (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch): (WebKit::WebProcessProxy::didFinishLaunching): (WebKit::WebProcessProxy::canTerminateChildProcess): * UIProcess/WebProcessProxy.h: (WebKit::WebProcessProxy::addProvisionalPageProxy): (WebKit::WebProcessProxy::removeProvisionalPageProxy): Before updating a BackForwardListItem, we normally make sure the process has a WebPageProxy with the item's pageID. We have to tweak the logic because there may now be no WebPageProxy with this pageID associated with this process yet, because it is still a ProvisionalPageProxy. * UIProcess/WebURLSchemeHandler.cpp: (WebKit::WebURLSchemeHandler::startTask): * UIProcess/WebURLSchemeHandler.h: * UIProcess/WebURLSchemeTask.cpp: (WebKit::WebURLSchemeTask::create): (WebKit::WebURLSchemeTask::WebURLSchemeTask): (WebKit::WebURLSchemeTask::didPerformRedirection): (WebKit::WebURLSchemeTask::didReceiveResponse): (WebKit::WebURLSchemeTask::didReceiveData): (WebKit::WebURLSchemeTask::didComplete): (WebKit::WebURLSchemeTask::pageDestroyed): * UIProcess/WebURLSchemeTask.h: Pass the process when constructing a WebURLSchemeTask and store it as a data member in addition to the page. This is necessary now that a WebPageProxy can be associated with several WebProcesses. * UIProcess/ios/ViewGestureControllerIOS.mm: (WebKit::ViewGestureController::endSwipeGesture): Use the provisional drawing area to display the swipe snapshot as it may differ from the one currently associated with the page in case of process swap. * WebKit.xcodeproj/project.pbxproj: Add ProvisionalPageProxy class. * WebProcess/WebPage/WebFrame.cpp: (WebKit::toPolicyAction): (WebKit::WebFrame::didReceivePolicyDecision): * WebProcess/WebPage/WebPage.cpp: (WebKit::m_shouldAttachDrawingAreaOnPageTransition): (WebKit::WebPage::reinitializeWebPage): (WebKit::WebPage::didReceivePolicyDecision): Stop dealing with WebPolicyAction::Suspend as it no longer exists. (WebKit::WebPage::didCompletePageTransition): (WebKit::WebPage::setIsSuspended): Suspend the Page when setIsSuspended(true) is called, now that there is no longer a WebPolicyAction::Suspend. setIsSuspended(true) IPC is sent when we actually commit the provisional page. * WebProcess/WebPage/WebPage.h: Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: (-[PSONNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]): LayoutTests: Skip test testing the cross-process DOMWindow API as I broke it with this patch. The feature is far from ready and off by default anyway. I will add support back in a follow-up. * platform/wk2/TestExpectations: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240046 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-16 Chris Dumez <cdumez@apple.com> Regression(PSON) View becomes blank after click a cross-site download link https://bugs.webkit.org/show_bug.cgi?id=193361 <rdar://problem/47099573> Reviewed by Geoffrey Garen. The issue tracked by rdar://problem/47099573 is that a provisional load may get canceled (or converted into a download) *after* we've decided to process-swap. In such cases, the view should keep displaying the current site and it should still be interactive. However, with the previous PSON model, the view (pageProxy) would have already swapped to the new process and would end up displaying the initially empty document. To address the issue, this patch introduces the concept of a provisional load in the UIProcess, handled by a ProvisionalPageProxy which has its own privisional process. The WebPageProxy owns the ProvisionalPageProxy but we do not commit the provisional page until after the load was committed in the new process. This means that the view / WebPageProxy keeps using the old process and displays the current content until a load has committed in the provisional page. If no load commits in the provisional process (e.g. because the load is cancelled or converted into a download), then we merely destroy the ProvisionalPageProxy and terminate its process, without impacting the WebPageProxy. * Shared/WebPageCreationParameters.cpp: (WebKit::WebPageCreationParameters::encode const): (WebKit::WebPageCreationParameters::decode): * Shared/WebPageCreationParameters.h: Rename isSwapFromSuspended to isProcessSwap for clarity as we always want to delay attaching the drawing area in case of a process-swap, no matter what now that the previous process is kept alive until the provisional load is committed in the new process. * Shared/WebPolicyAction.h: Drop Suspend policy action. At decidePolicyForNavigationAction time, in case of process-swap, we now tell the previous process to simply ignore the load, while we create a ProvisionalPageProxy to do the new load in a new process. Suspension of the previous page in the old process, happens later, when a load is actually committed in the new process. * Sources.txt: Add new ProvisionalPageProxy file. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _killWebContentProcessAndResetState]): When calling _killWebContentProcessAndResetState on a WKWebView, kill both the current process and the provisional one, to maintain previous behavior in our API tests. * UIProcess/API/gtk/PageClientImpl.cpp: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/API/gtk/PageClientImpl.h: * UIProcess/API/wpe/PageClientImpl.cpp: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/API/wpe/PageClientImpl.h: * UIProcess/AcceleratedDrawingAreaProxy.cpp: (WebKit::AcceleratedDrawingAreaProxy::AcceleratedDrawingAreaProxy): (WebKit::AcceleratedDrawingAreaProxy::didUpdateBackingStoreState): (WebKit::AcceleratedDrawingAreaProxy::sendUpdateBackingStoreState): (WebKit::AcceleratedDrawingAreaProxy::waitForAndDispatchDidUpdateBackingStoreState): (WebKit::AcceleratedDrawingAreaProxy::setNativeSurfaceHandleForCompositing): (WebKit::AcceleratedDrawingAreaProxy::destroyNativeSurfaceHandleForCompositing): * UIProcess/AcceleratedDrawingAreaProxy.h: * UIProcess/Cocoa/WebViewImpl.h: * UIProcess/Cocoa/WebViewImpl.mm: (WebKit::WebViewImpl::createDrawingAreaProxy): * UIProcess/DrawingAreaProxy.cpp: (WebKit::DrawingAreaProxy::DrawingAreaProxy): (WebKit::DrawingAreaProxy::~DrawingAreaProxy): (WebKit::DrawingAreaProxy::viewExposedRectChangedTimerFired): * UIProcess/DrawingAreaProxy.h: (WebKit::DrawingAreaProxy::process): * UIProcess/DrawingAreaProxyImpl.cpp: (WebKit::DrawingAreaProxyImpl::DrawingAreaProxyImpl): (WebKit::DrawingAreaProxyImpl::update): * UIProcess/DrawingAreaProxyImpl.h: * UIProcess/PageClient.h: * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h: * UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm: (WebKit::RemoteLayerTreeDrawingAreaProxy::RemoteLayerTreeDrawingAreaProxy): (WebKit::RemoteLayerTreeDrawingAreaProxy::~RemoteLayerTreeDrawingAreaProxy): (WebKit::RemoteLayerTreeDrawingAreaProxy::deviceScaleFactorDidChange): (WebKit::RemoteLayerTreeDrawingAreaProxy::sendUpdateGeometry): (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidStart): (WebKit::RemoteLayerTreeDrawingAreaProxy::acceleratedAnimationDidEnd): (WebKit::RemoteLayerTreeDrawingAreaProxy::didRefreshDisplay): (WebKit::RemoteLayerTreeDrawingAreaProxy::waitForDidUpdateActivityState): (WebKit::RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing): * UIProcess/ios/PageClientImplIOS.h: * UIProcess/ios/PageClientImplIOS.mm: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/ios/WKContentView.h: * UIProcess/ios/WKContentView.mm: (-[WKContentView _createDrawingAreaProxy:]): * UIProcess/mac/PageClientImplMac.h: * UIProcess/mac/PageClientImplMac.mm: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h: * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm: (WebKit::TiledCoreAnimationDrawingAreaProxy::TiledCoreAnimationDrawingAreaProxy): (WebKit::TiledCoreAnimationDrawingAreaProxy::deviceScaleFactorDidChange): (WebKit::TiledCoreAnimationDrawingAreaProxy::colorSpaceDidChange): (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForDidUpdateActivityState): (WebKit::TiledCoreAnimationDrawingAreaProxy::createFence): (WebKit::TiledCoreAnimationDrawingAreaProxy::sendUpdateGeometry): (WebKit::TiledCoreAnimationDrawingAreaProxy::adjustTransientZoom): (WebKit::TiledCoreAnimationDrawingAreaProxy::commitTransientZoom): (WebKit::TiledCoreAnimationDrawingAreaProxy::dispatchAfterEnsuringDrawing): * UIProcess/mac/WebPageProxyMac.mm: * UIProcess/win/PageClientImpl.cpp: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/win/PageClientImpl.h: * UIProcess/win/PageClientImpl.cpp: (WebKit::PageClientImpl::createDrawingAreaProxy): * UIProcess/win/PageClientImpl.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): Pass the drawing area's associated process when constructing it and store it as a member in addition to the page. This is necessary now that a page can be associated with 2 WebProcesses at a time, each having its own drawing area. * UIProcess/Cocoa/WebPageProxyCocoa.mm: (WebKit::WebPageProxy::createSandboxExtensionsIfNeeded): Pass the process. * UIProcess/ProvisionalPageProxy.cpp: Added. (WebKit::ProvisionalPageProxy::ProvisionalPageProxy): (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy): (WebKit::ProvisionalPageProxy::processDidTerminate): (WebKit::ProvisionalPageProxy::takeDrawingArea): (WebKit::ProvisionalPageProxy::cancel): (WebKit::ProvisionalPageProxy::processDidFinishLaunching): (WebKit::ProvisionalPageProxy::finishInitializingWebPageAfterProcessLaunch): (WebKit::ProvisionalPageProxy::initializeWebPage): (WebKit::ProvisionalPageProxy::loadData): (WebKit::ProvisionalPageProxy::loadRequest): (WebKit::ProvisionalPageProxy::goToBackForwardItem): (WebKit::ProvisionalPageProxy::didCreateMainFrame): (WebKit::ProvisionalPageProxy::didPerformClientRedirect): (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didCommitLoadForFrame): (WebKit::ProvisionalPageProxy::didNavigateWithNavigationData): (WebKit::ProvisionalPageProxy::didChangeProvisionalURLForFrame): (WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionAsync): (WebKit::ProvisionalPageProxy::decidePolicyForResponse): (WebKit::ProvisionalPageProxy::startURLSchemeTask): (WebKit::ProvisionalPageProxy::backForwardGoToItem): (WebKit::ProvisionalPageProxy::didReceiveMessage): (WebKit::ProvisionalPageProxy::didReceiveSyncMessage): * UIProcess/ProvisionalPageProxy.h: Added. (WebKit::ProvisionalPageProxy::page): (WebKit::ProvisionalPageProxy::mainFrame const): (WebKit::ProvisionalPageProxy::process): (WebKit::ProvisionalPageProxy::processSwapRequestedByClient const): (WebKit::ProvisionalPageProxy::navigationID const): (WebKit::ProvisionalPageProxy::drawingArea const): New WebPageProxy-like class which is owned by the WebPageProxy and proxies IPC from the provisional process. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::~SuspendedPageProxy): (WebKit::SuspendedPageProxy::unsuspend): (WebKit::SuspendedPageProxy::didProcessRequestToSuspend): Unregister the SuspendedPageProxy as an IPC message receiver a little bit earlier when we're going to unsuspend it. This avoids conflicting with the ProvisionalPageProxy which tries to register itself as an IPC message receiver for the same pageID when a process-swap occurs and we're switching to a suspended page. * UIProcess/WebFrameProxy.cpp: (WebKit::WebFrameProxy::isMainFrame const): WebFrameProxy::isMainFrame() relies on checking that the frame is the WebPageProxy's m_mainFrame. Now that the WebPageProxy can have a ProvisionalPageProxy, also check if it is the ProvisionalPageProxy's m_mainFrame to maintain previous behavior. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::provisionalDrawingArea const): Add getter for the provisional drawing area. We normally only deal with the page's current drawing area, but the ViewGestureController needs access to the provisional once to display the swipe gesture snapshot. (WebKit::WebPageProxy::swapToWebProcess): swapToWebProcess() no longer takes care of unsuspending the SuspendedPage because we now call swapToWebProcess() later, when a load is actually committed in the provisional page / process. swapToWebProcess() now also needs to initialize some data members such as the drawing area and the main frame as it is transferring them over from the ProvisionalPageProxy which started the provisional load. (WebKit::WebPageProxy::finishAttachingToWebProcess): We no longer need IsSwapFromSuspended parameter as this is called later now, after a load has actually been committed in the provisional process. (WebKit::WebPageProxy::setDrawingArea): (WebKit::WebPageProxy::initializeWebPage): - We no longer need IsSwapFromSuspended parameter as this is called later now, after a load has actually been committed in the provisional process. - Factor some code out to WebPageProxy::setDrawingArea() so that it can be shared with swapToWebProcess(). (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle): (WebKit::WebPageProxy::loadRequest): (WebKit::WebPageProxy::loadRequestWithNavigationShared): Only call setPendingAPIRequestURL() in loadRequestWithNavigation() only if ShouldTreatAsContinuingLoad is not Yes. This avoids hitting some assertions as this was already called during the first API call if needed. (WebKit::WebPageProxy::loadData): (WebKit::WebPageProxy::loadDataWithNavigationShared): (WebKit::WebPageProxy::stopLoading): (WebKit::WebPageProxy::reload): (WebKit::WebPageProxy::didPerformDragControllerAction): (WebKit::WebPageProxy::findPlugin): (WebKit::WebPageProxy::receivedNavigationPolicyDecision): In case of process swap, tell the previous process to ignore the load instead of suspending it right away. Suspension now happens later, only if we end up committing the provisional load in the new process. Also discard the SuspendedPage if it failed to suspend (we only reuse its process in this case). This used to happen a bit later but it is clearer if we do this as early as possible I think. (WebKit::WebPageProxy::commitProvisionalPage): When the load is committed in the new process, we call WebPageProxy::commitProvisionalPage(). It takes care of: - Actually swapping the WebPageProxy to the new process by calling processDidTerminate() / swapToWebProcess(). - Suspending the current page. - Letting the client know the load is comitted - Destroy the ProvisionalPageProxy. This work used to happen earlier in continueNavigationInNewProcess(). (WebKit::WebPageProxy::continueNavigationInNewProcess): Moved some of the logic to commitProvisionalPage(). We now merely start the load in a new ProvisionalPageProxy, without actually having the WebPageProxy switch to the new process yet. (WebKit::WebPageProxy::didCreateMainFrame): (WebKit::WebPageProxy::didCreateSubframe): (WebKit::WebPageProxy::didCreateWindow): Drop some code that is no longer needed, now that the ProvisionalPageProxy takes care of this. (WebKit::WebPageProxy::didDestroyNavigation): On process-swap, when telling the previous process to ignore the load and starting the new load in a new ProvisionalPageProxy, the previous WebPage attempts to destroy the navigation. In this case, we ignore the call since the navigation is merely taken over by the ProvisionalPageProxy. (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared): Moved some PSON logic to the ProvisionalPageProxy instead. (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame): (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrameShared): (WebKit::WebPageProxy::willPerformClientRedirectForFrame): (WebKit::WebPageProxy::didCancelClientRedirectForFrame): (WebKit::WebPageProxy::didChangeProvisionalURLForFrame): (WebKit::WebPageProxy::didChangeProvisionalURLForFrameShared): (WebKit::WebPageProxy::didFailProvisionalLoadForFrame): (WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared): When didFailProvisionalLoadForFrame() is called for a ProvisionalPageProxy, destroy it. (WebKit::WebPageProxy::didCommitLoadForFrame): (WebKit::WebPageProxy::didFinishDocumentLoadForFrame): (WebKit::WebPageProxy::didFinishLoadForFrame): (WebKit::WebPageProxy::didFailLoadForFrame): (WebKit::WebPageProxy::didSameDocumentNavigationForFrame): (WebKit::WebPageProxy::didReceiveTitleForFrame): (WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame): (WebKit::WebPageProxy::didDisplayInsecureContentForFrame): (WebKit::WebPageProxy::didRunInsecureContentForFrame): (WebKit::WebPageProxy::frameDidBecomeFrameSet): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared): (WebKit::WebPageProxy::decidePolicyForNavigationAction): (WebKit::WebPageProxy::decidePolicyForNavigationActionSync): (WebKit::WebPageProxy::decidePolicyForNewWindowAction): (WebKit::WebPageProxy::decidePolicyForResponse): (WebKit::WebPageProxy::decidePolicyForResponseShared): (WebKit::WebPageProxy::unableToImplementPolicy): (WebKit::WebPageProxy::willSubmitForm): (WebKit::WebPageProxy::didNavigateWithNavigationData): (WebKit::WebPageProxy::didNavigateWithNavigationDataShared): (WebKit::WebPageProxy::didPerformClientRedirect): (WebKit::WebPageProxy::didPerformClientRedirectShared): (WebKit::WebPageProxy::didPerformServerRedirect): (WebKit::WebPageProxy::didUpdateHistoryTitle): (WebKit::WebPageProxy::createNewPage): (WebKit::WebPageProxy::runJavaScriptAlert): (WebKit::WebPageProxy::runJavaScriptConfirm): (WebKit::WebPageProxy::runJavaScriptPrompt): (WebKit::WebPageProxy::unavailablePluginButtonClicked): (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel): (WebKit::WebPageProxy::runOpenPanel): (WebKit::WebPageProxy::printFrame): (WebKit::WebPageProxy::backForwardGoToItem): (WebKit::WebPageProxy::backForwardGoToItemShared): (WebKit::WebPageProxy::learnWord): (WebKit::WebPageProxy::ignoreWord): (WebKit::WebPageProxy::didReceiveEvent): (WebKit::WebPageProxy::editingRangeCallback): (WebKit::WebPageProxy::rectForCharacterRangeCallback): (WebKit::WebPageProxy::focusedFrameChanged): (WebKit::WebPageProxy::frameSetLargestFrameChanged): (WebKit::WebPageProxy::provisionalProcessDidTerminate): Cancel the provisiona load and destroy the ProvisionalPageProxy if the provisional process crashes. (WebKit::WebPageProxy::resetState): Drop some code that is no longer needed. (WebKit::WebPageProxy::creationParameters): - Move the hasRegisteredServiceWorkers flag initialization from the call site to here now that we have more than one call site. This was just some bad factoring. - Take the process in parameter now that we page can be associated with several processes at a time. (WebKit::WebPageProxy::exceededDatabaseQuota): (WebKit::WebPageProxy::requestGeolocationPermissionForFrame): (WebKit::WebPageProxy::requestUserMediaPermissionForFrame): (WebKit::WebPageProxy::enumerateMediaDevicesForFrame): (WebKit::WebPageProxy::startURLSchemeTask): (WebKit::WebPageProxy::startURLSchemeTaskShared): (WebKit::WebPageProxy::stopURLSchemeTask): (WebKit::WebPageProxy::loadSynchronousURLSchemeTask): (WebKit::WebPageProxy::checkURLReceivedFromCurrentOrPreviousWebProcess): (WebKit::WebPageProxy::willAcquireUniversalFileReadSandboxExtension): * UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::visitedLinkStore): (WebKit::WebPageProxy::provisionalPageProxy const): * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::hasProvisionalPageWithID const): (WebKit::WebProcessProxy::updateBackForwardItem): (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch): (WebKit::WebProcessProxy::didFinishLaunching): (WebKit::WebProcessProxy::canTerminateChildProcess): * UIProcess/WebProcessProxy.h: (WebKit::WebProcessProxy::addProvisionalPageProxy): (WebKit::WebProcessProxy::removeProvisionalPageProxy): Before updating a BackForwardListItem, we normally make sure the process has a WebPageProxy with the item's pageID. We have to tweak the logic because there may now be no WebPageProxy with this pageID associated with this process yet, because it is still a ProvisionalPageProxy. * UIProcess/WebURLSchemeHandler.cpp: (WebKit::WebURLSchemeHandler::startTask): * UIProcess/WebURLSchemeHandler.h: * UIProcess/WebURLSchemeTask.cpp: (WebKit::WebURLSchemeTask::create): (WebKit::WebURLSchemeTask::WebURLSchemeTask): (WebKit::WebURLSchemeTask::didPerformRedirection): (WebKit::WebURLSchemeTask::didReceiveResponse): (WebKit::WebURLSchemeTask::didReceiveData): (WebKit::WebURLSchemeTask::didComplete): (WebKit::WebURLSchemeTask::pageDestroyed): * UIProcess/WebURLSchemeTask.h: Pass the process when constructing a WebURLSchemeTask and store it as a data member in addition to the page. This is necessary now that a WebPageProxy can be associated with several WebProcesses. * UIProcess/ios/ViewGestureControllerIOS.mm: (WebKit::ViewGestureController::endSwipeGesture): Use the provisional drawing area to display the swipe snapshot as it may differ from the one currently associated with the page in case of process swap. * WebKit.xcodeproj/project.pbxproj: Add ProvisionalPageProxy class. * WebProcess/WebPage/WebFrame.cpp: (WebKit::toPolicyAction): (WebKit::WebFrame::didReceivePolicyDecision): * WebProcess/WebPage/WebPage.cpp: (WebKit::m_shouldAttachDrawingAreaOnPageTransition): (WebKit::WebPage::reinitializeWebPage): (WebKit::WebPage::didReceivePolicyDecision): Stop dealing with WebPolicyAction::Suspend as it no longer exists. (WebKit::WebPage::didCompletePageTransition): (WebKit::WebPage::setIsSuspended): Suspend the Page when setIsSuspended(true) is called, now that there is no longer a WebPolicyAction::Suspend. setIsSuspended(true) IPC is sent when we actually commit the provisional page. * WebProcess/WebPage/WebPage.h: 2019-01-22 Alan Coon <alancoon@apple.com> Cherry-pick r240015. rdar://problem/47099573 Unreviewed, rolling out r239993, r239995, r239997, and r239999. Caused assertions under ViewGestureController::disconnectFromProcess() Reverted changesets: "Regression(PSON) View becomes blank after click a cross-site download link" https://bugs.webkit.org/show_bug.cgi?id=193361 https://trac.webkit.org/changeset/239993 "Unreviewed iOS build fix after r239993." https://trac.webkit.org/changeset/239995 "Fix iOS build after r239993" https://bugs.webkit.org/show_bug.cgi?id=193361 https://trac.webkit.org/changeset/239997 "Unreviewed, revert part of r239997 as it is not needed to fix the build." https://trac.webkit.org/changeset/239999 git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240015 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-15 Chris Dumez <cdumez@apple.com> Unreviewed, rolling out r239993, r239995, r239997, and r239999. Caused assertions under ViewGestureController::disconnectFromProcess() Reverted changesets: "Regression(PSON) View becomes blank after click a cross-site download link" https://bugs.webkit.org/show_bug.cgi?id=193361 https://trac.webkit.org/changeset/239993 "Unreviewed iOS build fix after r239993." https://trac.webkit.org/changeset/239995 "Fix iOS build after r239993" https://bugs.webkit.org/show_bug.cgi?id=193361 https://trac.webkit.org/changeset/239997 "Unreviewed, revert part of r239997 as it is not needed to fix the build." https://trac.webkit.org/changeset/239999 2019-01-22 Alan Coon <alancoon@apple.com> Cherry-pick r239997. rdar://problem/47099573 Fix iOS build after r239993 https://bugs.webkit.org/show_bug.cgi?id=193361 Source/WebKit: * UIProcess/ProvisionalPageProxy.h: * UIProcess/SuspendedPageProxy.h: Source/WTF: * wtf/RefCounter.h: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239997 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-15 Alex Christensen <achristensen@webkit.org> Fix iOS build after r239993 https://bugs.webkit.org/show_bug.cgi?id=193361 * UIProcess/ProvisionalPageProxy.h: * UIProcess/SuspendedPageProxy.h: 2019-01-22 Alan Coon <alancoon@apple.com> Cherry-pick r239995. rdar://problem/47099573 Unreviewed iOS build fix after r239993. * UIProcess/SuspendedPageProxy.h: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239995 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-15 Chris Dumez <cdumez@apple.com> Unreviewed iOS build fix after r239993. * UIProcess/SuspendedPageProxy.h: 2019-01-22 Alan Coon <alancoon@apple.com> Cherry-pick r239993. rdar://problem/47099573 Regression(PSON) View becomes blank after click a cross-site download link https://bugs.webkit.org/show_bug.cgi?id=193361 <rdar://problem/47099573> Reviewed by Geoff Garen. Source/WebCore: * loader/FrameLoader.cpp: (WebCore::FrameLoader::commitProvisionalLoad): When restoring from PageCache, make sure we notify the client that the load was committed *before* we tell it that the navigation is complete. This would confuse the ProvisionalPageProxy logic in the UIProcess. Source/WebKit: The issue tracked by rdar://problem/47099573 is that a provisional load may get canceled (or converted into a download) *after* we've decided to process-swap. In such cases, the view should keep displaying the current site and it should still be interactive. However, with the previous PSON model, the view (pageProxy) would have already swapped to the new process and would end up displaying the initially empty document. To address the issue, this patch introduces the concept of a provisional load in the UIProcess, handled by a ProvisionalPageProxy which has its own privisional process. The WebPageProxy owns the ProvisionalPageProxy but we do not commit the provisional page until after the load was committed in the new process. This means that the view / WebPageProxy keeps using the old process and displays the current content until a load has committed in the provisional page. If no load commits in the provisional process (e.g. because the load is cancelled or converted into a download), then we merely destroy the ProvisionalPageProxy and terminate its process, without impacting the WebPageProxy. * Shared/WebPageCreationParameters.cpp: (WebKit::WebPageCreationParameters::encode const): (WebKit::WebPageCreationParameters::decode): * Shared/WebPageCreationParameters.h: Rename isSwapFromSuspended to isProcessSwap for clarity as we always want to delay attaching the drawing area in case of a process-swap, no matter what now that the previous process is kept alive until the provisional load is committed in the new process. * Shared/WebPolicyAction.h: Drop Suspend policy action. At decidePolicyForNavigationAction time, in case of process-swap, we now tell the previous process to simply ignore the load, while we create a ProvisionalPageProxy to do the new load in a new process. Suspension of the previous page in the old process, happens later, when a load is actually committed in the new process. * Sources.txt: Add new ProvisionalPageProxy file. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _killWebContentProcessAndResetState]): When calling _killWebContentProcessAndResetState on a WKWebView, kill both the current process and the provisional one, to maintain previous behavior in our API tests. * UIProcess/PageClient.h: Tiny build fix. * UIProcess/ProvisionalPageProxy.cpp: Added. (WebKit::ProvisionalPageProxy::ProvisionalPageProxy): (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy): (WebKit::ProvisionalPageProxy::takeDrawingArea): (WebKit::ProvisionalPageProxy::cancel): (WebKit::ProvisionalPageProxy::initializeWebPage): (WebKit::ProvisionalPageProxy::loadDataWithNavigation): (WebKit::ProvisionalPageProxy::loadRequestWithNavigation): (WebKit::ProvisionalPageProxy::goToBackForwardItem): (WebKit::ProvisionalPageProxy::didCreateMainFrame): (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didCommitLoadForFrame): (WebKit::ProvisionalPageProxy::didReceiveMessage): (WebKit::ProvisionalPageProxy::didReceiveSyncMessage): * UIProcess/ProvisionalPageProxy.h: Added. (WebKit::ProvisionalPageProxy::page): (WebKit::ProvisionalPageProxy::mainFrame const): (WebKit::ProvisionalPageProxy::process): (WebKit::ProvisionalPageProxy::processSwapRequestedByClient const): (WebKit::ProvisionalPageProxy::navigationID const): Add new ProvisionalPageProxy class to wrap the provisional load in the new process after a swap. The provisional page is owned by the WebPageProxy and we only commit the provisional page when the load is committed. Until then, the WebPageProxy keeps using the old process and displaying the current content. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::~SuspendedPageProxy): (WebKit::SuspendedPageProxy::unsuspend): (WebKit::SuspendedPageProxy::didProcessRequestToSuspend): Unregister the SuspendedPageProxy as an IPC message receiver a little bit earlier when we're going to unsuspend it. This avoids conflicting with the ProvisionalPageProxy which tries to register itself as an IPC message receiver for the same pageID when a process-swap occurs and we're switching to a suspended page. * UIProcess/WebFrameProxy.cpp: (WebKit::WebFrameProxy::isMainFrame const): WebFrameProxy::isMainFrame() relies on checking that the frame is the WebPageProxy's m_mainFrame. Now that the WebPageProxy can have a ProvisionalPageProxy, also check if it is the ProvisionalPageProxy's m_mainFrame to maintain previous behavior. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::swapToWebProcess): swapToWebProcess() no longer takes care of unsuspending the SuspendedPage because we now call swapToWebProcess() later, when a load is actually committed in the provisional page / process. swapToWebProcess() now also needs to initialize some data members such as the drawing area and the main frame as it is transferring them over from the ProvisionalPageProxy which started the provisional load. (WebKit::WebPageProxy::finishAttachingToWebProcess): We no longer need IsSwapFromSuspended parameter as this is called later now, after a load has actually been committed in the provisional process. (WebKit::WebPageProxy::initializeWebPage): - We no longer need IsSwapFromSuspended parameter as this is called later now, after a load has actually been committed in the provisional process. - Factor some code out to WebPageProxy::setDrawingArea() so that it can be shared with swapToWebProcess(). (WebKit::WebPageProxy::loadRequestWithNavigation): Only call setPendingAPIRequestURL() in loadRequestWithNavigation() only if ShouldTreatAsContinuingLoad is not Yes. This avoids hitting some assertions as this was already called during the first API call if needed. (WebKit::WebPageProxy::receivedNavigationPolicyDecision): In case of process swap, tell the previous process to ignore the load instead of suspending it right away. Suspension now happens later, only if we end up committing the provisional load in the new process. Also discard the SuspendedPage if it failed to suspend (we only reuse its process in this case). This used to happen a bit later but it is clearer if we do this as early as possible I think. (WebKit::WebPageProxy::commitProvisionalPage): When the load is committed in the new process, we call WebPageProxy::commitProvisionalPage(). It takes care of: - Actually swapping the WebPageProxy to the new process by calling processDidTerminate() / swapToWebProcess(). - Suspending the current page. - Letting the client know the load is comitted - Destroy the ProvisionalPageProxy. This work used to happen earlier in continueNavigationInNewProcess(). (WebKit::WebPageProxy::continueNavigationInNewProcess): Moved some of the logic to commitProvisionalPage(). We now merely start the load in a new ProvisionalPageProxy, without actually having the WebPageProxy switch to the new process yet. (WebKit::WebPageProxy::didCreateMainFrame): (WebKit::WebPageProxy::didCreateWindow): Drop some code that is no longer needed, now that the ProvisionalPageProxy takes care of this. (WebKit::WebPageProxy::didDestroyNavigation): On process-swap, when telling the previous process to ignore the load and starting the new load in a new ProvisionalPageProxy, the previous WebPage attempts to destroy the navigation. In this case, we ignore the call since the navigation is merely taken over by the ProvisionalPageProxy. (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): Moved some PSON logic to the ProvisionalPageProxy instead. (WebKit::WebPageProxy::didFailProvisionalLoadForFrame): When didFailProvisionalLoadForFrame() is called for a ProvisionalPageProxy, destroy it. (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync): (WebKit::WebPageProxy::decidePolicyForResponse): Capture the process in the lambda, to make sure we send the policy decision to the same process that asked for it, so as to not get confused by process swaps. (WebKit::WebPageProxy::resetState): Drop some code that is no longer needed. (WebKit::WebPageProxy::creationParameters): Move the hasRegisteredServiceWorkers flag initialization from the call site to here now that we have more than one call site. This was just some bad factoring. (WebKit::WebPageProxy::PageProcessOverride::PageProcessOverride): (WebKit::WebPageProxy::PageProcessOverride::~PageProcessOverride): * UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::temporarilyOverrideProcess): Add utility class to temporarily override the WebPageProxy's m_process with the provisional one when the ProvisionalPageProxy interacts with the WebPageProxy. * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::hasProvisionalPageWithID const): (WebKit::WebProcessProxy::updateBackForwardItem): Before updating a BackForwardListItem, we normally make sure the process has a WebPageProxy with the item's pageID. We have to tweak the logic because there may now be no WebPageProxy with this pageID associated with this process yet, because it is still a ProvisionalPageProxy. (WebKit::WebProcessProxy::canTerminateChildProcess): Do not terminate the WebProcess if there are ProvisionalPageProxy objects using it. * UIProcess/WebProcessProxy.h: (WebKit::WebProcessProxy::addProvisionalPageProxy): (WebKit::WebProcessProxy::removeProvisionalPageProxy): * WebKit.xcodeproj/project.pbxproj: * WebProcess/WebPage/WebFrame.cpp: (WebKit::toPolicyAction): (WebKit::WebFrame::didReceivePolicyDecision): Stop dealing with WebPolicyAction::Suspend as it no longer exists. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::reinitializeWebPage): (WebKit::WebPage::didReceivePolicyDecision): (WebKit::WebPage::setIsSuspended): Suspend the Page when setIsSuspended(true) is called, now that there is no longer a WebPolicyAction::Suspend. setIsSuspended(true) IPC is sent when we actually commit the provisional page. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): Tools: Add API test coverage. * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm: (-[PSONNavigationDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]): LayoutTests: Skip test testing the cross-process DOMWindow API as I broke it with this patch. The feature is far from ready and off by default anyway. I will add support back in a follow-up. * platform/wk2/TestExpectations: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239993 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-15 Chris Dumez <cdumez@apple.com> Regression(PSON) View becomes blank after click a cross-site download link https://bugs.webkit.org/show_bug.cgi?id=193361 <rdar://problem/47099573> Reviewed by Geoff Garen. The issue tracked by rdar://problem/47099573 is that a provisional load may get canceled (or converted into a download) *after* we've decided to process-swap. In such cases, the view should keep displaying the current site and it should still be interactive. However, with the previous PSON model, the view (pageProxy) would have already swapped to the new process and would end up displaying the initially empty document. To address the issue, this patch introduces the concept of a provisional load in the UIProcess, handled by a ProvisionalPageProxy which has its own privisional process. The WebPageProxy owns the ProvisionalPageProxy but we do not commit the provisional page until after the load was committed in the new process. This means that the view / WebPageProxy keeps using the old process and displays the current content until a load has committed in the provisional page. If no load commits in the provisional process (e.g. because the load is cancelled or converted into a download), then we merely destroy the ProvisionalPageProxy and terminate its process, without impacting the WebPageProxy. * Shared/WebPageCreationParameters.cpp: (WebKit::WebPageCreationParameters::encode const): (WebKit::WebPageCreationParameters::decode): * Shared/WebPageCreationParameters.h: Rename isSwapFromSuspended to isProcessSwap for clarity as we always want to delay attaching the drawing area in case of a process-swap, no matter what now that the previous process is kept alive until the provisional load is committed in the new process. * Shared/WebPolicyAction.h: Drop Suspend policy action. At decidePolicyForNavigationAction time, in case of process-swap, we now tell the previous process to simply ignore the load, while we create a ProvisionalPageProxy to do the new load in a new process. Suspension of the previous page in the old process, happens later, when a load is actually committed in the new process. * Sources.txt: Add new ProvisionalPageProxy file. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _killWebContentProcessAndResetState]): When calling _killWebContentProcessAndResetState on a WKWebView, kill both the current process and the provisional one, to maintain previous behavior in our API tests. * UIProcess/PageClient.h: Tiny build fix. * UIProcess/ProvisionalPageProxy.cpp: Added. (WebKit::ProvisionalPageProxy::ProvisionalPageProxy): (WebKit::ProvisionalPageProxy::~ProvisionalPageProxy): (WebKit::ProvisionalPageProxy::takeDrawingArea): (WebKit::ProvisionalPageProxy::cancel): (WebKit::ProvisionalPageProxy::initializeWebPage): (WebKit::ProvisionalPageProxy::loadDataWithNavigation): (WebKit::ProvisionalPageProxy::loadRequestWithNavigation): (WebKit::ProvisionalPageProxy::goToBackForwardItem): (WebKit::ProvisionalPageProxy::didCreateMainFrame): (WebKit::ProvisionalPageProxy::didStartProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didFailProvisionalLoadForFrame): (WebKit::ProvisionalPageProxy::didCommitLoadForFrame): (WebKit::ProvisionalPageProxy::didReceiveMessage): (WebKit::ProvisionalPageProxy::didReceiveSyncMessage): * UIProcess/ProvisionalPageProxy.h: Added. (WebKit::ProvisionalPageProxy::page): (WebKit::ProvisionalPageProxy::mainFrame const): (WebKit::ProvisionalPageProxy::process): (WebKit::ProvisionalPageProxy::processSwapRequestedByClient const): (WebKit::ProvisionalPageProxy::navigationID const): Add new ProvisionalPageProxy class to wrap the provisional load in the new process after a swap. The provisional page is owned by the WebPageProxy and we only commit the provisional page when the load is committed. Until then, the WebPageProxy keeps using the old process and displaying the current content. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::~SuspendedPageProxy): (WebKit::SuspendedPageProxy::unsuspend): (WebKit::SuspendedPageProxy::didProcessRequestToSuspend): Unregister the SuspendedPageProxy as an IPC message receiver a little bit earlier when we're going to unsuspend it. This avoids conflicting with the ProvisionalPageProxy which tries to register itself as an IPC message receiver for the same pageID when a process-swap occurs and we're switching to a suspended page. * UIProcess/WebFrameProxy.cpp: (WebKit::WebFrameProxy::isMainFrame const): WebFrameProxy::isMainFrame() relies on checking that the frame is the WebPageProxy's m_mainFrame. Now that the WebPageProxy can have a ProvisionalPageProxy, also check if it is the ProvisionalPageProxy's m_mainFrame to maintain previous behavior. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::swapToWebProcess): swapToWebProcess() no longer takes care of unsuspending the SuspendedPage because we now call swapToWebProcess() later, when a load is actually committed in the provisional page / process. swapToWebProcess() now also needs to initialize some data members such as the drawing area and the main frame as it is transferring them over from the ProvisionalPageProxy which started the provisional load. (WebKit::WebPageProxy::finishAttachingToWebProcess): We no longer need IsSwapFromSuspended parameter as this is called later now, after a load has actually been committed in the provisional process. (WebKit::WebPageProxy::initializeWebPage): - We no longer need IsSwapFromSuspended parameter as this is called later now, after a load has actually been committed in the provisional process. - Factor some code out to WebPageProxy::setDrawingArea() so that it can be shared with swapToWebProcess(). (WebKit::WebPageProxy::loadRequestWithNavigation): Only call setPendingAPIRequestURL() in loadRequestWithNavigation() only if ShouldTreatAsContinuingLoad is not Yes. This avoids hitting some assertions as this was already called during the first API call if needed. (WebKit::WebPageProxy::receivedNavigationPolicyDecision): In case of process swap, tell the previous process to ignore the load instead of suspending it right away. Suspension now happens later, only if we end up committing the provisional load in the new process. Also discard the SuspendedPage if it failed to suspend (we only reuse its process in this case). This used to happen a bit later but it is clearer if we do this as early as possible I think. (WebKit::WebPageProxy::commitProvisionalPage): When the load is committed in the new process, we call WebPageProxy::commitProvisionalPage(). It takes care of: - Actually swapping the WebPageProxy to the new process by calling processDidTerminate() / swapToWebProcess(). - Suspending the current page. - Letting the client know the load is comitted - Destroy the ProvisionalPageProxy. This work used to happen earlier in continueNavigationInNewProcess(). (WebKit::WebPageProxy::continueNavigationInNewProcess): Moved some of the logic to commitProvisionalPage(). We now merely start the load in a new ProvisionalPageProxy, without actually having the WebPageProxy switch to the new process yet. (WebKit::WebPageProxy::didCreateMainFrame): (WebKit::WebPageProxy::didCreateWindow): Drop some code that is no longer needed, now that the ProvisionalPageProxy takes care of this. (WebKit::WebPageProxy::didDestroyNavigation): On process-swap, when telling the previous process to ignore the load and starting the new load in a new ProvisionalPageProxy, the previous WebPage attempts to destroy the navigation. In this case, we ignore the call since the navigation is merely taken over by the ProvisionalPageProxy. (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): Moved some PSON logic to the ProvisionalPageProxy instead. (WebKit::WebPageProxy::didFailProvisionalLoadForFrame): When didFailProvisionalLoadForFrame() is called for a ProvisionalPageProxy, destroy it. (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync): (WebKit::WebPageProxy::decidePolicyForResponse): Capture the process in the lambda, to make sure we send the policy decision to the same process that asked for it, so as to not get confused by process swaps. (WebKit::WebPageProxy::resetState): Drop some code that is no longer needed. (WebKit::WebPageProxy::creationParameters): Move the hasRegisteredServiceWorkers flag initialization from the call site to here now that we have more than one call site. This was just some bad factoring. (WebKit::WebPageProxy::PageProcessOverride::PageProcessOverride): (WebKit::WebPageProxy::PageProcessOverride::~PageProcessOverride): * UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::temporarilyOverrideProcess): Add utility class to temporarily override the WebPageProxy's m_process with the provisional one when the ProvisionalPageProxy interacts with the WebPageProxy. * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::hasProvisionalPageWithID const): (WebKit::WebProcessProxy::updateBackForwardItem): Before updating a BackForwardListItem, we normally make sure the process has a WebPageProxy with the item's pageID. We have to tweak the logic because there may now be no WebPageProxy with this pageID associated with this process yet, because it is still a ProvisionalPageProxy. (WebKit::WebProcessProxy::canTerminateChildProcess): Do not terminate the WebProcess if there are ProvisionalPageProxy objects using it. * UIProcess/WebProcessProxy.h: (WebKit::WebProcessProxy::addProvisionalPageProxy): (WebKit::WebProcessProxy::removeProvisionalPageProxy): * WebKit.xcodeproj/project.pbxproj: * WebProcess/WebPage/WebFrame.cpp: (WebKit::toPolicyAction): (WebKit::WebFrame::didReceivePolicyDecision): Stop dealing with WebPolicyAction::Suspend as it no longer exists. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::reinitializeWebPage): (WebKit::WebPage::didReceivePolicyDecision): (WebKit::WebPage::setIsSuspended): Suspend the Page when setIsSuspended(true) is called, now that there is no longer a WebPolicyAction::Suspend. setIsSuspended(true) IPC is sent when we actually commit the provisional page. * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): 2019-01-18 Tim Horton <timothy_horton@apple.com> REGRESSION (r236935): Holding down arrow key does not cause repeated DOM keydown events on device https://bugs.webkit.org/show_bug.cgi?id=191408 <rdar://problem/45895135> Rubber-stamped by Simon Fraser. * SourcesCocoa.txt: * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _scrollByContentOffset:]): * UIProcess/API/Cocoa/WKWebViewInternal.h: * UIProcess/ios/WKContentViewInteraction.h: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView setupInteraction]): (-[WKContentView cleanupInteraction]): (-[WKContentView scrollViewWillStartPanOrPinchGesture]): (-[WKContentView canPerformActionForWebView:withSender:]): (-[WKContentView keyCommands]): (-[WKContentView _arrowKeyForWebView:]): (-[WKContentView _didHandleKeyEvent:eventWasHandled:]): (-[WKContentView _scrollOffsetForEvent:]): (-[WKContentView _interpretKeyEvent:isCharEvent:]): (-[WKContentView isScrollableForKeyboardScrollViewAnimator:]): Deleted. (-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:]): Deleted. (-[WKContentView keyboardScrollViewAnimatorWillScroll:]): Deleted. (-[WKContentView keyboardScrollViewAnimatorDidFinishScrolling:]): Deleted. * UIProcess/ios/WKKeyboardScrollingAnimator.h: Removed. * UIProcess/ios/WKKeyboardScrollingAnimator.mm: Removed. * UIProcess/ios/WKPDFView.mm: (-[WKPDFView dealloc]): (-[WKPDFView web_handleKeyEvent:]): (-[WKPDFView web_initWithFrame:webView:mimeType:]): * WebKit.xcodeproj/project.pbxproj: Revert WKKeyboardScrollingAnimator. 2019-01-16 Alan Coon <alancoon@apple.com> Apply patch. rdar://problem/47260377 Cherry-pick r239887. rdar://problem/47260377 IndexedDB: leak WebIDBConnectionToClient for retain cycle https://bugs.webkit.org/show_bug.cgi?id=193097 <rdar://problem/46899601> Reviewed by Brady Eidson. Source/WebCore: Let IDBConnectionToClient hold a WeakPtr of IDBConnectionToClientDelegate. * Modules/indexeddb/server/IDBConnectionToClient.cpp: (WebCore::IDBServer::IDBConnectionToClient::IDBConnectionToClient): (WebCore::IDBServer::IDBConnectionToClient::identifier const): (WebCore::IDBServer::IDBConnectionToClient::didDeleteDatabase): (WebCore::IDBServer::IDBConnectionToClient::didOpenDatabase): (WebCore::IDBServer::IDBConnectionToClient::didAbortTransaction): (WebCore::IDBServer::IDBConnectionToClient::didCreateObjectStore): (WebCore::IDBServer::IDBConnectionToClient::didDeleteObjectStore): (WebCore::IDBServer::IDBConnectionToClient::didRenameObjectStore): (WebCore::IDBServer::IDBConnectionToClient::didClearObjectStore): (WebCore::IDBServer::IDBConnectionToClient::didCreateIndex): (WebCore::IDBServer::IDBConnectionToClient::didDeleteIndex): (WebCore::IDBServer::IDBConnectionToClient::didRenameIndex): (WebCore::IDBServer::IDBConnectionToClient::didPutOrAdd): (WebCore::IDBServer::IDBConnectionToClient::didGetRecord): (WebCore::IDBServer::IDBConnectionToClient::didGetAllRecords): (WebCore::IDBServer::IDBConnectionToClient::didGetCount): (WebCore::IDBServer::IDBConnectionToClient::didDeleteRecord): (WebCore::IDBServer::IDBConnectionToClient::didOpenCursor): (WebCore::IDBServer::IDBConnectionToClient::didIterateCursor): (WebCore::IDBServer::IDBConnectionToClient::didCommitTransaction): (WebCore::IDBServer::IDBConnectionToClient::fireVersionChangeEvent): (WebCore::IDBServer::IDBConnectionToClient::didStartTransaction): (WebCore::IDBServer::IDBConnectionToClient::didCloseFromServer): (WebCore::IDBServer::IDBConnectionToClient::notifyOpenDBRequestBlocked): (WebCore::IDBServer::IDBConnectionToClient::didGetAllDatabaseNames): * Modules/indexeddb/server/IDBConnectionToClient.h: * Modules/indexeddb/server/IDBConnectionToClientDelegate.h: Source/WebKit: Let WebIDBConnectionToClient hold reference to IPC::Connection instead of NetworkConnectionToWebProcess to break the cycle. * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp: (WebKit::WebIDBConnectionToClient::create): (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient): (WebKit::WebIDBConnectionToClient::messageSenderConnection): * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h: * NetworkProcess/NetworkConnectionToWebProcess.cpp: (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer): git-svn-id: http://svn.webkit.org/repository/webkit/trunk@239887 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-16 David Kilzer <ddkilzer@apple.com> Cherry-pick r239887. rdar://problem/47260377 2019-01-11 Sihui Liu <sihui_liu@apple.com> IndexedDB: leak WebIDBConnectionToClient for retain cycle https://bugs.webkit.org/show_bug.cgi?id=193097 <rdar://problem/46899601> Reviewed by Brady Eidson. Let WebIDBConnectionToClient hold reference to IPC::Connection instead of NetworkConnectionToWebProcess to break the cycle. * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp: (WebKit::WebIDBConnectionToClient::create): (WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient): (WebKit::WebIDBConnectionToClient::messageSenderConnection): * NetworkProcess/IndexedDB/WebIDBConnectionToClient.h: * NetworkProcess/NetworkConnectionToWebProcess.cpp: (WebKit::NetworkConnectionToWebProcess::establishIDBConnectionToServer): 2019-01-16 Alan Coon <alancoon@apple.com> Cherry-pick r239852. rdar://problem/47260195 [WebAuthN] Change the nonce in the CTAP kInit command to weak random values https://bugs.webkit.org/show_bug.cgi?id=192061 <rdar://problem/46471091> Reviewed by Chris Dumez. Change the nonce in the CTAP kInit command to weak random values as the nonce is mainly for being a probabilistically unique global identifier for hand shakes, instead of preventing replay attacks. Otherwise, it might exhaust system entropy unnecessarily. The patch also removes all logging when debugging the test case flakiness. * UIProcess/WebAuthentication/AuthenticatorManager.cpp: (WebKit::AuthenticatorManager::respondReceived): (WebKit::AuthenticatorManager::initTimeOutTimer): (WebKit::AuthenticatorManager::timeOutTimerFired): * UIProcess/WebAuthentication/Cocoa/HidService.mm: (WebKit::HidService::deviceAdded): * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.cpp: (WebKit::MockAuthenticatorManager::respondReceivedInternal): * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp: (WebKit::MockHidConnection::send): * UIProcess/WebAuthentication/fido/CtapHidAuthenticator.cpp: (WebKit::CtapHidAuthenticator::makeCredential): (WebKit::CtapHidAuthenticator::getAssertion): * UIProcess/WebAuthentication/fido/CtapHidDriver.cpp: (WebKit::CtapHidDriver::Worker::write): (WebKit::CtapHidDriver::Worker::read): (WebKit::CtapHidDriver::Worker::returnMessage): (WebKit::CtapHidDriver::transact): (WebKit::CtapHidDriver::continueAfterChannelAllocated): (WebKit::CtapHidDriver::continueAfterResponseReceived): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239852 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-10 Jiewen Tan <jiewen_tan@apple.com> [WebAuthN] Change the nonce in the CTAP kInit command to weak random values https://bugs.webkit.org/show_bug.cgi?id=192061 <rdar://problem/46471091> Reviewed by Chris Dumez. Change the nonce in the CTAP kInit command to weak random values as the nonce is mainly for being a probabilistically unique global identifier for hand shakes, instead of preventing replay attacks. Otherwise, it might exhaust system entropy unnecessarily. The patch also removes all logging when debugging the test case flakiness. * UIProcess/WebAuthentication/AuthenticatorManager.cpp: (WebKit::AuthenticatorManager::respondReceived): (WebKit::AuthenticatorManager::initTimeOutTimer): (WebKit::AuthenticatorManager::timeOutTimerFired): * UIProcess/WebAuthentication/Cocoa/HidService.mm: (WebKit::HidService::deviceAdded): * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.cpp: (WebKit::MockAuthenticatorManager::respondReceivedInternal): * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp: (WebKit::MockHidConnection::send): * UIProcess/WebAuthentication/fido/CtapHidAuthenticator.cpp: (WebKit::CtapHidAuthenticator::makeCredential): (WebKit::CtapHidAuthenticator::getAssertion): * UIProcess/WebAuthentication/fido/CtapHidDriver.cpp: (WebKit::CtapHidDriver::Worker::write): (WebKit::CtapHidDriver::Worker::read): (WebKit::CtapHidDriver::Worker::returnMessage): (WebKit::CtapHidDriver::transact): (WebKit::CtapHidDriver::continueAfterChannelAllocated): (WebKit::CtapHidDriver::continueAfterResponseReceived): 2019-01-16 Alan Coon <alancoon@apple.com> Cherry-pick r239757. rdar://problem/47260195 [Mac] Layout Test http/wpt/webauthn/public-key-credential-create-success-hid.https.html and http/wpt/webauthn/public-key-credential-get-success-hid.https.html are flaky https://bugs.webkit.org/show_bug.cgi?id=192061 Reviewed by Dewei Zhu. Part 6. Add some additional temporary logging info to determine if data is actually sent. Once the bug is determined and fixed, we should remove all logging added in this patch. * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp: (WebKit::MockHidConnection::send): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239757 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-08 Jiewen Tan <jiewen_tan@apple.com> [Mac] Layout Test http/wpt/webauthn/public-key-credential-create-success-hid.https.html and http/wpt/webauthn/public-key-credential-get-success-hid.https.html are flaky https://bugs.webkit.org/show_bug.cgi?id=192061 Reviewed by Dewei Zhu. Part 6. Add some additional temporary logging info to determine if data is actually sent. Once the bug is determined and fixed, we should remove all logging added in this patch. * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp: (WebKit::MockHidConnection::send): 2019-01-10 Jiewen Tan <jiewen_tan@apple.com> [WebAuthN] Change the nonce in the CTAP kInit command to weak random values https://bugs.webkit.org/show_bug.cgi?id=192061 <rdar://problem/46471091> Reviewed by Chris Dumez. Change the nonce in the CTAP kInit command to weak random values as the nonce is mainly for being a probabilistically unique global identifier for hand shakes, instead of preventing replay attacks. Otherwise, it might exhaust system entropy unnecessarily. The patch also removes all logging when debugging the test case flakiness. * UIProcess/WebAuthentication/AuthenticatorManager.cpp: (WebKit::AuthenticatorManager::respondReceived): (WebKit::AuthenticatorManager::initTimeOutTimer): (WebKit::AuthenticatorManager::timeOutTimerFired): * UIProcess/WebAuthentication/Cocoa/HidService.mm: (WebKit::HidService::deviceAdded): * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.cpp: (WebKit::MockAuthenticatorManager::respondReceivedInternal): * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp: (WebKit::MockHidConnection::send): * UIProcess/WebAuthentication/fido/CtapHidAuthenticator.cpp: (WebKit::CtapHidAuthenticator::makeCredential): (WebKit::CtapHidAuthenticator::getAssertion): * UIProcess/WebAuthentication/fido/CtapHidDriver.cpp: (WebKit::CtapHidDriver::Worker::write): (WebKit::CtapHidDriver::Worker::read): (WebKit::CtapHidDriver::Worker::returnMessage): (WebKit::CtapHidDriver::transact): (WebKit::CtapHidDriver::continueAfterChannelAllocated): (WebKit::CtapHidDriver::continueAfterResponseReceived): 2019-01-15 Alan Coon <alancoon@apple.com> Cherry-pick r239904. rdar://problem/4726030 Have prefers-color-scheme: light always match on macOS versions before Mojave. https://bugs.webkit.org/show_bug.cgi?id=191655 rdar://problem/46074680 Reviewed by Megan Gardner. Source/JavaScriptCore: * Configurations/FeatureDefines.xcconfig: ENABLE_DARK_MODE_CSS_macosx for all OS versions. Source/WebCore: Tests: css-dark-mode/older-systems/prefers-color-scheme.html css-dark-mode/older-systems/supported-color-schemes-css.html css-dark-mode/older-systems/supported-color-schemes.html Use new HAVE(OS_DARK_MODE_SUPPORT) to make it easier to find code. Added HAVE(OS_DARK_MODE_SUPPORT) around more bits to make it work on older systems. * Configurations/FeatureDefines.xcconfig: * dom/Document.cpp: (WebCore::Document::useDarkAppearance const): * inspector/agents/InspectorPageAgent.cpp: (WebCore::InspectorPageAgent::enable): * page/Page.cpp: (WebCore::Page::setUseDarkAppearance): (WebCore::Page::useDarkAppearance const): (WebCore::Page::setUseDarkAppearanceOverride): * platform/mac/LocalDefaultSystemAppearance.h: (WebCore::LocalDefaultSystemAppearance::usingDarkAppearance const): * platform/mac/LocalDefaultSystemAppearance.mm: (WebCore::LocalDefaultSystemAppearance::LocalDefaultSystemAppearance): (WebCore::LocalDefaultSystemAppearance::~LocalDefaultSystemAppearance): * platform/mac/ScrollAnimatorMac.mm: * rendering/RenderThemeMac.mm: (-[WebCoreTextFieldCell _adjustedCoreUIDrawOptionsForDrawingBordersOnly:]): (-[WebListButtonCell drawWithFrame:inView:]): (WebCore::RenderThemeMac::platformInactiveSelectionBackgroundColor const): (WebCore::RenderThemeMac::platformInactiveSelectionForegroundColor const): (WebCore::RenderThemeMac::platformActiveListBoxSelectionBackgroundColor const): (WebCore::RenderThemeMac::platformInactiveListBoxSelectionBackgroundColor const): (WebCore::RenderThemeMac::platformInactiveListBoxSelectionForegroundColor const): (WebCore::RenderThemeMac::systemColor const): Source/WebCore/PAL: * Configurations/FeatureDefines.xcconfig: ENABLE_DARK_MODE_CSS_macosx for all OS versions. Source/WebKit: * Configurations/FeatureDefines.xcconfig: ENABLE_DARK_MODE_CSS_macosx for all OS versions. * UIProcess/Cocoa/WebViewImpl.mm: (WebKit::WebViewImpl::effectiveAppearanceIsDark): * UIProcess/RemoteLayerTree/mac/ScrollerMac.mm: Source/WebKitLegacy/mac: * Configurations/FeatureDefines.xcconfig: ENABLE_DARK_MODE_CSS_macosx for all OS versions. * WebView/WebView.mm: (-[WebView _effectiveAppearanceIsDark]): Source/WTF: * wtf/Platform.h: Define HAVE_OS_DARK_MODE_SUPPORT on macOS 10.14. Tools: * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: ENABLE_DARK_MODE_CSS_macosx for all OS versions. * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle.mm: LayoutTests: * css-dark-mode/older-systems/prefers-color-scheme-expected.txt: Added. * css-dark-mode/older-systems/prefers-color-scheme.html: Added. * css-dark-mode/older-systems/supported-color-schemes-css-expected.txt: Added. * css-dark-mode/older-systems/supported-color-schemes-css.html: Added. * css-dark-mode/older-systems/supported-color-schemes-expected.txt: Added. * css-dark-mode/older-systems/supported-color-schemes.html: Added. * platform/mac/TestExpectations: git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239904 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-12 Timothy Hatcher <timothy@apple.com> Have prefers-color-scheme: light always match on macOS versions before Mojave. https://bugs.webkit.org/show_bug.cgi?id=191655 rdar://problem/46074680 Reviewed by Megan Gardner. * Configurations/FeatureDefines.xcconfig: ENABLE_DARK_MODE_CSS_macosx for all OS versions. * UIProcess/Cocoa/WebViewImpl.mm: (WebKit::WebViewImpl::effectiveAppearanceIsDark): * UIProcess/RemoteLayerTree/mac/ScrollerMac.mm: 2019-01-15 Alan Coon <alancoon@apple.com> Cherry-pick r239888. rdar://problem/47260286 Compile out Web API Statistics Collection https://bugs.webkit.org/show_bug.cgi?id=193370 <rdar://problem/45388584> Reviewed by Brent Fulgham. Source/JavaScriptCore: * Configurations/FeatureDefines.xcconfig: Defined ENABLE_WEB_API_STATISTICS, off by default. Source/WebCore: No new tests. This patch disables functionality. The associated tests are skipped. These functions are now no-ops unless web API statistics is enabled. * Configurations/FeatureDefines.xcconfig: * loader/ResourceLoadObserver.cpp: (WebCore::ResourceLoadObserver::logFontLoad): (WebCore::ResourceLoadObserver::logCanvasRead): (WebCore::ResourceLoadObserver::logCanvasWriteOrMeasure): (WebCore::ResourceLoadObserver::logNavigatorAPIAccessed): (WebCore::ResourceLoadObserver::logScreenAPIAccessed): * loader/ResourceLoadStatistics.cpp: (WebCore::ResourceLoadStatistics::encode const): (WebCore::ResourceLoadStatistics::decode): (WebCore::ResourceLoadStatistics::toString const): (WebCore::ResourceLoadStatistics::merge): * loader/ResourceLoadStatistics.h: The associated struct members are skipped unless web API statistics is enabled. Source/WebCore/PAL: * Configurations/FeatureDefines.xcconfig: Defined ENABLE_WEB_API_STATISTICS, off by default. Source/WebKit: * Configurations/FeatureDefines.xcconfig: Defined ENABLE_WEB_API_STATISTICS, off by default. * Shared/WebCoreArgumentCoders.cpp: (IPC::ArgumentCoder<ResourceLoadStatistics>::encode): Skipped encoding of web API statistics. (IPC::ArgumentCoder<ResourceLoadStatistics>::decode): Skipped decoding of web API statistics. Source/WebKitLegacy/mac: * Configurations/FeatureDefines.xcconfig: Defined ENABLE_WEB_API_STATISTICS, off by default. Tools: * TestWebKitAPI/Configurations/FeatureDefines.xcconfig: Defined ENABLE_WEB_API_STATISTICS, off by default. LayoutTests: * platform/ios-wk2/TestExpectations: http/tests/webAPIStatistics skipped. * platform/mac-wk2/TestExpectations: http/tests/webAPIStatistics skipped. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239888 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-11 John Wilander <wilander@apple.com> Compile out Web API Statistics Collection https://bugs.webkit.org/show_bug.cgi?id=193370 <rdar://problem/45388584> Reviewed by Brent Fulgham. * Configurations/FeatureDefines.xcconfig: Defined ENABLE_WEB_API_STATISTICS, off by default. * Shared/WebCoreArgumentCoders.cpp: (IPC::ArgumentCoder<ResourceLoadStatistics>::encode): Skipped encoding of web API statistics. (IPC::ArgumentCoder<ResourceLoadStatistics>::decode): Skipped decoding of web API statistics. 2019-01-15 Alan Coon <alancoon@apple.com> Cherry-pick r239880. rdar://problem/47260310 REGRESSION (PSON): Firefox app lacks Open in New Tab in menu https://bugs.webkit.org/show_bug.cgi?id=193366 <rdar://problem/46097212> Reviewed by Simon Fraser. Source/WebCore: * platform/RuntimeApplicationChecks.h: * platform/cocoa/RuntimeApplicationChecksCocoa.mm: (WebCore::IOSApplication::isFirefox): Add a Firefox Mobile bundle check. Source/WebKit: A pair of unrelated changes broke Firefox's use of WKWebView internals to override the long-press menu. Maintain binary compatibility by introducing linked-on-or-after checks. * UIProcess/Cocoa/VersionChecks.h: * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::createWebPage): Disable PSON in Firefox when linked against an SDK where PSON wasn't enabled by default. Because gestures are very stateful, we always swap them out when swapping processes (changing that behavior is fairly risky). Also, we don't always inform the client when we swap processes (only when the process actually crashes), so they currently don't re-adjust the gesture recognizers when a PSON swap occurs. * UIProcess/ios/WKContentView.mm: (-[WKContentView _commonInitializationWithProcessPool:configuration:]): Synchronously install gesture recognizers under -init when linked against an SDK before the version that introduces lazy gesture recognizer installation. r237331 is an optimization that made us lazily install gestures when the view is parented, but Firefox (and potentially other clients) depend on them being installed synchronously in order to find and override them. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239880 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-11 Tim Horton <timothy_horton@apple.com> REGRESSION (PSON): Firefox app lacks Open in New Tab in menu https://bugs.webkit.org/show_bug.cgi?id=193366 <rdar://problem/46097212> Reviewed by Simon Fraser. A pair of unrelated changes broke Firefox's use of WKWebView internals to override the long-press menu. Maintain binary compatibility by introducing linked-on-or-after checks. * UIProcess/Cocoa/VersionChecks.h: * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::createWebPage): Disable PSON in Firefox when linked against an SDK where PSON wasn't enabled by default. Because gestures are very stateful, we always swap them out when swapping processes (changing that behavior is fairly risky). Also, we don't always inform the client when we swap processes (only when the process actually crashes), so they currently don't re-adjust the gesture recognizers when a PSON swap occurs. * UIProcess/ios/WKContentView.mm: (-[WKContentView _commonInitializationWithProcessPool:configuration:]): Synchronously install gesture recognizers under -init when linked against an SDK before the version that introduces lazy gesture recognizer installation. r237331 is an optimization that made us lazily install gestures when the view is parented, but Firefox (and potentially other clients) depend on them being installed synchronously in order to find and override them. 2019-01-15 Alan Coon <alancoon@apple.com> Cherry-pick r239851. rdar://problem/47260326 Add WKBundlePage SPI to temporarily force light or dark appearance on a page. https://bugs.webkit.org/show_bug.cgi?id=193327 rdar://problem/47093222 Reviewed by Tim Horton. Source/WebKit: Tests: WebKit.ForceLightAppearanceInBundle API Test * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageSetUseDarkAppearance): Added. (WKBundlePageIsUsingDarkAppearance): Added. * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h: Tools: * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle.mm: Added. (TestWebKitAPI::didFinishNavigation): (TestWebKitAPI::didReceiveMessageFromInjectedBundle): (TestWebKitAPI::TEST): * TestWebKitAPI/Tests/WebKit/mac/ForceLightAppearanceInBundle_Bundle.mm: Added. (TestWebKitAPI::ForceLightAppearanceInBundleTest::ForceLightAppearanceInBundleTest): (TestWebKitAPI::ForceLightAppearanceInBundleTest::didCreatePage): (TestWebKitAPI::ForceLightAppearanceInBundleTest::didReceiveMessage): * TestWebKitAPI/Tests/WebKit/mac/dark-mode.html: Added. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239851 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-10 Timothy Hatcher <timothy@apple.com> Add WKBundlePage SPI to temporarily force light or dark appearance on a page. https://bugs.webkit.org/show_bug.cgi?id=193327 rdar://problem/47093222 Reviewed by Tim Horton. Tests: WebKit.ForceLightAppearanceInBundle API Test * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageSetUseDarkAppearance): Added. (WKBundlePageIsUsingDarkAppearance): Added. * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h: 2019-01-15 Alan Coon <alancoon@apple.com> Cherry-pick r239850. rdar://problem/47260243 DeviceID hash salt manager can be NULL https://bugs.webkit.org/show_bug.cgi?id=193334 <rdar://problem/47179650> Reviewed by Youenn Fablet. * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted): No need to NULL-check websiteDataStore.deviceIdHashSaltStorage, it is a Ref. (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame): Ditto. (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo): Ditto. (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame): Ditto. * UIProcess/WebsiteData/WebsiteDataStore.cpp: (WebKit::WebsiteDataStore::WebsiteDataStore): m_deviceIdHashSaltStorage is a Ref. (WebKit::WebsiteDataStore::fetchDataAndApply): Ditto. (WebKit::WebsiteDataStore::removeData): Ditto. * UIProcess/WebsiteData/WebsiteDataStore.h: (WebKit::WebsiteDataStore::deviceIdHashSaltStorage): Ditto. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239850 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-10 Eric Carlson <eric.carlson@apple.com> DeviceID hash salt manager can be NULL https://bugs.webkit.org/show_bug.cgi?id=193334 <rdar://problem/47179650> Reviewed by Youenn Fablet. * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted): No need to NULL-check websiteDataStore.deviceIdHashSaltStorage, it is a Ref. (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame): Ditto. (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo): Ditto. (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame): Ditto. * UIProcess/WebsiteData/WebsiteDataStore.cpp: (WebKit::WebsiteDataStore::WebsiteDataStore): m_deviceIdHashSaltStorage is a Ref. (WebKit::WebsiteDataStore::fetchDataAndApply): Ditto. (WebKit::WebsiteDataStore::removeData): Ditto. * UIProcess/WebsiteData/WebsiteDataStore.h: (WebKit::WebsiteDataStore::deviceIdHashSaltStorage): Ditto. 2019-01-15 Alan Coon <alancoon@apple.com> Cherry-pick r239843. rdar://problem/47260277 REGRESSION (r237658): Tap highlight limits cause the highlight to no longer show with legitimate button sizes https://bugs.webkit.org/show_bug.cgi?id=193294 <rdar://problem/46006678> Reviewed by Simon Fraser. Input type elements should always paint tap highlight (ignore size heuristic). * UIProcess/PageClient.h: * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * UIProcess/ios/PageClientImplIOS.h: * UIProcess/ios/PageClientImplIOS.mm: (WebKit::PageClientImpl::didGetTapHighlightGeometries): * UIProcess/ios/WKContentViewInteraction.h: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView _showTapHighlight]): (-[WKContentView _didGetTapHighlightForRequest:color:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:nodeHasBuiltInClickHandling:]): (-[WKContentView _didGetTapHighlightForRequest:color:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:]): Deleted. * UIProcess/ios/WebPageProxyIOS.mm: (WebKit::WebPageProxy::didGetTapHighlightGeometries): * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::sendTapHighlightForNodeIfNecessary): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239843 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-10 Zalan Bujtas <zalan@apple.com> REGRESSION (r237658): Tap highlight limits cause the highlight to no longer show with legitimate button sizes https://bugs.webkit.org/show_bug.cgi?id=193294 <rdar://problem/46006678> Reviewed by Simon Fraser. Input type elements should always paint tap highlight (ignore size heuristic). * UIProcess/PageClient.h: * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * UIProcess/ios/PageClientImplIOS.h: * UIProcess/ios/PageClientImplIOS.mm: (WebKit::PageClientImpl::didGetTapHighlightGeometries): * UIProcess/ios/WKContentViewInteraction.h: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView _showTapHighlight]): (-[WKContentView _didGetTapHighlightForRequest:color:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:nodeHasBuiltInClickHandling:]): (-[WKContentView _didGetTapHighlightForRequest:color:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:]): Deleted. * UIProcess/ios/WebPageProxyIOS.mm: (WebKit::WebPageProxy::didGetTapHighlightGeometries): * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::sendTapHighlightForNodeIfNecessary): 2019-01-15 Alan Coon <alancoon@apple.com> Cherry-pick r239832. rdar://problem/47260343 Override the session configuration for cookieAcceptPolicy https://bugs.webkit.org/show_bug.cgi?id=190925 <rdar://problem/45497382> Patch by John Wilander <wilander@apple.com> on 2019-01-10 Reviewed by Alexey Proskuryakov and Alex Christensen. Source/WebCore/PAL: * pal/spi/cf/CFNetworkSPI.h: Declaration of _overrideSessionCookieAcceptPolicy on NSHTTPCookieStorage. Source/WebKit: * NetworkProcess/cocoa/NetworkSessionCocoa.mm: (WebKit::NetworkSessionCocoa::NetworkSessionCocoa): Now sets cookieStorage._overrideSessionCookieAcceptPolicy to YES. Source/WTF: * wtf/Platform.h: Definition of HAVE_CFNETWORK_OVERRIDE_SESSION_COOKIE_ACCEPT_POLICY. Tools: Test infrastructure for setting a first-party-only cookie policy. * DumpRenderTree/TestRunner.cpp: (setOnlyAcceptFirstPartyCookiesCallback): (TestRunner::staticFunctions): * DumpRenderTree/TestRunner.h: * DumpRenderTree/mac/TestRunnerMac.mm: (TestRunner::setOnlyAcceptFirstPartyCookies): * DumpRenderTree/win/TestRunnerWin.cpp: (TestRunner::setOnlyAcceptFirstPartyCookies): * WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl: * WebKitTestRunner/InjectedBundle/TestRunner.cpp: (WTR::TestRunner::setOnlyAcceptFirstPartyCookies): * WebKitTestRunner/InjectedBundle/TestRunner.h: * WebKitTestRunner/TestInvocation.cpp: (WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle): LayoutTests: * TestExpectations: Skipped since this cookie policy is only supported on Cocoa platforms. * http/tests/cookies/only-accept-first-party-cookies-expected.txt: Added. * http/tests/cookies/only-accept-first-party-cookies.html: Added. * http/tests/cookies/resources/reset-cookies.html: Added. To support reset of third-party cookies in an iframe. * http/tests/cookies/resources/set-cookie-and-redirect-back.php: Added. A simple bounce to set a cookie. * platform/ios/TestExpectations: Skipped for now. Will be fixed in <rdar://problem/47165939>. * platform/mac/TestExpectations: Skipped for now. Will be fixed in <rdar://problem/47165939>. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239832 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-10 John Wilander <wilander@apple.com> Override the session configuration for cookieAcceptPolicy https://bugs.webkit.org/show_bug.cgi?id=190925 <rdar://problem/45497382> Reviewed by Alexey Proskuryakov and Alex Christensen. * NetworkProcess/cocoa/NetworkSessionCocoa.mm: (WebKit::NetworkSessionCocoa::NetworkSessionCocoa): Now sets cookieStorage._overrideSessionCookieAcceptPolicy to YES. 2019-01-15 Alan Coon <alancoon@apple.com> Apply patch. rdar://problem/47260255 2019-01-15 Chris Dumez <cdumez@apple.com> Better disable Automatic HTTPS upgrade <rdar://problem/47213216> Reviewed by Geoff Garen. Drop database file from the bundle as it is currently huge and increases our project size unnecessarily. Also hide the feature from the experimental feature menu since enabling it will not do anything without its database. * DerivedSources.make: * Shared/WebPreferences.yaml: * WebKit.xcodeproj/project.pbxproj: 2019-01-15 Alan Coon <alancoon@apple.com> Revert r239446. rdar://problem/47125351 2019-01-09 Kocsen Chung <kocsen_chung@apple.com> Cherry-pick r239777. rdar://problem/47158629 [PSON] Flash of blank content while transitioning from page A to page B. https://bugs.webkit.org/show_bug.cgi?id=193283 Reviewed by Chris Dumez. Layer tree is not frozen during WebPage construction. If the flush timer (started for the initial empty document) manages to run before the actual page load starts, we'll get a flash. * Shared/WebPageCreationParameters.cpp: (WebKit::WebPageCreationParameters::encode const): (WebKit::WebPageCreationParameters::decode): * Shared/WebPageCreationParameters.h: Rename shouldDelayAttachingDrawingArea bit to isSwapFromSuspended and make it available on all platforms. * UIProcess/RemoteLayerTree/mac/ScrollerMac.h: Removed. * UIProcess/RemoteLayerTree/mac/ScrollerMac.mm: Removed. * UIProcess/RemoteLayerTree/mac/ScrollerPairMac.h: Removed. * UIProcess/RemoteLayerTree/mac/ScrollerPairMac.mm: Removed. * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp: Removed. * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.h: Removed. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::swapToWebProcess): (WebKit::WebPageProxy::finishAttachingToWebProcess): (WebKit::WebPageProxy::initializeWebPage): (WebKit::WebPageProxy::continueNavigationInNewProcess): * UIProcess/WebPageProxy.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::m_shouldAttachDrawingAreaOnPageTransition): Freeze the layer tree in WebPage constructor if this is a swap from a suspended process. (WebKit::WebPage::reinitializeWebPage): (WebKit::WebPage::didCompletePageTransition): Unfreeze on first non-initial empty document page transition. * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239777 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-09 Antti Koivisto <antti@apple.com> [PSON] Flash of blank content while transitioning from page A to page B. https://bugs.webkit.org/show_bug.cgi?id=193283 Reviewed by Chris Dumez. Layer tree is not frozen during WebPage construction. If the flush timer (started for the initial empty document) manages to run before the actual page load starts, we'll get a flash. * Shared/WebPageCreationParameters.cpp: (WebKit::WebPageCreationParameters::encode const): (WebKit::WebPageCreationParameters::decode): * Shared/WebPageCreationParameters.h: Rename shouldDelayAttachingDrawingArea bit to isSwapFromSuspended and make it available on all platforms. * UIProcess/RemoteLayerTree/mac/ScrollerMac.h: Removed. * UIProcess/RemoteLayerTree/mac/ScrollerMac.mm: Removed. * UIProcess/RemoteLayerTree/mac/ScrollerPairMac.h: Removed. * UIProcess/RemoteLayerTree/mac/ScrollerPairMac.mm: Removed. * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.cpp: Removed. * UIProcess/RemoteLayerTree/mac/ScrollingTreeFrameScrollingNodeRemoteMac.h: Removed. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::swapToWebProcess): (WebKit::WebPageProxy::finishAttachingToWebProcess): (WebKit::WebPageProxy::initializeWebPage): (WebKit::WebPageProxy::continueNavigationInNewProcess): * UIProcess/WebPageProxy.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::m_shouldAttachDrawingAreaOnPageTransition): Freeze the layer tree in WebPage constructor if this is a swap from a suspended process. (WebKit::WebPage::reinitializeWebPage): (WebKit::WebPage::didCompletePageTransition): Unfreeze on first non-initial empty document page transition. * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea): 2019-01-09 Kocsen Chung <kocsen_chung@apple.com> Cherry-pick r239694. rdar://problem/47158722 Deactivate audio session whenever possible https://bugs.webkit.org/show_bug.cgi?id=193188 <rdar://problem/42678977> Reviewed by Jer Noble. Source/WebCore: Test: media/deactivate-audio-session.html * platform/audio/AudioSession.cpp: (WebCore::AudioSession::tryToSetActive): (WebCore::AudioSession::tryToSetActiveInternal): * platform/audio/AudioSession.h: (WebCore::AudioSession::isActive const): * platform/audio/PlatformMediaSessionManager.cpp: (WebCore::PlatformMediaSessionManager::removeSession): (WebCore::deactivateAudioSession): (WebCore::PlatformMediaSessionManager::shouldDeactivateAudioSession): (WebCore::PlatformMediaSessionManager::setShouldDeactivateAudioSession): * platform/audio/PlatformMediaSessionManager.h: * platform/audio/ios/AudioSessionIOS.mm: (WebCore::AudioSession::tryToSetActiveInternal): (WebCore::AudioSession::tryToSetActive): Deleted. * platform/audio/mac/AudioSessionMac.cpp: (WebCore::AudioSession::tryToSetActiveInternal): (WebCore::AudioSession::tryToSetActive): Deleted. * testing/Internals.cpp: (WebCore::Internals::audioSessionActive const): * testing/Internals.h: * testing/Internals.idl: Source/WebKit: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::WebPage): LayoutTests: * TestExpectations: Skip the new test. * media/deactivate-audio-session-expected.txt: Added. * media/deactivate-audio-session.html: Added. * platform/ios/TestExpectations: Run the new test. * platform/mac-wk2/TestExpectations: Ditto. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239694 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-07 Eric Carlson <eric.carlson@apple.com> Deactivate audio session whenever possible https://bugs.webkit.org/show_bug.cgi?id=193188 <rdar://problem/42678977> Reviewed by Jer Noble. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::WebPage): 2019-01-09 Kocsen Chung <kocsen_chung@apple.com> Cherry-pick r239691. rdar://problem/47158674 [Cocoa] Add SPI to check if a WKWebView has an inspector frontend https://bugs.webkit.org/show_bug.cgi?id=193162 <rdar://problem/24267143> Patch by Joseph Pecoraro <pecoraro@apple.com> on 2019-01-07 Reviewed by Alex Christensen. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _hasInspectorFrontend]): * UIProcess/API/Cocoa/WKWebViewPrivate.h: * UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::hasInspectorFrontend const): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239691 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-07 Joseph Pecoraro <pecoraro@apple.com> [Cocoa] Add SPI to check if a WKWebView has an inspector frontend https://bugs.webkit.org/show_bug.cgi?id=193162 <rdar://problem/24267143> Reviewed by Alex Christensen. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _hasInspectorFrontend]): * UIProcess/API/Cocoa/WKWebViewPrivate.h: * UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::hasInspectorFrontend const): 2019-01-09 Kocsen Chung <kocsen_chung@apple.com> Cherry-pick r239686. rdar://problem/47158659 Unwanted page navigation after showing & dismissing contextual menu with control-click https://bugs.webkit.org/show_bug.cgi?id=192912 <rdar://problem/46318508> Reviewed by Timothy Hatcher. After the conversion to use a mouse event queue, this behavior was observed rarely, especially when CPU is under load and lots of things are going on in the page. In other words, it's racy. Based on NSEvent logging, it seems that when the system is under load, we simply take too long to enter the nested runloop that AppKit uses to handle events when the context menu is present. AppKit doesn't care whether or not the MouseDown triggered a nested runloop; on my machine it delivers the MouseUp event about 130ms after the MouseDown event. If we haven't show the context menu in that time, then the MouseUp is enqueued as a normal mouse event. If the Ctrl-click is on a link, then the MouseUp will be interpreted by EventHandler as a click event, which in the simplest case will initiate a main frame navigation. When the context menu is dismissed and the nested runloop is torn down, the navigation IPC message is handled in UIProcess and the page navigates away. We can't do much to change AppKit's inherently racy behavior, but we can avoid processing mouse events that are delivered whilst we are processing the context menu-initiating event. From the WebProcess point of view, there is no race anymore because it does not receive the MouseUp event. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::showContextMenu): If new events come in, drop them on the floor. Based on testing, the nested runloop will discard the unpaired MouseUp event anyway, so this does not cause a change in behavior. git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239686 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-07 Brian Burg <bburg@apple.com> Unwanted page navigation after showing & dismissing contextual menu with control-click https://bugs.webkit.org/show_bug.cgi?id=192912 <rdar://problem/46318508> Reviewed by Timothy Hatcher. After the conversion to use a mouse event queue, this behavior was observed rarely, especially when CPU is under load and lots of things are going on in the page. In other words, it's racy. Based on NSEvent logging, it seems that when the system is under load, we simply take too long to enter the nested runloop that AppKit uses to handle events when the context menu is present. AppKit doesn't care whether or not the MouseDown triggered a nested runloop; on my machine it delivers the MouseUp event about 130ms after the MouseDown event. If we haven't show the context menu in that time, then the MouseUp is enqueued as a normal mouse event. If the Ctrl-click is on a link, then the MouseUp will be interpreted by EventHandler as a click event, which in the simplest case will initiate a main frame navigation. When the context menu is dismissed and the nested runloop is torn down, the navigation IPC message is handled in UIProcess and the page navigates away. We can't do much to change AppKit's inherently racy behavior, but we can avoid processing mouse events that are delivered whilst we are processing the context menu-initiating event. From the WebProcess point of view, there is no race anymore because it does not receive the MouseUp event. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::showContextMenu): If new events come in, drop them on the floor. Based on testing, the nested runloop will discard the unpaired MouseUp event anyway, so this does not cause a change in behavior. 2019-01-09 Alan Coon <alancoon@apple.com> Cherry-pick r239776. rdar://problem/47147610 WebKit Networking process crashes if the HTTPSUpgradeList is not found in the bundle https://bugs.webkit.org/show_bug.cgi?id=193285 <rdar://problem/47147610> Reviewed by Geoffrey Garen. * NetworkProcess/NetworkHTTPSUpgradeChecker.cpp: (WebKit::networkHTTPSUpgradeCheckerDatabasePath): (WebKit::NetworkHTTPSUpgradeChecker::NetworkHTTPSUpgradeChecker): git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239776 268f45cc-cd09-0410-ab3c-d52691b4dbfc 2019-01-09 Chris Dumez <cdumez@apple.com> WebKit Networking process crashes if the HTTPSUpgradeList is not found in the bundle https://bugs.webkit.org/show_bug.cgi?id=193285 <rdar://problem/47147610> Reviewed by Geoffrey Garen. * NetworkProcess/NetworkHTTPSUpgradeChecker.cpp: (WebKit::networkHTTPSUpgradeCheckerDatabasePath): (WebKit::NetworkHTTPSUpgradeChecker::NetworkHTTPSUpgradeChecker): 2019-01-07 Alex Christensen <achristensen@webkit.org> Modernize CacheModel and disk cache fetching and clearing https://bugs.webkit.org/show_bug.cgi?id=193164 Reviewed by Joseph Pecoraro. fetchDiskCacheEntries and clearDiskCacheEntries now use an early-return model. CacheModel is now an enum class. * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::NetworkProcess): (WebKit::NetworkProcess::initializeNetworkProcess): (WebKit::fetchDiskCacheEntries): (WebKit::NetworkProcess::fetchWebsiteData): (WebKit::clearDiskCacheEntries): (WebKit::NetworkProcess::setCacheModel): * NetworkProcess/NetworkProcess.h: * NetworkProcess/NetworkProcess.messages.in: * NetworkProcess/NetworkProcessCreationParameters.h: * NetworkProcess/cache/NetworkCacheEntry.cpp: (WebKit::NetworkCache::Entry::initializeShareableResourceHandleFromStorageRecord const): * NetworkProcess/cocoa/NetworkProcessCocoa.mm: (WebKit::NetworkProcess::clearDiskCache): * Shared/CacheModel.cpp: (WebKit::calculateMemoryCacheSizes): (WebKit::calculateURLCacheSizes): * Shared/CacheModel.h: (): Deleted. * UIProcess/API/APIProcessPoolConfiguration.cpp: (API::ProcessPoolConfiguration::createWithLegacyOptions): * UIProcess/API/APIProcessPoolConfiguration.h: * UIProcess/API/C/WKAPICast.h: (WebKit::toCacheModel): (WebKit::toAPI): * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm: (-[_WKProcessPoolConfiguration pageCacheEnabled]): (-[_WKProcessPoolConfiguration setPageCacheEnabled:]): * WebProcess/WebProcess.cpp: (WebKit::WebProcess::initializeWebProcess): (WebKit::WebProcess::setCacheModel): (WebKit::WebProcess::clearResourceCaches): * WebProcess/WebProcess.h: * WebProcess/WebProcess.messages.in: 2019-01-06 Jiewen Tan <jiewen_tan@apple.com> [WebAuthN] Import U2F command/response converters from Chromium https://bugs.webkit.org/show_bug.cgi?id=193150 <rdar://problem/47054028> Reviewed by Brent Fulgham. Moves helper functions to WebAuthenticationUtils. * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm: (WebKit::LocalAuthenticatorInternal::produceHashSet): (WebKit::LocalAuthenticator::continueMakeCredentialAfterAttested): (): Deleted. (WebKit::LocalAuthenticatorInternal::buildAuthData): Deleted. * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp: (WebKit::MockHidConnection::feedReports): 2019-01-04 Joseph Pecoraro <pecoraro@apple.com> Web Inspector: Use save sheet instead of dialog where possible https://bugs.webkit.org/show_bug.cgi?id=193160 <rdar://problem/37399759> Reviewed by Devin Rousso. * UIProcess/mac/RemoteWebInspectorProxyMac.mm: (WebKit::RemoteWebInspectorProxy::platformSave): * UIProcess/mac/WebInspectorProxyMac.mm: (WebKit::WebInspectorProxy::platformSave): 2019-01-04 Jer Noble <jer.noble@apple.com> [WebKitLegacy] Media playback pauses on scroll https://bugs.webkit.org/show_bug.cgi?id=192829 Reviewed by Eric Carlson. Add a new WebPage, WebPageProxy, & WKWebView SPI to stop, suspend, and resume all existing media playback in the page. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _stopAllMediaPlayback]): (-[WKWebView _suspendAllMediaPlayback]): (-[WKWebView _resumeAllMediaPlayback]): * UIProcess/API/Cocoa/WKWebViewPrivate.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::stopAllMediaPlayback): (WebKit::WebPageProxy::suspendAllMediaPlayback): (WebKit::WebPageProxy::resumeAllMediaPlayback): * UIProcess/WebPageProxy.h: * UIProcess/ios/fullscreen/WKFullScreenViewController.mm: (-[WKFullScreenViewController _showPhishingAlert]): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::stopAllMediaPlayback): (WebKit::WebPage::suspendAllMediaPlayback): (WebKit::WebPage::resumeAllMediaPlayback): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: 2019-01-04 Chris Dumez <cdumez@apple.com> Add support for toggling device orientation API support per site https://bugs.webkit.org/show_bug.cgi?id=193143 <rdar://problem/46605724> Reviewed by Alex Christensen. Add support for toggling device orientation API support per site via _WKWebsitePolicies. * Shared/WebsitePoliciesData.cpp: (WebKit::WebsitePoliciesData::encode const): (WebKit::WebsitePoliciesData::decode): (WebKit::WebsitePoliciesData::applyToDocumentLoader): * Shared/WebsitePoliciesData.h: * UIProcess/API/APIWebsitePolicies.cpp: (API::WebsitePolicies::data): * UIProcess/API/APIWebsitePolicies.h: * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _simulateDeviceOrientationChangeWithAlpha:beta:gamma:]): * UIProcess/API/Cocoa/WKWebViewPrivate.h: * UIProcess/API/Cocoa/_WKWebsitePolicies.h: * UIProcess/API/Cocoa/_WKWebsitePolicies.mm: (-[_WKWebsitePolicies setDeviceOrientationEventEnabled:]): (-[_WKWebsitePolicies deviceOrientationEventEnabled]): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::simulateDeviceOrientationChange): * UIProcess/WebPageProxy.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::simulateDeviceOrientationChange): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: 2019-01-04 Chris Dumez <cdumez@apple.com> Crash under WebPageProxy::continueNavigationInNewProcess() https://bugs.webkit.org/show_bug.cgi?id=193113 <rdar://problem/46938686> Reviewed by Brady Eidson. The crash was happening in continueNavigationInNewProcess() when dereferencing the Optional<> value returned by API::Navigation::backForwardFrameLoadType(), after verifying that API::Navigation::targetItem() is not null. When constructing an API::Navigation object with a targetItem, you HAVE to pass in a backForwardFrameLoadType as well so this normally is not possible. However, it can happen because API::Navigation::setTargetItem() can get called later on and set a target item on a Navigation object which potentially does not have a backForwardFrameLoadType. This setter was only called in one place in decidePolicyForNavigationAction() to update an existing Navigation object using the targetItem provided by a NavigationAction. This logic was added with PSON support. Because I was unable to write a test case reproducing this and because I do not know how it can happen in practice that we'd have a NavigationAction with a targetItem even though the Navigation object itself is not for a back/forward navigation, I have chosen to drop the unsafe API::Navigation::setTargetItem() setter and the call site. When the call site was added, with ProcessSwap.NavigateToDataURLThenBack API test, the intention was to create a back/forward navigation object instead of a standard load navigation one if there is currently no existing Navigation object in the UIProcess. This can happen when the back/forward navigation is triggered by the WebProcess via JS (e.g. history.back()) and this is what the API test covers. The part of the logic that updates an existing Navigation object with a targetItem coming from the NavigationAction is untested and I have no evidence it does anything useful. However, we DO have evidence that it can cause crashes. * UIProcess/API/APINavigation.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::decidePolicyForNavigationAction): 2019-01-04 Tim Horton <timothy_horton@apple.com> Remove some nonexistent files from the WebKit Xcode project * WebKit.xcodeproj/project.pbxproj: r238468 and r237205 forgot to remove some files from the project. 2019-01-04 Youenn Fablet <youenn@apple.com> CSP violation reports should bypass CSP checks https://bugs.webkit.org/show_bug.cgi?id=192857 <rdar://problem/46887236> Reviewed by Chris Dumez. * WebProcess/Network/WebLoaderStrategy.cpp: (WebKit::WebLoaderStrategy::startPingLoad): * WebProcess/Network/WebLoaderStrategy.h: 2019-01-04 Alex Christensen <achristensen@webkit.org> Use WebsiteDataStoreParameters instead of NetworkProcessCreationParameters for IndexedDB directories https://bugs.webkit.org/show_bug.cgi?id=193114 Reviewed by Brady Eidson. * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::initializeNetworkProcess): * NetworkProcess/NetworkProcessCreationParameters.cpp: (WebKit::NetworkProcessCreationParameters::encode const): (WebKit::NetworkProcessCreationParameters::decode): * NetworkProcess/NetworkProcessCreationParameters.h: * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::ensureNetworkProcess): 2019-01-04 Alex Christensen <achristensen@webkit.org> Deprecate WKContextCreate https://bugs.webkit.org/show_bug.cgi?id=193118 Reviewed by Brady Eidson. It has only one use that is being removed in rdar://problem/47030792 This is a step towards removing ProcessPoolConfiguration::createWithLegacyOptions. Also make WKContextCreateWithConfiguration accept a null configuration to make it easier to use. * UIProcess/API/C/WKContext.cpp: (WKContextCreateWithConfiguration): * UIProcess/API/C/WKContext.h: 2019-01-04 Tim Horton <timothy_horton@apple.com> Fix the build * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView cleanupInteraction]): 2019-01-04 Tim Horton <timothy_horton@apple.com> Share ink choice and ruler between all editable images https://bugs.webkit.org/show_bug.cgi?id=193130 <rdar://problem/46826491> Reviewed by Wenson Hsieh. * SourcesCocoa.txt: Add WKDrawingCoordinator, which maintains WKWebView-wide drawing state, and manages a single shared ink picker. * UIProcess/PageClient.h: (WebKit::PageClient::createDrawingView): * UIProcess/ios/EditableImageController.mm: (WebKit::EditableImageController::ensureEditableImage): * UIProcess/ios/PageClientImplIOS.h: * UIProcess/ios/PageClientImplIOS.mm: (WebKit::PageClientImpl::createDrawingView): Plumb WKDrawingView creation through PageClient, so that it can be instantiated with knowledge of its owning WKContentView. * UIProcess/ios/WKContentViewInteraction.h: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]): (-[WKContentView _elementDidBlur]): (-[WKContentView _drawingCoordinator]): (-[WKContentView _installInkPickerForDrawingViewWithID:]): Deleted. (-[WKContentView _uninstallInkPicker]): Deleted. Move ink picker management into WKDrawingCoordinator. * UIProcess/ios/WKDrawingView.h: * UIProcess/ios/WKDrawingView.mm: (-[WKDrawingView initWithEmbeddedViewID:contentView:]): (-[WKDrawingView _canvasViewWillBeginDrawing:]): (-[WKDrawingView invalidateAttachment]): (-[WKDrawingView didChangeRulerState:]): (-[WKDrawingView initWithEmbeddedViewID:webPageProxy:]): Deleted. (-[WKDrawingView canvasView]): Deleted. Use a shared ruler, owned by WKDrawingCoordinator. Update the editable image's ink when drawing begins. This way, we don't have to push ink changes to all drawings as they happen. * UIProcess/ios/WKInkPickerView.h: * UIProcess/ios/WKInkPickerView.mm: (-[WKInkPickerView initWithContentView:]): (-[WKInkPickerView inlineInkPickerDidToggleRuler:]): (-[WKInkPickerView viewControllerForPopoverPresentationFromInlineInkPicker:]): (-[WKInkPickerView setInk:]): (-[WKInkPickerView ink]): (-[WKInkPickerView initWithDrawingView:]): Deleted. (-[WKInkPickerView didPickInk]): Deleted. (-[WKInkPickerView inlineInkPicker:didSelectTool:]): Deleted. (-[WKInkPickerView inlineInkPicker:didSelectColor:]): Deleted. * WebKit.xcodeproj/project.pbxproj: 2019-01-04 Wenson Hsieh <wenson_hsieh@apple.com> [Cocoa] Merge WebEditCommandProxy::nameForEditAction and undoNameForEditAction into a single function https://bugs.webkit.org/show_bug.cgi?id=193129 Reviewed by Tim Horton. Remove WebEditCommandProxy::nameForEditAction and use WebCore::nameForUndoRedo instead. * UIProcess/Cocoa/WebViewImpl.mm: (WebKit::WebViewImpl::registerEditCommand): * UIProcess/WebEditCommandProxy.cpp: (WebKit::WebEditCommandProxy::WebEditCommandProxy): (WebKit::WebEditCommandProxy::~WebEditCommandProxy): (WebKit::WebEditCommandProxy::nameForEditAction): Deleted. * UIProcess/WebEditCommandProxy.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::addEditCommand): (WebKit::WebPageProxy::removeEditCommand): (WebKit::WebPageProxy::isValidEditCommand): Deleted. Bit of drive-by refactoring: remove an unused function, and make addEditCommand and removeEditCommand take references instead of pointers, since these are assumed to be nonnull. * UIProcess/WebPageProxy.h: * UIProcess/ios/PageClientImplIOS.mm: (WebKit::PageClientImpl::registerEditCommand): 2019-01-03 Matt Rajca <mrajca@apple.com> Make DidPlayMediaPreventedFromPlaying autoplay event more generic. https://bugs.webkit.org/show_bug.cgi?id=193128 rdar://34554231 Reviewed by Jer Noble. Today, the "DidPlayMediaPreventedFromPlaying" autoplay event is only sent for media prevented from autoplaying. It could be generalized to a "DidPlayMediaWithUserGesture" event along with a flag that indicates whether or not autoplay was actually prevented. Tests: existing API tests were updated to reflect the new names. New API tests were added for the new case in which the "DidPlayMediaWithUserGesture" event is sent. * Shared/WebCoreArgumentCoders.h: Take into account new flags. * UIProcess/API/C/WKPage.cpp: Ditto. (WKPageSetPageUIClient): * UIProcess/API/C/WKPageUIClient.h: Ditto. * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Ditto. * UIProcess/Cocoa/UIDelegate.mm: Ditto. (WebKit::toWKAutoplayEventFlags): (WebKit::toWKAutoplayEvent): 2019-01-04 Fujii Hironori <Hironori.Fujii@sony.com> [curl] Move cookiePersistentStorageFile from NetworkProcessCreationParameters to NetworkSessionCreationParameters https://bugs.webkit.org/show_bug.cgi?id=192970 Reviewed by Alex Christensen. * NetworkProcess/NetworkProcessCreationParameters.cpp: (WebKit::NetworkProcessCreationParameters::encode const): Removed code for cookiePersistentStorageFile. (WebKit::NetworkProcessCreationParameters::decode): Ditto. * NetworkProcess/NetworkProcessCreationParameters.h: Ditto. * NetworkProcess/curl/NetworkProcessCurl.cpp: (WebKit::NetworkProcess::platformInitializeNetworkProcess): Ditto. * NetworkProcess/NetworkSessionCreationParameters.cpp: (WebKit::NetworkSessionCreationParameters::privateSessionParameters): Added code for cookiePersistentStorageFile. (WebKit::NetworkSessionCreationParameters::encode const): Ditto. (WebKit::NetworkSessionCreationParameters::decode): Ditto. * NetworkProcess/NetworkSessionCreationParameters.h: Ditto. * NetworkProcess/curl/NetworkSessionCurl.cpp: (WebKit::NetworkSessionCurl::NetworkSessionCurl): Ditto. * NetworkProcess/Cookies/WebCookieManager.h: Removed setCookiePersistentStorage method of curl port extension. * NetworkProcess/Cookies/curl/WebCookieManagerCurl.cpp: (WebKit::WebCookieManager::setCookiePersistentStorage): Deleted. 2019-01-04 Chris Dumez <cdumez@apple.com> [PSON] Calling history.back() from inside the load event handler prevents process-swapping https://bugs.webkit.org/show_bug.cgi?id=193120 Reviewed by Alex Christensen. A HistoryItem is created only *after* we've fired the load event. As a result, if you call history.back() in JS from inside the load event handler, the current HistoryItem and and the target HistoryItem will be the same. This is normally not an issue. However, there was logic inside of WebProcessPool::processForNavigationInternal() which would compare the processID of the source and destination BackForwardListItems and which would force a process reuse if both BackForwardListItems came from the same WebContent process. So even though we swapped when doing a standard load from site A to site B, we would fail to swap if site B called history.back() from inside its load event handler. To address the issue, stop relying on the source backforward item's processID. Instead, just use the WebContent process matching the destination backforward item's processID if it still exists. * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::processForNavigationInternal): 2019-01-04 Keith Rollin <krollin@apple.com> Bring back parent processID for logging https://bugs.webkit.org/show_bug.cgi?id=193121 <rdar://problem/47031634> Reviewed by Alex Christensen. Bug 192961 removes presentingApplicationPID from NetworkProcessCreationParameters because it was (a) stored in some global state, the use of which is being minimized, and (b) it was largely unused. However, it was actually still being used in some useful logging in order to tie together child processes with their parent process. Re-introduce this value in NetworkLoadParameters so that we can log it. * NetworkProcess/NetworkLoadParameters.h: * NetworkProcess/NetworkResourceLoadParameters.cpp: (WebKit::NetworkResourceLoadParameters::encode const): (WebKit::NetworkResourceLoadParameters::decode): * NetworkProcess/NetworkResourceLoader.cpp: (WebKit::NetworkResourceLoader::start): * WebProcess/Network/WebLoaderStrategy.cpp: (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess): (WebKit::WebLoaderStrategy::loadResourceSynchronously): (WebKit::WebLoaderStrategy::startPingLoad): (WebKit::WebLoaderStrategy::preconnectTo): 2019-01-04 Youenn Fablet <youenn@apple.com> Make RestrictedHTTPResponseAccess an internal flag https://bugs.webkit.org/show_bug.cgi?id=193145 Reviewed by Chris Dumez. * Shared/WebPreferences.yaml: This will ease debugging. 2019-01-04 Per Arne Vollan <pvollan@apple.com> [iOS] Enable logging for services in sandbox https://bugs.webkit.org/show_bug.cgi?id=192705 Reviewed by Brent Fulgham. When running layout tests, we didn’t see 107 services being looked up through launchd. We should add logging to these services to determine which services we actually need in the sandbox. * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: 2019-01-04 Commit Queue <commit-queue@webkit.org> Unreviewed, rolling out r239603. https://bugs.webkit.org/show_bug.cgi?id=193146 Breaks shipping tests (Requested by bfulgha__ on #webkit). Reverted changeset: "[iOS] Update sandbox profile to use iconservices instead of lsdiconservice" https://bugs.webkit.org/show_bug.cgi?id=193115 https://trac.webkit.org/changeset/239603 2019-01-04 Chris Dumez <cdumez@apple.com> Crash under WebProcessPool::addSuspendedPage() https://bugs.webkit.org/show_bug.cgi?id=193110 Reviewed by Youenn Fablet. When PageCache is disabled, WebProcessPool::m_maxSuspendedPageCount is 0 and WebProcessPool::addSuspendedPage() would call m_suspendedPages.removeFirst() even though m_suspendedPages is empty, causing a crash. Do an early return when m_maxSuspendedPageCount is 0 since we do not want to add any suspended page in this case. * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::addSuspendedPage): 2019-01-03 Brent Fulgham <bfulgham@apple.com> [iOS] Silently deny access to mail settings triggered by MessageUI framework https://bugs.webkit.org/show_bug.cgi?id=193123 <rdar://problem/42485581> Reviewed by Alexey Proskuryakov. Remove unhelpful logging generated when we block access to non-WebKit preferences. These invalid checks are done by an system framework that we cannot modify. * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: 2019-01-03 Brent Fulgham <bfulgham@apple.com> [iOS] Update sandbox profile to use iconservices instead of lsdiconservice https://bugs.webkit.org/show_bug.cgi?id=193115 <rdar://problem/44867379> Reviewed by Eric Carlson. * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: 2019-01-03 Brent Fulgham <bfulgham@apple.com> Remove logic handling DNT header during redirects https://bugs.webkit.org/show_bug.cgi?id=193082 <rdar://problem/45555965> Reviewed by Chris Dumez. Test: http/wpt/fetch/dnt-header-after-redirection.html. Don't bother looking for (or passing along) DNT headers during redirects. * NetworkProcess/NetworkLoadChecker.cpp: (WebKit::NetworkLoadChecker::check): (WebKit::NetworkLoadChecker::prepareRedirectedRequest): Deleted. * NetworkProcess/NetworkLoadChecker.h: * NetworkProcess/NetworkResourceLoader.cpp: (WebKit::NetworkResourceLoader::restartNetworkLoad): (WebKit::NetworkResourceLoader::continueWillSendRequest): * NetworkProcess/PingLoad.cpp: (WebKit::PingLoad::willPerformHTTPRedirection): 2019-01-03 Chris Dumez <cdumez@apple.com> Add release logging to help debug HTTPS upgrade issues https://bugs.webkit.org/show_bug.cgi?id=193075 Reviewed by Alex Christensen. Add release logging to help debug HTTPS upgrade issues like Bug 193026. * NetworkProcess/NetworkHTTPSUpgradeChecker.cpp: (WebKit::NetworkHTTPSUpgradeChecker::NetworkHTTPSUpgradeChecker): (WebKit::NetworkHTTPSUpgradeChecker::query): 2019-01-03 Alex Christensen <achristensen@webkit.org> NetworkProcess should initialize its default NetworkSession with parameters from the UIProcess https://bugs.webkit.org/show_bug.cgi?id=192967 Reviewed by Brent Fulgham. I moved 3 of the NetworkProcessCreationParameters to use corresponding values of a WebsiteDataStoreParameters. More will be moved in the near future, like indexedDatabaseDirectory. * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::initializeNetworkProcess): * NetworkProcess/NetworkProcessCreationParameters.cpp: (WebKit::NetworkProcessCreationParameters::encode const): (WebKit::NetworkProcessCreationParameters::decode): * NetworkProcess/NetworkProcessCreationParameters.h: * UIProcess/Cocoa/WebProcessPoolCocoa.mm: (WebKit::WebProcessPool::platformInitializeNetworkProcess): * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::ensureNetworkProcess): 2019-01-03 Wenson Hsieh <wenson_hsieh@apple.com> [iOS] REGRESSION (r239441): Tab cycling to offscreen <select> may not scroll it into view https://bugs.webkit.org/show_bug.cgi?id=193084 <rdar://problem/47006882> Reviewed by Simon Fraser. In `WKWebView.mm`, `-_zoomToFocusRect:` will ignore the given selection rect if it is of size `{ 0, 0 }` and at the origin. Prior to r239441, when using the tab key to move focus between non-editable form controls (or any other method that doesn't involve tapping on the focused select element, with the exception of the next and previous buttons in the input accessory view), we would compute a selection rect of `{{ 0, 0 }, { 0, 0 }}`, and subsequently try to scroll the focused element to the center of the visible area, without taking the selection rect into account. However, after r239441, the web process sends the element interaction location to the UI process, which then computes the selection rect by taking this location and adding a size of `{ 1, 1 }` (before r239441, this was done in `WebPage::getAssistedNodeInformation`). However, our new implementation doesn't take into account the case where the element interaction rect is null, which happens when the last interaction location is outside of the bounding rect of the element. In this case, we set the element interaction location to { 0, 0 } and end up computing a selection rect of `{{ 0, 0 }, { 1, 1 }}` instead of `{{ 0, 0 }, { 0, 0 }}` as we would have previously done. This causes us to scroll up to the origin, instead of revealing the focused element. To fix this, we restore the pre-r239441 behavior. See additional comments below for details. Test: fast/forms/ios/scroll-to-reveal-focused-select.html * Shared/FocusedElementInformation.cpp: (WebKit::FocusedElementInformation::encode const): (WebKit::FocusedElementInformation::decode): * Shared/FocusedElementInformation.h: Rename `elementInteractionLocation` to `lastInteractionLocation`. This was previously `elementInteractionLocation` due to existing logic that tries to move the interaction location into the bounding rect of the element in the case where visual viewports are disabled; however, since this feature has long been enabled by default for all modern WebKit clients (internal and external), it's simpler to just use always send the last interaction location over to the UI process, and have the UI process use `{{ 0, 0 }, { 0, 0 }}` if the interaction location is outside of the element rect. In the very unlikely event that any modern WebKit client disables visual viewports, this will still behave reasonably, since we'll just use `{{ 0, 0 }, { 0, 0 }}` as the target rect and scroll to reveal the entire element rather than the top left corner of the element. * UIProcess/ios/WKContentViewInteraction.mm: (rectToRevealWhenZoomingToFocusedElement): * WebProcess/WebPage/ios/WebPageIOS.mm: Move the check for whether the interaction location is inside the element's bounding rect from the web process to the UI process. This relocates the logic to determine whether the selection rect should be a 1 by 1 fallback interaction rect or the zero rect (`{{ 0, 0 }, { 0, 0 }}`) closer to the code that actually uses this rect. (WebKit::WebPage::getFocusedElementInformation): 2019-01-03 Wenson Hsieh <wenson_hsieh@apple.com> WebUndoStep's monotonically increasing identifier should be a WebUndoStepID instead of uint64_t https://bugs.webkit.org/show_bug.cgi?id=193100 Reviewed by Simon Fraser. Add a type alias, WebUndoStepID, to represent the monotonically increasing undo step ID for each undoable editing command, and use this type alias in lieu of `uint64_t`. No change in behavior. * UIProcess/WebEditCommandProxy.cpp: (WebKit::WebEditCommandProxy::WebEditCommandProxy): * UIProcess/WebEditCommandProxy.h: (WebKit::WebEditCommandProxy::create): (WebKit::WebEditCommandProxy::commandID const): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::registerEditCommandForUndo): * UIProcess/WebPageProxy.h: * WebKit.xcodeproj/project.pbxproj: * WebProcess/WebCoreSupport/WebEditorClient.cpp: (WebKit::WebEditorClient::registerUndoStep): Store the step ID in a temporary variable, since `webUndoStep` is now moved when calling `addWebUndoStep`. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::webUndoStep): (WebKit::WebPage::addWebUndoStep): Make this take a `Ref<WebUndoStep>&&` instead of a `WebUndoStep*`, and use move semantics to transfer the given `Ref` to the table. (WebKit::WebPage::removeWebEditCommand): (WebKit::WebPage::unapplyEditCommand): (WebKit::WebPage::reapplyEditCommand): Use `auto*` in a couple of places. (WebKit::WebPage::didRemoveEditCommand): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebUndoStep.cpp: (WebKit::generateUndoStep): * WebProcess/WebPage/WebUndoStep.h: (WebKit::WebUndoStep::stepID const): (WebKit::WebUndoStep::WebUndoStep): * WebProcess/WebPage/WebUndoStepID.h: Copied from Source/WebKit/WebProcess/WebPage/WebUndoStep.cpp. 2019-01-02 Wenson Hsieh <wenson_hsieh@apple.com> Add support for using the current text selection as the find string on iOS https://bugs.webkit.org/show_bug.cgi?id=193034 <rdar://problem/45138739> Reviewed by Tim Horton. * SourcesCocoa.txt: * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _takeFindStringFromSelection:]): Provides a way to set the find string on iOS and macOS (an aside: takeFindStringFromSelection: already exists on macOS, but there is no equivalent protocol method on iOS, so this new SPI acts as a cross-platform way for WebKit clients to take the find string from the selection across all Cocoa platforms). (+[WKWebView _stringForFind]): (+[WKWebView _setStringForFind:]): Call into find-in-page helper functions. (-[WKWebView _findString:options:maxCount:]): On iOS, additionally update the find-in-page string when exercising the _findString:options:maxCount: SPI. This mirrors macOS behavior of updating the find pasteboard every time the find string changes; however, on macOS, this is implemented by the platform (in AppKit), whereas there's no platform find pasteboard on iOS, let alone logic to update it in UIKit. As such, we directly drive updates to the find string within WebKit. * UIProcess/API/Cocoa/WKWebViewPrivate.h: Add some new cross-platform find-in-page SPI. See above for more details. * UIProcess/Cocoa/GlobalFindInPageState.h: Added. * UIProcess/Cocoa/GlobalFindInPageState.mm: Added. (WebKit::findPasteboard): (WebKit::globalStringForFind): Fetch the string to use when finding text in the page. On macOS, this accesses the AppKit find pasteboard; on iOS, this instead returns the current global find string. (WebKit::updateStringForFind): Sets the global find string. Uses the find pasteboard on macOS, and sets the global find string on iOS. (WebKit::stringForFind): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: Add plumbing to allow WebEditorClient to deliver the update the global find string in the UI process. * UIProcess/ios/WebPageProxyIOS.mm: (WebKit::WebPageProxy::updateStringForFind): * WebKit.xcodeproj/project.pbxproj: * WebProcess/WebCoreSupport/WebEditorClient.h: * WebProcess/WebCoreSupport/ios/WebEditorClientIOS.mm: (WebKit::WebEditorClient::updateStringForFind): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::updateStringForFind): 2019-01-02 Brent Fulgham <bfulgham@apple.com> Allow WebContent process access to some drawing-related IOKit properties https://bugs.webkit.org/show_bug.cgi?id=193086 <rdar://problem/46568088> Reviewed by Eric Carlson. Update the iOS WebContent process sandbox to allow access to some IOKit properties that are needed for drawing and media playback operations. * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: * WebProcess/com.apple.WebKit.WebContent.sb.in: 2019-01-02 Brent Fulgham <bfulgham@apple.com> Remove unused logging service https://bugs.webkit.org/show_bug.cgi?id=193081 <rdar://problem/40414815> Reviewed by Alexey Proskuryakov. We don't use this logging service, so don't open an exception for it. * Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb: 2019-01-02 Brent Fulgham <bfulgham@apple.com> Remove temporary workaround for CVMS code signing objects https://bugs.webkit.org/show_bug.cgi?id=193079 <rdar://problem/40139202> Reviewed by Alexey Proskuryakov. * WebProcess/com.apple.WebProcess.sb.in: 2019-01-02 Wenson Hsieh <wenson_hsieh@apple.com> REGRESSION (r239441): [iOS] Selection UI sometimes doesn't change after tapping "select all" in the callout bar https://bugs.webkit.org/show_bug.cgi?id=193070 <rdar://problem/46921508> Reviewed by Tim Horton. r239441 added logic to include an EditorState in the next layer tree commit when refocusing an element; this was done to ensure that after tapping an element that has already been programmatically focused, we still send up- to-date editor information to the UI process for the purposes of zooming to the selection rect, even if the selection in the DOM is unchanged, since other aspects of the editor state may have changed since the element was initially focused. We currently try to flag the next layer tree commit by setting `m_hasPendingEditorStateUpdate` to `true`. However, this is problematic since we aren't guaranteed in all cases that a compositing flush has been scheduled. In the case where it hasn't, we'll end up in a state where the editor state update flag has been set, yet the update will not make it over to the UI process until something happens that forces a layer tree commit (e.g. scrolling, pinch zooming). Worse still, if the selection is then programmatically changed from the web process, we will bail from sending a subsequent editor state update to the UI process because `WebPage` thinks that a pending editor state has already been scheduled. This manifests in selection UI not updating after tapping "Select All" in the callout bar, if the callout bar was brought up by tapping near the selection (since this refocuses the element). To fix this, we adjust this logic in `WebPage::elementDidRefocus` so that it sets the flag and then schedules a compositing flush, but only if the user is actually interacting with the focused element (i.e., if the page calls `focus` repeatedly, we won't continue to schedule compositing flushes). Test: editing/selection/ios/change-selection-after-tapping-focused-element.html * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::elementDidRefocus): (WebKit::WebPage::sendEditorStateUpdate): (WebKit::WebPage::scheduleFullEditorStateUpdate): Add a private helper method to schedule an editor state update by setting `m_hasPendingEditorStateUpdate` to `true` and then scheduling a compositing layer flush. Also, add a FIXME aluding to the fact that scheduling an entire compositing layer flush to send an editor state update is somewhat wasteful, and should be replaced by just scheduling this work to be done before the next frame (see: <rdar://problem/36523583> for more detail). We also use this helper method in a few places where we currently turn on the editor state flag and schedule a subsequent compositing flush. (WebKit::WebPage::sendPartialEditorStateAndSchedulePostLayoutUpdate): * WebProcess/WebPage/WebPage.h: 2019-01-02 Commit Queue <commit-queue@webkit.org> Unreviewed, rolling out r239524. https://bugs.webkit.org/show_bug.cgi?id=193083 basic browsing seems not to work (Requested by thorton on #webkit). Reverted changeset: "Expand use of sourceApplicationAuditData" https://bugs.webkit.org/show_bug.cgi?id=192995 https://trac.webkit.org/changeset/239524 2019-01-01 Jeff Miller <jeffm@apple.com> Update user-visible copyright strings to include 2019 https://bugs.webkit.org/show_bug.cgi?id=192811 Reviewed by Mark Lam. * Info.plist: * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-OSX.plist: * NetworkProcess/EntryPoint/mac/XPCService/NetworkService/Info-iOS.plist: * PluginProcess/EntryPoint/mac/XPCService/PluginService.32-64.Info.plist: * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-OSX.plist: * WebProcess/EntryPoint/mac/XPCService/WebContentService/Info-iOS.plist: 2018-12-28 Wenson Hsieh <wenson_hsieh@apple.com> Move WKEditCommandObjC and WKEditorUndoTargetObjC into a separate file https://bugs.webkit.org/show_bug.cgi?id=193049 Reviewed by Sam Weinig. Pull common code (WKEditCommandObjC and WKEditorUndoTargetObjC) on iOS and macOS out into a separate file. No change in behavior. * SourcesCocoa.txt: * UIProcess/Cocoa/WKEditCommand.h: Added. * UIProcess/Cocoa/WKEditCommand.mm: Added. Rename WKEditCommandObjC to WKEditCommand, and WKEditorUndoTargetObjC to WKEditorUndoTarget. The ObjC suffix in the name seems to diverge from the common naming scheme in other parts of WebKit, where most WK- and _WK- prefixed names already refer to Objective-C objects. Additionally, mark -[WKEditCommand init] as unavailable. (-[WKEditCommand initWithWebEditCommandProxy:]): Make the return type instancetype instead of id, and also make this take a Ref<WebEditCommandProxy>&& instead of a RefPtr. (-[WKEditCommand command]): Make this return a reference to the WebEditCommandProxy, rather than a pointer, since the WebEditCommandProxy should always be non-null. (-[WKEditorUndoTarget undoEditing:]): (-[WKEditorUndoTarget redoEditing:]): * UIProcess/Cocoa/WebViewImpl.h: * UIProcess/Cocoa/WebViewImpl.mm: (WebKit::WebViewImpl::WebViewImpl): (WebKit::WebViewImpl::registerEditCommand): Use WTFMove instead of copying the Ref when creating a WKEditCommand. (-[WKEditCommandObjC initWithWebEditCommandProxy:]): Deleted. (-[WKEditCommandObjC command]): Deleted. (-[WKEditorUndoTargetObjC undoEditing:]): Deleted. (-[WKEditorUndoTargetObjC redoEditing:]): Deleted. * UIProcess/ios/PageClientImplIOS.h: * UIProcess/ios/PageClientImplIOS.mm: (WebKit::PageClientImpl::PageClientImpl): (WebKit::PageClientImpl::registerEditCommand): Use WTFMove instead of creating a new RefPtr when creating a WKEditCommand. (-[WKEditCommandObjC initWithWebEditCommandProxy:]): Deleted. (-[WKEditCommandObjC command]): Deleted. (-[WKEditorUndoTargetObjC undoEditing:]): Deleted. (-[WKEditorUndoTargetObjC redoEditing:]): Deleted. * UIProcess/mac/PageClientImplMac.h: * WebKit.xcodeproj/project.pbxproj: 2018-12-27 Alex Christensen <achristensen@webkit.org> Resurrect Mac CMake build https://bugs.webkit.org/show_bug.cgi?id=192658 Reviewed by Yusuke Suzuki. * PlatformMac.cmake: 2018-12-26 Fujii Hironori <Hironori.Fujii@sony.com> [MSVC] error C2381: 'WebKit::NetworkHTTPSUpgradeChecker::~NetworkHTTPSUpgradeChecker': redefinition; '__declspec(noreturn)' or '[[noreturn]]' differs https://bugs.webkit.org/show_bug.cgi?id=193030 Reviewed by Ross Kirsling. Windows Debug builds are failing to compile due to NO_RETURN_DUE_TO_ASSERT inconsistency of NetworkHTTPSUpgradeChecker destructor's definition and declaration. * NetworkProcess/NetworkHTTPSUpgradeChecker.h: Added NO_RETURN_DUE_TO_ASSERT to NetworkHTTPSUpgradeChecker destructor declaration. * NetworkProcess/NetworkHTTPSUpgradeChecker.cpp: Removed NO_RETURN_DUE_TO_ASSERT from the definition. 2018-12-24 Fujii Hironori <Hironori.Fujii@sony.com> [WebKit][Win] Remove using namespace in the global scope https://bugs.webkit.org/show_bug.cgi?id=192968 Reviewed by Alex Christensen. Moved using namespace statements in the global scope to inside namespaces. <https://webkit.org/code-style-guidelines/#using-position> * NetworkProcess/Cookies/curl/WebCookieManagerCurl.cpp: * NetworkProcess/curl/NetworkDataTaskCurl.cpp: * NetworkProcess/curl/NetworkProcessCurl.cpp: * NetworkProcess/curl/NetworkSessionCurl.cpp: * NetworkProcess/curl/RemoteNetworkingContextCurl.cpp: * Shared/Plugins/Netscape/NetscapePluginModuleNone.cpp: * Shared/WebWheelEvent.cpp: * Shared/curl/WebCoreArgumentCodersCurl.cpp: * Shared/win/NativeWebKeyboardEventWin.cpp: * Shared/win/WebEventFactory.cpp: * UIProcess/Automation/WebAutomationSession.cpp: 2018-12-24 Fujii Hironori <Hironori.Fujii@sony.com> Remove "using namespace std;" https://bugs.webkit.org/show_bug.cgi?id=192973 Reviewed by Alex Christensen. * Platform/IPC/win/ConnectionWin.cpp: 2018-12-24 Simon Fraser <simon.fraser@apple.com> Change ScrollingNodeType to an enum class https://bugs.webkit.org/show_bug.cgi?id=193009 Reviewed by Zalan Bujtas. Change the ScrollingNodeType enum to an enum class. No behavior change. * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp: (WebKit::encodeNodeAndDescendants): (WebKit::RemoteScrollingCoordinatorTransaction::decode): (WebKit::dump): * UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp: (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers): * UIProcess/RemoteLayerTree/RemoteScrollingTree.cpp: (WebKit::RemoteScrollingTree::createScrollingTreeNode): * UIProcess/RemoteLayerTree/ios/RemoteScrollingCoordinatorProxyIOS.mm: (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers): * UIProcess/RemoteLayerTree/ios/ScrollingTreeScrollingNodeDelegateIOS.mm: (WebKit::ScrollingTreeScrollingNodeDelegateIOS::updateChildNodesAfterScroll): 2018-12-23 Wenson Hsieh <wenson_hsieh@apple.com> [iOS] Remove some unnecessary editing SPI after <rdar://problem/46047546> https://bugs.webkit.org/show_bug.cgi?id=193019 Reviewed by Dan Bernstein. Remove these SPI method declarations, as well as method forwarding in WKContentView. Mail was the only adoptee of these methods; after <rdar://problem/46047546>, they have moved to the underscore-prefixed versions, so we we have no need for these erroneously-named SPI methods anymore. There is no change in behavior; verified this through existing API tests (WKWebViewEditActions), as well as building iOS Mail against WebKit with these changes to WKWebViewPrivate.h. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView canPerformAction:withSender:]): (-[WKWebView targetForAction:withSender:]): (-[WKWebView _setFont:sender:]): (-[WKWebView _setFontSize:sender:]): (-[WKWebView _setTextColor:sender:]): (-[WKWebView setFont:sender:]): Deleted. (-[WKWebView setTextColor:sender:]): Deleted. (-[WKWebView setFontSize:sender:]): Deleted. * UIProcess/API/Cocoa/WKWebViewPrivate.h: * UIProcess/ios/WKContentViewInteraction.h: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView canPerformActionForWebView:withSender:]): (-[WKContentView setFontForWebView:sender:]): Deleted. (-[WKContentView setFontSizeForWebView:sender:]): Deleted. (-[WKContentView setTextColorForWebView:sender:]): Deleted. 2018-12-23 Wenson Hsieh <wenson_hsieh@apple.com> Fix fast/ruby/ruby-base-merge-block-children-crash-2.html after r239543 https://bugs.webkit.org/show_bug.cgi?id=193015 <rdar://problem/46583527> Reviewed by Tim Horton. Fix the crash by gracefully handling integer overflow when computing the area of a very large editable element. * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]): (-[WKContentView _updateChangedSelection:]): 2018-12-22 Wenson Hsieh <wenson_hsieh@apple.com> [iOS] Suppress native selection behaviors when focusing a very small editable element https://bugs.webkit.org/show_bug.cgi?id=193005 <rdar://problem/46583527> Reviewed by Tim Horton. In r238146, I added a mechanism to detect when the selection is hidden within transparent editable elements, and used this to suppress native selection on iOS (such as selection handles, highlight, callout bar, etc.) to avoid conflicts between the page's editing UI and the platform. However, one additional technique observed on some websites involves hiding the selection by moving it into a tiny (1x1) editable element. Here, we currently still present a callout bar with editing actions, as well as show a selection caret or handles on iOS. To fix this, we extend the mechanism added in r238146 by also suppressing the selection assistant in the case where the editable element's area is beneath a tiny minimum threshold. Test: editing/selection/ios/hide-selection-in-tiny-contenteditable.html * Shared/EditorState.cpp: (WebKit::EditorState::PostLayoutData::encode const): (WebKit::EditorState::PostLayoutData::decode): (WebKit::operator<<): * Shared/EditorState.h: Rename selectionClipRect to focusedElementRect. We currently propagate the bounds of the focused element to the UI process through EditorState updates, but only for the purpose of returning it in the computed selection clip rect; instead, rename this member to something more general-purpose, so we can also use it when determining whether to suppress the selection assistant. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _candidateRect]): * UIProcess/Cocoa/WebViewImpl.mm: (WebKit::WebViewImpl::handleRequestedCandidates): * UIProcess/ios/WKContentViewInteraction.h: Add a new SuppressSelectionAssistantReason that corresponds to focusing tiny editable elements. * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView _zoomToRevealFocusedElement]): (-[WKContentView _selectionClipRect]): (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]): (-[WKContentView _updateChangedSelection:]): Check the size of the focused element, and begin or stop suppressing the selection assistant accordingly. * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::platformEditorState const): * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::platformEditorState const): 2018-12-20 Yusuke Suzuki <yusukesuzuki@slowstart.org> Use Ref<> as much as possible https://bugs.webkit.org/show_bug.cgi?id=192808 Reviewed by Alex Christensen. * PluginProcess/WebProcessConnection.cpp: (WebKit::WebProcessConnection::create): * PluginProcess/WebProcessConnection.h: * UIProcess/API/Cocoa/WKConnection.mm: (-[WKConnection sendMessageWithName:body:]): * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]): (-[WKWebView _takeViewSnapshot]): (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]): * UIProcess/API/glib/WebKitGeolocationProvider.cpp: (WebKit::WebKitGeolocationProvider::notifyPositionChanged): * UIProcess/API/glib/WebKitWebContext.cpp: (webkit_web_context_allow_tls_certificate_for_host): * UIProcess/Automation/cairo/WebAutomationSessionCairo.cpp: (WebKit::WebAutomationSession::platformGetBase64EncodedPNGData): * UIProcess/Automation/cocoa/WebAutomationSessionCocoa.mm: (WebKit::WebAutomationSession::platformGetBase64EncodedPNGData): * UIProcess/BackingStore.cpp: (WebKit::BackingStore::incorporateUpdate): * UIProcess/Cocoa/NavigationState.mm: (WebKit::createErrorWithRecoveryAttempter): * UIProcess/Cocoa/PlaybackSessionManagerProxy.h: * UIProcess/Cocoa/PlaybackSessionManagerProxy.mm: (WebKit::PlaybackSessionManagerProxy::create): * UIProcess/Cocoa/VideoFullscreenManagerProxy.h: * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm: (WebKit::VideoFullscreenManagerProxy::create): * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm: (WebKit::WebPasteboardProxy::setPasteboardBufferForType): * UIProcess/Cocoa/WebViewImpl.mm: (WebKit::WebViewImpl::takeViewSnapshot): * UIProcess/Downloads/DownloadProxyMap.cpp: (WebKit::DownloadProxyMap::createDownloadProxy): * UIProcess/Notifications/WebNotificationManagerProxy.cpp: (WebKit::WebNotificationManagerProxy::show): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didCreateSubframe): * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::getStatistics): (WebKit::WebProcessPool::requestWebContentStatistics): (WebKit::WebProcessPool::requestNetworkingStatistics): * UIProcess/WebProcessPool.h: * UIProcess/gstreamer/WebPageProxyGStreamer.cpp: (WebKit::WebPageProxy::requestInstallMissingMediaPlugins): * UIProcess/gtk/RemoteWebInspectorProxyGtk.cpp: (WebKit::RemoteWebInspectorProxy::platformCreateFrontendPageAndWindow): * UIProcess/gtk/WebInspectorProxyGtk.cpp: (WebKit::WebInspectorProxy::platformCreateFrontendPage): * UIProcess/ios/WKGeolocationProviderIOS.mm: (-[WKGeolocationProviderIOS geolocationAuthorizationGranted]): * UIProcess/mac/PageClientImplMac.mm: (WebKit::PageClientImpl::setPromisedDataForImage): * UIProcess/win/WebInspectorProxyWin.cpp: (WebKit::WebInspectorProxy::platformCreateFrontendPage): * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm: (-[WKDOMRange initWithDocument:]): * WebProcess/InjectedBundle/DOM/InjectedBundleRangeHandle.cpp: (WebKit::InjectedBundleRangeHandle::renderedImage): * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp: (WebKit::InjectedBundlePageEditorClient::getPasteboardDataForRange): * WebProcess/InjectedBundle/InjectedBundlePageUIClient.cpp: (WebKit::InjectedBundlePageUIClient::mouseDidMoveOverElement): * WebProcess/Plugins/Netscape/NetscapePlugin.cpp: (WebKit::NetscapePlugin::snapshot): * WebProcess/Plugins/PDF/PDFPlugin.mm: (WebKit::PDFPlugin::addArchiveResource): (WebKit::PDFPlugin::snapshot): (WebKit::PDFPlugin::writeItemsToPasteboard): * WebProcess/Plugins/PluginProcessConnectionManager.cpp: (WebKit::PluginProcessConnectionManager::getPluginProcessConnection): * WebProcess/Plugins/PluginProxy.cpp: (WebKit::PluginProxy::snapshot): * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::performURLRequest): * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::exceededDatabaseQuota): (WebKit::WebChromeClient::reachedApplicationCacheOriginQuota): * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction): * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: (WebKit::WebPlatformStrategies::getPathnamesForType): * WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp: (WebKit::convertCairoSurfaceToShareableBitmap): * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: (WebKit::WebDragClient::declareAndWriteDragImage): * WebProcess/WebPage/Cocoa/WebPageCocoa.mm: (WebKit::WebPage::dictionaryPopupInfoForRange): * WebProcess/WebPage/DrawingAreaImpl.cpp: (WebKit::DrawingAreaImpl::display): * WebProcess/WebPage/FindController.cpp: (WebKit::FindController::updateFindIndicator): * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: (WebKit::RemoteLayerTreeDrawingArea::flushLayers): * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::webArchiveData): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::navigateToPDFLinkWithSimulatedClick): (WebKit::WebPage::performDragControllerAction): * WebProcess/WebPage/ios/FindControllerIOS.mm: (WebKit::FindController::updateFindIndicator): * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::replaceDictatedText): (WebKit::WebPage::getPositionInformation): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::commitTransientZoom): * WebProcess/WebStorage/StorageNamespaceImpl.cpp: (WebKit::StorageNamespaceImpl::createSessionStorageNamespace): (WebKit::StorageNamespaceImpl::createEphemeralLocalStorageNamespace): (WebKit::StorageNamespaceImpl::createLocalStorageNamespace): (WebKit::StorageNamespaceImpl::createTransientLocalStorageNamespace): (WebKit::StorageNamespaceImpl::storageArea): (WebKit::StorageNamespaceImpl::ephemeralLocalStorageArea): (WebKit::StorageNamespaceImpl::copy): * WebProcess/WebStorage/StorageNamespaceImpl.h: * WebProcess/WebStorage/WebStorageNamespaceProvider.cpp: (WebKit::WebStorageNamespaceProvider::getOrCreate): (WebKit::WebStorageNamespaceProvider::createSessionStorageNamespace): (WebKit::WebStorageNamespaceProvider::createEphemeralLocalStorageNamespace): (WebKit::WebStorageNamespaceProvider::createLocalStorageNamespace): (WebKit::WebStorageNamespaceProvider::createTransientLocalStorageNamespace): * WebProcess/WebStorage/WebStorageNamespaceProvider.h: * WebProcess/cocoa/PlaybackSessionManager.mm: (WebKit::PlaybackSessionManager::createModelAndInterface): * WebProcess/cocoa/VideoFullscreenManager.mm: (WebKit::VideoFullscreenManager::createModelAndInterface): 2018-12-21 Chris Dumez <cdumez@apple.com> navigator.userAgent in service workers does not reflect customUserAgent set by client https://bugs.webkit.org/show_bug.cgi?id=192951 Reviewed by Youenn Fablet. * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp: (WebKit::WebSWServerConnection::registerServiceWorkerClient): * NetworkProcess/ServiceWorker/WebSWServerConnection.h: * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in: * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp: (WebKit::WebSWServerToContextConnection::installServiceWorkerContext): * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h: * WebProcess/Storage/WebSWClientConnection.cpp: (WebKit::WebSWClientConnection::registerServiceWorkerClient): * WebProcess/Storage/WebSWClientConnection.h: * WebProcess/Storage/WebSWContextManagerConnection.cpp: (WebKit::WebSWContextManagerConnection::installServiceWorker): * WebProcess/Storage/WebSWContextManagerConnection.h: * WebProcess/Storage/WebSWContextManagerConnection.messages.in: 2018-12-21 Alex Christensen <achristensen@webkit.org> Expand use of sourceApplicationAuditData https://bugs.webkit.org/show_bug.cgi?id=192995 <rdar://problem/46627875> Reviewed by Brady Eidson. sourceApplicationAuditData has been used for a long time on iOS, but it's needed on more platforms. I also made it return an Optional instead of a bool and returning by reference. Ahhh. So much nicer. * NetworkProcess/cocoa/NetworkProcessCocoa.mm: (WebKit::NetworkProcess::sourceApplicationAuditData const): * Platform/IPC/Connection.h: * Platform/IPC/mac/ConnectionMac.mm: (IPC::Connection::getAuditToken): * WebProcess/WebProcess.cpp: (WebKit::WebProcess::initializeWebProcess): * WebProcess/cocoa/WebProcessCocoa.mm: (WebKit::WebProcess::sourceApplicationAuditData const): 2018-12-21 Jiewen Tan <jiewen_tan@apple.com> [Mac] Layout Test http/wpt/webauthn/public-key-credential-create-success-hid.https.html and http/wpt/webauthn/public-key-credential-get-success-hid.https.html are flaky https://bugs.webkit.org/show_bug.cgi?id=192061 Reviewed by Dewei Zhu. Part 5. Add some additional temporary logging info to determine if the time out value passed to the timer is respected. Once the bug is determined and fixed, we should remove all logging added in this patch. Reviewed by Dewei Zhu. * UIProcess/WebAuthentication/AuthenticatorManager.cpp: (WebKit::AuthenticatorManager::initTimeOutTimer): (WebKit::AuthenticatorManager::timeOutTimerFired): 2018-12-21 Keith Rollin <krollin@apple.com> Crash in com.apple.WebKit: WebKit::WebResourceLoader::willSendRequest + 223 https://bugs.webkit.org/show_bug.cgi?id=192989 Reviewed by Chris Dumez. willSendRequest is calling maybeLoadFallbackForRedirect, which can delete “this”. After that, some new logging code tries to access “this” and causes the crash. Fix this by adjusting the scope of a "protectedThis". * WebProcess/Network/WebResourceLoader.cpp: (WebKit::WebResourceLoader::willSendRequest): 2018-12-21 Alejandro G. Castro <alex@igalia.com> [GTK][WPE] Add DeviceIdHashSaltStorage disk persistence https://bugs.webkit.org/show_bug.cgi?id=190466 Reviewed by Youenn Fablet. Added persistency to the DeviceIdHashSaltStorage. Implemented a decoder and an encoder for the HashSaltForOrigin struct to store it in a file, this allows us to save the lastTimeUsed, the origin and the hash salt. It uses a new directory where it creates a file per hash salt, the name of the file is the hash salt to avoid leaking information in the system. The last time used and the origin are stored inside the file, it also adds a version directory used to change the structure of the file in the future, if we need to do it. In the DeviceIdHashSaltStorage class the disk operations happen in a WorkQueue, but all interactions go in the main thread. We added code to handle the operations when the load still did not finish. * Platform/Logging.h: Added channel DiskPersistency.. * Sources.txt: Added new files. * UIProcess/API/APIProcessPoolConfiguration.cpp: Added code to set the directory for the deviceIdHashSalts. That way we can use the configuration when creating the DeviceIdHashSaltStorage. (API::ProcessPoolConfiguration::createWithWebsiteDataStoreConfiguration): (API::ProcessPoolConfiguration::ProcessPoolConfiguration): (API::ProcessPoolConfiguration::copy): * UIProcess/API/APIProcessPoolConfiguration.h: * UIProcess/API/APIWebsiteDataStore.cpp: (API::WebsiteDataStore::legacyDefaultDataStoreConfiguration): Added code to set the directory in the disk used to store the information. * UIProcess/API/APIWebsiteDataStore.h: Ditto. * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm: Added dummy implementation to get the directory in cocoa. (API::WebsiteDataStore::defaultDeviceIdHashSaltsStorageDirectory): (API::WebsiteDataStore::legacyDefaultDeviceIdHashSaltsStorageDirectory): * UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp: Defined the default directories used to store the information in the disk. (API::WebsiteDataStore::defaultDeviceIdHashSaltsStorageDirectory): (API::WebsiteDataStore::legacyDefaultDeviceIdHashSaltsStorageDirectory): (API::WebsiteDataStore::defaultDataStoreConfiguration): * UIProcess/API/glib/WebKitWebsiteDataManager.cpp: (webkitWebsiteDataManagerGetDataStore): Added the directory used to store the information. (webkit_website_data_manager_remove): Modified the way we use to make sure when we remove the cookies we also remove the hash salts. * UIProcess/API/win/APIWebsiteDataStoreWin.cpp: Added dummy implementations to get the directory in windows platform. (API::WebsiteDataStore::defaultDeviceIdHashSaltsStorageDirectory): (API::WebsiteDataStore::legacyDefaultDeviceIdHashSaltsStorageDirectory): * UIProcess/API/C/WKBackForwardListItemRef.cpp: Add namespace, it seems some unified build compilation issue. * UIProcess/DeviceIdHashSaltStorage.cpp: (WebKit::DeviceIdHashSaltStorage::create): Added a create method used to pass the directory and the persistency status of the websitedatastore. (WebKit::DeviceIdHashSaltStorage::completeHandler): Added to share the code copying the origins to complete the get handler. (WebKit::DeviceIdHashSaltStorage::completeDeviceIdHashSaltForOriginCall): Added to share the code when completing the task of getting a new hash salt. (WebKit::DeviceIdHashSaltStorage::DeviceIdHashSaltStorage): Added a new constructor for the create method. (WebKit::getSecurityOriginData): Added to get the SecurityOriginData from a field in the decoder and do all the checks. (WebKit::DeviceIdHashSaltStorage::loadStorageFromDisk): Open the directory and restore all the hash salts from disk to the memory structure. (WebKit::DeviceIdHashSaltStorage::createEncoderFromData const): Creates the decoder to store the HashSaltForOrigin structure. (WebKit::DeviceIdHashSaltStorage::storeHashSaltToDisk): Write to disk a decoder object created from a HashSaltForOrigin structure. It uses the writeEncoderToDisk function. (WebKit::DeviceIdHashSaltStorage::deviceIdHashSaltForOrigin): Make sure we store in disk a new hash salt when it is generated and the WebsiteDataStore is persistent. Add a completionHandler to return the value found or generated, this way we can control if the HashMap is already loaded from disk. (WebKit::DeviceIdHashSaltStorage::getDeviceIdHashSaltOrigins): Make sure we run the get in a queue now that we store information in disk. (WebKit::DeviceIdHashSaltStorage::deleteHashSaltFromDiskIfNeeded): Added code to make sure we remove the files in disk. (WebKit::DeviceIdHashSaltStorage::deleteDeviceIdHashSaltForOrigins): Added code to use the deleteHashSaltFromDiskIfNeeded and remove the files in disk. (WebKit::DeviceIdHashSaltStorage::deleteDeviceIdHashSaltOriginsModifiedSince): Added code to use the deleteHashSaltFromDiskIfNeeded and remove the files in disk. * UIProcess/DeviceIdHashSaltStorage.h: Ditto. * UIProcess/PersistencyUtils.cpp: Added file to share the persistency code with the ResourceLoadStatisticsPersistentStorage class. (WebKit::createDecoderForFile): Ditto. (WebKit::writeEncoderToDisk): Ditto. * UIProcess/PersistencyUtils.h: Ditto. * UIProcess/ResourceLoadStatisticsPersistentStorage.cpp: Use the new PersistencyUtils functions shared with the DeviceIdHashSaltStorage class. (WebKit::ResourceLoadStatisticsPersistentStorage::refreshMemoryStoreFromDisk): (WebKit::ResourceLoadStatisticsPersistentStorage::populateMemoryStoreFromDisk): (WebKit::ResourceLoadStatisticsPersistentStorage::writeMemoryStoreToDisk): * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: After changing the API of the deviceIdHashSaltForOrigin we now use a completionHandler because it could happen the HashMap is not still loaded and we would have to wait for it. We refactored the calls to the method to use this new completionHandler. (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted): (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame): (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame): * UIProcess/WebsiteData/WebsiteDataStore.cpp: (WebKit::WebsiteDataStore::WebsiteDataStore): Create the DeviceIdHashSaltStorage class with the persistency information. (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary): Make sure we have the directory to store the information. * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h: Add get and set functions for the deviceHashSaltStorageDirectory. * WebKit.xcodeproj/project.pbxproj: Added PersistencyUtils file to the xcode compilation. 2018-12-20 Alex Christensen <achristensen@webkit.org> Remove unused NetworkProcessCreationParameters https://bugs.webkit.org/show_bug.cgi?id=192961 Reviewed by Andy Estes. loadThrottleLatency isn't used since I replaced it with NetworkSessionCreationParameters.loadThrottleLatency in r238654 presentingApplicationPID has no effect because that value is only used in the WebProcess in NetworkExtensionContentFilter::initialize * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::initializeNetworkProcess): * NetworkProcess/NetworkProcessCreationParameters.cpp: (WebKit::NetworkProcessCreationParameters::encode const): (WebKit::NetworkProcessCreationParameters::decode): * NetworkProcess/NetworkProcessCreationParameters.h: * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::ensureNetworkProcess): 2018-12-20 Chris Dumez <cdumez@apple.com> Use Optional::hasValue() instead of Optional::has_value() https://bugs.webkit.org/show_bug.cgi?id=192948 Reviewed by Tim Horton. * UIProcess/Automation/WebAutomationSession.cpp: (WebKit::AutomationCommandError::toProtocolString): (WebKit::WebAutomationSession::willClosePage): * WebProcess/Automation/WebAutomationSessionProxy.cpp: (WebKit::WebAutomationSessionProxy::computeElementLayout): 2018-12-20 Jeremy Jones <jeremyj@apple.com> Flicker when exiting element fullscreen. https://bugs.webkit.org/show_bug.cgi?id=192774 rdar://problem/33088878 Reviewed by Jer Noble. Fixes an issue where the web page would flicker upon exiting element fullscreen. Replace WebView with a snapshot while the WebView is restyled and resized for inline. * UIProcess/mac/WKFullScreenWindowController.h: * UIProcess/mac/WKFullScreenWindowController.mm: (-[WKFullScreenWindowController initWithWindow:webView:page:]): (-[WKFullScreenWindowController finishedExitFullScreenAnimation:]): (-[WKFullScreenWindowController completeFinishExitFullScreenAnimationAfterRepaint]): 2018-12-20 Chris Dumez <cdumez@apple.com> Move HTTPS_UPGRADE code behind a runtime flag, off by default https://bugs.webkit.org/show_bug.cgi?id=192937 Reviewed by Youenn Fablet. Move HTTPS_UPGRADE code behind a runtime flag, off by default and drop the build time flag. * Configurations/WebKit.xcconfig: * DerivedSources.make: * NetworkProcess/NetworkHTTPSUpgradeChecker.cpp: * NetworkProcess/NetworkHTTPSUpgradeChecker.h: * NetworkProcess/NetworkLoadChecker.cpp: (WebKit::NetworkLoadChecker::NetworkLoadChecker): (WebKit::NetworkLoadChecker::applyHTTPSUpgradeIfNeeded const): (WebKit::NetworkLoadChecker::checkRequest): * NetworkProcess/NetworkLoadChecker.h: * NetworkProcess/NetworkProcess.h: (WebKit::NetworkProcess::networkHTTPSUpgradeChecker): * NetworkProcess/NetworkResourceLoadParameters.cpp: (WebKit::NetworkResourceLoadParameters::encode const): (WebKit::NetworkResourceLoadParameters::decode): * NetworkProcess/NetworkResourceLoadParameters.h: * NetworkProcess/NetworkResourceLoader.cpp: * NetworkProcess/PingLoad.cpp: (WebKit::PingLoad::PingLoad): * Shared/WebPreferences.yaml: * WebProcess/Network/WebLoaderStrategy.cpp: (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess): * config.h: 2018-12-20 Jiewen Tan <jiewen_tan@apple.com> [WebAuthN] Add a runtime flag for local authenticator https://bugs.webkit.org/show_bug.cgi?id=192792 <rdar://problem/46798738> Reviewed by Brent Fulgham. * Shared/WebPreferences.yaml: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesSetWebAuthenticationLocalAuthenticatorEnabled): (WKPreferencesGetWebAuthenticationLocalAuthenticatorEnabled): * UIProcess/API/C/WKPreferencesRefPrivate.h: * UIProcess/WebAuthentication/Cocoa/LocalService.mm: (WebKit::LocalService::isAvailable): 2018-12-20 Chris Dumez <cdumez@apple.com> Use Optional::valueOr() instead of Optional::value_or() https://bugs.webkit.org/show_bug.cgi?id=192933 Reviewed by Geoffrey Garen. * Shared/API/c/WKSecurityOriginRef.cpp: (WKSecurityOriginGetPort): * UIProcess/API/APIProcessPoolConfiguration.h: * UIProcess/API/Cocoa/WKSecurityOrigin.mm: (-[WKSecurityOrigin port]): * UIProcess/API/Cocoa/WKWebViewConfiguration.mm: (-[WKWebViewConfiguration _cpuLimit]): * UIProcess/API/glib/WebKitSecurityOrigin.cpp: (webkit_security_origin_get_port): * UIProcess/API/gtk/WebKitWebViewBase.cpp: (webkitWebViewBaseHandleWheelEvent): * UIProcess/Automation/SimulatedInputDispatcher.cpp: (WebKit::SimulatedInputKeyFrame::maximumDuration const): (WebKit::SimulatedInputDispatcher::transitionInputSourceToState): * UIProcess/Automation/WebAutomationSession.cpp: (WebKit::WebAutomationSession::setWindowFrameOfBrowsingContext): (WebKit::WebAutomationSession::performInteractionSequence): * UIProcess/Automation/WebAutomationSessionMacros.h: * UIProcess/ServiceWorkerProcessProxy.cpp: (WebKit::ServiceWorkerProcessProxy::start): * UIProcess/WebAuthentication/AuthenticatorManager.cpp: (WebKit::AuthenticatorManager::initTimeOutTimer): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::deviceScaleFactor const): * UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::viewportSizeForCSSViewportUnits const): * UIProcess/gtk/WebPopupMenuProxyGtk.cpp: (WebKit::WebPopupMenuProxyGtk::activateItem): * UIProcess/mac/LegacySessionStateCoding.cpp: (WebKit::encodeFormDataElement): * WebProcess/Network/WebLoaderStrategy.cpp: (WebKit::WebLoaderStrategy::scheduleLoad): * WebProcess/Plugins/PDF/PDFPlugin.mm: (WebKit::PDFPlugin::convertFromPDFViewToRootView const): (WebKit::PDFPlugin::boundsOnScreen const): (WebKit::PDFPlugin::geometryDidChange): * WebProcess/WebCoreSupport/SessionStateConversion.cpp: (WebKit::toFormData): * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::updateVisibleContentRects): * WebProcess/WebPage/wpe/CompositingManager.cpp: (WebKit::CompositingManager::releaseConnectionFd): 2018-12-20 Keith Rollin <krollin@apple.com> Improve release-level page-load logging https://bugs.webkit.org/show_bug.cgi?id=192872 <rdar://problem/46850309> Reviewed by Chris Dumez. There are a number of reported bugs that are difficult or impossible to track down with our current level of logging. Additionally, some software groups lower in the page-loading stack have requested logging sufficient for tracking a user-visible error message down to the requested resource that caused the message. Add more-comprehensive logging to address these issues/requests. * UIProcess/WebPageProxy.cpp: (WebKit::m_editableImageController): (WebKit::WebPageProxy::~WebPageProxy): (WebKit::WebPageProxy::reattachToWebProcess): (WebKit::WebPageProxy::swapToWebProcess): (WebKit::WebPageProxy::reattachToWebProcessForReload): (WebKit::WebPageProxy::reattachToWebProcessWithItem): (WebKit::WebPageProxy::close): (WebKit::WebPageProxy::tryClose): (WebKit::WebPageProxy::loadRequest): (WebKit::WebPageProxy::loadRequestWithNavigation): (WebKit::WebPageProxy::loadFile): (WebKit::WebPageProxy::loadData): (WebKit::WebPageProxy::loadDataWithNavigation): (WebKit::WebPageProxy::loadAlternateHTML): (WebKit::WebPageProxy::loadWebArchiveData): (WebKit::WebPageProxy::navigateToPDFLinkWithSimulatedClick): (WebKit::WebPageProxy::stopLoading): (WebKit::WebPageProxy::reload): (WebKit::WebPageProxy::goToBackForwardItem): (WebKit::WebPageProxy::tryRestoreScrollPosition): (WebKit::WebPageProxy::updateThrottleState): (WebKit::WebPageProxy::receivedNavigationPolicyDecision): (WebKit::WebPageProxy::continueNavigationInNewProcess): (WebKit::WebPageProxy::restoreFromSessionState): (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame): (WebKit::WebPageProxy::willPerformClientRedirectForFrame): (WebKit::WebPageProxy::didCancelClientRedirectForFrame): (WebKit::WebPageProxy::didFailProvisionalLoadForFrame): (WebKit::WebPageProxy::didCommitLoadForFrame): (WebKit::WebPageProxy::didFinishDocumentLoadForFrame): (WebKit::WebPageProxy::didFinishLoadForFrame): (WebKit::WebPageProxy::didFailLoadForFrame): (WebKit::WebPageProxy::didSameDocumentNavigationForFrame): (WebKit::WebPageProxy::didNavigateWithNavigationData): (WebKit::WebPageProxy::didPerformClientRedirect): (WebKit::WebPageProxy::didPerformServerRedirect): (WebKit::WebPageProxy::processDidBecomeUnresponsive): (WebKit::WebPageProxy::processDidBecomeResponsive): (WebKit::WebPageProxy::processDidTerminate): (WebKit::WebPageProxy::dispatchProcessDidTerminate): (WebKit::WebPageProxy::tryReloadAfterProcessTermination): (WebKit::WebPageProxy::didExceedInactiveMemoryLimitWhileActive): (WebKit::WebPageProxy::didExceedBackgroundCPULimitWhileInForeground): * WebProcess/Network/WebLoaderStrategy.cpp: (WebKit::WebLoaderStrategy::scheduleLoad): (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess): (WebKit::WebLoaderStrategy::loadResourceSynchronously): * WebProcess/Network/WebResourceLoader.cpp: (WebKit::WebResourceLoader::willSendRequest): (WebKit::WebResourceLoader::didReceiveResponse): * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad): (WebKit::WebFrameLoaderClient::dispatchDidFailLoad): 2018-12-20 Wenson Hsieh <wenson_hsieh@apple.com> [iOS] Replace "node assistance" terminology in WebKit with "focused element" https://bugs.webkit.org/show_bug.cgi?id=192936 Reviewed by Tim Horton. Renames a few methods and data structures in WebKit, to refer to "focused elements" rather than "assisted nodes"; see below for more details. No new tests, because there should be no change in behavior. * Shared/FocusedElementInformation.cpp: Renamed from Source/WebKit/Shared/AssistedNodeInformation.cpp. (WebKit::OptionItem::encode const): (WebKit::OptionItem::decode): (WebKit::FocusedElementInformation::encode const): (WebKit::FocusedElementInformation::decode): * Shared/FocusedElementInformation.h: Renamed from Source/WebKit/Shared/AssistedNodeInformation.h. Rename AssistedNodeInformation to FocusedElementInformation. Additionally, introduce a named type for the focusedElementIdentifier (which is currently just a `uint64_t`). (WebKit::OptionItem::OptionItem): * Shared/ios/InteractionInformationAtPosition.h: * Shared/ios/InteractionInformationAtPosition.mm: (WebKit::InteractionInformationAtPosition::encode const): (WebKit::InteractionInformationAtPosition::decode): * SourcesCocoa.txt: * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _shouldUpdateKeyboardWithInfo:]): * UIProcess/PageClient.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::resetStateAfterProcessExited): * UIProcess/WebPageProxy.h: Rename NodeAssistanceArguments to ElementDidFocusArguments (and also add a FIXME for removing this mechanism eventually). (WebKit::WebPageProxy::focusNextFocusedElement): (WebKit::WebPageProxy::focusNextAssistedNode): Deleted. * UIProcess/WebPageProxy.messages.in: Rename StartAssistingNode to ElementDidFocus, and StopAssistingNode to ElementDidBlur. * UIProcess/ios/PageClientImplIOS.h: * UIProcess/ios/PageClientImplIOS.mm: (WebKit::PageClientImpl::elementDidFocus): (WebKit::PageClientImpl::isFocusingElement): (WebKit::PageClientImpl::elementDidBlur): (WebKit::PageClientImpl::startAssistingNode): Deleted. (WebKit::PageClientImpl::isAssistingNode): Deleted. (WebKit::PageClientImpl::stopAssistingNode): Deleted. * UIProcess/ios/WKContentView.h: * UIProcess/ios/WKContentView.mm: (-[WKContentView isFocusingElement]): (-[WKContentView _didCommitLoadForMainFrame]): (-[WKContentView isAssistingNode]): Deleted. * UIProcess/ios/WKContentViewInteraction.h: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKFocusedElementInfo initWithFocusedElementInformation:isUserInitiated:userObject:]): (hasFocusedElement): (-[WKContentView cleanupInteraction]): (-[WKContentView shouldHideSelectionWhenScrolling]): (-[WKContentView resignFirstResponderForWebView]): (-[WKContentView _didGetTapHighlightForRequest:color:quads:topLeftRadius:topRightRadius:bottomLeftRadius:bottomRightRadius:]): (-[WKContentView _requiresKeyboardWhenFirstResponder]): (-[WKContentView _zoomToRevealFocusedElement]): (-[WKContentView inputView]): (-[WKContentView _selectionClipRect]): (-[WKContentView gestureRecognizerShouldBegin:]): (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]): (-[WKContentView clearSelection]): (-[WKContentView requiresAccessoryView]): (-[WKContentView canPerformActionForWebView:withSender:]): (-[WKContentView _isInteractingWithFocusedElement]): (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:withFlags:]): (-[WKContentView selectPositionAtPoint:completionHandler:]): (-[WKContentView selectPositionAtBoundary:inDirection:fromPoint:completionHandler:]): (-[WKContentView selectTextWithGranularity:atPoint:completionHandler:]): (-[WKContentView updateSelectionWithExtentPoint:completionHandler:]): (-[WKContentView updateSelectionWithExtentPoint:withBoundary:completionHandler:]): (-[WKContentView accessoryTab:]): (-[WKContentView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]): (-[WKContentView accessoryClear]): (-[WKContentView _updateAccessory]): (-[WKContentView insertTextSuggestion:]): (-[WKContentView setSelectedTextRange:]): (-[WKContentView textInputTraits]): (-[WKContentView isScrollableForKeyboardScrollViewAnimator:]): (-[WKContentView focusedElementInformation]): (-[WKContentView focusedSelectElementOptions]): (rectToRevealWhenZoomingToFocusedElement): (-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]): (-[WKContentView _elementDidBlur]): (-[WKContentView _didReceiveEditorStateUpdateAfterFocus]): (-[WKContentView updateCurrentFocusedElementInformation:]): (-[WKContentView presentViewControllerForCurrentFocusedElement]): (-[WKContentView focusedFormControlViewDidSubmit:]): (-[WKContentView focusedFormControlViewDidCancel:]): (-[WKContentView focusedFormControlViewDidBeginEditing:]): (-[WKContentView rectForFocusedFormControlView:]): (-[WKContentView nextRectForFocusedFormControlView:]): (-[WKContentView previousRectForFocusedFormControlView:]): (-[WKContentView actionNameForFocusedFormControlView:]): (-[WKContentView focusedFormControlViewDidRequestNextNode:]): (-[WKContentView focusedFormControlViewDidRequestPreviousNode:]): (-[WKContentView hasNextNodeForFocusedFormControlView:]): (-[WKContentView hasPreviousNodeForFocusedFormControlView:]): (-[WKContentView selectMenu:didSelectItemAtIndex:]): (-[WKContentView numberOfItemsInSelectMenu:]): (-[WKContentView selectMenu:displayTextForItemAtIndex:]): (-[WKContentView selectMenu:didCheckItemAtIndex:checked:]): (-[WKContentView selectMenuUsesMultipleSelection:]): (-[WKContentView selectMenu:hasSelectedOptionAtIndex:]): (-[WKContentView _updateChangedSelection:]): (-[WKContentView _autofillContext]): (-[WKContentView dismissQuickboardViewControllerAndRevealFocusedFormOverlayIfNecessary:]): (-[WKContentView allowsLanguageSelectionMenuForListViewController:]): (-[WKContentView inputLabelTextForViewController:]): (-[WKContentView initialValueForViewController:]): (-[WKContentView shouldDisplayInputContextViewForListViewController:]): (-[WKContentView numericInputModeForListViewController:]): (-[WKContentView textContentTypeForListViewController:]): (-[WKContentView allowsDictationInputForListViewController:]): (-[WKFocusedElementInfo initWithAssistedNodeInformation:isUserInitiated:userObject:]): Deleted. (hasAssistedNode): Deleted. Replaced with hasFocusedElement. (-[WKContentView _isInteractingWithAssistedNode]): Deleted. (-[WKContentView assistedNodeInformation]): Deleted. (-[WKContentView assistedNodeSelectOptions]): Deleted. (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]): Deleted. (-[WKContentView _stopAssistingNode]): Deleted. (-[WKContentView updateCurrentAssistedNodeInformation:]): Deleted. (-[WKContentView presentViewControllerForCurrentAssistedNode]): Deleted. * UIProcess/ios/WebDataListSuggestionsDropdownIOS.mm: (-[WKDataListSuggestionsControl textAlignment]): * UIProcess/ios/WebPageProxyIOS.mm: (WebKit::WebPageProxy::focusedElementInformationCallback): (WebKit::WebPageProxy::requestFocusedElementInformation): (WebKit::WebPageProxy::computeCustomFixedPositionRect const): (WebKit::WebPageProxy::didCommitLayerTree): (WebKit::WebPageProxy::selectWithGesture): (WebKit::WebPageProxy::selectTextWithGranularityAtPoint): (WebKit::WebPageProxy::selectPositionAtBoundaryWithDirection): (WebKit::WebPageProxy::selectPositionAtPoint): (WebKit::WebPageProxy::updateSelectionWithExtentPoint): (WebKit::WebPageProxy::updateSelectionWithExtentPointAndBoundary): (WebKit::WebPageProxy::blurFocusedElement): (WebKit::WebPageProxy::elementDidFocus): (WebKit::WebPageProxy::elementDidBlur): (WebKit::WebPageProxy::focusNextFocusedElement): (WebKit::WebPageProxy::setFocusedElementValue): (WebKit::WebPageProxy::setFocusedElementValueAsNumber): (WebKit::WebPageProxy::setFocusedElementSelectedIndex): (WebKit::WebPageProxy::assistedNodeInformationCallback): Deleted. (WebKit::WebPageProxy::requestAssistedNodeInformation): Deleted. (WebKit::WebPageProxy::blurAssistedNode): Deleted. (WebKit::WebPageProxy::startAssistingNode): Deleted. (WebKit::WebPageProxy::stopAssistingNode): Deleted. (WebKit::WebPageProxy::focusNextAssistedNode): Deleted. (WebKit::WebPageProxy::setAssistedNodeValue): Deleted. (WebKit::WebPageProxy::setAssistedNodeValueAsNumber): Deleted. (WebKit::WebPageProxy::setAssistedNodeSelectedIndex): Deleted. * UIProcess/ios/forms/WKFormColorPicker.mm: (-[WKColorPicker initWithView:]): (-[WKColorPicker setControlValueFromUIColor:]): * UIProcess/ios/forms/WKFormInputControl.mm: (-[WKDateTimePicker initWithView:datePickerMode:]): (-[WKDateTimePicker shouldPresentGregorianCalendar:]): (-[WKDateTimePicker _dateChangedSetAsNumber]): (-[WKDateTimePicker _dateChangedSetAsString]): (-[WKDateTimePicker controlBeginEditing]): (-[WKFormInputControl initWithView:]): (-[WKDateTimePopover clear:]): (-[WKDateTimePopover initWithView:datePickerMode:]): * UIProcess/ios/forms/WKFormPopover.mm: (-[WKRotatingPopover presentPopoverAnimated:]): * UIProcess/ios/forms/WKFormSelectControl.h: * UIProcess/ios/forms/WKFormSelectControl.mm: (-[WKFormSelectControl initWithView:]): * UIProcess/ios/forms/WKFormSelectPicker.mm: (-[WKMultipleSelectPicker initWithView:]): (-[WKMultipleSelectPicker pickerView:viewForRow:forComponent:reusingView:]): (-[WKMultipleSelectPicker pickerView:numberOfRowsInComponent:]): (-[WKMultipleSelectPicker findItemIndexAt:]): (-[WKMultipleSelectPicker pickerView:row:column:checked:]): (-[WKSelectSinglePicker initWithView:]): (-[WKSelectSinglePicker controlEndEditing]): (-[WKSelectSinglePicker pickerView:numberOfRowsInComponent:]): (-[WKSelectSinglePicker pickerView:attributedTitleForRow:forComponent:]): (-[WKSelectSinglePicker pickerView:didSelectRow:inComponent:]): * UIProcess/ios/forms/WKFormSelectPopover.mm: (-[WKSelectTableViewController initWithView:hasGroups:]): (-[WKSelectTableViewController tableView:numberOfRowsInSection:]): (-[WKSelectTableViewController tableView:titleForHeaderInSection:]): (-[WKSelectTableViewController findItemIndexAt:]): (-[WKSelectTableViewController findItemAt:]): (-[WKSelectTableViewController tableView:cellForRowAtIndexPath:]): (-[WKSelectTableViewController tableView:didSelectRowAtIndexPath:]): (-[WKSelectPopover initWithView:hasGroups:]): * WebKit.xcodeproj/project.pbxproj: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::elementDidFocus): (WebKit::WebChromeClient::elementDidRefocus): (WebKit::WebChromeClient::elementDidBlur): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::didStartPageTransition): (WebKit::WebPage::setTextAsync): (WebKit::WebPage::resetFocusedElementForFrame): (WebKit::WebPage::elementDidRefocus): (WebKit::WebPage::elementDidFocus): (WebKit::WebPage::elementDidBlur): (WebKit::WebPage::didCommitLoad): (WebKit::WebPage::resetAssistedNodeForFrame): Deleted. * WebProcess/WebPage/WebPage.h: Refactor elementDid{Refocus|Focus|Blur} to take `Element&` rather than `Node*`. * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/ios/WebPageIOS.mm: Replace m_assistedNode (a `RefPtr<Node>`) with m_focusedElement (a `RefPtr<Element>`). (WebKit::WebPage::platformEditorState const): (WebKit::WebPage::completeSyntheticClick): (WebKit::WebPage::requestFocusedElementInformation): (WebKit::WebPage::blurFocusedElement): (WebKit::WebPage::setFocusedElementValue): (WebKit::WebPage::setFocusedElementValueAsNumber): (WebKit::WebPage::setFocusedElementSelectedIndex): (WebKit::innerFrameQuad): (WebKit::constrainPoint): (WebKit::WebPage::selectWithGesture): (WebKit::WebPage::startAutoscrollAtPosition): (WebKit::WebPage::visiblePositionInFocusedNodeForPoint): (WebKit::WebPage::selectPositionAtPoint): (WebKit::WebPage::selectPositionAtBoundaryWithDirection): (WebKit::WebPage::rangeForGranularityAtPoint): (WebKit::WebPage::selectTextWithGranularityAtPoint): (WebKit::WebPage::updateSelectionWithExtentPointAndBoundary): (WebKit::WebPage::updateSelectionWithExtentPoint): (WebKit::WebPage::getPositionInformation): (WebKit::WebPage::focusNextFocusedElement): (WebKit::WebPage::getFocusedElementInformation): (WebKit::WebPage::autofillLoginCredentials): (WebKit::WebPage::requestAssistedNodeInformation): Deleted. (WebKit::WebPage::blurAssistedNode): Deleted. (WebKit::WebPage::setAssistedNodeValue): Deleted. (WebKit::WebPage::setAssistedNodeValueAsNumber): Deleted. (WebKit::WebPage::setAssistedNodeSelectedIndex): Deleted. (WebKit::WebPage::focusNextAssistedNode): Deleted. (WebKit::WebPage::getAssistedNodeInformation): Deleted. 2018-12-20 Brent Fulgham <bfulgham@apple.com> WKWebView default UA doesn't freeze the build number https://bugs.webkit.org/show_bug.cgi?id=192809 <rdar://problem/44687185> Reviewed by Andy Estes. Always reports the frozen build number. * UIProcess/API/Cocoa/WKWebViewConfiguration.mm: (defaultApplicationNameForUserAgent): Do not expose the actual build number through this API. 2018-12-20 Jer Noble <jer.noble@apple.com> Enable MediaCapabilities by default. https://bugs.webkit.org/show_bug.cgi?id=192340 <rdar://problem/46435149> Reviewed by Dean Jackson. * Shared/WebPreferences.yaml: 2018-12-20 Carlos Garcia Campos <cgarcia@igalia.com> [GTK] WebDriver: tests in imported/w3c/webdriver/tests/element_clear/user_prompts.py are failing https://bugs.webkit.org/show_bug.cgi?id=192927 Reviewed by Michael Catanzaro. Give the focus back to the web view when a dialog is dismissed. * UIProcess/API/gtk/WebKitWebViewBase.cpp: (webkitWebViewBaseContainerRemove): 2018-12-20 Tim Horton <timothy_horton@apple.com> Unparented WKWebView can't retrieve main resource data for a main frame plugin https://bugs.webkit.org/show_bug.cgi?id=192923 <rdar://problem/46859068> Reviewed by Wenson Hsieh. * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::liveResourceData const): If the WKWebView is unparented, we may not immediately initialize the plugin. In that case, PluginView holds on to the backing data until the plugin is initialized. If a WKWebView API client asks for the backing data for the plugin during this time, we should return it, instead of bailing. 2018-12-20 Wenson Hsieh <wenson_hsieh@apple.com> [iOS] Focusing an editable element should scroll to reveal the selection https://bugs.webkit.org/show_bug.cgi?id=192802 <rdar://problem/46781759> Reviewed by Tim Horton. Currently, when tapping on an editable element, logic in -[WKWebView _zoomToFocusRect:…:] attempts to adjust the visible viewport such that the rect containing the selection is visible. However, AssistedNodeInformation's selectionRect is used here, which (as the FIXME in WebPage::getAssistedNodeInformation notes) is either the last touch location, or the top left of the element if the touch location is outside of the element's bounding rect. This leads to confusing and undesirable behavior when tapping near the bottom of a large contenteditable element to focus it, since the actual selection will end up near the top of the element, yet we'll try to scroll to reveal the bottom of the element, which causes the visible selection to scroll offscreen. Notably, this affects scenarios involving editable web views embedded in apps, such as Mail compose. Right now, we use the last touch location as an approximation for the selection rect because the selection may have not yet been updated at the moment when focus moves into an editable element. To fix this, we defer the process of zooming to the focused element rect until after the selection changes and the UI process is updated with information about the new selection rects. Test: editing/selection/ios/selection-is-visible-after-focusing-editable-area.html * Shared/AssistedNodeInformation.cpp: (WebKit::AssistedNodeInformation::encode const): (WebKit::AssistedNodeInformation::decode): * Shared/AssistedNodeInformation.h: Rename selectionRect to elementInteractionLocation, to more accurately reflect its value and purpose. This isn't strictly always the last touch location, since we may default to the focused element location instead if the last touch location is outside of the element rect. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _zoomToFocusRect:selectionRect:insideFixed:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]): Tweak a constant that determines the minimum amount of margin to leave between the selection rect and the edge of the window when scrolling to reveal the focused element. Previously, this was larger than necessary to accomodate for the fact that the "selection rect" used when zooming to the focused element did not take the actual selection into account at all, and was simply a 1 by 1 rect; this meant that the margin needed to be large enough to exceed the usual height of a text caret in editable content. Since we now use the real selection rect, we can be much less generous with this margin. * UIProcess/ios/WKContentViewInteraction.h: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView cleanupInteraction]): (-[WKContentView observeValueForKeyPath:ofObject:change:context:]): Don't additionally update the selection in the middle of triggering zooming to the focused element; on particular versions of iOS, this now attempts to scroll the selection rect on-screen, which then conflicts with zooming to reveal the focused element. (-[WKContentView _zoomToRevealFocusedElement]): Renamed from _displayFormNodeInputView to _zoomToRevealFocusedElement, to make the purpose of this function more clear. Additionally, pull logic to update the accessory view out of this method, so that it's strictly concerned with zooming to the focused element. (-[WKContentView inputView]): Add a FIXME describing the implications of zooming to the focused element in the implementation of -inputView. See also: <https://bugs.webkit.org/show_bug.cgi?id=192878>. (-[WKContentView accessoryTab:]): Fix a subtle issue when keeping track of _didAccessoryTabInitiateFocus. Currently, this is set to YES in -accessoryTab: and unset in _displayFormNodeInputView, but since _displayFormNodeInputView may be invoked multiple times for the same focused element (see: -inputView), we might end up zooming to the focused element with _didAccessoryTabInitiateFocus set to NO, even though we initiated focus with the previous/next buttons. Instead, temporarily set a different ivar, _isChangingFocusUsingAccessoryTab, to YES in -accessoryTab:, and unset it in the completion handler after the focused element has changed. Then, when we _startAssistingNode:, set _didAccessoryTabInitiateFocus to _isChangingFocusUsingAccessoryTab. This ensures that the correctness of _didAccessoryTabInitiateFocus isn't tied to the number of times -[WKContentView inputView] is invoked when focusing an element. (shouldZoomToRevealSelectionRect): (rectToRevealWhenZoomingToFocusedElement): Add a helper method to determine the selection rect to use when zooming to reveal the focused element. ASSERTs that we have post-layout data in the EditorState. (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]): When "assisting" a focused element, immediately zoom to it if we don't need selection information to compute the rect to zoom to; otherwise, defer zooming until we receive the first editor state update in the UI process that contains information about our selection rects. (-[WKContentView _stopAssistingNode]): (-[WKContentView _didReceiveEditorStateUpdateAfterFocus]): If necessary, reveal the focused element by zooming. (-[WKContentView _updateInitialWritingDirectionIfNecessary]): Pull this initial writing direction update logic out into a separate helper method. (-[WKContentView _displayFormNodeInputView]): Deleted. Replaced by _zoomToRevealFocusedElement. * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::elementDidRefocus): This currently calls WebChromeClient::elementDidFocus; instead, call the new WebPage::elementDidRefocus; additionally, make this available on all PLATFORM(COCOA), rather than just IOS_FAMILY. * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm: (WebKit::WebChromeClient::elementDidRefocus): Deleted. Replaced by the PLATFORM(COCOA) version. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::elementDidRefocus): When refocusing an element, ensure that post-layout editor state data is sent to the UI process by including a full EditorState in the next layer tree transaction. * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::completeSyntheticClick): Call elementDidRefocus instead of elementDidFocus, in the case where the existing focused element is clicked. (WebKit::WebPage::getAssistedNodeInformation): Adjust for the change from selectionRect to elementInteractionLocation. 2018-12-20 Patrick Griffis <pgriffis@igalia.com> [GTK][WPE] Grant the sandbox read access to XDG_DATA_HOME/prgname https://bugs.webkit.org/show_bug.cgi?id=192929 Reviewed by Michael Catanzaro. * UIProcess/API/glib/WebKitWebContext.cpp: * UIProcess/Launcher/glib/BubblewrapLauncher.cpp: (WebKit::bubblewrapSpawn): 2018-12-20 Chris Dumez <cdumez@apple.com> [PSON] SuspendedPageProxy fails to release its process assertion if the WebPage fails to enter PageCache https://bugs.webkit.org/show_bug.cgi?id=192873 Reviewed by Antti Koivisto. SuspendedPageProxy fails to release its process assertion if the WebPage fails to enter PageCache, preventing the process from suspending on iOS. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::didProcessRequestToSuspend): (WebKit::SuspendedPageProxy::didReceiveMessage): (WebKit::SuspendedPageProxy::didSuspend): Deleted. (WebKit::SuspendedPageProxy::didFailToSuspend): Deleted. * UIProcess/SuspendedPageProxy.h: 2018-12-19 Chris Dumez <cdumez@apple.com> wtf/Optional.h: move-constructor and move-assignment operator should disengage the value being moved from https://bugs.webkit.org/show_bug.cgi?id=192728 <rdar://problem/46746779> Reviewed by Geoff Garen. * NetworkProcess/*: * Platform/*: * Scripts/*: * Shared/*: * UIProcess/*: * WebProcess/*: 2018-12-19 Michael Catanzaro <mcatanzaro@igalia.com> Unreviewed, silence -Wpragmas warning * WebProcess/WebCoreSupport/WebAlternativeTextClient.h: 2018-12-19 Vivek Seth <v_seth@apple.com> HTTPS Upgrade: Use full sqlite upgrade list https://bugs.webkit.org/show_bug.cgi?id=192736 <rdar://problem/45851427> Reviewed by Chris Dumez. * NetworkProcess/NetworkHTTPSUpgradeChecker.cpp: Added. (WebKit::NetworkHTTPSUpgradeCheckerDatabasePath): (WebKit::NetworkHTTPSUpgradeChecker::NetworkHTTPSUpgradeChecker): (WebKit::NetworkHTTPSUpgradeChecker::~NetworkHTTPSUpgradeChecker): (WebKit::NetworkHTTPSUpgradeChecker::query): (WebKit::NetworkHTTPSUpgradeChecker::isAlwaysOnLoggingAllowed const): * NetworkProcess/NetworkHTTPSUpgradeChecker.h: Added. (WebKit::NetworkHTTPSUpgradeChecker::didSetupCompleteSuccessfully const): * NetworkProcess/NetworkLoadChecker.cpp: (WebKit::NetworkLoadChecker::applyHTTPSUpgradeIfNeeded const): (WebKit::NetworkLoadChecker::checkRequest): * NetworkProcess/NetworkLoadChecker.h: * NetworkProcess/NetworkProcess.h: (WebKit::NetworkProcess::networkHTTPSUpgradeChecker): * Sources.txt: * WebKit.xcodeproj/project.pbxproj: 2018-12-19 Tim Horton <timothy_horton@apple.com> Use delegate instead of drawingDelegate in WKDrawingView https://bugs.webkit.org/show_bug.cgi?id=192899 <rdar://problem/46733339> Reviewed by Wenson Hsieh. * UIProcess/ios/WKDrawingView.mm: (-[WKDrawingView initWithEmbeddedViewID:webPageProxy:]): Do the dance. 2018-12-19 Alex Christensen <achristensen@webkit.org> Navigations away from the SafeBrowsing interstitial show a flash of old content https://bugs.webkit.org/show_bug.cgi?id=192676 Reviewed by Chris Dumez. When a user clicks through a safe browsing warning, do not remove the warning until content is drawn for the destination. Otherwise, the user will confusingly see the page before the warning while the navigation happens. We can only do this for warnings caused by main frame navigations, though. Other warnings (such as those caused by iframes) need to be cleared immediately, and we still need to clear the warning immediately if the user has said to go back. This change is reflected in an updated API test. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _showSafeBrowsingWarning:completionHandler:]): * UIProcess/Cocoa/SafeBrowsingWarningCocoa.mm: (WebKit::SafeBrowsingWarning::SafeBrowsingWarning): * UIProcess/Cocoa/WKSafeBrowsingWarning.h: * UIProcess/Cocoa/WKSafeBrowsingWarning.mm: (-[WKSafeBrowsingWarning forMainFrameNavigation]): * UIProcess/Cocoa/WebPageProxyCocoa.mm: (WebKit::WebPageProxy::beginSafeBrowsingCheck): * UIProcess/Cocoa/WebViewImpl.h: * UIProcess/Cocoa/WebViewImpl.mm: (WebKit::WebViewImpl::showSafeBrowsingWarning): (WebKit::WebViewImpl::clearSafeBrowsingWarningIfForMainFrameNavigation): * UIProcess/PageClient.h: (WebKit::PageClient::clearSafeBrowsingWarningIfForMainFrameNavigation): * UIProcess/SafeBrowsingWarning.h: (WebKit::SafeBrowsingWarning::create): (WebKit::SafeBrowsingWarning::forMainFrameNavigation const): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didReachLayoutMilestone): (WebKit::WebPageProxy::beginSafeBrowsingCheck): (WebKit::WebPageProxy::decidePolicyForNavigationAction): * UIProcess/WebPageProxy.h: * UIProcess/ios/PageClientImplIOS.h: * UIProcess/mac/PageClientImplMac.h: * UIProcess/mac/PageClientImplMac.mm: (WebKit::PageClientImpl::clearSafeBrowsingWarningIfForMainFrameNavigation): 2018-12-19 Tim Horton <timothy_horton@apple.com> UI process crash when focusing an editable image https://bugs.webkit.org/show_bug.cgi?id=192839 <rdar://problem/46786670> Reviewed by Wenson Hsieh. * SourcesCocoa.txt: * UIProcess/ios/WKContentViewInteraction.h: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView _requiresKeyboardWhenFirstResponder]): (-[WKContentView inputView]): (-[WKContentView requiresAccessoryView]): (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]): (-[WKContentView _stopAssistingNode]): (-[WKContentView _installInkPickerForDrawingViewWithID:]): (-[WKContentView _uninstallInkPicker]): * UIProcess/ios/WKInkPickerView.h: Renamed from Source/WebKit/UIProcess/ios/WKInkPickerControl.h. * UIProcess/ios/WKInkPickerView.mm: Renamed from Source/WebKit/UIProcess/ios/WKInkPickerControl.mm. (-[WKInkPickerView initWithDrawingView:]): (-[WKInkPickerView didPickInk]): (-[WKInkPickerView inlineInkPickerDidToggleRuler:]): (-[WKInkPickerView inlineInkPicker:didSelectTool:]): (-[WKInkPickerView inlineInkPicker:didSelectColor:]): (-[WKInkPickerView inkPickerSize]): (-[WKInkPickerView layoutSubviews]): (-[WKInkPickerView sizeThatFits:]): (-[WKInkPickerView viewControllerForPopoverPresentationFromInlineInkPicker:]): * WebKit.xcodeproj/project.pbxproj: Make WKInkPickerView a WKWebView subview instead of an inputView. Also, don't force the keyboard to be visible when an editable image is focused. 2018-12-19 Eric Carlson <eric.carlson@apple.com> [MediaStream] Force system camera/microphone TCC prompt if necessary https://bugs.webkit.org/show_bug.cgi?id=192820 <rdar://problem/42680098> Reviewed by Jer Noble. * UIProcess/Cocoa/UIDelegate.mm: (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest): Enable TCC check and prompt on Mojave. 2018-12-19 Megan Gardner <megan_gardner@apple.com> Allow clients to set the navigator platform https://bugs.webkit.org/show_bug.cgi?id=192735 Reviewed by Tim Horton. Add private API to allow clients to override the default navigator platform. Some websites check for the platform, which interfears with our request desktop site feature. This should help more sites function as expected. * Shared/WebsitePoliciesData.cpp: (WebKit::WebsitePoliciesData::encode const): (WebKit::WebsitePoliciesData::decode): (WebKit::WebsitePoliciesData::applyToDocumentLoader): * Shared/WebsitePoliciesData.h: * UIProcess/API/APIWebsitePolicies.cpp: (API::WebsitePolicies::data): * UIProcess/API/APIWebsitePolicies.h: * UIProcess/API/Cocoa/_WKWebsitePolicies.h: * UIProcess/API/Cocoa/_WKWebsitePolicies.mm: (-[_WKWebsitePolicies setCustomNavigatorPlatform:]): (-[_WKWebsitePolicies customNavigatorPlatform]): * UIProcess/Cocoa/NavigationState.mm: (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction): 2018-12-19 Truitt Savell <tsavell@apple.com> Unreviewed, rolling out r239358. Revision caused imported/w3c/web-platform-tests/IndexedDB/ to crash on Debug bots Reverted changeset: "Clean up IndexedDB files between tests" https://bugs.webkit.org/show_bug.cgi?id=192796 https://trac.webkit.org/changeset/239358 2018-12-18 Alex Christensen <achristensen@webkit.org> REGRESSION(r239134) iOS safe browsing warning unable to show details https://bugs.webkit.org/show_bug.cgi?id=192837 Reviewed by Tim Horton. * UIProcess/Cocoa/WKSafeBrowsingWarning.mm: (-[WKSafeBrowsingWarning addContent]): I had a fragile design that relied on the internal view heirarchy structure of UIScrollView, which I changed in r239134 by introducing a layout which changed where its scrollbars were in the view heirarchy. I now have a more robust design that saves a WeakObjCPtr to the view I need to traverse to. Testing is problematic because this had to do with scrollbars and UIScrollView internals which seem to behave differently in TestWebKitAPI, but I verified manually that this fixes the issue. 2018-12-18 Fujii Hironori <Hironori.Fujii@sony.com> [Win][Clang] Fix compilation warnings under Source/WebKit directory https://bugs.webkit.org/show_bug.cgi?id=192695 Reviewed by Alex Christensen. * NetworkProcess/cache/NetworkCacheData.cpp: (makeSalt): Enclosed by #if !OS(WINDOWS). * NetworkProcess/cache/NetworkCacheFileSystem.cpp: (WebKit::NetworkCache::directoryEntryType): Ditto. * Platform/win/ModuleWin.cpp: (WebKit::Module::platformFunctionPointer const): Cast a function pointer with reinterpret_cast<void*>(). * UIProcess/DrawingAreaProxyImpl.cpp: (WebKit::DrawingAreaProxyImpl::DrawingMonitor::DrawingMonitor): Moved the initializer of m_webPage in order to be encluded by #if PLATFORM(GTK). * UIProcess/DrawingAreaProxyImpl.h: Ditto. * UIProcess/Launcher/win/ProcessLauncherWin.cpp: (WebKit::processName): Removed the duplicated 'const' type qualifier. * UIProcess/win/WebInspectorProxyWin.cpp: (WebKit::WebInspectorProxy::platformAttach): Removed an unused variable. (WebKit::WebInspectorProxy::platformDetach): Ditto. * UIProcess/win/WebPopupMenuProxyWin.cpp: Ditto. * UIProcess/win/WebView.cpp: (WebKit::WebView::paint): Ditto. (WebKit::WebPopupMenu::setUpPlatformData): Ditto. * UIProcess/win/WebPopupMenuProxyWin.h: Marked override methods with 'override'. * WebProcess/WebCoreSupport/curl/WebFrameNetworkingContext.h: Ditto. * WebProcess/WebCoreSupport/win/WebPopupMenuWin.cpp: Removed an unused variable. 2018-12-18 Wenson Hsieh <wenson_hsieh@apple.com> [macOS] fast/forms/datalist/datalist-textinput-suggestions-order.html sometimes crashes after r239337 https://bugs.webkit.org/show_bug.cgi?id=192836 <rdar://problem/45321184> Reviewed by Tim Horton. r239337 exposed a subtle issue in the implementation of `-[WKDataListSuggestionsView updateWithInformation:]`, wherein we might end up recomputing information for table view cells at rows that no longer exist. This currently happens because we first set the datalist's `_suggestions`, then change the table view's frame, and then finally reload the table view; however, in the case where the number of suggestions decreased and the frame changed (which prompts AppKit to ask us again for table cell views), we'll attempt to access an out-of-bounds index in the `_suggestions` vector. To address this, we change our suggestions and immediately reload the table view before updating `NSTableView`'s frame, so that we only provide table view cells for rows that actually correspond to items in `_suggestions`. * UIProcess/mac/WebDataListSuggestionsDropdownMac.mm: (-[WKDataListSuggestionsView updateWithInformation:]): 2018-12-18 Jiewen Tan <jiewen_tan@apple.com> [Mac] Layout Test http/wpt/webauthn/public-key-credential-create-success-hid.https.html and http/wpt/webauthn/public-key-credential-get-success-hid.https.html are flaky https://bugs.webkit.org/show_bug.cgi?id=192061 Reviewed by Dewei Zhu. Part 4. Add some additional temporary logging info to determine if the time out value passed to the timer is right. Once the bug is determined and fixed, we should remove all logging added in this patch. * UIProcess/WebAuthentication/AuthenticatorManager.cpp: (WebKit::AuthenticatorManager::initTimeOutTimer): 2018-12-18 Sihui Liu <sihui_liu@apple.com> Clean up IndexedDB files between tests https://bugs.webkit.org/show_bug.cgi?id=192796 Reviewed by Geoffrey Garen. * UIProcess/API/C/WKWebsiteDataStoreRef.cpp: (WKWebsiteDataStoreRemoveAllIndexedDatabasesSync): * UIProcess/API/C/WKWebsiteDataStoreRef.h: 2018-12-18 Vivek Seth <v_seth@apple.com> HTTPS Upgrade: Scripts / preprocessing necessary to create new database in future https://bugs.webkit.org/show_bug.cgi?id=192612 <rdar://problem/46651207> Reviewed by Andy Estes. * Configurations/WebKit.xcconfig: * DerivedSources.make: * Scripts/generate-https-upgrade-database.sh: Added. * WebKit.xcodeproj/project.pbxproj: 2018-12-18 Wenson Hsieh <wenson_hsieh@apple.com> Unreviewed, fix the 32-bit watchOS build after r239314 * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _zoomToFocusRect:selectionRect:insideFixed:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]): 2018-12-18 Alex Christensen <achristensen@webkit.org> WKWebView has old URL while displaying SafeBrowsing interstitial, for link-click navigations https://bugs.webkit.org/show_bug.cgi?id=192675 Reviewed by Geoffrey Garen. When a safe browsing warning is being shown, WKWebView.URL should be the unsafe website, not the safe website before it. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _showSafeBrowsingWarningWithTitle:warning:details:completionHandler:]): (-[WKWebView _showSafeBrowsingWarningWithURL:title:warning:details:completionHandler:]): * UIProcess/API/Cocoa/WKWebViewPrivate.h: * UIProcess/Cocoa/SafeBrowsingWarningCocoa.mm: (WebKit::SafeBrowsingWarning::SafeBrowsingWarning): * UIProcess/SafeBrowsingWarning.h: (WebKit::SafeBrowsingWarning::create): (WebKit::SafeBrowsingWarning::url const): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::decidePolicyForNavigationAction): 2018-12-18 Chris Dumez <cdumez@apple.com> Regression(r239182) SuspendedPage's process reuse for link navigation optimization sometimes broken https://bugs.webkit.org/show_bug.cgi?id=192772 Reviewed by Antti Koivisto. With r239182, if the page in the previous process would fail to enter PageCache, we would destroy the corresponding SuspendedPageProxy, which would potentially terminate the process. This would regress performance when trying to navigate back in history to that page. This would also regress performance when link-navigating to the same domain as we would have previously reused the suspended page's process for such navigation. Address the issue by keeping the SuspendedPageProxy alive even if the WebPage fails to suspend. When trying to reuse a SuspendedPageProxy, if the page failed to suspend, reuse its process but not the suspended page itself. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::~SuspendedPageProxy): (WebKit::SuspendedPageProxy::waitUntilReadyToUnsuspend): (WebKit::SuspendedPageProxy::unsuspend): (WebKit::SuspendedPageProxy::didSuspend): (WebKit::SuspendedPageProxy::didFailToSuspend): (WebKit::SuspendedPageProxy::loggingString const): * UIProcess/SuspendedPageProxy.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::swapToWebProcess): * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::processForNavigationInternal): 2018-12-17 Jiewen Tan <jiewen_tan@apple.com> [Mac] Layout Test http/wpt/webauthn/public-key-credential-create-success-hid.https.html and http/wpt/webauthn/public-key-credential-get-success-hid.https.html are flaky https://bugs.webkit.org/show_bug.cgi?id=192061 Reviewed by Dewei Zhu. Part 3. Add some additional temporary logging info to determine if the timer is working as expected. Once the bug is determined and fixed, we should remove all logging added in this patch. * UIProcess/WebAuthentication/AuthenticatorManager.cpp: (WebKit::AuthenticatorManager::respondReceived): (WebKit::AuthenticatorManager::initTimeOutTimer): (WebKit::AuthenticatorManager::timeOutTimerFired): * UIProcess/WebAuthentication/Mock/MockAuthenticatorManager.cpp: (WebKit::MockAuthenticatorManager::respondReceivedInternal): 2018-12-17 Saam barati <sbarati@apple.com> Enable HTTP and HTTPS proxies on iOS and make it a property of the NSURLSession https://bugs.webkit.org/show_bug.cgi?id=192374 <rdar://problem/46506286> Reviewed by Alex Christensen. This patch makes it so that we can use HTTP/HTTPS proxies on iOS as well. To enable on iOS, you can do something like: $ defaults write -g WebKit2HTTPProxy -string "http://localhost:8080" $ defaults write -g WebKit2HTTPSProxy -string "http://localhost:8080" This patch also changes the Proxy to be enabled on a per NSURLSession basis instead of a per process basis. * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::initializeNetworkProcess): * NetworkProcess/NetworkSessionCreationParameters.cpp: (WebKit::NetworkSessionCreationParameters::privateSessionParameters): (WebKit::NetworkSessionCreationParameters::encode const): (WebKit::NetworkSessionCreationParameters::decode): * NetworkProcess/NetworkSessionCreationParameters.h: * NetworkProcess/cocoa/NetworkSessionCocoa.mm: (WebKit::proxyDictionary): (WebKit::NetworkSessionCocoa::NetworkSessionCocoa): * NetworkProcess/mac/NetworkProcessMac.mm: (WebKit::NetworkProcess::platformInitializeNetworkProcess): (WebKit::overrideSystemProxies): Deleted. * UIProcess/API/Cocoa/WKWebsiteDataStore.mm: (-[WKWebsiteDataStore _initWithConfiguration:]): * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h: * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm: (-[_WKWebsiteDataStoreConfiguration httpProxy]): (-[_WKWebsiteDataStoreConfiguration setHTTPProxy:]): (-[_WKWebsiteDataStoreConfiguration httpsProxy]): (-[_WKWebsiteDataStoreConfiguration setHTTPSProxy:]): * UIProcess/Cocoa/WebProcessPoolCocoa.mm: (WebKit::WebProcessPool::platformInitializeNetworkProcess): * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm: (WebKit::WebsiteDataStore::parameters): * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp: (WebKit::WebsiteDataStoreConfiguration::copy): * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h: (WebKit::WebsiteDataStoreConfiguration::httpProxy const): (WebKit::WebsiteDataStoreConfiguration::setHTTPProxy): (WebKit::WebsiteDataStoreConfiguration::httpsProxy const): (WebKit::WebsiteDataStoreConfiguration::setHTTPSProxy): 2018-12-17 Wenson Hsieh <wenson_hsieh@apple.com> Tap highlights should not be shown on iOSMac https://bugs.webkit.org/show_bug.cgi?id=192797 <rdar://problem/46793995> Reviewed by Tim Horton. WKWebViews in iOSMac should avoid painting tap highlights, since tap highlights are not present in the rest of the macOS platform. Simply disable this functionality by bailing in `-[WKContentView _showTapHighlight]`. * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView _showTapHighlight]): 2018-12-17 Wenson Hsieh <wenson_hsieh@apple.com> Unreviewed, fix the iOSMac engineering build again After r239311, `WebProcessProxy::fullKeyboardAccessEnabled` in `WebProcessProxyIOS.mm` attempts to use `WKFullKeyboardAccessWatcher`, which is guarded by `ENABLE(FULL_KEYBOARD_ACCESS)`. However, on iOSMac, `ENABLE(FULL_KEYBOARD_ACCESS)` is 0. Fix the build by putting access to `WKFullKeyboardAccessWatcher` behind `ENABLE(FULL_KEYBOARD_ACCESS)`. * UIProcess/ios/WebProcessProxyIOS.mm: (WebKit::WebProcessProxy::fullKeyboardAccessEnabled): 2018-12-17 Wenson Hsieh <wenson_hsieh@apple.com> Unreviewed, fix the iOSMac engineering build `generateRequestID()` is only invoked from code under `ENABLE(MEDIA_STREAM)`; move it under this guard to avoid an unused function warning. * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: 2018-12-17 David Kilzer <ddkilzer@apple.com> clang-tidy: Fix unnecessary object copy in CPUMonitor::setCPULimit() <https://webkit.org/b/192707> <rdar://problem/46734926> Reviewed by Daniel Bates. * WebProcess/cocoa/WebProcessCocoa.mm: (WebKit::WebProcess::updateCPUMonitorState): - Pass m_cpuLimit directly since getting its value causes an identical std::optional<double> to be created unnecessarily. 2018-12-17 Wenson Hsieh <wenson_hsieh@apple.com> [iOS] Focusing a large editable element always scrolls to the top of the element https://bugs.webkit.org/show_bug.cgi?id=192745 <rdar://problem/46758445> Reviewed by Tim Horton. Currently, when focusing form controls or editable elements, we try to scroll such that the focused element rect is centered within the visible area. In the case of very large focusable elements whose dimensions exceed the width or height of the visible area, we instead scroll such that the top left point of the element is at the top left corner of the visible area. However, this results in unnecessary scrolling if the top of the element is already near the top of the visible area. For WebKit2-based rich text editors that have an editable body element with a top content inset that contains additional content, this means we will always scroll the additional content away when focusing the editable body. To avoid this behavior, adjust focused element zooming logic for editable elements that are too large to be centered in the visible area, such that we only scroll the top left position of the focused element to the top half or top right of the visible area, respectively. This reduces the amount of scrolling when focusing large editable elements, while still making it clear which element is being focused. * Platform/spi/ios/UIKitSPI.h: * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _zoomToFocusRect:selectionRect:insideFixed:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]): Make some small adjustments to improve the readability of this method by using `clampTo` instead of clamping values by comparing and setting values. Also, fix an existing bug wherein focusable elements that are meant to be centered within the visible area are currently offset by half the difference between the bottom inset amount and the top inset amount, in the case where the `_obscuredInsets` SPI is used to specify content insets for the web view (i.e., MobileSafari). * UIProcess/API/Cocoa/WKWebViewInternal.h: Make a couple of arguments `const FloatRect&` instead of just `FloatRect`. 2018-12-17 Ryosuke Niwa <rniwa@webkit.org> offsetLeft and offsetParent should adjust across shadow boundaries https://bugs.webkit.org/show_bug.cgi?id=157437 <rdar://problem/26154021> Reviewed by Simon Fraser. Use *forBindings variants of offsetLeft, offsetTop, and offsetParent. * WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElementGtk.cpp: (webkit_dom_element_get_offset_left): (webkit_dom_element_get_offset_top): (webkit_dom_element_get_offset_parent): 2018-12-17 Chris Fleizach <cfleizach@apple.com> Some builds are broken after r239262 https://bugs.webkit.org/show_bug.cgi?id=192777 Reviewed by Simon Fraser. * Platform/spi/ios/AccessibilitySupportSPI.h: * UIProcess/Cocoa/WKFullKeyboardAccessWatcher.h: * UIProcess/Cocoa/WKFullKeyboardAccessWatcher.mm: (platformIsFullKeyboardAccessEnabled): (-[WKFullKeyboardAccessWatcher init]): Fix the build by being more clear about when it's OK to use AccessibilitySupport. 2018-12-17 Chris Dumez <cdumez@apple.com> Allow passing nil as session state to [WKWebView _restoreSessionState:] https://bugs.webkit.org/show_bug.cgi?id=192789 <rdar://problem/46755277> Reviewed by Alex Christensen. Allow passing nil as session state to [WKWebView _restoreSessionState:] instead of crashing. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _restoreSessionState:andNavigate:]): 2018-12-17 Alex Christensen <achristensen@webkit.org> Fix occasional null-dereference crash in WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame https://bugs.webkit.org/show_bug.cgi?id=192744 <rdar://problem/45842668> Reviewed by Chris Dumez. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame): Things happen. Navigations can be null. If they are, we shouldn't dereference pointers to them. 2018-12-17 Chris Dumez <cdumez@apple.com> Unreviewed, revert recent CrashReporterClient build fixes as they are no longer needed. * Platform/cocoa/WKCrashReporter.mm: 2018-12-17 Suresh Koppisetty <skoppisettyt@apple.com> Rollout r235411 https://bugs.webkit.org/show_bug.cgi?id=192778 <rdar://46789485> Disabling access to CoreServices is causing a performance regression in process launch time. See <rdar://46141878> Reviewed by Alex Christensen. * WebProcess/com.apple.WebProcess.sb.in: 2018-12-17 Zan Dobersek <zdobersek@igalia.com> Unreviewed WPE build fix after r239277. * UIProcess/API/C/WKContext.cpp: (WKContextClearCurrentModifierStateForTesting): Use the WebKit:: namespace specifier as it is used across this file. 2018-12-17 Commit Queue <commit-queue@webkit.org> Unreviewed, rolling out r239265 and r239274. https://bugs.webkit.org/show_bug.cgi?id=192765 unorm_normalize is deprecated, and broke an internal build (Requested by Truitt on #webkit). Reverted changesets: "[GTK][WPE] Need a function to convert internal URI to display ("pretty") URI" https://bugs.webkit.org/show_bug.cgi?id=174816 https://trac.webkit.org/changeset/239265 "Fix the Apple Internal Mac build with a newer SDK" https://trac.webkit.org/changeset/239274 2018-12-17 Daniel Bates <dabates@apple.com> Implement UIScriptController::toggleCapsLock() for iOS https://bugs.webkit.org/show_bug.cgi?id=191815 Reviewed by Andy Estes. Add test infrastructure to clear the current modifier state. We will use this to ensure that the caps lock state does not persist between tests. * UIProcess/API/C/WKContext.cpp: (WKContextClearCurrentModifierStateForTesting): Added. * UIProcess/API/C/WKContextPrivate.h: * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::clearCurrentModifierStateForTesting): Added. * UIProcess/WebProcessPool.h: * WebProcess/WebProcess.cpp: (WebKit::WebProcess::clearCurrentModifierStateForTesting): Added. * WebProcess/WebProcess.h: * WebProcess/WebProcess.messages.in: 2018-12-17 David Kilzer <ddkilzer@apple.com> REGRESSION (r239262): Fix broken builds prior to Mojave <https://bugs.webkit.org/show_bug.cgi?id=192373> <rdar://problem/46462670> * UIProcess/Cocoa/WKFullKeyboardAccessWatcher.mm: Wrap header in ENABLE(ACCESSIBILITY_EVENTS) to fix the build. 2018-12-17 Daniel Bates <dabates@apple.com> [iOS] Remove -[WebEvent initWithKeyEventType:...:characterSet:] https://bugs.webkit.org/show_bug.cgi?id=192633 Reviewed by Wenson Hsieh. Update code to use the modern initializer. * UIProcess/ios/WKWebEvent.mm: (-[WKWebEvent initWithEvent:]): 2018-12-17 Matt Lewis <jlewis3@apple.com> Unreviewed, rolling out r239254. This broke the Windows 10 Debug build Reverted changeset: "Replace many uses of String::format with more type-safe alternatives" https://bugs.webkit.org/show_bug.cgi?id=192742 https://trac.webkit.org/changeset/239254 2018-12-17 David Kilzer <ddkilzer@apple.com> clang-tidy: loop variable is copied but only used as const reference in WebCore, WebKit, Tools <https://webkit.org/b/192751> <rdar://problem/46771623> Reviewed by Daniel Bates. Change loop variables to const references to avoid unnecessary copies. * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp: (WebKit::WebSWServerConnection::~WebSWServerConnection): * Shared/RemoteLayerTree/RemoteLayerTreeTransaction.mm: (WebKit::RemoteLayerTreeTransaction::encode const): * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm: (WebKit::toNSErrors): * UIProcess/Automation/WebAutomationSession.cpp: (WebKit::WebAutomationSession::setFilesToSelectForFileUpload): (WebKit::WebAutomationSession::performKeyboardInteractions): (WebKit::WebAutomationSession::performInteractionSequence): * UIProcess/Plugins/PluginProcessManager.cpp: (WebKit::PluginProcessManager::getPluginProcess): * UIProcess/ResourceLoadStatisticsMemoryStore.cpp: (WebKit::ResourceLoadStatisticsMemoryStore::removeDataRecords): (WebKit::ResourceLoadStatisticsMemoryStore::shouldRemoveDataRecords const): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::serializedAttachmentDataForIdentifiers): * UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp: (WebKit::LocalStorageDatabaseTracker::deleteAllDatabases): (WebKit::LocalStorageDatabaseTracker::origins const): (WebKit::LocalStorageDatabaseTracker::originDetails): * WebProcess/WebPage/WebPage.cpp: (WebKit::m_shouldAttachDrawingAreaOnPageTransition): * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: (WebKit::TiledCoreAnimationDrawingArea::didUpdateActivityStateTimerFired): 2018-12-17 Ms2ger <Ms2ger@igalia.com> [GTK][WPE] Need a function to convert internal URI to display ("pretty") URI https://bugs.webkit.org/show_bug.cgi?id=174816 Reviewed by Michael Catanzaro. Add webkit_uri_for_display for GTK and WPE. * PlatformGTK.cmake: * PlatformWPE.cmake: * SourcesGTK.txt: * SourcesWPE.txt: * UIProcess/API/glib/WebKitURIUtilities.cpp: Added. (webkit_uri_for_display): * UIProcess/API/gtk/WebKitURIUtilities.h: Added. * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt: * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml: * UIProcess/API/gtk/webkit2.h: * UIProcess/API/wpe/WebKitURIUtilities.h: Added. * UIProcess/API/wpe/docs/wpe-0.1-sections.txt: * UIProcess/API/wpe/docs/wpe-docs.sgml: * UIProcess/API/wpe/webkit.h: 2018-12-17 Carlos Garcia Campos <cgarcia@igalia.com> [WPE] Add API to notify about frame displayed view backend callback https://bugs.webkit.org/show_bug.cgi?id=192224 Reviewed by Michael Catanzaro. Add API to add a callback to the view to be called when the view backend notifies that a frame has been displayed. * UIProcess/API/glib/WebKitWebView.cpp: (FrameDisplayedCallback::FrameDisplayedCallback): (FrameDisplayedCallback::~FrameDisplayedCallback): (webkit_web_view_add_frame_displayed_callback): (webkit_web_view_remove_frame_displayed_callback): * UIProcess/API/wpe/WebKitWebView.h: * UIProcess/API/wpe/docs/wpe-0.1-sections.txt: 2018-12-16 Chris Fleizach <cfleizach@apple.com> AX: Support keyboard access preference for iOS in WebKit https://bugs.webkit.org/show_bug.cgi?id=192373 <rdar://problem/46462670> Reviewed by Tim Horton. * Platform/spi/ios/AccessibilitySupportSPI.h: * PlatformMac.cmake: * SourcesCocoa.txt: * UIProcess/Cocoa/WKFullKeyboardAccessWatcher.h: Added. * UIProcess/Cocoa/WKFullKeyboardAccessWatcher.mm: Added. (platformIsFullKeyboardAccessEnabled): (-[WKFullKeyboardAccessWatcher notifyAllProcessPools]): (-[WKFullKeyboardAccessWatcher retrieveKeyboardUIModeFromPreferences:]): (-[WKFullKeyboardAccessWatcher init]): (+[WKFullKeyboardAccessWatcher fullKeyboardAccessEnabled]): * UIProcess/ios/WebProcessProxyIOS.mm: (WebKit::WebProcessProxy::fullKeyboardAccessEnabled): * UIProcess/mac/WKFullKeyboardAccessWatcher.h: Removed. * UIProcess/mac/WKFullKeyboardAccessWatcher.mm: Removed. * WebKit.xcodeproj/project.pbxproj: 2018-12-16 Adrian Perez de Castro <aperez@igalia.com> Unreviewed follow up after r239260 https://bugs.webkit.org/show_bug.cgi?id=192714 <rdar://problem/46762407> * Platform/win/SharedMemoryWin.cpp: (WebKit::SharedMemory::allocate): Use PAGE_READWRITE directly instead of going through the protectAttribute() function, which is removed because it is now unused. 2018-12-16 Adrian Perez de Castro <aperez@igalia.com> Unify SharedMemory factory functions https://bugs.webkit.org/show_bug.cgi?id=192714 Reviewed by Darin Adler. This unifies SharedMemory so in the following way, across platforms: - SharedMemory::create() is removed, to avoid ambiguity. - SharedMemory::allocate() always allocates a new block of shared memory. - SharedMemory::wrapMap() always creates a SharedMemory object which refers to an existing region of memory resulting from memory-mapping a file. * NetworkProcess/cache/NetworkCacheDataCocoa.mm: (WebKit::NetworkCache::Data::tryCreateSharedMemory const): Use SharedMemory::wrapMap(). * Platform/SharedMemory.h: Remove the definition of SharedMemory::create(), and make SharedMemory::wrapMap() available on OS(DARWIN) as well. * Platform/cocoa/SharedMemoryCocoa.cpp: (WebKit::SharedMemory::wrapMap): Renamed from ::create(). * Platform/unix/SharedMemoryUnix.cpp: (WebKit::SharedMemory::allocate): Renamed from ::create(). * Platform/win/SharedMemoryWin.cpp: (WebKit::SharedMemory::allocate): Renamed from ::create() * UIProcess/API/APIContentRuleListStore.cpp: (API::createExtension): Use NetworkCache::Data::tryCreateSharedMemory() instead of SharedMemory::create(). 2018-12-15 Chris Fleizach <cfleizach@apple.com> [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds https://bugs.webkit.org/show_bug.cgi?id=192449 <rdar://problem/46595508> Reviewed by Darin Adler. Part 7: Files in UIProcess/API * UIProcess/API/APIContentRuleListStore.cpp: * UIProcess/API/APIHitTestResult.cpp: * UIProcess/API/APINavigation.cpp: * UIProcess/API/APIOpenPanelParameters.cpp: * UIProcess/API/APIPageConfiguration.cpp: * UIProcess/API/C/WKApplicationCacheManager.cpp: (WKApplicationCacheManagerGetTypeID): (WKApplicationCacheManagerGetApplicationCacheOrigins): (WKApplicationCacheManagerDeleteEntriesForOrigin): (WKApplicationCacheManagerDeleteAllEntries): * UIProcess/API/C/WKAuthenticationDecisionListener.cpp: (WKAuthenticationDecisionListenerGetTypeID): (WKAuthenticationDecisionListenerUseCredential): (WKAuthenticationDecisionListenerCancel): (WKAuthenticationDecisionListenerRejectProtectionSpaceAndContinue): * UIProcess/API/C/WKBackForwardListItemRef.cpp: (WKBackForwardListItemGetTypeID): (WKBackForwardListItemCopyURL): (WKBackForwardListItemCopyTitle): (WKBackForwardListItemCopyOriginalURL): * UIProcess/API/C/WKContext.cpp: (WKContextGetTypeID): (WKContextCreate): (WKContextCreateWithInjectedBundlePath): (WKContextCreateWithConfiguration): (WKContextSetClient): (WKContextSetInjectedBundleClient): (WKContextSetHistoryClient): (WKContextSetDownloadClient): (WKContextSetConnectionClient): (WKContextDownloadURLRequest): (WKContextResumeDownload): (WKContextSetInitializationUserDataForInjectedBundle): (WKContextPostMessageToInjectedBundle): (WKContextGetGlobalStatistics): (WKContextAddVisitedLink): (WKContextClearVisitedLinks): (WKContextSetCacheModel): (WKContextGetCacheModel): (WKContextSetMaximumNumberOfProcesses): (WKContextGetMaximumNumberOfProcesses): (WKContextSetAlwaysUsesComplexTextCodePath): (WKContextSetShouldUseFontSmoothing): (WKContextSetAdditionalPluginsDirectory): (WKContextRefreshPlugIns): (WKContextRegisterURLSchemeAsEmptyDocument): (WKContextRegisterURLSchemeAsSecure): (WKContextRegisterURLSchemeAsBypassingContentSecurityPolicy): (WKContextRegisterURLSchemeAsCachePartitioned): (WKContextRegisterURLSchemeAsCanDisplayOnlyIfCanRequest): (WKContextSetDomainRelaxationForbiddenForURLScheme): (WKContextSetCanHandleHTTPSServerTrustEvaluation): (WKContextSetPrewarmsProcessesAutomatically): (WKContextSetCustomWebContentServiceBundleIdentifier): (WKContextSetDiskCacheSpeculativeValidationEnabled): (WKContextPreconnectToServer): (WKContextGetCookieManager): (WKContextGetWebsiteDataStore): (WKContextGetGeolocationManager): (WKContextGetMediaSessionFocusManager): (WKContextGetNotificationManager): (WKContextStartMemorySampler): (WKContextStopMemorySampler): (WKContextAllowSpecificHTTPSCertificateForHost): (WKContextDisableProcessTermination): (WKContextEnableProcessTermination): (WKContextSetHTTPPipeliningEnabled): (WKContextWarmInitialProcess): (WKContextGetStatistics): (WKContextGetStatisticsWithOptions): (WKContextJavaScriptConfigurationFileEnabled): (WKContextSetJavaScriptConfigurationFileEnabled): (WKContextGarbageCollectJavaScriptObjects): (WKContextSetJavaScriptGarbageCollectorTimerEnabled): (WKContextUseTestingNetworkSession): (WKContextSetAllowsAnySSLCertificateForWebSocketTesting): (WKContextSetAllowsAnySSLCertificateForServiceWorkerTesting): (WKContextClearCachedCredentials): (WKContextCopyPlugInAutoStartOriginHashes): (WKContextSetPlugInAutoStartOriginHashes): (WKContextSetPlugInAutoStartOriginsFilteringOutEntriesAddedAfterTime): (WKContextSetPlugInAutoStartOrigins): (WKContextSetInvalidMessageFunction): (WKContextSetMemoryCacheDisabled): (WKContextSetFontWhitelist): (WKContextTerminateNetworkProcess): (WKContextTerminateServiceWorkerProcess): (WKContextGetNetworkProcessIdentifier): (WKContextAddSupportedPlugin): (WKContextClearSupportedPlugins): (WKContextSetIDBPerOriginQuota): * UIProcess/API/C/WKPage.cpp: (WKPageLoadURLWithShouldOpenExternalURLsPolicy): (WKPageLoadURLWithUserData): (WKPageLoadURLRequestWithUserData): (WKPageSetPaginationMode): (WKPageGetPaginationMode): (WKPageSetPageLoaderClient): (WKPageSetPagePolicyClient): * UIProcess/API/C/cg/WKIconDatabaseCG.cpp: 2018-12-15 Darin Adler <darin@apple.com> Use warning-ignoring macros more consistently and simply https://bugs.webkit.org/show_bug.cgi?id=192743 Reviewed by Mark Lam. * UIProcess/ios/WKDrawingView.mm: (-[WKDrawingView initWithEmbeddedViewID:webPageProxy:]): Use ALLOW_DEPRECATED_DECLARATIONS_BEGIN/END. * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm: (-[WKFullScreenWindowController _EVOrganizationName]): Ditto. * WebProcess/WebCoreSupport/WebAlternativeTextClient.h: Use IGNORE_WARNINGS_BEGIN/END instead of IGNORE_CLANG_WARNINGS_BEGIN/END because there is no need to accomodate non-clang compilers here. Also use #pragma once, add a missing "explicit", and fix conditionals. 2018-12-15 Darin Adler <darin@apple.com> Replace many uses of String::format with more type-safe alternatives https://bugs.webkit.org/show_bug.cgi?id=192742 Reviewed by Mark Lam. * Shared/WebMemorySampler.cpp: (WebKit::WebMemorySampler::writeHeaders): Use makeString. * UIProcess/WebAuthentication/Cocoa/LocalAuthenticator.mm: (WebKit::LocalAuthenticator::makeCredential): Use string concatentation. * UIProcess/WebInspectorUtilities.cpp: (WebKit::inspectorPageGroupIdentifierForPage): Use makeString. * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::processDidFinishLaunching): Ditto. (WebKit::WebProcessPool::startMemorySampler): Ditto. 2018-12-14 Ryan Haddad <ryanhaddad@apple.com> Unreviewed, fix the build with recent SDKs. * UIProcess/ios/WKDrawingView.mm: (-[WKDrawingView initWithEmbeddedViewID:webPageProxy:]): 2018-12-14 Jiewen Tan <jiewen_tan@apple.com> [Mac] Layout Test http/wpt/webauthn/public-key-credential-create-success-hid.https.html and http/wpt/webauthn/public-key-credential-get-success-hid.https.html are flaky https://bugs.webkit.org/show_bug.cgi?id=192061 Reviewed by Dewei Zhu. Part 2. Add some additional temporary logging info. Since the failure cannot be reproduced easily by human, we have to rely on the test infrastructure to reporoduce it. Once the bug is determined and fixed, we should remove all logging added in this patch. * UIProcess/WebAuthentication/Cocoa/HidService.mm: (WebKit::HidService::deviceAdded): * UIProcess/WebAuthentication/fido/CtapHidAuthenticator.cpp: (WebKit::CtapHidAuthenticator::makeCredential): (WebKit::CtapHidAuthenticator::getAssertion): * UIProcess/WebAuthentication/fido/CtapHidDriver.cpp: (WebKit::CtapHidDriver::Worker::write): (WebKit::CtapHidDriver::Worker::read): (WebKit::CtapHidDriver::Worker::returnMessage): (WebKit::CtapHidDriver::transact): (WebKit::CtapHidDriver::continueAfterChannelAllocated): (WebKit::CtapHidDriver::continueAfterResponseReceived): 2018-12-14 Adrian Perez de Castro <aperez@igalia.com> [GTK] Unreviewed build fix. * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: Add missing WebPolicyAction.h include. 2018-12-14 Chris Dumez <cdumez@apple.com> Unreviewed, fix assertion failure in API test after r239210. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::createDocumentLoader): 2018-12-14 Adrian Perez de Castro <aperez@igalia.com> [SOUP] Unreviewed build fix after r239219 * NetworkProcess/soup/NetworkDataTaskSoup.cpp: (WebKit::NetworkDataTaskSoup::dispatchDidReceiveResponse): Remove handling of PolicyAction::Suspend, which is no longer available. 2018-12-14 Joseph Pecoraro <pecoraro@apple.com> Unreviewed, apply post-landing review comments after r239221. * UIProcess/WebPageDebuggable.cpp: (WebKit::WebPageDebuggable::url const): Switch to WTF::blankURL() instead of using "about:blank" directly. 2018-12-14 Chris Dumez <cdumez@apple.com> [PSON] Process-swapping on a loadHTMLString causes duplicate decidePolicyForNavigationAction delegate calls https://bugs.webkit.org/show_bug.cgi?id=192704 Reviewed by Geoffrey Garen. Process-swapping on a loadHTMLString causes duplicate decidePolicyForNavigationAction delegate calls. This is because we were failing to pass the ShouldTreatAsContinuingLoad flag to the WebContent process when doing a LoadData. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::loadData): (WebKit::WebPageProxy::loadDataWithNavigation): (WebKit::WebPageProxy::continueNavigationInNewProcess): * UIProcess/WebPageProxy.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::loadDataImpl): (WebKit::WebPage::loadData): (WebKit::WebPage::loadAlternateHTML): * WebProcess/WebPage/WebPage.h: 2018-12-14 Joseph Pecoraro <pecoraro@apple.com> Web Inspector: Prefer "about:blank" instead of an empty string for WebPageDebuggable url https://bugs.webkit.org/show_bug.cgi?id=192691 <rdar://problem/46719798> Reviewed by Darin Adler. * UIProcess/WebPageDebuggable.cpp: (WebKit::WebPageDebuggable::url const): Instead of an empty string, return "about:blank" in bail cases. When inspecting the page that matches the contents. 2018-12-14 Chris Dumez <cdumez@apple.com> [PSON] Stop exposing PolicyAction::Suspend to WebCore https://bugs.webkit.org/show_bug.cgi?id=192701 Reviewed by Brady Eidson. Introduce a new WebPolicyAction enum that is used at WebKit2 layer and augments WebCore::PolicyAction with a "Suspend" value. * NetworkProcess/NetworkDataTaskBlob.cpp: (WebKit::NetworkDataTaskBlob::dispatchDidReceiveResponse): * NetworkProcess/cocoa/NetworkSessionCocoa.mm: (toNSURLSessionResponseDisposition): * Shared/WebPolicyAction.h: Added. * UIProcess/WebFramePolicyListenerProxy.cpp: (WebKit::WebFramePolicyListenerProxy::didReceiveSafeBrowsingResults): (WebKit::WebFramePolicyListenerProxy::use): (WebKit::WebFramePolicyListenerProxy::download): (WebKit::WebFramePolicyListenerProxy::ignore): * UIProcess/WebFramePolicyListenerProxy.h: * UIProcess/WebFrameProxy.cpp: (WebKit::WebFrameProxy::setUpPolicyListenerProxy): * UIProcess/WebFrameProxy.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::receivedNavigationPolicyDecision): (WebKit::WebPageProxy::receivedPolicyDecision): (WebKit::WebPageProxy::decidePolicyForNavigationAction): (WebKit::WebPageProxy::decidePolicyForNavigationActionSync): (WebKit::WebPageProxy::decidePolicyForNewWindowAction): (WebKit::WebPageProxy::decidePolicyForResponse): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * WebKit.xcodeproj/project.pbxproj: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse): (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): * WebProcess/WebPage/WebFrame.cpp: (WebKit::toPolicyAction): (WebKit::WebFrame::didReceivePolicyDecision): * WebProcess/WebPage/WebFrame.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::didReceivePolicyDecision): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: 2018-12-14 David Quesada <david_quesada@apple.com> Remove a global 'using namespace WebKit' in WebViewImpl.mm https://bugs.webkit.org/show_bug.cgi?id=192690 Reviewed by Tim Horton. * UIProcess/Cocoa/WebViewImpl.mm: (-[WKTextListTouchBarViewController initWithWebViewImpl:]): (-[WKTextListTouchBarViewController _selectList:]): (-[WKTextListTouchBarViewController setCurrentListType:]): (-[WKTextTouchBarItemController initWithWebViewImpl:]): 2018-12-14 Chris Dumez <cdumez@apple.com> [PSON] WebsitePolicies are lost on process-swap https://bugs.webkit.org/show_bug.cgi?id=192694 <rdar://problem/46715748> Reviewed by Brady Eidson. In case of process-swap on navigation, instead of sending the websitePolicies to the old process, send them to the new process as we trigger the navigation. We tell the new process that it is continuing a load and it will therefore not re-trigger a decidePolicyForNavigationAction. * Shared/LoadParameters.cpp: (WebKit::LoadParameters::encode const): (WebKit::LoadParameters::decode): * Shared/LoadParameters.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::reattachToWebProcessForReload): (WebKit::WebPageProxy::reattachToWebProcessWithItem): (WebKit::WebPageProxy::loadRequestWithNavigation): (WebKit::WebPageProxy::loadDataWithNavigation): (WebKit::WebPageProxy::goToBackForwardItem): (WebKit::WebPageProxy::receivedNavigationPolicyDecision): (WebKit::WebPageProxy::continueNavigationInNewProcess): * UIProcess/WebPageProxy.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::loadRequest): (WebKit::WebPage::loadDataImpl): (WebKit::WebPage::loadData): (WebKit::WebPage::loadAlternateHTML): (WebKit::WebPage::goToBackForwardItem): (WebKit::WebPage::createDocumentLoader): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: 2018-12-14 Patrick Griffis <pgriffis@igalia.com> [GTK][WPE] Fix forwarding webkit socket to flatpak sandbox https://bugs.webkit.org/show_bug.cgi?id=192622 Reviewed by Michael Catanzaro. This fixes running with the sandbox enabled in Flatpak. * UIProcess/Launcher/glib/FlatpakLauncher.cpp: (WebKit::flatpakSpawn): * UIProcess/Launcher/glib/FlatpakLauncher.h: * UIProcess/Launcher/glib/ProcessLauncherGLib.cpp: (WebKit::ProcessLauncher::launchProcess): 2018-12-14 Carlos Garcia Campos <cgarcia@igalia.com> [WPE] Use new view state API from libwpe https://bugs.webkit.org/show_bug.cgi?id=191906 Reviewed by Žan Doberšek. Remove WKViewSetViewState from the C API. * UIProcess/API/C/wpe/WKAPICastWPE.h: * UIProcess/API/C/wpe/WKView.cpp: * UIProcess/API/C/wpe/WKView.h: * UIProcess/API/wpe/WPEView.cpp: (WKWPE::View::View): Add implementation for activity_state_changed vfunc of the view backend client.): (WKWPE::View::setViewState): Remove the default flags. * UIProcess/API/wpe/WPEView.h: (WKWPE::View::setViewState const): Make it private. 2018-12-13 Joseph Pecoraro <pecoraro@apple.com> [iOS] Web Inspector: Occasional UIProcess crashes under WebPageProxy::showInspectorIndication https://bugs.webkit.org/show_bug.cgi?id=192689 <rdar://problem/46323610> Reviewed by Simon Fraser. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::close): * UIProcess/WebPageProxy.h: Don't wait until ~WebPageProxy to destroy the WebPageProxyDebuggable which broadcasts it as a remote inspector target. Terminate this as soon as the WebPageProxy closes and becomes invalid. 2018-12-13 Chris Dumez <cdumez@apple.com> Unreviewed build fix for tvOS. * Platform/cocoa/WKCrashReporter.mm: 2018-12-13 Chris Dumez <cdumez@apple.com> Unreviewed build fix for tvOS. * Platform/cocoa/WKCrashReporter.mm: 2018-12-13 Chris Dumez <cdumez@apple.com> [PSON] We should not need to navigate to 'about:blank' to suspend pages https://bugs.webkit.org/show_bug.cgi?id=192668 <rdar://problem/46701466> Reviewed by Alex Christensen. To support PageCache when process-swap on cross-site navigation is enabled, we've been navigating the previous process to 'about:blank' when swapping. This would trigger PageCaching of the page in the old process. While convenient, this design has led to a lot of bugs because we did not really want a navigation to happen in the old process. To address the issue, when a WebPage is asked to suspend (for process-swap), we now attempt to add it to PageCache and save it on the current HistoryItem, *without* triggering any navigation. Any pending navigation gets cancelled and we just suspend in place. Later on, when we want to go back to this HistoryItem, we simply leverage the existing WebPage::goToBackForwardItem() code path. The only subtlety is that we're actually asking the WebPage to load a HistoryItem that is the current one in the History. I had to tweak a some logic / assertions to support this as this is not something we usually do. However, it actually works with very little changes and successfully restores the PageCache entry on the current HistoryItem. There is no expected overall behavior change and ProcessSwap API tests (which cover PageCache) still pass. This is merely a simpler design because it avoids navigating to about:blank. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::didSuspend): (WebKit::SuspendedPageProxy::didReceiveMessage): * UIProcess/SuspendedPageProxy.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didSuspendAfterProcessSwap): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse): * WebProcess/WebPage/WebDocumentLoader.cpp: (WebKit::WebDocumentLoader::setNavigationID): * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::didReceivePolicyDecision): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::suspendForProcessSwap): * WebProcess/WebPage/WebPage.h: * WebProcess/cocoa/WebProcessCocoa.mm: (WebKit::origin): 2018-12-13 Per Arne Vollan <pvollan@apple.com> [macOS] Remove with-report from 3 services that are currently needed on macOS https://bugs.webkit.org/show_bug.cgi?id=192593 <rdar://problem/46604752> Reviewed by Brent Fulgham. * WebProcess/com.apple.WebProcess.sb.in: 2018-12-13 Youenn Fablet <youenn@apple.com> On page close, WebPage::m_userMediaPermissionRequestManager is nullified too early https://bugs.webkit.org/show_bug.cgi?id=192657 Reviewed by Eric Carlson. Instead of nullifying the manager, make it a UniqueRef and clear it on closing the page. This ensures we revoke the sandbox extensions as early as possible and keep the manager lifetime simple. * WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp: (WebKit::UserMediaPermissionRequestManager::~UserMediaPermissionRequestManager): (WebKit::UserMediaPermissionRequestManager::clear): * WebProcess/MediaStream/UserMediaPermissionRequestManager.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::close): * WebProcess/WebPage/WebPage.h: (WebKit::WebPage::userMediaPermissionRequestManager): 2018-12-13 Chris Fleizach <cfleizach@apple.com> [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds https://bugs.webkit.org/show_bug.cgi?id=192449 <rdar://problem/46595508> Reviewed by Darin Adler. Part 6: Files in plugin process and UI process. * PluginProcess/PluginControllerProxy.cpp: * PluginProcess/PluginProcess.cpp: * PluginProcess/WebProcessConnection.cpp: * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm: * UIProcess/WebStorage/LocalStorageDatabase.cpp: * UIProcess/mac/WebPageProxyMac.mm: 2018-12-13 Eric Carlson <eric.carlson@apple.com> [MediaStream] Calculate width or height when constraints contain only the other https://bugs.webkit.org/show_bug.cgi?id=192632 <rdar://problem/46665734> Reviewed by Youenn Fablet. * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::SourceProxy::remoteVideoSampleAvailable): Deleted, replaced with videoSampleAvailable. * WebProcess/cocoa/UserMediaCaptureManager.cpp: (WebKit::UserMediaCaptureManager::Source::remoteVideoSampleAvailable): Use original frame size if necessary when calculating new frame size. 2018-12-12 Chris Fleizach <cfleizach@apple.com> [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds https://bugs.webkit.org/show_bug.cgi?id=192449 <rdar://problem/46595508> Reviewed by Darin Adler. Part 5: Files in WebProcess folder. * WebProcess/Cache/WebCacheStorageConnection.cpp: * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm: (mediaTimeToCurrentTime): (-[WKAnimationDelegate initWithLayerID:layerTreeHost:]): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectMac.mm: (-[WKAccessibilityWebPageObject accessibilityHitTest:]): 2018-12-12 Ross Kirsling <ross.kirsling@sony.com> [MSVC] Unreviewed build fix for r239080. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didFailToSuspendAfterProcessSwap): 2018-12-12 Chris Fleizach <cfleizach@apple.com> [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds https://bugs.webkit.org/show_bug.cgi?id=192449 <rdar://problem/46595508> Reviewed by Darin Adler. Part 4: Handling NetworkProcess folder. * NetworkProcess/Cookies/mac/WebCookieManagerMac.mm: * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp: * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp: * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp: * NetworkProcess/ios/NetworkProcessIOS.mm: * NetworkProcess/mac/NetworkProcessMac.mm: * NetworkProcess/mac/RemoteNetworkingContext.mm: 2018-12-12 Chris Fleizach <cfleizach@apple.com> [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds https://bugs.webkit.org/show_bug.cgi?id=192449 <rdar://problem/46595508> Reviewed by Tim Horton. Fix iosmac build. * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView _hoverGestureRecognizerChanged:]): 2018-12-12 Alex Christensen <achristensen@webkit.org> Implement safe browsing in WebKit on WatchOS https://bugs.webkit.org/show_bug.cgi?id=192641 <rdar://problem/46376188> Reviewed by Geoff Garen. WatchOS has a few special requirements: 1. The margin size needs to be smaller and the title font smaller to fit on the screen. 2. The exclamation point cannot be beside the title or it won't fit on the screen. I put it above the title. 3. The application must be told when the safe browsing warning has been shown. I added a new delegate callback. 4. The UIScrollView's contentSize must be set even before the details are shown to be able to scroll down to the buttons. This was already an issue on small WKWebViews on iOS, so this fixes both operating systems. * Configurations/WebKit.xcconfig: * UIProcess/API/APIUIClient.h: (API::UIClient::didShowSafeBrowsingWarning): * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: * UIProcess/Cocoa/UIDelegate.h: * UIProcess/Cocoa/UIDelegate.mm: (WebKit::UIDelegate::setDelegate): (WebKit::UIDelegate::UIClient::didShowSafeBrowsingWarning): * UIProcess/Cocoa/WKSafeBrowsingWarning.mm: (fontOfSize): (buttonSize): (-[WKSafeBrowsingWarning addContent]): (-[WKSafeBrowsingWarning showDetailsClicked]): (-[WKSafeBrowsingWarning updateContentSize]): (buttonWidth): Deleted. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::decidePolicyForNavigationAction): 2018-12-12 Commit Queue <commit-queue@webkit.org> Unreviewed, rolling out r239129 and r239131. https://bugs.webkit.org/show_bug.cgi?id=192646 Casued macOS and iOS Debug testing to fail early (Requested by Truitt on #webkit). Reverted changesets: "Unreviewed build fix for WinCairo Debug after r239080(?)." https://trac.webkit.org/changeset/239129 "Unreviewed fix for Cocoa Debug test instability following r239129." https://trac.webkit.org/changeset/239131 2018-12-12 Vivek Seth <v_seth@apple.com> HTTPS Upgrade: Figure out if/how to tell clients that the HTTPS upgrade happened https://bugs.webkit.org/show_bug.cgi?id=192375 <rdar://problem/45851159> Reviewed by Chris Dumez. Use simulated redirect to tell clients that HTTPS Upgrade happened. * NetworkProcess/NetworkLoadChecker.cpp: (WebKit::NetworkLoadChecker::NetworkLoadChecker): (WebKit::NetworkLoadChecker::checkRedirection): (WebKit::NetworkLoadChecker::accessControlErrorForValidationHandler): (WebKit::NetworkLoadChecker::applyHTTPSUpgradeIfNeeded const): (WebKit::NetworkLoadChecker::checkRequest): (WebKit::NetworkLoadChecker::continueCheckingRequestOrDoSyntheticRedirect): (WebKit::NetworkLoadChecker::checkCORSRequestWithPreflight): (WebKit::NetworkLoadChecker::applyHTTPSUpgradeIfNeeded): Deleted. * NetworkProcess/NetworkLoadChecker.h: * NetworkProcess/NetworkResourceLoader.cpp: (WebKit::NetworkResourceLoader::start): * NetworkProcess/PingLoad.cpp: 2018-12-12 Ross Kirsling <ross.kirsling@sony.com> Unreviewed fix for Cocoa Debug test instability following r239129. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didFailToSuspendAfterProcessSwap): Deleted. * UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::didFailToSuspendAfterProcessSwap): Move the whole assertion to the declaration site. 2018-12-12 Chris Dumez <cdumez@apple.com> Add a preference to enable / disable devicemotion and deviceorientation events https://bugs.webkit.org/show_bug.cgi?id=192631 <rdar://problem/46646244> Reviewed by Geoffrey Garen. Add setting to toggle support for the deviceorientation / devicemotion events: - https://w3c.github.io/deviceorientation/ * Shared/WebPreferences.yaml: * UIProcess/API/Cocoa/WKPreferences.mm: (-[WKPreferences _setDeviceOrientationEventEnabled:]): (-[WKPreferences _deviceOrientationEventEnabled]): * UIProcess/API/Cocoa/WKPreferencesPrivate.h: 2018-12-12 Ross Kirsling <ross.kirsling@sony.com> Unreviewed build fix for WinCairo Debug after r239080(?). MSVC gives a redefinition error if noreturn is specified on the definition instead of the declaration. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didFailToSuspendAfterProcessSwap): * UIProcess/WebPageProxy.h: Move NO_RETURN_DUE_TO_ASSERT to the declaration site. 2018-12-12 Chris Fleizach <cfleizach@apple.com> [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds https://bugs.webkit.org/show_bug.cgi?id=192449 <rdar://problem/46595508> Reviewed by Darin Adler. Part 2: UIProcess/Cocoa and UIProcess/ios folders. * UIProcess/Cocoa/WebViewImpl.h: * UIProcess/Cocoa/WebViewImpl.mm: * UIProcess/ios/WKContentView.mm: (-[WKContentView _commonInitializationWithProcessPool:configuration:]): (-[WKContentView initWithFrame:processPool:configuration:webView:]): (-[WKContentView dealloc]): (-[WKContentView page]): (-[WKContentView updateFixedClippingView:]): (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInsets:unobscuredSafeAreaInsets:inputViewBounds:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]): (-[WKContentView _updateForScreen:]): (-[WKContentView _accessibilityRegisterUIProcessTokens]): (-[WKContentView _createDrawingAreaProxy]): (-[WKContentView _didCommitLayerTree:]): (-[WKContentView _wk_pageCountForPrintFormatter:]): * UIProcess/ios/WKContentViewInteraction.mm: (-[WKFocusedElementInfo initWithAssistedNodeInformation:isUserInitiated:userObject:]): (hasAssistedNode): (-[WKContentView setupInteraction]): (-[WKContentView positionInformation]): (-[WKContentView _webTouchEventsRecognized:]): (inflateQuad): (-[WKContentView _updateTapHighlight]): (-[WKContentView _showTapHighlight]): (-[WKContentView _requiresKeyboardWhenFirstResponder]): (-[WKContentView _displayFormNodeInputView]): (-[WKContentView inputView]): (-[WKContentView _actionForLongPressFromPositionInformation:]): (-[WKContentView currentPositionInformation]): (-[WKContentView doAfterPositionInformationUpdate:forRequest:]): (-[WKContentView _currentPositionInformationIsValidForRequest:]): (-[WKContentView _hasValidOutstandingPositionInformationRequest:]): (-[WKContentView _currentPositionInformationIsApproximatelyValidForRequest:]): (-[WKContentView gestureRecognizerShouldBegin:]): (-[WKContentView hasSelectablePositionAtPoint:]): (-[WKContentView pointIsNearMarkedText:]): (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]): (-[WKContentView webSelectionRectsForSelectionRects:]): (-[WKContentView _twoFingerSingleTapGestureRecognized:]): (-[WKContentView _stylusSingleTapRecognized:]): (-[WKContentView _singleTapCommited:]): (-[WKContentView _attemptClickAtLocation:]): (-[WKContentView _positionInformationDidChange:]): (-[WKContentView requiresAccessoryView]): (-[WKContentView supportedPasteboardTypesForCurrentSelection]): (-[WKContentView _lookupForWebView:]): (-[WKContentView _shareForWebView:]): (-[WKContentView textStylingAtPosition:inDirection:]): (-[WKContentView canPerformActionForWebView:withSender:]): (-[WKContentView selectForWebView:]): (-[WKContentView _accessibilityRetrieveRectsEnclosingSelectionOffset:withGranularity:]): (-[WKContentView _accessibilityRetrieveRectsAtSelectionOffset:withText:completionHandler:]): (toGestureType): (toUIWKGestureType): (toSelectionTouch): (toUIWKSelectionTouch): (toGestureRecognizerState): (toUIGestureRecognizerState): (toUIWKSelectionFlags): (toWKTextGranularity): (toWKSelectionDirection): (selectionChangedWithGesture): (selectionChangedWithTouch): (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:withFlags:]): (-[WKContentView autocorrectionData]): (-[WKContentView requestAutocorrectionRectsForString:withCompletionHandler:]): (-[WKContentView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]): (-[WKContentView _updateAccessory]): (-[WKContentView selectedTextRange]): (-[WKContentView setMarkedText:selectedRange:]): (coreWritingDirection): (-[WKContentView closestPositionToPoint:]): (-[WKContentView insertText:]): (-[WKContentView textInputTraits]): (-[WKContentView handleKeyWebEvent:]): (-[WKContentView handleKeyWebEvent:withCompletionHandler:]): (-[WKContentView isScrollableForKeyboardScrollViewAnimator:]): (-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:]): (-[WKContentView assistedNodeInformation]): (-[WKContentView assistedNodeSelectOptions]): (isAssistableInputType): (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]): (-[WKContentView _stopAssistingNode]): (-[WKContentView updateCurrentAssistedNodeInformation:]): (-[WKContentView presentViewControllerForCurrentAssistedNode]): (-[WKContentView actionNameForFocusedFormControlView:]): (-[WKContentView selectWordForReplacement]): (-[WKContentView _updateChangedSelection:]): (-[WKContentView _beginSuppressingSelectionAssistantForReason:]): (-[WKContentView _stopSuppressingSelectionAssistantForReason:]): (-[WKContentView _showPlaybackTargetPicker:fromRect:routeSharingPolicy:routingContextUID:]): (-[WKContentView _showRunOpenPanel:resultListener:]): (-[WKContentView _showShareSheet:completionHandler:]): (-[WKContentView positionInformationForActionSheetAssistant:]): (-[WKContentView updatePositionInformationForActionSheetAssistant:]): (-[WKContentView _startDrag:item:]): (-[WKContentView _didHandleAdditionalDragItemsRequest:]): (-[WKContentView _didHandleStartDataInteractionRequest:]): (dropOperationForWebCoreDragOperation): (-[WKContentView dragDataForDropSession:dragDestinationAction:]): (-[WKContentView _didConcludeEditDataInteraction:]): (-[WKContentView _didPerformDragOperation:]): (-[WKContentView _prepareToDragPromisedAttachment:]): (-[WKContentView _itemsForBeginningOrAddingToSessionWithRegistrationList:stagedDragSource:]): (-[WKContentView _autofillContext]): (-[WKContentView _dragInteraction:itemsForAddingToSession:withTouchAtPoint:completion:]): (-[WKContentView _dragInteraction:prepareForSession:completion:]): (-[WKContentView dragInteraction:itemsForBeginningSession:]): (-[WKContentView dragInteraction:willAnimateLiftWithAnimator:session:]): (-[WKContentView dragInteraction:session:didEndWithOperation:]): (-[WKContentView dragInteraction:item:willAnimateCancelWithAnimator:]): (-[WKContentView dropInteraction:performDrop:]): (-[WKContentView dropInteraction:sessionDidEnd:]): (-[WKContentView allowsLanguageSelectionMenuForListViewController:]): (-[WKContentView shouldDisplayInputContextViewForListViewController:]): (-[WKContentView numericInputModeForListViewController:]): (-[WKContentView textContentTypeForListViewController:]): (-[WKContentView allowsDictationInputForListViewController:]): (-[WKContentView _simulateLongPressActionAtLocation:]): (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]): (-[WKContentView _presentationRectsForPreviewItemController:]): * UIProcess/ios/fullscreen/WKFullScreenViewController.mm: (WKFullScreenViewControllerPlaybackSessionModelClient::setInterface): (WKFullScreenViewControllerVideoFullscreenModelClient::setInterface): (WKFullScreenViewControllerVideoFullscreenModelClient::interface const): (-[WKFullScreenViewController videoControlsManagerDidChange]): (-[WKFullScreenViewController _manager]): (-[WKFullScreenViewController _togglePiPAction:]): * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm: (-[WKFullscreenAnimationController configureInitialAndFinalStatesForTransition:]): (-[WKFullScreenWindowController isFullScreen]): (-[WKFullScreenWindowController enterFullScreen]): (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]): (-[WKFullScreenWindowController exitFullScreen]): (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]): (-[WKFullScreenWindowController _completedExitFullScreen]): (-[WKFullScreenWindowController webViewDidRemoveFromSuperviewWhileInFullscreen]): (-[WKFullScreenWindowController _exitFullscreenImmediately]): (-[WKFullScreenWindowController _manager]): 2018-12-12 Chris Fleizach <cfleizach@apple.com> [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds https://bugs.webkit.org/show_bug.cgi?id=192449 <rdar://problem/46595508> Reviewed by Darin Adler. Part 1: Files in Shared folder. * Shared/API/c/WKRenderLayer.cpp: (WKRenderLayerGetFrameContentsLayer): * Shared/API/c/cf/WKErrorCF.cpp: (WKErrorCreateWithCFError): (WKErrorCopyCFError): * Shared/API/c/cg/WKImageCG.cpp: (WKImageCreateCGImage): (WKImageCreateFromCGImage): * Shared/API/c/mac/WKWebArchive.cpp: (WKWebArchiveGetTypeID): (WKWebArchiveCreate): (WKWebArchiveCreateWithData): (WKWebArchiveCreateFromRange): (WKWebArchiveCopyMainResource): (WKWebArchiveCopySubresources): (WKWebArchiveCopySubframeArchives): (WKWebArchiveCopyData): * Shared/API/c/mac/WKWebArchiveResource.cpp: (WKWebArchiveResourceGetTypeID): (WKWebArchiveResourceCreate): (WKWebArchiveResourceCopyData): (WKWebArchiveResourceCopyURL): (WKWebArchiveResourceCopyMIMEType): (WKWebArchiveResourceCopyTextEncoding): * Shared/ChildProcess.cpp: * Shared/ContextMenuContextData.cpp: * Shared/EditorState.cpp: * Shared/Plugins/NPIdentifierData.cpp: * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm: * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp: * Shared/SessionState.cpp: * Shared/SessionTracker.cpp: * Shared/ShareableBitmap.cpp: * Shared/ShareableResource.cpp: * Shared/VisibleContentRectUpdateInfo.cpp: * Shared/WebBackForwardListItem.cpp: * Shared/WebContextMenuItemData.cpp: * Shared/WebCoreArgumentCoders.cpp: * Shared/WebHitTestResultData.cpp: * Shared/WebImage.cpp: * Shared/WebMediaSessionMetadata.cpp: * Shared/WebMemorySampler.cpp: * Shared/WebMouseEvent.cpp: * Shared/WebRenderObject.cpp: * Shared/WebSQLiteDatabaseTracker.cpp: * Shared/WebWheelEvent.cpp: * Shared/cf/ArgumentCodersCF.cpp: * Shared/ios/WebPlatformTouchPointIOS.cpp: 2018-12-12 Chris Fleizach <cfleizach@apple.com> [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds https://bugs.webkit.org/show_bug.cgi?id=192449 <rdar://problem/46595508> Reviewed by Darin Adler. Part 1: Files in NetworkProcess. * NetworkProcess/Cookies/mac/WebCookieManagerMac.mm: * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp: * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp: * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp: * NetworkProcess/ios/NetworkProcessIOS.mm: * NetworkProcess/mac/NetworkProcessMac.mm: * NetworkProcess/mac/RemoteNetworkingContext.mm: 2018-12-12 Chris Dumez <cdumez@apple.com> Unreviewed build with with recent macOS SDKs. * Platform/cocoa/WKCrashReporter.mm: 2018-12-12 Chris Dumez <cdumez@apple.com> Unreviewed attempt to fix GTK build after r239104. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::performDragControllerAction): 2018-12-12 Chris Dumez <cdumez@apple.com> Unreviewed attempt to fix build with older SDKs after r239110. * Platform/cocoa/WKCrashReporter.mm: 2018-12-12 Chris Dumez <cdumez@apple.com> Unreviewed, fix build with recent SDKs. * Platform/cocoa/WKCrashReporter.mm: 2018-12-09 Darin Adler <darin@apple.com> [iOS] Zero memory containing the password for PDF documents when a WKPDFView is deallocated https://bugs.webkit.org/show_bug.cgi?id=192536 rdar://problem/41174451 Reviewed by Tim Horton. * UIProcess/ios/WKPDFView.mm: Took out PLATFORM(IOSMAC) since this class is not compiled on that platform at this time. Can always add it back later. (-[WKPDFView dealloc]): Zero out characters of _passwordForPrinting. (-[WKPDFView pdfHostViewController:documentDidUnlockWithPassword:]): Initialize _passwordForPrinting; use a CString instead of retaining an NSString since we can zero that out easily. (-[WKPDFView _ensureDocumentForPrinting]): Use _passwordForPrinting. 2018-12-12 Commit Queue <commit-queue@webkit.org> Unreviewed, rolling out r239103. https://bugs.webkit.org/show_bug.cgi?id=192627 It broke the built because it depends on another patch that didn't land yet (Requested by KaL on #webkit). Reverted changeset: "[WPE] Add API to notify about frame displayed view backend callback" https://bugs.webkit.org/show_bug.cgi?id=192224 https://trac.webkit.org/changeset/239103 2018-12-12 Chris Dumez <cdumez@apple.com> Restore MESSAGE_CHECK_URL() security check on sourceURL in didPerformClientRedirect() https://bugs.webkit.org/show_bug.cgi?id=191982 <rdar://problem/46258054> Reviewed by Alex Christensen. Have the WebPageProxy remember the local paths it previously visited so that the MESSAGE_CHECK_URL() checks still work when process-swap on navigation is enabled. Add back MESSAGE_CHECK_URL() on sourceURL in didPerformClientRedirect(). * UIProcess/Cocoa/WebPageProxyCocoa.mm: (WebKit::WebPageProxy::createSandboxExtensionsIfNeeded): * UIProcess/RemoteWebInspectorProxy.cpp: (WebKit::RemoteWebInspectorProxy::createFrontendPageAndWindow): * UIProcess/WebInspectorProxy.cpp: (WebKit::WebInspectorProxy::createFrontendPage): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::loadRequestWithNavigation): (WebKit::WebPageProxy::loadFile): (WebKit::WebPageProxy::loadDataWithNavigation): (WebKit::WebPageProxy::loadAlternateHTML): (WebKit::WebPageProxy::reload): (WebKit::WebPageProxy::didPerformClientRedirect): (WebKit::WebPageProxy::backForwardGoToItem): (WebKit::WebPageProxy::checkURLReceivedFromCurrentOrPreviousWebProcess): (WebKit::WebPageProxy::addPreviouslyVisitedPath): (WebKit::WebPageProxy::willAcquireUniversalFileReadSandboxExtension): * UIProcess/WebPageProxy.h: * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::assumeReadAccessToBaseURL): * UIProcess/WebProcessProxy.h: * UIProcess/mac/WebPageProxyMac.mm: 2018-11-30 Carlos Garcia Campos <cgarcia@igalia.com> [WPE] Add API to notify about frame displayed view backend callback https://bugs.webkit.org/show_bug.cgi?id=192224 Reviewed by Michael Catanzaro. Add API to add a callback to the view to be called when the view backend notifies that a frame has been displayed. * UIProcess/API/glib/WebKitWebView.cpp: (FrameDisplayedCallback::FrameDisplayedCallback): (FrameDisplayedCallback::~FrameDisplayedCallback): (webkit_web_view_add_frame_displayed_callback): (webkit_web_view_remove_frame_displayed_callback): * UIProcess/API/wpe/WebKitWebView.h: 2018-12-11 Justin Michaud <justin_michaud@apple.com> Implement feature flag for CSS Typed OM https://bugs.webkit.org/show_bug.cgi?id=192610 Reviewed by Ryosuke Niwa. * Configurations/FeatureDefines.xcconfig: * Shared/WebPreferences.yaml: * WebProcess/InjectedBundle/InjectedBundle.cpp: (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner): 2018-12-11 Fujii Hironori <Hironori.Fujii@sony.com> [Win][Clang] Fix warning -Wmissing-field-initializers https://bugs.webkit.org/show_bug.cgi?id=192584 Reviewed by Yusuke Suzuki. Initialize a struct with '{ }' instead of '= {0}'. * UIProcess/Launcher/win/ProcessLauncherWin.cpp: (WebKit::ProcessLauncher::launchProcess): * UIProcess/win/WebPopupMenuProxyWin.cpp: (WebKit::WebPopupMenuProxyWin::showPopupMenu): * UIProcess/win/WebView.cpp: (WebKit::WebView::initializeToolTipWindow): (WebKit::WebView::setToolTip): 2018-12-11 Chris Dumez <cdumez@apple.com> PSON logic gets confused by concurrent decidePolicyForNavigationAction requests https://bugs.webkit.org/show_bug.cgi?id=192482 <rdar://problem/46470145> Reviewed by Antti Koivisto. It is possible to get 2 parallel decidePolicyForNavigationAction() requests from the WebProcess when a new load is started before responding to the existing policy decision. This would lead to several issues with regards to PSON: - We would decide to swap for the first policy decision and tell the WebProcess to suspend. However, because the WebProcess issued a new decidePolicyForNavigationAction since for the same frame, the previous one is invalidated and the WebProcess would ignore our request to suspend. - We would hit assertions later on because the navigation has been destroyed and yet we're getting a didStartProvisionalLoad for it. - swapToWebProcess() was asynchronous so that it would wait for the destination SuspendedPage to finish suspending before asking it to unsuspend. This led to various problems because anything can happen in the UIProcess while we're waiting for the suspension (e.g. another load). Also, we may create the SuspendedPageProxy for the current page too late and start getting IPC from the previous process about the suspension load to about:blank. To address these issues, the following design is now implemented: - swapToWebProcess() is no longer asynchronous - instead, WebProcessPool::processForNavigation() is now asynchronous. This is better because at this point we have not yet told the WebProcess about the policy decision. We already properly deal with the policy decision being made asynchronously. This also allows us to choose another process if the SuspendedPage we'd like to use failed to suspend. - If the WebProcess receives a PolicyAction::Suspend but ignores it, have it send an IPC to the UIProcess so that the SuspendedPageProxy knows about it. We then destroy the SuspendedPageProxy and make sure it is not used. - After the asynchronous process selection, if the navigation has been destroy, abort the process-swap to avoid hitting assertions later on due to doing a load for a destroyed navigation. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::~SuspendedPageProxy): Make sure m_whenReadyToConsume completion handler gets called if necessary if the SuspendedPageProxy gets destroyed. We pass null so that the SuspendedPage is not used. (WebKit::SuspendedPageProxy::whenReadyToConsume): Add whenReadyToConsume() utility method to get a completion handler called when the SuspendedPageProxy is ready to be used. This basically means we have to wait for the page to finish its about:blank suspension load. If the suspension fails then we call the completion handler with null to indicate that the suspended page is not usable. (WebKit::SuspendedPageProxy::unsuspendAndConsume): Rename unsuspend() to unsuspendAndConsume() and make it synchronous. This only gets called after whenReadyToConsume()'s completion handler has been called and if we do decide to use the SuspendedPageProxy. It tells the WebProcess to unsuspend and removes the SuspendedPageProxy from the WebProcessPool. (WebKit::SuspendedPageProxy::didFinishLoad): rename m_finishedSuspendingHandler to m_whenReadyToConsume. (WebKit::SuspendedPageProxy::didFailToSuspend): Add new didFailToSuspend() that gets called when the WebProcess sends us an IPC telling us it ignored our request to suspend. We then call m_whenReadyToConsume completion handler with null and destroy the SuspendedPageProxy. (WebKit::SuspendedPageProxy::didReceiveMessage): * UIProcess/SuspendedPageProxy.h: * UIProcess/WebNavigationState.h: (WebKit::WebNavigationState::hasNavigation const): Add utility function to query if a navigation is still valid. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::swapToWebProcess): Update method so that it is no longer asynchronous. Some of its code was also moved to continueNavigationInNewProcess() for clarity. (WebKit::WebPageProxy::receivedNavigationPolicyDecision): Deal with WebProcessPool::processForNavigation() now being asynchronous. (WebKit::WebPageProxy::continueNavigationInNewProcess): Update code now that swapToWebProcess() is no longer asynchronous. Some of the swapToWebProcess() code was also moved here for clarity. (WebKit::WebPageProxy::didFailToSuspendAfterProcessSwap): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: Add new DidFailToSuspendAfterProcessSwap IPC message. * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::processForNavigation): (WebKit::WebProcessPool::processForNavigationInternal): * UIProcess/WebProcessPool.h: Make asynchronous. If we decide to use a SuspendedPageProxy's process, then call whenReadyToConsume() on it to wait for it to suspend. If the SuspendedPageProxy fails to suspend use a new process instead. * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::didReceivePolicyDecision): If we ignore the policy decision and the decision was "Suspend", send the DidFailToSuspendAfterProcessSwap IPC to the UIProcess so that the SuspendedPageProxy knows about it. 2018-12-11 Andy Estes <aestes@apple.com> Introduce makeBlockPtr for lambdas https://bugs.webkit.org/show_bug.cgi?id=192594 Reviewed by Alex Christensen. Adopted makeBlockPtr. * NetworkProcess/Downloads/cocoa/WKDownloadProgress.mm: (-[WKDownloadProgress initWithDownloadTask:download:URL:sandboxExtension:]): * NetworkProcess/cache/NetworkCacheIOChannelCocoa.mm: (WebKit::NetworkCache::IOChannel::read): (WebKit::NetworkCache::IOChannel::write): * NetworkProcess/cocoa/NetworkProcessCocoa.mm: (WebKit::NetworkProcess::clearDiskCache): (WebKit::saveCookies): * NetworkProcess/watchos/NetworkProximityAssertion.mm: (WebKit::BluetoothProximityAssertion::suspend): * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _setInputDelegate:]): * UIProcess/API/mac/WKView.mm: (-[WKView maybeInstallIconLoadingClient]): * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm: (WebKit::WebPaymentCoordinatorProxy::platformCanMakePaymentsWithActiveCard): (WebKit::WebPaymentCoordinatorProxy::platformOpenPaymentSetup): * UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm: (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI): * UIProcess/Cocoa/AutomationSessionClient.mm: (WebKit::AutomationSessionClient::requestNewPageWithOptions): (WebKit::AutomationSessionClient::requestSwitchToPage): (WebKit::AutomationSessionClient::requestHideWindowOfPage): (WebKit::AutomationSessionClient::requestRestoreWindowOfPage): (WebKit::AutomationSessionClient::requestMaximizeWindowOfPage): * UIProcess/Cocoa/DownloadClient.mm: (WebKit::DownloadClient::didReceiveAuthenticationChallenge): (WebKit::DownloadClient::decideDestinationWithSuggestedFilename): * UIProcess/Cocoa/IconLoadingDelegate.mm: (WebKit::IconLoadingDelegate::IconLoadingClient::getLoadDecisionForIcon): * UIProcess/Cocoa/NavigationState.mm: (WebKit::NavigationState::NavigationClient::decidePolicyForPluginLoad): (WebKit::NavigationState::NavigationClient::webGLLoadPolicy const): (WebKit::NavigationState::NavigationClient::resolveWebGLLoadPolicy const): (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction): (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationResponse): (WebKit::NavigationState::NavigationClient::didReceiveAuthenticationChallenge): * UIProcess/Cocoa/UIDelegate.mm: (WebKit::UIDelegate::ContextMenuClient::menuFromProposedMenu): (WebKit::UIDelegate::UIClient::createNewPage): (WebKit::UIDelegate::UIClient::runJavaScriptAlert): (WebKit::UIDelegate::UIClient::runJavaScriptConfirm): (WebKit::UIDelegate::UIClient::runJavaScriptPrompt): (WebKit::UIDelegate::UIClient::requestStorageAccessConfirm): (WebKit::UIDelegate::UIClient::decidePolicyForGeolocationPermissionRequest): (WebKit::UIDelegate::UIClient::runBeforeUnloadConfirmPanel): (WebKit::UIDelegate::UIClient::exceededDatabaseQuota): (WebKit::UIDelegate::UIClient::windowFrame): (WebKit::UIDelegate::UIClient::toolbarsAreVisible): (WebKit::UIDelegate::UIClient::decidePolicyForNotificationPermissionRequest): (WebKit::UIDelegate::UIClient::runOpenPanel): (WebKit::requestUserMediaAuthorizationForDevices): (WebKit::UIDelegate::UIClient::decidePolicyForUserMediaPermissionRequest): (WebKit::UIDelegate::UIClient::checkUserMediaPermissionForOrigin): (WebKit::UIDelegate::UIClient::reachedApplicationCacheOriginQuota): (WebKit::UIDelegate::UIClient::requestPointerLock): * UIProcess/Cocoa/WKSafeBrowsingWarning.mm: (-[WKSafeBrowsingWarning clickedOnLink:]): * UIProcess/Cocoa/WebPageProxyCocoa.mm: (WebKit::WebPageProxy::beginSafeBrowsingCheck): * UIProcess/WebAuthentication/Cocoa/HidConnection.mm: (WebKit::HidConnection::send): * UIProcess/WebAuthentication/Cocoa/LocalConnection.mm: (WebKit::LocalConnection::getUserConsent const): (WebKit::LocalConnection::getAttestation const): * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp: (WebKit::MockHidConnection::send): * UIProcess/ios/PageClientImplIOS.mm: (WebKit::PageClientImpl::requestPasswordForQuickLookDocument): * UIProcess/ios/WKGeolocationProviderIOS.mm: (-[WKGeolocationProviderIOS geolocationAuthorizationGranted]): * UIProcess/mac/ServicesController.mm: (WebKit::hasCompatibleServicesForItems): (WebKit::ServicesController::refreshExistingServices): * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: (PageLoaderClient::didStartProvisionalLoadForFrame): 2018-12-11 Alex Christensen <achristensen@webkit.org> Fix an internal build failure after r239014 https://bugs.webkit.org/show_bug.cgi?id=192205 * UIProcess/Cocoa/WKSafeBrowsingWarning.mm: (fontOfSize): There's a system that doesn't have safe browsing or UIFontTextStyleLargeTitle. 2018-12-11 Brian Burg <bburg@apple.com> SimulatedInputDispatcher::transitionInputSourceToState() can reuse a moved-from completion handler https://bugs.webkit.org/show_bug.cgi?id=191155 <rdar://problem/45745569> Reviewed by Joseph Pecoraro. * UIProcess/Automation/SimulatedInputDispatcher.cpp: (WebKit::SimulatedInputDispatcher::transitionInputSourceToState): Add an ASSERT to guard against unexpected inputs where >1 VirtualKey changes per state. webkitdriver needs to be updated to not produce such states in this scenario, but this will avoid a runtime crash caused by trying to call a moved-out completion handler a second time. 2018-12-11 Commit Queue <commit-queue@webkit.org> Unreviewed, rolling out r239071. https://bugs.webkit.org/show_bug.cgi?id=192588 Broke WPE build due to undefined references to toAPI() and toImpl() inside the C API (Requested by magomez on #webkit). Reverted changeset: "[meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds" https://bugs.webkit.org/show_bug.cgi?id=192449 https://trac.webkit.org/changeset/239071 2018-12-10 Chris Fleizach <cfleizach@apple.com> [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds https://bugs.webkit.org/show_bug.cgi?id=192449 Reviewed by Darin Adler. * NetworkProcess/Cookies/mac/WebCookieManagerMac.mm: * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp: * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp: * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp: * NetworkProcess/ios/NetworkProcessIOS.mm: * NetworkProcess/mac/NetworkProcessMac.mm: * NetworkProcess/mac/RemoteNetworkingContext.mm: * Platform/spi/ios/AccessibilitySupportSPI.h: * PlatformMac.cmake: * PluginProcess/PluginControllerProxy.cpp: * PluginProcess/PluginProcess.cpp: * PluginProcess/WebProcessConnection.cpp: * Scripts/PreferencesTemplates/WebPreferencesStoreDefaultsMap.cpp.erb: * Shared/API/c/cf/WKErrorCF.cpp: (WKErrorCreateWithCFError): (WKErrorCopyCFError): * Shared/API/c/cg/WKImageCG.cpp: (WKImageCreateCGImage): (WKImageCreateFromCGImage): * Shared/ChildProcess.cpp: * Shared/ContextMenuContextData.cpp: * Shared/EditorState.cpp: * Shared/Plugins/NPIdentifierData.cpp: * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm: * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp: * Shared/SessionState.cpp: * Shared/SessionTracker.cpp: * Shared/ShareableBitmap.cpp: * Shared/ShareableResource.cpp: * Shared/VisibleContentRectUpdateInfo.cpp: * Shared/WebBackForwardListItem.cpp: * Shared/WebContextMenuItemData.cpp: * Shared/WebCoreArgumentCoders.cpp: * Shared/WebHitTestResultData.cpp: * Shared/WebImage.cpp: * Shared/WebMediaSessionMetadata.cpp: * Shared/WebMemorySampler.cpp: * Shared/WebMouseEvent.cpp: * Shared/WebRenderObject.cpp: * Shared/WebSQLiteDatabaseTracker.cpp: * Shared/WebWheelEvent.cpp: * Shared/cf/ArgumentCodersCF.cpp: * Shared/ios/WebPlatformTouchPointIOS.cpp: * SourcesCocoa.txt: * UIProcess/API/APIContentRuleListStore.cpp: * UIProcess/API/APIHitTestResult.cpp: * UIProcess/API/APINavigation.cpp: * UIProcess/API/APIOpenPanelParameters.cpp: * UIProcess/API/APIPageConfiguration.cpp: * UIProcess/API/C/WKPage.cpp: (WKPageLoadURLWithShouldOpenExternalURLsPolicy): (WKPageLoadURLWithUserData): (WKPageLoadURLRequestWithUserData): (WKPageSetPaginationMode): (WKPageGetPaginationMode): (WKPageSetPageLoaderClient): (WKPageSetPagePolicyClient): * UIProcess/API/C/cg/WKIconDatabaseCG.cpp: * UIProcess/Cocoa/WebViewImpl.h: * UIProcess/Cocoa/WebViewImpl.mm: * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm: * UIProcess/WebStorage/LocalStorageDatabase.cpp: * UIProcess/ios/WKContentView.mm: (-[WKContentView _commonInitializationWithProcessPool:configuration:]): (-[WKContentView initWithFrame:processPool:configuration:webView:]): (-[WKContentView dealloc]): (-[WKContentView page]): (-[WKContentView updateFixedClippingView:]): (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInsets:unobscuredSafeAreaInsets:inputViewBounds:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]): (-[WKContentView _updateForScreen:]): (-[WKContentView _accessibilityRegisterUIProcessTokens]): (-[WKContentView _createDrawingAreaProxy]): (-[WKContentView _didCommitLayerTree:]): (-[WKContentView _wk_pageCountForPrintFormatter:]): * UIProcess/ios/WKContentViewInteraction.mm: (-[WKFocusedElementInfo initWithAssistedNodeInformation:isUserInitiated:userObject:]): (hasAssistedNode): (-[WKContentView setupInteraction]): (-[WKContentView positionInformation]): (-[WKContentView _webTouchEventsRecognized:]): (inflateQuad): (-[WKContentView _updateTapHighlight]): (-[WKContentView _showTapHighlight]): (-[WKContentView _requiresKeyboardWhenFirstResponder]): (-[WKContentView _displayFormNodeInputView]): (-[WKContentView inputView]): (-[WKContentView _actionForLongPressFromPositionInformation:]): (-[WKContentView currentPositionInformation]): (-[WKContentView doAfterPositionInformationUpdate:forRequest:]): (-[WKContentView _currentPositionInformationIsValidForRequest:]): (-[WKContentView _hasValidOutstandingPositionInformationRequest:]): (-[WKContentView _currentPositionInformationIsApproximatelyValidForRequest:]): (-[WKContentView gestureRecognizerShouldBegin:]): (-[WKContentView hasSelectablePositionAtPoint:]): (-[WKContentView pointIsNearMarkedText:]): (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]): (-[WKContentView webSelectionRectsForSelectionRects:]): (-[WKContentView _twoFingerSingleTapGestureRecognized:]): (-[WKContentView _stylusSingleTapRecognized:]): (-[WKContentView _singleTapCommited:]): (-[WKContentView _attemptClickAtLocation:]): (-[WKContentView _positionInformationDidChange:]): (-[WKContentView requiresAccessoryView]): (-[WKContentView supportedPasteboardTypesForCurrentSelection]): (-[WKContentView _lookupForWebView:]): (-[WKContentView _shareForWebView:]): (-[WKContentView textStylingAtPosition:inDirection:]): (-[WKContentView canPerformActionForWebView:withSender:]): (-[WKContentView selectForWebView:]): (-[WKContentView _accessibilityRetrieveRectsEnclosingSelectionOffset:withGranularity:]): (-[WKContentView _accessibilityRetrieveRectsAtSelectionOffset:withText:completionHandler:]): (toGestureType): (toUIWKGestureType): (toSelectionTouch): (toUIWKSelectionTouch): (toGestureRecognizerState): (toUIGestureRecognizerState): (toUIWKSelectionFlags): (toWKTextGranularity): (toWKSelectionDirection): (selectionChangedWithGesture): (selectionChangedWithTouch): (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:withFlags:]): (-[WKContentView autocorrectionData]): (-[WKContentView requestAutocorrectionRectsForString:withCompletionHandler:]): (-[WKContentView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]): (-[WKContentView _updateAccessory]): (-[WKContentView selectedTextRange]): (-[WKContentView setMarkedText:selectedRange:]): (coreWritingDirection): (-[WKContentView closestPositionToPoint:]): (-[WKContentView insertText:]): (-[WKContentView textInputTraits]): (-[WKContentView handleKeyWebEvent:]): (-[WKContentView handleKeyWebEvent:withCompletionHandler:]): (-[WKContentView isScrollableForKeyboardScrollViewAnimator:]): (-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:]): (-[WKContentView assistedNodeInformation]): (-[WKContentView assistedNodeSelectOptions]): (isAssistableInputType): (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]): (-[WKContentView _stopAssistingNode]): (-[WKContentView updateCurrentAssistedNodeInformation:]): (-[WKContentView presentViewControllerForCurrentAssistedNode]): (-[WKContentView actionNameForFocusedFormControlView:]): (-[WKContentView selectWordForReplacement]): (-[WKContentView _updateChangedSelection:]): (-[WKContentView _beginSuppressingSelectionAssistantForReason:]): (-[WKContentView _stopSuppressingSelectionAssistantForReason:]): (-[WKContentView _showPlaybackTargetPicker:fromRect:routeSharingPolicy:routingContextUID:]): (-[WKContentView _showRunOpenPanel:resultListener:]): (-[WKContentView _showShareSheet:completionHandler:]): (-[WKContentView positionInformationForActionSheetAssistant:]): (-[WKContentView updatePositionInformationForActionSheetAssistant:]): (-[WKContentView _startDrag:item:]): (-[WKContentView _didHandleAdditionalDragItemsRequest:]): (-[WKContentView _didHandleStartDataInteractionRequest:]): (dropOperationForWebCoreDragOperation): (-[WKContentView dragDataForDropSession:dragDestinationAction:]): (-[WKContentView _didConcludeEditDataInteraction:]): (-[WKContentView _didPerformDragOperation:]): (-[WKContentView _prepareToDragPromisedAttachment:]): (-[WKContentView _itemsForBeginningOrAddingToSessionWithRegistrationList:stagedDragSource:]): (-[WKContentView _autofillContext]): (-[WKContentView _dragInteraction:itemsForAddingToSession:withTouchAtPoint:completion:]): (-[WKContentView _dragInteraction:prepareForSession:completion:]): (-[WKContentView dragInteraction:itemsForBeginningSession:]): (-[WKContentView dragInteraction:willAnimateLiftWithAnimator:session:]): (-[WKContentView dragInteraction:session:didEndWithOperation:]): (-[WKContentView dragInteraction:item:willAnimateCancelWithAnimator:]): (-[WKContentView dropInteraction:performDrop:]): (-[WKContentView dropInteraction:sessionDidEnd:]): (-[WKContentView allowsLanguageSelectionMenuForListViewController:]): (-[WKContentView shouldDisplayInputContextViewForListViewController:]): (-[WKContentView numericInputModeForListViewController:]): (-[WKContentView textContentTypeForListViewController:]): (-[WKContentView allowsDictationInputForListViewController:]): (-[WKContentView _simulateLongPressActionAtLocation:]): (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]): (-[WKContentView _presentationRectsForPreviewItemController:]): * UIProcess/ios/fullscreen/WKFullScreenViewController.mm: (WKFullScreenViewControllerPlaybackSessionModelClient::setInterface): (WKFullScreenViewControllerVideoFullscreenModelClient::setInterface): (WKFullScreenViewControllerVideoFullscreenModelClient::interface const): (-[WKFullScreenViewController videoControlsManagerDidChange]): (-[WKFullScreenViewController _manager]): (-[WKFullScreenViewController _togglePiPAction:]): * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm: (-[WKFullscreenAnimationController configureInitialAndFinalStatesForTransition:]): (-[WKFullScreenWindowController isFullScreen]): (-[WKFullScreenWindowController enterFullScreen]): (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]): (-[WKFullScreenWindowController exitFullScreen]): (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]): (-[WKFullScreenWindowController _completedExitFullScreen]): (-[WKFullScreenWindowController webViewDidRemoveFromSuperviewWhileInFullscreen]): (-[WKFullScreenWindowController _exitFullscreenImmediately]): (-[WKFullScreenWindowController _manager]): * UIProcess/mac/WebPageProxyMac.mm: * WebKit.xcodeproj/project.pbxproj: * WebProcess/Cache/WebCacheStorageConnection.cpp: * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm: (mediaTimeToCurrentTime): (-[WKAnimationDelegate initWithLayerID:layerTreeHost:]): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm: (-[WKAccessibilityWebPageObjectBase accessibilityRootObjectWrapper]): 2018-12-10 Don Olmstead <don.olmstead@sony.com> Move ENABLE_RESOURCE_LOAD_STATISTICS to FeatureDefines.xcconfig https://bugs.webkit.org/show_bug.cgi?id=192573 Reviewed by Simon Fraser. * Configurations/FeatureDefines.xcconfig: 2018-12-10 Youenn Fablet <youenn@apple.com> Remove derived classes of RealtimeMediaSourceCenter https://bugs.webkit.org/show_bug.cgi?id=192546 Reviewed by Eric Carlson. pdate code according WebCore changes. * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp: (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints): * WebProcess/cocoa/UserMediaCaptureManager.cpp: (WebKit::UserMediaCaptureManager::~UserMediaCaptureManager): (WebKit::UserMediaCaptureManager::initialize): 2018-12-10 Tim Horton <timothy_horton@apple.com> Animated scrolling on Google Maps scrolls the page in addition to moving the map https://bugs.webkit.org/show_bug.cgi?id=192521 <rdar://problem/46382007> Reviewed by Sam Weinig. * Platform/spi/ios/UIKitSPI.h: * UIProcess/ios/WKKeyboardScrollingAnimator.mm: (-[WKKeyboardScrollViewAnimator rubberbandableDirections]): Only do keyboard-based rubber-banding in directions that we can actually scroll, not directions we can only finger-rubber-band in. This effectively means keyboard scrolling will ignore "alwaysBounce{Vertical, Horizontal}". 2018-12-10 Commit Queue <commit-queue@webkit.org> Unreviewed, rolling out r239023. https://bugs.webkit.org/show_bug.cgi?id=192571 Speculative rollout due to broken perf test (Requested by deanj on #webkit). Reverted changeset: "Enable HTTP and HTTPS proxies on iOS and make it a property of the NSURLSession" https://bugs.webkit.org/show_bug.cgi?id=192374 https://trac.webkit.org/changeset/239023 2018-12-10 Wenson Hsieh <wenson_hsieh@apple.com> Unreviewed, fix the iOS build after r239039. https://bugs.webkit.org/show_bug.cgi?id=192568 * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView dropInteraction:sessionDidUpdate:]): 2018-12-10 Alex Christensen <achristensen@webkit.org> Fix WatchOS build. * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView actionNameForFocusedFormControlView:]): 2018-12-10 Matt Lewis <jlewis3@apple.com> Unreviewed, rolling out r239029. This patch caused internal build failures. Reverted changeset: "[meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds" https://bugs.webkit.org/show_bug.cgi?id=192449 https://trac.webkit.org/changeset/239029 2018-12-10 Chris Dumez <cdumez@apple.com> Add SPI to allow the client to set the user-agent at main frame level, from the UIProcess https://bugs.webkit.org/show_bug.cgi?id=192509 <rdar://problem/46500832> Reviewed by Alex Christensen. Add SPI to allow the client to set the user-agent at main frame level, from the UIProcess instead of doing it at resource-level from the injected bundle. The custom user-agent string can now be set on _WKWebsitePolicies during the decidePolicyForNavigationAction for the main feame, and will impact this main resource load as well as its future subresource loads. * Shared/WebsitePoliciesData.cpp: (WebKit::WebsitePoliciesData::encode const): (WebKit::WebsitePoliciesData::decode): (WebKit::WebsitePoliciesData::applyToDocumentLoader): * Shared/WebsitePoliciesData.h: * UIProcess/API/APIWebsitePolicies.cpp: (API::WebsitePolicies::data): * UIProcess/API/APIWebsitePolicies.h: * UIProcess/API/Cocoa/_WKWebsitePolicies.h: * UIProcess/API/Cocoa/_WKWebsitePolicies.mm: (-[_WKWebsitePolicies setCustomUserAgent:]): (-[_WKWebsitePolicies customUserAgent]): * UIProcess/Cocoa/NavigationState.mm: (WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction): 2018-12-10 Alex Christensen <achristensen@webkit.org> Safe browsing warning should layout buttons vertically in narrow WKWebViews https://bugs.webkit.org/show_bug.cgi?id=192535 <rdar://problem/46308364> Reviewed by Tim Horton. They're usually next to each other, but in narrow WKWebViews they currently get clipped. In order to make it more likely that both buttons are completely visible, put one above the other if the WKWebView is too narrow to completely show both. This also helps with languages where the translations of "Go Back" or "Show Details" are rendered wider than English. * UIProcess/Cocoa/WKSafeBrowsingWarning.mm: (buttonWidth): (-[WKSafeBrowsingWarning addContent]): 2018-12-10 Simon Fraser <simon.fraser@apple.com> Allow control over child order when adding nodes to the scrolling tree https://bugs.webkit.org/show_bug.cgi?id=176914 <rdar://problem/46542237> Re-land r239010 after over-zealous rollout. * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp: (WebKit::RemoteScrollingCoordinatorTransaction::decode): 2018-12-10 Wenson Hsieh <wenson_hsieh@apple.com> [iOS] Caret is obscured by finger when dragging over an editable element https://bugs.webkit.org/show_bug.cgi?id=192499 <rdar://problem/46570101> Reviewed by Tim Horton. Add support for setting the `precise` property of `UIDropProposal` to YES when dragging over an editable area. When enabled, this property shifts the drop location up by a small amount, allowing the user to see the drop caret (currently, this is not the case, and it's difficult to drop text at a precise location on iOS). Changes are covered by adding to existing API tests. * Scripts/webkit/messages.py: * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: Add a new version of `-_webView:willUpdateDataInteractionOperationToOperation:forSession:` that receives and returns a UIDropProposal, so that Mail can more easily port over existing logic in its legacy-WebKit-based compose implementation. iOS Safari is currently the only client of this private delegate, so the old version can be easily removed once Safari adopts this new version. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didPerformDragControllerAction): Add plumbing to send the latest drag handling method from WebPage to WebPageProxy. (WebKit::WebPageProxy::resetCurrentDragInformation): * UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::currentDragHandlingMethod const): * UIProcess/WebPageProxy.messages.in: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView dropInteraction:sessionDidUpdate:]): Call the new UI delegate hook when determining the drop proposal to return to UIKit. Additionally set the `precise` bit on the drop proposal in the case where the drop handling method is either "editing rich text" or "editing plain text". * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::performDragControllerAction): * WebProcess/WebPage/WebPage.h: 2018-12-10 Youenn Fablet <youenn@apple.com> Make mock capture happen in the process used for real capture https://bugs.webkit.org/show_bug.cgi?id=192544 Reviewed by Eric Carlson. Make mock capture happen in the right process by only overriding factories by mock factories for source types that UserMediaCaptureManager will not override. That way, UserMediaCaptureManager will be used to go to UIProcess, where mock will be used as if it was the real capture. * WebProcess/cocoa/UserMediaCaptureManager.cpp: (WebKit::UserMediaCaptureManager::initialize): 2018-12-10 Alexey Proskuryakov <ap@apple.com> Move ENABLE_SEC_ITEM_SHIM out of WebKit's config.h https://bugs.webkit.org/show_bug.cgi?id=192428 Reviewed by Tim Horton. * config.h: 2018-12-10 Alexey Proskuryakov <ap@apple.com> Move more macros out of WebKit's config.h https://bugs.webkit.org/show_bug.cgi?id=192430 Reviewed by Tim Horton. * config.h: 2018-12-10 Chris Fleizach <cfleizach@apple.com> [meta][WebKit] Remove using namespace WebCore and WebKit in the global scope for unified source builds https://bugs.webkit.org/show_bug.cgi?id=192449 Reviewed by Darin Adler. * NetworkProcess/Cookies/mac/WebCookieManagerMac.mm: * NetworkProcess/IndexedDB/WebIDBConnectionToClient.cpp: * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp: * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp: * NetworkProcess/ios/NetworkProcessIOS.mm: * NetworkProcess/mac/NetworkProcessMac.mm: * NetworkProcess/mac/RemoteNetworkingContext.mm: * Platform/spi/ios/AccessibilitySupportSPI.h: * PlatformMac.cmake: * PluginProcess/PluginControllerProxy.cpp: * PluginProcess/PluginProcess.cpp: * PluginProcess/WebProcessConnection.cpp: * Scripts/PreferencesTemplates/WebPreferencesStoreDefaultsMap.cpp.erb: * Shared/API/c/cf/WKErrorCF.cpp: (WKErrorCreateWithCFError): (WKErrorCopyCFError): * Shared/API/c/cg/WKImageCG.cpp: (WKImageCreateCGImage): (WKImageCreateFromCGImage): * Shared/ChildProcess.cpp: * Shared/ContextMenuContextData.cpp: * Shared/EditorState.cpp: * Shared/Plugins/NPIdentifierData.cpp: * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm: * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp: * Shared/SessionState.cpp: * Shared/SessionTracker.cpp: * Shared/ShareableBitmap.cpp: * Shared/ShareableResource.cpp: * Shared/VisibleContentRectUpdateInfo.cpp: * Shared/WebBackForwardListItem.cpp: * Shared/WebContextMenuItemData.cpp: * Shared/WebCoreArgumentCoders.cpp: * Shared/WebHitTestResultData.cpp: * Shared/WebImage.cpp: * Shared/WebMediaSessionMetadata.cpp: * Shared/WebMemorySampler.cpp: * Shared/WebMouseEvent.cpp: * Shared/WebRenderObject.cpp: * Shared/WebSQLiteDatabaseTracker.cpp: * Shared/WebWheelEvent.cpp: * Shared/cf/ArgumentCodersCF.cpp: * Shared/ios/WebPlatformTouchPointIOS.cpp: * SourcesCocoa.txt: * UIProcess/API/APIContentRuleListStore.cpp: * UIProcess/API/APIHitTestResult.cpp: * UIProcess/API/APINavigation.cpp: * UIProcess/API/APIOpenPanelParameters.cpp: * UIProcess/API/APIPageConfiguration.cpp: * UIProcess/API/C/WKPage.cpp: (WKPageLoadURLWithShouldOpenExternalURLsPolicy): (WKPageLoadURLWithUserData): (WKPageLoadURLRequestWithUserData): (WKPageSetPaginationMode): (WKPageGetPaginationMode): (WKPageSetPageLoaderClient): (WKPageSetPagePolicyClient): * UIProcess/API/C/cg/WKIconDatabaseCG.cpp: * UIProcess/Cocoa/WebViewImpl.h: * UIProcess/Cocoa/WebViewImpl.mm: * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm: * UIProcess/WebStorage/LocalStorageDatabase.cpp: * UIProcess/ios/WKContentView.mm: (-[WKContentView _commonInitializationWithProcessPool:configuration:]): (-[WKContentView initWithFrame:processPool:configuration:webView:]): (-[WKContentView dealloc]): (-[WKContentView page]): (-[WKContentView updateFixedClippingView:]): (-[WKContentView didUpdateVisibleRect:unobscuredRect:unobscuredRectInScrollViewCoordinates:obscuredInsets:unobscuredSafeAreaInsets:inputViewBounds:scale:minimumScale:inStableState:isChangingObscuredInsetsInteractively:enclosedInScrollableAncestorView:]): (-[WKContentView _updateForScreen:]): (-[WKContentView _accessibilityRegisterUIProcessTokens]): (-[WKContentView _createDrawingAreaProxy]): (-[WKContentView _didCommitLayerTree:]): (-[WKContentView _wk_pageCountForPrintFormatter:]): * UIProcess/ios/WKContentViewInteraction.mm: (-[WKFocusedElementInfo initWithAssistedNodeInformation:isUserInitiated:userObject:]): (hasAssistedNode): (-[WKContentView setupInteraction]): (-[WKContentView positionInformation]): (-[WKContentView _webTouchEventsRecognized:]): (inflateQuad): (-[WKContentView _updateTapHighlight]): (-[WKContentView _showTapHighlight]): (-[WKContentView _requiresKeyboardWhenFirstResponder]): (-[WKContentView _displayFormNodeInputView]): (-[WKContentView inputView]): (-[WKContentView _actionForLongPressFromPositionInformation:]): (-[WKContentView currentPositionInformation]): (-[WKContentView doAfterPositionInformationUpdate:forRequest:]): (-[WKContentView _currentPositionInformationIsValidForRequest:]): (-[WKContentView _hasValidOutstandingPositionInformationRequest:]): (-[WKContentView _currentPositionInformationIsApproximatelyValidForRequest:]): (-[WKContentView gestureRecognizerShouldBegin:]): (-[WKContentView hasSelectablePositionAtPoint:]): (-[WKContentView pointIsNearMarkedText:]): (-[WKContentView textInteractionGesture:shouldBeginAtPoint:]): (-[WKContentView webSelectionRectsForSelectionRects:]): (-[WKContentView _twoFingerSingleTapGestureRecognized:]): (-[WKContentView _stylusSingleTapRecognized:]): (-[WKContentView _singleTapCommited:]): (-[WKContentView _attemptClickAtLocation:]): (-[WKContentView _positionInformationDidChange:]): (-[WKContentView requiresAccessoryView]): (-[WKContentView supportedPasteboardTypesForCurrentSelection]): (-[WKContentView _lookupForWebView:]): (-[WKContentView _shareForWebView:]): (-[WKContentView textStylingAtPosition:inDirection:]): (-[WKContentView canPerformActionForWebView:withSender:]): (-[WKContentView selectForWebView:]): (-[WKContentView _accessibilityRetrieveRectsEnclosingSelectionOffset:withGranularity:]): (-[WKContentView _accessibilityRetrieveRectsAtSelectionOffset:withText:completionHandler:]): (toGestureType): (toUIWKGestureType): (toSelectionTouch): (toUIWKSelectionTouch): (toGestureRecognizerState): (toUIGestureRecognizerState): (toUIWKSelectionFlags): (toWKTextGranularity): (toWKSelectionDirection): (selectionChangedWithGesture): (selectionChangedWithTouch): (-[WKContentView changeSelectionWithGestureAt:withGesture:withState:withFlags:]): (-[WKContentView autocorrectionData]): (-[WKContentView requestAutocorrectionRectsForString:withCompletionHandler:]): (-[WKContentView _becomeFirstResponderWithSelectionMovingForward:completionHandler:]): (-[WKContentView _updateAccessory]): (-[WKContentView selectedTextRange]): (-[WKContentView setMarkedText:selectedRange:]): (coreWritingDirection): (-[WKContentView closestPositionToPoint:]): (-[WKContentView insertText:]): (-[WKContentView textInputTraits]): (-[WKContentView handleKeyWebEvent:]): (-[WKContentView handleKeyWebEvent:withCompletionHandler:]): (-[WKContentView isScrollableForKeyboardScrollViewAnimator:]): (-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:]): (-[WKContentView assistedNodeInformation]): (-[WKContentView assistedNodeSelectOptions]): (isAssistableInputType): (-[WKContentView _startAssistingNode:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]): (-[WKContentView _stopAssistingNode]): (-[WKContentView updateCurrentAssistedNodeInformation:]): (-[WKContentView presentViewControllerForCurrentAssistedNode]): (-[WKContentView actionNameForFocusedFormControlView:]): (-[WKContentView selectWordForReplacement]): (-[WKContentView _updateChangedSelection:]): (-[WKContentView _beginSuppressingSelectionAssistantForReason:]): (-[WKContentView _stopSuppressingSelectionAssistantForReason:]): (-[WKContentView _showPlaybackTargetPicker:fromRect:routeSharingPolicy:routingContextUID:]): (-[WKContentView _showRunOpenPanel:resultListener:]): (-[WKContentView _showShareSheet:completionHandler:]): (-[WKContentView positionInformationForActionSheetAssistant:]): (-[WKContentView updatePositionInformationForActionSheetAssistant:]): (-[WKContentView _startDrag:item:]): (-[WKContentView _didHandleAdditionalDragItemsRequest:]): (-[WKContentView _didHandleStartDataInteractionRequest:]): (dropOperationForWebCoreDragOperation): (-[WKContentView dragDataForDropSession:dragDestinationAction:]): (-[WKContentView _didConcludeEditDataInteraction:]): (-[WKContentView _didPerformDragOperation:]): (-[WKContentView _prepareToDragPromisedAttachment:]): (-[WKContentView _itemsForBeginningOrAddingToSessionWithRegistrationList:stagedDragSource:]): (-[WKContentView _autofillContext]): (-[WKContentView _dragInteraction:itemsForAddingToSession:withTouchAtPoint:completion:]): (-[WKContentView _dragInteraction:prepareForSession:completion:]): (-[WKContentView dragInteraction:itemsForBeginningSession:]): (-[WKContentView dragInteraction:willAnimateLiftWithAnimator:session:]): (-[WKContentView dragInteraction:session:didEndWithOperation:]): (-[WKContentView dragInteraction:item:willAnimateCancelWithAnimator:]): (-[WKContentView dropInteraction:performDrop:]): (-[WKContentView dropInteraction:sessionDidEnd:]): (-[WKContentView allowsLanguageSelectionMenuForListViewController:]): (-[WKContentView shouldDisplayInputContextViewForListViewController:]): (-[WKContentView numericInputModeForListViewController:]): (-[WKContentView textContentTypeForListViewController:]): (-[WKContentView allowsDictationInputForListViewController:]): (-[WKContentView _simulateLongPressActionAtLocation:]): (-[WKContentView _interactionShouldBeginFromPreviewItemController:forPosition:]): (-[WKContentView _presentationRectsForPreviewItemController:]): * UIProcess/ios/fullscreen/WKFullScreenViewController.mm: (WKFullScreenViewControllerPlaybackSessionModelClient::setInterface): (WKFullScreenViewControllerVideoFullscreenModelClient::setInterface): (WKFullScreenViewControllerVideoFullscreenModelClient::interface const): (-[WKFullScreenViewController videoControlsManagerDidChange]): (-[WKFullScreenViewController _manager]): (-[WKFullScreenViewController _togglePiPAction:]): * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm: (-[WKFullscreenAnimationController configureInitialAndFinalStatesForTransition:]): (-[WKFullScreenWindowController isFullScreen]): (-[WKFullScreenWindowController enterFullScreen]): (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]): (-[WKFullScreenWindowController exitFullScreen]): (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]): (-[WKFullScreenWindowController _completedExitFullScreen]): (-[WKFullScreenWindowController webViewDidRemoveFromSuperviewWhileInFullscreen]): (-[WKFullScreenWindowController _exitFullscreenImmediately]): (-[WKFullScreenWindowController _manager]): * UIProcess/mac/WebPageProxyMac.mm: * WebKit.xcodeproj/project.pbxproj: * WebProcess/Cache/WebCacheStorageConnection.cpp: * WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm: (mediaTimeToCurrentTime): (-[WKAnimationDelegate initWithLayerID:layerTreeHost:]): * WebProcess/WebPage/mac/WKAccessibilityWebPageObjectBase.mm: (-[WKAccessibilityWebPageObjectBase accessibilityRootObjectWrapper]): 2018-12-10 Tim Horton <timothy_horton@apple.com> WKWebView should support custom tintColor https://bugs.webkit.org/show_bug.cgi?id=192518 <rdar://problem/37243261> Reviewed by Wenson Hsieh. * Platform/spi/ios/UIKitSPI.h: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView insertionPointColor]): (-[WKContentView selectionBarColor]): (-[WKContentView selectionHighlightColor]): Grab insertion point and selection colors from UITextInputTraits. (-[WKContentView _updateInteractionTintColor]): Determine our effective tint color: - transparent if interaction is disabled - a CSS-derived color if caret-color style is applied - the _inheritedInteractionTintColor, which climbs up to the tintColor API Apply it to our UITextInputTraits. (-[WKContentView tintColorDidChange]): (-[WKContentView textInputTraits]): Call _updateInteractionTintColor whenever we create a new UITextInputTraits or when the tint color changes. 2018-12-09 Youenn Fablet <youenn@apple.com> Move capture manager from RealtimeMediaSourceCenter to capture factory https://bugs.webkit.org/show_bug.cgi?id=192542 Reviewed by Eric Carlson. Make sure to unregister for video capture as done for other capture types. Implement manager which should be doing nothing as the manager is used for enumeration of devices which should only happen in UIProcess. Given that mock capture is interfering with UserMediaCaptureManager, switching on/off mock capture will require creating a new process. This shortcoming should be fixed once mock capture will be fully happening in the same process as regular capture. * WebProcess/cocoa/UserMediaCaptureManager.cpp: (WebKit::UserMediaCaptureManager::~UserMediaCaptureManager): * WebProcess/cocoa/UserMediaCaptureManager.h: 2018-12-09 Saam barati <sbarati@apple.com> Enable HTTP and HTTPS proxies on iOS and make it a property of the NSURLSession https://bugs.webkit.org/show_bug.cgi?id=192374 <rdar://problem/46506286> Reviewed by Alex Christensen. This patch makes it so that we can use HTTP/HTTPS proxies on iOS as well. To enable on iOS, you can do something like: $ defaults write -g WebKit2HTTPProxy -string "http://localhost:8080" $ defaults write -g WebKit2HTTPSProxy -string "http://localhost:8080" This patch also changes the Proxy to be enabled on a per NSURLSession basis instead of a per process basis. * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::initializeNetworkProcess): * NetworkProcess/NetworkSessionCreationParameters.cpp: (WebKit::NetworkSessionCreationParameters::privateSessionParameters): (WebKit::NetworkSessionCreationParameters::encode const): (WebKit::NetworkSessionCreationParameters::decode): * NetworkProcess/NetworkSessionCreationParameters.h: * NetworkProcess/cocoa/NetworkSessionCocoa.mm: (WebKit::proxyDictionary): (WebKit::NetworkSessionCocoa::NetworkSessionCocoa): * NetworkProcess/mac/NetworkProcessMac.mm: (WebKit::NetworkProcess::platformInitializeNetworkProcess): (WebKit::overrideSystemProxies): Deleted. * UIProcess/API/Cocoa/WKWebsiteDataStore.mm: (-[WKWebsiteDataStore _initWithConfiguration:]): * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h: * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm: (-[_WKWebsiteDataStoreConfiguration httpProxy]): (-[_WKWebsiteDataStoreConfiguration setHTTPProxy:]): (-[_WKWebsiteDataStoreConfiguration httpsProxy]): (-[_WKWebsiteDataStoreConfiguration setHTTPSProxy:]): * UIProcess/Cocoa/WebProcessPoolCocoa.mm: (WebKit::WebProcessPool::platformInitializeNetworkProcess): * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm: (WebKit::WebsiteDataStore::parameters): * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp: (WebKit::WebsiteDataStoreConfiguration::copy): * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h: (WebKit::WebsiteDataStoreConfiguration::httpProxy const): (WebKit::WebsiteDataStoreConfiguration::setHTTPProxy): (WebKit::WebsiteDataStoreConfiguration::httpsProxy const): (WebKit::WebsiteDataStoreConfiguration::setHTTPSProxy): 2018-12-09 Adrian Perez de Castro <aperez@igalia.com> Build failure due to missing include of APIWebsiteDataStore.h https://bugs.webkit.org/show_bug.cgi?id=192541 Reviewed by Youenn Fablet. * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp: Add missing include of APIWebsiteDataStore.h 2018-12-09 Wenson Hsieh <wenson_hsieh@apple.com> [iOS device] Crash when attempting to call -[_WKAttachment info] for an editable image https://bugs.webkit.org/show_bug.cgi?id=192538 Reviewed by Tim Horton. Fix the crash by ensuring that the result of `-renderedDrawing` survives long enough to be wrapped by a `RetainPtr` in `-PNGRepresentation`. This isn't currently testable, since this codepath isn't supported on the iOS simulator; instead, I manually verified using MobileAttachments.app. * UIProcess/ios/WKDrawingView.mm: (-[WKDrawingView renderedDrawing]): 2018-12-09 Commit Queue <commit-queue@webkit.org> Unreviewed, rolling out r239010. https://bugs.webkit.org/show_bug.cgi?id=192537 Breaks fast/visual-viewport/tiled-drawing/zoomed-fixed- scrolling-layers-state.html again (Requested by ap on #webkit). Reverted changeset: "Allow control over child order when adding nodes to the scrolling tree" https://bugs.webkit.org/show_bug.cgi?id=176914 https://trac.webkit.org/changeset/239010 2018-12-08 Alex Christensen <achristensen@webkit.org> Don't programmatically capitalize safe browsing warning buttons https://bugs.webkit.org/show_bug.cgi?id=192531 <rdar://problem/46417791> Reviewed by Darin Adler. * UIProcess/Cocoa/WKSafeBrowsingWarning.mm: (makeButton): 2018-12-08 Alex Christensen <achristensen@webkit.org> Safe browsing warning should respect text size from settings https://bugs.webkit.org/show_bug.cgi?id=192205 Reviewed by Tim Horton. * UIProcess/Cocoa/WKSafeBrowsingWarning.mm: (fontWithSize): (makeButton): (-[WKSafeBrowsingWarning addContent]): (-[WKSafeBrowsingWarning showDetailsClicked]): 2018-12-08 Frederic Wang <fwang@igalia.com> Allow control over child order when adding nodes to the scrolling tree https://bugs.webkit.org/show_bug.cgi?id=176914 <rdar://problem/46542237> Reviewed by Simon Fraser. Based on an earlier patch by Simon Fraser. * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp: (WebKit::RemoteScrollingCoordinatorTransaction::decode): 2018-12-07 Rob Buis <rbuis@igalia.com> Remove unused API in NetworkProcess https://bugs.webkit.org/show_bug.cgi?id=192415 Reviewed by Alex Christensen. This patch removed some unused API and headers in NetworkProcess. * NetworkProcess/NetworkCORSPreflightChecker.cpp: (WebKit::NetworkCORSPreflightChecker::startPreflight): * NetworkProcess/NetworkCORSPreflightChecker.h: * NetworkProcess/NetworkConnectionToWebProcess.cpp: * NetworkProcess/NetworkConnectionToWebProcess.h: * NetworkProcess/NetworkContentRuleListManager.h: * NetworkProcess/NetworkDataTask.cpp: * NetworkProcess/NetworkDataTask.h: * NetworkProcess/NetworkDataTaskBlob.cpp: * NetworkProcess/NetworkLoad.cpp: * NetworkProcess/NetworkLoad.h: * NetworkProcess/NetworkLoadChecker.cpp: * NetworkProcess/NetworkLoadChecker.h: * NetworkProcess/NetworkLoadClient.h: * NetworkProcess/NetworkLoadParameters.h: * NetworkProcess/NetworkProcess.cpp: * NetworkProcess/NetworkProcess.h: * NetworkProcess/NetworkProcessCreationParameters.h: * NetworkProcess/NetworkResourceLoadParameters.cpp: (WebKit::NetworkResourceLoadParameters::encode const): (WebKit::NetworkResourceLoadParameters::decode): * NetworkProcess/NetworkResourceLoadParameters.h: * NetworkProcess/NetworkResourceLoader.cpp: (WebKit::NetworkResourceLoader::didReceiveBuffer): * NetworkProcess/NetworkResourceLoader.h: * NetworkProcess/NetworkSession.cpp: * NetworkProcess/NetworkSession.h: * NetworkProcess/NetworkSocketStream.cpp: * NetworkProcess/NetworkSocketStream.h: * NetworkProcess/PingLoad.cpp: (WebKit::PingLoad::PingLoad): * NetworkProcess/PingLoad.h: * NetworkProcess/PreconnectTask.cpp: (WebKit::PreconnectTask::PreconnectTask): (WebKit::PreconnectTask::frameID const): Deleted. (WebKit::PreconnectTask::pageID const): Deleted. * NetworkProcess/PreconnectTask.h: 2018-12-07 Eric Carlson <eric.carlson@apple.com> [MediaStream] 'devicechange' event should not fire in frames that can't access capture devices https://bugs.webkit.org/show_bug.cgi?id=192511 <rdar://problem/46562063> Reviewed by Youenn Fablet. * UIProcess/UserMediaPermissionCheckProxy.cpp: (WebKit::UserMediaPermissionCheckProxy::UserMediaPermissionCheckProxy): Remove userMediaID parameter. (WebKit::UserMediaPermissionCheckProxy::setUserMediaAccessInfo): ID not passed to callback. * UIProcess/UserMediaPermissionCheckProxy.h: (WebKit::UserMediaPermissionCheckProxy::create): (WebKit::UserMediaPermissionCheckProxy::completionHandler): Deleted. * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: (WebKit::generateRequestID): New. (WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged): Don't notify if the page does not have a granted request and does not have persistent access. (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame): Use generateRequestID. (WebKit::UserMediaPermissionRequestManagerProxy::getUserMediaPermissionInfo): Change variable name. (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame): Use generateRequestID. * UIProcess/UserMediaPermissionRequestManagerProxy.h: 2018-12-07 Saam Barati <sbarati@apple.com> WKWebProcessPlugInLoadDelegate should have API for saying which rendering events it wants to listen for https://bugs.webkit.org/show_bug.cgi?id=192473 Reviewed by Andy Estes. * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: (PageLoaderClient::layoutMilestones const): 2018-12-07 Youenn Fablet <youenn@apple.com> Update libwebrtc up to 0d007d7c4f https://bugs.webkit.org/show_bug.cgi?id=192316 Reviewed by Eric Carlson. Update code base according new libwebrtc backend In particular, use directly int64_t for packet time. * Configurations/WebKit.xcconfig: * NetworkProcess/webrtc/LibWebRTCSocketClient.cpp: (WebKit::LibWebRTCSocketClient::signalReadPacket): * NetworkProcess/webrtc/LibWebRTCSocketClient.h: * NetworkProcess/webrtc/NetworkRTCProvider.cpp: * NetworkProcess/webrtc/NetworkRTCSocket.h: * WebProcess/Network/webrtc/LibWebRTCSocket.cpp: (WebKit::LibWebRTCSocket::signalReadPacket): 2018-12-07 Truitt Savell <tsavell@apple.com> Unreviewed, rolling out r238947. Revision caused fast/visual-viewport/tiled-drawing/zoomed- fixed-scrolling-layers-state.html to constantly fail Reverted changeset: "Allow control over child order when adding nodes to the scrolling tree" https://bugs.webkit.org/show_bug.cgi?id=176914 https://trac.webkit.org/changeset/238947 2018-12-06 David Kilzer <ddkilzer@apple.com> Injected bundle for WebKitTestRunner leaks WKTypeRef objects <https://webkit.org/b/192481> <rdar://problem/46539059> Reviewed by Simon Fraser. Change function parameter name from `returnData[Ref]` to `returnRetainedData[Ref]` to document that the value returned is a +1 retained WKTypeRef object. * WebProcess/InjectedBundle/API/c/WKBundle.cpp: (WKBundlePostSynchronousMessage): * WebProcess/InjectedBundle/API/c/WKBundle.h: * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePagePostSynchronousMessageForTesting): * WebProcess/InjectedBundle/API/c/WKBundlePage.h: 2018-12-06 Frederic Wang <fwang@igalia.com> Allow control over child order when adding nodes to the scrolling tree https://bugs.webkit.org/show_bug.cgi?id=176914 Reviewed by Simon Fraser. Based on an earlier patch by Simon Fraser. * Shared/RemoteLayerTree/RemoteScrollingCoordinatorTransaction.cpp: (WebKit::RemoteScrollingCoordinatorTransaction::decode): Make explicit that we want to append the new node at the end of child list. 2018-12-06 Yongjun Zhang <yongjun_zhang@apple.com> We should ignore minimumEffectiveDeviceWidth if the page specifies device-width in viewport meta-tag. https://bugs.webkit.org/show_bug.cgi?id=192377 <rdar://problem/46364206> Reviewed by Tim Horton. Since we are using page's viewport arguments to decide the default viewport parameters and whether we can use mininum effective device width, we should always call setViewportArguments() regardless of shouldIgnoreMetaViewport settings. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::viewportPropertiesDidChange): Always call setViewportArguments(). (WebKit::WebPage::didCommitLoad): Ditto. 2018-12-06 Tim Horton <timothy_horton@apple.com> Web Share API: share overlay does not stick to the Safari window https://bugs.webkit.org/show_bug.cgi?id=192469 <rdar://problem/46074833> Reviewed by Wenson Hsieh. * UIProcess/Cocoa/WKShareSheet.mm: (-[WKShareSheet sharingServicePicker:didChooseSharingService:]): (-[WKShareSheet sharingServicePicker:delegateForSharingService:]): (-[WKShareSheet sharingService:sourceWindowForShareItems:sharingContentScope:]): (-[WKShareSheet sharingService:didFailToShareItems:error:]): (-[WKShareSheet sharingService:didShareItems:]): Implement another NSSharingServicePickerDelegate method to return an *NSSharingService* delegate when needed. Implement an NSSharingServiceDelegate method to return the window that the service's UI should attach to. Also, instead of notifying the Web Content process when a service is picked (or not) in the NSSharingServicePicker, wait until the share has completed (or failed) to send didComplete. This both makes the return completion value more accurate (matching iOS, if you cancel the share during the recipient choice step, it will now fail), and avoids explicitly tearing down the NSSharingServicePicker too early, which breaks the UI attaching mechanism. 2018-12-06 Wenson Hsieh <wenson_hsieh@apple.com> [iOS] WKWebView should match UITextView behavior when editing text with an RTL keyboard https://bugs.webkit.org/show_bug.cgi?id=187554 <rdar://problem/42075638> Reviewed by Tim Horton. Add support for automatically switching the base writing direction to the default writing direction with respect to the current keyboard in an editable WKWebView by implementing `-setBaseWritingDirection:forRange:`. On iOS 12 and earlier, UIKit invokes this protocol method whenever the keyboard is changed to one with a different writing direction, although in some other versions of iOS, this only happens when first focusing an editable area. Test: editing/input/ios/rtl-keyboard-input-on-focus.html * Platform/spi/ios/UIKitSPI.h: Declare UIKeyboardImpl IPI methods mostly for use in WebKitTestRunner (with the exception of `-setInitialDirection`, which we may invoke when we receive the first post-layout EditorState update after focusing an editable element). * UIProcess/PageClient.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::increaseListLevel): (WebKit::WebPageProxy::decreaseListLevel): (WebKit::WebPageProxy::changeListType): (WebKit::WebPageProxy::setBaseWritingDirection): Drive-by style fixes: make these bail and return early if `!isValid()`. (WebKit::WebPageProxy::resetStateAfterProcessExited): Reset assisted node state in the UI process upon web process termination. * UIProcess/WebPageProxy.h: Add plumbing for `setBaseWritingDirection`, from `WebPageProxy` to `WebPage` to `Editor`. * UIProcess/ios/PageClientImplIOS.h: * UIProcess/ios/PageClientImplIOS.mm: (WebKit::PageClientImpl::didReceiveEditorStateUpdateAfterFocus): * UIProcess/ios/WKContentViewInteraction.h: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView baseWritingDirectionForPosition:inDirection:]): (coreWritingDirection): (-[WKContentView setBaseWritingDirection:forRange:]): Support `-setBaseWritingDirectionForPosition:forRange:`, but only in the case where the given range is the selected range. This is all that's currently needed to fulfill the requirements in <rdar://problem/42075638>, though we could potentially add full support for this in the future by mapping the given text range to a DOM range and moving the selection prior to setting the base writing direction. (-[WKContentView _didReceiveEditorStateUpdateAfterFocus]): Add a hook to notify WKContentView when the first post-layout EditorState has been received in the UI process. When this is invoked, if the web view is editable and the selection is not a range, we call into `UIKeyboardImpl` to change the initial writing direction if necessary. * UIProcess/ios/WebPageProxyIOS.mm: (WebKit::WebPageProxy::startAssistingNode): (WebKit::WebPageProxy::stopAssistingNode): (WebKit::WebPageProxy::editorStateChanged): * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::setBaseWritingDirection): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: 2018-12-06 David Quesada <david_quesada@apple.com> -[WKProcessPool _resumeDownloadFromData:path:] should allow specifying the originating web view https://bugs.webkit.org/show_bug.cgi?id=192411 rdar://problem/46492487 Reviewed by Alex Christensen. * UIProcess/API/C/WKContext.cpp: (WKContextResumeDownload): * UIProcess/API/Cocoa/WKProcessPool.mm: (-[WKProcessPool _resumeDownloadFromData:path:originatingWebView:]): (-[WKProcessPool _resumeDownloadFromData:path:]): Deleted. * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::resumeDownload): - Set the originating page of the DownloadProxy. - If the originating page is non-null, use its session ID for the download. - Remove a FIXME. It's possible to do this now by providing the web view whose session should be used for the download. * UIProcess/WebProcessPool.h: 2018-12-06 Jiewen Tan <jiewen_tan@apple.com> Unreviewed, a quick fix after r238919 Add an early return such that the error message is actually meaningful. * UIProcess/WebAuthentication/Mock/MockHidService.cpp: (WebKit::MockHidService::platformStartDiscovery): 2018-12-06 Alex Christensen <achristensen@webkit.org> Remove unused LoaderStrategy::storeDerivedDataToCache and associated dead code https://bugs.webkit.org/show_bug.cgi?id=192452 Reviewed by Anders Carlsson. This was introduced in r210835 but never used. It's preventing me from making the disk cache associated with a SessionID/NetworkSession. * NetworkProcess/NetworkConnectionToWebProcess.cpp: (WebKit::NetworkConnectionToWebProcess::storeDerivedDataToCache): Deleted. * NetworkProcess/NetworkConnectionToWebProcess.h: * NetworkProcess/NetworkConnectionToWebProcess.messages.in: * NetworkProcess/NetworkResourceLoadParameters.cpp: (WebKit::NetworkResourceLoadParameters::encode const): (WebKit::NetworkResourceLoadParameters::decode): * NetworkProcess/NetworkResourceLoadParameters.h: * NetworkProcess/NetworkResourceLoader.cpp: (WebKit::NetworkResourceLoader::continueDidReceiveResponse): (WebKit::NetworkResourceLoader::didRetrieveCacheEntry): (WebKit::NetworkResourceLoader::continueProcessingCachedEntryAfterDidReceiveResponse): Deleted. * NetworkProcess/NetworkResourceLoader.h: * WebProcess/Network/WebLoaderStrategy.cpp: (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess): (WebKit::WebLoaderStrategy::storeDerivedDataToCache): Deleted. * WebProcess/Network/WebLoaderStrategy.h: * WebProcess/Network/WebResourceLoader.cpp: (WebKit::WebResourceLoader::didRetrieveDerivedData): Deleted. * WebProcess/Network/WebResourceLoader.messages.in: 2018-12-06 Carlos Eduardo Ramalho <cadubentzen@gmail.com> REGRESSION(r231043): [GTK] Undefined references to WebCore::LayerRepresentation::* with -DENABLE_OPENGL=OFF builds https://bugs.webkit.org/show_bug.cgi?id=191997 Reviewed by Philippe Normand. Fix build with -DENABLE_OPENGL=OFF and -DENABLE_VIDEO=OFF. * Shared/WebEventConversion.cpp: (WebKit::WebKit2PlatformWheelEvent::WebKit2PlatformWheelEvent): add required #if ENABLE(ASYNC_SCROLLING) 2018-12-05 Ryosuke Niwa <rniwa@webkit.org> REGRESSION(PSON): Process swapping code doesn't set DisplayID in WebContent process https://bugs.webkit.org/show_bug.cgi?id=192290 Reviewed by Simon Fraser. Fixed the bug by updating the DisplayID upon attaching to a WebContent process after a process swap as well as after the previous WebContent process had crashed. Unfortunately no new tests since WebKitTestRunner / DumpRenderTree should use 0 as DisplayID as they have an off-screen NSWindow. The issue that this results in no fallback for the animation timer is tracked by webkit.org/b/192448. * UIProcess/Cocoa/WebViewImpl.mm: (WebKit::WebViewImpl::didRelaunchProcess): 2018-12-05 Youenn Fablet <youenn@apple.com> Remove a document entry from NetworkMDNSRegister::m_services when document goes away https://bugs.webkit.org/show_bug.cgi?id=192429 Reviewed by Eric Carlson. * NetworkProcess/webrtc/NetworkMDNSRegister.cpp: (WebKit::NetworkMDNSRegister::unregisterMDNSNames): We should remove the entry to limit the size of the map. 2018-12-05 Jiewen Tan <jiewen_tan@apple.com> [Mac] Layout Test http/wpt/webauthn/public-key-credential-create-success-hid.https.html and http/wpt/webauthn/public-key-credential-get-success-hid.https.html are flaky https://bugs.webkit.org/show_bug.cgi?id=192061 Reviewed by Dewei Zhu. Part 1. Add some loggings to determine possible causes for the flakiness. * UIProcess/WebAuthentication/Cocoa/HidService.mm: (WebKit::HidService::continueAddDeviceAfterGetInfo): * UIProcess/WebAuthentication/Mock/MockHidService.cpp: (WebKit::MockHidService::platformStartDiscovery): 2018-12-05 Chris Dumez <cdumez@apple.com> Simplify logic inside WebPageProxy::continueNavigationInNewProcess() https://bugs.webkit.org/show_bug.cgi?id=192404 Reviewed by Alex Christensen. Simplify get the item state from the current back/forward list item, instead of relying on WebBackForwardList::filteredItemStates(). * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::continueNavigationInNewProcess): 2018-12-05 Youenn Fablet <youenn@apple.com> Enable the possibility to do video capture in UIProcess https://bugs.webkit.org/show_bug.cgi?id=192394 Reviewed by Eric Carlson. Add two web preferences to toggle audio/video capture in UIProcess or WebProcess. Add mechanism for video capture that was not implemented yet. * Shared/WebPreferences.yaml: * Shared/WebPreferencesDefaultValues.h: * Shared/WebProcessCreationParameters.cpp: (WebKit::WebProcessCreationParameters::encode const): (WebKit::WebProcessCreationParameters::decode): * Shared/WebProcessCreationParameters.h: * UIProcess/API/APIProcessPoolConfiguration.h: * UIProcess/API/C/WKPreferences.cpp: (WKPreferencesSetCaptureAudioInUIProcessEnabled): (WKPreferencesGetCaptureAudioInUIProcessEnabled): (WKPreferencesSetCaptureVideoInUIProcessEnabled): (WKPreferencesGetCaptureVideoInUIProcessEnabled): * UIProcess/API/C/WKPreferencesRef.h: * UIProcess/WebPreferences.cpp: (WebKit::WebPreferences::updateBoolValueForInternalDebugFeatureKey): * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::initializeNewWebProcess): (WebKit::WebProcessPool::createWebPage): * WebProcess/cocoa/UserMediaCaptureManager.cpp: (WebKit::UserMediaCaptureManager::initialize): 2018-12-05 Alex Christensen <achristensen@webkit.org> Make WebsiteDataStoreConfiguration a proper API object https://bugs.webkit.org/show_bug.cgi?id=192380 Reviewed by Youenn Fablet. In the immediate future I'll need to add things to _WKWebsiteDataStoreConfiguration. Instead of making ivars, setting them, copying them to a local object, make this a wrapper of an API::Object like all our other ObjC API objects are. * Shared/API/APIObject.h: (API::Object::wrapper const): (API::Object::wrapper): Deleted. * Shared/Cocoa/APIObject.mm: (API::Object::ref const): (API::Object::deref const): (API::Object::newObject): (API::Object::ref): Deleted. (API::Object::deref): Deleted. * Sources.txt: * UIProcess/API/APIProcessPoolConfiguration.cpp: (API::ProcessPoolConfiguration::createWithWebsiteDataStoreConfiguration): * UIProcess/API/APIProcessPoolConfiguration.h: * UIProcess/API/APIWebsiteDataStore.cpp: (API::WebsiteDataStore::createLegacy): (API::WebsiteDataStore::WebsiteDataStore): (API::WebsiteDataStore::legacyDefaultDataStoreConfiguration): * UIProcess/API/APIWebsiteDataStore.h: * UIProcess/API/Cocoa/APIWebsiteDataStoreCocoa.mm: (API::WebsiteDataStore::defaultDataStoreConfiguration): * UIProcess/API/Cocoa/WKWebsiteDataStore.mm: (-[WKWebsiteDataStore _initWithConfiguration:]): * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm: (-[_WKWebsiteDataStoreConfiguration _webStorageDirectory]): (-[_WKWebsiteDataStoreConfiguration _setWebStorageDirectory:]): (-[_WKWebsiteDataStoreConfiguration _indexedDBDatabaseDirectory]): (-[_WKWebsiteDataStoreConfiguration _setIndexedDBDatabaseDirectory:]): (-[_WKWebsiteDataStoreConfiguration _webSQLDatabaseDirectory]): (-[_WKWebsiteDataStoreConfiguration _setWebSQLDatabaseDirectory:]): (-[_WKWebsiteDataStoreConfiguration _cookieStorageFile]): (-[_WKWebsiteDataStoreConfiguration _setCookieStorageFile:]): (-[_WKWebsiteDataStoreConfiguration _resourceLoadStatisticsDirectory]): (-[_WKWebsiteDataStoreConfiguration _setResourceLoadStatisticsDirectory:]): (-[_WKWebsiteDataStoreConfiguration _cacheStorageDirectory]): (-[_WKWebsiteDataStoreConfiguration _setCacheStorageDirectory:]): (-[_WKWebsiteDataStoreConfiguration _serviceWorkerRegistrationDirectory]): (-[_WKWebsiteDataStoreConfiguration _setServiceWorkerRegistrationDirectory:]): (-[_WKWebsiteDataStoreConfiguration setSourceApplicationBundleIdentifier:]): (-[_WKWebsiteDataStoreConfiguration sourceApplicationBundleIdentifier]): (-[_WKWebsiteDataStoreConfiguration sourceApplicationSecondaryIdentifier]): (-[_WKWebsiteDataStoreConfiguration setSourceApplicationSecondaryIdentifier:]): (-[_WKWebsiteDataStoreConfiguration _apiObject]): * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfigurationInternal.h: Added. * UIProcess/Network/NetworkProcessProxy.cpp: (WebKit::NetworkProcessProxy::retrieveCacheStorageParameters): * UIProcess/WebProcessPool.cpp: (WebKit::legacyWebsiteDataStoreConfiguration): (WebKit::WebProcessPool::mayHaveRegisteredServiceWorkers): * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm: (WebKit::WebsiteDataStore::parameters): * UIProcess/WebsiteData/WebsiteDataStore.cpp: (WebKit::WebsiteDataStore::create): (WebKit::WebsiteDataStore::WebsiteDataStore): (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary): (WebKit::WebsiteDataStore::fetchDataAndApply): (WebKit::WebsiteDataStore::removeData): (WebKit::WebsiteDataStore::parameters): (WebKit::WebsiteDataStore::Configuration::Configuration): Deleted. * UIProcess/WebsiteData/WebsiteDataStore.h: (WebKit::WebsiteDataStore::cacheStoragePerOriginQuota const): (WebKit::WebsiteDataStore::setCacheStoragePerOriginQuota): (WebKit::WebsiteDataStore::cacheStorageDirectory const): (WebKit::WebsiteDataStore::setCacheStorageDirectory): (WebKit::WebsiteDataStore::serviceWorkerRegistrationDirectory const): (WebKit::WebsiteDataStore::setServiceWorkerRegistrationDirectory): (WebKit::WebsiteDataStore::resolvedApplicationCacheDirectory const): (WebKit::WebsiteDataStore::resolvedMediaCacheDirectory const): (WebKit::WebsiteDataStore::resolvedMediaKeysDirectory const): (WebKit::WebsiteDataStore::resolvedDatabaseDirectory const): (WebKit::WebsiteDataStore::resolvedJavaScriptConfigurationDirectory const): (WebKit::WebsiteDataStore::resolvedCookieStorageFile const): (WebKit::WebsiteDataStore::resolvedIndexedDatabaseDirectory const): (WebKit::WebsiteDataStore::resolvedServiceWorkerRegistrationDirectory const): (WebKit::WebsiteDataStore::resolvedResourceLoadStatisticsDirectory const): * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp: Added. (WebKit::WebsiteDataStoreConfiguration::WebsiteDataStoreConfiguration): * UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h: Added. (WebKit::WebsiteDataStoreConfiguration::create): (WebKit::WebsiteDataStoreConfiguration::cacheStoragePerOriginQuota): (WebKit::WebsiteDataStoreConfiguration::setCacheStoragePerOriginQuota): (WebKit::WebsiteDataStoreConfiguration::applicationCacheDirectory const): (WebKit::WebsiteDataStoreConfiguration::setApplicationCacheDirectory): (WebKit::WebsiteDataStoreConfiguration::mediaCacheDirectory const): (WebKit::WebsiteDataStoreConfiguration::setMediaCacheDirectory): (WebKit::WebsiteDataStoreConfiguration::mediaKeysStorageDirectory const): (WebKit::WebsiteDataStoreConfiguration::setMediaKeysStorageDirectory): (WebKit::WebsiteDataStoreConfiguration::javaScriptConfigurationDirectory const): (WebKit::WebsiteDataStoreConfiguration::setJavaScriptConfigurationDirectory): (WebKit::WebsiteDataStoreConfiguration::webStorageDirectory const): (WebKit::WebsiteDataStoreConfiguration::setWebStorageDirectory): (WebKit::WebsiteDataStoreConfiguration::indexedDBDatabaseDirectory const): (WebKit::WebsiteDataStoreConfiguration::setIndexedDBDatabaseDirectory): (WebKit::WebsiteDataStoreConfiguration::webSQLDatabaseDirectory const): (WebKit::WebsiteDataStoreConfiguration::setWebSQLDatabaseDirectory): (WebKit::WebsiteDataStoreConfiguration::localStorageDirectory const): (WebKit::WebsiteDataStoreConfiguration::setLocalStorageDirectory): (WebKit::WebsiteDataStoreConfiguration::cookieStorageFile const): (WebKit::WebsiteDataStoreConfiguration::setCookieStorageFile): (WebKit::WebsiteDataStoreConfiguration::resourceLoadStatisticsDirectory const): (WebKit::WebsiteDataStoreConfiguration::setResourceLoadStatisticsDirectory): (WebKit::WebsiteDataStoreConfiguration::networkCacheDirectory const): (WebKit::WebsiteDataStoreConfiguration::setNetworkCacheDirectory): (WebKit::WebsiteDataStoreConfiguration::cacheStorageDirectory const): (WebKit::WebsiteDataStoreConfiguration::setCacheStorageDirectory): (WebKit::WebsiteDataStoreConfiguration::applicationCacheFlatFileSubdirectoryName const): (WebKit::WebsiteDataStoreConfiguration::setApplicationCacheFlatFileSubdirectoryName): (WebKit::WebsiteDataStoreConfiguration::serviceWorkerRegistrationDirectory const): (WebKit::WebsiteDataStoreConfiguration::setServiceWorkerRegistrationDirectory): (WebKit::WebsiteDataStoreConfiguration::sourceApplicationBundleIdentifier const): (WebKit::WebsiteDataStoreConfiguration::setSourceApplicationBundleIdentifier): (WebKit::WebsiteDataStoreConfiguration::sourceApplicationSecondaryIdentifier const): (WebKit::WebsiteDataStoreConfiguration::setSourceApplicationSecondaryIdentifier): * WebKit.xcodeproj/project.pbxproj: 2018-12-05 Wenson Hsieh <wenson_hsieh@apple.com> Turn WritingDirection into an enum class https://bugs.webkit.org/show_bug.cgi?id=192401 Work towards <rdar://problem/42075638> Reviewed by Dan Bernstein. Change WritingDirection from an enum to an enum class. No change in behavior. * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::setTextDirection): 2018-12-05 Rob Buis <rbuis@igalia.com> [Mac] HEAD requests changed to GET after 301, 302, and 303 redirections (http/tests/xmlhttprequest/head-redirection.html) https://bugs.webkit.org/show_bug.cgi?id=114965 Reviewed by Frédéric Wang. HEAD requests should not be changed to GET after 303 redirects, see [1]. This was fixed earlier for GTK [2]. Behavior matches Firefox and Chrome. [1] http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-21#section-7.4 [2] https://bugs.webkit.org/show_bug.cgi?id=110127 Tests: web-platform-tests/fetch/api/redirect/redirect-method.html web-platform-tests/fetch/api/redirect/redirect-method-worker.html http/tests/xmlhttprequest/head-redirection.html * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection): 2018-12-04 Fujii Hironori <Hironori.Fujii@sony.com> Remove using namespace WebCore and WebKit under WebKit/Shared/API https://bugs.webkit.org/show_bug.cgi?id=192352 Reviewed by Alex Christensen. Removed using namespace statements, and use namespace prefix instead. * Shared/API/APIURLRequest.cpp: * Shared/API/APIURLResponse.cpp: * Shared/API/c/WKArray.cpp: * Shared/API/c/WKCertificateInfo.cpp: * Shared/API/c/WKConnectionRef.cpp: * Shared/API/c/WKContextMenuItem.cpp: * Shared/API/c/WKData.cpp: * Shared/API/c/WKDictionary.cpp: * Shared/API/c/WKErrorRef.cpp: * Shared/API/c/WKGeometry.cpp: * Shared/API/c/WKImage.cpp: * Shared/API/c/WKMutableArray.cpp: * Shared/API/c/WKMutableDictionary.cpp: * Shared/API/c/WKNumber.cpp: * Shared/API/c/WKPluginInformation.cpp: * Shared/API/c/WKRenderLayer.cpp: * Shared/API/c/WKRenderObject.cpp: * Shared/API/c/WKSecurityOriginRef.cpp: * Shared/API/c/WKSerializedScriptValue.cpp: * Shared/API/c/WKString.cpp: * Shared/API/c/WKType.cpp: * Shared/API/c/WKURL.cpp: * Shared/API/c/WKURLRequest.cpp: * Shared/API/c/WKURLResponse.cpp: * Shared/API/c/WKUserContentURLPattern.cpp: * Shared/API/c/cairo/WKImageCairo.cpp: * Shared/API/c/curl/WKCertificateInfoCurl.cpp: 2018-12-04 Alex Christensen <achristensen@webkit.org> Remove source application identifiers from NetworkProcessCreationParameters https://bugs.webkit.org/show_bug.cgi?id=192372 Reviewed by Brady Eidson. The _WKWebProcessPoolConfiguration way of setting these was deprecated in http://trac.webkit.org/r235127 The replacement was adopted in <rdar://problem/46359330> The transition process is done! Time to remove the old code. * NetworkProcess/NetworkProcessCreationParameters.cpp: (WebKit::NetworkProcessCreationParameters::encode const): (WebKit::NetworkProcessCreationParameters::decode): * NetworkProcess/NetworkProcessCreationParameters.h: * NetworkProcess/cocoa/NetworkProcessCocoa.mm: (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa): * NetworkProcess/cocoa/NetworkSessionCocoa.h: * NetworkProcess/cocoa/NetworkSessionCocoa.mm: (WebKit::NetworkSessionCocoa::NetworkSessionCocoa): (WebKit::globalSourceApplicationAuditTokenData): Deleted. (WebKit::globalSourceApplicationBundleIdentifier): Deleted. (WebKit::globalSourceApplicationSecondaryIdentifier): Deleted. (WebKit::NetworkSessionCocoa::setSourceApplicationAuditTokenData): Deleted. (WebKit::NetworkSessionCocoa::setSourceApplicationBundleIdentifier): Deleted. (WebKit::NetworkSessionCocoa::setSourceApplicationSecondaryIdentifier): Deleted. * UIProcess/API/APIProcessPoolConfiguration.cpp: (API::ProcessPoolConfiguration::copy): * UIProcess/API/APIProcessPoolConfiguration.h: * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm: (-[_WKProcessPoolConfiguration sourceApplicationBundleIdentifier]): (-[_WKProcessPoolConfiguration setSourceApplicationBundleIdentifier:]): (-[_WKProcessPoolConfiguration sourceApplicationSecondaryIdentifier]): (-[_WKProcessPoolConfiguration setSourceApplicationSecondaryIdentifier:]): * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm: (WebKit::WebPaymentCoordinatorProxy::platformCanMakePaymentsWithActiveCard): (WebKit::toPKPaymentRequest): * UIProcess/Cocoa/WebProcessPoolCocoa.mm: (WebKit::WebProcessPool::platformInitializeNetworkProcess): * UIProcess/WebsiteData/WebsiteDataStore.h: (WebKit::WebsiteDataStore::configuration): 2018-12-04 Youenn Fablet <youenn@apple.com> Calling getUserMedia in a link that was opened with target="_blank" does not work the second time https://bugs.webkit.org/show_bug.cgi?id=188088 <rdar://problem/42681448> Reviewed by Eric Carlson. On closing a page, we need to make sure to consider that the capture is ended, as otherwise WebPageProxy will not get noticed from WebPage, since WebPageProxy is no longer an IPC receiver. * UIProcess/UserMediaProcessManager.cpp: (WebKit::UserMediaProcessManager::endedCaptureSession): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::close): 2018-12-04 Chris Dumez <cdumez@apple.com> Regression(r238817) PSON Page Cache API tests are failing https://bugs.webkit.org/show_bug.cgi?id=192348 Reviewed by Alex Christensen. Before suspending a WebProcess on iOS, we normally fake a memory pressure signal so that the suspended process uses as little memory as possible while suspended. Among other things, this will clear the page cache. This is an issue in the case of process-swap on navigation because we keep suspended web processes around to keep Page Cache functional. To address the issue, when a WebProcess is about to get suspended, we check if the process has any suspended WebPage (WebPage used for PSON PageCache support) and we bypass the PageCache clearing if it does. Our API tests did not catch this before r238817 because the NavigationState's assertion was preventing the old WebProcesses from suspending for 3 seconds, which was enough for those tests to complete. * UIProcess/SuspendedPageProxy.cpp: (WebKit::SuspendedPageProxy::SuspendedPageProxy): (WebKit::SuspendedPageProxy::didFinishLoad): * UIProcess/SuspendedPageProxy.h: Take a background assertion until the suspension load is complete, to make sure the suspension load has a chance to complete before the process gets suspended. * WebProcess/WebProcess.cpp: (WebKit::WebProcess::initializeWebProcess): (WebKit::WebProcess::hasPageRequiringPageCacheWhileSuspended const): (WebKit::WebProcess::actualPrepareToSuspend): * WebProcess/WebProcess.h: 2018-12-04 Youenn Fablet <youenn@apple.com> Device orientation may be wrong on page reload after crash https://bugs.webkit.org/show_bug.cgi?id=192349 <rdar://problem/46359466> Reviewed by Eric Carlson. On page crash, the process is relaunched and the page is reloaded. At that point, the orientation information of the page is not reset until the next device orientation change. To fix that, add the device orientation to the page creation parameters so that we pass it everytime we create a page. Covered by manual testing. * Shared/WebPageCreationParameters.cpp: (WebKit::WebPageCreationParameters::encode const): (WebKit::WebPageCreationParameters::decode): * Shared/WebPageCreationParameters.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::creationParameters): * WebProcess/WebPage/WebPage.cpp: 2018-12-04 Carlos Eduardo Ramalho <cadubentzen@gmail.com> [WPE] Add gtk-doc https://bugs.webkit.org/show_bug.cgi?id=178900 Reviewed by Michael Catanzaro. Add gtk-doc to WPE port. This patch tries to reuse as much code from WebKitGTK+ as possible. * PlatformWPE.cmake: Write variables to gtkdoc-wpe.cfg and gtkdoc-webextensions that is used by python script later. * UIProcess/API/wpe/WebKitWebContext.h: Placed sandbox functions in the same location as in the WebKitGTK+ for consistency. * UIProcess/API/wpe/docs/wpe-0.1-sections.txt: Added. * UIProcess/API/wpe/docs/wpe-docs.sgml: Added. * WebProcess/InjectedBundle/API/wpe/WebKitWebPage.h: Placed webkit_web_page_get_dom_document in the same position as in the WebKitGTK+ for consistency. * WebProcess/InjectedBundle/API/wpe/docs/wpe-webextensions-0.1-sections.txt: Added. * WebProcess/InjectedBundle/API/wpe/docs/wpe-webextensions-docs.sgml: Added. 2018-12-04 Carlos Garcia Campos <cgarcia@igalia.com> [SOUP] Move URLSoup back to WebCore after r238771 https://bugs.webkit.org/show_bug.cgi?id=192306 Reviewed by Michael Catanzaro. Include GUniquePtrSoup from WebCore again and fix several build failures that showed up after removing the soup includes from URL header. * NetworkProcess/soup/NetworkDataTaskSoup.cpp: (WebKit::NetworkDataTaskSoup::tlsConnectionAcceptCertificate): * PluginProcess/PluginProcess.cpp: * Shared/API/glib/WebKitURIRequest.cpp: * Shared/API/glib/WebKitURIResponse.cpp: * UIProcess/API/glib/APIWebsiteDataStoreGLib.cpp: * UIProcess/API/glib/WebKitURISchemeRequest.cpp: (webkit_uri_scheme_request_finish_error): Use soupURIToURL(). * UIProcess/API/glib/WebKitWebView.cpp: (webkit_web_view_load_uri): Use soupURIToURL(). * UIProcess/API/gtk/WebKitAuthenticationDialog.cpp: * UIProcess/Launcher/glib/BubblewrapLauncher.h: * UIProcess/Launcher/glib/FlatpakLauncher.cpp: * UIProcess/Launcher/glib/FlatpakLauncher.h: 2018-12-04 Tim Horton <timothy_horton@apple.com> Fix the watchOS build; stop unnecessarily linking CorePDF https://bugs.webkit.org/show_bug.cgi?id=192356 <rdar://problem/46427844> Reviewed by Wenson Hsieh. * Configurations/WebKit.xcconfig: * Platform/spi/ios/CorePDFSPI.h: 2018-12-03 Tim Horton <timothy_horton@apple.com> Make it possible to disable animated keyboard scrolling behavior https://bugs.webkit.org/show_bug.cgi?id=192331 <rdar://problem/45586859> Reviewed by Simon Fraser. * UIProcess/API/Cocoa/WKWebView.mm: * UIProcess/ios/WKKeyboardScrollingAnimator.mm: (-[WKKeyboardScrollingAnimator invalidate]): (-[WKKeyboardScrollingAnimator beginWithEvent:]): (-[WKKeyboardScrollingAnimator stopAnimatedScroll]): (-[WKKeyboardScrollingAnimator willStartInteractiveScroll]): (-[WKKeyboardScrollingAnimator startRepeatTimerIfNeeded]): (-[WKKeyboardScrollingAnimator stopRepeatTimer]): (-[WKKeyboardScrollingAnimator performDiscreteScroll]): (-[WKKeyboardScrollViewAnimator scrollToContentOffset:animated:]): (-[WKKeyboardScrollViewAnimator scrollWithScrollToExtentAnimationTo:]): * WebKit.xcodeproj/project.pbxproj: 2018-12-03 Fujii Hironori <Hironori.Fujii@sony.com> Remove "using namespace WebKit" under Source/WebKit/WebProcess/InjectedBundle/API https://bugs.webkit.org/show_bug.cgi?id=192301 Reviewed by Alex Christensen. Removed "using namespace WebKit" statement, and use "WebKit::" namespace prefix instead. * WebProcess/InjectedBundle/API/c/WKBundle.cpp: * WebProcess/InjectedBundle/API/c/WKBundleBackForwardList.cpp: * WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.cpp: * WebProcess/InjectedBundle/API/c/WKBundleDOMWindowExtension.cpp: * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp: * WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.cpp: * WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp: * WebProcess/InjectedBundle/API/c/WKBundleNavigationAction.cpp: * WebProcess/InjectedBundle/API/c/WKBundleNodeHandle.cpp: * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: * WebProcess/InjectedBundle/API/c/WKBundlePageBanner.cpp: * WebProcess/InjectedBundle/API/c/WKBundlePageGroup.cpp: * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: * WebProcess/InjectedBundle/API/c/WKBundleRangeHandle.cpp: * WebProcess/InjectedBundle/API/c/WKBundleScriptWorld.cpp: 2018-12-03 Chris Dumez <cdumez@apple.com> Regression(PSON) Google OAuth is broken in private sessions https://bugs.webkit.org/show_bug.cgi?id=192337 <rdar://problem/46353558> Reviewed by Alex Christensen. In WebPageProxy::swapToWebProcess(), we would call removeWebPage() on the old WebProcessProxy and then addExistingWebPage() on the new WebProcessProxy, as you would expect in case of process swap. The issue is that WebProcessProxy::removeWebPage() calls WebProcessPool::pageEndUsingWebsiteDataStore() which would cause the session to get destroyed assuming this was the last page using it. We would therefore lose session cookies after a process-swap in private session. To address the issue, a parameter to WebProcessPool::pageEndUsingWebsiteDataStore() and WebProcessPool::pageBeginUsingWebsiteDataStore() to control if we want to tell the WebProcessPool about the page beginning / ending its use of the session. In the case of a process-swap, we make sure the process pool is not notified. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::reattachToWebProcess): (WebKit::WebPageProxy::swapToWebProcess): (WebKit::WebPageProxy::finishAttachingToWebProcess): (WebKit::WebPageProxy::close): * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::createWebPage): (WebKit::WebProcessProxy::addExistingWebPage): (WebKit::WebProcessProxy::removeWebPage): * UIProcess/WebProcessProxy.h: 2018-12-03 Chris Dumez <cdumez@apple.com> [PSON] Request by the client to process-swap is ignored if the window has an opener https://bugs.webkit.org/show_bug.cgi?id=192267 <rdar://problem/46386886> Reviewed by Brady Eidson. If the client forces a process-swap, we should process-swap, even if the browsing context has an opener (or openees). Previously, we would only bypass the cross-site check, not the openee / openees checks. The issue when doing so is that the openee still has a opener link to the window in the old process. They would see that the window is still there and navigated to 'about:blank' due to our page suspension logic. To address the issue, we no longer suspend the old WebPage if the process swap was forced by the client and we make sure that the old WebPage gets closed. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::suspendCurrentPageIfPossible): (WebKit::WebPageProxy::swapToWebProcess): (WebKit::WebPageProxy::receivedNavigationPolicyDecision): (WebKit::WebPageProxy::continueNavigationInNewProcess): * UIProcess/WebPageProxy.h: * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::processForNavigationInternal): 2018-12-03 Keith Rollin <krollin@apple.com> Add .xcfilelist files https://bugs.webkit.org/show_bug.cgi?id=192082 <rdar://problem/46312533> Reviewed by Brent Fulgham. Add .xcfilelist files for Generate Derived Sources and Generate Unified Sources build phases in Xcode. These are just being staged for now; they'll be added to the Xcode projects later. * DerivedSources-input.xcfilelist: Added. * DerivedSources-output.xcfilelist: Added. * UnifiedSources-input.xcfilelist: Added. * UnifiedSources-output.xcfilelist: Added. 2018-12-03 Zalan Bujtas <zalan@apple.com> [iOS] Unreviewed build fix. * Platform/Logging.h: 2018-12-03 Alex Christensen <achristensen@webkit.org> Remove unused NetworkProcessCreationParameters.diskCacheSizeOverride https://bugs.webkit.org/show_bug.cgi?id=192246 Reviewed by Chris Dumez. The last use of this functionality was removed in rdar://problem/46344871 * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::initializeNetworkProcess): (WebKit::NetworkProcess::setCacheModel): * NetworkProcess/NetworkProcess.h: * NetworkProcess/NetworkProcessCreationParameters.cpp: (WebKit::NetworkProcessCreationParameters::encode const): (WebKit::NetworkProcessCreationParameters::decode): * NetworkProcess/NetworkProcessCreationParameters.h: * UIProcess/API/APIProcessPoolConfiguration.cpp: (API::ProcessPoolConfiguration::copy): * UIProcess/API/APIProcessPoolConfiguration.h: * UIProcess/API/C/WKContextConfigurationRef.cpp: (WKContextConfigurationDiskCacheSizeOverride): (WKContextConfigurationSetDiskCacheSizeOverride): * UIProcess/API/C/WKContextConfigurationRef.h: * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h: * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm: (-[_WKProcessPoolConfiguration diskCacheSizeOverride]): (-[_WKProcessPoolConfiguration setDiskCacheSizeOverride:]): * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::ensureNetworkProcess): 2018-12-03 Alex Christensen <achristensen@webkit.org> Add WKWebProcessPlugInLoadDelegate SPI willStartProvisionalLoadForFrame with a completion handler https://bugs.webkit.org/show_bug.cgi?id=192272 Reviewed by Brady Eidson. * WebProcess/InjectedBundle/API/APIInjectedBundlePageLoaderClient.h: (API::InjectedBundle::PageLoaderClient::didStartProvisionalLoadForFrame): * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h: * WebProcess/InjectedBundle/API/glib/WebKitWebPage.cpp: * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm: (ResourceLoadClient::ResourceLoadClient): (ResourceLoadClient::loadDelegate const): (ResourceLoadClient::pluginContextController const): (PageLoaderClient::PageLoaderClient): (PageLoaderClient::loadDelegate const): (PageLoaderClient::pluginContextController const): (PageLoaderClient::didStartProvisionalLoadForFrame): (PageLoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame): (PageLoaderClient::didFinishLoadForFrame): (PageLoaderClient::globalObjectIsAvailableForFrame): (PageLoaderClient::didRemoveFrameFromHierarchy): (PageLoaderClient::didCommitLoadForFrame): (PageLoaderClient::didFinishDocumentLoadForFrame): (PageLoaderClient::didFailProvisionalLoadWithErrorForFrame): (PageLoaderClient::didFailLoadWithErrorForFrame): (PageLoaderClient::didSameDocumentNavigationForFrame): (PageLoaderClient::didLayoutForFrame): (PageLoaderClient::didReachLayoutMilestone): (PageLoaderClient::didFirstVisuallyNonEmptyLayoutForFrame): (PageLoaderClient::didHandleOnloadEventsForFrame): (PageLoaderClient::userAgentForURL const): (ResourceLoadClient::willSendRequestForFrame): (ResourceLoadClient::didInitiateLoadForResource): (ResourceLoadClient::didFinishLoadForResource): (ResourceLoadClient::didFailLoadForResource): (-[WKWebProcessPlugInBrowserContextController setLoadDelegate:]): (didStartProvisionalLoadForFrame): Deleted. (didReceiveServerRedirectForProvisionalLoadForFrame): Deleted. (didFinishLoadForFrame): Deleted. (globalObjectIsAvailableForFrame): Deleted. (didRemoveFrameFromHierarchy): Deleted. (didCommitLoadForFrame): Deleted. (didFinishDocumentLoadForFrame): Deleted. (didFailProvisionalLoadWithErrorForFrame): Deleted. (didFailLoadWithErrorForFrame): Deleted. (didSameDocumentNavigationForFrame): Deleted. (didLayoutForFrame): Deleted. (didReachLayoutMilestone): Deleted. (didFirstVisuallyNonEmptyLayoutForFrame): Deleted. (didHandleOnloadEventsForFrame): Deleted. (userAgentForURL): Deleted. (setUpPageLoaderClient): Deleted. (willSendRequestForFrame): Deleted. (didInitiateLoadForResource): Deleted. (didFinishLoadForResource): Deleted. (didFailLoadForResource): Deleted. (setUpResourceLoadClient): Deleted. * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.cpp: (WebKit::InjectedBundlePageLoaderClient::didStartProvisionalLoadForFrame): * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchDidStartProvisionalLoad): * WebProcess/WebCoreSupport/WebFrameLoaderClient.h: 2018-12-03 Tim Horton <timothy_horton@apple.com> Swipe snapshot stays up too long swiping around on apple.com (waiting for first paint) https://bugs.webkit.org/show_bug.cgi?id=192319 <rdar://problem/45928708> Reviewed by Simon Fraser. * UIProcess/Cocoa/ViewGestureController.cpp: (WebKit::ViewGestureController::didStartProvisionalLoadForMainFrame): * UIProcess/Cocoa/ViewGestureController.h: * UIProcess/ios/ViewGestureControllerIOS.mm: (WebKit::ViewGestureController::endSwipeGesture): In r236966, I reverted slightly too much of r232416. We still need to defer requesting a presentation update callback until after the provisional load starts. Otherwise, we could get the callback while we're in the 'paused' state, and drop it on the floor. That would then mean that we time out instead of promptly removing the snapshot. 2018-12-03 Alex Christensen <achristensen@webkit.org> Update process assertions after swapping processes https://bugs.webkit.org/show_bug.cgi?id=192318 <rdar://problem/46377552> Reviewed by Chris Dumez. If the previous WebProcess had a ProcessAssertion to prevent it from being suspended, after navigation and process swapping we need the new WebProcess to update its process assertions. * UIProcess/API/Cocoa/PageLoadStateObserver.h: * UIProcess/Cocoa/NavigationState.h: * UIProcess/Cocoa/NavigationState.mm: (WebKit::NavigationState::didSwapWebProcesses): * UIProcess/PageLoadState.cpp: (WebKit::PageLoadState::didSwapWebProcesses): * UIProcess/PageLoadState.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::finishAttachingToWebProcess): 2018-12-03 Daniel Bates <dabates@apple.com> [iOS] Do not handle key events that are key commands https://bugs.webkit.org/show_bug.cgi?id=191608 <rdar://problem/46046013> Reviewed by Ryosuke Niwa. A key down event may be associated with a key command. If it is then we want to execute the key command instead of inserting or deleting text. We need to ask UIKit to handle the current event as a key command to find out. * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView _interpretKeyEvent:isCharEvent:]): Ask UIKit to handle the current event as a key command. If it handles it then we're done. Otherwise, do what we do now. 2018-12-03 Zalan Bujtas <zalan@apple.com> [iOS] Add logging channel for hover related content observation https://bugs.webkit.org/show_bug.cgi?id=192312 Reviewed by Simon Fraser. * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::handleSyntheticClick): (WebKit::WebPage::completePendingSyntheticClickForContentChangeObserver): 2018-12-03 Tim Horton <timothy_horton@apple.com> Enable swipe snapshot removal logging in release builds https://bugs.webkit.org/show_bug.cgi?id=192313 Reviewed by Dean Jackson. * UIProcess/Cocoa/ViewGestureController.cpp: (WebKit::ViewGestureController::SnapshotRemovalTracker::log const): This is super-low-traffic and super-helpful logging. Turn it on all the time. 2018-12-03 Yusuke Suzuki <yusukesuzuki@slowstart.org> Use WallTime for file time https://bugs.webkit.org/show_bug.cgi?id=192287 Reviewed by Darin Adler. * Shared/SessionState.h: * Shared/WebCoreArgumentCoders.cpp: (IPC::ArgumentCoder<DatabaseDetails>::decode): * UIProcess/API/C/WKKeyValueStorageManager.cpp: (WKKeyValueStorageManagerGetStorageDetailsByOrigin): * UIProcess/API/glib/WebKitWebViewSessionState.cpp: (decodeHTTPBody): * UIProcess/Plugins/gtk/PluginInfoCache.cpp: (WebKit::PluginInfoCache::getPluginInfo): (WebKit::PluginInfoCache::updatePluginInfo): * UIProcess/ResourceLoadStatisticsPersistentStorage.cpp: (WebKit::hasFileChangedSince): * UIProcess/WebStorage/LocalStorageDatabaseTracker.cpp: (WebKit::LocalStorageDatabaseTracker::databasesModifiedSince): (WebKit::LocalStorageDatabaseTracker::originDetails): * UIProcess/WebStorage/LocalStorageDatabaseTracker.h: * UIProcess/mac/LegacySessionStateCoding.cpp: (WebKit::encodeFormDataElement): (WebKit::decodeFormDataElement): * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp: (WebKit::removeAllMediaKeyStorageForOriginPath): (WebKit::WebMediaKeyStorageManager::deleteMediaKeyEntriesForOrigin): (WebKit::WebMediaKeyStorageManager::deleteMediaKeyEntriesModifiedBetweenDates): (WebKit::WebMediaKeyStorageManager::deleteAllMediaKeyEntries): * WebProcess/MediaCache/WebMediaKeyStorageManager.h: * WebProcess/WebCoreSupport/SessionStateConversion.cpp: (WebKit::toHTTPBody): (WebKit::toFormData): 2018-12-03 Darin Adler <darin@apple.com> [Cocoa] Check message IDs when decoding Mach messages in IPC::Connection https://bugs.webkit.org/show_bug.cgi?id=192300 rdar://problem/46215523 Reviewed by Chris Dumez. * Platform/IPC/mac/ConnectionMac.mm: (IPC::Connection::sendOutgoingMessage): Use message IDs other than 0 and 1 for the messages, as suggested by an expert at Apple. (IPC::createMessageDecoder): Update for the new message IDs. (IPC::Connection::receiveSourceEventHandler): Ignore messages with unexpected message IDs. 2018-12-03 Darin Adler <darin@apple.com> [Cocoa] Check descriptor types in createMessageDecoder https://bugs.webkit.org/show_bug.cgi?id=192302 Reviewed by Chris Dumez. Not sure how to construct a test case for Connection, so not adding any tests at this time. * Platform/IPC/mac/ConnectionMac.mm: (IPC::createMessageDecoder): Check descriptor types and return nullptr if they are incorrect. Retained the assertions to help with debugging. (IPC::Connection::receiveSourceEventHandler): Ignore the message if no decoder is created, which means the message is invalid. 2018-12-03 Darin Adler <darin@apple.com> Alignment padding needs to be zeroed out in IPC::Encoder https://bugs.webkit.org/show_bug.cgi?id=192304 Reviewed by Chris Dumez. Might be useful to make a regression test for this, but I couldn't find any other tests for this code. * Platform/IPC/Encoder.cpp: (IPC::Encoder::grow): Use std::memset to zero-fill padding bytes. * UIProcess/mac/LegacySessionStateCoding.cpp: (WebKit::HistoryEntryDataEncoder::grow): Ditto. 2018-12-03 Darin Adler <darin@apple.com> [Cocoa] Streamline sandbox code a tiny bit https://bugs.webkit.org/show_bug.cgi?id=192299 Reviewed by Anders Carlsson. * Shared/mac/SandboxUtilities.mm: (WebKit::processHasContainer): Removed separate function, just use the pathForProcessContainer instead of repeating logic. This costs a tiny bit of memory allocation overhead the first time this function is called, but in return we can eliminate a second copy of the code to call sandbox_container_path_for_pid. 2018-12-03 Eric Carlson <eric.carlson@apple.com> [MediaStream] 'devicechange' event when more capture device information are revealed. https://bugs.webkit.org/show_bug.cgi?id=192268 Reviewed by Youenn Fablet. * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted): Call captureDevicesChanged if a filtered device list was returned previously. (WebKit::UserMediaPermissionRequestManagerProxy::resetAccess): Clear m_hasFilteredDeviceList. (WebKit::UserMediaPermissionRequestManagerProxy::wasGrantedVideoOrAudioAccess): New. (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame): Filter device list and strip device IDs if gUM permission hasn't been given. (WebKit::UserMediaPermissionRequestManagerProxy::watchdogTimerFired): Clear m_hasFilteredDeviceList. * UIProcess/UserMediaPermissionRequestManagerProxy.h: 2018-12-03 Keith Rollin <krollin@apple.com> Remove Network Capture https://bugs.webkit.org/show_bug.cgi?id=192296 <rdar://problem/46408648> Reviewed by Daniel Bates. r209498 introduced an embedded record and replay facility for network resource loading. This facility was added in order to support a new implementation of the PLT and related performance tests. The PLT is currenty taking a different direction, and so this record/replace facility is no longer needed. Removing it as unused code. * CMakeLists.txt: * NetworkProcess/NetworkLoad.cpp: (WebKit::NetworkLoad::NetworkLoad): (WebKit::NetworkLoad::setDefersLoading): (WebKit::NetworkLoad::continueWillSendRequest): (WebKit::NetworkLoad::willPerformHTTPRedirection): (WebKit::NetworkLoad::notifyDidReceiveResponse): (WebKit::NetworkLoad::didReceiveData): (WebKit::NetworkLoad::didCompleteWithError): (WebKit::NetworkLoad::initializeForRecord): Deleted. (WebKit::NetworkLoad::initializeForReplay): Deleted. * NetworkProcess/NetworkLoad.h: * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::initializeNetworkProcess): (WebKit::NetworkProcess::terminate): * NetworkProcess/NetworkProcessCreationParameters.cpp: (WebKit::NetworkProcessCreationParameters::encode const): (WebKit::NetworkProcessCreationParameters::decode): * NetworkProcess/NetworkProcessCreationParameters.h: * NetworkProcess/capture/NetworkCaptureEvent.cpp: Removed. * NetworkProcess/capture/NetworkCaptureEvent.h: Removed. * NetworkProcess/capture/NetworkCaptureLogging.h: Removed. * NetworkProcess/capture/NetworkCaptureManager.cpp: Removed. * NetworkProcess/capture/NetworkCaptureManager.h: Removed. * NetworkProcess/capture/NetworkCaptureRecorder.cpp: Removed. * NetworkProcess/capture/NetworkCaptureRecorder.h: Removed. * NetworkProcess/capture/NetworkCaptureReplayer.cpp: Removed. * NetworkProcess/capture/NetworkCaptureReplayer.h: Removed. * NetworkProcess/capture/NetworkCaptureResource.cpp: Removed. * NetworkProcess/capture/NetworkCaptureResource.h: Removed. * NetworkProcess/capture/NetworkDataTaskReplay.cpp: Removed. * NetworkProcess/capture/NetworkDataTaskReplay.h: Removed. * NetworkProcess/capture/json.hpp: Removed. * Sources.txt: * UIProcess/Cocoa/WebProcessPoolCocoa.mm: (WebKit::WebProcessPool::platformInitializeNetworkProcess): * WebKit.xcodeproj/project.pbxproj: * config.h: 2018-12-02 Zalan Bujtas <zalan@apple.com> Add a runtime feature flag for LayoutFormattingContext. https://bugs.webkit.org/show_bug.cgi?id=192280 Reviewed by Simon Fraser. * Configurations/FeatureDefines.xcconfig: * Shared/WebPreferences.yaml: * WebProcess/InjectedBundle/InjectedBundle.cpp: (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner): 2018-12-01 Chris Dumez <cdumez@apple.com> [PSON] process-swapping may occur even though opener has handle to openee https://bugs.webkit.org/show_bug.cgi?id=192277 Reviewed by Antti Koivisto. * Shared/NavigationActionData.cpp: (WebKit::NavigationActionData::encode const): (WebKit::NavigationActionData::decode): * Shared/NavigationActionData.h: * UIProcess/API/APINavigation.h: (API::Navigation::openedByDOMWithOpener const): (API::Navigation::openedViaWindowOpenWithOpener const): Deleted. (API::Navigation::opener const): Deleted. * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::processForNavigationInternal): * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): 2018-12-01 Alexey Proskuryakov <ap@apple.com> Modernize version check for _suppressedAutoAddedHTTPHeaders https://bugs.webkit.org/show_bug.cgi?id=192175 Reviewed by Tim Horton. * NetworkProcess/cocoa/NetworkSessionCocoa.mm: (WebKit::NetworkSessionCocoa::NetworkSessionCocoa): Also removed selector check - we only need to support running on 10.13.0 when building with 10.13.0 SDK. 2018-11-30 Alex Christensen <achristensen@webkit.org> Fix Windows build. * UIProcess/API/C/curl/WKWebsiteDataStoreRefCurl.cpp: (WKWebsiteDataStoreEnableCustomNetworkProxySettings): 2018-11-30 Alex Christensen <achristensen@webkit.org> Move URL from WebCore to WTF https://bugs.webkit.org/show_bug.cgi?id=190234 Reviewed by Keith Miller. * NetworkProcess/Cookies/WebCookieManager.cpp: * NetworkProcess/Cookies/WebCookieManager.h: * NetworkProcess/Cookies/WebCookieManager.messages.in: * NetworkProcess/CustomProtocols/Cocoa/LegacyCustomProtocolManagerCocoa.mm: * NetworkProcess/Downloads/Download.h: * NetworkProcess/Downloads/DownloadManager.cpp: (WebKit::DownloadManager::publishDownloadProgress): * NetworkProcess/Downloads/DownloadManager.h: * NetworkProcess/Downloads/PendingDownload.cpp: (WebKit::PendingDownload::publishProgress): * NetworkProcess/Downloads/PendingDownload.h: * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm: (WebKit::Download::publishProgress): * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp: (WebKit::NetworkBlobRegistry::registerBlobURL): (WebKit::NetworkBlobRegistry::registerBlobURLForSlice): (WebKit::NetworkBlobRegistry::unregisterBlobURL): (WebKit::NetworkBlobRegistry::blobSize): (WebKit::NetworkBlobRegistry::filesInBlob): * NetworkProcess/FileAPI/NetworkBlobRegistry.h: * NetworkProcess/NetworkConnectionToWebProcess.h: * NetworkProcess/NetworkConnectionToWebProcess.messages.in: * NetworkProcess/NetworkDataTask.cpp: (WebKit::NetworkDataTask::didReceiveResponse): * NetworkProcess/NetworkDataTaskBlob.cpp: * NetworkProcess/NetworkLoadChecker.h: (WebKit::NetworkLoadChecker::setContentExtensionController): (WebKit::NetworkLoadChecker::url const): * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::writeBlobToFilePath): (WebKit::NetworkProcess::publishDownloadProgress): (WebKit::NetworkProcess::preconnectTo): * NetworkProcess/NetworkProcess.h: * NetworkProcess/NetworkProcess.messages.in: * NetworkProcess/NetworkResourceLoadParameters.h: * NetworkProcess/NetworkResourceLoader.cpp: (WebKit::logBlockedCookieInformation): (WebKit::logCookieInformationInternal): * NetworkProcess/NetworkResourceLoader.h: * NetworkProcess/NetworkSocketStream.cpp: (WebKit::NetworkSocketStream::create): * NetworkProcess/NetworkSocketStream.h: * NetworkProcess/PingLoad.h: * NetworkProcess/ServiceWorker/WebSWServerConnection.h: * NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in: * NetworkProcess/ServiceWorker/WebSWServerToContextConnection.messages.in: * NetworkProcess/cache/CacheStorageEngine.cpp: (WebKit::CacheStorage::Engine::retrieveRecords): * NetworkProcess/cache/CacheStorageEngine.h: * NetworkProcess/cache/CacheStorageEngineCache.h: * NetworkProcess/cache/CacheStorageEngineConnection.cpp: (WebKit::CacheStorageEngineConnection::retrieveRecords): * NetworkProcess/cache/CacheStorageEngineConnection.h: * NetworkProcess/cache/CacheStorageEngineConnection.messages.in: * NetworkProcess/cache/NetworkCache.h: * NetworkProcess/cache/NetworkCacheStatistics.cpp: (WebKit::NetworkCache::Statistics::recordRetrievedCachedEntry): (WebKit::NetworkCache::Statistics::recordRevalidationSuccess): * NetworkProcess/cache/NetworkCacheSubresourcesEntry.h: (WebKit::NetworkCache::SubresourceInfo::firstPartyForCookies const): * NetworkProcess/capture/NetworkCaptureEvent.cpp: (WebKit::NetworkCapture::Request::operator WebCore::ResourceRequest const): (WebKit::NetworkCapture::Response::operator WebCore::ResourceResponse const): (WebKit::NetworkCapture::Error::operator WebCore::ResourceError const): * NetworkProcess/capture/NetworkCaptureManager.cpp: (WebKit::NetworkCapture::Manager::findBestFuzzyMatch): (WebKit::NetworkCapture::Manager::fuzzyMatchURLs): (WebKit::NetworkCapture::Manager::urlIdentifyingCommonDomain): * NetworkProcess/capture/NetworkCaptureManager.h: * NetworkProcess/capture/NetworkCaptureResource.cpp: (WebKit::NetworkCapture::Resource::url): (WebKit::NetworkCapture::Resource::queryParameters): * NetworkProcess/capture/NetworkCaptureResource.h: * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection): * NetworkProcess/cocoa/NetworkProcessCocoa.mm: (WebKit::NetworkProcess::deleteHSTSCacheForHostNames): * NetworkProcess/cocoa/NetworkSessionCocoa.mm: (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]): * PluginProcess/mac/PluginProcessMac.mm: (WebKit::openCFURLRef): (WebKit::replacedNSWorkspace_launchApplicationAtURL_options_configuration_error): * Shared/API/APIURL.h: (API::URL::create): (API::URL::equals): (API::URL::URL): (API::URL::url const): (API::URL::parseURLIfNecessary const): * Shared/API/APIUserContentURLPattern.h: (API::UserContentURLPattern::matchesURL const): * Shared/API/c/WKURLRequest.cpp: * Shared/API/c/WKURLResponse.cpp: * Shared/API/c/cf/WKURLCF.mm: (WKURLCreateWithCFURL): (WKURLCopyCFURL): * Shared/API/glib/WebKitURIRequest.cpp: * Shared/API/glib/WebKitURIResponse.cpp: * Shared/APIWebArchiveResource.mm: (API::WebArchiveResource::WebArchiveResource): * Shared/AssistedNodeInformation.h: * Shared/Cocoa/WKNSURLExtras.mm: (-[NSURL _web_originalDataAsWTFString]): (): Deleted. * Shared/SessionState.h: * Shared/WebBackForwardListItem.cpp: (WebKit::WebBackForwardListItem::itemIsInSameDocument const): * Shared/WebCoreArgumentCoders.cpp: * Shared/WebCoreArgumentCoders.h: * Shared/WebErrors.h: * Shared/WebHitTestResultData.cpp: * Shared/cf/ArgumentCodersCF.cpp: (IPC::encode): (IPC::decode): * Shared/gtk/WebErrorsGtk.cpp: * Shared/ios/InteractionInformationAtPosition.h: * UIProcess/API/APIHTTPCookieStore.h: * UIProcess/API/APINavigation.cpp: (API::Navigation::appendRedirectionURL): * UIProcess/API/APINavigation.h: (API::Navigation::takeRedirectChain): * UIProcess/API/APINavigationAction.h: * UIProcess/API/APINavigationClient.h: (API::NavigationClient::signedPublicKeyAndChallengeString): (API::NavigationClient::contentRuleListNotification): (API::NavigationClient::webGLLoadPolicy const): (API::NavigationClient::resolveWebGLLoadPolicy const): * UIProcess/API/APIUIClient.h: (API::UIClient::saveDataToFileInDownloadsFolder): * UIProcess/API/APIUserScript.cpp: (API::UserScript::generateUniqueURL): * UIProcess/API/APIUserScript.h: * UIProcess/API/APIUserStyleSheet.cpp: (API::UserStyleSheet::generateUniqueURL): * UIProcess/API/APIUserStyleSheet.h: * UIProcess/API/C/WKOpenPanelResultListener.cpp: (filePathsFromFileURLs): * UIProcess/API/C/WKPage.cpp: (WKPageLoadPlainTextStringWithUserData): (WKPageSetPageUIClient): (WKPageSetPageNavigationClient): * UIProcess/API/C/WKPageGroup.cpp: (WKPageGroupAddUserStyleSheet): (WKPageGroupAddUserScript): * UIProcess/API/C/WKWebsiteDataStoreRef.cpp: (WKWebsiteDataStoreSetResourceLoadStatisticsPrevalentResourceForDebugMode): (WKWebsiteDataStoreSetStatisticsLastSeen): (WKWebsiteDataStoreSetStatisticsPrevalentResource): (WKWebsiteDataStoreSetStatisticsVeryPrevalentResource): (WKWebsiteDataStoreIsStatisticsPrevalentResource): (WKWebsiteDataStoreIsStatisticsVeryPrevalentResource): (WKWebsiteDataStoreIsStatisticsRegisteredAsSubresourceUnder): (WKWebsiteDataStoreIsStatisticsRegisteredAsSubFrameUnder): (WKWebsiteDataStoreIsStatisticsRegisteredAsRedirectingTo): (WKWebsiteDataStoreSetStatisticsHasHadUserInteraction): (WKWebsiteDataStoreIsStatisticsHasHadUserInteraction): (WKWebsiteDataStoreSetStatisticsGrandfathered): (WKWebsiteDataStoreIsStatisticsGrandfathered): (WKWebsiteDataStoreSetStatisticsSubframeUnderTopFrameOrigin): (WKWebsiteDataStoreSetStatisticsSubresourceUnderTopFrameOrigin): (WKWebsiteDataStoreSetStatisticsSubresourceUniqueRedirectTo): (WKWebsiteDataStoreSetStatisticsSubresourceUniqueRedirectFrom): (WKWebsiteDataStoreSetStatisticsTopFrameUniqueRedirectTo): (WKWebsiteDataStoreSetStatisticsTopFrameUniqueRedirectFrom): * UIProcess/API/Cocoa/WKHTTPCookieStore.mm: * UIProcess/API/Cocoa/WKUserScript.mm: (-[WKUserScript _initWithSource:injectionTime:forMainFrameOnly:legacyWhitelist:legacyBlacklist:associatedURL:userContentWorld:]): * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _showSafeBrowsingWarning:completionHandler:]): (-[WKWebView _showSafeBrowsingWarningWithTitle:warning:details:completionHandler:]): * UIProcess/API/Cocoa/WKWebViewConfiguration.mm: (-[WKWebViewConfiguration setURLSchemeHandler:forURLScheme:]): (-[WKWebViewConfiguration urlSchemeHandlerForURLScheme:]): * UIProcess/API/Cocoa/WKWebViewInternal.h: * UIProcess/API/Cocoa/WKWebsiteDataStore.mm: * UIProcess/API/Cocoa/_WKApplicationManifest.mm: (-[_WKApplicationManifest initWithCoder:]): (+[_WKApplicationManifest applicationManifestFromJSON:manifestURL:documentURL:]): * UIProcess/API/Cocoa/_WKUserStyleSheet.mm: (-[_WKUserStyleSheet initWithSource:forMainFrameOnly:legacyWhitelist:legacyBlacklist:baseURL:userContentWorld:]): * UIProcess/API/glib/IconDatabase.cpp: * UIProcess/API/glib/WebKitCookieManager.cpp: (webkit_cookie_manager_get_cookies): * UIProcess/API/glib/WebKitFileChooserRequest.cpp: * UIProcess/API/glib/WebKitSecurityOrigin.cpp: (webkit_security_origin_new_for_uri): * UIProcess/API/glib/WebKitUIClient.cpp: * UIProcess/API/glib/WebKitURISchemeRequest.cpp: * UIProcess/API/glib/WebKitWebView.cpp: (webkit_web_view_load_plain_text): * UIProcess/API/gtk/WebKitRemoteInspectorProtocolHandler.cpp: * UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp: (WebKit::WebPaymentCoordinatorProxy::showPaymentUI): (WebKit::WebPaymentCoordinatorProxy::validateMerchant): * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h: * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.h: * UIProcess/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm: (WebKit::toPKPaymentRequest): * UIProcess/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm: (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI): * UIProcess/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm: (WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI): * UIProcess/Automation/WebAutomationSession.cpp: (WebKit::WebAutomationSession::navigateBrowsingContext): (WebKit::domainByAddingDotPrefixIfNeeded): (WebKit::WebAutomationSession::addSingleCookie): (WebKit::WebAutomationSession::deleteAllCookies): * UIProcess/Cocoa/DownloadClient.mm: (WebKit::DownloadClient::didFinish): * UIProcess/Cocoa/NavigationState.h: * UIProcess/Cocoa/NavigationState.mm: (WebKit::NavigationState::NavigationClient::webGLLoadPolicy const): (WebKit::NavigationState::NavigationClient::resolveWebGLLoadPolicy const): (WebKit::NavigationState::NavigationClient::contentRuleListNotification): (WebKit::NavigationState::NavigationClient::willPerformClientRedirect): (WebKit::NavigationState::NavigationClient::didPerformClientRedirect): (WebKit::NavigationState::NavigationClient::signedPublicKeyAndChallengeString): * UIProcess/Cocoa/SafeBrowsingResultCocoa.mm: Copied from Source/WebKit/WebProcess/Network/WebSocketProvider.h. (WebKit::SafeBrowsingResult::SafeBrowsingResult): * UIProcess/Cocoa/SafeBrowsingWarningCocoa.mm: (WebKit::reportAnErrorURL): (WebKit::malwareDetailsURL): (WebKit::safeBrowsingDetailsText): (WebKit::SafeBrowsingWarning::SafeBrowsingWarning): * UIProcess/Cocoa/SystemPreviewControllerCocoa.mm: (-[_WKPreviewControllerDataSource finish:]): (WebKit::SystemPreviewController::finish): * UIProcess/Cocoa/UIDelegate.h: * UIProcess/Cocoa/UIDelegate.mm: (WebKit::UIDelegate::UIClient::createNewPage): (WebKit::UIDelegate::UIClient::saveDataToFileInDownloadsFolder): (WebKit::requestUserMediaAuthorizationForDevices): (WebKit::UIDelegate::UIClient::checkUserMediaPermissionForOrigin): * UIProcess/Cocoa/WKReloadFrameErrorRecoveryAttempter.mm: (-[WKReloadFrameErrorRecoveryAttempter attemptRecovery]): * UIProcess/Cocoa/WKSafeBrowsingWarning.h: * UIProcess/Cocoa/WKSafeBrowsingWarning.mm: (-[WKSafeBrowsingWarning initWithFrame:safeBrowsingWarning:completionHandler:]): * UIProcess/Cocoa/WebPasteboardProxyCocoa.mm: * UIProcess/Cocoa/WebViewImpl.h: * UIProcess/Cocoa/WebViewImpl.mm: (WebKit::WebViewImpl::showSafeBrowsingWarning): (WebKit::WebViewImpl::writeToURLForFilePromiseProvider): * UIProcess/Downloads/DownloadProxy.cpp: (WebKit::DownloadProxy::publishProgress): * UIProcess/Downloads/DownloadProxy.h: (WebKit::DownloadProxy::setRedirectChain): (WebKit::DownloadProxy::redirectChain const): * UIProcess/FrameLoadState.cpp: (WebKit::FrameLoadState::didStartProvisionalLoad): (WebKit::FrameLoadState::didReceiveServerRedirectForProvisionalLoad): (WebKit::FrameLoadState::didSameDocumentNotification): (WebKit::FrameLoadState::setUnreachableURL): * UIProcess/FrameLoadState.h: (WebKit::FrameLoadState::url const): (WebKit::FrameLoadState::setURL): (WebKit::FrameLoadState::provisionalURL const): (WebKit::FrameLoadState::unreachableURL const): * UIProcess/Network/NetworkProcessProxy.cpp: (WebKit::NetworkProcessProxy::writeBlobToFilePath): * UIProcess/Network/NetworkProcessProxy.h: * UIProcess/PageClient.h: (WebKit::PageClient::showSafeBrowsingWarning): * UIProcess/PageLoadState.cpp: (WebKit::PageLoadState::hasOnlySecureContent): * UIProcess/Plugins/PluginInfoStore.cpp: * UIProcess/Plugins/PluginInfoStore.h: * UIProcess/Plugins/mac/PluginProcessProxyMac.mm: * UIProcess/SafeBrowsingResult.h: Copied from Source/WebKit/UIProcess/SystemPreviewController.h. (WebKit::SafeBrowsingResult::create): (WebKit::SafeBrowsingResult::url const): (WebKit::SafeBrowsingResult::provider const): (WebKit::SafeBrowsingResult::isPhishing const): (WebKit::SafeBrowsingResult::isMalware const): (WebKit::SafeBrowsingResult::isUnwantedSoftware const): (WebKit::SafeBrowsingResult::isKnownToBeUnsafe const): * UIProcess/SafeBrowsingWarning.h: (WebKit::SafeBrowsingWarning::create): * UIProcess/SuspendedPageProxy.cpp: * UIProcess/SystemPreviewController.h: * UIProcess/WebCookieManagerProxy.h: * UIProcess/WebFrameProxy.h: (WebKit::WebFrameProxy::url const): (WebKit::WebFrameProxy::provisionalURL const): (WebKit::WebFrameProxy::unreachableURL const): * UIProcess/WebInspectorProxy.h: * UIProcess/WebOpenPanelResultListenerProxy.cpp: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::loadDataWithNavigation): (WebKit::WebPageProxy::loadAlternateHTML): (WebKit::WebPageProxy::loadWebArchiveData): (WebKit::WebPageProxy::navigateToPDFLinkWithSimulatedClick): (WebKit::WebPageProxy::continueNavigationInNewProcess): (WebKit::WebPageProxy::didStartProvisionalLoadForFrame): (WebKit::WebPageProxy::didChangeProvisionalURLForFrame): (WebKit::WebPageProxy::didSameDocumentNavigationForFrame): (WebKit::WebPageProxy::contentRuleListNotification): (WebKit::WebPageProxy::processDidTerminate): (WebKit::WebPageProxy::signedPublicKeyAndChallengeString): (WebKit::WebPageProxy::setURLSchemeHandlerForScheme): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::tryPrewarmWithDomainInformation): * UIProcess/WebProcessPool.h: * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch): * UIProcess/WebProcessProxy.h: * UIProcess/WebResourceLoadStatisticsStore.cpp: (WebKit::WebResourceLoadStatisticsStore::setPrevalentResourceForDebugMode): (WebKit::WebResourceLoadStatisticsStore::logFrameNavigation): * UIProcess/WebResourceLoadStatisticsStore.h: * UIProcess/ios/DragDropInteractionState.h: * UIProcess/ios/PageClientImplIOS.h: * UIProcess/ios/PageClientImplIOS.mm: (WebKit::PageClientImpl::showSafeBrowsingWarning): * UIProcess/ios/WKActionSheetAssistant.mm: (-[WKActionSheetAssistant _createSheetWithElementActions:showLinkTitle:]): * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView actionSheetAssistant:shareElementWithURL:rect:]): (-[WKContentView _presentedViewControllerForPreviewItemController:]): * UIProcess/ios/WKGeolocationProviderIOS.mm: (-[WKGeolocationProviderIOS geolocationAuthorizationGranted]): * UIProcess/ios/WKLegacyPDFView.mm: (-[WKLegacyPDFView actionSheetAssistant:shareElementWithURL:rect:]): * UIProcess/ios/WKPDFView.mm: (-[WKPDFView actionSheetAssistant:shareElementWithURL:rect:]): * UIProcess/ios/fullscreen/WKFullScreenWindowControllerIOS.mm: (-[WKFullScreenWindowController _updateLocationInfo]): * UIProcess/mac/LegacySessionStateCoding.cpp: (WebKit::decodeLegacySessionState): * UIProcess/mac/PageClientImplMac.h: * UIProcess/mac/PageClientImplMac.mm: (WebKit::PageClientImpl::showSafeBrowsingWarning): * UIProcess/mac/WKImmediateActionController.mm: (-[WKImmediateActionController _defaultAnimationController]): * UIProcess/win/WebInspectorProxyWin.cpp: * WebProcess/ApplePay/WebPaymentCoordinator.cpp: (WebKit::WebPaymentCoordinator::showPaymentUI): (WebKit::WebPaymentCoordinator::validateMerchant): * WebProcess/ApplePay/WebPaymentCoordinator.h: * WebProcess/Cache/WebCacheStorageConnection.cpp: (WebKit::WebCacheStorageConnection::doRetrieveRecords): * WebProcess/Cache/WebCacheStorageConnection.h: * WebProcess/FileAPI/BlobRegistryProxy.cpp: (WebKit::BlobRegistryProxy::registerFileBlobURL): * WebProcess/FileAPI/BlobRegistryProxy.h: * WebProcess/InjectedBundle/API/APIInjectedBundlePageLoaderClient.h: (API::InjectedBundle::PageLoaderClient::willLoadDataRequest): (API::InjectedBundle::PageLoaderClient::userAgentForURL const): * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp: (WKBundleFrameAllowsFollowingLink): (WKBundleFrameCopySuggestedFilenameForResourceWithURL): (WKBundleFrameCopyMIMETypeForResourceWithURL): * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp: (WKBundlePageHasLocalDataForURL): * WebProcess/InjectedBundle/API/gtk/DOM/ConvertToUTF8String.cpp: (convertToUTF8String): * WebProcess/InjectedBundle/API/gtk/DOM/ConvertToUTF8String.h: * WebProcess/InjectedBundle/InjectedBundleHitTestResult.cpp: * WebProcess/InjectedBundle/InjectedBundlePageLoaderClient.h: * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp: * WebProcess/Network/WebLoaderStrategy.cpp: (WebKit::WebLoaderStrategy::preconnectTo): * WebProcess/Network/WebLoaderStrategy.h: * WebProcess/Network/WebSocketProvider.h: * WebProcess/Network/WebSocketStream.cpp: (WebKit::WebSocketStream::WebSocketStream): * WebProcess/Network/WebSocketStream.h: * WebProcess/Plugins/Netscape/NetscapePlugin.cpp: * WebProcess/Plugins/Netscape/NetscapePlugin.h: * WebProcess/Plugins/Netscape/NetscapePluginStream.h: * WebProcess/Plugins/PDF/PDFPlugin.h: * WebProcess/Plugins/PDF/PDFPlugin.mm: (WebKit::PDFPlugin::clickedLink): * WebProcess/Plugins/Plugin.h: * WebProcess/Plugins/PluginController.h: * WebProcess/Plugins/PluginProxy.h: * WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::performURLRequest): (WebKit::PluginView::performJavaScriptURLRequest): * WebProcess/Plugins/WebPluginInfoProvider.cpp: (WebKit::WebPluginInfoProvider::webVisiblePluginInfo): * WebProcess/Plugins/WebPluginInfoProvider.h: * WebProcess/Storage/WebSWClientConnection.h: * WebProcess/Storage/WebSWContextManagerConnection.h: * WebProcess/UserContent/WebUserContentController.h: * WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::signedPublicKeyAndChallengeString const): * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/WebContextMenuClient.h: * WebProcess/WebCoreSupport/WebDragClient.h: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse): (WebKit::WebFrameLoaderClient::shouldForceUniversalAccessFromLocalURL): * WebProcess/WebCoreSupport/WebFrameLoaderClient.h: * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp: (WebKit::WebPlatformStrategies::readURLFromPasteboard): * WebProcess/WebCoreSupport/WebPlatformStrategies.h: * WebProcess/WebCoreSupport/mac/WebDragClientMac.mm: (WebKit::WebDragClient::declareAndWriteDragImage): * WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm: * WebProcess/WebPage/VisitedLinkTableController.h: * WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::allowsFollowingLink const): * WebProcess/WebPage/WebFrame.h: * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::loadURLInFrame): (WebKit::WebPage::loadData): (WebKit::WebPage::loadAlternateHTML): (WebKit::WebPage::dumpHistoryForTesting): (WebKit::WebPage::sendCSPViolationReport): (WebKit::WebPage::addUserScript): (WebKit::WebPage::addUserStyleSheet): * WebProcess/WebPage/WebPage.h: * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp: (WebKit::WebPrintOperationGtk::frameURL const): * WebProcess/WebPage/gtk/WebPrintOperationGtk.h: * WebProcess/WebProcess.cpp: (WebKit::WebProcess::sendPrewarmInformation): * WebProcess/WebProcess.h: * WebProcess/cocoa/WebProcessCocoa.mm: (WebKit::activePagesOrigins): 2018-11-30 Per Arne Vollan <pvollan@apple.com> [macOS] Add more logging of sandbox call entries. https://bugs.webkit.org/show_bug.cgi?id=192261 rdar://problem/45772445 Reviewed by Dean Jackson. * WebProcess/com.apple.WebProcess.sb.in: 2018-11-30 Tim Horton <timothy_horton@apple.com> Editable images should always return some data, even if the canvas doesn't have a size yet https://bugs.webkit.org/show_bug.cgi?id=192265 <rdar://problem/46385911> Reviewed by Wenson Hsieh. * UIProcess/ios/WKDrawingView.mm: (-[WKDrawingView layoutSubviews]): (emptyImage): (-[WKDrawingView renderedDrawing]): (-[WKDrawingView PNGRepresentation]): Some clients strongly depend on there being some data in an image, even if it's not of a usable size yet. We'll invalidate the attachment when the canvas size changes, so it will eventually settle at a usable size (after the first layer tree commit that includes the editable image). 2018-11-30 Don Olmstead <don.olmstead@sony.com> Rename ENABLE_SUBTLE_CRYPTO to ENABLE_WEB_CRYPTO https://bugs.webkit.org/show_bug.cgi?id=192197 Reviewed by Jiewen Tan. * Configurations/FeatureDefines.xcconfig: * UIProcess/API/C/WKPage.cpp: (WKPageSetPageNavigationClient): * UIProcess/WebPageProxy.cpp: * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * WebProcess/WebCoreSupport/WebChromeClient.cpp: * WebProcess/WebCoreSupport/WebChromeClient.h: 2018-11-30 Alexey Proskuryakov <ap@apple.com> Move USE_CFNETWORK_IGNORE_HSTS to its proper place https://bugs.webkit.org/show_bug.cgi?id=192173 Reviewed by Tim Horton. * NetworkProcess/cocoa/NetworkSessionCocoa.mm: (updateIgnoreStrictTransportSecuritySettingIfNecessary): (-[WKNetworkSessionDelegate URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:]): (-[WKNetworkSessionDelegate URLSession:task:_schemeUpgraded:completionHandler:]): 2018-11-30 Alex Christensen <achristensen@webkit.org> Remove unused WebProcessCreationParameters.uiProcessCookieStorageIdentifier https://bugs.webkit.org/show_bug.cgi?id=192157 Reviewed by Chris Dumez. * Shared/WebProcessCreationParameters.cpp: (WebKit::WebProcessCreationParameters::encode const): (WebKit::WebProcessCreationParameters::decode): * Shared/WebProcessCreationParameters.h: * UIProcess/Cocoa/WebProcessPoolCocoa.mm: (WebKit::WebProcessPool::platformInitializeWebProcess): 2018-11-30 Alex Christensen <achristensen@webkit.org> Remove privateBrowsingEnabled from NetworkProcessCreationParameters https://bugs.webkit.org/show_bug.cgi?id=192156 Reviewed by Chris Dumez. * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::initializeNetworkProcess): * NetworkProcess/NetworkProcessCreationParameters.cpp: (WebKit::NetworkProcessCreationParameters::encode const): (WebKit::NetworkProcessCreationParameters::decode): * NetworkProcess/NetworkProcessCreationParameters.h: * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::ensureNetworkProcess): 2018-11-30 Basuke Suzuki <basuke.suzuki@sony.com> [Curl] Add API for ProtectionSpace. https://bugs.webkit.org/show_bug.cgi?id=191648 Reviewed by Alex Christensen. Added API to get certificate information from protection space. * PlatformWin.cmake: * Shared/curl/WebCoreArgumentCodersCurl.cpp: (IPC::ArgumentCoder<ProtectionSpace>::encodePlatformData): (IPC::ArgumentCoder<ProtectionSpace>::decodePlatformData): * UIProcess/API/C/curl/WKProtectionSpaceCurl.cpp: Added. (WKProtectionSpaceCopyCertificateInfo): * UIProcess/API/C/curl/WKProtectionSpaceCurl.h: Added. 2018-11-30 David Quesada <david_quesada@apple.com> -[WKProcessPool _downloadURLRequest:] should allow specifying the initiating web view https://bugs.webkit.org/show_bug.cgi?id=192212 rdar://problem/46363706 Reviewed by Alex Christensen. * UIProcess/API/Cocoa/WKProcessPool.mm: (-[WKProcessPool _downloadURLRequest:originatingWebView:]): (-[WKProcessPool _downloadURLRequest:]): Deleted. * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: 2018-11-30 Per Arne Vollan <pvollan@apple.com> Remove invalid character in sandbox introduced in r238703. Unreviewed sandbox fix. * WebProcess/com.apple.WebProcess.sb.in: 2018-11-30 Andy Estes <aestes@apple.com> [Cocoa] Add some WKA extension points https://bugs.webkit.org/show_bug.cgi?id=192131 <rdar://problem/46330293> Reviewed by Tim Horton. * DerivedSources.make: Added an extension point for WebPreferences.yaml. * Platform/IPC/MessageSender.h: (IPC::MessageSender::sendWithAsyncReply): Send async messages via IPC::MessageSender. * Platform/cocoa/WebKitAdditions.mm: A an extension point for additional WebKit sources. * SourcesCocoa.txt: Added WebKitAdditions.mm as non-unified source. * UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp: (WebKit::WebPaymentCoordinatorProxy::WebPaymentCoordinatorProxy): Called finishConstruction. * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h: Added an extension point for WebPaymentCoordinatorProxy. * WebKit.xcodeproj/project.pbxproj: Added WebKitAdditions.mm. * WebProcess/ApplePay/WebPaymentCoordinator.h: Added an extension point for WebPaymentCoordinator. 2018-11-30 Frederic Wang <fwang@igalia.com> [WebAuthN] Support CTAP HID authenticators on macOS https://bugs.webkit.org/show_bug.cgi?id=188623 Unreviewed build fix. * UIProcess/WebAuthentication/Cocoa/HidConnection.mm: Add missing header. 2018-11-29 Wenson Hsieh <wenson_hsieh@apple.com> REGRESSION (r238635): Dragging a text selection within WKWebView causes the selection highlight to get into a bad state https://bugs.webkit.org/show_bug.cgi?id=192165 <rdar://problem/46346682> Reviewed by Daniel Bates. Fixes a bug in PageClientImpl::isViewFocused. Consider the following scenario: 1. WKWebView is hosted within the view hierarchy 2. First responder is *not* WKContentView 3. The active focus retain count is nonzero Before r238635, we would return true, due to condition (3). However, after r238635, we only consider whether the first responder is WKContentView, since the web view is in the view hierarchy. This breaks scenarios where WebKit or UIKit attempts to retain focus and later restore the content view to be the first responder (an example of this is dragging a text selection between editable elements in the same web view). To fix this, simply bail early and return true if focus is being retained. * UIProcess/ios/PageClientImplIOS.mm: (WebKit::PageClientImpl::isViewFocused): 2018-11-29 Tim Horton <timothy_horton@apple.com> Inform clients when editable image attachment backing data changes https://bugs.webkit.org/show_bug.cgi?id=192206 <rdar://problem/46350277> Reviewed by Wenson Hsieh. * UIProcess/API/Cocoa/APIAttachmentCocoa.mm: (API::Attachment::invalidateGeneratedFileWrapper): * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _didInvalidateDataForAttachment:]): * UIProcess/API/Cocoa/WKWebViewInternal.h: * UIProcess/Cocoa/PageClientImplCocoa.h: * UIProcess/Cocoa/PageClientImplCocoa.mm: (WebKit::PageClientImplCocoa::didInvalidateDataForAttachment): * UIProcess/PageClient.h: (WebKit::PageClient::didInvalidateDataForAttachment): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didInvalidateDataForAttachment): * UIProcess/WebPageProxy.h: Plumb file-wrapper-invalidation through from APIAttachment to WKUIDelegate. 2018-11-29 Eric Carlson <eric.carlson@apple.com> [MediaStream] DeviceIdHashSaltStorage should use iframe and top level documents https://bugs.webkit.org/show_bug.cgi?id=192182 Reviewed by Youenn Fablet. * UIProcess/DeviceIdHashSaltStorage.cpp: (WebKit::DeviceIdHashSaltStorage::deviceIdHashSaltForOrigin): Key off of request and top level documents. (WebKit::DeviceIdHashSaltStorage::deleteDeviceIdHashSaltForOrigins): Ditto. * UIProcess/DeviceIdHashSaltStorage.h: (WebKit::DeviceIdHashSaltStorage::HashSaltForOrigin::HashSaltForOrigin): * UIProcess/UserMediaPermissionRequestManagerProxy.cpp: (WebKit::UserMediaPermissionRequestManagerProxy::userMediaAccessWasGranted): Pass both documents. (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame): Ditto. (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame): Ditto. 2018-11-29 Ryan Haddad <ryanhaddad@apple.com> Unreviewed, rolling out r238713. Breaks internal builds. Reverted changeset: "[Cocoa] Add some WKA extension points" https://bugs.webkit.org/show_bug.cgi?id=192131 https://trac.webkit.org/changeset/238713 2018-11-29 Simon Fraser <simon.fraser@apple.com> Add an internal feature flag to enable async overflow scrolling https://bugs.webkit.org/show_bug.cgi?id=192184 Reviewed by Tim Horton. Add a new internal feature flag that will enable async overflow-scrolling for most overflow:scroll elements. Defaults to off. * Shared/WebPreferences.yaml: 2018-11-29 Andy Estes <aestes@apple.com> [Cocoa] Add some WKA extension points https://bugs.webkit.org/show_bug.cgi?id=192131 <rdar://problem/46330293> Reviewed by Tim Horton. * DerivedSources.make: Added an extension point for WebPreferences.yaml. * Platform/IPC/MessageSender.h: (IPC::MessageSender::sendWithAsyncReply): Send async messages via IPC::MessageSender. * Platform/cocoa/WebKitAdditions.mm: A an extension point for additional WebKit sources. * SourcesCocoa.txt: Added WebKitAdditions.mm as non-unified source. * UIProcess/ApplePay/WebPaymentCoordinatorProxy.cpp: (WebKit::WebPaymentCoordinatorProxy::WebPaymentCoordinatorProxy): Called finishConstruction. * UIProcess/ApplePay/WebPaymentCoordinatorProxy.h: Added an extension point for WebPaymentCoordinatorProxy. * WebKit.xcodeproj/project.pbxproj: Added WebKitAdditions.mm. * WebProcess/ApplePay/WebPaymentCoordinator.h: Added an extension point for WebPaymentCoordinator. 2018-11-29 Tim Horton <timothy_horton@apple.com> Try to fix the build. * Platform/spi/ios/PencilKitSPI.h: 2018-11-29 David Quesada <david_quesada@apple.com> Add SPI to publish NSProgress on active downloads https://bugs.webkit.org/show_bug.cgi?id=192021 rdar://problem/44405661 Reviewed by Alex Christensen. Make it possible for clients to allow other processes to monitor the state of active downloads. On Cocoa platforms, this can be done by creating an NSProgress, publishing it on an appropriate file URL (potentially a different file URL than where the download data is being written), updating properties on it as the download makes progress, and wiring up a cancellation handler that allows it to be remotely canceled. Interested clients can then subscribe to progress on that URL and receive a proxy to the progress that WebKit publishes. * NetworkProcess/Downloads/Download.cpp: (WebKit::Download::~Download): (WebKit::Download::platformDestroyDownload): Add a platform-customizable hook for destructing the Download. DownloadCocoa.mm will interact with its Objective-C NSProgress instance at this point. * NetworkProcess/Downloads/Download.h: * NetworkProcess/Downloads/DownloadManager.cpp: (WebKit::DownloadManager::dataTaskBecameDownloadTask): See comments for publishDownloadProgress(). (WebKit::DownloadManager::publishDownloadProgress): If the provided downloadID corresponds to a non-Pending Download, hand the URL and a matching sandbox extension to the Download so it can create its progress. Otherwise, store the URL and sandbox extension on the PendingDownload to be used later when the full Download is created. When this happens, dataTaskBecameDownloadTask() will tell the PendingDownload about the Download it has become. The PendingDownload will then relay the progress URL and sandbox extension to the Download. * NetworkProcess/Downloads/DownloadManager.h: * NetworkProcess/Downloads/PendingDownload.cpp: (WebKit::PendingDownload::publishProgress): Store the progress info for later use, when the proper Download is created. (WebKit::PendingDownload::didBecomeDownload): If there was a progress URL provided earlier, tell the Download corresponding to this PendingDownload to publish its progress using that URL. * NetworkProcess/Downloads/PendingDownload.h: * NetworkProcess/Downloads/cocoa/DownloadCocoa.mm: (WebKit::Download::platformDestroyDownload): When the Download is destroyed (i.e. when the download succeeds, fails, or is canceled), unpublish the progress, since there is no longer any activity to report. (WebKit::Download::publishProgress): Resolve the sandbox extension, create a progress configured to reflect the progress of this Download's NSURLSessionDownloadTask, and publish it at the given file URL. * NetworkProcess/Downloads/cocoa/WKDownloadProgress.h: Copied from Source/WebKit/UIProcess/API/Cocoa/_WKDownload.h. * NetworkProcess/Downloads/cocoa/WKDownloadProgress.mm: Added. (-[WKDownloadProgress initWithDownloadTask:download:URL:sandboxExtension:]): Configure this progress, start observing properties on the download task that this progress will reflect, and connect the cancellation handler of the progress to cancel the corresponding Download. (-[WKDownloadProgress publish]): (-[WKDownloadProgress unpublish]): Override these methods to consume and revoke the sandbox extension to make sure the process has access to the progress file while the progress will be published. (-[WKDownloadProgress dealloc]): (-[WKDownloadProgress observeValueForKeyPath:ofObject:change:context:]): When either byte count (number received, or number expected to receive) of the download task changes, update this progress to reflect that. * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::publishDownloadProgress): * NetworkProcess/NetworkProcess.h: * NetworkProcess/NetworkProcess.messages.in: * NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in: * Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb: Allow looking up the services that manages published NSProgresses. * UIProcess/API/Cocoa/_WKDownload.h: * UIProcess/API/Cocoa/_WKDownload.mm: (-[_WKDownload publishProgressAtURL:]): * UIProcess/Downloads/DownloadProxy.cpp: (WebKit::DownloadProxy::publishProgress): * UIProcess/Downloads/DownloadProxy.h: * WebKit.xcodeproj/project.pbxproj: 2018-11-29 Tim Horton <timothy_horton@apple.com> Make drawing tools available when an editable image is focused https://bugs.webkit.org/show_bug.cgi?id=192172 <rdar://problem/30337960> Reviewed by Dean Jackson. * Platform/spi/ios/PencilKitSPI.h: Add some more SPI. * Shared/AssistedNodeInformation.cpp: (WebKit::AssistedNodeInformation::encode const): (WebKit::AssistedNodeInformation::decode): * Shared/AssistedNodeInformation.h: * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::handleStylusSingleTapAtPoint): (WebKit::isAssistableElement): (WebKit::WebPage::getAssistedNodeInformation): Plumb the assisted node's embedded view ID, if available. Also add a new input type for drawings, and use it when appropriate. * SourcesCocoa.txt: * UIProcess/API/Cocoa/_WKFocusedElementInfo.h: Add WKInputTypeDrawing. * UIProcess/ios/PencilKitSoftLink.h: Added. * UIProcess/ios/PencilKitSoftLink.mm: Added. Pull soft-linking out into its own file, to fix unified sources. * UIProcess/ios/WKContentViewInteraction.mm: (-[WKFocusedElementInfo initWithAssistedNodeInformation:isUserInitiated:userObject:]): (-[WKContentView _requiresKeyboardWhenFirstResponder]): (-[WKContentView requiresAccessoryView]): Install a keyboard when a drawing is focused. Also, deduplicate one "curretUserInterfaceIdiomIsPad"; just fall through. (-[WKContentView inputView]): Make a WKInkPickerControl when a drawing is focused. (-[WKContentView textInputTraits]): (isAssistableInputType): * UIProcess/ios/WKDrawingView.h: * UIProcess/ios/WKDrawingView.mm: (-[WKDrawingView initWithEmbeddedViewID:webPageProxy:]): (-[WKDrawingView PNGRepresentation]): (-[WKDrawingView loadDrawingFromPNGRepresentation:]): Adopt PencilKitSoftLink. (-[WKDrawingView canvasView]): Expose the internal canvas view for use by WKInkPickerControl. * UIProcess/ios/WKInkPickerControl.h: Copied from Source/WebKit/Platform/spi/ios/PencilKitSPI.h. * UIProcess/ios/WKInkPickerControl.mm: Added. (-[WKInkPickerView initWithFrame:drawingView:]): (-[WKInkPickerView didPickInk]): (-[WKInkPickerView inlineInkPickerDidToggleRuler:]): (-[WKInkPickerView inlineInkPicker:didSelectTool:]): (-[WKInkPickerView inlineInkPicker:didSelectColor:]): (-[WKInkPickerView inkPickerSize]): (-[WKInkPickerView layoutSubviews]): (-[WKInkPickerView sizeThatFits:]): (-[WKInkPickerView viewControllerForPopoverPresentationFromInlineInkPicker:]): (-[WKInkPickerControl initWithDrawingView:]): (-[WKInkPickerControl beginEditing]): (-[WKInkPickerControl endEditing]): (-[WKInkPickerControl assistantView]): Install and hook up a PKInlineInkPicker. Center it in the keyboard. Plumb changes through to the canvas view. * WebKit.xcodeproj/project.pbxproj: 2018-11-29 Per Arne Vollan <pvollan@apple.com> [macOS] Add logging for some sandbox entries. https://bugs.webkit.org/show_bug.cgi?id=192126 Reviewed by Brent Fulgham. Add logging for sandbox entries which are possibly not needed. * WebProcess/com.apple.WebProcess.sb.in: 2018-11-29 Alex Christensen <achristensen@webkit.org> Fix _WKWebsiteDataStoreConfiguration. sourceApplicationBundleIdentifier and sourceApplicationSecondaryIdentifier SPI introduced in r235127 https://bugs.webkit.org/show_bug.cgi?id=192191 Reviewed by Andy Estes. * NetworkProcess/cocoa/NetworkSessionCocoa.mm: (WebKit::NetworkSessionCocoa::NetworkSessionCocoa): When trying to adopt the new SPI and verify it worked, I found that the strings are not copied in one place where they should be. 2018-11-29 Megan Gardner <megan_gardner@apple.com> Move Lookup Code for better cross platform usage https://bugs.webkit.org/show_bug.cgi?id=191732 Reviewed by Alex Christensen. Lookup is being replaced by Reveal. This framework should work on all platforms. The patch moves the code that we expect will be needed for all platforms to the more general cocoa area. This patch changes no funcationality, and should not change anything currently. This work will be build on later when Reveal is ready to support multiple platforms. * Platform/spi/ios/UIKitSPI.h: * UIProcess/Cocoa/WebPageProxyCocoa.mm: (WebKit::WebPageProxy::performDictionaryLookupAtLocation): (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection): * UIProcess/ios/WKContentViewInteraction.h: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView setupInteraction]): (-[WKContentView cleanupInteraction]): (-[WKContentView _removeDefaultGestureRecognizers]): (-[WKContentView _addDefaultGestureRecognizers]): (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]): (-[WKContentView _lookupGestureRecognized:]): * UIProcess/ios/WebPageProxyIOS.mm: (WebKit::WebPageProxy::performDictionaryLookupAtLocation): Deleted. * UIProcess/mac/WebPageProxyMac.mm: (WebKit::WebPageProxy::performDictionaryLookupAtLocation): Deleted. (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection): Deleted. * WebProcess/WebPage/Cocoa/WebPageCocoa.mm: (WebKit::WebPage::performDictionaryLookupAtLocation): (WebKit::WebPage::performDictionaryLookupForSelection): (WebKit::WebPage::performDictionaryLookupOfCurrentSelection): (WebKit::WebPage::performDictionaryLookupForRange): (WebKit::WebPage::dictionaryPopupInfoForRange): * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::performDictionaryLookupAtLocation): Deleted. (WebKit::WebPage::performDictionaryLookupForSelection): Deleted. (WebKit::WebPage::performDictionaryLookupForRange): Deleted. * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::performDictionaryLookupAtLocation): Deleted. (WebKit::WebPage::performDictionaryLookupForSelection): Deleted. (WebKit::WebPage::performDictionaryLookupOfCurrentSelection): Deleted. (WebKit::WebPage::dictionaryPopupInfoForRange): Deleted. (WebKit::WebPage::performDictionaryLookupForRange): Deleted. 2018-11-29 Zalan Bujtas <zalan@apple.com> [ContentObservation] Decouple content change and DOM timer scheduling observation https://bugs.webkit.org/show_bug.cgi?id=192170 Reviewed by Simon Fraser. * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::handleSyntheticClick): 2018-11-29 Eric Carlson <eric.carlson@apple.com> [iOS] Tell AirPlay picker when a file has video https://bugs.webkit.org/show_bug.cgi?id=192155 <rdar://problem/43843865> Reviewed by Jer Noble. * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView _showPlaybackTargetPicker:fromRect:routeSharingPolicy:routingContextUID:]): Add hasVideo parameter. * UIProcess/ios/forms/WKAirPlayRoutePicker.h: * UIProcess/ios/forms/WKAirPlayRoutePicker.mm: (-[WKAirPlayRoutePicker showFromView:routeSharingPolicy:routingContextUID:hasVideo:]): Add hasVideo parameter, pass info to MPMediaControlsViewController. (-[WKAirPlayRoutePicker showFromView:routeSharingPolicy:routingContextUID:]): Deleted. 2018-11-29 Alexey Proskuryakov <ap@apple.com> Modernize the check for kCFURLRequestContentDecoderSkipURLCheck existence https://bugs.webkit.org/show_bug.cgi?id=192041 Reviewed by Tim Horton. * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: (WebKit::NetworkDataTaskCocoa::applySniffingPoliciesAndBindRequestToInferfaceIfNeeded): 2018-11-29 Ryan Haddad <ryanhaddad@apple.com> Unreviewed, rolling out r238678. Breaks internal builds. Reverted changeset: "Move Lookup Code for better cross platform usage" https://bugs.webkit.org/show_bug.cgi?id=191732 https://trac.webkit.org/changeset/238678 2018-11-29 Suresh Koppisetty <skoppisetty@apple.com> Addressed a FIXME by removing an unnecessary call to [NSApplication sharedApplication]. https://bugs.webkit.org/show_bug.cgi?id=192099 Reviewed by Geoffrey Garen. [NSApplication sharedApplication] call is no longer needed in platformInitializeWebProcess as [NSApplication _accessibilityInitialize] calls [NSApplication sharedApplication]. * WebProcess/cocoa/WebProcessCocoa.mm: (WebKit::WebProcess::platformInitializeWebProcess): 2018-11-29 Megan Gardner <megan_gardner@apple.com> Move Lookup Code for better cross platform usage https://bugs.webkit.org/show_bug.cgi?id=191732 Reviewed by Alex Christensen. Lookup is being replaced by Reveal. This framework should work on all platforms. The patch moves the code that we expect will be needed for all platforms to the more general cocoa area. This patch changes no funcationality, and should not change anything currently. This work will be build on later when Reveal is ready to support multiple platforms. * Platform/spi/ios/UIKitSPI.h: * UIProcess/Cocoa/WebPageProxyCocoa.mm: (WebKit::WebPageProxy::performDictionaryLookupAtLocation): (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection): * UIProcess/ios/WKContentViewInteraction.h: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView setupInteraction]): (-[WKContentView cleanupInteraction]): (-[WKContentView _removeDefaultGestureRecognizers]): (-[WKContentView _addDefaultGestureRecognizers]): (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]): (-[WKContentView _lookupGestureRecognized:]): * UIProcess/ios/WebPageProxyIOS.mm: (WebKit::WebPageProxy::performDictionaryLookupAtLocation): Deleted. * UIProcess/mac/WebPageProxyMac.mm: (WebKit::WebPageProxy::performDictionaryLookupAtLocation): Deleted. (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection): Deleted. * WebProcess/WebPage/Cocoa/WebPageCocoa.mm: (WebKit::WebPage::performDictionaryLookupAtLocation): (WebKit::WebPage::performDictionaryLookupForSelection): (WebKit::WebPage::performDictionaryLookupOfCurrentSelection): (WebKit::WebPage::performDictionaryLookupForRange): (WebKit::WebPage::dictionaryPopupInfoForRange): * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::performDictionaryLookupAtLocation): Deleted. (WebKit::WebPage::performDictionaryLookupForSelection): Deleted. (WebKit::WebPage::performDictionaryLookupForRange): Deleted. * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::performDictionaryLookupAtLocation): Deleted. (WebKit::WebPage::performDictionaryLookupForSelection): Deleted. (WebKit::WebPage::performDictionaryLookupOfCurrentSelection): Deleted. (WebKit::WebPage::dictionaryPopupInfoForRange): Deleted. (WebKit::WebPage::performDictionaryLookupForRange): Deleted. 2018-11-29 Conrad Shultz <conrad_shultz@apple.com> Factor out configuration of the file upload image picker https://bugs.webkit.org/show_bug.cgi?id=192138 <rdar://problem/46334871> Reviewed by Tim Horton. By factoring configuration of the picker into its own method, it makes it easier to apply custom configuration in subclasses in the future. * UIProcess/ios/forms/WKFileUploadPanel.mm: (-[WKFileUploadPanel _showPhotoPickerWithSourceType:]): (-[WKFileUploadPanel _configureImagePicker:]): 2018-11-29 Tomas Popela <tpopela@redhat.com> [GTK][WPE] Fix BubblewrapLauncher clang warnings https://bugs.webkit.org/show_bug.cgi?id=192086 Reviewed by Michael Catanzaro. * UIProcess/Launcher/glib/BubblewrapLauncher.cpp: (WebKit::bindPathVar): Initialize the i variable to 0. (WebKit::setupSeccomp): Initialize the optional datum_b member. 2018-11-28 Joseph Pecoraro <pecoraro@apple.com> Web Inspector: REGRESSION(?): all "Show *" develop menu items cause the page to crash https://bugs.webkit.org/show_bug.cgi?id=192016 <rdar://problem/46284417> Reviewed by Devin Rousso. Previously calling the Page's inspectorController.show() would create a frontend connection on the WebProcess side. However now the frontend connection is handed to the WebProcess once the UIProcess creates it. So queue actions that take place immediately after showing the inspector until we have a frontend to send the actions to. * WebProcess/WebPage/WebInspector.h: * WebProcess/WebPage/WebInspector.cpp: (WebKit::WebInspector::setFrontendConnection): (WebKit::WebInspector::closeFrontendConnection): (WebKit::WebInspector::whenFrontendConnectionEstablished): (WebKit::WebInspector::showConsole): (WebKit::WebInspector::showResources): (WebKit::WebInspector::showTimelines): (WebKit::WebInspector::showMainResourceForFrame): (WebKit::WebInspector::startPageProfiling): (WebKit::WebInspector::stopPageProfiling): (WebKit::WebInspector::startElementSelection): (WebKit::WebInspector::stopElementSelection): 2018-11-28 Vivek Seth <v_seth@apple.com> Consult dummy storage for HTTPS Upgrade, Apply If Appropriate https://bugs.webkit.org/show_bug.cgi?id=192094 <rdar://problem/45851103> HTTPS Upgrade: Consult dummy storage for HTTPS Upgrade, Apply If Appropriate Reviewed by Chris Dumez. For main page loads upgrade HTTP requests to HTTPS if the hostname belongs to a set of upgradable hostnames. * NetworkProcess/NetworkLoadChecker.cpp: (WebKit::NetworkLoadChecker::applyHTTPSUpgradeIfNeeded): (WebKit::NetworkLoadChecker::checkRequest): * NetworkProcess/NetworkLoadChecker.h: * NetworkProcess/NetworkResourceLoader.cpp: (WebKit::NetworkResourceLoader::start): 2018-11-28 Simon Fraser <simon.fraser@apple.com> REGRESSION (r234980): Crash in -[WKWebView _restorePageStateToUnobscuredCenter:scale:] https://bugs.webkit.org/show_bug.cgi?id=192127 rdar://problem/44194179 Reviewed by Tim Horton. _restorePageStateToUnobscuredCenter: could receive an Optional<FloatRect> from the web process, and unconditionally called .value() even though it may not be engaged. No repro steps known, so no testcase. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _restorePageStateToUnobscuredCenter:scale:]): 2018-11-28 Commit Queue <commit-queue@webkit.org> Unreviewed, rolling out r238653 and r238656. https://bugs.webkit.org/show_bug.cgi?id=192130 Breaks iOS build (Requested by smfr on #webkit). Reverted changesets: "Move Lookup Code for better cross platform usage" https://bugs.webkit.org/show_bug.cgi?id=191732 https://trac.webkit.org/changeset/238653 "Attempt to fix the iOS build by only including RevealSPI.h when it's needed." https://trac.webkit.org/changeset/238656 2018-11-28 Alex Christensen <achristensen@webkit.org> Modernize BlobRegistry::writeBlobsToTemporaryFiles https://bugs.webkit.org/show_bug.cgi?id=192117 Reviewed by Dean Jackson. * NetworkProcess/FileAPI/NetworkBlobRegistry.cpp: (WebKit::NetworkBlobRegistry::writeBlobsToTemporaryFiles): (WebKit::NetworkBlobRegistry::writeBlobToFilePath): * NetworkProcess/FileAPI/NetworkBlobRegistry.h: * NetworkProcess/NetworkConnectionToWebProcess.cpp: (WebKit::NetworkConnectionToWebProcess::writeBlobsToTemporaryFiles): * NetworkProcess/NetworkConnectionToWebProcess.h: * NetworkProcess/NetworkConnectionToWebProcess.messages.in: * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::writeBlobToFilePath): * NetworkProcess/NetworkProcess.h: * NetworkProcess/NetworkProcess.messages.in: * UIProcess/ChildProcessProxy.h: (WebKit::ChildProcessProxy::sendWithAsyncReply): * UIProcess/Network/NetworkProcessProxy.cpp: (WebKit::NetworkProcessProxy::didClose): (WebKit::NetworkProcessProxy::writeBlobToFilePath): (WebKit::NetworkProcessProxy::didWriteBlobToFilePath): Deleted. * UIProcess/Network/NetworkProcessProxy.h: * UIProcess/Network/NetworkProcessProxy.messages.in: * WebProcess/FileAPI/BlobRegistryProxy.cpp: (WebKit::BlobRegistryProxy::writeBlobsToTemporaryFiles): * WebProcess/FileAPI/BlobRegistryProxy.h: * WebProcess/Network/NetworkProcessConnection.cpp: (WebKit::NetworkProcessConnection::didClose): (WebKit::NetworkProcessConnection::writeBlobsToTemporaryFiles): (WebKit::NetworkProcessConnection::didWriteBlobsToTemporaryFiles): Deleted. * WebProcess/Network/NetworkProcessConnection.h: * WebProcess/Network/NetworkProcessConnection.messages.in: 2018-11-28 Alex Christensen <achristensen@webkit.org> Move loadThrottleLatency from NetworkProcessCreationParameters to NetworkSessionCreationParameters https://bugs.webkit.org/show_bug.cgi?id=192122 Reviewed by Dean Jackson. This is part of an effort to reduce global variables in the NetworkProcess. * NetworkProcess/NetworkLoad.cpp: (WebKit::NetworkLoad::NetworkLoad): (WebKit::NetworkLoad::didReceiveResponse): * NetworkProcess/NetworkLoad.h: * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::initializeNetworkProcess): * NetworkProcess/NetworkProcess.h: (WebKit::NetworkProcess::loadThrottleLatency const): Deleted. * NetworkProcess/NetworkProcessCreationParameters.cpp: (WebKit::NetworkProcessCreationParameters::encode const): (WebKit::NetworkProcessCreationParameters::decode): * NetworkProcess/NetworkSession.h: (WebKit::NetworkSession::loadThrottleLatency const): * NetworkProcess/NetworkSessionCreationParameters.cpp: Added. (WebKit::NetworkSessionCreationParameters::privateSessionParameters): (WebKit::NetworkSessionCreationParameters::encode const): (WebKit::NetworkSessionCreationParameters::decode): * NetworkProcess/NetworkSessionCreationParameters.h: (WebKit::NetworkSessionCreationParameters::encode const): Deleted. (WebKit::NetworkSessionCreationParameters::decode): Deleted. * NetworkProcess/cocoa/NetworkSessionCocoa.h: * NetworkProcess/cocoa/NetworkSessionCocoa.mm: (WebKit::NetworkSessionCocoa::NetworkSessionCocoa): * Shared/WebsiteDataStoreParameters.cpp: (WebKit::WebsiteDataStoreParameters::privateSessionParameters): * Sources.txt: * UIProcess/Cocoa/WebProcessPoolCocoa.mm: (WebKit::WebProcessPool::platformInitializeNetworkProcess): * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm: (WebKit::WebsiteDataStore::parameters): * WebKit.xcodeproj/project.pbxproj: 2018-11-15 Megan Gardner <megan_gardner@apple.com> Move Lookup Code for better cross platform usage https://bugs.webkit.org/show_bug.cgi?id=191732 Reviewed by Alex Christensen. Lookup is being replaced by Reveal. This framework should work on all platforms. The patch moves the code that we expect will be needed for all platforms to the more general cocoa area. This patch changes no funcationality, and should not change anything currently. This work will be build on later when Reveal is ready to support multiple platforms. * Platform/spi/ios/UIKitSPI.h: * UIProcess/Cocoa/WebPageProxyCocoa.mm: (WebKit::WebPageProxy::performDictionaryLookupAtLocation): (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection): * UIProcess/ios/WKContentViewInteraction.h: * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView setupInteraction]): (-[WKContentView cleanupInteraction]): (-[WKContentView _removeDefaultGestureRecognizers]): (-[WKContentView _addDefaultGestureRecognizers]): (-[WKContentView gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:]): (-[WKContentView _lookupGestureRecognized:]): * UIProcess/ios/WebPageProxyIOS.mm: (WebKit::WebPageProxy::performDictionaryLookupAtLocation): Deleted. * UIProcess/mac/WebPageProxyMac.mm: (WebKit::WebPageProxy::performDictionaryLookupAtLocation): Deleted. (WebKit::WebPageProxy::performDictionaryLookupOfCurrentSelection): Deleted. * WebProcess/WebPage/Cocoa/WebPageCocoa.mm: (WebKit::WebPage::performDictionaryLookupAtLocation): (WebKit::WebPage::performDictionaryLookupForSelection): (WebKit::WebPage::performDictionaryLookupOfCurrentSelection): (WebKit::WebPage::performDictionaryLookupForRange): (WebKit::WebPage::dictionaryPopupInfoForRange): * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::performDictionaryLookupAtLocation): Deleted. (WebKit::WebPage::performDictionaryLookupForSelection): Deleted. (WebKit::WebPage::performDictionaryLookupForRange): Deleted. * WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::performDictionaryLookupAtLocation): Deleted. (WebKit::WebPage::performDictionaryLookupForSelection): Deleted. (WebKit::WebPage::performDictionaryLookupOfCurrentSelection): Deleted. (WebKit::WebPage::dictionaryPopupInfoForRange): Deleted. (WebKit::WebPage::performDictionaryLookupForRange): Deleted. 2018-11-28 Keith Rollin <krollin@apple.com> Update generate-{derived,unified}-sources scripts to support generating .xcfilelist files https://bugs.webkit.org/show_bug.cgi?id=192031 <rdar://problem/46286816> Reviewed by Alex Christensen. The Generate Derived Sources and Generate Unified Sources build phases in Xcode need to have their inputs and outputs specified. This specification will come in the form of .xcfilelist files that will be attached to these build phases. There is one .xcfilelist file that lists the input file and one that lists the output files. As part of this work, the various generate-{derived,unified}-sources scripts that are executed in these Generate build phases are modified to help in the creation of these .xcfilelist files. In particular, they can now be invoked with command-line parameters. These parameters are then used to alter the normal execution of these scripts, causing them to produce the .xcfilelist files as opposed to actually generating the files that are listed in those files. * Scripts/generate-derived-sources.sh: * Scripts/generate-unified-sources.sh: 2018-11-28 Keith Rollin <krollin@apple.com> Revert print_all_generated_files work in r238008; tighten up target specifications https://bugs.webkit.org/show_bug.cgi?id=192025 <rdar://problem/46284301> Reviewed by Alex Christensen. In r238008, I added a facility for DerivedSources.make makefiles to print out the list of files that they generate. This output was used in the generation of .xcfilelist files used to specify the output of the associated Generate Derived Sources build phases in Xcode. This approach worked, but it meant that people would need to follow a specific convention to keep this mechanism working. Instead of continuing this approach, I'm going to implement a new facility based on the output of `make` when passed the -d flag (which prints dependency information). This new mechanism is completely automatic and doesn't need maintainers to follow a convention. To that end, remove most of the work performed in r238008 that supports the print_all_generated_files target. At the same time, it's important for the sets of targets and their dependencies to be complete and correct. Therefore, also include changes to bring those up-to-date. As part of that, you'll see prevalent use of a particular technique. Here's an example: BYTECODE_FILES = \ Bytecodes.h \ BytecodeIndices.h \ BytecodeStructs.h \ InitBytecodes.asm \ # BYTECODE_FILES_PATTERNS = $(subst .,%,$(BYTECODE_FILES)) all : $(BYTECODE_FILES) $(BYTECODE_FILES_PATTERNS): $(wildcard $(JavaScriptCore)/generator/*.rb) $(JavaScriptCore)/bytecode/BytecodeList.rb ... These lines indicate a set of generated files (those specified in BYTECODE_FILES). These files are generated by the BytecodeList.rb tool. But, as opposed to the normal rule where a single foo.output is generated by foo.input plus some additional dependencies, this rule produces multiple output files from a tool whose connection to the output files is not immediately clear. A special approach is needed where a single rule produces multiple output files. The normal way to implement this is to use an .INTERMEDIATE target. However, we used this approach in the past and ran into a problem with it, addressing it with an alternate approach in r210507. The above example shows this approach. The .'s in the list of target files are replaced with %'s, and the result is used as the left side of the dependency rule. * DerivedSources.make: 2018-11-28 Daniel Bates <dabates@apple.com> [iOS] Page not defocused when Find-in-page becomes first responder https://bugs.webkit.org/show_bug.cgi?id=192084 <rdar://problem/46146777> Reviewed by Tim Horton. When -becomeFirstResponder and -resignFirstResponder is called the page should become focused and defocused, respectively. WebKit adjusts it behavior depending on whether it knows it has focus. This includes decisions about whether to allow an element to be focused. We need to ensure that WebKit knows whether the web view is focused for it to make good decisions. * UIProcess/ios/PageClientImplIOS.mm: (WebKit::PageClientImpl::isViewFocused): Check if the content view is the first responder and hence is accepting keyboard input. Note that picture-in-picture views do not accept keyboard input. * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView becomeFirstResponderForWebView]): Update activity state when the view becomes focused. (-[WKContentView resignFirstResponderForWebView]): Update activity state when the view becomes defocused. 2018-11-28 Alex Christensen <achristensen@webkit.org> Remove dead code from an earlier attempt at implementing safe browsing https://bugs.webkit.org/show_bug.cgi?id=192067 Reviewed by Chris Dumez. * Shared/LoadParameters.cpp: (WebKit::LoadParameters::encode const): (WebKit::LoadParameters::decode): * Shared/LoadParameters.h: * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::loadAlternateHTML): (WebKit::WebPageProxy::decidePolicyForNavigationActionAsync): (WebKit::WebPageProxy::decidePolicyForNavigationAction): (WebKit::WebPageProxy::decidePolicyForNavigationActionSync): * UIProcess/WebPageProxy.h: * UIProcess/WebPageProxy.messages.in: * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp: (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): * WebProcess/WebCoreSupport/WebFrameLoaderClient.h: 2018-11-28 Alex Christensen <achristensen@webkit.org> Move logCookieInformation bool from NetworkProcess to NetworkSession https://bugs.webkit.org/show_bug.cgi?id=192049 Reviewed by Chris Dumez. Part of an effort to remove globals in the NetworkProcess. * NetworkProcess/NetworkConnectionToWebProcess.cpp: (WebKit::NetworkConnectionToWebProcess::cookiesForDOM): (WebKit::NetworkConnectionToWebProcess::setCookiesFromDOM): * NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::initializeNetworkProcess): * NetworkProcess/NetworkProcess.h: (WebKit::NetworkProcess::shouldLogCookieInformation const): Deleted. * NetworkProcess/NetworkProcessCreationParameters.cpp: (WebKit::NetworkProcessCreationParameters::encode const): (WebKit::NetworkProcessCreationParameters::decode): * NetworkProcess/NetworkProcessCreationParameters.h: * NetworkProcess/NetworkResourceLoader.cpp: (WebKit::NetworkResourceLoader::didFinishLoading): (WebKit::NetworkResourceLoader::sendResultForCacheEntry): (WebKit::NetworkResourceLoader::shouldLogCookieInformation): (WebKit::NetworkResourceLoader::logCookieInformation const): (WebKit::logBlockedCookieInformation): (WebKit::logCookieInformationInternal): (WebKit::NetworkResourceLoader::logCookieInformation): * NetworkProcess/NetworkResourceLoader.h: * NetworkProcess/NetworkSession.h: (WebKit::NetworkSession::logCookieInformation const): * NetworkProcess/NetworkSessionCreationParameters.h: (WebKit::NetworkSessionCreationParameters::encode const): (WebKit::NetworkSessionCreationParameters::decode): * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa): (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection): * NetworkProcess/cocoa/NetworkSessionCocoa.h: * NetworkProcess/cocoa/NetworkSessionCocoa.mm: (WebKit::NetworkSessionCocoa::NetworkSessionCocoa): * UIProcess/Cocoa/WebProcessPoolCocoa.mm: (WebKit::WebProcessPool::platformInitializeNetworkProcess): * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm: (WebKit::WebsiteDataStore::parameters): 2018-11-28 Ryan Haddad <ryanhaddad@apple.com> Unreviewed, rolling out r238620. Broke internal builds again. Reverted changeset: "Remove @no-unify of InjectedBundleRangeHandle.cpp and InjectedBundleNodeHandle.cpp" https://bugs.webkit.org/show_bug.cgi?id=191853 https://trac.webkit.org/changeset/238620 2018-11-28 Yongjun Zhang <yongjun_zhang@apple.com> Allow WebKit clients to specify a minimum effective width for layout. https://bugs.webkit.org/show_bug.cgi?id=191499 <rdar://problem/45362678> Reviewed by Wenson Hsieh. If we ignore the meta viewport (_shouldIgnoreMetaViewport is true), the default layout width will be device width. For clients that wish to lay out the content with a different width value, we would need to add a way to specify the effective width for layout. * UIProcess/API/Cocoa/WKWebView.mm: Add an iVar _minimumEffectiveDeviceWidth. (-[WKWebView _dispatchSetViewLayoutSize:]): Call the new setViewportConfigurationViewLayoutSize method. (-[WKWebView _setViewScale:]): Ditto. (-[WKWebView _setMinimumEffectiveWidth:]): The setter for _minimumEffectiveDeviceWidth. (-[WKWebView _minimumEffectiveWidth]): Getter for _minimumEffectiveDeviceWidth * UIProcess/API/Cocoa/WKWebViewPrivate.h: Add a property _minimumEffectiveDeviceWidth to WKWebView. * UIProcess/WebPageProxy.h: Change setViewportConfigurationViewLayoutSize to take another argument minimumEffectiveDeviceWidth. * UIProcess/ios/WebPageProxyIOS.mm: (WebKit::WebPageProxy::setViewportConfigurationViewLayoutSize): Also send effectiveWidth to WebContent process. * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::WebPage): Set the initial effective width to 0 when creating a web page, this tells ViewportConfiguration to ignore the minimum effective width value. * WebProcess/WebPage/WebPage.h: Change setViewportConfigurationViewLayoutSize to take another argument effectiveWidth. * WebProcess/WebPage/WebPage.messages.in: * WebProcess/WebPage/ios/WebPageIOS.mm: (WebKit::WebPage::setViewportConfigurationViewLayoutSize): Also pass effectiveWidth value to ViewportConfiguration. 2018-11-28 Fujii Hironori <Hironori.Fujii@sony.com> Remove @no-unify of InjectedBundleRangeHandle.cpp and InjectedBundleNodeHandle.cpp https://bugs.webkit.org/show_bug.cgi?id=191853 Reviewed by Michael Catanzaro. In r235845, I excluded InjectedBundleRangeHandle.cpp and InjectedBundleNodeHandle.cpp from unify source builds in order to work around a MSVC bug. Then, I commited a different workaround for the MSVC bug in r238386. Now, we can include InjectedBundleRangeHandle.cpp and InjectedBundleNodeHandle.cpp in unified source builds. Revert r235845. * Sources.txt: Removed @no-unify of InjectedBundleRangeHandle.cpp and InjectedBundleNodeHandle.cpp * WebKit.xcodeproj/project.pbxproj: Unchecked Target Membership not to be compiled by XCode. 2018-11-28 Joseph Pecoraro <pecoraro@apple.com> Web Inspector: REGRESSION(r238378): reloading WebInspector after a settings change doesn't re-show WebInspector https://bugs.webkit.org/show_bug.cgi?id=191971 Reviewed by Matt Baker. * WebProcess/WebPage/WebInspector.cpp: (WebKit::WebInspector::reopen): Deleted. * WebProcess/WebPage/WebInspector.h: * WebProcess/WebPage/WebInspector.messages.in: Move reopen out of the WebProcess... * UIProcess/WebInspectorProxy.cpp: (WebKit::WebInspectorProxy::reopen): * UIProcess/WebInspectorProxy.h: * UIProcess/WebInspectorProxy.messages.in: And into the UIProcess where the order of messages won't be as problematic. * WebProcess/WebPage/WebInspectorUI.cpp: (WebKit::WebInspectorUI::reopen): Send a message to the WebInspectorProxy instead. 2018-11-28 Alexey Proskuryakov <ap@apple.com> Remove another OS version check from NetworkDataTaskCocoa.mm https://bugs.webkit.org/show_bug.cgi?id=192046 Reviewed by Alex Christensen. * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: (WebKit::NetworkDataTaskCocoa::statelessCookieStorage): 2018-11-28 Alexey Proskuryakov <ap@apple.com> Modernize version checks for same site cookie support https://bugs.webkit.org/show_bug.cgi?id=192054 Reviewed by Tim Horton. * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: (WebKit::updateTaskWithFirstPartyForSameSiteCookies): Also removed runtime checks, which are no longer relevant. 2018-11-27 Mark Lam <mark.lam@apple.com> ENABLE_FAST_JIT_PERMISSIONS should be false for iosmac. https://bugs.webkit.org/show_bug.cgi?id=192055 <rdar://problem/46288783> Reviewed by Saam Barati. * Configurations/FeatureDefines.xcconfig: 2018-11-27 Alex Christensen <achristensen@webkit.org> Make synchronous IPC introduced in r237267 asynchronous https://bugs.webkit.org/show_bug.cgi?id=190757 Reviewed by Chris Dumez. * UIProcess/API/Cocoa/WKProcessPool.mm: (-[WKProcessPool _getActivePagesOriginsInWebProcessForTesting:completionHandler:]): (-[WKProcessPool _getActivePagesOriginsInWebProcessForTesting:]): Deleted. * UIProcess/API/Cocoa/WKProcessPoolPrivate.h: * UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::activePagesOriginsInWebProcessForTesting): * UIProcess/WebProcessPool.h: * UIProcess/WebProcessProxy.cpp: (WebKit::WebProcessProxy::activePagesDomainsForTesting): * UIProcess/WebProcessProxy.h: * WebProcess/WebProcess.cpp: (WebKit::WebProcess::getActivePagesOriginsForTesting): * WebProcess/WebProcess.messages.in: * WebProcess/cocoa/WebProcessCocoa.mm: (WebKit::WebProcess::getActivePagesOriginsForTesting): 2018-11-27 Alex Christensen <achristensen@webkit.org> Safe browsing warning text needs to be visible on High Sierra https://bugs.webkit.org/show_bug.cgi?id=192022 Reviewed by Tim Horton. Something about AppKit, autolayout, view insertion order, and NSTextView makes the text lay out with initial size of {0, 0} on High Sierra. Using an NSTextField instead makes the details visible. Covered by an API test. * UIProcess/Cocoa/WKSafeBrowsingWarning.h: * UIProcess/Cocoa/WKSafeBrowsingWarning.mm: (makeLabel): (-[WKSafeBrowsingWarning addContent]): (-[WKSafeBrowsingWarning showDetailsClicked]): (-[WKSafeBrowsingWarning layoutText]): (makeTitleLabel): Deleted. 2018-11-27 Tim Horton <timothy_horton@apple.com> WKNavigation.AutomaticViewReloadAfterWebProcessCrash asserts after r238538 https://bugs.webkit.org/show_bug.cgi?id=192038 <rdar://problem/46288457> Reviewed by Wenson Hsieh. * UIProcess/WebPageProxy.cpp: (WebKit::m_resetRecentCrashCountTimer): (WebKit::WebPageProxy::finishAttachingToWebProcess): (WebKit::WebPageProxy::resetState): (WebKit::m_editableImageController): Deleted. Properly invalidate m_editableImageController when resetting WebPageProxy. Otherwise, the MessageReceiverMaps get invalidated, then later when EditableImageController goes away we assert trying to remove the receiver. 2018-11-27 Jiewen Tan <jiewen_tan@apple.com> (r238246) [ MacOS Debug ] Layout Test http/wpt/webauthn/ctap-hid-failure.https.html is Crashing https://bugs.webkit.org/show_bug.cgi?id=191757 Reviewed by Chris Dumez. Wrong nonce error causes retransmission, which then trigger wrong nonce error. This is expected behavior for mock testing. However, the main thread could time out when MockHidConnection::send is excuting the block on another thread. The block will then return without invoking the callback, which triggers this WTFCrash. The solution is always invoking the callback before return in the block. * UIProcess/WebAuthentication/Mock/MockHidConnection.cpp: (WebKit::MockHidConnection::send): 2018-11-27 Keith Rollin <krollin@apple.com> Better parsing of comments in generate-message*.py https://bugs.webkit.org/show_bug.cgi?id=191866 <rdar://problem/46189563> Reviewed by Chris Dumez. The script parsing the *.messages.in files would treat a line starting with '#' as a comment, but not a line starting with '<whitespace>#'. This means that jamming a '#' right in front of the first character of a message definition (as opposed to the beginning of a line) will have no effect and the line will get treated just the same as a non-commented line. Fix this by trimming all white space from the beginning and ending of the line before processing it. * Scripts/webkit/parser.py: (parse): * Scripts/webkit/test-messages.in: 2018-11-27 Thibault Saunier <tsaunier@igalia.com> [GTK|WPE] Allow disabling WebRTC unified plan SDP through an env var https://bugs.webkit.org/show_bug.cgi?id=192024 Reviewed by Michael Catanzaro. * UIProcess/API/glib/WebKitSettings.cpp: (webKitSettingsConstructed): 2018-11-27 Alexey Proskuryakov <ap@apple.com> Modernize the check for async _saveCookies existence https://bugs.webkit.org/show_bug.cgi?id=191987 Reviewed by Dean Jackson. * NetworkProcess/cocoa/NetworkProcessCocoa.mm: (WebKit::NetworkProcess::platformSyncAllCookies): 2018-11-27 Tim Horton <timothy_horton@apple.com> Serialize and deserialize editable image strokes https://bugs.webkit.org/show_bug.cgi?id=192002 <rdar://problem/30900149> Reviewed by Dean Jackson. * UIProcess/API/APIAttachment.cpp: (API::Attachment::updateAttributes): * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::willUpdateAttachmentAttributes): * UIProcess/WebPageProxy.h: When an attachment would update its DOM attributes, plumb a notification to EditableImageController, and allow it to block the update (because we don't really want to set src for editable image attachments, we just want the UI process to fully own the data). * Platform/spi/ios/PencilKitSPI.h: Add some SPI. * UIProcess/ios/EditableImageController.h: * UIProcess/ios/EditableImageController.mm: (WebKit::EditableImageController::loadStrokesFromAttachment): Add a helper to load strokes from an attachment. (WebKit::EditableImageController::associateWithAttachment): Try to load strokes from the attachment when initially associated. Don't create a file wrapper around a null image, so it will be regenerated later. (WebKit::EditableImageController::willUpdateAttachmentAttributes): The aforementioned plumbing at update time. * UIProcess/ios/WKDrawingView.h: * UIProcess/ios/WKDrawingView.mm: (-[WKDrawingView layoutSubviews]): Invalidate the attachment (so it will be regenerated upon request) if the canvas size changes. (-[WKDrawingView PNGRepresentation]): Serialize strokes into the EXIF User Comment field. We will find a different field to use (ideally a custom vendor-specific field that nobody else will use for anything), but this works for now. Don't try to render an image if we don't have a size or scale; PKImageRenderer will just fail anyway, so bail early. In the iOS Simulator, PKImageRenderer currently returns an unusable image. Instead, so that we have a image on which to serialize the strokes, create a transparent 1x1 image. This makes it possible to serialize strokes even though we don't have a usable rendered image, so that we can still test this change (and future changes). (-[WKDrawingView loadDrawingFromPNGRepresentation:]): If available, deserialize strokes from the EXIF User Comment field. (-[WKDrawingView drawingDidChange:]): (-[WKDrawingView invalidateAttachment]): Factor invalidateAttachment out of drawingDidChange so we can call it from layoutSubviews too! 2018-11-27 Chris Dumez <cdumez@apple.com> Regression(PSON) crash under WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame() https://bugs.webkit.org/show_bug.cgi?id=191983 <rdar://problem/46246863> Reviewed by Geoffrey Garen. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::continueNavigationInNewProcess): Make sure the navigation still exists in m_mainFrameCreationHandler and return early if it does not. (WebKit::WebPageProxy::resetState): Clear out m_mainFrameCreationHandler / m_mainFrameWindowCreationHandler if we resetting the state after a crash. At this point, there is no chance the WebProcess will send us the IPC that will cause these to get called and we do not want old state to remain for future navigations. 2018-11-16 Jiewen Tan <jiewen_tan@apple.com> Disallow loading webarchives as iframes https://bugs.webkit.org/show_bug.cgi?id=191728 <rdar://problem/45524528> Reviewed by Youenn Fablet. * UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::unableToImplementPolicy): Add a check to prevent null pointer dereference. 2018-11-27 Wenson Hsieh <wenson_hsieh@apple.com> WebKit.AddAndRemoveDataDetectors hits a debug assertion after r238515 https://bugs.webkit.org/show_bug.cgi?id=191996 Reviewed by Tim Horton. This assertion is hit because `decode(Decoder& decoder, NSArray<Class> *allowedClasses)` expects the decoded object (of class `_NSArrayM`) to be equal to `NSArray.class`. We fix the crash by relaxing the debug assertion when decoding securely-codable objects over IPC. Instead of checking that the class of the decoded object is equal to one of the allowed classes, check that the object is a kind of any of the allowed classes. * Shared/Cocoa/ArgumentCodersCocoa.h: (IPC::isObjectClassAllowed): (IPC::decode): 2018-11-27 Tomas Popela <tpopela@redhat.com> [GTK][WPE] Remove temporary workaround in Source/WebKit/Platform*.cmake https://bugs.webkit.org/show_bug.cgi?id=192008 Reviewed by Michael Catanzaro. Looks like it's not needed anymore as the code compiles fine without it. * PlatformGTK.cmake: * PlatformWPE.cmake: 2018-11-27 Antti Koivisto <antti@apple.com> Factor mask layer applying in RemoteLayerTreePropertyApplier into a shared function https://bugs.webkit.org/show_bug.cgi?id=192001 Reviewed by Tim Horton. * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.h: * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm: (WebKit::RemoteLayerTreePropertyApplier::applyProperties): (WebKit::RemoteLayerTreePropertyApplier::updateMask): Shared function, with some special tricks for iOS backdrop layers. (WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToUIView): 2018-11-27 Antti Koivisto <antti@apple.com> Stop collecting related layers in RemoteLayerTreeHost::updateLayerTree https://bugs.webkit.org/show_bug.cgi?id=192003 Reviewed by Tim Horton. We can pass the node hash directly to RemoteLayerTreePropertyApplier. The collection step doesn't seem to add anything except an extra hash lookup. * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.h: * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm: (WebKit::RemoteLayerTreeHost::updateLayerTree): Pass m_nodes directly. Some random cleanups. 2018-11-27 Antti Koivisto <antti@apple.com> Remote tile layers shouldn't be UIViews https://bugs.webkit.org/show_bug.cgi?id=191953 Reviewed by Tim Horton. They don't need any UIView functionality, nor do they ever have UIView descendants. We can use lighter weight objects. * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.h: * Shared/RemoteLayerTree/RemoteLayerTreePropertyApplier.mm: (WebKit::RemoteLayerTreePropertyApplier::applyProperties): (WebKit::RemoteLayerTreePropertyApplier::updateChildren): Factor to a function shared between platforms. Support having both views and plain layers in the same tree. Assert that all siblings are of the same type and that we don't attempt to add views to layers. (WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToUIView): * UIProcess/RemoteLayerTree/RemoteLayerTreeHost.mm: (WebKit::RemoteLayerTreeHost::makeNode): Use new plain layer on Mac too. * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.h: * UIProcess/RemoteLayerTree/RemoteLayerTreeNode.mm: (-[WKPlainRemoteLayer description]): Add a CALayer subclass so we can have a description, similar to WKCompositingView and pals. (WebKit::RemoteLayerTreeNode::createWithPlainLayer): (WebKit::RemoteLayerTreeNode::detachFromParent): Support having null view. (WebKit::RemoteLayerTreeNode::appendLayerDescription): Helper for layer descriptions. * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm: (WebKit::RemoteLayerTreeHost::makeNode): Construct plain layers for tiles. * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm: (-[WKCompositingView description]): (-[WKUIRemoteView description]): (-[WKBackdropView description]): 2018-11-27 Fujii Hironori <Hironori.Fujii@sony.com> Remove "using namespace WebCore" under Source/WebKit/WebProcess/InjectedBundle/API https://bugs.webkit.org/show_bug.cgi?id=191995 Reviewed by Alex Christensen. The statement "using namespace WebCore" should be placed inside namespace WebKit for unified source builds. But, source files defining WebKit API can't be enclosed by namespace WebKit { } becuase they are defined in the global scope. "using namespace WebCore" in global scope and unified source builds may cause build breaks (Bug 191853). Remove "using namespace WebCore" in the global scope. Use "WebCore::" prefix instead. * WebProcess/InjectedBundle/API/c/WKBundle.cpp: (WKBundleClearAllDatabases): (WKBundleSetDatabaseQuota): (WKBundleClearResourceLoadStatistics): (WKBundleResourceLoadStatisticsNotifyObserver): * WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp: (WKBundleFrameGetFrameLoadState): (WKBundleFrameClearOpener): (WKBundleFrameCallShouldCloseOnWebView): (WKBundleFrameCopySecurityOrigin): (WKBundleFrameFocus): * WebProcess/InjectedBundle/API/c/WKBundleInspector.cpp: * WebProcess/InjectedBundle/API/c/WKBundlePageOverlay.cpp: 2018-11-26 Wenson Hsieh <wenson_hsieh@apple.com> [Cocoa] No way for clients to tell whether the content view is in the responder chain when the web view is https://bugs.webkit.org/show_bug.cgi?id=169212 <rdar://problem/30899656> Reviewed by Tim Horton. Add an SPI hook to allow internal WKWebView clients to determine whether the WKWebView's content view is the first responder. Intended for use by clients, such as Mail, that embed native text input views and other views that may become first responder within the view hierarchy of the WKWebView. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _contentViewIsFirstResponder]): * UIProcess/API/Cocoa/WKWebViewPrivate.h: 2018-11-26 Tim Horton <timothy_horton@apple.com> Insert <attachment> elements under editable images to make their backing data accessible https://bugs.webkit.org/show_bug.cgi?id=191844 <rdar://problem/30900149> Reviewed by Simon Fraser. * DerivedSources.make: * SourcesCocoa.txt: * UIProcess/API/APIAttachment.h: fileWrapper() is no longer a trivial getter; it can now construct the file wrapper from a file wrapper generator if necessary. Add setFileWrapperGenerator() and invalidateGeneratedFileWrapper(). Make m_fileWrapper mutable so it can be adjusted inside its own getter. * UIProcess/API/Cocoa/APIAttachmentCocoa.mm: (API::Attachment::fileWrapper const): If we have a fileWrapperGenerator and don't have a cached file wrapper, create one before returning it. (API::Attachment::invalidateGeneratedFileWrapper): Invalidate the currently-cached file wrapper. The next time a client requests the file wrapper it will be regenerated. (API::Attachment::fileName const): (API::Attachment::fileSizeForDisplay const): (API::Attachment::enclosingImageData const): (API::Attachment::isEmpty const): (API::Attachment::createSerializedRepresentation const): Make use of fileWrapper() instead of m_fileWrapper directly, to ensure that it is created lazily if necessary. (API::Attachment::setFileWrapperGenerator): * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm: (WebKit::RemoteLayerTreeHost::createEmbeddedView): * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.h: * UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm: (-[WKEmbeddedView initWithEmbeddedViewID:]): Defer to EditableImageController for creating WKDrawingViews for editable images. This is done primarily so we don't have to pollute Remote Layer Tree and DrawingArea interfaces with editable-image-specific messages. * UIProcess/WebPageProxy.cpp: (WebKit::m_editableImageController): (WebKit::m_resetRecentCrashCountTimer): Deleted. * UIProcess/WebPageProxy.h: (WebKit::WebPageProxy::editableImageController): Keep an EditableImageController on the WebPageProxy. * UIProcess/ios/EditableImageController.h: Added. * UIProcess/ios/EditableImageController.messages.in: Added. * UIProcess/ios/EditableImageController.mm: Added. (WebKit::EditableImageController::EditableImageController): (WebKit::EditableImageController::~EditableImageController): (WebKit::EditableImageController::ensureEditableImage): (WebKit::EditableImageController::editableImage): (WebKit::EditableImageController::didCreateEditableImage): (WebKit::EditableImageController::didDestroyEditableImage): (WebKit::EditableImageController::associateWithAttachment): (WebKit::EditableImageController::invalidateAttachmentForEditableImage): Add EditableImageController, which keeps track of EditableImages. It can be messaged directly to create or destroy the UI-side state of an editable image, and also to associate a WKDrawingView with a particular attachment. * UIProcess/ios/WKDrawingView.h: * UIProcess/ios/WKDrawingView.mm: (-[WKDrawingView initWithEmbeddedViewID:webPageProxy:]): Store the WebPageProxy (weakly) so that we can get to the EditableImageController. (-[WKDrawingView layoutSubviews]): (-[WKDrawingView PNGRepresentation]): Synchronously render the PKCanvasView to PNG. (-[WKDrawingView drawingDidChange:]): If the drawing changes, inform the APIAttachment that it needs to discard its NSFileWrapper; a new one will be generated lazily. (-[WKDrawingView init]): Deleted. * WebKit.xcodeproj/project.pbxproj: * WebProcess/WebCoreSupport/WebChromeClient.h: * WebProcess/WebCoreSupport/ios/WebChromeClientIOS.mm: (WebKit::WebChromeClient::associateEditableImageWithAttachment): (WebKit::WebChromeClient::didCreateEditableImage): (WebKit::WebChromeClient::didDestroyEditableImage): 2018-11-26 Jer Noble <jer.noble@apple.com> Adopt -setOverrideRouteSharingPolicy:routingContextUID: SPI https://bugs.webkit.org/show_bug.cgi?id=190951 <rdar://problem/45213065> Reviewed by Alex Christensen. Add an asyncronous reply request to VideoFullscreenManager. * Platform/IPC/MessageSender.h: (IPC::MessageSender::sendWithAsyncReply): * UIProcess/Cocoa/VideoFullscreenManagerProxy.h: * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm: (WebKit::VideoFullscreenModelContext::requestRouteSharingPolicyAndContextUID): * WebProcess/cocoa/VideoFullscreenManager.h: * WebProcess/cocoa/VideoFullscreenManager.messages.in: * WebProcess/cocoa/VideoFullscreenManager.mm: (WebKit::VideoFullscreenManager::requestRouteSharingPolicyAndContextUID): 2018-11-26 Alex Christensen <achristensen@webkit.org> Rename WKWebView._safeBrowsingWarningForTesting to _safeBrowsingWarning to use it for more than testing https://bugs.webkit.org/show_bug.cgi?id=191981 Reviewed by Tim Horton. * UIProcess/API/Cocoa/WKWebView.mm: (-[WKWebView _safeBrowsingWarning]): (-[WKWebView _safeBrowsingWarningForTesting]): Deleted. * UIProcess/API/Cocoa/WKWebViewPrivate.h: 2018-11-26 Daniel Bates <dabates@apple.com> REGRESSION (r237738): Command Down Arrow doesn't scroll to the end of a page anymore https://bugs.webkit.org/show_bug.cgi?id=191967 <rdar://problem/45976390> Reviewed by Tim Horton. Fixes an issue where pressing Command + Down Arrow does not scroll the view to the end of the page. Following r237738 the value of the enumerations used to identify modifier keys (e.g. Shift) changed to match the values of the corresponding enumerations in GraphicsServices, which are the enumerations UIKit uses to computes the modifier flags bitmask when instantiating a WebEvent to pass to WebKit. Before r237738 WebKit was using enumerations whose values matched the values of the corresponding UIKit public API UIKeyModifier* enumerations. For non-content editable elements, WebKit intercepts UIKit events in -_handleKeyUIEvent, synthesizes and dispatches its own WebEvent. However it was creating WebEvents with a modifier flags bitmask built from the UIKeyModifier* enumerations, -_modifierFlags, as opposed to a bitmask from the GraphicsServices enumerations, -_gsModifierFlags. Instead WebKit should call -_gsModifierFlags to compute the GraphicsServices-compatible modifier flags bitmask when instantiating a WebEvent. * Platform/spi/ios/UIKitSPI.h: Expose -_gsModifierFlags and remove -_modifierFlags. * UIProcess/ios/WKContentViewInteraction.mm: (-[WKContentView _handleKeyUIEvent:]): Remove unnecessary code to update the current modifier state. This will be done by the WebProcess when it receives the keyboard event. (-[WKContentView _didHandleKeyEvent:eventWasHandled:]): Do not pass modifier flags changed events to the scrolling animator as it does not know how to handle these kinds of events and triggers an assertion failure when it tries to read the input string from the event (calls -charactersIgnoringModifiers). FlagsChanged WebEvents events do not have an input string just like a FlagsChanged NSEvent that they model on Mac. * UIProcess/ios/WKWebEvent.mm: (-[WKWebEvent initWithEvent:]): Pass the value of -_gsModifierFlags for the modifier flags bitmask instead of the value of -_modifierFlags. 2018-11-26 Chris Dumez <cdumez@apple.com> [PSON] process pre-warming should not be on for everyone https://bugs.webkit.org/show_bug.cgi?id=191966 <rdar://problem/46138499> Reviewed by Ryosuke Niwa. If automatic process-prewarming is not explicitly turned on/off by the client, then we now only turn it on automatically after the first process swap. Previously, it was always enabled if process-swap on cross-site navigation was enabled (which is the case by default for all apps). This is important because some apps do not actually browse (only display static content) or never browse cross-site, and thus would not benefit from process prewarming and yet pay a memory cost. * UIProcess/API/APIProcessPoolConfiguration.h: Add m_clientWouldBenefitFromAutomaticProcessPrewarming flag which is false by default and is used as a fallback if the client did not call setIsAutomaticProcessWarmingEnabled().