WebKit-https.git
19 months agoUnreviewed, update exception scope for putByIndexBeyondVectorLength
ysuzuki@apple.com [Tue, 4 Jun 2019 22:08:43 +0000 (22:08 +0000)]
Unreviewed, update exception scope for putByIndexBeyondVectorLength
https://bugs.webkit.org/show_bug.cgi?id=198477

* runtime/JSObject.cpp:
(JSC::JSObject::putByIndexBeyondVectorLength):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246084 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoSticky positioning is jumpy in many overflow cases
antti@apple.com [Tue, 4 Jun 2019 21:53:57 +0000 (21:53 +0000)]
Sticky positioning is jumpy in many overflow cases
https://bugs.webkit.org/show_bug.cgi?id=198532
<rdar://problem/51400532>

Reviewed by Simon Fraser.

Source/WebCore:

Tests: scrollingcoordinator/ios/sticky-overflow-no-stacking-context-no-stick-1.html
       scrollingcoordinator/ios/sticky-overflow-no-stacking-context-no-stick-2.html
       scrollingcoordinator/ios/sticky-overflow-no-stacking-context-stick-1.html
       scrollingcoordinator/ios/sticky-overflow-no-stacking-context-stick-2.html
       scrollingcoordinator/ios/sticky-overflow-stacking-context-no-stick.html
       scrollingcoordinator/ios/sticky-overflow-stacking-context-stick.html

* page/scrolling/ScrollingTree.cpp:
(WebCore::ScrollingTree::notifyRelatedNodesAfterScrollPositionChange):
(WebCore::ScrollingTree::notifyRelatedNodesRecursive):

Simplify for relatedNodeScrollPositionDidChange removal.

* page/scrolling/ScrollingTree.h:
* page/scrolling/ScrollingTreeNode.cpp:
(WebCore::ScrollingTreeNode::relatedNodeScrollPositionDidChange): Deleted.
* page/scrolling/ScrollingTreeNode.h:
* page/scrolling/cocoa/ScrollingTreeFixedNode.mm:
(WebCore::ScrollingTreeFixedNode::applyLayerPositions):
* page/scrolling/cocoa/ScrollingTreePositionedNode.h:
* page/scrolling/cocoa/ScrollingTreePositionedNode.mm:
(WebCore::ScrollingTreePositionedNode::scrollOffsetSinceLastCommit const):

Factor into a function.

(WebCore::ScrollingTreePositionedNode::applyLayerPositions):
(WebCore::ScrollingTreePositionedNode::relatedNodeScrollPositionDidChange): Deleted.

We can't bail out based on changed node as that makes us compute different positions based on what the change root is.
Since all relatedNodeScrollPositionDidChange functions now always simply call applyLayerPositions we can remove the whole thing.

* page/scrolling/cocoa/ScrollingTreeStickyNode.mm:
(WebCore::ScrollingTreeStickyNode::applyLayerPositions):

Implement taking into account that the containing scroller may not be our ancestor.

LayoutTests:

* scrollingcoordinator/ios/sticky-overflow-no-stacking-context-no-stick-1-expected.html: Added.
* scrollingcoordinator/ios/sticky-overflow-no-stacking-context-no-stick-1.html: Added.
* scrollingcoordinator/ios/sticky-overflow-no-stacking-context-no-stick-2-expected.html: Added.
* scrollingcoordinator/ios/sticky-overflow-no-stacking-context-no-stick-2.html: Added.
* scrollingcoordinator/ios/sticky-overflow-no-stacking-context-stick-1-expected.html: Added.
* scrollingcoordinator/ios/sticky-overflow-no-stacking-context-stick-1.html: Added.
* scrollingcoordinator/ios/sticky-overflow-no-stacking-context-stick-2-expected.html: Added.
* scrollingcoordinator/ios/sticky-overflow-no-stacking-context-stick-2.html: Added.
* scrollingcoordinator/ios/sticky-overflow-stacking-context-no-stick-expected.html: Added.
* scrollingcoordinator/ios/sticky-overflow-stacking-context-no-stick.html: Added.
* scrollingcoordinator/ios/sticky-overflow-stacking-context-stick-expected.html: Added.
* scrollingcoordinator/ios/sticky-overflow-stacking-context-stick.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246083 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[ews-app] Add authentication while fetching bugs
aakash_jain@apple.com [Tue, 4 Jun 2019 21:40:00 +0000 (21:40 +0000)]
[ews-app] Add authentication while fetching bugs
https://bugs.webkit.org/show_bug.cgi?id=198415
<rdar://problem/51298710>

Reviewed by Jonathan Bedard.

* BuildSlaveSupport/ews-app/ews/common/bugzilla.py:
(Bugzilla._fetch_attachment_json): Use api_key if configured in environment variable.
(BugzillaBeautifulSoup.authenticate): Method to authenticate, logic copied from webkitpy/common/net/bugzilla/bugzilla.py
(BugzillaBeautifulSoup._load_query):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246082 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[ews-build] Do not display unnecessary steps in the Buildbot build page UI
aakash_jain@apple.com [Tue, 4 Jun 2019 21:27:07 +0000 (21:27 +0000)]
[ews-build] Do not display unnecessary steps in the Buildbot build page UI
https://bugs.webkit.org/show_bug.cgi?id=198218
<rdar://problem/51104544>

Reviewed by Jonathan Bedard.

* BuildSlaveSupport/ews-build/steps.py:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246080 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoWKWebsiteDataStore API fails to fetch web storage data for non-persistent data store
sihui_liu@apple.com [Tue, 4 Jun 2019 20:54:31 +0000 (20:54 +0000)]
WKWebsiteDataStore API fails to fetch web storage data for non-persistent data store
https://bugs.webkit.org/show_bug.cgi?id=198317
Source/WebKit:

<rdar://problem/51244662>

Reviewed by Alex Christensen.

Use LocalStorageNameSpace instead of SessionStorageNameSpace for localStorage in ephemeral session or
websiteDataStore.

Reland r245943 as test has been fixed in r246012.

* NetworkProcess/WebStorage/StorageManager.cpp:
(WebKit::StorageManager::StorageArea::isEphemeral const):
(WebKit::StorageManager::StorageArea::removeListener):
(WebKit::StorageManager::StorageArea::setItems):
(WebKit::StorageManager::StorageArea::openDatabaseAndImportItemsIfNeeded const):
(WebKit::StorageManager::LocalStorageNamespace::~LocalStorageNamespace):
(WebKit::StorageManager::LocalStorageNamespace::getOrCreateStorageArea):
(WebKit::StorageManager::LocalStorageNamespace::clearAllStorageAreas):
(WebKit::StorageManager::LocalStorageNamespace::ephemeralOrigins const):
(WebKit::StorageManager::LocalStorageNamespace::cloneTo):
(WebKit::StorageManager::StorageManager):
(WebKit::StorageManager::cloneSessionStorageNamespace):
(WebKit::StorageManager::getLocalStorageOrigins):
(WebKit::StorageManager::getLocalStorageOriginDetails):
(WebKit::StorageManager::deleteLocalStorageEntriesForOrigin):
(WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
(WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):
(WebKit::StorageManager::createLocalStorageMap):
(WebKit::StorageManager::createTransientLocalStorageMap):
(WebKit::StorageManager::createSessionStorageMap):
(WebKit::StorageManager::destroyStorageMap):
(WebKit::StorageManager::getValues):
(WebKit::StorageManager::setItem):
(WebKit::StorageManager::removeItem):
(WebKit::StorageManager::clear):
(WebKit::StorageManager::suspend):
(WebKit::StorageManager::resume):
(WebKit::StorageManager::StorageArea::isSessionStorage const): Deleted.
* NetworkProcess/WebStorage/StorageManager.h:
(): Deleted.
* WebProcess/WebStorage/StorageAreaMap.cpp:
(WebKit::StorageAreaMap::dispatchStorageEvent):
(WebKit::StorageAreaMap::dispatchSessionStorageEvent):
(WebKit::StorageAreaMap::connect):
* WebProcess/WebStorage/StorageNamespaceImpl.cpp:
(WebKit::StorageNamespaceImpl::createEphemeralLocalStorageNamespace):
(WebKit::StorageNamespaceImpl::createLocalStorageNamespace):
* WebProcess/WebStorage/StorageNamespaceImpl.h:
* WebProcess/WebStorage/WebStorageNamespaceProvider.cpp:
(WebKit::WebStorageNamespaceProvider::createLocalStorageNamespace):

Tools:

Reviewed by Alex Christensen.

* TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
(TestWebKitAPI::TEST):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246079 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoUploading third-party applications from /Applications needs additional syscall access
achristensen@apple.com [Tue, 4 Jun 2019 19:37:14 +0000 (19:37 +0000)]
Uploading third-party applications from /Applications needs additional syscall access
https://bugs.webkit.org/show_bug.cgi?id=198537
<rdar://problem/51164741>

Reviewed by Brent Fulgham.

* WebProcess/com.apple.WebProcess.sb.in:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246077 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[WinCairo] Implement cpu and memory measuring functions.
commit-queue@webkit.org [Tue, 4 Jun 2019 19:15:21 +0000 (19:15 +0000)]
[WinCairo] Implement cpu and memory measuring functions.
https://bugs.webkit.org/show_bug.cgi?id=198466

Patch by Takashi Komori <Takashi.Komori@sony.com> on 2019-06-04
Reviewed by Don Olmstead.

.:

* Source/cmake/OptionsWin.cmake:

Source/WebCore:

Tests: inspector/memory/tracking.html
       inspector/cpu-profiler/tracking.html

* PlatformWinCairo.cmake:
* page/ResourceUsageThread.h:
* page/win/ResourceUsageOverlayWin.cpp: Copied from Tools/WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp.
(WebCore::ResourceUsageOverlay::platformInitialize):
(WebCore::ResourceUsageOverlay::platformDestroy):
* page/win/ResourceUsageThreadWin.cpp: Added.
(WebCore::ResourceUsageThread::platformSaveStateBeforeStarting):
(WebCore::fileTimeToUint64):
(WebCore::getCurrentCpuTime):
(WebCore::cpuUsage):
(WebCore::memoryUsage):
(WebCore::ResourceUsageThread::platformCollectCPUData):
(WebCore::ResourceUsageThread::platformCollectMemoryData):

Tools:

* WebKitTestRunner/InjectedBundle/win/TestRunnerWin.cpp:
(WTR::TestRunner::inspectorTestStubURL):

LayoutTests:

* platform/wincairo/TestExpectations:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246076 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoArgument elimination should check transitive dependents for interference
tzagallo@apple.com [Tue, 4 Jun 2019 19:06:32 +0000 (19:06 +0000)]
Argument elimination should check transitive dependents for interference
https://bugs.webkit.org/show_bug.cgi?id=198520
<rdar://problem/50863343>

Reviewed by Filip Pizlo.

JSTests:

* stress/argument-elimination-inline-rest-past-kill.js: Added.
(f2):
(f3):

Source/JavaScriptCore:

Consider the following program:

    a: CreateRest
    -->
        b: CreateRest
    <--
    c: Spread(@a)
    d: Spread(@b)
    e: NewArrayWithSpread(@a, @b)
    f: KillStack(locX)
    g: LoadVarargs(@e)

Suppose @b reads locX, then we cannot transform @e to PhantomNewArraySpread, since that would
move the stack access from @b into @g, and that stack location is no longer valid at that point.

We fix that by computing a set of all inline call frames that any argument elimination candidate
depends on and checking each of them for interference in `eliminateCandidatesThatInterfere`.

* dfg/DFGArgumentsEliminationPhase.cpp:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246075 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[Pointer Events] Only allow pointer capture if the pointer is in the active buttons...
commit-queue@webkit.org [Tue, 4 Jun 2019 19:00:12 +0000 (19:00 +0000)]
[Pointer Events] Only allow pointer capture if the pointer is in the active buttons state
https://bugs.webkit.org/show_bug.cgi?id=198479

Patch by Antoine Quint <graouts@apple.com> on 2019-06-04
Reviewed by Dean Jackson.

LayoutTests/imported/w3c:

Mark WPT progression.

* web-platform-tests/pointerevents/pointerevent_setpointercapture_inactive_button_mouse-expected.txt:

Source/WebCore:

The Pointer Events specification says that pointer capture can only be engaged provided the pointer is
in the active buttons state, which means that it has dispatched a "pointerdown" event more recently than
it has a "pointerup" event.

This is tested by web-platform-tests/pointerevents/pointerevent_setpointercapture_inactive_button_mouse.html.

That test showed a few issues that this patch addresses. First, we would update the pointerIsPressed state to
"true" only after a "pointerdown" event had been dispatched. This is incorrect since setPointerCapture() can,
and is likely to, be called during handling of a "pointerdown" event. So we now call pointerEventWillBeDispatched()
prior to dispatching a PointerEvent with a mouse type, which we only did previously for a PointerEvent with a
touch or pen type. If the event is "pointerdown", we set "pointerIsPressed" to true on the CapturingData object
matching the given pointer, and to false if the event is "pointerup".

Finally, we must also ensure that "pointerIsPressed" is set to true when creating CapturingData for a PointerEvent
with a touch or pen type since these types of pointer events implictly set capture.

* page/PointerCaptureController.cpp:
(WebCore::PointerCaptureController::setPointerCapture):
(WebCore::PointerCaptureController::dispatchEvent):
(WebCore::PointerCaptureController::pointerEventWillBeDispatched):
(WebCore::PointerCaptureController::pointerEventWasDispatched):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246074 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[JSC] InferredValue should not be a JSCell
ysuzuki@apple.com [Tue, 4 Jun 2019 18:27:59 +0000 (18:27 +0000)]
[JSC] InferredValue should not be a JSCell
https://bugs.webkit.org/show_bug.cgi?id=198407

Reviewed by Filip Pizlo.

Allocating InferredValue as a JSCell is too costly in terms of memory. Gmail has 90000 FunctionExecutables. And each gets
InferredValue, which takes 32 bytes. So it takes 2.7 MB memory footprint.

In this patch, we introduce a new container InferredValue<>. Which is similar to WriteBarrier<> container, but it replaces
the existing InferredValue cells with one pointer size field. The implementation of InferredValue<> is similar to
InlineWatchpointSet. But we encode JSCell* too to the pointer data of InlineWatchpointSet. So sizeof(InferredValue<>) is one
pointer size while it keeps Watchpoint feature and JSCell holder feature.

InferredValue<> needs validation in GC finalize phase. So this patch also makes SymbolTable Iso-allocated.

* JavaScriptCore.xcodeproj/project.pbxproj:
* Sources.txt:
* bytecode/ObjectAllocationProfileInlines.h:
(JSC::ObjectAllocationProfileBase<Derived>::initializeProfile):
* bytecode/Watchpoint.h:
* dfg/DFGAbstractInterpreterInlines.h:
(JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
* dfg/DFGByteCodeParser.cpp:
(JSC::DFG::ByteCodeParser::get):
(JSC::DFG::ByteCodeParser::parseBlock):
* dfg/DFGClobberize.h:
(JSC::DFG::clobberize):
* dfg/DFGClobbersExitState.cpp:
(JSC::DFG::clobbersExitState):
* dfg/DFGDesiredWatchpoints.cpp:
(JSC::DFG::SymbolTableAdaptor::add):
(JSC::DFG::FunctionExecutableAdaptor::add):
(JSC::DFG::DesiredWatchpoints::addLazily):
(JSC::DFG::DesiredWatchpoints::reallyAdd):
(JSC::DFG::DesiredWatchpoints::areStillValid const):
(JSC::DFG::DesiredWatchpoints::dumpInContext const):
(JSC::DFG::InferredValueAdaptor::add): Deleted.
* dfg/DFGDesiredWatchpoints.h:
(JSC::DFG::SymbolTableAdaptor::hasBeenInvalidated):
(JSC::DFG::SymbolTableAdaptor::dumpInContext):
(JSC::DFG::FunctionExecutableAdaptor::hasBeenInvalidated):
(JSC::DFG::FunctionExecutableAdaptor::dumpInContext):
(JSC::DFG::DesiredWatchpoints::isWatched):
(JSC::DFG::InferredValueAdaptor::hasBeenInvalidated): Deleted.
(JSC::DFG::InferredValueAdaptor::dumpInContext): Deleted.
* dfg/DFGObjectAllocationSinkingPhase.cpp:
* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::compileNewFunction):
(JSC::DFG::SpeculativeJIT::compileCreateActivation):
* ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::compileCreateActivation):
(JSC::FTL::DFG::LowerDFGToB3::compileNewFunction):
* heap/Heap.cpp:
(JSC::Heap::finalizeUnconditionalFinalizers):
* runtime/FunctionExecutable.cpp:
(JSC::FunctionExecutable::FunctionExecutable):
(JSC::FunctionExecutable::finishCreation):
(JSC::FunctionExecutable::visitChildren):
* runtime/FunctionExecutable.h:
* runtime/FunctionExecutableInlines.h: Copied from Source/JavaScriptCore/runtime/InferredValueInlines.h.
(JSC::FunctionExecutable::finalizeUnconditionally):
* runtime/InferredValue.cpp: Removed.
* runtime/InferredValue.h:
(JSC::InferredValue::inferredValue):
(JSC::InferredValue::InferredValue):
(JSC::InferredValue::~InferredValue):
(JSC::InferredValue::stateOnJSThread const):
(JSC::InferredValue::state const):
(JSC::InferredValue::hasBeenInvalidated const):
(JSC::InferredValue::isStillValid const):
(JSC::InferredValue::invalidate):
(JSC::InferredValue::isBeingWatched const):
(JSC::InferredValue::notifyWrite):
(JSC::InferredValue::isThin):
(JSC::InferredValue::isFat):
(JSC::InferredValue::decodeState):
(JSC::InferredValue::encodeState):
(JSC::InferredValue::isThin const):
(JSC::InferredValue::isFat const):
(JSC::InferredValue::fat):
(JSC::InferredValue::fat const):
(JSC::InferredValue::inflate):
(JSC::InferredValue<JSCellType>::InferredValueWatchpointSet::notifyWriteSlow):
(JSC::InferredValue<JSCellType>::notifyWriteSlow):
(JSC::InferredValue<JSCellType>::add):
(JSC::InferredValue<JSCellType>::inflateSlow):
(JSC::InferredValue<JSCellType>::freeFat):
* runtime/InferredValueInlines.h:
(JSC::InferredValue<JSCellType>::finalizeUnconditionally):
(JSC::InferredValue::finalizeUnconditionally): Deleted.
* runtime/JSFunctionInlines.h:
(JSC::JSFunction::createWithInvalidatedReallocationWatchpoint):
* runtime/JSSymbolTableObject.h:
(JSC::JSSymbolTableObject::setSymbolTable):
* runtime/SymbolTable.cpp:
(JSC::SymbolTable::finishCreation):
(JSC::SymbolTable::visitChildren):
* runtime/SymbolTable.h:
* runtime/SymbolTableInlines.h: Copied from Source/JavaScriptCore/runtime/InferredValueInlines.h.
(JSC::SymbolTable::finalizeUnconditionally):
* runtime/VM.cpp:
(JSC::VM::VM):
* runtime/VM.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246073 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoFix 32-bit/64-bit mismatch in PointerCaptureController::elementWasRemoved
krollin@apple.com [Tue, 4 Jun 2019 17:59:51 +0000 (17:59 +0000)]
Fix 32-bit/64-bit mismatch in PointerCaptureController::elementWasRemoved
https://bugs.webkit.org/show_bug.cgi?id=198501
<rdar://problem/51370464>

Reviewed by Chris Dumez.

keyAndValue.key is assigned to pointerId. KeyAndValue.key is a
int64_t, whereas pointerId is a PointerID, aka int32_t. This mismatch
is normally just a warning, but breaks builds where warnings are
treated as errors.

This issue is not encountered in most builds because the warning is
disabled in the majority of build configurations. But there are some
where the warning is not disabled, and so those builds break.

Address this conversion error/warning by explicitly casting
keyAndValue.key to a PointerID (and adding a debug check to make sure
the cast is OK).

No new tests -- no new functionality.

* page/PointerCaptureController.cpp:
(WebCore::PointerCaptureController::elementWasRemoved):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246072 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoArgument elimination should check for negative indices in GetByVal
tzagallo@apple.com [Tue, 4 Jun 2019 17:56:59 +0000 (17:56 +0000)]
Argument elimination should check for negative indices in GetByVal
https://bugs.webkit.org/show_bug.cgi?id=198302
<rdar://problem/51188095>

Reviewed by Filip Pizlo.

JSTests:

* stress/eliminate-arguments-negative-rest-access.js: Added.
(inlinee):
(opt):

Source/JavaScriptCore:

In DFG::ArgumentEliminationPhase, the index is treated as unsigned, but there's no check
for overflow in the addition. In compileGetMyArgumentByVal, there's a check for overflow,
but the index is treated as signed, resulting in an index lower than numberOfArgumentsToSkip.

* dfg/DFGArgumentsEliminationPhase.cpp:
* ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::compileGetMyArgumentByVal):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246071 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[Pointer Events] Expose navigator.maxTouchPoints
graouts@webkit.org [Tue, 4 Jun 2019 17:45:43 +0000 (17:45 +0000)]
[Pointer Events] Expose navigator.maxTouchPoints
https://bugs.webkit.org/show_bug.cgi?id=198468
<rdar://problem/51273029>

Reviewed by Chris Dumez.

Source/WebCore:

Expose the navigator.maxTouchPoints property when Pointer Events are enabled both at compile-time and run-time.
We return a canned value for this on iOS touch-enabled devices that matches the number of simultaneous touches
supported by the system, which is 5. In fact, iPad support more simultaneous touches, but it doesn't seem worthy
to expose this level of granularity due to fingerprinting practices. In practice, what really matters is returning
0, 1 or more than 1 for this value to identify multi-touch support.

Test: js/dom/navigator-maxtouchpoints.html

* CMakeLists.txt:
* DerivedSources-input.xcfilelist:
* DerivedSources-output.xcfilelist:
* DerivedSources.make:
* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* dom/NavigatorMaxTouchPoints.idl: Added.
* page/Navigator.idl:
* page/Navigator.h:
(WebCore::Navigator::maxTouchPoints const):

LayoutTests:

* js/dom/navigator-maxtouchpoints-expected.txt: Added.
* js/dom/navigator-maxtouchpoints.html: Added.
* platform/mac-highsierra-wk1/fast/dom/navigator-detached-no-crash-expected.txt:
* platform/mac-highsierra/fast/dom/navigator-detached-no-crash-expected.txt:
* platform/mac-wk1/fast/dom/navigator-detached-no-crash-expected.txt:
* platform/mac-wk2/fast/dom/navigator-detached-no-crash-expected.txt:
* platform/win/js/dom/navigator-maxtouchpoints-expected.txt: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246070 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoLazily construct the NetworkHTTPSUpgradeChecker
cdumez@apple.com [Tue, 4 Jun 2019 17:09:04 +0000 (17:09 +0000)]
Lazily construct the NetworkHTTPSUpgradeChecker
https://bugs.webkit.org/show_bug.cgi?id=198500

Reviewed by Alex Christensen.

Lazily construct the NetworkHTTPSUpgradeChecker since the feature is off by default and this
avoids unnecessarily opening its database in the common case.

* NetworkProcess/NetworkProcess.h:
* NetworkProcess/cocoa/NetworkProcessCocoa.mm:
(WebKit::NetworkProcess::networkHTTPSUpgradeChecker):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246069 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoREGRESSION (r245913) [ Debug ] ASSERTION FAILED: m_swConnectionsByIdentifier.contains...
youenn@apple.com [Tue, 4 Jun 2019 16:11:38 +0000 (16:11 +0000)]
REGRESSION (r245913) [ Debug ] ASSERTION FAILED: m_swConnectionsByIdentifier.contains(connection.serverConnectionIdentifier()) Layout Test http/wpt/service-workers/update-service-worker.https.html is a flaky crash
https://bugs.webkit.org/show_bug.cgi?id=198434
<rdar://problem/51313917>

Reviewed by Alex Christensen.

Iterate through the connectionID-based connection map instead of the sessionID-based map to notify them their connection is lost.

* WebProcess/Network/NetworkProcessConnection.cpp:
(WebKit::NetworkProcessConnection::didClose):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246068 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[LFC][IFC] Decouple float placement and line shrinking
zalan@apple.com [Tue, 4 Jun 2019 15:52:25 +0000 (15:52 +0000)]
[LFC][IFC] Decouple float placement and line shrinking
https://bugs.webkit.org/show_bug.cgi?id=198528
<rdar://problem/51397638>

Reviewed by Antti Koivisto.

In LineLayout::placeInlineItems() float handling should be only about shrinking the current line, the actual
float placement should happen later when we construct the the display boxes/runs. It enables the preferred width
computation to call placeInlineItems() to gather line widths without accidentally mutating the layout context.

* layout/inlineformatting/InlineFormattingContext.h:
* layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
(WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const):
(WebCore::Layout::InlineFormattingContext::LineLayout::layout const):
(WebCore::Layout::InlineFormattingContext::LineLayout::createDisplayRuns const):
(WebCore::Layout::InlineFormattingContext::LineLayout::handleFloat const): Deleted.
* layout/inlineformatting/InlineItem.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246067 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[LFC][IFC] Add hard line break handling to LineBreaker
zalan@apple.com [Tue, 4 Jun 2019 15:49:56 +0000 (15:49 +0000)]
[LFC][IFC] Add hard line break handling to LineBreaker
https://bugs.webkit.org/show_bug.cgi?id=198503
<rdar://problem/51373482>

Reviewed by Antti Koivisto.

LineBreaker should simply return BreakingContext::Keep with the breaking opportunity of yes.

* layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
(WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const):
* layout/inlineformatting/InlineLineBreaker.cpp:
(WebCore::Layout::LineBreaker::breakingContext):
(WebCore::Layout::LineBreaker::wordBreakingBehavior const):
(WebCore::Layout::LineBreaker::isAtBreakingOpportunity):
* layout/inlineformatting/InlineLineBreaker.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246066 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[LFC][IFC] Remove InlineItem::width
zalan@apple.com [Tue, 4 Jun 2019 15:48:04 +0000 (15:48 +0000)]
[LFC][IFC] Remove InlineItem::width
https://bugs.webkit.org/show_bug.cgi?id=198502
<rdar://problem/51371744>

Reviewed by Antti Koivisto.

InlineItems are supposd to work across subsequent layouts (and in preferred width computation as well) so they should
not hold on to layout information (run width). This would not work with split runs either.

* layout/inlineformatting/InlineFormattingContext.h:
* layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
(WebCore::Layout::UncommittedContent::runs):
(WebCore::Layout::UncommittedContent::isEmpty const):
(WebCore::Layout::UncommittedContent::size const):
(WebCore::Layout::UncommittedContent::add):
(WebCore::Layout::UncommittedContent::reset):
(WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const):
(WebCore::Layout::InlineFormattingContext::LineLayout::computedIntrinsicWidth const):
(WebCore::Layout::InlineFormattingContext::LineLayout::createDisplayRuns const):
(): Deleted.
(WebCore::Layout::InlineFormattingContext::LineLayout::commitInlineItemToLine const): Deleted.
* layout/inlineformatting/InlineItem.h:
(WebCore::Layout::InlineItem::style const):
(): Deleted.
(WebCore::Layout::InlineItem::setWidth): Deleted.
(WebCore::Layout::InlineItem::width const): Deleted.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246065 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[iOS] UIProcess' background task expiration handler may get called after the app...
cdumez@apple.com [Tue, 4 Jun 2019 15:46:45 +0000 (15:46 +0000)]
[iOS] UIProcess' background task expiration handler may get called after the app is foreground again
https://bugs.webkit.org/show_bug.cgi?id=198380
<rdar://problem/49762471>

Reviewed by Geoff Garen.

UIProcess' background task expiration handler may get called after the app is foreground again. When
this happens, we already have a foreground assertion on behalf of the WebContent process, and the view
is visible. We would send the WillSuspendImminently IPC to the WebContent process, which would freeze
its layers, even though it is visible on screen.

To address the issue, we now check if the app is visible in the expiration handler. If it is visible,
we do not notify clients of imminent suspension. Instead, we end the background task right away and
call _updateBackgroundTask asynchronously to start a new background task if necessary.

* UIProcess/ios/ProcessAssertionIOS.mm:
(-[WKProcessAssertionBackgroundTaskManager _updateBackgroundTask]):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246064 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[LFC][IFC] Move run width measuring out of LineBreaker
zalan@apple.com [Tue, 4 Jun 2019 15:26:04 +0000 (15:26 +0000)]
[LFC][IFC] Move run width measuring out of LineBreaker
https://bugs.webkit.org/show_bug.cgi?id=198491
<rdar://problem/51363554>

Reviewed by Antti Koivisto.

LineBreaker should not need to deal with measuring runs.
This is also in preparation for removing InlineItem::width().

* layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
(WebCore::Layout::inlineItemWidth):
(WebCore::Layout::InlineFormattingContext::LineLayout::placeInlineItems const):
(WebCore::Layout::InlineFormattingContext::LineLayout::computedIntrinsicWidth const):
* layout/inlineformatting/InlineLineBreaker.cpp:
(WebCore::Layout::LineBreaker::breakingContext):
(WebCore::Layout::LineBreaker::LineBreaker): Deleted.
(WebCore::Layout::LineBreaker::runWidth const): Deleted.
(WebCore::Layout::LineBreaker::textWidth const): Deleted.
* layout/inlineformatting/InlineLineBreaker.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246063 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[LFC][IFC] Remove redundant InlineItem::width() calls.
zalan@apple.com [Tue, 4 Jun 2019 14:54:52 +0000 (14:54 +0000)]
[LFC][IFC] Remove redundant InlineItem::width() calls.
https://bugs.webkit.org/show_bug.cgi?id=198489
<rdar://problem/51360390>

Reviewed by Antti Koivisto.

This is in preparation for removing InlineItem::width().

* layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
(WebCore::Layout::InlineFormattingContext::LineLayout::handleFloat const):
(WebCore::Layout::InlineFormattingContext::LineLayout::commitInlineItemToLine const):
* layout/inlineformatting/InlineLine.cpp:
(WebCore::Layout::Line::appendNonBreakableSpace):
(WebCore::Layout::Line::appendInlineContainerStart):
(WebCore::Layout::Line::appendInlineContainerEnd):
* layout/inlineformatting/InlineLine.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246062 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoThe "mouseenter" and "pointerenter" events are fired from the bottom up
commit-queue@webkit.org [Tue, 4 Jun 2019 14:34:11 +0000 (14:34 +0000)]
The "mouseenter" and "pointerenter" events are fired from the bottom up
https://bugs.webkit.org/show_bug.cgi?id=198036
<rdar://problem/50940350>

Patch by Antoine Quint <graouts@apple.com> on 2019-06-04
Reviewed by Darin Adler.

Source/WebCore:

Ensure "mouseenter" and "pointerenter" events are dispatched from the bottom up to match the UI Events spec
at https://w3c.github.io/uievents/#events-mouseevent-event-order. We also fix the issue where "pointerevent"
and "pointerleave" events were dispatched as bubbling events on iOS which is not correct and was caught by the
new iOS test.

Tests: pointerevents/ios/enter-leave-order.html
       pointerevents/mouse/enter-leave-order.html

* dom/ios/PointerEventIOS.cpp:
(WebCore::typeCanBubble):
(WebCore::PointerEvent::PointerEvent):
* page/EventHandler.cpp:
(WebCore::EventHandler::updateMouseEventTargetNode):
* page/PointerCaptureController.cpp:
(WebCore::PointerCaptureController::dispatchEventForTouchAtIndex):

LayoutTests:

* fast/events/mouseenter-mouseleave-capture-expected.txt:
* fast/events/mouseenter-mouseleave-expected.txt:
* fast/events/mouseenterleave-on-subframe-expected.txt:
* fast/events/shadow-event-path-expected.txt:
* fast/shadow-dom/mouseenter-mouseleave-across-shadow-boundary-expected.txt:
* fast/shadow-dom/mouseenter-mouseleave-inside-shadow-tree-expected.txt:
* fast/shadow-dom/mouseenter-mouseleave-on-slot-parent-expected.txt:
* platform/mac-wk1/TestExpectations:
* platform/mac-wk2/fast/events/shadow-event-path-expected.txt:
* platform/mac/fast/events/shadow-event-path-2-expected.txt:
* pointerevents/ios/enter-leave-order-expected.txt: Added.
* pointerevents/ios/enter-leave-order.html: Added.
* pointerevents/mouse/enter-leave-order-expected.txt: Added.
* pointerevents/mouse/enter-leave-order.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246061 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoJSScript should not keep bytecode cache in memory
tzagallo@apple.com [Tue, 4 Jun 2019 11:14:10 +0000 (11:14 +0000)]
JSScript should not keep bytecode cache in memory
https://bugs.webkit.org/show_bug.cgi?id=198482

Reviewed by Saam Barati.

When JSScript writes to the cache, we keep the in-memory serialized bytecode alive.
Instead, we should only ever hold the memory mapped bytecode cache to avoid using
too much memory.

* API/JSScript.mm:
(-[JSScript writeCache:]):
* API/tests/testapi.mm:
(testBytecodeCacheWithSyntaxError):
* CMakeLists.txt:
* JavaScriptCore.xcodeproj/project.pbxproj:
* Sources.txt:
* jsc.cpp:
* parser/SourceProvider.h:
* runtime/BytecodeCacheError.cpp: Added.
(JSC::BytecodeCacheError::StandardError::isValid const):
(JSC::BytecodeCacheError::StandardError::message const):
(JSC::BytecodeCacheError::WriteError::isValid const):
(JSC::BytecodeCacheError::WriteError::message const):
(JSC::BytecodeCacheError::operator=):
(JSC::BytecodeCacheError::isValid const):
(JSC::BytecodeCacheError::message const):
* runtime/BytecodeCacheError.h: Added.
(JSC::BytecodeCacheError::StandardError::StandardError):
(JSC::BytecodeCacheError::WriteError::WriteError):
* runtime/CachedBytecode.h:
(JSC::CachedBytecode::create):
* runtime/CachedTypes.cpp:
(JSC::Encoder::Encoder):
(JSC::Encoder::release):
(JSC::Encoder::releaseMapped):
(JSC::encodeCodeBlock):
(JSC::encodeFunctionCodeBlock):
* runtime/CachedTypes.h:
* runtime/CodeCache.cpp:
(JSC::serializeBytecode):
* runtime/CodeCache.h:
* runtime/Completion.cpp:
(JSC::generateProgramBytecode):
(JSC::generateModuleBytecode):
* runtime/Completion.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246060 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[misc] Remove JSCOnly ARMv7 Traditional bot
zandobersek@gmail.com [Tue, 4 Jun 2019 10:37:58 +0000 (10:37 +0000)]
[misc] Remove JSCOnly ARMv7 Traditional bot
https://bugs.webkit.org/show_bug.cgi?id=198524

Reviewed by Carlos Garcia Campos.

This is not a supported configuration anymore, so the buildbot slave can
be removed from configuration.

* BuildSlaveSupport/build.webkit.org-config/config.json:
* BuildSlaveSupport/build.webkit.org-config/public_html/dashboard/Scripts/WebKitBuildbot.js:
(WebKitBuildbot):
* BuildSlaveSupport/build.webkit.org-config/steps_unittest.py:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246059 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[GTK] Crash when re-entering AC mode after r245957
carlosgc@webkit.org [Tue, 4 Jun 2019 10:04:15 +0000 (10:04 +0000)]
[GTK] Crash when re-entering AC mode after r245957
https://bugs.webkit.org/show_bug.cgi?id=198522

Reviewed by Žan Doberšek.

When AcceleratedBackingStoreWayland::displayBuffer() is called and we have already left AC mode, we early
dispatch the image and release it. The problem is that images are reused, so the given image can be the
committed one. In that case we end up freeing it again in the next AcceleratedBackingStoreWayland::paint()
call.

* UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
(WebKit::AcceleratedBackingStoreWayland::displayBuffer): Do not release the given image if it's the committed one.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246058 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoJS wrapper of target in ResizeObserverEntry/ResizeObserver shouldn't get collected...
commit-queue@webkit.org [Tue, 4 Jun 2019 07:38:17 +0000 (07:38 +0000)]
JS wrapper of target in ResizeObserverEntry/ResizeObserver shouldn't get collected ahead
https://bugs.webkit.org/show_bug.cgi?id=197457

Patch by Cathie Chen <cathiechen@igalia.com> on 2019-06-04
Reviewed by Ryosuke Niwa.

Source/WebCore:

Add JSCustomMarkFunction to make sure JS wrappers wouldn't be collected when JSResizeObserverEntry live.

For ResizeObserver, if targets are removed, it will get fired for the last time. We also need to keep these JS
wrappers live. So add these targets to a GCReachableRef list once they're observed.

Add element-leak.html to test the targets with `entry.target.myEntry = entry` could be released properly.

Tests: resize-observer/element-leak.html
       resize-observer/resize-observer-entry-keeps-js-wrapper-of-target-alive.html
       resize-observer/resize-observer-keeps-js-wrapper-of-target-alive.html

* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/JSResizeObserverEntryCustom.cpp: Added.
(WebCore::JSResizeObserverEntry::visitAdditionalChildren):
* page/ResizeObserver.cpp:
(WebCore::ResizeObserver::observe):
(WebCore::ResizeObserver::removeAllTargets):
(WebCore::ResizeObserver::removeObservation):
(WebCore::ResizeObserver::stop):
* page/ResizeObserver.h:
* page/ResizeObserverEntry.idl:

LayoutTests:

* platform/win/TestExpectations:
* resize-observer/element-leak-expected.txt: Added.
* resize-observer/element-leak.html: Added.
* resize-observer/resize-observer-entry-keeps-js-wrapper-of-target-alive-expected.txt: Added.
* resize-observer/resize-observer-entry-keeps-js-wrapper-of-target-alive.html: Added.
* resize-observer/resize-observer-keeps-js-wrapper-of-target-alive-expected.txt: Added.
* resize-observer/resize-observer-keeps-js-wrapper-of-target-alive.html: Added.
* resize-observer/resources/element-leak-frame.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246057 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[Apple Pay] Disable script injection when canMakePayment APIs are called and return...
aestes@apple.com [Tue, 4 Jun 2019 06:36:05 +0000 (06:36 +0000)]
[Apple Pay] Disable script injection when canMakePayment APIs are called and return true
https://bugs.webkit.org/show_bug.cgi?id=198448
<rdar://problem/51323694>

Reviewed by Alex Christensen.

Source/WebCore:

Previously, only an active Apple Pay session would disable script injection in restricted
WKWebViews. However, this can result in websites rendering non-functional Apple Pay buttons
due to the race between the hosting app calling -evaluateJavaScript:completionHandler: and
the website calling canMakePayment APIs to determine whether to draw a button.

This patch makes it so that, if a website calls ApplePaySession's canMakePayments or
canMakePaymentsWithActiveCard, or PaymentRequest's canMakePayment, in a web view that has no
injected scripts, and those calls return true, future script injections from the hosting app
will be blocked.

Also, this patch removes the restrictions on the openPaymentSetup, supportsVersion, and
validatedPaymentNetwork APIs, since those APIs do not reveal transaction information and are
not used to determine whether to draw buttons.

Added new API tests.

* Modules/applepay/PaymentCoordinator.cpp:
(WebCore::PaymentCoordinator::supportsVersion const):
(WebCore::PaymentCoordinator::canMakePayments):
(WebCore::PaymentCoordinator::canMakePaymentsWithActiveCard):
(WebCore::PaymentCoordinator::openPaymentSetup):
(WebCore::PaymentCoordinator::beginPaymentSession):
(WebCore::PaymentCoordinator::validatedPaymentNetwork const):
(WebCore::PaymentCoordinator::setApplePayIsActiveIfAllowed const):
(WebCore::PaymentCoordinator::shouldAllowUserAgentScripts const):
(WebCore::PaymentCoordinator::shouldAllowApplePay const): Deleted.
* Modules/applepay/PaymentCoordinator.h:
* dom/Document.cpp:
(WebCore::Document::isApplePayActive const):
(WebCore::Document::setApplePayIsActive):
(WebCore::Document::hasStartedApplePaySession const): Deleted.
(WebCore::Document::setHasStartedApplePaySession): Deleted.
* dom/Document.h:
* testing/Internals.cpp:
(WebCore::Internals::setApplePayIsActive):
(WebCore::Internals::setHasStartedApplePaySession): Deleted.
* testing/Internals.h:
* testing/Internals.idl:

Tools:

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKitCocoa/ApplePay.mm:
(-[TestApplePayAvailableScriptMessageHandler userContentController:didReceiveScriptMessage:]):
(-[TestApplePayActiveSessionScriptMessageHandler userContentController:didReceiveScriptMessage:]):
(TestWebKitAPI::TEST):
(TestWebKitAPI::runActiveSessionTest):
(-[TestApplePayScriptMessageHandler initWithAPIsAvailableExpectation:canMakePaymentsExpectation:]): Deleted.
(-[TestApplePayScriptMessageHandler userContentController:didReceiveScriptMessage:]): Deleted.
* TestWebKitAPI/Tests/WebKitCocoa/apple-pay-active-session.html:
* TestWebKitAPI/Tests/WebKitCocoa/apple-pay-availability-existing-object.html: Added.
* TestWebKitAPI/Tests/WebKitCocoa/apple-pay-availability-in-iframe.html:
* TestWebKitAPI/Tests/WebKitCocoa/apple-pay-availability.html:
* TestWebKitAPI/Tests/WebKitCocoa/apple-pay-can-make-payment.html: Added.
* TestWebKitAPI/Tests/WebKitCocoa/apple-pay-can-make-payments-with-active-card.html: Added.
* TestWebKitAPI/Tests/WebKitCocoa/apple-pay-can-make-payments.html: Added.
* TestWebKitAPI/Tests/WebKitCocoa/apple-pay.js: Added.
(applePayRequestBase):
(applePayPaymentRequest):
(applePayMethod):
* TestWebKitAPI/cocoa/TestProtocol.mm:
(-[TestProtocol startLoading]):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246056 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[iOS] Do not prevent app suspension for more than 20 seconds after getting backgrounded
cdumez@apple.com [Tue, 4 Jun 2019 01:28:36 +0000 (01:28 +0000)]
[iOS] Do not prevent app suspension for more than 20 seconds after getting backgrounded
https://bugs.webkit.org/show_bug.cgi?id=198488
<rdar://problem/50837208>

Reviewed by Geoff Garen.

Do not prevent app suspension for more than 20 seconds after getting backgrounded on iOS. We
do this by implementing our own expiration handler which notifies our child processes of
their imminent suspension before ending the background task that was preventing suspension.

* UIProcess/ios/ProcessAssertionIOS.mm:
(isBackgroundState):
(-[WKProcessAssertionBackgroundTaskManager init]):
(-[WKProcessAssertionBackgroundTaskManager _scheduleTimeoutTask]):
(-[WKProcessAssertionBackgroundTaskManager _cancelTimeoutTask]):
(-[WKProcessAssertionBackgroundTaskManager _backgroundTaskExpired]):
(-[WKProcessAssertionBackgroundTaskManager _updateBackgroundTask]):
(-[WKProcessAssertionBackgroundTaskManager _releaseBackgroundTask]):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246053 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[WHLSL] Parsing and lexing the standard library is slow
rmorisset@apple.com [Tue, 4 Jun 2019 00:25:40 +0000 (00:25 +0000)]
[WHLSL] Parsing and lexing the standard library is slow
https://bugs.webkit.org/show_bug.cgi?id=192890
<rdar://problem/50746335>

Reviewed by Myles Maxfield.

The main idea is to avoid backtracking by instead peeking at the next token (and occasionally at the one after that).
This implies a few things:
- We can replace the stack of tokens by a trivial ring buffer of size 2 (holding the next token and the one after, or WTF::nullopt if we are at the end of the file).
- We now have "completeFooExpression" functions, to avoid having to reparse the prefix of some expression, if we find half-way through what it is.

I also fixed the following parser bug:
- https://bugs.webkit.org/show_bug.cgi?id=198305 [WHLSL] Multiple variables with initializers in a declaration statement crashes the compiler
    which was due to a mistake I made in the grammar

Finally I added two new macros: CONSUME_TYPE and PARSE to eliminate about 500 lines of error propagation boilerplate.

There are still lots of ways of improving the parser and lexer, such as:
- finishing the conversion of tokens in the lexer, not bothering with allocating string views
- make two special tokens Invalid and EOF, to remove the overhead of Optional
- make peekTypes and consumeTypes use templates to avoid constructing a Vector and calling find on it.
- Turn the entire lexer into a proper automata, not going through the same characters again and again (this is certainly the largest win by far)
- Remove the last few pieces of backtracking from the parser.

The current patch is already enough to make parsing the full standard library (something like 85k lines) approximately 260ms.
This is still longer than I would like, but nowhere near the bottleneck any longer because of some other parts of the compiler.

* Modules/webgpu/WHLSL/WHLSLLexer.h:
(WebCore::WHLSL::Lexer::Lexer):
(WebCore::WHLSL::Lexer::consumeToken):
(WebCore::WHLSL::Lexer::peek):
(WebCore::WHLSL::Lexer::peekFurther):
(WebCore::WHLSL::Lexer::state const):
(WebCore::WHLSL::Lexer::setState):
(WebCore::WHLSL::Lexer::unconsumeToken): Deleted.
* Modules/webgpu/WHLSL/WHLSLParser.cpp:
(WebCore::WHLSL::Parser::parse):
(WebCore::WHLSL::Parser::peek):
(WebCore::WHLSL::Parser::peekTypes):
(WebCore::WHLSL::Parser::tryType):
(WebCore::WHLSL::Parser::tryTypes):
(WebCore::WHLSL::Parser::consumeTypes):
(WebCore::WHLSL::Parser::parseConstantExpression):
(WebCore::WHLSL::Parser::parseTypeArgument):
(WebCore::WHLSL::Parser::parseTypeArguments):
(WebCore::WHLSL::Parser::parseTypeSuffixAbbreviated):
(WebCore::WHLSL::Parser::parseTypeSuffixNonAbbreviated):
(WebCore::WHLSL::Parser::parseType):
(WebCore::WHLSL::Parser::parseTypeDefinition):
(WebCore::WHLSL::Parser::parseResourceSemantic):
(WebCore::WHLSL::Parser::parseSpecializationConstantSemantic):
(WebCore::WHLSL::Parser::parseStageInOutSemantic):
(WebCore::WHLSL::Parser::parseSemantic):
(WebCore::WHLSL::Parser::parseQualifiers):
(WebCore::WHLSL::Parser::parseStructureElement):
(WebCore::WHLSL::Parser::parseStructureDefinition):
(WebCore::WHLSL::Parser::parseEnumerationDefinition):
(WebCore::WHLSL::Parser::parseEnumerationMember):
(WebCore::WHLSL::Parser::parseNativeTypeDeclaration):
(WebCore::WHLSL::Parser::parseNumThreadsFunctionAttribute):
(WebCore::WHLSL::Parser::parseAttributeBlock):
(WebCore::WHLSL::Parser::parseParameter):
(WebCore::WHLSL::Parser::parseParameters):
(WebCore::WHLSL::Parser::parseFunctionDefinition):
(WebCore::WHLSL::Parser::parseComputeFunctionDeclaration):
(WebCore::WHLSL::Parser::parseVertexFragmentFunctionDeclaration):
(WebCore::WHLSL::Parser::parseRegularFunctionDeclaration):
(WebCore::WHLSL::Parser::parseOperatorFunctionDeclaration):
(WebCore::WHLSL::Parser::parseFunctionDeclaration):
(WebCore::WHLSL::Parser::parseNativeFunctionDeclaration):
(WebCore::WHLSL::Parser::parseBlock):
(WebCore::WHLSL::Parser::parseBlockBody):
(WebCore::WHLSL::Parser::parseIfStatement):
(WebCore::WHLSL::Parser::parseSwitchStatement):
(WebCore::WHLSL::Parser::parseSwitchCase):
(WebCore::WHLSL::Parser::parseForLoop):
(WebCore::WHLSL::Parser::parseWhileLoop):
(WebCore::WHLSL::Parser::parseDoWhileLoop):
(WebCore::WHLSL::Parser::parseVariableDeclaration):
(WebCore::WHLSL::Parser::parseVariableDeclarations):
(WebCore::WHLSL::Parser::parseStatement):
(WebCore::WHLSL::Parser::parseEffectfulExpression):
(WebCore::WHLSL::Parser::parseEffectfulAssignment):
(WebCore::WHLSL::Parser::parseExpression):
(WebCore::WHLSL::Parser::parseTernaryConditional):
(WebCore::WHLSL::Parser::completeTernaryConditional):
(WebCore::WHLSL::Parser::parseAssignment):
(WebCore::WHLSL::Parser::completeAssignment):
(WebCore::WHLSL::Parser::parsePossibleTernaryConditional):
(WebCore::WHLSL::Parser::parsePossibleLogicalBinaryOperation):
(WebCore::WHLSL::Parser::completePossibleLogicalBinaryOperation):
(WebCore::WHLSL::Parser::parsePossibleRelationalBinaryOperation):
(WebCore::WHLSL::Parser::completePossibleRelationalBinaryOperation):
(WebCore::WHLSL::Parser::parsePossibleShift):
(WebCore::WHLSL::Parser::completePossibleShift):
(WebCore::WHLSL::Parser::parsePossibleAdd):
(WebCore::WHLSL::Parser::completePossibleAdd):
(WebCore::WHLSL::Parser::parsePossibleMultiply):
(WebCore::WHLSL::Parser::completePossibleMultiply):
(WebCore::WHLSL::Parser::parsePossiblePrefix):
(WebCore::WHLSL::Parser::parsePossibleSuffix):
(WebCore::WHLSL::Parser::parseCallExpression):
(WebCore::WHLSL::Parser::parseTerm):
(WebCore::WHLSL::Parser::parseAddressSpaceType): Deleted.
(WebCore::WHLSL::Parser::parseNonAddressSpaceType): Deleted.
(WebCore::WHLSL::Parser::parseEntryPointFunctionDeclaration): Deleted.
(WebCore::WHLSL::Parser::parseEffectfulPrefix): Deleted.
(WebCore::WHLSL::Parser::parseEffectfulSuffix): Deleted.
* Modules/webgpu/WHLSL/WHLSLParser.h:
(WebCore::WHLSL::Parser::Error::dump const):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246052 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[ Mac WK2 ] TestWebKitAPI.WKWebView.LocalStorageProcessCrashes is a flaky timeout...
sihui_liu@apple.com [Mon, 3 Jun 2019 21:10:36 +0000 (21:10 +0000)]
[ Mac WK2 ] TestWebKitAPI.WKWebView.LocalStorageProcessCrashes is a flaky timeout when run locally.
https://bugs.webkit.org/show_bug.cgi?id=198423
<rdar://problem/51305247>

Reviewed by Youenn Fablet.

IDBDatabase receives error event on network process crash, so we don't need to check it periodically.

* TestWebKitAPI/Tests/WebKitCocoa/local-storage-process-crashes.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246050 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoAllow resizing of camera video feeds to very small resolutions
youenn@apple.com [Mon, 3 Jun 2019 21:07:45 +0000 (21:07 +0000)]
Allow resizing of camera video feeds to very small resolutions
https://bugs.webkit.org/show_bug.cgi?id=198421

Reviewed by Alex Christensen.

Source/WebCore:

Before the patch, the minimum capture resolution was set to 120.
Since this is a bit arbitrary and there are some use cases for lower resolution,
We now allow down to 1x1 resolution.

Test: fast/mediastream/getUserMedia-video-rescaling.html

* platform/mediastream/RealtimeVideoSource.cpp:
(WebCore::RealtimeVideoSource::updateCapabilities):
Allow 1x1 when computing min/max resolutions.
(WebCore::RealtimeVideoSource::bestSupportedSizeAndFrameRate):
In case width and height are provided, we pick the closest preset that matches and resize accordingly.
If width or height is provided, we pick the closest preset tat matches and applies its aspect ratio.

LayoutTests:

Update tests to expect 1x1 minimum capture resolution.

* fast/mediastream/MediaStreamTrack-getCapabilities-expected.txt:
* fast/mediastream/apply-constraints-video-expected.txt:
* fast/mediastream/apply-constraints-video.html:
* fast/mediastream/get-user-media-constraints-expected.txt:
* fast/mediastream/getUserMedia-video-rescaling-expected.txt: Added.
* fast/mediastream/getUserMedia-video-rescaling.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246049 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoImplement an internal switch to turn idempotent text autosizing and viewport rules off
wenson_hsieh@apple.com [Mon, 3 Jun 2019 21:07:06 +0000 (21:07 +0000)]
Implement an internal switch to turn idempotent text autosizing and viewport rules off
https://bugs.webkit.org/show_bug.cgi?id=198460
<rdar://problem/51324526>

Reviewed by Tim Horton.

Source/WebCore:

Add a new WebCore setting for viewport shrink-to-fit-content heuristics; additionally, tweak the existing
idempotent text autosizing setting to default to false (this is overridden by preferences at the WebKit layer).

* page/Settings.yaml:

Source/WebKit:

* Shared/WebPreferences.yaml:

Add new preferences to control viewport shrink-to-fit-content and idempotent text autosizing.

* Shared/WebPreferencesDefaultValues.cpp:

Add the non-iOS implementation of defaultTextAutosizingUsesIdempotentMode, and also wrap these functions in the
WebKit namespace.

(WebKit::defaultTextAutosizingUsesIdempotentMode):
(defaultPassiveTouchListenersAsDefaultOnDocument): Deleted.
(defaultCustomPasteboardDataEnabled): Deleted.
* Shared/WebPreferencesDefaultValues.h:

Move some existing default preference value helper functions into the WebKit namespace.

* Shared/ios/WebPreferencesDefaultValuesIOS.mm: Copied from Source/WebKit/Shared/WebPreferencesDefaultValues.cpp.

Add an iOS-specific file for WebPreferencesDefaultValues, so that we can check for the user interface idiom.

(WebKit::defaultTextAutosizingUsesIdempotentMode):
* SourcesCocoa.txt:
* WebKit.xcodeproj/project.pbxproj:
* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::immediatelyShrinkToFitContent):

Add an early return for the case where shrink-to-fit-content is explicitly disabled via the new preference.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246048 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoWeb Inspector: remove RemoteObject.prototype.getPropertyDescriptorsAsObject
drousso@apple.com [Mon, 3 Jun 2019 20:58:44 +0000 (20:58 +0000)]
Web Inspector: remove RemoteObject.prototype.getPropertyDescriptorsAsObject
https://bugs.webkit.org/show_bug.cgi?id=198395

Reviewed by Matt Baker.

Source/WebInspectorUI:

When calling `RemoteObject.prototype.getPropertyDescriptorsAsObject`, if one of the returned
property descriptors is named `__proto__`, it will replace the `__proto__` of the plain
object created for that function with the `WI.PropertyDescriptor` itself, altering the
prototype chain.

* UserInterface/Protocol/RemoteObject.js:
(WI.RemoteObject.prototype.getPropertyDescriptorsAsObject): Deleted.
* UserInterface/Models/AuditTestCase.js:
(WI.AuditTestCase.prototype.async run.async parseResponse.async resultArrayForEach):
* UserInterface/Views/ErrorObjectView.js:
(WI.ErrorObjectView.prototype.update):

LayoutTests:

* inspector/runtime/awaitPromise.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246046 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoImplement imagesrcset and imagesizes attributes on link rel=preload
commit-queue@webkit.org [Mon, 3 Jun 2019 20:49:53 +0000 (20:49 +0000)]
Implement imagesrcset and imagesizes attributes on link rel=preload
https://bugs.webkit.org/show_bug.cgi?id=192950

Patch by Rob Buis <rbuis@igalia.com> on 2019-06-03
Reviewed by Youenn Fablet.

LayoutTests/imported/w3c:

Import relevant tests for this feature.

* web-platform-tests/preload/dynamic-adding-preload-imagesrcset-expected.txt: Added.
* web-platform-tests/preload/dynamic-adding-preload-imagesrcset.html: Added.
* web-platform-tests/preload/link-header-preload-expected.txt: Added.
* web-platform-tests/preload/link-header-preload-imagesrcset-expected.txt: Added.
* web-platform-tests/preload/link-header-preload-imagesrcset.html: Added.
* web-platform-tests/preload/link-header-preload-imagesrcset.html.headers: Added.
* web-platform-tests/preload/link-header-preload-nonce-expected.txt: Added.
* web-platform-tests/preload/link-header-preload-nonce.html: Added.
* web-platform-tests/preload/link-header-preload-nonce.html.headers: Added.
* web-platform-tests/preload/link-header-preload.html: Added.
* web-platform-tests/preload/link-header-preload.html.headers: Added.
* web-platform-tests/preload/onload-event-expected.txt: Added.
* web-platform-tests/preload/onload-event.html: Added.
* web-platform-tests/preload/preload-csp.sub-expected.txt:
* web-platform-tests/preload/preload-csp.sub.html:
* web-platform-tests/preload/preload-default-csp.sub-expected.txt:
* web-platform-tests/preload/preload-default-csp.sub.html:
* web-platform-tests/preload/preload-with-type-expected.txt: Added.
* web-platform-tests/preload/preload-with-type.html: Added.
* web-platform-tests/preload/resources/A4.ogv: Added.
* web-platform-tests/preload/resources/A4.ogv.sub.headers: Added.
* web-platform-tests/preload/resources/cross-origin-module.py: Added.
(main):
* web-platform-tests/preload/resources/dummy-preloads-subresource.css: Added.
* web-platform-tests/preload/resources/dummy-preloads-subresource.css.sub.headers: Added.
* web-platform-tests/preload/resources/empty.html: Added.
* web-platform-tests/preload/resources/empty.html.sub.headers: Added.
* web-platform-tests/preload/resources/foo.vtt.sub.headers: Added.
* web-platform-tests/preload/resources/module1.js: Added.
* web-platform-tests/preload/resources/module2.js: Added.
* web-platform-tests/preload/resources/preload_helper.js:
(verifyNumberOfResourceTimingEntries):
(numberOfResourceTimingEntries):

Source/WebCore:

Implement imagesrcset and imagesizes attributes for both Link header
and link element.

Tests: imported/w3c/web-platform-tests/preload/dynamic-adding-preload-imagesrcset.html
       imported/w3c/web-platform-tests/preload/link-header-preload-imagesrcset.html
       imported/w3c/web-platform-tests/preload/link-header-preload-nonce.html
       imported/w3c/web-platform-tests/preload/link-header-preload.html
       imported/w3c/web-platform-tests/preload/onload-event.html
       imported/w3c/web-platform-tests/preload/preload-with-type.html

* html/HTMLAttributeNames.in:
* html/HTMLLinkElement.cpp:
(WebCore::HTMLLinkElement::process):
* html/HTMLLinkElement.idl:
* loader/LinkHeader.cpp:
(WebCore::paramterNameFromString):
(WebCore::LinkHeader::setValue):
(WebCore::LinkHeader::LinkHeader):
* loader/LinkHeader.h:
(WebCore::LinkHeader::imageSrcSet const):
(WebCore::LinkHeader::imageSizes const):
(WebCore::LinkHeader::isViewportDependent const):
* loader/LinkLoader.cpp:
(WebCore::LinkLoader::loadLinksFromHeader):
(WebCore::LinkLoader::preloadIfNeeded):
(WebCore::LinkLoader::loadLink):
* loader/LinkLoader.h:
* page/RuntimeEnabledFeatures.h:
(WebCore::RuntimeEnabledFeatures::linkPreloadResponsiveImagesEnabled const):
(WebCore::RuntimeEnabledFeatures::setLinkPreloadResponsiveImagesEnabled):

Source/WebKit:

Add a runtime flag for link preload responsive images.

* Shared/WebPreferences.yaml:

Source/WebKitLegacy/mac:

Add a runtime flag for link preload responsive images.

* WebView/WebPreferenceKeysPrivate.h:
* WebView/WebPreferences.mm:
(+[WebPreferences initialize]):
(-[WebPreferences linkPreloadResponsiveImagesEnabled]):
(-[WebPreferences setLinkPreloadResponsiveImagesEnabled:]):
* WebView/WebPreferencesPrivate.h:
* WebView/WebView.mm:
(-[WebView _preferencesChanged:]):

Tools:

Add a runtime flag for link preload responsive images.

* DumpRenderTree/mac/DumpRenderTree.mm:
(enableExperimentalFeatures):

LayoutTests:

Write special expectation for link-header-preload-imagesrcset.html because test runner
uses different dimensions on iOS.

* platform/ios-simulator-12-wk2/imported/w3c/web-platform-tests/preload/dynamic-adding-preload-imagesrcset-expected.txt: Added.
* platform/ios-simulator-12-wk2/imported/w3c/web-platform-tests/preload/link-header-preload-imagesrcset-expected.txt: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246045 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[CMake] Use WEBKIT_EXECUTABLE in ImageDiff
don.olmstead@sony.com [Mon, 3 Jun 2019 20:12:18 +0000 (20:12 +0000)]
[CMake] Use WEBKIT_EXECUTABLE in ImageDiff
https://bugs.webkit.org/show_bug.cgi?id=198490

Reviewed by Konstantin Tokarev.

Use WEBKIT_EXECUTABLE in ImageDiff. Change CMake variables to use the proper
convention. Add a shared CoreGraphics.cmake instead of just including PlatformMac
for AppleWin builds.

* ImageDiff/CMakeLists.txt:
* ImageDiff/Cairo.cmake:
* ImageDiff/CoreGraphics.cmake: Added.
* ImageDiff/PlatformGTK.cmake:
* ImageDiff/PlatformMac.cmake:
* ImageDiff/PlatformWin.cmake:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246044 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoMemory-cached main resources continue to load after the client decides a content...
aestes@apple.com [Mon, 3 Jun 2019 19:39:03 +0000 (19:39 +0000)]
Memory-cached main resources continue to load after the client decides a content policy of PolicyAction::Download
https://bugs.webkit.org/show_bug.cgi?id=198469
<rdar://problem/50512713>

Reviewed by Youenn Fablet.

Source/WebCore:

When a document is loaded from the memory cache it does not have a main resource loader, but
DocumentLoader::continueAfterContentPolicy relies on being able to call
ResourceLoader::didFail on the main resource loader to cancel the provisional navigation
when the client decides a content policy of PolicyAction::Download.

This means that memory-cached main resources continue to load even after WebKit has started
to download the main resource. The expected behavior is for the provisional navigation to
fail once the download starts, like what happens when there is a main resource loader.

This patch teaches DocumentLoader::continueAfterContentPolicy to call
stopLoadingForPolicyChange() in the case of a null main resource loader. This will dispatch
didFailProvisionalNavigation and remove the DocumentLoader as a client of its
CachedRawResource to prevent it from delivering any cached data.

Added a new API test.

* loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::continueAfterContentPolicy):

Tools:

* TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
(-[TestDownloadNavigationResponseFromMemoryCacheDelegate webView:didStartProvisionalNavigation:]):
(-[TestDownloadNavigationResponseFromMemoryCacheDelegate webView:didFailProvisionalNavigation:withError:]):
(-[TestDownloadNavigationResponseFromMemoryCacheDelegate webView:didFinishNavigation:]):
(-[TestDownloadNavigationResponseFromMemoryCacheDelegate _downloadDidStart:]):
(-[TestDownloadNavigationResponseFromMemoryCacheDelegate webView:decidePolicyForNavigationResponse:decisionHandler:]):
(TEST):
* TestWebKitAPI/cocoa/TestProtocol.h:
* TestWebKitAPI/cocoa/TestProtocol.mm:
(+[TestProtocol additionalResponseHeaders]):
(+[TestProtocol setAdditionalResponseHeaders:]):
(-[TestProtocol startLoading]):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246043 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoTweak the text and underline color for data detected text.
timothy@apple.com [Mon, 3 Jun 2019 19:14:42 +0000 (19:14 +0000)]
Tweak the text and underline color for data detected text.
https://bugs.webkit.org/show_bug.cgi?id=198487
rdar://problem/50667125

Reviewed by Devin Rousso.

Source/WebCore:

Tests: Color.RGBToHSL API tests

* editing/cocoa/DataDetection.mm:
(WebCore::DataDetection::detectContentInRange): Use currentcolor so semantic text colors work.
Force the lightness of the underline color to the middle, and multiply the alpha by 38%,
so the color will appear on light and dark backgrounds, since only one color can be specified.
* platform/graphics/Color.cpp:
(WebCore::Color::getHSL const): Return hue in [0...6) range to easily round-trip with makeRGBAFromHSLA().

Tools:

* TestWebKitAPI/Tests/WebCore/Color.cpp:
(TestWebKitAPI::TEST): Added Color.RGBToHSL tests.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246042 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[ESNext][BigInt] Implement support for "**"
ticaiolima@gmail.com [Mon, 3 Jun 2019 18:42:34 +0000 (18:42 +0000)]
[ESNext][BigInt] Implement support for "**"
https://bugs.webkit.org/show_bug.cgi?id=190799

Reviewed by Saam Barati.

JSTests:

* stress/big-int-exp-basic.js: Added.
* stress/big-int-exp-jit-osr.js: Added.
* stress/big-int-exp-jit-untyped.js: Added.
* stress/big-int-exp-jit.js: Added.
* stress/big-int-exp-negative-exponent.js: Added.
* stress/big-int-exp-to-primitive.js: Added.
* stress/big-int-exp-type-error.js: Added.
* stress/big-int-exp-wrapped-value.js: Added.
* stress/value-pow-ai-rule.js: Added.

Source/JavaScriptCore:

We are introducing support for BigInt into "**" operator. This Patch
also includes changes into DFG, introducing a new node "ValuePow" that
is responsible to handle UntypedUse and BigIntUse.

* dfg/DFGAbstractInterpreterInlines.h:
(JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

ValuePow(Untyped, Untyped) still can propagate constant if AI proves
it. We are doing so if AI proves rhs and lhs as numbers.

* dfg/DFGByteCodeParser.cpp:
(JSC::DFG::ByteCodeParser::parseBlock):

When compiling op_pow, we first verify if rhs and lhs can be any Int
or number. If this happen, we emit ArithPow, otherwise we fallback to
ValuePow and rely on fixup to convert it to ArithPow if possible.

* dfg/DFGClobberize.h:
(JSC::DFG::clobberize):

We only clobberize world if ValuePow is UntypedUse. Otherwise, we can
properly support CSE.

* dfg/DFGDoesGC.cpp:
(JSC::DFG::doesGC):

JSBigInt::exponentiate allocates JSBigInts to perform calculation and
it can trigger GC. ValuePow(UntypedUse) can trigger GC because it can
execute user code.

* dfg/DFGFixupPhase.cpp:
(JSC::DFG::FixupPhase::fixupArithPow):
(JSC::DFG::FixupPhase::fixupNode):
* dfg/DFGNodeType.h:
* dfg/DFGOperations.cpp:
* dfg/DFGOperations.h:
* dfg/DFGPredictionPropagationPhase.cpp:
* dfg/DFGSafeToExecute.h:
(JSC::DFG::safeToExecute):
* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::compileValuePow):
* dfg/DFGSpeculativeJIT.h:
* dfg/DFGSpeculativeJIT32_64.cpp:
(JSC::DFG::SpeculativeJIT::compile):
* dfg/DFGSpeculativeJIT64.cpp:
(JSC::DFG::SpeculativeJIT::compile):
* dfg/DFGValidate.cpp:
* ftl/FTLCapabilities.cpp:
(JSC::FTL::canCompile):
* ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::compileNode):
(JSC::FTL::DFG::LowerDFGToB3::compileValuePow):
* runtime/CommonSlowPaths.cpp:
(JSC::SLOW_PATH_DECL):

We are adding proper support to BigInt on op_pow. The specification
defines that we can only apply pow when both operands have the same
type after calling ToNumeric().

* runtime/JSBigInt.cpp:
(JSC::JSBigInt::exponentiate):
* runtime/JSBigInt.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246041 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[JSC] JSObject::attemptToInterceptPutByIndexOnHole should use getPrototype instead...
ysuzuki@apple.com [Mon, 3 Jun 2019 18:27:46 +0000 (18:27 +0000)]
[JSC] JSObject::attemptToInterceptPutByIndexOnHole should use getPrototype instead of getPrototypeDirect
https://bugs.webkit.org/show_bug.cgi?id=198477
<rdar://problem/51299504>

Reviewed by Saam Barati.

Source/JavaScriptCore:

JSObject::attemptToInterceptPutByIndexOnHole uses getPrototypeDirect, but it should use getPrototype to
handle getPrototype methods in derived JSObject classes correctly.

* runtime/JSArrayInlines.h:
(JSC::JSArray::pushInline):
* runtime/JSObject.cpp:
(JSC::JSObject::putByIndex):
(JSC::JSObject::attemptToInterceptPutByIndexOnHoleForPrototype):
(JSC::JSObject::attemptToInterceptPutByIndexOnHole):
(JSC::JSObject::putByIndexBeyondVectorLength):

LayoutTests:

Ensure that JSWindow::getPrototype is used.

* http/tests/security/cross-frame-access-object-getPrototypeOf-in-put-expected.txt: Added.
* http/tests/security/cross-frame-access-object-getPrototypeOf-in-put.html: Added.
* http/tests/security/resources/cross-frame-iframe-for-object-getPrototypeOf-in-put-test.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246040 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[CMake] Add WebKit::JavaScriptCore target
don.olmstead@sony.com [Mon, 3 Jun 2019 17:04:35 +0000 (17:04 +0000)]
[CMake] Add WebKit::JavaScriptCore target
https://bugs.webkit.org/show_bug.cgi?id=198403

Reviewed by Konstantin Tokarev.

Source/JavaScriptCore:

Create the WebKit::JavaScriptCore target and use that to propagate headers. Use
WEBKIT_COPY_FILES instead of WEBKIT_MAKE_FORWARDING_HEADERS.

* CMakeLists.txt:
* shell/CMakeLists.txt:

Source/WebCore:

Use the WebKit::JavaScriptCore target.

* CMakeLists.txt:

Source/WebCore/PAL:

Use the WebKit::JavaScriptCore target.

* pal/CMakeLists.txt:

Source/WebKitLegacy:

Use the WebKit::JavaScriptCore target.

* CMakeLists.txt:

Tools:

Use the WebKit::JavaScriptCore target.

* DumpRenderTree/CMakeLists.txt:
* MiniBrowser/win/CMakeLists.txt:
* TestWebKitAPI/CMakeLists.txt:
* TestWebKitAPI/PlatformGTK.cmake:
* TestWebKitAPI/PlatformWPE.cmake:
* TestWebKitAPI/glib/CMakeLists.txt:
* WebKitTestRunner/CMakeLists.txt:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246039 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoUnreviewed, rolling out r246022.
commit-queue@webkit.org [Mon, 3 Jun 2019 16:48:01 +0000 (16:48 +0000)]
Unreviewed, rolling out r246022.
https://bugs.webkit.org/show_bug.cgi?id=198486

Causing Internal build failures and JSC test failures
(Requested by ShawnRoberts on #webkit).

Reverted changeset:

"Reenable Gigacage on ARM64."
https://bugs.webkit.org/show_bug.cgi?id=198453
https://trac.webkit.org/changeset/246022

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246038 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoFlaky Test: inspector/canvas/recording.html
drousso@apple.com [Mon, 3 Jun 2019 16:37:27 +0000 (16:37 +0000)]
Flaky Test: inspector/canvas/recording.html
https://bugs.webkit.org/show_bug.cgi?id=198470

Reviewed by Timothy Hatcher.

* inspector/canvas/recording.html:
The ordering of <canvas> in `WI.canvasManager.canvases` isn't always the same, so we should
perform the action on every <canvas> since we know we'll be recording at least one of them.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246037 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[Nicosia] Disable async scrolling until implemented
zandobersek@gmail.com [Mon, 3 Jun 2019 15:34:15 +0000 (15:34 +0000)]
[Nicosia] Disable async scrolling until implemented
https://bugs.webkit.org/show_bug.cgi?id=198476
<rdar://problem/51351478>

Unreviewed follow-up to r246033.

* page/scrolling/ScrollingCoordinator.cpp:
Expand the PLATFORM(IOS) guard to IOS_FAMILY.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246036 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoREGRESSION(r245567): [GTK][WPE] [2.25.1] WebKitWebDriver gets installed as WebDriver
berto@igalia.com [Mon, 3 Jun 2019 14:28:19 +0000 (14:28 +0000)]
REGRESSION(r245567): [GTK][WPE] [2.25.1] WebKitWebDriver gets installed as WebDriver
https://bugs.webkit.org/show_bug.cgi?id=198480

Patch by Carlos Garcia Campos <cgarcia@igalia.com> on 2019-06-03
Reviewed by Michael Catanzaro.

We are now using the WEBKIT_EXECUTABLE macro that uses target_OUTPUT_NAME variable, but we define
taget_Process_OUTPUT_NAME.

* PlatformGTK.cmake:
* PlatformWPE.cmake:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246035 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoFinish cleanup of String::number for floating point
darin@apple.com [Mon, 3 Jun 2019 11:34:20 +0000 (11:34 +0000)]
Finish cleanup of String::number for floating point
https://bugs.webkit.org/show_bug.cgi?id=198471

Reviewed by Yusuke Suzuki.

Source/JavaScriptCore:

* dfg/DFGStrengthReductionPhase.cpp:
(JSC::DFG::StrengthReductionPhase::handleNode): Use String::number instead of
String::numberToStringECMAScript, since that's now the default.
* parser/ParserArena.h:
(JSC::IdentifierArena::makeNumericIdentifier): Ditto.
* runtime/JSONObject.cpp:
(JSC::Stringifier::appendStringifiedValue): Use appendNumber instead of
builder.appendECMAScriptNumber, since that's now the default.
* runtime/NumberPrototype.cpp:
(JSC::toStringWithRadix): Use String::number instead of
String::numberToStringECMAScript, since that's now the default.
(JSC::numberProtoFuncToExponential): Ditto.
(JSC::numberProtoFuncToFixed): Ditto.
(JSC::numberProtoFuncToPrecision): Ditto.
(JSC::numberToStringInternal): Ditto.
* runtime/NumericStrings.h:
(JSC::NumericStrings::add): Ditto.
* wasm/WasmBBQPlan.cpp:
(JSC::Wasm::BBQPlan::prepare): Ditto.

Source/WebCore:

* css/CSSCursorImageValue.cpp:
(WebCore::CSSCursorImageValue::customCSSText const): Use makeString instead
of StringBuilder since it is more terse and possibly more efficient as well.
* css/DOMMatrixReadOnly.cpp:
(WebCore::DOMMatrixReadOnly::toString const): Ditto.
* css/WebKitCSSMatrix.cpp:
(WebCore::WebKitCSSMatrix::toString const): Ditto.

* html/parser/HTMLParserIdioms.cpp:
(WebCore::serializeForNumberType): Use String::number instead of
String::numberToStringECMAScript since that is now the default.
* html/shadow/MediaControlElementTypes.cpp:
(WebCore::MediaControlVolumeSliderElement::setVolume): Ditto.
* html/shadow/MediaControlElements.cpp:
(WebCore::MediaControlTimelineElement::setPosition): Ditto.
* platform/Decimal.cpp:
(WebCore::Decimal::fromDouble): Ditto.

* rendering/RenderListMarker.cpp:
(WebCore::toRoman): Return a String instead of taking a StringBuilder argument.
Use LetterCase enum instead of bool for the uppercase vs. lowercase argument, to
be less mysterious at call sites. Use unsigned for string lengths since that's
what WTF::String uses.
(WebCore::toAlphabeticOrNumeric): Ditto. Also updated since SequenceType is now
an enum class.
(WebCore::toSymbolic): Use String::createUninitialized instead of StringBuilder.
Return a String instead of taking a StringBuilder argument. Straighten out the
algorithm so it's easier to understand.
(WebCore::toAlphabetic): Updated since SequenceType is now an enum class.
(WebCore::toNumeric): Ditto.
(WebCore::toHebrew): Return a String instead of taking a StringBuilder argument.
Use unsigned for string lengths since that's what WTF::String uses.
(WebCore::toArmenianUnder10000): Use unsigned and the LetterCase enum class.
(WebCore::toArmenian): Return a String instead of taking a StringBuilder argument.
Also use unsigned for string lengths since that's what WTF::String uses.
(WebCore::toGeorgian): Ditto.
(WebCore::toCJKIdeographic): Ditto.
(WebCore::listMarkerSuffix): Tweaked a comment.
(WebCore::listMarkerText): Use String return values instead of StringBuilder.
(WebCore::RenderListMarker::paint): Use String::createUninitialized instead of
StringBuilder since it's a bit more efficient. Use makeString instead of turning
single characters into strings since that's more efficient.

* svg/SVGPathUtilities.cpp:
(WebCore::buildStringFromPath): Use appendNumber instead of appendShortestFormNumber
since that is now the default.

Source/WebKit:

* NetworkProcess/Classifier/WebResourceLoadStatisticsTelemetry.cpp:
(WebKit::submitTopList): Use makeString instead of StringBuilder since it
is more terse and possibly more efficient as well.
* UIProcess/API/APIUserScript.cpp:
(API::UserScript::generateUniqueURL): Ditto.
* UIProcess/API/APIUserStyleSheet.cpp:
(API::UserStyleSheet::generateUniqueURL): Ditto.

Source/WTF:

* wtf/JSONValues.cpp:
(WTF::JSONImpl::Value::writeJSON const): Use appendNumber instead of
appendECMAScriptNumber, since that's now the default.

* wtf/text/StringBuilder.cpp:
(WTF::StringBuilder::appendNumber): Renamed from appendShortestFormNumber.
* wtf/text/StringBuilder.h: Removed appendShortestFormNumber and
appendECMAScriptNumber, replacing both with overload of appendNumber.

* wtf/text/WTFString.cpp:
(WTF::String::number): Renamed from numberToStringShortest.
* wtf/text/WTFString.h: Removed numberToStringShortest and
numberToStringECMAScript, replacing both with overload of number.

Tools:

* TestWebKitAPI/Tests/WTF/WTFString.cpp:
(TestWebKitAPI::testStringNumber): Go back to calling String::number instead of
String::numberToStringECMAScript.

* WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:
(WTR::dumpFrameScrollPosition): Use appendNumber instead of appendECMAScriptNumber
since that is now the default.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246034 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[Nicosia] Disable async scrolling until implemented
zandobersek@gmail.com [Mon, 3 Jun 2019 09:45:51 +0000 (09:45 +0000)]
[Nicosia] Disable async scrolling until implemented
https://bugs.webkit.org/show_bug.cgi?id=198476

Reviewed by Antti Koivisto.

.:

Disable async scrolling on Nicosia-using ports until the underlying
implementation is complete, allowing easier refactorings of the general
async scrolling system.

* Source/cmake/OptionsGTK.cmake:
* Source/cmake/OptionsPlayStation.cmake:
* Source/cmake/OptionsWPE.cmake:

Source/WebCore:

Build ScrollingCoordinator::create() method on iOS or whenever
ASYNC_SCROLLING is not enabled.

Additionally, the USE(COORDINATED_GRAPHICS) build guards are removed
throughout the async scrolling classes as they aren't required now
and shouldn't be in the future.

* page/scrolling/ScrollingCoordinator.cpp:
* page/scrolling/ScrollingStateFixedNode.cpp:
* page/scrolling/ScrollingStateFixedNode.h:
* page/scrolling/ScrollingStateFrameHostingNode.cpp:
* page/scrolling/ScrollingStateFrameHostingNode.h:
* page/scrolling/ScrollingStateFrameScrollingNode.cpp:
* page/scrolling/ScrollingStateFrameScrollingNode.h:
* page/scrolling/ScrollingStateNode.cpp:
* page/scrolling/ScrollingStateNode.h:
* page/scrolling/ScrollingStateOverflowScrollingNode.cpp:
* page/scrolling/ScrollingStateOverflowScrollingNode.h:
* page/scrolling/ScrollingStatePositionedNode.cpp:
* page/scrolling/ScrollingStatePositionedNode.h:
* page/scrolling/ScrollingStateScrollingNode.cpp:
* page/scrolling/ScrollingStateScrollingNode.h:
* page/scrolling/ScrollingStateStickyNode.cpp:
* page/scrolling/ScrollingStateStickyNode.h:
* page/scrolling/ScrollingStateTree.cpp:
* page/scrolling/ScrollingStateTree.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246033 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoREGRESSION(r240862) [WinCairo][WK2] position:fixed elements don't show
Hironori.Fujii@sony.com [Mon, 3 Jun 2019 09:43:41 +0000 (09:43 +0000)]
REGRESSION(r240862) [WinCairo][WK2] position:fixed elements don't show
https://bugs.webkit.org/show_bug.cgi?id=198478

Reviewed by Carlos Garcia Campos.

All position:fixed elements didn't show in WinCairo WebKit2 since
r240862 which turns acceleratedCompositingEnabled on for WebKit2.
WinCairo WebKit2 doesn't have accelerated compositing support yet.
Let's do the same with GTK port.

* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::updatePreferences): Conditioned out the code
enabling acceleratedCompositingEnabled for PLATFORM(WIN).

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246032 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[Pointer Events] Check that capturing data managed by the PointerCaptureController...
graouts@webkit.org [Mon, 3 Jun 2019 09:29:39 +0000 (09:29 +0000)]
[Pointer Events] Check that capturing data managed by the PointerCaptureController gets cleared upon navigation
https://bugs.webkit.org/show_bug.cgi?id=198191

Unreviewed post-commit review feedback suggested by Darin Adler.

* page/PointerCaptureController.cpp:
(WebCore::PointerCaptureController::reset):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246031 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoREGRESSION(r244182): [CoordinatedGraphics] Related view doesn't receive graphic updates
carlosgc@webkit.org [Mon, 3 Jun 2019 08:07:06 +0000 (08:07 +0000)]
REGRESSION(r244182): [CoordinatedGraphics] Related view doesn't receive graphic updates
https://bugs.webkit.org/show_bug.cgi?id=198418

Reviewed by Žan Doberšek.

This is because we need a DisplayRefreshMonitor per drawing area, but the one from the first ThreradedCompositor
is always reused because they use the same display ID.

* WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
(WebKit::DrawingAreaCoordinatedGraphics::enterAcceleratedCompositingMode): Use a unique display ID derived from
WebPage's ID.
(WebKit::DrawingAreaCoordinatedGraphics::exitAcceleratedCompositingMode): Use the primary display ID.
* WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
(WebKit::LayerTreeHost::LayerTreeHost): Get the current web page display ID instead of inventing one.
(WebKit::LayerTreeHost::setIsDiscardable): Do not change display ID.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246030 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[WinCairo][MiniBrowser] WKViewSetIsInWindow should be called
Hironori.Fujii@sony.com [Mon, 3 Jun 2019 05:28:58 +0000 (05:28 +0000)]
[WinCairo][MiniBrowser] WKViewSetIsInWindow should be called
https://bugs.webkit.org/show_bug.cgi?id=198474

Reviewed by Darin Adler.

WinCairo WK2 MiniBrowser can't play back videos because
Page::canStartMedia() always returns false. WKViewSetIsInWindow
should be called.

The original MiniBrowser did it in Bug 55364.

* MiniBrowser/win/WebKitBrowserWindow.cpp:
(WebKitBrowserWindow::WebKitBrowserWindow): Call WKViewSetIsInWindow.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246028 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoFlaky Test: inspector/canvas/recording.html
drousso@apple.com [Mon, 3 Jun 2019 02:12:59 +0000 (02:12 +0000)]
Flaky Test: inspector/canvas/recording.html
https://bugs.webkit.org/show_bug.cgi?id=198470

Reviewed by Matt Baker.

* inspector/canvas/recording.html:
Don't rely on `frameCount` to automatically stop the recording, as that's dependent on when
the <canvas> paints and is less controllable/deterministic.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246027 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoWeb Inspector: Debugger: sidebar should always reveal active call frame when hitting...
mattbaker@apple.com [Mon, 3 Jun 2019 00:05:10 +0000 (00:05 +0000)]
Web Inspector: Debugger: sidebar should always reveal active call frame when hitting a breakpoint
https://bugs.webkit.org/show_bug.cgi?id=198228
<rdar://problem/46719447>

Reviewed by Devin Rousso.

Reveal the active call frame TreeElement when call frames change. Refreshing
the current target's ThreadTreeElement children is insufficient, since
the sidebar panel content may have been scrolled.

This patch also introduces a workaround to prevent the DetailsSection header
element, which has sticky positioning, from covering a revealed TreeElement.
This can be the case when the TreeElement being revealed is at the topmost edge
of the scrolled content element.

* UserInterface/Base/Utilities.js:

* UserInterface/Views/DebuggerSidebarPanel.js:
(WI.DebuggerSidebarPanel.prototype.createContentTreeOutline):
(WI.DebuggerSidebarPanel.prototype._debuggerCallFramesDidChange):

* UserInterface/Views/DetailsSection.js:
(WI.DetailsSection.prototype.get element):
(WI.DetailsSection.prototype.get headerElement):
(WI.DetailsSection.prototype.get identifier):

* UserInterface/Views/SourcesNavigationSidebarPanel.js:
(WI.SourcesNavigationSidebarPanel.prototype.createContentTreeOutline):
(WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerCallFramesDidChange):

* UserInterface/Views/TreeElement.js:
(WI.TreeElement.prototype.reveal):
* UserInterface/Views/TreeOutline.js:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246026 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoWeb Inspector: propagate whether to show prototype information to subobject views
drousso@apple.com [Sun, 2 Jun 2019 23:34:36 +0000 (23:34 +0000)]
Web Inspector: propagate whether to show prototype information to subobject views
https://bugs.webkit.org/show_bug.cgi?id=194929

Reviewed by Matt Baker.

Add a way to mark the `ObjectTreeView` as holding a JSON value, which extends
`showOnlyProperties` to also hide the prototype of all held values (e.g. children).

* UserInterface/Views/ObjectTreeView.js:
(WI.ObjectTreeView.prototype.showOnlyJSON): Added.
* UserInterface/Views/ObjectTreeView.css:
(.object-tree.properties-only.json-only .object-tree-property .prototype-property): Added.

* UserInterface/Views/AuditTestCaseContentView.js:
(WI.AuditTestCaseContentView.prototype.layout):
* UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
(WI.DOMNodeDetailsSidebarPanel.prototype._refreshAssociatedData):
* UserInterface/Views/JSONResourceContentView.css:
(.content-view.resource.json .object-tree .prototype-property): Deleted.
* UserInterface/Views/JSONResourceContentView.js:
(WI.JSONResourceContentView.prototype.contentAvailable):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246025 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[JSC] Crash explicitly if StructureIDs are exhausted
ysuzuki@apple.com [Sun, 2 Jun 2019 22:18:06 +0000 (22:18 +0000)]
[JSC] Crash explicitly if StructureIDs are exhausted
https://bugs.webkit.org/show_bug.cgi?id=198467

Reviewed by Sam Weinig.

When StructureIDTable::m_size reaches to s_maximumNumberOfStructures, newCapacity in resize function is also capped with s_maximumNumberOfStructures.
So m_size == newCapacity. In that case, the following code in resize function, `makeFreeListFromRange(m_size, m_capacity - 1);` starts executing the
wrong code.

Currently, this is safe. We immediately execute the wrong code in makeFreeListFromRange, and crash with zero division. But we should not rely on
this crash, and instead we should explicitly crash because we exhaust StructureIDs.

This patch inserts RELEASE_ASSERT for `m_size < newCapacity` status to ensure that resize is always extending the table.

In practice, this crash does not happen in Safari because Safari has memory footprint limit. To exhaust StructureIDs, we need to allocate massive
amount of Structures, and it exceeds the memory footprint limit and the process will be killed.

* runtime/StructureIDTable.cpp:
(JSC::StructureIDTable::resize):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246024 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoProvide an action to save an image on a link sheet
dino@apple.com [Sun, 2 Jun 2019 20:51:57 +0000 (20:51 +0000)]
Provide an action to save an image on a link sheet
https://bugs.webkit.org/show_bug.cgi?id=198464

Reviewed by Wenson Hsieh.

When providing the set of default actions for a link
sheet, if an URL to an image was provided then offer
the action to save that image to Photos.

* UIProcess/ios/WKActionSheetAssistant.mm:
(-[WKActionSheetAssistant defaultActionsForLinkSheet:]):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246023 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoReenable Gigacage on ARM64.
keith_miller@apple.com [Sun, 2 Jun 2019 20:02:00 +0000 (20:02 +0000)]
Reenable Gigacage on ARM64.
https://bugs.webkit.org/show_bug.cgi?id=198453

Reviewed by Filip Pizlo.

Source/bmalloc:

* bmalloc/Gigacage.h:

Source/JavaScriptCore:

This patch adds back Gigacaging on Apple's ARM64 ports. Unlike the
old Gigacage however, arm64e uses both Gigacaging and PAC. Since
Gigacaging would otherwise strip a PAC failed authenticate bit we
force a load of the pointer into some garbage register.

* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::jumpForTypedArrayIsNeuteredIfOutOfBounds):
(JSC::DFG::SpeculativeJIT::cageTypedArrayStorage):
* ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray):
(JSC::FTL::DFG::LowerDFGToB3::untagArrayPtr):
(JSC::FTL::DFG::LowerDFGToB3::caged):
* jit/AssemblyHelpers.h:
(JSC::AssemblyHelpers::cageConditionally):
* llint/LowLevelInterpreter64.asm:

Source/WTF:

* wtf/CagedPtr.h:
(WTF::CagedPtr::authenticatingLoad):
(WTF::CagedPtr::get const):
(WTF::CagedPtr::getMayBeNull const):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246022 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoCachedMetadataTable::decode leaks empty tables
tzagallo@apple.com [Sun, 2 Jun 2019 12:25:15 +0000 (12:25 +0000)]
CachedMetadataTable::decode leaks empty tables
https://bugs.webkit.org/show_bug.cgi?id=198465
<rdar://problem/51307673>

Reviewed by Yusuke Suzuki.

CachedMetadataTable::decode creates the metadata and never calls finalize on it.
This leaks the underlying UnlinkedMetadataTable buffer when m_hasMetadata is false,
since the buffer would be freed in finalize instead of in the destructor.

* bytecode/UnlinkedMetadataTable.h:
(JSC::UnlinkedMetadataTable::empty):
* bytecode/UnlinkedMetadataTableInlines.h:
(JSC::UnlinkedMetadataTable::UnlinkedMetadataTable):
* runtime/CachedTypes.cpp:
(JSC::CachedMetadataTable::decode const):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246021 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoRemove include directives unused since r245186
annulen@yandex.ru [Sun, 2 Jun 2019 03:01:56 +0000 (03:01 +0000)]
Remove include directives unused since r245186
https://bugs.webkit.org/show_bug.cgi?id=198463

Reviewed by Don Olmstead.

* NetworkProcess/cache/NetworkCacheBlobStorage.cpp:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246020 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[Async overflow scroll] Flashing content when scrolling async overflow with a negativ...
simon.fraser@apple.com [Sun, 2 Jun 2019 03:01:47 +0000 (03:01 +0000)]
[Async overflow scroll] Flashing content when scrolling async overflow with a negative z-index child
https://bugs.webkit.org/show_bug.cgi?id=198458

Reviewed by Dean Jackson.

Source/WebCore:

Set the GraphicsLayerPaintOverflowContents phase on the foreground layer in a composited overflow scroller,
which prevents clipping to the visible region, fixing scrolling flashes.

Tested by compositing/overflow/stacking-context-composited-scroller-with-foreground-paint-phases.html

* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updatePaintingPhases):

LayoutTests:

* compositing/overflow/stacking-context-composited-scroller-with-foreground-paint-phases-expected.txt:
* platform/ios-wk2/compositing/overflow/stacking-context-composited-scroller-with-foreground-paint-phases-expected.txt:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246019 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoAsync overflow scroll on iOS paints slowly if it has a negative z-index child
simon.fraser@apple.com [Sun, 2 Jun 2019 02:55:57 +0000 (02:55 +0000)]
Async overflow scroll on iOS paints slowly if it has a negative z-index child
https://bugs.webkit.org/show_bug.cgi?id=196508
rdar://problem/49532709

Reviewed by Dean Jackson.
Source/WebCore:

If a RenderLayerBacking had a foreground layer and a scrolled contents layer, every geometry
update would change the size and offsetFromRenderer of the foreground layer between two
states, triggering repaint.

Fix by updating the fore- and background-layers last (nothing elese has dependencies
on their geometry), and using GraphicsLayer::DontSetNeedsDisplay as we do for the
scrolled contents layer.

The test also revealed a bug where the shapeMaskLayer would get incorrect geometry when scrollbars
were visible, because it would be squished by setting the wrong bounds, so fix that.

Test: compositing/repaint/scroller-with-foreground-layer-repaints.html

* platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::updateClippingStrategy):
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateGeometry):

LayoutTests:

* compositing/geometry/scroller-with-clipping-and-foreground-layers-expected.html: Added.
* compositing/geometry/scroller-with-clipping-and-foreground-layers.html: Added.
* compositing/repaint/scroller-with-foreground-layer-repaints-expected.txt: Added.
* compositing/repaint/scroller-with-foreground-layer-repaints.html: Added.
* platform/ios-wk2/compositing/repaint/scroller-with-foreground-layer-repaints-expected.txt: Added.
* platform/mac-wk1/compositing/repaint/scroller-with-foreground-layer-repaints-expected.txt: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246018 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoNon-composited negative z-order children should not trigger creation of a foreground...
simon.fraser@apple.com [Sat, 1 Jun 2019 21:40:04 +0000 (21:40 +0000)]
Non-composited negative z-order children should not trigger creation of a foreground layer
https://bugs.webkit.org/show_bug.cgi?id=198455

Reviewed by Sam Weinig.
Source/WebCore:

The existing code triggered creation of a foreground layer on RenderLayerBacking when
the negative z-order list was non-empty. This isn't necessary; we can paint the negative
z-order children just fine.

We only need a foreground layer when the negative z-order layers are composited or
have composited descendants.

This will reduce backing store memory use in some cases.

Test: compositing/layer-creation/composited-negative-z-subtree.html

* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::computeCompositingRequirements):
(WebCore::RenderLayerCompositor::updateBackingAndHierarchy):
(WebCore::RenderLayerCompositor::needsContentsCompositingLayer const):

LayoutTests:

Change existing tests that use negative z-order layers to trigger foreground layer
creation to use compositing on those negative z-order layers.

* compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt:
* compositing/geometry/bounds-ignores-hidden-dynamic-negzindex.html:
* compositing/geometry/bounds-ignores-hidden-expected.txt:
* compositing/geometry/bounds-ignores-hidden.html:
* compositing/layer-creation/composited-negative-z-subtree-expected.txt: Added.
* compositing/layer-creation/composited-negative-z-subtree.html: Added.
* compositing/overflow/stacking-context-composited-scroller-with-foreground-paint-phases-expected.txt:
* compositing/overflow/stacking-context-composited-scroller-with-foreground-paint-phases.html:
* platform/ios-wk2/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt:
* platform/ios-wk2/compositing/overflow/stacking-context-composited-scroller-with-foreground-paint-phases-expected.txt:
* platform/mac-wk1/compositing/overflow/stacking-context-composited-scroller-with-foreground-paint-phases-expected.txt:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246017 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoWeb Inspector: Canvas: split recording tests into separate files so they don't timeout
drousso@apple.com [Sat, 1 Jun 2019 21:37:49 +0000 (21:37 +0000)]
Web Inspector: Canvas: split recording tests into separate files so they don't timeout
https://bugs.webkit.org/show_bug.cgi?id=198459
<rdar://problem/51332026>

Reviewed by Joseph Pecoraro.

* inspector/canvas/recording.html:
* inspector/canvas/recording-expected.txt:

* inspector/canvas/recording-2d.html: Removed.
* inspector/canvas/recording-2d-expected.txt: Removed.
* inspector/canvas/console-record-2d.html: Added.
* inspector/canvas/console-record-2d-expected.txt: Added.
* inspector/canvas/recording-2d-frameCount.html: Added.
* inspector/canvas/recording-2d-frameCount-expected.txt: Added.
* inspector/canvas/recording-2d-full.html: Added.
* inspector/canvas/recording-2d-full-expected.txt: Added.
* inspector/canvas/recording-2d-memoryLimit.html: Added.
* inspector/canvas/recording-2d-memoryLimit-expected.txt: Added.
* inspector/canvas/recording-2d-saves.html: Added.
* inspector/canvas/recording-2d-saves-expected.txt: Added.
* inspector/canvas/resources/recording-2d.js: Added.

* inspector/canvas/recording-bitmaprenderer.html: Removed.
* inspector/canvas/recording-bitmaprenderer-expected.txt: Removed.
* inspector/canvas/console-record-bitmaprenderer.html: Added.
* inspector/canvas/console-record-bitmaprenderer-expected.txt: Added.
* inspector/canvas/recording-bitmaprenderer-frameCount.html: Added.
* inspector/canvas/recording-bitmaprenderer-frameCount-expected.txt: Added.
* inspector/canvas/recording-bitmaprenderer-full.html: Added.
* inspector/canvas/recording-bitmaprenderer-full-expected.txt: Added.
* inspector/canvas/recording-bitmaprenderer-memoryLimit.html: Added.
* inspector/canvas/recording-bitmaprenderer-memoryLimit-expected.txt: Added.
* inspector/canvas/resources/recording-bitmaprenderer.js: Added.

* inspector/canvas/recording-webgl.html: Removed.
* inspector/canvas/recording-webgl-expected.txt: Removed.
* inspector/canvas/console-record-webgl.html: Added.
* inspector/canvas/console-record-webgl-expected.txt: Added.
* inspector/canvas/recording-webgl-frameCount.html: Added.
* inspector/canvas/recording-webgl-frameCount-expected.txt: Added.
* inspector/canvas/recording-webgl-full.html: Added.
* inspector/canvas/recording-webgl-full-expected.txt: Added.
* inspector/canvas/recording-webgl-memoryLimit.html: Added.
* inspector/canvas/recording-webgl-memoryLimit-expected.txt: Added.
* inspector/canvas/resources/recording-webgl.js: Added.

* inspector/canvas/recording-webgl2.html: Removed.
* inspector/canvas/recording-webgl2-expected.txt: Removed.
* inspector/canvas/console-record-webgl2.html: Added.
* inspector/canvas/console-record-webgl2-expected.txt: Added.
* inspector/canvas/recording-webgl2-frameCount.html: Added.
* inspector/canvas/recording-webgl2-frameCount-expected.txt: Added.
* inspector/canvas/recording-webgl2-full.html: Added.
* inspector/canvas/recording-webgl2-full-expected.txt: Added.
* inspector/canvas/recording-webgl2-memoryLimit.html: Added.
* inspector/canvas/recording-webgl2-memoryLimit-expected.txt: Added.
* inspector/canvas/resources/recording-webgl2.js: Added.

* TestExpectations:
* platform/gtk/TestExpectations:
* platform/mac/TestExpectations:
* platform/win/TestExpectations:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246016 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoWeb Inspector: Canvas: in tests don't manually stop recording if a frame count is...
drousso@apple.com [Sat, 1 Jun 2019 20:19:18 +0000 (20:19 +0000)]
Web Inspector: Canvas: in tests don't manually stop recording if a frame count is specified
https://bugs.webkit.org/show_bug.cgi?id=198457
<rdar://problem/48248697>

Reviewed by Joseph Pecoraro.

If a `frameCount` is specified, the recording will stop by itself, so if we hit the
`LastFrame`, there's no need to manually stop the recording at that point. Otherwise,
stopping it early may cause the recording to think that the last frame is incomplete.

* inspector/canvas/resources/recording-utilities.js:
* inspector/canvas/recording-webgl-snapshots.html:
* inspector/canvas/recording-webgl2-snapshots.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246015 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[Apple Pay] Every PaymentCoordinator client should explicitly decide whether they...
aestes@apple.com [Sat, 1 Jun 2019 16:19:40 +0000 (16:19 +0000)]
[Apple Pay] Every PaymentCoordinator client should explicitly decide whether they support unrestricted Apple Pay
https://bugs.webkit.org/show_bug.cgi?id=198449
<rdar://problem/51038583>

Reviewed by Wenson Hsieh.

Source/WebCore:

Rather than having a default return value of true for
PaymentCoordinatorClient::supportsUnrestrictedApplePay, make it pure virtual to force each
subclass to implement an override and explicitly choose an appropriate return value.

The only two clients that did not explicitly override were the empty client and
WebKitLegacy's client, and Apple Pay was never enabled in those clients, so there is no
change in behavior.

* Modules/applepay/PaymentCoordinatorClient.h:
(WebCore::PaymentCoordinatorClient::isAlwaysOnLoggingAllowed const):
(WebCore::PaymentCoordinatorClient::supportsUnrestrictedApplePay const): Deleted.
* loader/EmptyClients.cpp:

Source/WebKitLegacy/mac:

* WebCoreSupport/WebPaymentCoordinatorClient.h:
* WebCoreSupport/WebPaymentCoordinatorClient.mm:
(WebPaymentCoordinatorClient::supportsUnrestrictedApplePay const):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246014 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoEnsure keyboard editing is up to date
megan_gardner@apple.com [Sat, 1 Jun 2019 06:19:52 +0000 (06:19 +0000)]
Ensure keyboard editing is up to date
https://bugs.webkit.org/show_bug.cgi?id=198444
<rdar://problem/36311563>

Reviewed by Ryosuke Niwa.

In order for the keyboard cut/copy/undo/redo/etc buttons to be up to date
based on the state of the selection, we need to let the input delegate know when the
selection has changed.

* UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView _selectionChanged]):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246013 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoTestWebKitAPI.WKWebView.LocalStorageProcessSuspends is flaky
sihui_liu@apple.com [Sat, 1 Jun 2019 04:33:04 +0000 (04:33 +0000)]
TestWebKitAPI.WKWebView.LocalStorageProcessSuspends is flaky
https://bugs.webkit.org/show_bug.cgi?id=198450

Reviewed by Ryosuke Niwa.

In local-storage-process-suspends-2.html, we periodically checked local storage item and sent a message when the
item value was changed or times of check reached limit. We expected the message to be sent after network process
resumed from suspension, because that's when the item value should get updated. However, the limit we set seemed
to be not high enough, so that the message could be sent eariler than expected, when limit of check number was
reached.

We can solve this in different ways. To make the test robust, we can send the message on a storage event, which
notifies about changes in local storage.

* TestWebKitAPI/Tests/WebKitCocoa/LocalStoragePersistence.mm:
(TEST):
* TestWebKitAPI/Tests/WebKitCocoa/local-storage-process-suspends-2.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246012 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoRemove outdated FIXME in StorageManager
sihui_liu@apple.com [Sat, 1 Jun 2019 04:16:40 +0000 (04:16 +0000)]
Remove outdated FIXME in StorageManager
https://bugs.webkit.org/show_bug.cgi?id=198049

Reviewed by Geoffrey Garen.

Previously StorageManager messages were dispatched and handled in the same thread, so we could perform a message
check. Now they are on different thread, and we would not be able to verify those parameters when dispatching
the message.

* NetworkProcess/WebStorage/StorageManager.cpp:
(WebKit::StorageManager::createLocalStorageMap):
(WebKit::StorageManager::createTransientLocalStorageMap):
(WebKit::StorageManager::createSessionStorageMap):
(WebKit::StorageManager::destroyStorageMap):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246011 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoDragAndDropTests.DragImageLocationForLinkInSubframe fails on some iPad
rniwa@webkit.org [Sat, 1 Jun 2019 03:20:05 +0000 (03:20 +0000)]
DragAndDropTests.DragImageLocationForLinkInSubframe fails on some iPad
https://bugs.webkit.org/show_bug.cgi?id=198447

Reviewed by Wenson Hsieh.

Give the elements an explicit 400px width to make the test always work.

* TestWebKitAPI/Tests/WebKitCocoa/link-in-iframe-and-input.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246010 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoTeach AuxiliaryProcess about LoadOptimizer
jiewen_tan@apple.com [Sat, 1 Jun 2019 01:03:05 +0000 (01:03 +0000)]
Teach AuxiliaryProcess about LoadOptimizer
https://bugs.webkit.org/show_bug.cgi?id=198443
<rdar://problem/51319120>

Reviewed by Brent Fulgham.

* Shared/ios/AuxiliaryProcessIOS.mm:
(WebKit::AuxiliaryProcess::platformInitialize):
* Shared/mac/AuxiliaryProcessMac.mm:
(WebKit::AuxiliaryProcess::platformInitialize):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246008 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoUnreviewed, fix setEntryAddressCommon register usage in LLInt ASM Windows 64
ysuzuki@apple.com [Sat, 1 Jun 2019 00:59:58 +0000 (00:59 +0000)]
Unreviewed, fix setEntryAddressCommon register usage in LLInt ASM Windows 64
https://bugs.webkit.org/show_bug.cgi?id=197979

* llint/LowLevelInterpreter.asm:
* offlineasm/x86.rb:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246006 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoMake tests that use UIHelper more robust under certain configurations
wenson_hsieh@apple.com [Sat, 1 Jun 2019 00:43:56 +0000 (00:43 +0000)]
Make tests that use UIHelper more robust under certain configurations
https://bugs.webkit.org/show_bug.cgi?id=198442
<rdar://problem/51301737>

Reviewed by Megan Gardner.

Tools:

For a certain device class, many tests that attempt to use UIHelper.isIOS are currently failing. We can fix this
by making the `isIOS` check more robust; this patch also renames `isIOS` to `isIOSFamily`, which is more
accurate (and consistent with the corresponding PLATFORM macro name).

* WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
* WebKitTestRunner/InjectedBundle/TestRunner.h:
(WTR::TestRunner::isIOSFamily const):

LayoutTests:

Replace usages of `UIHelper.isIOS` with `UIHelper.isIOSFamily`.

* fast/dom/iframe-inner-size-scaling.html:
* fast/forms/datalist/datalist-show-hide.html:
* fast/forms/datalist/datalist-textinput-suggestions-order.html:
* fast/scrolling/ios/reveal-focused-element-right-above-keyboard-on-ipad.html:

Also remove a workaround here that forces `isIOS` to return `true`.

* resources/ui-helper.js:
(window.UIHelper.isIOSFamily):
(window.UIHelper.isWebKit2):
(window.UIHelper.humanSpeedDoubleTapAt):
(window.UIHelper.humanSpeedZoomByDoubleTappingAt):
(window.UIHelper.zoomByDoubleTappingAt):
(window.UIHelper.async.doubleActivateAt):
(window.UIHelper.async.doubleActivateAtSelectionStart):
(window.UIHelper.async.selectWordByDoubleTapOrClick):
(window.UIHelper.keyDown):
(window.UIHelper.deactivateFormControl):
(window.UIHelper.typeCharacter):
(window.UIHelper.inputViewBounds):
(window.UIHelper.contentOffset):
(window.UIHelper.isIOS): Deleted.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246004 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[PlayStation] Support internal test runner for JSC tests
stephan.szabo@sony.com [Sat, 1 Jun 2019 00:00:55 +0000 (00:00 +0000)]
[PlayStation] Support internal test runner for JSC tests
https://bugs.webkit.org/show_bug.cgi?id=198386

Reviewed by Alex Christensen.

Support using our test runner with our wrapper library
to run multiple tests sequentially in one execution. With
default arguments, will run as normal, but with special
arguments will shift into this mode.

* runtime/Options.h:
Export the default values of the JSC options similar
to the values for resetting the values between tests.
* shell/PlatformPlayStation.cmake:
* shell/playstation/TestShell.cpp: Added.
(setupTestRun): Function to set up the system before starting the tests
(preTest): Function for setting up individual test
(runTest): Function to run a test execution
(postTest): Function for shutdown of individual test
(shutdownTestRun): Function for shutting down the system after test run completes.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246003 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoAdd an option to mute audio capture automatically when page is not visible
youenn@apple.com [Fri, 31 May 2019 23:49:31 +0000 (23:49 +0000)]
Add an option to mute audio capture automatically when page is not visible
https://bugs.webkit.org/show_bug.cgi?id=198307

Reviewed by Eric Carlson.

Source/WebCore:

Reuse video capture mechanism for audio capture.
In case document gets in the background, interrupt the audio track if the audio factory requires it.
CoreAudioCaptureSourceIOS requires the audio source be interrupted if the app has not the right background mode.
It also allows interrupting the audio capture based on a runtime flag.

Add a runtime flag to control this.
Internals API is used to set it for test purposes, off by default.
For regular cases, the runtime flag is set through web preferences.

Test: platform/ios/mediastream/audio-muted-in-background-tab.html

* dom/Document.cpp:
(WebCore::Document::notifyMediaCaptureOfVisibilityChanged):
* page/RuntimeEnabledFeatures.h:
(WebCore::RuntimeEnabledFeatures::interruptAudioOnPageVisibilityChangeEnabled const):
(WebCore::RuntimeEnabledFeatures::setInterruptAudioOnPageVisibilityChangeEnabled):
* platform/mediastream/RealtimeMediaSourceCenter.cpp:
(WebCore::RealtimeMediaSourceCenter::RealtimeMediaSourceCenter):
(WebCore::RealtimeMediaSourceCenter::initializeShouldInterruptAudioOnPageVisibilityChange):
(WebCore::RealtimeMediaSourceCenter::setCapturePageState):
(WebCore::RealtimeMediaSourceCenter::visibilityDidChange):
* platform/mediastream/RealtimeMediaSourceCenter.h:
(WebCore::RealtimeMediaSourceCenter::shouldInterruptAudioOnPageVisibilityChange):
* platform/mediastream/RealtimeMediaSourceFactory.h:
(WebCore::AudioCaptureFactory::setAudioCapturePageState):
(WebCore::VideoCaptureFactory::setVideoCapturePageState):
* platform/mediastream/ios/CoreAudioCaptureSourceIOS.h:
* platform/mediastream/ios/CoreAudioCaptureSourceIOS.mm:
(WebCore::CoreAudioCaptureSourceFactory::setAudioCapturePageState):
(WebCore::CoreAudioCaptureSourceFactoryIOS::shouldInterruptAudioOnPageVisibilityChange):
* platform/mediastream/mac/CoreAudioCaptureSource.h:
* platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
(WebCore::RealtimeMediaSourceCenter::initializeShouldInterruptAudioOnPageVisibilityChange):
* testing/Internals.cpp:
(WebCore::Internals::resetToConsistentState):
(WebCore::Internals::setShouldInterruptAudioOnPageVisibilityChange):
* testing/Internals.h:
* testing/Internals.idl:

Source/WebKit:

Add API to set the new runtime flag.
Make source proxy factories implement this automatic muting.

* Shared/WebPreferences.yaml:
* UIProcess/API/Cocoa/WKPreferences.mm:
(-[WKPreferences _interruptAudioOnPageVisibilityChangeEnabled]):
(-[WKPreferences _setInterruptAudioOnPageVisibilityChangeEnabled:]):
* UIProcess/API/Cocoa/WKPreferencesPrivate.h:
* WebProcess/cocoa/UserMediaCaptureManager.cpp:
(WebKit::UserMediaCaptureManager::setAudioCapturePageState):
(WebKit::UserMediaCaptureManager::setVideoCapturePageState):
* WebProcess/cocoa/UserMediaCaptureManager.h:

LayoutTests:

* platform/ios/mediastream/audio-muted-in-background-tab-expected.txt: Added.
* platform/ios/mediastream/audio-muted-in-background-tab.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246002 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoUpdating expectations for failing tests
sroberts@apple.com [Fri, 31 May 2019 23:37:44 +0000 (23:37 +0000)]
Updating expectations for failing tests
<rdar://problem/47088939>

Unreviewed test gardening.

* platform/mac/TestExpectations:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245999 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[iOS] Autocorrection menu font is Times New Roman when using font-family: UICTFontTex...
wenson_hsieh@apple.com [Fri, 31 May 2019 23:36:30 +0000 (23:36 +0000)]
[iOS] Autocorrection menu font is Times New Roman when using font-family: UICTFontTextStyle*
https://bugs.webkit.org/show_bug.cgi?id=198427
<rdar://problem/50031825>

Reviewed by Tim Horton.

Source/WebKit:

When UICTFontTextStyle* is specified as the font-family in an editable element, text in autocorrection bubbles
always uses Times New Roman font. This is because we send a font family name, font size, and font attributes to
the UI process when computing autocorrection data for UIKit, and then assemble this information into a UIFont
object via +[UIFont fontWithFamilyName:traits:size:]. However, in the case where UICTFontTextStyle* is specified
as the font-family in CSS, the font family that we send to the UI process ends up being ".AppleSystemUIFont",
which +fontWithFamilyName:traits:size: fails to map to the system font as intended.

To fix this, we propagate font information to the UI process by encoding the UIFont itself via IPC, which
serializes the font descriptor, and then deserializes into a UIFont in the UI process. This allows the system
font to be returned in -fontForCaretSelection, which is invoked by UIKit when determining the font for the
autocorrection bubble. See below for more details.

Test: AutocorrectionTests.FontAtCaretWhenUsingUICTFontTextStyle

* Shared/ios/WebAutocorrectionData.h: Copied from Source/WebKit/UIProcess/AutoCorrectionCallback.h.
* Shared/ios/WebAutocorrectionData.mm: Renamed from Source/WebKit/UIProcess/AutoCorrectionCallback.h.
(WebKit::WebAutocorrectionData::encode const):
(WebKit::WebAutocorrectionData::decode):

Introduce WebAutocorrectionData, a struct containing information used to show autocorrection UI on iOS (i.e.
highlights and the bubble). This consists of a list of rects, along with a UIFont.

* SourcesCocoa.txt:
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:

Refactor requestAutocorrectionData to request a WebAutocorrectionData instead, and also use the new async IPC
reply mechanism.

* UIProcess/ios/WKContentViewInteraction.h:
* UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView requestAutocorrectionRectsForString:withCompletionHandler:]):
(-[WKContentView fontForCaretSelection]):

Grab the UIFont directly from the WebAutocorrectionData. Also, address a FIXME by scaling the font size by the
content scale.

* UIProcess/ios/WebPageProxyIOS.mm:
(WebKit::WebPageProxy::requestAutocorrectionData):
(WebKit::WebPageProxy::autocorrectionDataCallback): Deleted.
(WebKit::WebPageProxy::autocorrectionContextCallback): Deleted.

Remove some IPC callbacks that are now unused.

* WebKit.xcodeproj/project.pbxproj:
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:
* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::requestAutocorrectionData):

Tools:

Add a new API test to verify that -fontForCaretSelection returns the system font when using UICTFontTextStyle
in an editable web view.

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/ios/AutocorrectionTestsIOS.mm: Added.
(-[TestWKWebView autocorrectionRectsForString:]):
(checkCGRectIsEqualToCGRectWithLogging):
* TestWebKitAPI/cocoa/TestWKWebView.h:
* TestWebKitAPI/ios/UIKitSPI.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245998 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoDetab.
simon.fraser@apple.com [Fri, 31 May 2019 23:22:31 +0000 (23:22 +0000)]
Detab.

* scrollingcoordinator/scrolling-tree/scrolling-tree-includes-frame.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245995 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[Mac WK2 Debug] Layout Test scrollingcoordinator/scrolling-tree/scrolling-tree-includ...
simon.fraser@apple.com [Fri, 31 May 2019 23:20:14 +0000 (23:20 +0000)]
[Mac WK2 Debug] Layout Test scrollingcoordinator/scrolling-tree/scrolling-tree-includes-frame.html is a flaky failure
https://bugs.webkit.org/show_bug.cgi?id=197425

Unreviewed test gardening.

Speculative fix for flakey test; trigger layout inside the subframe.

* scrollingcoordinator/scrolling-tree/scrolling-tree-includes-frame.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245994 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[iOS] Reveal the focused element when it's immediately above software keyboard
rniwa@webkit.org [Fri, 31 May 2019 23:13:39 +0000 (23:13 +0000)]
[iOS] Reveal the focused element when it's immediately above software keyboard
https://bugs.webkit.org/show_bug.cgi?id=198412

Reviewed by Wenson Hsieh.

Source/WebKit:

When _zoomToRevealFocusedElement is called with forceScroll set to NO (happens when input type is none or drawing
or when the platform is iPad), we don't force scrolling to reveal the focused element when it's entirely visible.

This can be misleading in cases where there is more content right beneath it relevant for editing operations.
Zoom & scroll to reveal the focused element when the said element is within 50px of the software keyboard.

* Platform/spi/ios/UIKitSPI.h:
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _zoomToFocusRect:selectionRect:insideFixed:fontSize:minimumScale:maximumScale:allowScaling:forceScroll:]):

LayoutTests:

Added a regression test. Note that this test always passes on non-iPad platforms either
before or after this patch as _zoomToRevealFocusedElement forces scrolling in that case.

* fast/scrolling/ios/reveal-focused-element-right-above-keyboard-on-ipad-expected.txt: Added.
* fast/scrolling/ios/reveal-focused-element-right-above-keyboard-on-ipad.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245993 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoUnreviewed, rolling out r245899.
cdumez@apple.com [Fri, 31 May 2019 23:10:27 +0000 (23:10 +0000)]
Unreviewed, rolling out r245899.

Seems to be causing crashes on iosmac

Reverted changeset:

"[iOS] UIProcess' background task expiration handler may get
called after the app is foreground again"
https://bugs.webkit.org/show_bug.cgi?id=198380
https://trac.webkit.org/changeset/245899

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245992 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoWeb Inspector: CSS Changes: modifications aren't shared for rules that match multiple...
nvasilyev@apple.com [Fri, 31 May 2019 22:53:40 +0000 (22:53 +0000)]
Web Inspector: CSS Changes: modifications aren't shared for rules that match multiple elements
https://bugs.webkit.org/show_bug.cgi?id=195264
<rdar://problem/48550023>

Reviewed by Devin Rousso.

Source/WebInspectorUI:

This patch fixes several cases when the diff was incorrect.

1. Perform diff based on CSSProperty content (name, value, and enabled property) instead
   of strict equality of CSSProperty instances.

2. Copy all initial CSSProperty instances of CSSStyleDeclaration on 1st edit.
   This removes the need to update `properties` on every single edit.

3. Do full diff to display modified property markers (green background) in Rules panel.
   This fixes a few cases when the markers were inaccurate. E.g. a newly added property
   matches removed property - no need to show the green background.

* UserInterface/Base/Utilities.js:
(Array.diffArrays):
Allow repeating items in the arrays.

* UserInterface/Controllers/CSSManager.js:
(WI.CSSManager.prototype.getModifiedStyle):
(WI.CSSManager.prototype.removeModifiedStyle):
* UserInterface/Models/CSSProperty.js:
(WI.CSSProperty):
(WI.CSSProperty.prototype.get modified):
(WI.CSSProperty.prototype.set modified):
(WI.CSSProperty.prototype.equals):
(WI.CSSProperty.prototype.clone):
(WI.CSSProperty.prototype._updateOwnerStyleText):
(WI.CSSProperty.prototype._markModified):
* UserInterface/Models/CSSStyleDeclaration.js:
(WI.CSSStyleDeclaration.prototype.markModified):
(WI.CSSStyleDeclaration.prototype.updatePropertiesModifiedState):
* UserInterface/Views/ChangesDetailsSidebarPanel.js:
(WI.ChangesDetailsSidebarPanel.prototype._createRuleElement):
* UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
(WI.SpreadsheetCSSStyleDeclarationEditor.prototype.layout):
* UserInterface/Views/SpreadsheetStyleProperty.js:

LayoutTests:

Test arrays with repeating items for Array.diffArrays.

* inspector/unit-tests/array-utilities-expected.txt:
* inspector/unit-tests/array-utilities.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245991 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agotile-coverage-iframe-to-zero-coverage.html flakey after r245974
simon.fraser@apple.com [Fri, 31 May 2019 22:30:55 +0000 (22:30 +0000)]
tile-coverage-iframe-to-zero-coverage.html flakey after r245974
https://bugs.webkit.org/show_bug.cgi?id=198438

Unreviewed test gardening.

layerTreeAsText() doesn't force layouts on subframes (webkit.org/b/198439) so
have the test force an update on the subframe via a dummy layerTreeAsText() call.

* tiled-drawing/tile-coverage-iframe-to-zero-coverage-expected.txt:
* tiled-drawing/tile-coverage-iframe-to-zero-coverage.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245990 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoiOS: Main frame should be scrollable when pinch zoomed or software keyboard is up
rniwa@webkit.org [Fri, 31 May 2019 22:12:19 +0000 (22:12 +0000)]
iOS: Main frame should be scrollable when pinch zoomed or software keyboard is up
https://bugs.webkit.org/show_bug.cgi?id=198244

Reviewed by Simon Fraser.

Source/WebKit:

This is a follow up to r245006. Even when overflow: hidden is specified on the document body,
we still need to make it scrollable when the page is pinch zoomed or there is a content inset
e.g. for software keyboard. Otherwise, the user won't be able to get to the content that is
outside the visual viewport when pinch zoomed or the parts of the page that is not outside
the visual viewport due to the scrolling caused by the software keyboard being brought up.

* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _didCommitLayerTree:]):

LayoutTests:

Added regression tests.

* fast/scrolling/ios/body-overflow-hidden-height-100-percent-keyboard-expected.txt: Added.
* fast/scrolling/ios/body-overflow-hidden-height-100-percent-keyboard.html: Added.
* fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-1-expected.txt: Added.
* fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-1.html: Added.
* fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-2-expected.txt: Added.
* fast/scrolling/ios/body-overflow-hidden-height-100-percent-zoomed-2.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245989 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoREGRESSION: WebKit.InteractionDeadlockAfterCrash and SynchronousTimeoutTests.Unrespon...
timothy_horton@apple.com [Fri, 31 May 2019 22:02:14 +0000 (22:02 +0000)]
REGRESSION: WebKit.InteractionDeadlockAfterCrash and SynchronousTimeoutTests.UnresponsivePageDoesNotCausePositionInformationToHangUI API tests are failing
https://bugs.webkit.org/show_bug.cgi?id=198432
<rdar://problem/51266033>

Reviewed by Wenson Hsieh.

* TestWebKitAPI/Tests/WebKitCocoa/InteractionDeadlockAfterCrash.mm:
(TEST):
(recursiveFindHighlightLongPressRecognizer): Deleted.
* TestWebKitAPI/Tests/ios/SynchronousTimeoutTests.mm:
(TestWebKitAPI::TEST):
(TestWebKitAPI::recursiveFindHighlightLongPressRecognizer): Deleted.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245988 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoSome WeakPtr typedef cleanup
ggaren@apple.com [Fri, 31 May 2019 21:56:37 +0000 (21:56 +0000)]
Some WeakPtr typedef cleanup
https://bugs.webkit.org/show_bug.cgi?id=198431

Reviewed by Chris Dumez.

Use "using" instead of "typedef", since using is preferred in C++ for
better compatibility with templates.

Source/WebCore:

* Modules/indexeddb/shared/InProcessIDBServer.h:
* html/HTMLMediaElement.h:
* platform/ScrollView.h:

Source/WebKit:

* UIProcess/WebAuthentication/AuthenticatorManager.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245987 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoUnreviewed, rolling out r245953.
commit-queue@webkit.org [Fri, 31 May 2019 21:11:32 +0000 (21:11 +0000)]
Unreviewed, rolling out r245953.
https://bugs.webkit.org/show_bug.cgi?id=198436

Broke quip (Requested by rniwa on #webkit).

Reverted changeset:

"iOS: Main frame should be scrollable when pinch zoomed or
software keyboard is up"
https://bugs.webkit.org/show_bug.cgi?id=198244
https://trac.webkit.org/changeset/245953

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245984 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoURLParser::parseIPv6Host should properly parse 0's around compression
achristensen@apple.com [Fri, 31 May 2019 20:56:40 +0000 (20:56 +0000)]
URLParser::parseIPv6Host should properly parse 0's around compression
https://bugs.webkit.org/show_bug.cgi?id=198424

Reviewed by Tim Horton.

Source/WTF:

* wtf/URLParser.cpp:
(WTF::URLParser::parseIPv6Host):

Tools:

* TestWebKitAPI/Tests/WTF/URLParser.cpp:
(TestWebKitAPI::TEST_F):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245983 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoURLParser::parseHostAndPort should not allow non-port characters after an ipv6 host
achristensen@apple.com [Fri, 31 May 2019 20:55:25 +0000 (20:55 +0000)]
URLParser::parseHostAndPort should not allow non-port characters after an ipv6 host
https://bugs.webkit.org/show_bug.cgi?id=198428
<rdar://problem/51209196>

Reviewed by Tim Horton.

Source/WTF:

This matches Chrome and Firefox.

* wtf/URLParser.cpp:
(WTF::URLParser::parseHostAndPort):

Tools:

* TestWebKitAPI/Tests/WTF/URLParser.cpp:
(TestWebKitAPI::TEST_F):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245982 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agorun-benchmark should report an error if the argument to --build-directory is bogus
dewei_zhu@apple.com [Fri, 31 May 2019 20:52:31 +0000 (20:52 +0000)]
run-benchmark should report an error if the argument to --build-directory is bogus
https://bugs.webkit.org/show_bug.cgi?id=198316

Reviewed by Ryosuke Niwa.

'run-benchmark' should not fallback to system safari when browser or browser build path is
specified but not valid.
Add a run-time check to ensure at least one of the resource from build directory is opened by
Safari when build directory is specified.

* Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py:
(OSXSafariDriver.launch_url): Raise an exception when browser or browser build path is
specified but not valid.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245981 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoInserting a newline in contenteditable causes two characters to be added instead...
commit-queue@webkit.org [Fri, 31 May 2019 20:23:31 +0000 (20:23 +0000)]
Inserting a newline in contenteditable causes two characters to be added instead of one
https://bugs.webkit.org/show_bug.cgi?id=197894
<rdar://problems/49700998>

Patch by Andres Gonzalez <andresg_22@apple.com> on 2019-05-31
Reviewed by Chris Fleizach.

No new test is necessary since this is a comment change.

Removed radar reference from code.

* editing/Editing.cpp:
(WebCore::visiblePositionForIndexUsingCharacterIterator):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245980 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoOptionally respect device management restrictions when loading from the network
timothy_horton@apple.com [Fri, 31 May 2019 20:00:07 +0000 (20:00 +0000)]
Optionally respect device management restrictions when loading from the network
https://bugs.webkit.org/show_bug.cgi?id=198318
<rdar://problem/44263806>

Reviewed by Alex Christensen.

Source/WebCore:

* en.lproj/Localizable.strings:

Source/WebKit:

* Configurations/Network-iOS.entitlements:
* Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
Add some entitlements and sandbox holes required to talk to DeviceManagement.

* NetworkProcess/NetworkCORSPreflightChecker.cpp:
(WebKit::NetworkCORSPreflightChecker::wasBlockedByRestrictions):
* NetworkProcess/NetworkCORSPreflightChecker.h:
* NetworkProcess/NetworkLoad.cpp:
(WebKit::NetworkLoad::wasBlockedByRestrictions):
* NetworkProcess/NetworkLoad.h:
* NetworkProcess/PingLoad.cpp:
(WebKit::PingLoad::wasBlockedByRestrictions):
* NetworkProcess/PingLoad.h:
* Shared/WebErrors.cpp:
(WebKit::wasBlockedByRestrictionsError):
* Shared/WebErrors.h:
* NetworkProcess/NetworkDataTask.cpp:
(WebKit::NetworkDataTask::create):
(WebKit::NetworkDataTask::failureTimerFired):
* NetworkProcess/NetworkDataTask.h:
* Shared/API/APIError.h:
* Shared/API/c/WKErrorRef.cpp:
(WKErrorGetErrorCode):
* Shared/API/c/WKErrorRef.h:
Plumb a new error for loads that are blocked by device management restrictions.

* NetworkProcess/NetworkLoadParameters.h:
* NetworkProcess/NetworkResourceLoadParameters.cpp:
(WebKit::NetworkResourceLoadParameters::encode const):
(WebKit::NetworkResourceLoadParameters::decode):
* WebProcess/Network/WebLoaderStrategy.cpp:
(WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
Plumb a new bit that indicates whether a load is for the main resource of a frame.
We will only apply device management restrictions to main resources.

* NetworkProcess/NetworkSessionCreationParameters.cpp:
(WebKit::NetworkSessionCreationParameters::privateSessionParameters):
(WebKit::NetworkSessionCreationParameters::encode const):
(WebKit::NetworkSessionCreationParameters::decode):
* NetworkProcess/NetworkSessionCreationParameters.h:
* UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
(WebKit::WebsiteDataStore::parameters):
Plumb a new bit indicating whether a network session should respect device mangement
restrictions.

* NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
* NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
(WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
(WebKit::NetworkDataTaskCocoa::resume):
Defer resuming the load until we have a reply from DeviceManagement framework
about whether the URL should be blocked. If it is blocked, instead fail the load.

* NetworkProcess/cocoa/NetworkSessionCocoa.h:
* NetworkProcess/cocoa/NetworkSessionCocoa.mm:
(-[WKNetworkSessionDelegate URLSession:dataTask:didReceiveResponse:completionHandler:]):
(WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
(WebKit::NetworkSessionCocoa::deviceManagementPolicyMonitor):
Cache a single DMFWebsitePolicyMonitor instance per NetworkSession.

* UIProcess/API/APIWebsiteDataStore.cpp:
(API::WebsiteDataStore::defaultDataStoreConfiguration):
The default data store is persistent; its configuration should reflect that.

* UIProcess/API/Cocoa/WKProcessPool.mm:
(-[WKProcessPool _setAllowsAnySSLCertificateForServiceWorker:]): Style.

* UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
(-[WKWebsiteDataStore _initWithConfiguration:]):
Make it possible to create a non-persistent WKWebsiteDataStore from a
configuration, and ensure that it does not have any persistent storage directories set.

* UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
* UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
(-[_WKWebsiteDataStoreConfiguration init]):
(-[_WKWebsiteDataStoreConfiguration initWithNonPersistentConfiguration]):
(-[_WKWebsiteDataStoreConfiguration isPersistent]):
(-[_WKWebsiteDataStoreConfiguration _setWebStorageDirectory:]):
(-[_WKWebsiteDataStoreConfiguration _setIndexedDBDatabaseDirectory:]):
(-[_WKWebsiteDataStoreConfiguration _setWebSQLDatabaseDirectory:]):
(-[_WKWebsiteDataStoreConfiguration _setCookieStorageFile:]):
(-[_WKWebsiteDataStoreConfiguration _setResourceLoadStatisticsDirectory:]):
(-[_WKWebsiteDataStoreConfiguration _setCacheStorageDirectory:]):
(-[_WKWebsiteDataStoreConfiguration _setServiceWorkerRegistrationDirectory:]):
(-[_WKWebsiteDataStoreConfiguration deviceManagementRestrictionsEnabled]):
(-[_WKWebsiteDataStoreConfiguration setDeviceManagementRestrictionsEnabled:]):
* UIProcess/WebsiteData/WebsiteDataStoreConfiguration.cpp:
(WebKit::WebsiteDataStoreConfiguration::copy):
* UIProcess/WebsiteData/WebsiteDataStoreConfiguration.h:
(WebKit::WebsiteDataStoreConfiguration::isPersistent const):
(WebKit::WebsiteDataStoreConfiguration::setPersistent):
(WebKit::WebsiteDataStoreConfiguration::perOriginStorageQuota const):
(WebKit::WebsiteDataStoreConfiguration::deviceManagementRestrictionsEnabled const):
(WebKit::WebsiteDataStoreConfiguration::setDeviceManagementRestrictionsEnabled):
(WebKit::WebsiteDataStoreConfiguration::perOriginStorageQuota): Deleted.
Make it possible to create a _WKWebsiteDataStoreConfiguration that will create a non-persistent
data store. Add a bit to _WKWebsiteDataStoreConfiguration that controls whether the network
session will respect device management restrictions.

* WebKit.xcodeproj/project.pbxproj:
* WebKit/NetworkProcess/cocoa/DeviceManagementSoftLink.h:
* WebKit/NetworkProcess/cocoa/DeviceManagementSoftLink.mm:
* WebKit/Platform/spi/Cocoa/DeviceManagementSPI.h:
Add some soft-linking and SPI headers.

Source/WTF:

* wtf/Platform.h:
Add a HAVE flag for DeviceManagement.framework.
It does exist in the simulator, but does not function; pretend it doesn't exist.

Tools:

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKitCocoa/DeviceManagementRestrictions.mm: Added.
(TEST):
* TestWebKitAPI/Tests/WebKitCocoa/WKWebsiteDatastore.mm:
(TestWebKitAPI::TEST):
* TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
(TEST):
Clone a test that tests non-persistent data stores and ensure
that it works if the data store is created via a configuration as well.

Add a test that ensures that you can't create a data store configuration
with an invalid set of options.

Add a test that device management restrictions (when mocked) correctly
fail the load with a new, appropriate error.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245979 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoUnreviewed, rolling out r245943.
ryanhaddad@apple.com [Fri, 31 May 2019 19:49:16 +0000 (19:49 +0000)]
Unreviewed, rolling out r245943.

Caused API test WKWebView.LocalStorageProcessSuspends to fail
on release bots.

Reverted changeset:

"WKWebsiteDataStore API fails to fetch web storage data for
non-persistent data store"
https://bugs.webkit.org/show_bug.cgi?id=198317
https://trac.webkit.org/changeset/245943

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245978 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoMove code that sets compositing paint phases into a single function
simon.fraser@apple.com [Fri, 31 May 2019 19:07:30 +0000 (19:07 +0000)]
Move code that sets compositing paint phases into a single function
https://bugs.webkit.org/show_bug.cgi?id=198420

Reviewed by Zalan Bujtas.

Source/WebCore:

To compute the correct paint phases for the various GraphicsLayers in a RenderLayerBacking,
we have to know which set of layers we've created (m_scrollContainerLayer, m_foregroundLayer etc).
So move the code that sets phases into a single function which is called when that
set of layers changes.

The test dumps paint phases for a stacking-context-composited scroller with a negative z-index child.

Also have GraphicsLayer::setPaintingPhase() trigger the necessary repaint when the paint phase changes.

Test: compositing/overflow/stacking-context-composited-scroller-with-foreground-paint-phases.html

* platform/graphics/GraphicsLayer.cpp:
(WebCore::GraphicsLayer::setPaintingPhase):
* platform/graphics/GraphicsLayer.h:
(WebCore::GraphicsLayer::setPaintingPhase): Deleted.
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateConfiguration):
(WebCore::RenderLayerBacking::updateForegroundLayer):
(WebCore::RenderLayerBacking::updateBackgroundLayer):
(WebCore::RenderLayerBacking::updateMaskingLayer):
(WebCore::RenderLayerBacking::updateScrollingLayers):
(WebCore::RenderLayerBacking::updatePaintingPhases):
(WebCore::RenderLayerBacking::paintingPhaseForPrimaryLayer const): Deleted.
* rendering/RenderLayerBacking.h:

LayoutTests:

* compositing/overflow/stacking-context-composited-scroller-with-foreground-paint-phases-expected.txt: Added.
* compositing/overflow/stacking-context-composited-scroller-with-foreground-paint-phases.html: Added.
* platform/ios-wk2/compositing/overflow/stacking-context-composited-scroller-with-foreground-paint-phases-expected.txt: Added.
* platform/mac-wk1/compositing/overflow/stacking-context-composited-scroller-with-foreground-paint-phases-expected.txt: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245977 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoWeb Inspector: Timelines: CPU: gray (?) and (x) should be white
drousso@apple.com [Fri, 31 May 2019 19:05:51 +0000 (19:05 +0000)]
Web Inspector: Timelines: CPU: gray (?) and (x) should be white
https://bugs.webkit.org/show_bug.cgi?id=198394

Reviewed by Joseph Pecoraro.

* UserInterface/Views/Variables.css:
(@media (prefers-color-scheme: dark)):
Remove the dark mode override for `--gray-foreground-color`, as the default `white` is a
better contrast.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245976 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoWebKitTestRunner sometimes freezes under -[NSWindow release]
ap@apple.com [Fri, 31 May 2019 18:56:36 +0000 (18:56 +0000)]
WebKitTestRunner sometimes freezes under -[NSWindow release]
https://bugs.webkit.org/show_bug.cgi?id=198422

Reviewed by Tim Horton.

The window remains key until it's out of the allWindows vector, and AppKit is not
happy about deallocating key windows. Fixed by updating allWindows in -close
instead of -release.

Added isMainFrame assertions in code that manipulates allWindows for a good measure.

* WebKitTestRunner/mac/WebKitTestRunnerWindow.mm:
(+[WebKitTestRunnerWindow _WTR_keyWindow]):
(-[WebKitTestRunnerWindow initWithContentRect:styleMask:backing:defer:]):
(-[WebKitTestRunnerWindow close]):
(-[WebKitTestRunnerWindow dealloc]):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245975 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[Async overflow scrolling] Flashes of missing layer backing store when scrolling...
simon.fraser@apple.com [Fri, 31 May 2019 18:55:14 +0000 (18:55 +0000)]
[Async overflow scrolling] Flashes of missing layer backing store when scrolling an overflow
https://bugs.webkit.org/show_bug.cgi?id=198363

Reviewed by Tim Horton.

Source/WebCore:

When the contents of an overflow:scroll did not use a tiled backing layer, GraphicsLayerCA::adjustCoverageRect()
would do no coverage rect expansion for scrolling, which meant that backing store attachment for
descendant layers would just use the visible rect from their scrolling ancestor which made it easy
to scroll into view a layer whose backing store was not yet attached.

Since this only affects non-tiled layers, re-use the generic TileController::adjustTileCoverageRect()
code by moving it down to GraphicsLayer, and call it for a scrolled contents layer which does not
have tiled backing.

Tested by fast/scrolling/ios/reconcile-layer-position-recursive.html

* platform/graphics/GraphicsLayer.cpp:
(WebCore::GraphicsLayer::adjustCoverageRectForMovement):
* platform/graphics/GraphicsLayer.h:
* platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::adjustCoverageRect const):
* platform/graphics/ca/TileController.cpp:
(WebCore::TileController::adjustTileCoverageRect):

LayoutTests:

Reset results.

* fast/scrolling/ios/reconcile-layer-position-recursive-expected.txt:
* tiled-drawing/tiled-backing-in-window-expected.txt:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245974 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[WHLSL] Make sure we properly emit code for "&*x"
sbarati@apple.com [Fri, 31 May 2019 18:16:45 +0000 (18:16 +0000)]
[WHLSL] Make sure we properly emit code for "&*x"
https://bugs.webkit.org/show_bug.cgi?id=198198

Reviewed by Myles C. Maxfield.

Source/WebCore:

I ran into this when trying to test zero-filling code, so let's just fix it.
The issue is that the property resolver ends up emitting code that looks like
"&*x". The semantics of this are such that it should result in just x.
However, we emitted Metal code in such a way where we'd end up with a pointer
to a temporary value. To fix this, DereferenceExpression will emit code that results
in a reference type. Then, MakePointerExpression will correctly return the
pointer backing that reference type.

Because of this, we also no longer need to pattern match the lhs of assignment
expressions since we will now be assigning to a reference type.

Test: webgpu/whlsl-store-to-property-updates-properly.html

* Modules/webgpu/WHLSL/Metal/WHLSLFunctionWriter.cpp:
(WebCore::WHLSL::Metal::FunctionDefinitionWriter::visit):

LayoutTests:

* webgpu/whlsl-store-to-property-updates-properly-expected.html: Added.
* webgpu/whlsl-store-to-property-updates-properly.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245973 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoSome WeakPtr cleanup
ggaren@apple.com [Fri, 31 May 2019 17:11:58 +0000 (17:11 +0000)]
Some WeakPtr cleanup
https://bugs.webkit.org/show_bug.cgi?id=198390

Reviewed by Chris Dumez.

Source/WebCore:

* Modules/indexeddb/shared/InProcessIDBServer.cpp:
(WebCore::storageQuotaManagerGetter): Dereference the weak pointer
directly instead of using a weak pointer to guard a raw pointer. It's
safer and more idiomatic to use weak pointers directly.

* Modules/indexeddb/shared/InProcessIDBServer.h: Use our base clase
weakPtrFactory() definition instead of writing our own. Declare
WeakValueType so we can dereference the weak pointer we create (above).

Source/WTF:

* wtf/WeakHashSet.h:
(WTF::HashTraits<Ref<WeakPtrImpl>>::isReleasedWeakValue):
(WTF::WeakHashSet::WeakHashSetConstIterator::WeakHashSetConstIterator):
Updated for rename to WeakPtrImpl.

(WTF::WeakHashSet::WeakHashSetConstIterator::get const): Updated for new
get() interface. Also, switched to iterator operator* to help clarify
the double dereference here.

(WTF::WeakHashSet::add):
(WTF::WeakHashSet::remove):
(WTF::WeakHashSet::contains const):
(WTF::WeakHashSet::computeSize const):
(WTF::HashTraits<Ref<WeakReference>>::isReleasedWeakValue): Deleted.
Updated for rename to WeakPtrImpl.

* wtf/WeakPtr.h:
(WTF::WeakPtrImpl::create):
(WTF::WeakPtrImpl::~WeakPtrImpl): Renamed WeakReference to WeakPtrImpl.
Now we don't need a comment explaining that this class is the backing
implementation of WeakPtr.

(WTF::WeakPtrImpl::get): Return the pointer type we stored, rather than
the pointer type requested by our client. It's a little too surprising
for a field to store one pointer type and load another.

(WTF::WeakPtrImpl::WeakPtrImpl): Fixed a theoretical type safety bug.
Make sure to store T::WeakValueType* instead of T*, since they might
not be the same pointer value. (In practice, T and T::WeakValueType*
are always the same type in this constructor because WeakPtrFactory
makes them so, but it's best not to depend on implementation details
across classes.)

(WTF::WeakPtr::get const): Updated for new get() interface.

(WTF::WeakPtr::operator bool const):
(WTF::WeakPtr::operator=):
(WTF::WeakPtr::clear):
(WTF::WeakPtr::WeakPtr): Updated for WeakPtrImpl rename.

(WTF::WeakPtrFactory::~WeakPtrFactory): Updated for WeakPtrImpl rename.

(WTF::WeakPtrFactory::createWeakPtr const): ASSERT that the passed-in
pointer is equal to the stored pointer. As a space optimization, we
require our client to remind us what we point to each time a weak
pointer is created -- but nothing guarantees that our client will do
this correctly.

(WTF::WeakPtrFactory::revokeAll): Updated for WeakPtrImpl rename.

(WTF::CanMakeWeakPtr::weakPtrFactory const):
(WTF::CanMakeWeakPtr::weakPtrFactory): Use idiomatic accessor naming.

(WTF::weak_ptr_impl_cast): Fixed a theoretical type safety bug.
Previously, if Base and Derived both inherited CanMakeWeakPtr, and
you casted WeakPtr<Base> to WeakPtr<Derived> (or vice versa), and
casting Base <-> Derived required pointer fixup, the previous
compile-time check would accept the cast, even though the stored pointer
would be wrong.

(WTF::WeakPtr<T>::WeakPtr):
(WTF::=):
(WTF::makeWeakPtr):
(WTF::WeakReference::create): Deleted.
(WTF::WeakReference::~WeakReference): Deleted.
(WTF::WeakReference::get const): Deleted.
(WTF::WeakReference::operator bool const): Deleted.
(WTF::WeakReference::clear): Deleted.
(WTF::WeakReference::WeakReference): Deleted.
(WTF::weak_reference_cast): Deleted. Updated for rename to WeakPtrImpl.

Don't export WeakPtrImpl because it's an implmenetation detail and
it shouldn't be easy to use outside WTF.

Tools:

* TestWebKitAPI/Tests/WTF/WeakPtr.cpp: Updated for rename.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245972 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[LFC][IFC] InlineFormattingContext::LineLayout::processInlineItemsForLine should...
zalan@apple.com [Fri, 31 May 2019 17:05:33 +0000 (17:05 +0000)]
[LFC][IFC] InlineFormattingContext::LineLayout::processInlineItemsForLine should create and destroy Line.
https://bugs.webkit.org/show_bug.cgi?id=198419
<rdar://problem/51300837>

Reviewed by Antti Koivisto.

This is in preparation for using "createInlineRunsForLine" logic when computing preferred width.
1. Line object is now constructed and destroyed in processInlineItemsForLine (caller does not need to know about Line).
2. processInlineItemsForLine returns a Line::Content instance.

* layout/inlineformatting/InlineFormattingContext.h:
* layout/inlineformatting/InlineFormattingContextLineLayout.cpp:
(WebCore::Layout::InlineFormattingContext::LineLayout::LineInput::LineInput):
(WebCore::Layout::constructLine):
(WebCore::Layout::InlineFormattingContext::LineLayout::processInlineItemsForLine const):
(WebCore::Layout::InlineFormattingContext::LineLayout::layout const):
(WebCore::Layout::InlineFormattingContext::LineLayout::createDisplayRuns const):
(WebCore::Layout::InlineFormattingContext::LineLayout::createLine const): Deleted.
(WebCore::Layout::InlineFormattingContext::LineLayout::createInlineRunsForLine const): Deleted.
(WebCore::Layout::InlineFormattingContext::LineLayout::processInlineRuns const): Deleted.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245970 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months ago[CMake] Add WebKit::WTF target
don.olmstead@sony.com [Fri, 31 May 2019 16:56:03 +0000 (16:56 +0000)]
[CMake] Add WebKit::WTF target
https://bugs.webkit.org/show_bug.cgi?id=198400

Reviewed by Konstantin Tokarev.

Source/JavaScriptCore:

Use the WebKit::WTF target.

* CMakeLists.txt:
* shell/CMakeLists.txt:

Source/WebCore:

Use the WebKit::WTF target.

* PlatformWin.cmake:

Source/WebDriver:

Use the WebKit::WTF target.

* CMakeLists.txt:

Source/WebKitLegacy:

Use the WebKit::WTF target.

* PlatformWin.cmake:

Source/WebKitLegacy/win:

Use the WebKit::WTF target.

* WebKitQuartzCoreAdditions/CMakeLists.txt:

Source/WTF:

Create the WebKit::WTF target and use that to propagate headers. Use
WEBKIT_COPY_FILES instead of WEBKIT_MAKE_FORWARDING_HEADERS.

* wtf/CMakeLists.txt:

Tools:

Use the WebKit::WTF target.

* DumpRenderTree/CMakeLists.txt:
* DumpRenderTree/PlatformWin.cmake:
* MiniBrowser/win/CMakeLists.txt:
* TestWebKitAPI/CMakeLists.txt:
* TestWebKitAPI/PlatformGTK.cmake:
* TestWebKitAPI/PlatformWPE.cmake:
* TestWebKitAPI/PlatformWin.cmake:
* WebKitTestRunner/PlatformGTK.cmake:
* WebKitTestRunner/PlatformWin.cmake:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245968 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 months agoVersioning.
kocsen_chung@apple.com [Fri, 31 May 2019 16:48:09 +0000 (16:48 +0000)]
Versioning.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@245967 268f45cc-cd09-0410-ab3c-d52691b4dbfc