WebKit-https.git
5 months agoUpdate device orientation & motion permission native SPI as per latest proposal
cdumez@apple.com [Mon, 11 Mar 2019 23:14:20 +0000 (23:14 +0000)]
Update device orientation & motion permission native SPI as per latest proposal
https://bugs.webkit.org/show_bug.cgi?id=195567

Reviewed by Youenn Fablet.

Source/WebCore:

* dom/DeviceOrientationAndMotionAccessController.cpp:
(WebCore::DeviceOrientationAndMotionAccessController::shouldAllowAccess):
* page/ChromeClient.h:

Source/WebKit:

The native SPI is now:
+- (void)_webView:(WKWebView *)webView shouldAllowDeviceOrientationAndMotionAccessRequestedByFrame:(WKFrameInfo *)frameInfo decisionHandler:(void (^)(BOOL))decisionHandler;

* UIProcess/API/APIUIClient.h:
(API::UIClient::shouldAllowDeviceOrientationAndMotionAccess):
* UIProcess/API/C/WKPage.cpp:
(WKPageSetPageUIClient):
* UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
* UIProcess/Cocoa/UIDelegate.h:
* UIProcess/Cocoa/UIDelegate.mm:
(WebKit::UIDelegate::setDelegate):
(WebKit::UIDelegate::UIClient::shouldAllowDeviceOrientationAndMotionAccess):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::requestDeviceOrientationAndMotionAccess):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::shouldAllowDeviceOrientationAndMotionAccess):
* WebProcess/WebCoreSupport/WebChromeClient.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::shouldAllowDeviceOrientationAndMotionAccess):
* WebProcess/WebPage/WebPage.h:

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

5 months agoWeb Inspector: Editing Timelines shows two CPU Timelines
commit-queue@webkit.org [Mon, 11 Mar 2019 23:08:29 +0000 (23:08 +0000)]
Web Inspector: Editing Timelines shows two CPU Timelines
https://bugs.webkit.org/show_bug.cgi?id=195578

Patch by Joseph Pecoraro <pecoraro@apple.com> on 2019-03-11
Reviewed by Devin Rousso.

* UserInterface/Controllers/TimelineManager.js:
(WI.TimelineManager.availableTimelineTypes):
The CPU Instrument is already in the default list.

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

5 months ago[macOS] Dispatching reentrant "contextmenu" events may cause crashes
wenson_hsieh@apple.com [Mon, 11 Mar 2019 22:46:32 +0000 (22:46 +0000)]
[macOS] Dispatching reentrant "contextmenu" events may cause crashes
https://bugs.webkit.org/show_bug.cgi?id=195571
<rdar://problem/48086046>

Reviewed by Andy Estes.

Source/WebCore:

Make ContextMenuController::handleContextMenuEvent robust against reentrancy by guarding it with a boolean flag.
As demonstrated in the test case, it is currently possible to force WebKit into a bad state by dispatching a
synthetic "contextmenu" event from within the scope of one of the "before(copy|cut|paste)" events triggered as
a result of handling a context menu event.

Test: fast/events/contextmenu-reentrancy-crash.html

* page/ContextMenuController.cpp:
(WebCore::ContextMenuController::handleContextMenuEvent):
* page/ContextMenuController.h:

LayoutTests:

Add a test to verify that triggering reentrant "contextmenu" events from script does not cause a crash.

* fast/events/contextmenu-reentrancy-crash-expected.txt: Added.
* fast/events/contextmenu-reentrancy-crash.html: Added.

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

5 months ago[Apple Pay] Use PKPaymentAuthorizationController to present the Apple Pay UI remotely...
aestes@apple.com [Mon, 11 Mar 2019 22:42:09 +0000 (22:42 +0000)]
[Apple Pay] Use PKPaymentAuthorizationController to present the Apple Pay UI remotely from the Networking service on iOS
https://bugs.webkit.org/show_bug.cgi?id=195530
<rdar://problem/48747164>

Reviewed by Alex Christensen.

Source/WebCore:

* Modules/applepay/PaymentCoordinatorClient.h: Defined isWebPaymentCoordinator.
* page/Settings.yaml: Defined the applePayRemoteUIEnabled setting and reordered the other
Apple Pay settings.

Source/WebCore/PAL:

* pal/cocoa/PassKitSoftLink.h: Soft-linked PKPaymentAuthorizationController on iOS.
* pal/cocoa/PassKitSoftLink.mm: Ditto.
* pal/spi/cocoa/PassKitSPI.h: Declared PKPaymentAuthorizationControllerPrivateDelegate and
related SPI.

Source/WebKit:

* Configurations/Network-iOS.entitlements: Added the 'com.apple.payment.all-access'
entitlement and reordered the others.

* NetworkProcess/NetworkConnectionToWebProcess.cpp:
(WebKit::NetworkConnectionToWebProcess::didReceiveMessage): Forwarded
WebPaymentCoordinatorProxy messages to the payment coordinator.
(WebKit::NetworkConnectionToWebProcess::didReceiveSyncMessage): Ditto.
(WebKit::NetworkConnectionToWebProcess::didClose): Set m_paymentCoordinator to nullptr.
* NetworkProcess/NetworkConnectionToWebProcess.h: Inherited from
WebPaymentCoordinatorProxy::Client and added a unique_ptr<WebPaymentCoordinatorProxy> member.

* NetworkProcess/cocoa/NetworkSessionCocoa.h: Declared getters for source application bundle
and secondary identifiers, and CTDataConnectionServiceType on iOS.
* NetworkProcess/cocoa/NetworkSessionCocoa.mm:
(WebKit::NetworkSessionCocoa::sourceApplicationBundleIdentifier const): Defined getter.
(WebKit::NetworkSessionCocoa::sourceApplicationSecondaryIdentifier const): Ditto.
(WebKit::NetworkSessionCocoa::ctDataConnectionServiceType const): Ditto.
(WebKit::NetworkSessionCocoa::NetworkSessionCocoa): Initialized
m_sourceApplicationBundleIdentifier and m_sourceApplicationSecondaryIdentifier with
corresponding NetworkSessionCreationParameters.

* NetworkProcess/ios/NetworkConnectionToWebProcessIOS.mm: Added.
(WebKit::NetworkConnectionToWebProcess::paymentCoordinator): Added. Returns
m_paymentCoordinator after lazily initializing it.
(WebKit::NetworkConnectionToWebProcess::paymentCoordinatorConnection): Added. Returns the
connection to the web process.
(WebKit::NetworkConnectionToWebProcess::paymentCoordinatorPresentingViewController): Added.
Returns nil.
(WebKit::NetworkConnectionToWebProcess::paymentCoordinatorCTDataConnectionServiceType):
Added. Returns the value from the network session identified by sessionID.
(WebKit::NetworkConnectionToWebProcess::paymentCoordinatorSourceApplicationBundleIdentifier):
Ditto.
(WebKit::NetworkConnectionToWebProcess::paymentCoordinatorSourceApplicationSecondaryIdentifier):
Ditto.
(WebKit::NetworkConnectionToWebProcess::paymentCoordinatorAuthorizationPresenter): Added.
Returns a new PaymentAuthorizationController.
(WebKit::NetworkConnectionToWebProcess::paymentCoordinatorAddMessageReceiver): Added empty
definition. NetworkConnectionToWebProcess explicitly forwards WebPaymentCoordinatorProxy
messages to its payment coordinator, so there's no need to register with a MessageReceiverMap.
(WebKit::NetworkConnectionToWebProcess::paymentCoordinatorRemoveMessageReceiver): Ditto.

* Platform/ios/PaymentAuthorizationController.h: Added. Declares a
PaymentAuthorizationPresenter subclass based on PKPaymentAuthorizationController.
* Platform/ios/PaymentAuthorizationController.mm: Added.
(-[WKPaymentAuthorizationControllerDelegate initWithRequest:presenter:]):
Initialized WKPaymentAuthorizationDelegate with request and presenter.
(-[WKPaymentAuthorizationControllerDelegate paymentAuthorizationControllerDidFinish:]):
Forwarded call to WKPaymentAuthorizationDelegate.
(-[WKPaymentAuthorizationControllerDelegate paymentAuthorizationController:didAuthorizePayment:handler:]):
Ditto.
(-[WKPaymentAuthorizationControllerDelegate paymentAuthorizationController:didSelectShippingMethod:handler:]):
Ditto.
(-[WKPaymentAuthorizationControllerDelegate paymentAuthorizationController:didSelectShippingContact:handler:]):
Ditto.
(-[WKPaymentAuthorizationControllerDelegate paymentAuthorizationController:didSelectPaymentMethod:handler:]):
Ditto.
(-[WKPaymentAuthorizationControllerDelegate paymentAuthorizationController:willFinishWithError:]):
Ditto.
(-[WKPaymentAuthorizationControllerDelegate paymentAuthorizationController:didRequestMerchantSession:]):
Ditto.
(WebKit::PaymentAuthorizationController::PaymentAuthorizationController):
Initialized m_controller with a new PKPaymentAuthorizationController and m_delegate with a
new WKPaymentAuthorizationControllerDelegate.
(WebKit::PaymentAuthorizationController::platformDelegate): Returned m_delegate.
(WebKit::PaymentAuthorizationController::dismiss): Dismissed the controller, set its
delegates to nil, set m_controller to nil, invalidated the delegate, and set m_delegate to
nil.
(WebKit::PaymentAuthorizationController::present): Called -presentWithCompletion: on the
controller, forwarding the passed-in completion handler.
* Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb: Allowed PassKit to look up
the "com.apple.passd.in-app-payment" and "com.apple.passd.library" service endpoints.

* Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:
(WebKit::WebPaymentCoordinatorProxy::WebPaymentCoordinatorProxy): Changed to call
paymentCoordinatorAddMessageReceiver.
(WebKit::WebPaymentCoordinatorProxy::~WebPaymentCoordinatorProxy): Changed to call
paymentCoordinatorRemoveMessageReceiver.
(WebKit::WebPaymentCoordinatorProxy::messageSenderDestinationID const): Deleted.
(WebKit::WebPaymentCoordinatorProxy::canMakePaymentsWithActiveCard): Passed sessionID to
platformCanMakePaymentsWithActiveCard.
(WebKit::WebPaymentCoordinatorProxy::showPaymentUI): Stored destinationID and passed
sessionID to platformShowPaymentUI.
(WebKit::WebPaymentCoordinatorProxy::cancelPaymentSession): Changed to account for new
behavior of didCancelPaymentSession.
(WebKit::WebPaymentCoordinatorProxy::didCancelPaymentSession): Changed to call hidePaymentUI.
(WebKit::WebPaymentCoordinatorProxy::presenterDidFinish): Changed to only call hidePaymentUI
when didReachFinalState is true, since didCancelPaymentSession is called otherwise.
(WebKit::WebPaymentCoordinatorProxy::didReachFinalState): Cleared m_destinationID.
* Shared/ApplePay/WebPaymentCoordinatorProxy.h: Added m_destionationID member.
* Shared/ApplePay/WebPaymentCoordinatorProxy.messages.in: Changed
CanMakePaymentsWithActiveCard and ShowPaymentUI messages to take destinationID and sessionID
arguments.

* Shared/ApplePay/cocoa/WebPaymentCoordinatorProxyCocoa.mm:
(WebKit::WebPaymentCoordinatorProxy::platformCanMakePaymentsWithActiveCard): Passed
sessionID to paymentCoordinatorSourceApplicationSecondaryIdentifier.
(WebKit::WebPaymentCoordinatorProxy::platformPaymentRequest): Passed sessionID to various
m_client call sites.

* Shared/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm:
(WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI): Passed sessionID to
platformPaymentRequest.
(WebKit::WebPaymentCoordinatorProxy::hidePaymentUI): Null-checked m_authorizationPresenter
before calling dismiss.

* Shared/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm:
(WebKit::WebPaymentCoordinatorProxy::platformShowPaymentUI): Passed sessionID to
platformPaymentRequest.
(WebKit::WebPaymentCoordinatorProxy::hidePaymentUI): Null-checked m_authorizationPresenter
before calling dismiss.

* Shared/WebPreferences.yaml: Added ApplePayRemoteUIEnabled as an internal preference.

* SourcesCocoa.txt: Added NetworkConnectionToWebProcessIOS.mm and
PaymentAuthorizationController.mm.

* UIProcess/AuxiliaryProcessProxy.h:
(WebKit::AuxiliaryProcessProxy::messageReceiverMap): Deleted.

* UIProcess/Cocoa/WebPageProxyCocoa.mm:
(WebKit::WebPageProxy::paymentCoordinatorConnection): Moved from WebPageProxy.cpp.
(WebKit::WebPageProxy::paymentCoordinatorSourceApplicationBundleIdentifier): Ditto.
(WebKit::WebPageProxy::paymentCoordinatorSourceApplicationSecondaryIdentifier): Ditto.
(WebKit::WebPageProxy::paymentCoordinatorAddMessageReceiver): Ditto.
(WebKit::WebPageProxy::paymentCoordinatorRemoveMessageReceiver): Ditto.

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::paymentCoordinatorConnection): Moved to WebPageProxyCocoa.mm.
(WebKit::WebPageProxy::paymentCoordinatorMessageReceiver): Ditto.
(WebKit::WebPageProxy::paymentCoordinatorSourceApplicationBundleIdentifier): Ditto.
(WebKit::WebPageProxy::paymentCoordinatorSourceApplicationSecondaryIdentifier): Ditto.
(WebKit::WebPageProxy::paymentCoordinatorDestinationID): Ditto.
* UIProcess/WebPageProxy.h:

* UIProcess/ios/WebPageProxyIOS.mm:
(WebKit::WebPageProxy::paymentCoordinatorCTDataConnectionServiceType): Asserted that
sessionID equals the website data store's sessionID.

* WebKit.xcodeproj/project.pbxproj:

* WebProcess/ApplePay/WebPaymentCoordinator.cpp:
(WebKit::WebPaymentCoordinator::networkProcessConnectionClosed): Added. Cancels the current
session if Apple Pay Remote UI is enabled and the network process connection closes.
(WebKit::WebPaymentCoordinator::availablePaymentNetworks): Changed to account for
WebPaymentCoordinator being an IPC::MessageSender.
(WebKit::WebPaymentCoordinator::canMakePayments): Ditto.
(WebKit::WebPaymentCoordinator::canMakePaymentsWithActiveCard): Ditto.
(WebKit::WebPaymentCoordinator::openPaymentSetup): Ditto.
(WebKit::WebPaymentCoordinator::showPaymentUI): Ditto.
(WebKit::WebPaymentCoordinator::completeMerchantValidation): Ditto.
(WebKit::WebPaymentCoordinator::completeShippingMethodSelection): Ditto.
(WebKit::WebPaymentCoordinator::completeShippingContactSelection): Ditto.
(WebKit::WebPaymentCoordinator::completePaymentMethodSelection): Ditto.
(WebKit::WebPaymentCoordinator::completePaymentSession): Ditto.
(WebKit::WebPaymentCoordinator::abortPaymentSession): Ditto.
(WebKit::WebPaymentCoordinator::cancelPaymentSession): Ditto.
(WebKit::WebPaymentCoordinator::messageSenderConnection const): Added. Returns a connection
to the network process if Apple Pay Remote UI is enabled. Otherwise, returned the web
process's parent connection.
(WebKit::WebPaymentCoordinator::messageSenderDestinationID const): Added. Returns the web
page's ID.
(WebKit::WebPaymentCoordinator::remoteUIEnabled const): Added. Calls Settings::applePayRemoteUIEnabled.
* WebProcess/ApplePay/WebPaymentCoordinator.h: Inherited from IPC::MessageSender.

* WebProcess/Network/NetworkProcessConnection.cpp:
(WebKit::NetworkProcessConnection::didReceiveMessage): Forwarded WebPaymentCoordinator
messages to the payment coordinator of the web page matching the decoder's destination ID.
(WebKit::NetworkProcessConnection::didReceiveSyncMessage): Ditto for sync messages.

* WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
(WebKit::WebPage::paymentCoordinator): Added a payment coordinator getter.
* WebProcess/WebPage/WebPage.h: Ditto.

* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::networkProcessConnectionClosed): Called
WebPaymentCoordinator::networkProcessConnectionClosed when the network process connection
closes.

Source/WTF:

* wtf/FeatureDefines.h: Defined ENABLE_APPLE_PAY_REMOTE_UI.

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

5 months ago[JSC] Make StaticStringImpl & StaticSymbolImpl actually static
ysuzuki@apple.com [Mon, 11 Mar 2019 22:37:43 +0000 (22:37 +0000)]
[JSC] Make StaticStringImpl & StaticSymbolImpl actually static
https://bugs.webkit.org/show_bug.cgi?id=194212

Reviewed by Mark Lam.

Avoid mutation onto refcounts if `isStatic()` returns true so that the content of StaticStringImpl never gets modified.

* wtf/text/StringImpl.h:
(WTF::StringImpl::ref):
(WTF::StringImpl::deref):

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

5 months agoSoft linking to Reveal framework should be optional
achristensen@apple.com [Mon, 11 Mar 2019 22:31:14 +0000 (22:31 +0000)]
Soft linking to Reveal framework should be optional
https://bugs.webkit.org/show_bug.cgi?id=195576
<rdar://problem/46822452>

Reviewed by Megan Gardner.

Source/WebCore:

Systems exist with ENABLE(REVEAL) true and the Reveal framework does not exist.

* editing/cocoa/DictionaryLookup.mm:
(WebCore::showPopupOrCreateAnimationController):

Source/WebCore/PAL:

* pal/spi/cocoa/RevealSPI.h:

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

5 months ago[iOS] Block access to backboardd service
pvollan@apple.com [Mon, 11 Mar 2019 22:15:51 +0000 (22:15 +0000)]
[iOS] Block access to backboardd service
https://bugs.webkit.org/show_bug.cgi?id=195484

Reviewed by Brent Fulgham.

This patch is addressing blocking the backboardd service "com.apple.backboard.hid.services". Getting the
backlight level in the WebContent process will initiate a connection with this service. To be able to
block the service, the backlight level is queried in the UI process and sent to the WebContent process
when the WebContent process is started, and when the backlight level is changed. On the WebContent side,
the method getting the backlight level is swizzled to return the value sent from the UI process.

* Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
* UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::WebProcessPool::displayBrightness):
(WebKit::WebProcessPool::backlightLevelDidChangeCallback):
(WebKit::WebProcessPool::registerNotificationObservers):
(WebKit::WebProcessPool::unregisterNotificationObservers):
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::initializeNewWebProcess):
* UIProcess/WebProcessPool.h:
* WebProcess/WebProcess.h:
* WebProcess/WebProcess.messages.in:
* WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::currentBacklightLevel):
(WebKit::WebProcess::backlightLevelDidChange):

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

5 months agoREGRESSION: Layout Test media/media-fullscreen-return-to-inline.html is a flaky timeout
tsavell@apple.com [Mon, 11 Mar 2019 22:12:28 +0000 (22:12 +0000)]
REGRESSION: Layout Test media/media-fullscreen-return-to-inline.html is a flaky timeout
https://bugs.webkit.org/show_bug.cgi?id=193399

Unreviewed test gardening.

* platform/mac/TestExpectations:

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

5 months agoWeb Inspector: DOMDebugger: protocol error on first open
drousso@apple.com [Mon, 11 Mar 2019 21:56:32 +0000 (21:56 +0000)]
Web Inspector: DOMDebugger: protocol error on first open
https://bugs.webkit.org/show_bug.cgi?id=195248
<rdar://problem/48538465>

Reviewed by Joseph Pecoraro.

Don't try to call `DOMDebugger` commands until a target has been initialized.
Still attempt to resolve DOM breakpoints whenever the main resource/frame changes.

* UserInterface/Controllers/DOMDebuggerManager.js:
(WI.DOMDebuggerManager):
(WI.DOMDebuggerManager.prototype.initializeTarget): Added.
(WI.DOMDebuggerManager.supportsEventBreakpoints):
(WI.DOMDebuggerManager.prototype.get supported):
(WI.DOMDebuggerManager.prototype.addDOMBreakpoint):
(WI.DOMDebuggerManager.prototype.removeDOMBreakpoint):
(WI.DOMDebuggerManager.prototype.addEventBreakpoint):
(WI.DOMDebuggerManager.prototype.removeEventBreakpoint):
(WI.DOMDebuggerManager.prototype.addURLBreakpoint):
(WI.DOMDebuggerManager.prototype.removeURLBreakpoint):
(WI.DOMDebuggerManager.prototype._speculativelyResolveDOMBreakpointsForURL): Added.
(WI.DOMDebuggerManager.prototype._resolveDOMBreakpoint):
(WI.DOMDebuggerManager.prototype._updateDOMBreakpoint):
(WI.DOMDebuggerManager.prototype._updateEventBreakpoint):
(WI.DOMDebuggerManager.prototype._updateURLBreakpoint):
(WI.DOMDebuggerManager.prototype._saveDOMBreakpoints):
(WI.DOMDebuggerManager.prototype._handleDOMBreakpointDisabledStateChanged):
(WI.DOMDebuggerManager.prototype._handleEventBreakpointDisabledStateChanged):
(WI.DOMDebuggerManager.prototype._handleURLBreakpointDisabledStateChanged):
(WI.DOMDebuggerManager.prototype._mainFrameDidChange):
(WI.DOMDebuggerManager.prototype._mainResourceDidChange):
(WI.DOMDebuggerManager.prototype.removeEventBreakpoint.breakpointRemoved): Deleted.
(WI.DOMDebuggerManager.prototype._speculativelyResolveBreakpoints): Deleted.
(WI.DOMDebuggerManager.prototype._updateDOMBreakpoint.breakpointUpdated): Deleted.
(WI.DOMDebuggerManager.prototype._resolveEventBreakpoint): Deleted.
(WI.DOMDebuggerManager.prototype._resolveURLBreakpoint): Deleted.

* UserInterface/Base/Multimap.js: Added.
(Multimap):
(Multimap.prototype.get):
(Multimap.prototype.add):
(Multimap.prototype.delete):
(Multimap.prototype.clear):
(Multimap.prototype.keys):
(Multimap.prototype.*values):
(Multimap.prototype.*[Symbol.iterator]):
(Multimap.prototype.toJSON):
* .eslintrc:
* UserInterface/Main.html:
* UserInterface/Test.html:
Helper data structure for managing Maps of Sets (e.g. all DOM breakpoints for a URL).

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

5 months ago[JSC] Reduce # of structures in JSGlobalObject initialization
ysuzuki@apple.com [Mon, 11 Mar 2019 21:55:00 +0000 (21:55 +0000)]
[JSC] Reduce # of structures in JSGlobalObject initialization
https://bugs.webkit.org/show_bug.cgi?id=195498

Reviewed by Darin Adler.

Source/JavaScriptCore:

This patch reduces # of structure allocations in JSGlobalObject initialization. Now it becomes 141, it fits in one
MarkedBlock and this patch drops one MarkedBlock used for Structure previously.

* CMakeLists.txt:
* DerivedSources-output.xcfilelist:
* DerivedSources.make:
* JavaScriptCore.xcodeproj/project.pbxproj:
* runtime/ArrayIteratorPrototype.cpp:
(JSC::ArrayIteratorPrototype::finishCreation): ArrayIteratorPrototype, MapIteratorPrototype, and StringIteratorPrototype's
"next" properties are referenced by JSGlobalObject::init, and it causes reification of the lazy "next" property and structure
transition anyway. So we should put it eagerly "without-transition" configuration to avoid one structure transition.

* runtime/ArrayPrototype.cpp:
(JSC::ArrayPrototype::finishCreation): @@unscopable object's structure should be dictionary because (1) it is used as a dictionary
in with-scope-resolution and (2) since with-scope-resolution is C++ runtime function anyway, non-dictionary structure does not add
any performance benefit. This change saves several structures that are not useful.

* runtime/ClonedArguments.cpp:
(JSC::ClonedArguments::createStructure): Bake CloneArguments's structure with 'without-transition' manner.

* runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::init): Previously we are always call resetProtoype at the end of JSGlobalObject::init. But it is not necessary
since we do not change [[Prototype]] of JSGlobalObject. All we want is (1) fixupPrototypeChainWithObjectPrototype's operation and (2) setGlobalThis
operation. Since setGlobalThis part is done in JSGlobalObject::finishCreation, fixupPrototypeChainWithObjectPrototype is only the thing
we should do here.

(JSC::JSGlobalObject::fixupPrototypeChainWithObjectPrototype):
(JSC::JSGlobalObject::resetPrototype): If the [[Prototype]] is the same to the current [[Prototype]], we can skip the operation.

* runtime/JSGlobalObject.h:
* runtime/MapIteratorPrototype.cpp:
(JSC::MapIteratorPrototype::finishCreation):
* runtime/NullGetterFunction.h:
* runtime/NullSetterFunction.h: Since structures of them are allocated per JSGlobalObject and they are per-JSGlobalObject,
we can use without-transition property addition.

* runtime/StringIteratorPrototype.cpp:
(JSC::StringIteratorPrototype::finishCreation):
* runtime/VM.cpp:
(JSC::VM::VM):
(JSC::VM::setIteratorStructureSlow):
(JSC::VM::mapIteratorStructureSlow): These structures are only used in WebCore's main thread.
* runtime/VM.h:
(JSC::VM::setIteratorStructure):
(JSC::VM::mapIteratorStructure):

Source/WebCore:

* bindings/js/SerializedScriptValue.cpp:
(WebCore::CloneSerializer::serialize):

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

5 months agoWeb Inspector: CPU Usage Timeline - Enable by default
joepeck@webkit.org [Mon, 11 Mar 2019 21:26:54 +0000 (21:26 +0000)]
Web Inspector: CPU Usage Timeline - Enable by default
https://bugs.webkit.org/show_bug.cgi?id=195471

Reviewed by Devin Rousso.

Remove experimental setting and include the CPU timeline in the
default set of timelines.

* UserInterface/Base/Setting.js:
* UserInterface/Controllers/TimelineManager.js:
(WI.TimelineManager.defaultTimelineTypes):
* UserInterface/Main.html:
* UserInterface/Views/CPUTimelineOverviewGraph.css:
(.timeline-overview-graph.cpu > .stacked-column-chart > svg > rect.selected):
(.timeline-overview-graph.cpu > .column-chart > svg > rect): Deleted.
(body[dir=rtl] .timeline-overview-graph.cpu > .column-chart): Deleted.
* UserInterface/Views/CPUTimelineOverviewGraph.js:
(WI.CPUTimelineOverviewGraph):
(WI.CPUTimelineOverviewGraph.prototype.layout):
* UserInterface/Views/ContentView.js:
(WI.ContentView.createFromRepresentedObject):
* UserInterface/Views/LegacyCPUTimelineView.css: Removed.
* UserInterface/Views/LegacyCPUTimelineView.js: Removed.
* UserInterface/Views/SettingsTabContentView.js:
(WI.SettingsTabContentView.prototype._createExperimentalSettingsView):
* UserInterface/Views/Variables.css:
(:root):

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

5 months agoWeb Inspector: CPU Usage Timeline - Better Thread chart layout values
joepeck@webkit.org [Mon, 11 Mar 2019 21:26:50 +0000 (21:26 +0000)]
Web Inspector: CPU Usage Timeline - Better Thread chart layout values
https://bugs.webkit.org/show_bug.cgi?id=195547

Reviewed by Devin Rousso.

* UserInterface/Views/CPUTimelineView.js:
(WI.CPUTimelineView.prototype.layout.bestThreadLayoutMax):
(WI.CPUTimelineView.prototype.layout.layoutView):
(WI.CPUTimelineView.prototype._showGraphOverlay):
Include a separate layoutMax for the combined view and a thread layoutMax
for the thread groups.

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

5 months agoWeb Inspector: CPU Usage Timeline - Add legend and graph hover effects
joepeck@webkit.org [Mon, 11 Mar 2019 21:26:47 +0000 (21:26 +0000)]
Web Inspector: CPU Usage Timeline - Add legend and graph hover effects
https://bugs.webkit.org/show_bug.cgi?id=195390

Reviewed by Devin Rousso.

* Localizations/en.lproj/localizedStrings.js:
New strings for the legends.

* UserInterface/Main.html:
Combined files.

* UserInterface/Views/Variables.css:
(:root):
(@media (prefers-color-scheme: dark)):
Tweaked colors, including individual stroke and fill colors for each CPU section.

* UserInterface/Views/CPUTimelineOverviewGraph.css:
(.timeline-overview-graph.cpu > .stacked-column-chart > svg > rect.total-usage):
(.timeline-overview-graph.cpu > .stacked-column-chart > svg > rect.main-thread-usage):
(.timeline-overview-graph.cpu > .stacked-column-chart > svg > rect.worker-thread-usage):
Updated colors.

* UserInterface/Views/CPUUsageCombinedView.css: Renamed from Source/WebInspectorUI/UserInterface/Views/CPUUsageStackedView.css.
(.cpu-usage-combined-view > .details > .legend-container):
(.cpu-usage-combined-view > .details > .legend-container > .row):
(.cpu-usage-combined-view > .details > .legend-container > .row + .row):
(.cpu-usage-combined-view > .details > .legend-container > .row > .swatch):
* UserInterface/Views/CPUUsageCombinedView.js: Renamed from Source/WebInspectorUI/UserInterface/Views/CPUUsageStackedView.js.
(WI.CPUUsageCombinedView.appendLegendRow):
(WI.CPUUsageCombinedView):
(WI.CPUUsageCombinedView.prototype.get graphElement):
(WI.CPUUsageCombinedView.prototype.get chart):
(WI.CPUUsageCombinedView.prototype.get rangeChart):
(WI.CPUUsageCombinedView.prototype.clear):
(WI.CPUUsageCombinedView.prototype.updateChart):
(WI.CPUUsageCombinedView.prototype.updateMainThreadIndicator):
(WI.CPUUsageCombinedView.prototype.clearLegend):
(WI.CPUUsageCombinedView.prototype.updateLegend):
(WI.CPUUsageCombinedView.prototype._updateDetails):
* UserInterface/Views/CPUUsageIndicatorView.css: Removed.
* UserInterface/Views/CPUUsageIndicatorView.js: Removed.
Combined the Indicator and StackedAreaChart into a single view
that share a left details section.

* UserInterface/Views/CPUUsageView.js:
(WI.CPUUsageView):
(WI.CPUUsageView.prototype.get graphElement):
(WI.CPUUsageView.prototype.clear):
(WI.CPUUsageView.prototype.updateChart):
(WI.CPUUsageView.prototype.clearLegend):
(WI.CPUUsageView.prototype.updateLegend):
(WI.CPUUsageView.prototype._updateDetails):
Include a legend in the left details section.

* UserInterface/Views/AreaChart.js:
(WI.AreaChart):
(WI.AreaChart.prototype.addPointMarker):
(WI.AreaChart.prototype.clearPointMarkers):
(WI.AreaChart.prototype.clear):
(WI.AreaChart.prototype.layout):
* UserInterface/Views/StackedAreaChart.js:
(WI.StackedAreaChart):
(WI.StackedAreaChart.prototype.addPointMarker):
(WI.StackedAreaChart.prototype.clearPointMarkers):
(WI.StackedAreaChart.prototype.clear):
(WI.StackedAreaChart.prototype.layout):
Add point markers for the area charts.

* UserInterface/Views/CPUTimelineView.css:
* UserInterface/Views/CPUTimelineView.js:
(WI.CPUTimelineView):
(WI.CPUTimelineView.prototype.get cpuUsageViewHeight):
(WI.CPUTimelineView.prototype.clear):
(WI.CPUTimelineView.prototype.initialLayout.appendLegendRow):
(WI.CPUTimelineView.prototype.initialLayout):
(WI.CPUTimelineView.prototype.layout):
(WI.CPUTimelineView.prototype._graphPositionForMouseEvent):
(WI.CPUTimelineView.prototype._handleMouseClick):
(WI.CPUTimelineView.prototype._handleGraphMouseMove):
(WI.CPUTimelineView.prototype._showGraphOverlayNearTo):
(WI.CPUTimelineView.prototype._updateGraphOverlay):
(WI.CPUTimelineView.prototype._showGraphOverlay.xScale):
(WI.CPUTimelineView.prototype._showGraphOverlay.yScale):
(WI.CPUTimelineView.prototype._showGraphOverlay.addOverlayPoint):
(WI.CPUTimelineView.prototype._showGraphOverlay):
(WI.CPUTimelineView.prototype._clearOverlayMarkers.clearGraphOverlayElement):
(WI.CPUTimelineView.prototype._clearOverlayMarkers):
(WI.CPUTimelineView.prototype._hideGraphOverlay):
Include graph overlay markers.

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

5 months agoRemove obsolete runtime flag for StorageAccess API Prompt
bfulgham@apple.com [Mon, 11 Mar 2019 21:19:11 +0000 (21:19 +0000)]
Remove obsolete runtime flag for StorageAccess API Prompt
https://bugs.webkit.org/show_bug.cgi?id=195564
<rdar://problem/37279014>

Reviewed by Chris Dumez.

This bug tracks the work of removing the obsolete flag that had been used to optionally
prevent display of the StorageAccess API prompt. We have since shipped the final version
of this feature with an always-on prompt, and should have removed this runtime flag.

No test changes because this has no change in behavior. Tests already assume the prompt
behavior, and did not test turning the flag off.

Source/WebCore:

* page/RuntimeEnabledFeatures.h:
(WebCore::RuntimeEnabledFeatures::setStorageAccessPromptsEnabled): Deleted.
(WebCore::RuntimeEnabledFeatures::storageAccessPromptsEnabled const): Deleted.
* testing/InternalSettings.cpp:
(WebCore::InternalSettings::Backup::Backup):
(WebCore::InternalSettings::Backup::restoreTo):
(WebCore::InternalSettings::setStorageAccessPromptsEnabled): Deleted.
* testing/InternalSettings.h:
(): Deleted.
* testing/InternalSettings.idl:

Source/WebKit:

* NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
(WebKit::ResourceLoadStatisticsDatabaseStore::requestStorageAccess):
(WebKit::ResourceLoadStatisticsDatabaseStore::grantStorageAccessInternal):
* NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
* NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
(WebKit::ResourceLoadStatisticsMemoryStore::requestStorageAccess):
(WebKit::ResourceLoadStatisticsMemoryStore::grantStorageAccessInternal):
* NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
* NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
(WebKit::ResourceLoadStatisticsStore::debugModeEnabled const):
(WebKit::ResourceLoadStatisticsStore::storageAccessPromptsEnabled const): Deleted.
(WebKit::ResourceLoadStatisticsStore::setStorageAccessPromptsEnabled): Deleted.
* NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
(WebKit::WebResourceLoadStatisticsStore::requestStorageAccessGranted):
(WebKit::WebResourceLoadStatisticsStore::requestStorageAccess):
* NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
* NetworkProcess/NetworkConnectionToWebProcess.cpp:
(WebKit::NetworkConnectionToWebProcess::requestStorageAccess):
* NetworkProcess/NetworkConnectionToWebProcess.h:
* NetworkProcess/NetworkConnectionToWebProcess.messages.in:
* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::requestStorageAccess):
(WebKit::NetworkProcess::requestStorageAccessGranted):
* NetworkProcess/NetworkProcess.h:
* NetworkProcess/NetworkProcess.messages.in:
* Shared/WebPreferences.yaml:
* UIProcess/API/C/WKPreferences.cpp:
(WKPreferencesSetStorageAccessPromptsEnabled): Deleted.
(WKPreferencesGetStorageAccessPromptsEnabled): Deleted.
* UIProcess/API/C/WKPreferencesRef.h:
* UIProcess/API/Cocoa/WKPreferences.mm:
(-[WKPreferences _storageAccessPromptsEnabled]): Deleted.
(-[WKPreferences _setStorageAccessPromptsEnabled:]): Deleted.
* UIProcess/API/Cocoa/WKPreferencesPrivate.h:
* UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::requestStorageAccess):
* UIProcess/Network/NetworkProcessProxy.h:
* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::requestStorageAccess):
* UIProcess/WebsiteData/WebsiteDataStore.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::requestStorageAccess):

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

5 months agoWeb Inspector: eliminate manual syncing of numeric constants used by JavaScript and CSS
drousso@apple.com [Mon, 11 Mar 2019 20:35:21 +0000 (20:35 +0000)]
Web Inspector: eliminate manual syncing of numeric constants used by JavaScript and CSS
https://bugs.webkit.org/show_bug.cgi?id=194883
<rdar://problem/48257785>

Reviewed by Joseph Pecoraro.

* UserInterface/Views/CanvasOverviewContentView.js:
(WI.CanvasOverviewContentView):
(WI.CanvasOverviewContentView.static get recordingAutoCaptureInputMargin): Added.
(WI.CanvasOverviewContentView.prototype._updateRecordingAutoCaptureInputElementSize):
* UserInterface/Views/CanvasOverviewContentView.css:
(.navigation-bar > .item.canvas-recording-auto-capture > label > input):

* UserInterface/Views/MemoryTimelineView.js:
(WI.MemoryTimelineView.static get memoryCategoryViewHeight): Added.
(WI.MemoryTimelineView.prototype.initialLayout): Added.
(WI.MemoryTimelineView.prototype.layout):
* UserInterface/Views/MemoryCategoryView.css:
(.memory-category-view):

* UserInterface/Views/NetworkTableContentView.js:
(WI.NetworkTableContentView.static get nodeWaterfallDOMEventSize): Added.
(WI.NetworkTableContentView.prototype.initialLayout):
* UserInterface/Views/NetworkTableContentView.css:
(.content-view.network .network-table): Deleted.

* UserInterface/Views/TreeOutline.js:
(WI.TreeOutline._generateStyleRulesIfNeeded):
* UserInterface/Views/TreeOutline.css:
(.tree-outline, .tree-outline .children):
(.tree-outline .item):

* UserInterface/Controllers/CanvasManager.js:
(WI.CanvasManager.supportsRecordingAutoCapture):
Drive-by: fix usage of InspectorBackend.domains.{CanvasAgent => Canvas}
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@242737 268f45cc-cd09-0410-ab3c-d52691b4dbfc

5 months agoUnreviewed, fix a test expecation linter warning for macOS.
ryanhaddad@apple.com [Mon, 11 Mar 2019 20:22:09 +0000 (20:22 +0000)]
Unreviewed, fix a test expecation linter warning for macOS.

* platform/mac/TestExpectations: Delete the entry for 'media/modern-media-controls/media-documents/ipad'.

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

5 months agoAdd a WKContentRuleList variant that uses copied memory instead of mmap'd shared...
commit-queue@webkit.org [Mon, 11 Mar 2019 20:21:39 +0000 (20:21 +0000)]
Add a WKContentRuleList variant that uses copied memory instead of mmap'd shared memory for class A containerized apps
https://bugs.webkit.org/show_bug.cgi?id=195511
<rdar://problem/44873269>

Patch by Alex Christensen <achristensen@webkit.org> on 2019-03-11
Reviewed by Darin Adler.

Source/WebKit:

* NetworkProcess/NetworkContentRuleListManager.cpp:
(WebKit::NetworkContentRuleListManager::addContentRuleLists):
* NetworkProcess/NetworkContentRuleListManager.h:
* NetworkProcess/cache/NetworkCacheFileSystem.cpp:
(WebKit::NetworkCache::pathRegisteredAsUnsafeToMemoryMapForTesting):
(WebKit::NetworkCache::registerPathAsUnsafeToMemoryMapForTesting):
(WebKit::NetworkCache::isSafeToUseMemoryMapForPath):
* NetworkProcess/cache/NetworkCacheFileSystem.h:
* Shared/WebCompiledContentRuleList.cpp:
(WebKit::WebCompiledContentRuleList::usesCopiedMemory const):
(WebKit::WebCompiledContentRuleList::conditionsApplyOnlyToDomain const):
(WebKit::WebCompiledContentRuleList::filtersWithoutConditionsBytecode const):
(WebKit::WebCompiledContentRuleList::filtersWithConditionsBytecode const):
(WebKit::WebCompiledContentRuleList::topURLFiltersBytecode const):
(WebKit::WebCompiledContentRuleList::actions const):
* Shared/WebCompiledContentRuleList.h:
* Shared/WebCompiledContentRuleListData.cpp:
(WebKit::WebCompiledContentRuleListData::size const):
(WebKit::WebCompiledContentRuleListData::dataPointer const):
(WebKit::WebCompiledContentRuleListData::encode const):
(WebKit::WebCompiledContentRuleListData::decode):
* Shared/WebCompiledContentRuleListData.h:
(WebKit::WebCompiledContentRuleListData::WebCompiledContentRuleListData):
* UIProcess/API/APIContentRuleList.cpp:
(API::ContentRuleList::usesCopiedMemory const):
* UIProcess/API/APIContentRuleList.h:
* UIProcess/API/APIContentRuleListStore.cpp:
(API::getData):
(API::decodeContentRuleListMetaData):
(API::ContentRuleListStore::readContentsOfFile):
(API::MappedOrCopiedData::dataPointer const):
(API::openAndMapOrCopyContentRuleList):
(API::compiledToFile):
(API::createExtension):
(API::ContentRuleListStore::lookupContentRuleList):
(API::ContentRuleListStore::compileContentRuleList):
(API::ContentRuleListStore::getContentRuleListSource):
(API::openAndMapContentRuleList): Deleted.
* UIProcess/API/APIContentRuleListStore.h:
* UIProcess/API/Cocoa/APIContentRuleListStoreCocoa.mm:
(API::ContentRuleListStore::readContentsOfFile):
* UIProcess/API/Cocoa/WKContentRuleListStore.mm:
(+[WKContentRuleListStore _registerPathAsUnsafeToMemoryMapForTesting:]):
* UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h:
* UIProcess/API/Cocoa/_WKUserContentFilter.mm:
(-[_WKUserContentFilter usesCopiedMemory]):
* UIProcess/API/Cocoa/_WKUserContentFilterPrivate.h:
* WebProcess/UserContent/WebUserContentController.cpp:
(WebKit::WebUserContentController::addContentRuleLists):
* WebProcess/UserContent/WebUserContentController.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::m_hostFileDescriptor):

Tools:

* TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
(-[TestSchemeHandlerSubresourceShouldBeBlocked webView:startURLSchemeTask:]):
(-[TestSchemeHandlerSubresourceShouldBeBlocked webView:stopURLSchemeTask:]):
(TEST_F):

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

5 months agoAdd web audio release logging
eric.carlson@apple.com [Mon, 11 Mar 2019 20:19:49 +0000 (20:19 +0000)]
Add web audio release logging
https://bugs.webkit.org/show_bug.cgi?id=195554
<rdar://problem/48767211>

Reviewed by Jer Noble.

No new tests, no functional change.

* Modules/webaudio/AudioBasicInspectorNode.cpp:
(WebCore::AudioBasicInspectorNode::AudioBasicInspectorNode):
* Modules/webaudio/AudioBufferSourceNode.cpp:
(WebCore::AudioBufferSourceNode::setBuffer):
(WebCore::AudioBufferSourceNode::startPlaying):
* Modules/webaudio/AudioContext.cpp:
(WebCore::nextLogIdentifier):
(WebCore::AudioContext::AudioContext):
(WebCore::AudioContext::uninitialize):
(WebCore::AudioContext::stop):
(WebCore::AudioContext::createBufferSource):
(WebCore::AudioContext::createMediaElementSource):
(WebCore::AudioContext::createMediaStreamSource):
(WebCore::AudioContext::createScriptProcessor):
(WebCore::AudioContext::createBiquadFilter):
(WebCore::AudioContext::createWaveShaper):
(WebCore::AudioContext::createPanner):
(WebCore::AudioContext::createConvolver):
(WebCore::AudioContext::createDynamicsCompressor):
(WebCore::AudioContext::createAnalyser):
(WebCore::AudioContext::createGain):
(WebCore::AudioContext::createDelay):
(WebCore::AudioContext::createChannelSplitter):
(WebCore::AudioContext::createChannelMerger):
(WebCore::AudioContext::createOscillator):
(WebCore::AudioContext::createPeriodicWave):
(WebCore::AudioContext::willBeginPlayback):
(WebCore::AudioContext::startRendering):
(WebCore::AudioContext::fireCompletionEvent):
(WebCore::AudioContext::logChannel const):
* Modules/webaudio/AudioContext.h:
(WebCore::AudioContext::nextAudioNodeLogIdentifier):
(WebCore::AudioContext::nextAudioParameterLogIdentifier):
* Modules/webaudio/AudioDestinationNode.cpp:
(WebCore::AudioDestinationNode::AudioDestinationNode):
* Modules/webaudio/AudioNode.cpp:
(WebCore::convertEnumerationToString):
(WebCore::AudioNode::AudioNode):
(WebCore::AudioNode::~AudioNode):
(WebCore::AudioNode::setNodeType):
(WebCore::AudioNode::addInput):
(WebCore::AudioNode::addOutput):
(WebCore::AudioNode::connect):
(WebCore::AudioNode::disconnect):
(WebCore::AudioNode::setChannelCount):
(WebCore::AudioNode::setChannelCountMode):
(WebCore::AudioNode::setChannelInterpretation):
(WebCore::AudioNode::logChannel const):
* Modules/webaudio/AudioNode.h:
(WTF::LogArgument<WebCore::AudioNode::NodeType>::toString):
* Modules/webaudio/AudioParam.cpp:
(WebCore::AudioParam::AudioParam):
(WebCore::AudioParam::setValue):
(WebCore::AudioParam::connect):
(WebCore::AudioParam::disconnect):
(WebCore::AudioParam::logChannel const):
* Modules/webaudio/AudioParam.h:
* Modules/webaudio/AudioScheduledSourceNode.cpp:
(WebCore::AudioScheduledSourceNode::start):
(WebCore::AudioScheduledSourceNode::stop):
* Modules/webaudio/BiquadFilterNode.cpp:
(WebCore::BiquadFilterNode::BiquadFilterNode):
* Modules/webaudio/ChannelMergerNode.cpp:
(WebCore::ChannelMergerNode::ChannelMergerNode):
* Modules/webaudio/ChannelSplitterNode.cpp:
(WebCore::ChannelSplitterNode::ChannelSplitterNode):
* Modules/webaudio/ConvolverNode.cpp:
(WebCore::ConvolverNode::ConvolverNode):
* Modules/webaudio/DefaultAudioDestinationNode.cpp:
(WebCore::DefaultAudioDestinationNode::initialize):
(WebCore::DefaultAudioDestinationNode::uninitialize):
(WebCore::DefaultAudioDestinationNode::enableInput):
(WebCore::DefaultAudioDestinationNode::setChannelCount):
* Modules/webaudio/DelayNode.cpp:
(WebCore::DelayNode::DelayNode):
* Modules/webaudio/DynamicsCompressorNode.cpp:
(WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
* Modules/webaudio/GainNode.cpp:
(WebCore::GainNode::GainNode):
* Modules/webaudio/MediaElementAudioSourceNode.cpp:
(WebCore::MediaElementAudioSourceNode::MediaElementAudioSourceNode):
* Modules/webaudio/MediaStreamAudioSourceNode.cpp:
(WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode):
* Modules/webaudio/OfflineAudioDestinationNode.cpp:
(WebCore::OfflineAudioDestinationNode::startRendering):
* Modules/webaudio/OscillatorNode.cpp:
(WebCore::OscillatorNode::setType):
(WebCore::OscillatorNode::setPeriodicWave):
* Modules/webaudio/OscillatorNode.h:
(WTF::LogArgument<WebCore::OscillatorNode::Type>::toString):
* Modules/webaudio/PannerNode.cpp:
(WebCore::PannerNode::PannerNode):
* Modules/webaudio/ScriptProcessorNode.cpp:
(WebCore::ScriptProcessorNode::ScriptProcessorNode):
* Modules/webaudio/WaveShaperNode.cpp:
(WebCore::WaveShaperNode::WaveShaperNode):
(WebCore::WaveShaperNode::setCurve):
(WebCore::WaveShaperNode::setOversample):
* Modules/webaudio/WaveShaperNode.h:
(WTF::LogArgument<WebCore::WaveShaperNode::OverSampleType>::toString):

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

5 months agoRegression(r242664) WebKit.WebsitePoliciesDeviceOrientationEventEnabled API test...
cdumez@apple.com [Mon, 11 Mar 2019 20:17:50 +0000 (20:17 +0000)]
Regression(r242664) WebKit.WebsitePoliciesDeviceOrientationEventEnabled API test is timing out
https://bugs.webkit.org/show_bug.cgi?id=195561

Reviewed by Youenn Fablet.

Make sure the JS in the test requests for permission to receive device orientation events.

* TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:

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

5 months agoCrash under WebCore::IDBDatabase::connectionToServerLost
sihui_liu@apple.com [Mon, 11 Mar 2019 20:06:55 +0000 (20:06 +0000)]
Crash under WebCore::IDBDatabase::connectionToServerLost
https://bugs.webkit.org/show_bug.cgi?id=195563
<rdar://problem/37193655>

CrossThreadTask should protect callee if it is ThreadSafeRefCounted.

Reviewed by Geoffrey Garen.

* wtf/CrossThreadTask.h:
(WTF::createCrossThreadTask):

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

5 months agoREGRESSION(r242622): Web Inspector: Fix asserts "Overridden property is missing overr...
nvasilyev@apple.com [Mon, 11 Mar 2019 20:05:07 +0000 (20:05 +0000)]
REGRESSION(r242622): Web Inspector: Fix asserts "Overridden property is missing overridingProperty"
https://bugs.webkit.org/show_bug.cgi?id=195515
<rdar://problem/48737315>

Reviewed by Matt Baker.

* UserInterface/Views/SpreadsheetStyleProperty.js:
(WI.SpreadsheetStyleProperty.prototype.updateStatus):

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

5 months ago[ iOS Sim ] Layout Test imported/w3c/web-platform-tests/webrtc/simplecall-no-ssrcs...
ryanhaddad@apple.com [Mon, 11 Mar 2019 20:03:24 +0000 (20:03 +0000)]
[ iOS Sim ] Layout Test imported/w3c/web-platform-tests/webrtc/simplecall-no-ssrcs.https.html is a flaky crash
https://bugs.webkit.org/show_bug.cgi?id=195433

Unreviewed test gardening.

* platform/ios/TestExpectations: Skip the test.

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

5 months agoMake IDBDatabaseIdentifier take a ClientOrigin as member
youenn@apple.com [Mon, 11 Mar 2019 20:00:07 +0000 (20:00 +0000)]
Make IDBDatabaseIdentifier take a ClientOrigin as member
https://bugs.webkit.org/show_bug.cgi?id=195544

Reviewed by Geoffrey Garen.

Instead of taking a top and a frame origin, make
make IDBDatabaseIdentifier take a ClientOrigin.

This allows reusing some ClientOrigin code
and will ease implementation of storage quota checking in
NetworkProcess, as quota managers are keyed by client origins.

No change of behavior.

* Modules/indexeddb/IDBDatabaseIdentifier.cpp:
(WebCore::IDBDatabaseIdentifier::IDBDatabaseIdentifier):
(WebCore::IDBDatabaseIdentifier::isolatedCopy const):
(WebCore::IDBDatabaseIdentifier::databaseDirectoryRelativeToRoot const):
(WebCore::IDBDatabaseIdentifier::debugString const):
* Modules/indexeddb/IDBDatabaseIdentifier.h:
(WebCore::IDBDatabaseIdentifier::hash const):
(WebCore::IDBDatabaseIdentifier::operator== const):
(WebCore::IDBDatabaseIdentifier::origin const):
(WebCore::IDBDatabaseIdentifier::isRelatedToOrigin const):
(WebCore::IDBDatabaseIdentifier::encode const):
(WebCore::IDBDatabaseIdentifier::decode):
* page/ClientOrigin.h:
(WebCore::ClientOrigin::isRelated const):

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

5 months agoUnreviewed, fix assertions in layout tests on iOS Simulator after r242666.
cdumez@apple.com [Mon, 11 Mar 2019 19:51:25 +0000 (19:51 +0000)]
Unreviewed, fix assertions in layout tests on iOS Simulator after r242666.

Log an error but do not crash if we fail to acquire a ProcessAssertion.

* UIProcess/ios/ProcessAssertionIOS.mm:
(WebKit::ProcessAssertion::ProcessAssertion):

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

5 months agoAllow storage quota increase by default in WTR
youenn@apple.com [Mon, 11 Mar 2019 19:38:04 +0000 (19:38 +0000)]
Allow storage quota increase by default in WTR
https://bugs.webkit.org/show_bug.cgi?id=195541

Reviewed by Geoffrey Garen.

Tools:

Allow storage quota increase by default in WTR.
Move from testRunner.allowStorageQuotaIncrease to testRunner.setAllowStorageQuotaIncrease.
Use this for tests that explicitly need cache increase.

Instead of increasing quota by 2, make sure the next request is
granted by adding all given parameters.

* WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
* WebKitTestRunner/InjectedBundle/TestRunner.cpp:
(WTR::TestRunner::setAllowStorageQuotaIncrease):
(WTR::TestRunner::allowCacheStorageQuotaIncrease): Deleted.
* WebKitTestRunner/InjectedBundle/TestRunner.h:
* WebKitTestRunner/TestController.cpp:
(WTR::TestController::setAllowStorageQuotaIncrease):
(WTR::TestController::allowCacheStorageQuotaIncrease): Deleted.
* WebKitTestRunner/TestController.h:
* WebKitTestRunner/TestInvocation.cpp:
(WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
* WebKitTestRunner/cocoa/TestControllerCocoa.mm:
(WTR::TestController::cocoaResetStateToConsistentValues):
(WTR::TestController::setAllowStorageQuotaIncrease):
(WTR::TestController::allowCacheStorageQuotaIncrease): Deleted.
* WebKitTestRunner/cocoa/TestWebsiteDataStoreDelegate.mm:
(-[TestWebsiteDataStoreDelegate requestStorageSpace:frameOrigin:quota:currentSize:spaceRequired:decisionHandler:]):

LayoutTests:

* http/wpt/cache-storage/cache-quota.any.js:
(promise_test):

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

5 months agoWebProcessCache should keep track of processes being added
cdumez@apple.com [Mon, 11 Mar 2019 19:30:42 +0000 (19:30 +0000)]
WebProcessCache should keep track of processes being added
https://bugs.webkit.org/show_bug.cgi?id=195538

Reviewed by Geoffrey Garen.

WebProcessCache should keep track of processes being added, while they are being
checked for responsiveness. This is useful so that:
- Requests to clear the cache also clear processes being added
- Requests to remove a given process from the cache (either because it crashed
  or because it is being used for a history navigation) actually remove the
  process if it is still being checked for responsiveness.
- The cached process eviction timer applies to such processes in case something
  goes wrong with the code and the pending request does not get processed.

* UIProcess/WebProcessCache.cpp:
(WebKit::generateAddRequestIdentifier):
(WebKit::WebProcessCache::addProcessIfPossible):
(WebKit::WebProcessCache::addProcess):
(WebKit::WebProcessCache::clear):
(WebKit::WebProcessCache::clearAllProcessesForSession):
(WebKit::WebProcessCache::removeProcess):
(WebKit::WebProcessCache::CachedProcess::evictionTimerFired):
(WebKit::WebProcessCache::evictProcess): Deleted.
* UIProcess/WebProcessCache.h:
(WebKit::WebProcessCache::size const):
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::processForNavigationInternal):
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):

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

5 months agoUnreviewed. Manually rolling out r242701 and r242703 since the changes
zandobersek@gmail.com [Mon, 11 Mar 2019 19:21:48 +0000 (19:21 +0000)]
Unreviewed. Manually rolling out r242701 and r242703 since the changes
are causing test timeouts and crashes on GTK and WPE.

* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
(WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
(WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
(WebCore::MediaPlayerPrivateGStreamerBase::flushCurrentBuffer):
(WebCore::MediaPlayerPrivateGStreamerBase::createGLAppSink):
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
* platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
(WebCore::TextureMapperPlatformLayerProxy::pushNextBuffer):
(WebCore::TextureMapperPlatformLayerProxy::dropCurrentBufferWhilePreservingTexture):
* platform/graphics/texmap/TextureMapperPlatformLayerProxy.h:
(): Deleted.

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

5 months ago[CMake] Build 32bit binaries on Linux/64bit when the --32-bit is passed to build-jsc
commit-queue@webkit.org [Mon, 11 Mar 2019 19:11:09 +0000 (19:11 +0000)]
[CMake] Build 32bit binaries on Linux/64bit when the --32-bit is passed to build-jsc
https://bugs.webkit.org/show_bug.cgi?id=194147

Patch by Xan Lopez <xan@igalia.com> on 2019-03-11
Reviewed by Michael Saboff.

.:

* CMakeLists.txt: set WTF_CPU properly if FORCE_32BIT is set in
build-jsc.

Tools:

To make --32-bit work correctly on Linux/64bit we need to:

- Set FORCE_32BIT on, which will be read by CMake to set WTF_CPU
correctly. Ideally we'd just redefine CMAKE_SYSTEM_PROCESSOR, but
unfortunately CMake only allows us to do this during
crosscompilation, which is overkill here.
- Set CMAKE_PREFIX_PATH and CMAKE_LIBRARY_ARCHITECTURE so that the
pkg-config detection module uses the x86 .pc files instead of the
x86_64 ones.
- Set the -m32 flags for the compiler.

* Scripts/webkitdirs.pm:
(generateBuildSystemFromCMakeProject):

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

5 months agoREGRESSION: ( r240978-r240985 ) [ iOS Release ] Layout Test imported/w3c/web-platform...
commit-queue@webkit.org [Mon, 11 Mar 2019 19:07:38 +0000 (19:07 +0000)]
REGRESSION: ( r240978-r240985 ) [ iOS Release ] Layout Test imported/w3c/web-platform-tests/xhr/send-redirect-post-upload.htm is crashing
https://bugs.webkit.org/show_bug.cgi?id=194523

Patch by Alex Christensen <achristensen@webkit.org> on 2019-03-11
Reviewed by Alexey Proskuryakov.

Attempt another workaround to prevent crashes.

* NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
* NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
(WebKit::NetworkDataTaskCocoa::~NetworkDataTaskCocoa):
* NetworkProcess/cocoa/NetworkSessionCocoa.mm:
(-[WKNetworkSessionDelegate URLSession:task:needNewBodyStream:]):

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

5 months ago[JSC] BuiltinExecutables should behave like a WeakSet instead of generic WeakHandleOw...
ysuzuki@apple.com [Mon, 11 Mar 2019 18:59:23 +0000 (18:59 +0000)]
[JSC] BuiltinExecutables should behave like a WeakSet instead of generic WeakHandleOwner for memory footprint
https://bugs.webkit.org/show_bug.cgi?id=195508

Reviewed by Darin Adler.

Weak<> is not cheap in terms of memory footprint. We allocate WeakBlock (256 bytes) for book-keeping Weak<>.
Currently BuiltinExecutables has 203 Weak<> members and many WeakBlocks are actually allocated because
many UnlinkedFunctionExecutables in BuiltinExecutables are allocated during JSGlobalObject initialization process.

This patch changes two things in BuiltinExecutables.

1. Previously we have m_xxxSourceCode fields too. But we do not need to keep it since we know how to produce it when it is required.
   We generate SourceCode in xxxSourceCode() method instead of just returning m_xxxSourceCode. This reduces sizeof(BuiltinExecutables) 24 x 203 = 4KB.

2. Instead of using Weak<>, BuiltinExecutables holds raw array of UnlinkedFunctionExecutable*. And Heap::finalizeUnconditionalFinalizers() correctly clears dead executables.
   This is similar to JSWeakSet implementation. And it saves WeakBlock allocations.

* builtins/BuiltinExecutables.cpp:
(JSC::BuiltinExecutables::BuiltinExecutables):
(JSC::BuiltinExecutables::finalizeUnconditionally):
(JSC::JSC_FOREACH_BUILTIN_CODE): Deleted.
(JSC::BuiltinExecutables::finalize): Deleted.
* builtins/BuiltinExecutables.h:
(JSC::BuiltinExecutables::static_cast<unsigned>):
(): Deleted.
* heap/Heap.cpp:
(JSC::Heap::finalizeUnconditionalFinalizers):

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

5 months agoAdd MotionMark-1.1 plan file for run-benchmark script.
dewei_zhu@apple.com [Mon, 11 Mar 2019 18:45:52 +0000 (18:45 +0000)]
Add MotionMark-1.1 plan file for run-benchmark script.
https://bugs.webkit.org/show_bug.cgi?id=195481

Rubber-stamped by Darin Adler.

Run-benchmark script should support MontionMark-1.1.

* Scripts/webkitpy/benchmark_runner/data/plans/motionmark1.1.plan: Added.

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

5 months agoUse AVContentKeySession for "com.apple.fps.2_0" CDM version when AVStreamSession...
jer.noble@apple.com [Mon, 11 Mar 2019 18:30:11 +0000 (18:30 +0000)]
Use AVContentKeySession for "com.apple.fps.2_0" CDM version when AVStreamSession is absent
https://bugs.webkit.org/show_bug.cgi?id=195462
<rdar://problem/48712306>

Reviewed by Eric Carlson.

The difference between "com.apple.fps.2_0" and "3_0" is a protocol difference more than an
implementation difference. In "2_0", the "EME nitialization" data comes in the form of a "content
identifier", while the true initialization data is retrieved through a side channel directly from
the attached element. In "3_0", the "EME initialization data" is the exact initialization data
given by the parser, with no "content identifier" at all.

In the original implementation, the "2_0" used AVStreamSession, and "3_0" used AVContentKeySession,
but in the absense of AVStreamSession, those protocol differences are minor and can be implemented
using AVContentKeySession.

Changes:

- Add a new helper struct in CDMPrivateMediaSourceAVFObjC that represents the parsed parameters
  of the CDM string.
- Add an "initData()" accessor to SourceBufferPrivateAVFObjC so that the "2_0" path can implement
  the side channel access to the necessary initialization data.
- Refactor some of the SPI code to not re-declare unnecessary APIs.
- In CDMSessionAVContentKeySession::generateKeyRequest(), this function can never be called twice
  so it is a logical impossibility to have a certificate at this point. Remove all this if() code.

* Modules/encryptedmedia/legacy/LegacyCDM.cpp:
* platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.h:
* platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm:
(WebCore::CDMPrivateMediaSourceAVFObjC::parseKeySystem):
(WebCore::queryDecoderAvailability):
(WebCore::CDMPrivateMediaSourceAVFObjC::supportsKeySystem):
(WebCore::CDMPrivateMediaSourceAVFObjC::createSession):
(WebCore::validKeySystemRE): Deleted.
* platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.h:
* platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
(WebCore::CDMSessionAVContentKeySession::CDMSessionAVContentKeySession):
(WebCore::CDMSessionAVContentKeySession::generateKeyRequest):
(WebCore::CDMSessionAVContentKeySession::update):
(WebCore::CDMSessionAVContentKeySession::addParser):
(WebCore::CDMSessionAVContentKeySession::removeParser):
(WebCore::CDMSessionAVContentKeySession::contentKeySession):
* platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.h:
* platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
(WebCore::CDMSessionAVStreamSession::CDMSessionAVStreamSession):
* platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
* platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
(WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setCDMSession):
* platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
* platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
(WebCore::SourceBufferPrivateAVFObjC::didProvideContentKeyRequestInitializationDataForTrackID):

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

5 months ago[ews-app] Add support for submit-to-ews url
aakash_jain@apple.com [Mon, 11 Mar 2019 18:22:02 +0000 (18:22 +0000)]
[ews-app] Add support for submit-to-ews url
https://bugs.webkit.org/show_bug.cgi?id=195477

Reviewed by Lucas Forschler.

* BuildSlaveSupport/ews-app/ews/fetcher.py:
* BuildSlaveSupport/ews-app/ews/templates/statusbubble.html:
* BuildSlaveSupport/ews-app/ews/templates/submittoews.html: Copied from QueueStatusServer/templates/submittoews.html.
* BuildSlaveSupport/ews-app/ews/urls.py:
* BuildSlaveSupport/ews-app/ews/views/submittoews.py: Added.

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

5 months agoIntlDateTimeFormat can be shrunk by 32 bytes
rmorisset@apple.com [Mon, 11 Mar 2019 17:54:59 +0000 (17:54 +0000)]
IntlDateTimeFormat can be shrunk by 32 bytes
https://bugs.webkit.org/show_bug.cgi?id=195504

Reviewed by Darin Adler.

* runtime/IntlDateTimeFormat.h:

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

5 months agoIntlCollator can be shrunk by 16 bytes
rmorisset@apple.com [Mon, 11 Mar 2019 17:39:35 +0000 (17:39 +0000)]
IntlCollator can be shrunk by 16 bytes
https://bugs.webkit.org/show_bug.cgi?id=195503

Reviewed by Darin Adler.

* runtime/IntlCollator.h:

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

5 months agoIntlNumberFormat can be shrunk by 16 bytes
rmorisset@apple.com [Mon, 11 Mar 2019 17:27:47 +0000 (17:27 +0000)]
IntlNumberFormat can be shrunk by 16 bytes
https://bugs.webkit.org/show_bug.cgi?id=195505

Reviewed by Darin Adler.

* runtime/IntlNumberFormat.h:

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

5 months ago[ESNext][BigInt] Implement "~" unary operation
ticaiolima@gmail.com [Mon, 11 Mar 2019 17:21:41 +0000 (17:21 +0000)]
[ESNext][BigInt] Implement "~" unary operation
https://bugs.webkit.org/show_bug.cgi?id=182216

Reviewed by Keith Miller.

JSTests:

* stress/big-int-bit-not-general.js: Added.
* stress/big-int-bitwise-not-jit.js: Added.
* stress/big-int-bitwise-not-wrapped-value.js: Added.
* stress/bit-op-with-object-returning-int32.js:
* stress/bitwise-not-fixup-rules.js: Added.
* stress/value-bit-not-ai-rule.js: Added.

PerformanceTests:

* BigIntBench/big-int-simple-bit-not.js: Added.

Source/JavaScriptCore:

This patch is adding support of BigInt into op_bitnot operations. In
addition, we are changing ArithBitNot to handle only Number operands,
while introducing a new node named ValueBitNot to handle Untyped and
BigInt. This node follows the same approach we are doing into other
arithimetic operations into DFG.

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

It is possible that fixup and prediction propagation don't convert a
ValueBitNot(ConstInt32) into ArithBitNot(ConstInt32) because these
analysis are conservative. In such case, we are adding constant
folding rules to ValueBitNot AI.

* dfg/DFGBackwardsPropagationPhase.cpp:
(JSC::DFG::BackwardsPropagationPhase::propagate):

ValueBitNot has same rules as ArithBitNot on backwards propagation.

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

We can emit ArithBitNot if we know that operand of op_bitnot is a
Number or any int. Otherwise we fallback to ValueBitNot and rely on
fixup to convert the node to ArithBitNot when it is possible.
ValueBitNot uses heap prediction on prediction propagation and we
collect its type from op_bitnot's value profiler.

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

When we have the case with ValueBitNot(BigInt), we don't clobberize
world.

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

ValueBitNot can GC on BigIntUse because, right now, all bitNot
operation allocates temporary BigInts to perform calculations and it
can potentially trigger GC.

* dfg/DFGFixupPhase.cpp:
(JSC::DFG::FixupPhase::fixupNode):

ValueBitNot is responsible do handle BigIntUse and UntypedUse. To all
other uses, we fallback to ArithBitNot.

* dfg/DFGNode.h:
(JSC::DFG::Node::hasHeapPrediction):
* dfg/DFGNodeType.h:
* dfg/DFGOperations.cpp:
(JSC::DFG::bitwiseBinaryOp):

This template function is abstracting the new semantics of numeric
values operations on bitwise operations. These operations usually
folow these steps:

    1. rhsNumeric = GetInt32OrBigInt(rhs)
    2. lhsNumeric = GetInt32OrBigInt(lhs)
    3. trhow error if TypeOf(rhsNumeric) != TypeOf(lhsNumeric)
    4. return BigInt::bitwiseOp(bitOp, rhs, lhs) if TypeOf(lhsNumeric) == BigInt
    5. return rhs <int32BitOp> lhs

Since we have almost the same code for every bitwise op,
we use such template to avoid code duplication. The template receives
Int32 and BigInt operations as parameter. Error message is received as
`const char*` instead of `String&` to avoid String allocation even when
there is no error to throw.

* dfg/DFGOperations.h:
* dfg/DFGPredictionPropagationPhase.cpp:
* dfg/DFGSafeToExecute.h:
(JSC::DFG::safeToExecute):
* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::compileValueBitNot):

ValueBitNot generates speculative code for BigIntUse and this code is a
call to `operationBitNotBigInt`. This operation is faster than
`operationValueBitNot` because there is no need to check types of
operands and execute properly operation. We still need to check
exceptions after `operationBitNotBigInt` because it can throw OOM.

(JSC::DFG::SpeculativeJIT::compileBitwiseNot):
* dfg/DFGSpeculativeJIT.h:
* dfg/DFGSpeculativeJIT32_64.cpp:
(JSC::DFG::SpeculativeJIT::compile):
* dfg/DFGSpeculativeJIT64.cpp:
(JSC::DFG::SpeculativeJIT::compile):
* ftl/FTLCapabilities.cpp:
(JSC::FTL::canCompile):
* ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::compileNode):
(JSC::FTL::DFG::LowerDFGToB3::compileValueBitNot):
(JSC::FTL::DFG::LowerDFGToB3::compileArithBitNot):
* runtime/CommonSlowPaths.cpp:
(JSC::SLOW_PATH_DECL):
* runtime/JSBigInt.cpp:
(JSC::JSBigInt::bitwiseNot):
* runtime/JSBigInt.h:

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

5 months agoUnreviewed, rolling out r242688, r242643, r242624.
ryanhaddad@apple.com [Mon, 11 Mar 2019 17:19:20 +0000 (17:19 +0000)]
Unreviewed, rolling out r242688, r242643, r242624.

Caused multiple layout test failures and crashes on iOS and macOS.

Reverted changeset:

"requestAnimationFrame should execute before the next frame"
https://bugs.webkit.org/show_bug.cgi?id=177484
https://trac.webkit.org/changeset/242624/webkit

Source/WebCore:

* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* accessibility/mac/AXObjectCacheMac.mm:
(WebCore::AXObjectCache::platformHandleFocusedUIElementChanged):
* animation/DocumentAnimationScheduler.cpp: Added.
(WebCore::DocumentAnimationScheduler::create):
(WebCore::DocumentAnimationScheduler::DocumentAnimationScheduler):
(WebCore::DocumentAnimationScheduler::detachFromDocument):
(WebCore::DocumentAnimationScheduler::scheduleWebAnimationsResolution):
(WebCore::DocumentAnimationScheduler::unscheduleWebAnimationsResolution):
(WebCore::DocumentAnimationScheduler::scheduleScriptedAnimationResolution):
(WebCore::DocumentAnimationScheduler::displayRefreshFired):
(WebCore::DocumentAnimationScheduler::windowScreenDidChange):
(WebCore::DocumentAnimationScheduler::createDisplayRefreshMonitor const):
* animation/DocumentAnimationScheduler.h: Renamed from Source/WebCore/page/RenderingUpdateScheduler.h.
(WebCore::DocumentAnimationScheduler::lastTimestamp):
(WebCore::DocumentAnimationScheduler::isFiring const):
* animation/DocumentTimeline.cpp:
(WebCore::DocumentTimeline::DocumentTimeline):
(WebCore::DocumentTimeline::updateThrottlingState):
(WebCore::DocumentTimeline::suspendAnimations):
(WebCore::DocumentTimeline::resumeAnimations):
(WebCore::DocumentTimeline::liveCurrentTime const):
(WebCore::DocumentTimeline::currentTime):
(WebCore::DocumentTimeline::cacheCurrentTime):
(WebCore::DocumentTimeline::scheduleAnimationResolutionIfNeeded):
(WebCore::DocumentTimeline::animationTimingDidChange):
(WebCore::DocumentTimeline::scheduleAnimationResolution):
(WebCore::DocumentTimeline::unscheduleAnimationResolution):
(WebCore::DocumentTimeline::animationResolutionTimerFired):
(WebCore::DocumentTimeline::updateAnimationsAndSendEvents):
(WebCore::DocumentTimeline::scheduleNextTick):
(WebCore::DocumentTimeline::updateListOfElementsWithRunningAcceleratedAnimationsForElement):
(WebCore::DocumentTimeline::resolveAnimationsForElement):
(WebCore::DocumentTimeline::internalUpdateAnimationsAndSendEvents): Deleted.
* animation/DocumentTimeline.h:
* dom/Document.cpp:
(WebCore::Document::resolveStyle):
(WebCore::Document::prepareForDestruction):
(WebCore::Document::windowScreenDidChange):
(WebCore::Document::updateIntersectionObservations):
(WebCore::Document::scheduleForcedIntersectionObservationUpdate):
(WebCore::Document::animationScheduler):
(WebCore::Document::updateAnimationsAndSendEvents): Deleted.
(WebCore::Document::serviceRequestAnimationFrameCallbacks): Deleted.
* dom/Document.h:
* dom/ScriptedAnimationController.cpp:
(WebCore::ScriptedAnimationController::serviceScriptedAnimations):
(WebCore::ScriptedAnimationController::scheduleAnimation):
(WebCore::ScriptedAnimationController::animationTimerFired):
(WebCore::ScriptedAnimationController::documentAnimationSchedulerDidFire):
(WebCore::ScriptedAnimationController::serviceRequestAnimationFrameCallbacks): Deleted.
* dom/ScriptedAnimationController.h:
* page/FrameView.cpp:
(WebCore::FrameView::viewportContentsChanged):
* page/IntersectionObserver.cpp:
(WebCore::IntersectionObserver::observe):
* page/Page.cpp:
(WebCore::Page::Page):
(WebCore::Page::willDisplayPage):
(WebCore::Page::addDocumentNeedingIntersectionObservationUpdate):
(WebCore::Page::updateIntersectionObservations):
(WebCore::Page::scheduleForcedIntersectionObservationUpdate):
(WebCore::Page::layoutIfNeeded): Deleted.
(WebCore::Page::renderingUpdate): Deleted.
(WebCore::Page::renderingUpdateScheduler): Deleted.
* page/Page.h:
* page/PageOverlayController.cpp:
(WebCore::PageOverlayController::didChangeViewExposedRect):
(WebCore::PageOverlayController::notifyFlushRequired):
* page/RenderingUpdateScheduler.cpp: Removed.
* page/ios/ContentChangeObserver.h:
* page/mac/ServicesOverlayController.mm:
(WebCore::ServicesOverlayController::Highlight::notifyFlushRequired):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::scheduleLayerFlushNow):

Source/WebKit:

* WebProcess/WebPage/CoordinatedGraphics/DrawingAreaCoordinatedGraphics.cpp:
(WebKit::DrawingAreaCoordinatedGraphics::scheduleCompositingLayerFlush):
(WebKit::DrawingAreaCoordinatedGraphics::updateBackingStoreState):
(WebKit::DrawingAreaCoordinatedGraphics::display):
* WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp:
(WebKit::LayerTreeHost::layerFlushTimerFired):
* WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
(WebKit::RemoteLayerTreeDrawingArea::flushLayers):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::layoutIfNeeded):
(WebKit::WebPage::willDisplayPage):
(WebKit::WebPage::renderingUpdate): Deleted.
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
(WebKit::TiledCoreAnimationDrawingArea::flushLayers):

Source/WebKitLegacy/mac:

* WebView/WebView.mm:
(-[WebView _viewWillDrawInternal]):

Source/WebKitLegacy/win:

* WebView.cpp:
(WebView::updateBackingStore):
(WebView::flushPendingGraphicsLayerChangesSoon):
(WebView::flushPendingGraphicsLayerChanges):

Source/WTF:

* wtf/SystemTracing.h:

Tools:

* Tracing/SystemTracePoints.plist:

LayoutTests:

* TestExpectations:
* animations/animation-multiple-callbacks-timestamp.html:
* animations/no-style-recalc-during-accelerated-animation-expected.txt:
* animations/no-style-recalc-during-accelerated-animation.html:
* platform/mac-wk2/TestExpectations:

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

5 months agoSpecify fixed precision explicitly to prepare to change String::number and StringBuil...
darin@apple.com [Mon, 11 Mar 2019 17:11:13 +0000 (17:11 +0000)]
Specify fixed precision explicitly to prepare to change String::number and StringBuilder::appendNumber floating point behavior
https://bugs.webkit.org/show_bug.cgi?id=195533

Reviewed by Brent Fulgham.

Source/JavaScriptCore:

* API/tests/ExecutionTimeLimitTest.cpp:
(testExecutionTimeLimit): Use appendFixedPrecisionNumber.
* runtime/NumberPrototype.cpp:
(JSC::numberProtoFuncToPrecision): Use numberToStringFixedPrecision.
* runtime/Options.cpp:
(JSC::Option::dump const): Use appendFixedPrecisionNumber.

Source/WebCore:

* accessibility/AccessibilityNodeObject.cpp:
(WebCore::AccessibilityNodeObject::changeValueByStep): Use numberToStringFixedPrecision.
(WebCore::AccessibilityNodeObject::changeValueByPercent): Ditto.
* accessibility/AccessibilityScrollbar.cpp:
(WebCore::AccessibilityScrollbar::setValue): Ditto.
* css/CSSFontVariationValue.cpp:
(WebCore::CSSFontVariationValue::customCSSText const): Use appendFixedPrecisionNumber.
* css/CSSGradientValue.cpp:
(WebCore::CSSLinearGradientValue::customCSSText const): Ditto.
(WebCore::CSSRadialGradientValue::customCSSText const): Ditto.
* css/CSSKeyframeRule.cpp:
(WebCore::StyleRuleKeyframe::keyText const): Ditto.
* css/CSSTimingFunctionValue.cpp:
(WebCore::CSSCubicBezierTimingFunctionValue::customCSSText const): Ditto.
(WebCore::CSSSpringTimingFunctionValue::customCSSText const): Ditto.
* css/parser/CSSParserToken.cpp:
(WebCore::CSSParserToken::serialize const): Ditto.
* html/HTMLImageElement.cpp:
(WebCore::HTMLImageElement::completeURLsInAttributeValue const): Ditto.
* inspector/InspectorOverlay.cpp:
(WebCore::InspectorOverlay::drawRulers): Use numberToStringFixedPrecision.
* loader/ResourceLoadStatistics.cpp:
(WebCore::ResourceLoadStatistics::toString const): Use appendFixedPrecisionNumber.
* page/PrintContext.cpp:
(WebCore::PrintContext::pageProperty): Use numberToStringFixedPrecision.
* page/cocoa/ResourceUsageOverlayCocoa.mm:
(WebCore::gcTimerString): Use numberToStringFixedPrecision.
* platform/LayoutUnit.h:
(WTF::ValueToString<WebCore::LayoutUnit>::string): Ditto.
* platform/graphics/Color.cpp:
(WebCore::Color::cssText const): Use appendFixedPrecisionNumber.
* platform/graphics/ExtendedColor.cpp:
(WebCore::ExtendedColor::cssText const): Ditto.
* svg/SVGAngleValue.cpp:
(WebCore::SVGAngleValue::valueAsString const): Use numberToStringFixedPrecision.
* svg/SVGNumberListValues.cpp:
(WebCore::SVGNumberListValues::valueAsString const): Use appendFixedPrecisionNumber.
* svg/SVGPathStringBuilder.cpp:
(WebCore::appendNumber): Ditto.
(WebCore::appendPoint): Ditto.
* svg/SVGPointListValues.cpp:
(WebCore::SVGPointListValues::valueAsString const): Ditto.
* svg/SVGTransformValue.cpp:
(WebCore::SVGTransformValue::valueAsString const): Ditto.
* svg/properties/SVGPropertyTraits.h:
(WebCore::SVGPropertyTraits<float>::toString): Use numberToStringFixedPrecision.
(WebCore::SVGPropertyTraits<FloatPoint>::toString): Use appendFixedPrecisionNumber.
(WebCore::SVGPropertyTraits<FloatRect>::toString): Ditto.
* testing/Internals.cpp:
(WebCore::Internals::dumpMarkerRects): Use appendFixedPrecisionNumber.
(WebCore::Internals::getCurrentCursorInfo): Ditto.
* xml/XPathValue.cpp:
(WebCore::XPath::Value::toString const): Use numberToStringFixedPrecision.

Source/WebKit:

* NetworkProcess/cache/NetworkCache.cpp:
(WebKit::NetworkCache::Cache::dumpContentsToFile): Use appendFixedPrecisionNumber.
* NetworkProcess/cache/NetworkCacheEntry.cpp:
(WebKit::NetworkCache::Entry::asJSON const): Ditto.
* Shared/Gamepad/GamepadData.cpp:
(WebKit::GamepadData::loggingString const): Ditto.
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::logDiagnosticMessageWithValue): Use numberToStringFixedPrecision.

Source/WTF:

Soon, we will change String::number and StringBuilder::appendNumber for floating
point to use "shortest form" serialization instead of the current default, which is
"6-digit fixed precision stripping trailing zeros". To prepare to do this safely
without accidentally changing any behavior, changing callers to call the explicit
versions. Later, we may want to return and change many of them to use shortest form
instead, but that may require rebaselining tests, and in some extreme cases, getting
rid of flawed logic that converts between different single and double precision
floating point; such problems may be hidden by fixed precision serialization.

Since "shortest form" is already the behavior for AtomicString::number and
for makeString, no changes required for clients of either of those.

* wtf/Logger.h:
(WTF::LogArgument::toString): Use numberToStringFixedPrecision.
* wtf/MediaTime.cpp:
(WTF::MediaTime::toString const): Use appendFixedPrecisionNumber.
* wtf/text/ValueToString.h:
(WTF::ValueToString<float>::string): Use numberToStringFixedPrecision.
(WTF::ValueToString<double>::string): Ditto.

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

5 months agoResource Load Statistics: Make it possible exclude localhost from classification
wilander@apple.com [Mon, 11 Mar 2019 17:01:27 +0000 (17:01 +0000)]
Resource Load Statistics: Make it possible exclude localhost from classification
https://bugs.webkit.org/show_bug.cgi?id=195474
<rdar://problem/47520577>

Reviewed by Brent Fulgham.

Source/WebKit:

This patch allows for localhost to be excluded from classification and
treatment as a prevalent resource.

* NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
(WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
(WebKit::ResourceLoadStatisticsDatabaseStore::reclassifyResources):
    Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
(WebKit::ResourceLoadStatisticsDatabaseStore::setPrevalentResource):
    Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
(WebKit::ResourceLoadStatisticsDatabaseStore::isPrevalentResource const):
    Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
(WebKit::ResourceLoadStatisticsDatabaseStore::isVeryPrevalentResource const):
    Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
(WebKit::ResourceLoadStatisticsDatabaseStore::setVeryPrevalentResource):
    Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
* NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
* NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
(WebKit::ResourceLoadStatisticsMemoryStore::ResourceLoadStatisticsMemoryStore):
(WebKit::ResourceLoadStatisticsMemoryStore::classifyPrevalentResources):
    Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
(WebKit::ResourceLoadStatisticsMemoryStore::setPrevalentResource):
    Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
(WebKit::ResourceLoadStatisticsMemoryStore::isPrevalentResource const):
    Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
(WebKit::ResourceLoadStatisticsMemoryStore::isVeryPrevalentResource const):
    Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
(WebKit::ResourceLoadStatisticsMemoryStore::setVeryPrevalentResource):
    Makes use of the new ResourceLoadStatisticsMemoryStore::shouldSkip().
* NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
* NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
(WebKit::ResourceLoadStatisticsStore::ResourceLoadStatisticsStore):
    Now takes a ShouldIncludeLocalhost parameter.
(WebKit::ResourceLoadStatisticsStore::shouldSkip const):
    Convenience function, currently supporting the localhost exclusion.
(WebKit::ResourceLoadStatisticsStore::setIsRunningTest):
    Test infrastructure.
* NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
* NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
(WebKit::WebResourceLoadStatisticsStore::setIsRunningTest):
    Test infrastructure.
(WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore):
    Now takes a ShouldIncludeLocalhost parameter.
* NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
    Defines the new ShouldIncludeLocalhost boolean enum.
* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::setIsRunningResourceLoadStatisticsTest):
    Test infrastructure.
* NetworkProcess/NetworkProcess.h:
* NetworkProcess/NetworkProcess.messages.in:
* NetworkProcess/NetworkSession.cpp:
(WebKit::NetworkSession::setResourceLoadStatisticsEnabled):
    Forwards the localhost setting to the create function.
* NetworkProcess/NetworkSession.h:
* NetworkProcess/NetworkSessionCreationParameters.cpp:
(WebKit::NetworkSessionCreationParameters::encode const):
(WebKit::NetworkSessionCreationParameters::decode):
* NetworkProcess/NetworkSessionCreationParameters.h:
    New parameter called shouldIncludeLocalhostInResourceLoadStatistics.
* NetworkProcess/cocoa/NetworkSessionCocoa.mm:
(WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
    Picks up the localhost setting from the parameters.
* UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
(WKWebsiteDataStoreSetStatisticsIsRunningTest):
    Test infrastructure.
* UIProcess/API/C/WKWebsiteDataStoreRef.h:
* UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::setIsRunningResourceLoadStatisticsTest):
    Test infrastructure.
* UIProcess/Network/NetworkProcessProxy.h:
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::ensureNetworkProcess):
    Picks up the localhost setting from the WebsiteDataStore parameters.
* UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
(WebKit::WebsiteDataStore::parameters):
    Makes sure Safari does not exclude localhost.
* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::setIsRunningResourceLoadStatisticsTest):
    Test infrastructure.
* UIProcess/WebsiteData/WebsiteDataStore.h:

Tools:

This patch allows for localhost to be excluded from classification and
treatment as a prevalent resource.

The WebKit Tools change adds a new function called
testRunner.setStatisticsIsRunningTest() which can be used to control this
behavior.

* WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
* WebKitTestRunner/InjectedBundle/TestRunner.cpp:
(WTR::TestRunner::setStatisticsIsRunningTest):
* WebKitTestRunner/InjectedBundle/TestRunner.h:
* WebKitTestRunner/TestController.cpp:
(WTR::TestController::setStatisticsIsRunningTest):
* WebKitTestRunner/TestController.h:
* WebKitTestRunner/TestInvocation.cpp:
(WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):

LayoutTests:

This patch makes sure that all test cases that need to, call the enableFeature()
function in http/tests/resourceLoadStatistics/resources/util.js.

The enableFeature() now calls the new function testRunner.setStatisticsIsRunningTest().

* http/tests/resourceLoadStatistics/do-not-block-top-level-navigation-redirect.html:
* http/tests/resourceLoadStatistics/non-sandboxed-iframe-redirect-ip-to-localhost-to-ip.html:
* http/tests/resourceLoadStatistics/prevalent-resource-with-user-interaction.html:
* http/tests/resourceLoadStatistics/resources/set-cookie-on-redirect.php:
* http/tests/resourceLoadStatistics/resources/util.js:
(setEnableFeature):
* http/tests/storageAccess/has-storage-access-from-prevalent-domain-with-user-interaction.html:
* http/tests/storageAccess/request-and-grant-access-cross-origin-sandboxed-iframe-from-prevalent-domain-with-user-interaction.html:
* http/tests/storageAccess/request-and-grant-access-cross-origin-sandboxed-iframe-from-prevalent-domain-without-user-interaction.html:
* http/tests/storageAccess/request-and-grant-access-cross-origin-sandboxed-iframe.html:
* http/tests/storageAccess/request-storage-access-cross-origin-sandboxed-iframe-with-unique-origin.html:
* http/tests/storageAccess/request-storage-access-same-origin-iframe.html:
* http/tests/storageAccess/request-storage-access-same-origin-sandboxed-iframe.html:
* http/tests/storageAccess/request-storage-access-top-frame.html:

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

5 months ago[ews-build] Disable waterfall and console view for ews-build.webkit.org
aakash_jain@apple.com [Mon, 11 Mar 2019 16:56:57 +0000 (16:56 +0000)]
[ews-build] Disable waterfall and console view for ews-build.webkit.org
https://bugs.webkit.org/show_bug.cgi?id=195560

Reviewed by Lucas Forschler.

* BuildSlaveSupport/ews-build/master.cfg:

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

5 months agoUnreviewed, rolling out r242698.
achristensen@apple.com [Mon, 11 Mar 2019 16:50:32 +0000 (16:50 +0000)]
Unreviewed, rolling out r242698.

API test crashes on bots.

Reverted changeset:

"Add a WKContentRuleList variant that uses copied memory
instead of mmap'd shared memory for class A containerized
apps"
https://bugs.webkit.org/show_bug.cgi?id=195511
https://trac.webkit.org/changeset/242698

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

5 months ago[WPE] Enable web process sandbox
mcatanzaro@igalia.com [Mon, 11 Mar 2019 16:47:21 +0000 (16:47 +0000)]
[WPE] Enable web process sandbox
https://bugs.webkit.org/show_bug.cgi?id=195169

Reviewed by Daniel Bates.

.:

* Source/cmake/BubblewrapSandboxChecks.cmake: Added.
* Source/cmake/OptionsGTK.cmake:
* Source/cmake/OptionsWPE.cmake:

Source/WebKit:

* PlatformWPE.cmake:
* UIProcess/Launcher/glib/BubblewrapLauncher.cpp:
(WebKit::bubblewrapSpawn):

Tools:

* wpe/install-dependencies:
* wpe/jhbuild.modules:

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

5 months ago[ews-app] Use port 17000 for worker communication
aakash_jain@apple.com [Mon, 11 Mar 2019 16:40:55 +0000 (16:40 +0000)]
[ews-app] Use port 17000 for worker communication
https://bugs.webkit.org/show_bug.cgi?id=195558

Reviewed by Lucas Forschler.

* BuildSlaveSupport/ews-build/master.cfg:

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

5 months ago[ews-build] unit-tests fail when passwords.json is missing
aakash_jain@apple.com [Mon, 11 Mar 2019 16:38:06 +0000 (16:38 +0000)]
[ews-build] unit-tests fail when passwords.json is missing
https://bugs.webkit.org/show_bug.cgi?id=195557

Reviewed by Lucas Forschler.

* BuildSlaveSupport/ews-build/loadConfig.py:
(loadBuilderConfig):
* BuildSlaveSupport/ews-build/loadConfig_unittest.py:
(ConfigDotJSONTest.test_configuration):
* BuildSlaveSupport/ews-build/master.cfg:

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

5 months agoUnreviewed, rolling out r242702.
tsavell@apple.com [Mon, 11 Mar 2019 16:25:41 +0000 (16:25 +0000)]
Unreviewed, rolling out r242702.

Broke High Sierra builders.

Reverted changeset:

"Add utility function to allow easy reverse range-based
iteration of a container"
https://bugs.webkit.org/show_bug.cgi?id=195542
https://trac.webkit.org/changeset/242702

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

5 months agoUnreviewed, rolling out r242697.
tsavell@apple.com [Mon, 11 Mar 2019 15:55:07 +0000 (15:55 +0000)]
Unreviewed, rolling out r242697.

Broke internal builders.

Reverted changeset:

"Optimizing loads when creating new pages"
https://bugs.webkit.org/show_bug.cgi?id=195516
https://trac.webkit.org/changeset/242697

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

5 months agoUnreviewed GTK test gardening
jfernandez@igalia.com [Mon, 11 Mar 2019 15:38:13 +0000 (15:38 +0000)]
Unreviewed GTK test gardening
https://bugs.webkit.org/show_bug.cgi?id=195551

Unreviewed test gardening.

Mark the text-transform-capitilize-026.html as flaky for all platforms.

* TestExpectations:

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

5 months agoUnreviewed, Non-GStreamer-GL build fix after r242701.
philn@webkit.org [Mon, 11 Mar 2019 15:26:04 +0000 (15:26 +0000)]
Unreviewed, Non-GStreamer-GL build fix after r242701.

* platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
(WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):

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

5 months agoAdd utility function to allow easy reverse range-based iteration of a container
commit-queue@webkit.org [Mon, 11 Mar 2019 15:25:08 +0000 (15:25 +0000)]
Add utility function to allow easy reverse range-based iteration of a container
https://bugs.webkit.org/show_bug.cgi?id=195542

Patch by Sam Weinig <sam@webkit.org> on 2019-03-11
Reviewed by Antti Koivisto.

Source/WTF:

Add functions to create an IteratorRange<T> that will iterate a container backwards. It
works with any container that is compatible with std::rbegin() and std::rend(). It is
expected to be used in conjunction with range-based for-loops like so:

for (auto& value : WTF::makeReversedRange(myContainer))
    ...

* wtf/IteratorRange.h:
(WTF::makeReversedRange):

Tools:

* TestWebKitAPI/CMakeLists.txt:
* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WTF/IteratorRange.cpp: Added.
(TestWebKitAPI::TEST):
Add test to ensure WTF::makeReversedRange() works correctly and uses the correct types.

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

5 months ago[GStreamer][v4l2] Synchronous video texture flushing support
philn@webkit.org [Mon, 11 Mar 2019 14:41:39 +0000 (14:41 +0000)]
[GStreamer][v4l2] Synchronous video texture flushing support
https://bugs.webkit.org/show_bug.cgi?id=195453

Reviewed by Xabier Rodriguez-Calvar.

The v4l2 video decoder currently requires that downstream users of
the graphics resources complete any pending draw call and release
resources before returning from the DRAIN query.

To accomplish this the player monitors the pipeline and whenever a
v4l2 decoder is added, synchronous video texture flushing support
is enabled. Additionally and for all decoder configurations, a
flush is performed before disposing of the player.

* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
(WebCore::MediaPlayerPrivateGStreamer::playbinDeepElementAddedCallback):
Monitor elements added to the decodebin bin.
(WebCore::MediaPlayerPrivateGStreamer::decodebinElementAdded): Set
a flag if a v4l2 decoder was added in decodebin.
(WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Connect
to the deep-element-added signal so as to monitor pipeline
topology updates.
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
(WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
Flush video texture before disposing of the player.
(WebCore::MediaPlayerPrivateGStreamerBase::flushCurrentBuffer):
Synchronously flush if the pipeline contains a v4l2 decoder.
(WebCore::MediaPlayerPrivateGStreamerBase::createGLAppSink): Monitor push events only.
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
* platform/graphics/texmap/TextureMapperPlatformLayerProxy.cpp:
(WebCore::TextureMapperPlatformLayerProxy::pushNextBuffer): New
boolean flag used mostly to trigger synchronous flush conditions.
(WebCore::TextureMapperPlatformLayerProxy::dropCurrentBufferWhilePreservingTexture):
Optionally drop the current buffer in a synchronous manner. By
default the method keeps operating asynchronously.
* platform/graphics/texmap/TextureMapperPlatformLayerProxy.h:

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

5 months agoRename contentOffsetInCompostingLayer to contentOffsetInCompositingLayer
antti@apple.com [Mon, 11 Mar 2019 12:58:57 +0000 (12:58 +0000)]
Rename contentOffsetInCompostingLayer to contentOffsetInCompositingLayer
https://bugs.webkit.org/show_bug.cgi?id=195553

Reviewed by Simon Fraser.

Less composting, more compositing.

* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateBackdropFiltersGeometry):
(WebCore::RenderLayerBacking::resetContentsRect):
(WebCore::RenderLayerBacking::updateChildClippingStrategy):
(WebCore::RenderLayerBacking::updateImageContents):
(WebCore::RenderLayerBacking::contentOffsetInCompositingLayer const):
(WebCore::RenderLayerBacking::contentsBox const):
(WebCore::RenderLayerBacking::backgroundBoxForSimpleContainerPainting const):
(WebCore::RenderLayerBacking::contentOffsetInCompostingLayer const): Deleted.
* rendering/RenderLayerBacking.h:

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

5 months agoInvalid flags in a RegExp literal should be an early SyntaxError
ross.kirsling@sony.com [Mon, 11 Mar 2019 06:20:53 +0000 (06:20 +0000)]
Invalid flags in a RegExp literal should be an early SyntaxError
https://bugs.webkit.org/show_bug.cgi?id=195514

Reviewed by Darin Adler.

JSTests:

* test262/expectations.yaml:
Mark 4 test cases as passing.

* stress/regexp-syntax-error-invalid-flags.js:
* stress/regress-161995.js: Removed.
Update existing test, merging in an older test for the same behavior.

Source/JavaScriptCore:

Currently we're throwing a *runtime* SyntaxError; this should occur at parse time.

  12.2.8.1 Static Semantics: Early Errors
    PrimaryExpression : RegularExpressionLiteral
      - It is a Syntax Error if BodyText of RegularExpressionLiteral cannot be recognized
        using the goal symbol Pattern of the ECMAScript RegExp grammar specified in 21.2.1.
      - It is a Syntax Error if FlagText of RegularExpressionLiteral contains any code points
        other than "g", "i", "m",  "s", "u", or "y", or if it contains the same code point more than once.

In fixing this, let's also move flag handling from runtime/ to yarr/.

* yarr/YarrSyntaxChecker.cpp:
(JSC::Yarr::checkSyntax):
Check flags before checking pattern.

* CMakeLists.txt:
* JavaScriptCore.xcodeproj/project.pbxproj:
* Sources.txt:
* bytecompiler/NodesCodegen.cpp:
(JSC::RegExpNode::emitBytecode):
* inspector/ContentSearchUtilities.cpp:
(Inspector::ContentSearchUtilities::findMagicComment):
* runtime/CachedTypes.cpp:
* runtime/RegExp.cpp:
(JSC::RegExp::RegExp):
(JSC::RegExp::createWithoutCaching):
(JSC::RegExp::create):
(JSC::regExpFlags): Deleted.
* runtime/RegExp.h:
* runtime/RegExpCache.cpp:
(JSC::RegExpCache::lookupOrCreate):
(JSC::RegExpCache::ensureEmptyRegExpSlow):
* runtime/RegExpCache.h:
* runtime/RegExpConstructor.cpp:
(JSC::toFlags):
(JSC::regExpCreate):
(JSC::constructRegExp):
* runtime/RegExpKey.h:
(JSC::RegExpKey::RegExpKey):
(WTF::HashTraits<JSC::RegExpKey>::constructDeletedValue):
(WTF::HashTraits<JSC::RegExpKey>::isDeletedValue):
(): Deleted.
* runtime/RegExpPrototype.cpp:
(JSC::regExpProtoFuncCompile):
* testRegExp.cpp:
(parseRegExpLine):
* yarr/RegularExpression.cpp:
(JSC::Yarr::RegularExpression::Private::compile):
* yarr/YarrFlags.cpp: Added.
(JSC::Yarr::parseFlags):
* yarr/YarrFlags.h: Added.
* yarr/YarrInterpreter.h:
(JSC::Yarr::BytecodePattern::ignoreCase const):
(JSC::Yarr::BytecodePattern::multiline const):
(JSC::Yarr::BytecodePattern::sticky const):
(JSC::Yarr::BytecodePattern::unicode const):
(JSC::Yarr::BytecodePattern::dotAll const):
* yarr/YarrPattern.cpp:
(JSC::Yarr::YarrPattern::compile):
(JSC::Yarr::YarrPattern::YarrPattern):
(JSC::Yarr::YarrPattern::dumpPattern):
* yarr/YarrPattern.h:
(JSC::Yarr::YarrPattern::global const):
(JSC::Yarr::YarrPattern::ignoreCase const):
(JSC::Yarr::YarrPattern::multiline const):
(JSC::Yarr::YarrPattern::sticky const):
(JSC::Yarr::YarrPattern::unicode const):
(JSC::Yarr::YarrPattern::dotAll const):
Move flag handling to Yarr and modernize API.

Source/WebCore:

* bindings/js/SerializedScriptValue.cpp:
(WebCore::CloneDeserializer::readTerminal):
Consume YarrFlags.

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

5 months agoAdd a WKContentRuleList variant that uses copied memory instead of mmap'd shared...
commit-queue@webkit.org [Mon, 11 Mar 2019 06:04:00 +0000 (06:04 +0000)]
Add a WKContentRuleList variant that uses copied memory instead of mmap'd shared memory for class A containerized apps
https://bugs.webkit.org/show_bug.cgi?id=195511
<rdar://problem/44873269>

Patch by Alex Christensen <achristensen@webkit.org> on 2019-03-10
Reviewed by Darin Adler.

Source/WebKit:

* NetworkProcess/NetworkContentRuleListManager.cpp:
(WebKit::NetworkContentRuleListManager::addContentRuleLists):
* NetworkProcess/NetworkContentRuleListManager.h:
* NetworkProcess/cache/NetworkCacheFileSystem.cpp:
(WebKit::NetworkCache::pathRegisteredAsUnsafeToMemoryMapForTesting):
(WebKit::NetworkCache::registerPathAsUnsafeToMemoryMapForTesting):
(WebKit::NetworkCache::isSafeToUseMemoryMapForPath):
* NetworkProcess/cache/NetworkCacheFileSystem.h:
* Shared/WebCompiledContentRuleList.cpp:
(WebKit::WebCompiledContentRuleList::usesCopiedMemory const):
(WebKit::WebCompiledContentRuleList::conditionsApplyOnlyToDomain const):
(WebKit::WebCompiledContentRuleList::filtersWithoutConditionsBytecode const):
(WebKit::WebCompiledContentRuleList::filtersWithConditionsBytecode const):
(WebKit::WebCompiledContentRuleList::topURLFiltersBytecode const):
(WebKit::WebCompiledContentRuleList::actions const):
* Shared/WebCompiledContentRuleList.h:
* Shared/WebCompiledContentRuleListData.cpp:
(WebKit::WebCompiledContentRuleListData::size const):
(WebKit::WebCompiledContentRuleListData::dataPointer const):
(WebKit::WebCompiledContentRuleListData::encode const):
(WebKit::WebCompiledContentRuleListData::decode):
* Shared/WebCompiledContentRuleListData.h:
(WebKit::WebCompiledContentRuleListData::WebCompiledContentRuleListData):
* UIProcess/API/APIContentRuleList.cpp:
(API::ContentRuleList::usesCopiedMemory const):
* UIProcess/API/APIContentRuleList.h:
* UIProcess/API/APIContentRuleListStore.cpp:
(API::getData):
(API::decodeContentRuleListMetaData):
(API::ContentRuleListStore::readContentsOfFile):
(API::MappedOrCopiedData::dataPointer const):
(API::openAndMapOrCopyContentRuleList):
(API::compiledToFile):
(API::createExtension):
(API::ContentRuleListStore::lookupContentRuleList):
(API::ContentRuleListStore::compileContentRuleList):
(API::ContentRuleListStore::getContentRuleListSource):
(API::openAndMapContentRuleList): Deleted.
* UIProcess/API/APIContentRuleListStore.h:
* UIProcess/API/Cocoa/APIContentRuleListStoreCocoa.mm:
(API::ContentRuleListStore::readContentsOfFile):
* UIProcess/API/Cocoa/WKContentRuleListStore.mm:
(+[WKContentRuleListStore _registerPathAsUnsafeToMemoryMapForTesting:]):
* UIProcess/API/Cocoa/WKContentRuleListStorePrivate.h:
* UIProcess/API/Cocoa/_WKUserContentFilter.mm:
(-[_WKUserContentFilter usesCopiedMemory]):
* UIProcess/API/Cocoa/_WKUserContentFilterPrivate.h:
* WebProcess/UserContent/WebUserContentController.cpp:
(WebKit::WebUserContentController::addContentRuleLists):
* WebProcess/UserContent/WebUserContentController.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::m_hostFileDescriptor):

Tools:

* TestWebKitAPI/Tests/WebKitCocoa/WKContentExtensionStore.mm:
(-[TestSchemeHandlerSubresourceShouldBeBlocked webView:startURLSchemeTask:]):
(-[TestSchemeHandlerSubresourceShouldBeBlocked webView:stopURLSchemeTask:]):
(TEST_F):

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

5 months agoOptimizing loads when creating new pages
jiewen_tan@apple.com [Mon, 11 Mar 2019 03:41:13 +0000 (03:41 +0000)]
Optimizing loads when creating new pages
https://bugs.webkit.org/show_bug.cgi?id=195516
<rdar://problem/48738086>

Reviewed by Darin Adler.

This patch adds hooks in WebPageProxy::createNewPage to optimize loads, and moves the creationParameters
of API::NavigationAction from UI clients to WebPageProxy::createNewPage. Also, we now pass the whole
API::NavigationAction to the load optimizer instead of the request within.

* UIProcess/API/APINavigationAction.h:
* UIProcess/API/APIUIClient.h:
(API::UIClient::createNewPage):
* UIProcess/API/C/WKPage.cpp:
(WKPageSetPageUIClient):
* UIProcess/API/glib/WebKitUIClient.cpp:
* UIProcess/Cocoa/NavigationState.mm:
(WebKit::tryOptimizingLoad):
(WebKit::tryInterceptNavigation):
(WebKit::NavigationState::NavigationClient::decidePolicyForNavigationAction):
* UIProcess/Cocoa/UIDelegate.h:
* UIProcess/Cocoa/UIDelegate.mm:
(WebKit::UIDelegate::UIClient::createNewPage):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::decidePolicyForNavigationAction):
(WebKit::tryOptimizingLoad):
(WebKit::WebPageProxy::createNewPage):
* UIProcess/WebPageProxy.h:

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

5 months agoAdd SPI to retrieve the set of text inputs in a given rect, and later focus one
timothy_horton@apple.com [Mon, 11 Mar 2019 03:32:50 +0000 (03:32 +0000)]
Add SPI to retrieve the set of text inputs in a given rect, and later focus one
https://bugs.webkit.org/show_bug.cgi?id=195499

Reviewed by Darin Adler.

Source/WebCore:

New API tests: WebKit.RequestTextInputContext and WebKit.FocusTextInputContext

* WebCore.xcodeproj/project.pbxproj:
* dom/Document.cpp:
(WebCore::Document::identifierForElement):
(WebCore::Document::elementWithIdentifier):
(WebCore::Document::identifiedElementWasRemovedFromDocument):
* dom/Document.h:
Add a mechanism where Document will vend an ObjectIdentifier for a given
element, and can (if possible) retrieve that element later.

* dom/Element.cpp:
(WebCore::Element::removedFromAncestor):
If an Element has an identifier created for it, inform Document to remove
it from the identifier map when the element is detached.

(WebCore::Element::createElementIdentifier):
* dom/Element.h:
* dom/ElementIdentifier.h: Added.
* dom/ElementRareData.cpp:
* dom/ElementRareData.h:
(WebCore::ElementRareData::hasElementIdentifier const):
(WebCore::ElementRareData::setHasElementIdentifier):
(WebCore::ElementRareData::ElementRareData):
Store a bit indicating if the Element has had a identifier created for it,
so that we can avoid a hash lookup on every Element removal.

* dom/Node.h:
* html/HTMLTextFormControlElement.h:

Source/WebKit:

* Scripts/webkit/messages.py:
* Shared/TextInputContext.cpp: Added.
(IPC::ArgumentCoder<WebKit::TextInputContext>::encode):
(IPC::ArgumentCoder<WebKit::TextInputContext>::decode):
* Shared/TextInputContext.h: Added.
(WebKit::TextInputContext::operator== const):
Add TextInputContext, which represents a minimal set of information
about a text field.

* Sources.txt:
* SourcesCocoa.txt:
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _requestTextInputContextsInRect:completionHandler:]):
(-[WKWebView _focusTextInputContext:completionHandler:]):
* UIProcess/API/Cocoa/WKWebViewPrivate.h:
Add SPI that allows clients to asynchronously request text input
contexts for a given rect, and later focus a given context.

* UIProcess/API/Cocoa/_WKTextInputContext.h: Added.
* UIProcess/API/Cocoa/_WKTextInputContext.mm: Added.
(-[_WKTextInputContext _initWithTextInputContext:]):
(-[_WKTextInputContext boundingRect]):
(-[_WKTextInputContext _textInputContext]):
(-[_WKTextInputContext isEqual:]):
(-[_WKTextInputContext hash]):
(-[_WKTextInputContext copyWithZone:]):
* UIProcess/API/Cocoa/_WKTextInputContextInternal.h: Added.
Add an SPI object that exposes a read-only window on a TextInputContext to clients.

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::textInputContextsInRect):
(WebKit::WebPageProxy::focusTextInputContext):
* UIProcess/WebPageProxy.h:
Plumbing from WKWebView<->WebPage.

* WebKit.xcodeproj/project.pbxproj:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::elementRectInWindowCoordinates):
(WebKit::isEditableTextInputElement):
(WebKit::WebPage::textInputContextsInRect):
Search the DOM for text input contexts: <input type='text'> (or other
form fields that fall back on text field behavior), <textarea>, and
contenteditable roots. Store the WebPage, Document, and Element identifiers
so that we can find the element again later.

(WebKit::WebPage::focusTextInputContext):
Find the element for a given (web page, document, element) triple and focus it,
if it's still available.

* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:

Tools:

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebKitCocoa/RequestTextInputContext.mm: Added.
(-[WKWebView synchronouslyRequestTextInputContextsInRect:]):
(-[WKWebView synchronouslyFocusTextInputContext:]):
(applyStyle):
(applyIframe):
(TEST):
Add some tests for this SPI.

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

5 months agoiOS: Using ⌥ to scroll horizontally is no different than arrow key
timothy_horton@apple.com [Mon, 11 Mar 2019 02:54:55 +0000 (02:54 +0000)]
iOS: Using ⌥ to scroll horizontally is no different than arrow key
https://bugs.webkit.org/show_bug.cgi?id=195268
<rdar://problem/48326682>

Reviewed by Brent Fulgham.

* UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:inDirection:]):
(-[WKContentView keyboardScrollViewAnimator:distanceForIncrement:]): Deleted.
* UIProcess/ios/WKKeyboardScrollingAnimator.h:
* UIProcess/ios/WKKeyboardScrollingAnimator.mm:
(-[WKKeyboardScrollingAnimator keyboardScrollForEvent:]):
(-[WKKeyboardScrollViewAnimator setDelegate:]):
(-[WKKeyboardScrollViewAnimator distanceForIncrement:inDirection:]):
(-[WKKeyboardScrollViewAnimator distanceForIncrement:]): Deleted.
Add a direction parameter to -distanceForIncrement:, so the client
can return a different page/document size based on the scrolling axis.
Adopt it both in the default implementation and in WKContentViewInteraction.
Make the option key scroll by page when scrolling horizontally, like it
does when scrolling vertically.

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

5 months ago[WTF] Align assumption in RunLoopWin to the other platform's RunLoop
Hironori.Fujii@sony.com [Mon, 11 Mar 2019 02:36:23 +0000 (02:36 +0000)]
[WTF] Align assumption in RunLoopWin to the other platform's RunLoop
https://bugs.webkit.org/show_bug.cgi?id=181151

Source/WTF:

Reviewed by Don Olmstead.

This patch fixes RunLoop in Windows to align it to the implementations in the other platforms
to use RunLoop more aggressively.

* wtf/RunLoop.h:
(WTF::RunLoop::Timer::Timer):
* wtf/win/MainThreadWin.cpp:
(initializeMainThreadPlatform): Call RunLoop::registerRunLoopMessageWindowClass.
* wtf/win/RunLoopWin.cpp:
(WTF::RunLoop::wndProc):
(WTF::RunLoop::iterate):
(WTF::RunLoop::stop):
PostQuitMessage is only available in the RunLoop's thread. We should post a message and call
it inside this task.

(WTF::RunLoop::registerRunLoopMessageWindowClass):
Changed the return type from bool to void, and added RELEASE_ASSERT to check the return value of RegisterClass.

(WTF::RunLoop::~RunLoop):
When the RunLoop's thread is freed, its associated window is freed. We do not need to do here.

(WTF::RunLoop::TimerBase::timerFired):
(WTF::RunLoop::TimerBase::TimerBase):
(WTF::RunLoop::TimerBase::start):
(WTF::RunLoop::TimerBase::stop):
(WTF::RunLoop::TimerBase::isActive const):
(WTF::RunLoop::TimerBase::secondsUntilFire const):
(WTF::generateTimerID): Deleted.
We can use TimerBase's pointer as ID since it is uintptr_t.

Tools:

Patch by Yusuke Suzuki <utatane.tea@gmail.com> on 2019-03-10
Reviewed by Don Olmstead.

* TestWebKitAPI/CMakeLists.txt:
* TestWebKitAPI/PlatformWin.cmake:
Enable TestWTF RunLoop tests in all platforms.

* TestWebKitAPI/Tests/WTF/RunLoop.cpp:
(TestWebKitAPI::DerivedOneShotTimer::DerivedOneShotTimer):
(TestWebKitAPI::DerivedOneShotTimer::fired):
(TestWebKitAPI::TEST):
Only a few platforms support nested RunLoop.

(TestWebKitAPI::DerivedRepeatingTimer::DerivedRepeatingTimer):
(TestWebKitAPI::DerivedRepeatingTimer::fired):

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

5 months agoASSERT(m_downloads.isEmpty()) fails in DownloadProxyMap::~DownloadProxyMap()
david_quesada@apple.com [Mon, 11 Mar 2019 00:27:22 +0000 (00:27 +0000)]
ASSERT(m_downloads.isEmpty()) fails in DownloadProxyMap::~DownloadProxyMap()
https://bugs.webkit.org/show_bug.cgi?id=152480

Reviewed by Chris Dumez.

Source/WebKit:

* UIProcess/Downloads/DownloadProxyMap.cpp:
(WebKit::DownloadProxyMap::downloadFinished):
    If the DownloadProxy is holding the last reference to the process pool, then
    invalidating the proxy will cause the process pool, the network process proxy,
    and this DownloadProxyMap to deallocate. Ensure that doesn't happen until this
    method has done everything it wants to do to clean up.

Tools:

Add a unit test based on Daniel Bates's test case that starts a download, ensures
there are no additional references to the process pool besides the one held by
the download, waits for the download to finish (in the sense that the
DownloadProxyMap is done tracking the DownloadProxy), and doesn't crash. For good
measure, also check that the process pool has been deallocated at the end of the
test. The test wouldn't be meaningful if the process pool were still alive.

* TestWebKitAPI/Tests/WebKitCocoa/Download.mm:
(-[WaitUntilDownloadCanceledDelegate _downloadDidStart:]):
(-[WaitUntilDownloadCanceledDelegate _downloadDidCancel:]):
    The download will be canceled because the delegate does not implement the
    method to decide the download's destination, so this is where we know the
    DownloadProxyMap is done with the DownloadProxy.
(TEST):

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

5 months agoFix some misleading function and variable names in WKContentViewInteraction.mm
wenson_hsieh@apple.com [Sun, 10 Mar 2019 23:49:10 +0000 (23:49 +0000)]
Fix some misleading function and variable names in WKContentViewInteraction.mm
https://bugs.webkit.org/show_bug.cgi?id=195536

Reviewed by Tim Horton.

* UIProcess/ios/WKContentViewInteraction.mm:
(shouldDeferZoomingToSelectionWhenRevealingFocusedElement):

Rename shouldZoomToRevealSelectionRect to shouldDeferZoomingToSelectionWhenRevealingFocusedElement; this
function is used to determine whether we should zoom to the selection rect when revealing the focused element,
and therefore affects whether we need to defer zooming until we get selection information.

(rectToRevealWhenZoomingToFocusedElement):
(-[WKContentView _elementDidFocus:userIsInteracting:blurPreviousNode:changingActivityState:userObject:]):

Rename shouldShowKeyboard to shouldShowInputView; this boolean indicates whether we should show not only the
keyboard, but other UI for user input such as date and select pickers.

(-[WKContentView _didReceiveEditorStateUpdateAfterFocus]):
(shouldZoomToRevealSelectionRect): Deleted.

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

5 months ago[ContentChangeObserver] Fix failing test cases
zalan@apple.com [Sun, 10 Mar 2019 20:08:54 +0000 (20:08 +0000)]
[ContentChangeObserver] Fix failing test cases
https://bugs.webkit.org/show_bug.cgi?id=195524
<rdar://problem/48745101>

Reviewed by Simon Fraser.

Source/WebCore:

1. Do not start DOM timer install observation when we already detected change at touchstart.
2. hasPendingActivity() should only care about ContentChangeObserver flags.
3. Do not try to notify the client when we are in the mouseMoved dispatch call (currently it could happen
when a timer gets intalled and removed right away).

* page/ios/ContentChangeObserver.cpp:
(WebCore::ContentChangeObserver::adjustObservedState):
(WebCore::ContentChangeObserver::isNotifyContentChangeAllowed const): Deleted.
* page/ios/ContentChangeObserver.h:
(WebCore::ContentChangeObserver::hasPendingActivity const):
(WebCore::ContentChangeObserver::isObservationTimeWindowActive const):

LayoutTests:

They've been failing ever since the 32ms fixed time window was introduced.

* fast/events/touch/ios/content-observation/click-instead-of-hover-simple.html:
* fast/events/touch/ios/content-observation/stuck-with-hover-state.html:

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

5 months agoMark two tests as failing after r242624
simon.fraser@apple.com [Sun, 10 Mar 2019 18:10:43 +0000 (18:10 +0000)]
Mark two tests as failing after r242624
https://bugs.webkit.org/show_bug.cgi?id=195531

Unreviewed test gardening.

These tests are failing:
accessibility/mac/selection-notification-focus-change.html [ Failure ]
compositing/video/video-clip-change-src.html [ ImageOnlyFailure ]

* platform/mac-wk2/TestExpectations:

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

5 months agoScrollingTree should have the final say on where layers go
simon.fraser@apple.com [Sun, 10 Mar 2019 18:03:42 +0000 (18:03 +0000)]
ScrollingTree should have the final say on where layers go
https://bugs.webkit.org/show_bug.cgi?id=195507

Reviewed by Antti Koivisto.

Source/WebCore:

Main thread layer flushing can race with scrolling tree layer changes on macOS, causing
flashing as layers jump around sometimes. We go to some lengths to avoid this by trying
not to touch properties on layers that are being interacted with (scrollableArea->setIsUserScroll in
updateScrollPositionAfterAsyncScroll()), but that's fragile.

This patch adds ScrollingTree::applyScrollingTreeLayerPositions(), which enters
ScrollingTree::applyLayerPositions() on the main thread/UI process. This traverses
the tree allowing each node to run their layer positioning logic.

For macOS WK2, this is called from TiledCoreAnimationDrawingArea::flushLayers() after flushCompositingStateIncludingSubframes().
For macOS WK2 with UI-side compositing, RemoteLayerTreeDrawingAreaProxy::commitLayerTree()
calls m_webPageProxy.scrollingCoordinatorProxy()->applyScrollingTreeLayerPositions().
iOS WK2 is unchanged, using viewportChangedViaDelegatedScrolling() which does the same thing, allowing
for the dynamic viewport changes that happen when zooming on iOS.

Testing this requires infrastructure that we don't have yet.

* page/scrolling/AsyncScrollingCoordinator.cpp:
(WebCore::AsyncScrollingCoordinator::applyScrollingTreeLayerPositions):
* page/scrolling/AsyncScrollingCoordinator.h:
* page/scrolling/ScrollingCoordinator.h:
(WebCore::ScrollingCoordinator::applyScrollingTreeLayerPositions):
* page/scrolling/ScrollingTree.cpp:
(WebCore::ScrollingTree::handleWheelEvent):
(WebCore::ScrollingTree::commitTreeState):
(WebCore::ScrollingTree::applyLayerPositions):
(WebCore::ScrollingTree::applyLayerPositionsRecursive):
* page/scrolling/ScrollingTree.h:
* page/scrolling/ScrollingTreeFrameHostingNode.cpp:
(WebCore::ScrollingTreeFrameHostingNode::applyLayerPositions):
* page/scrolling/ScrollingTreeFrameHostingNode.h:
* page/scrolling/ScrollingTreeNode.h:
* page/scrolling/ScrollingTreeScrollingNode.cpp:
(WebCore::ScrollingTreeScrollingNode::applyLayerPositions):
* page/scrolling/ScrollingTreeScrollingNode.h:
* page/scrolling/cocoa/ScrollingTreeFixedNode.h:
* page/scrolling/cocoa/ScrollingTreeFixedNode.mm:
(WebCore::ScrollingTreeFixedNode::relatedNodeScrollPositionDidChange):
* page/scrolling/cocoa/ScrollingTreeStickyNode.h:
* page/scrolling/cocoa/ScrollingTreeStickyNode.mm:
(WebCore::ScrollingTreeStickyNode::applyLayerPositions):
(WebCore::ScrollingTreeStickyNode::relatedNodeScrollPositionDidChange):
* page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.h:
* page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:
(WebCore::ScrollingTreeFrameScrollingNodeMac::applyLayerPositions):

Source/WebKit:

* UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm:
(WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
* UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.cpp:
(WebKit::RemoteScrollingCoordinatorProxy::applyScrollingTreeLayerPositions):
* UIProcess/RemoteLayerTree/RemoteScrollingCoordinatorProxy.h:
* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
(WebKit::TiledCoreAnimationDrawingArea::flushLayers):

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

5 months ago[Cocoa] Code signing fails because services are copied into XPCServices after the...
darin@apple.com [Sun, 10 Mar 2019 17:13:52 +0000 (17:13 +0000)]
[Cocoa] Code signing fails because services are copied into XPCServices after the framework is signed
https://bugs.webkit.org/show_bug.cgi?id=195523

Reviewed by Dan Bernstein.

* WebKit.xcodeproj/project.pbxproj: Make symbolic links while building the WebKit
framework instead of copying in the services after the framework is built.

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

5 months ago[iOS Simulator] LayoutTest/scrollingcoordinator/ios/nested-fixed-layer-positions...
simon.fraser@apple.com [Sun, 10 Mar 2019 05:52:26 +0000 (05:52 +0000)]
[iOS Simulator] LayoutTest/scrollingcoordinator/ios/nested-fixed-layer-positions.html is flaky fail
https://bugs.webkit.org/show_bug.cgi?id=171628

Unreviewed test gardening.

I can't reproduce flakiness for this test. Let's see if it's fixed.

* platform/ios-wk2/TestExpectations:

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

5 months ago[ios-simulator WK2] LayoutTest scrollingcoordinator/ios/non-stable-viewport-scroll...
simon.fraser@apple.com [Sun, 10 Mar 2019 05:52:24 +0000 (05:52 +0000)]
[ios-simulator WK2] LayoutTest scrollingcoordinator/ios/non-stable-viewport-scroll.html is a flaky failure
https://bugs.webkit.org/show_bug.cgi?id=168924

Unreviewed test gardening.

Let's try a new expectation for this test (it's non-flakey for me for 100 iterations).

* platform/ios-wk2/TestExpectations:
* scrollingcoordinator/ios/non-stable-viewport-scroll-expected.txt:

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

5 months agoAdd a test for scrolling tree adjustment of fixed layers (r242601)
simon.fraser@apple.com [Sun, 10 Mar 2019 05:52:21 +0000 (05:52 +0000)]
Add a test for scrolling tree adjustment of fixed layers (r242601)
https://bugs.webkit.org/show_bug.cgi?id=195521

Reviewed by Sam Weinig.

This test sets the "unstable" scrolling state (as if the user is actively scrolling) and scrolls,
then changes style to trigger a scrolling tree commit with a changed offset for a fixed layer.
The test shows the wrong fixed layer position before r242601.

Helpers are added to UIHelper to do the scroll, and to wrap setTimeout in an async function.
Sadly we have to wait about 120ms for the scrollbars to fade out.

* resources/ui-helper.js:
(window.UIHelper.async.delayFor):
(window.UIHelper.async.immediateScrollTo):
(window.UIHelper.async.immediateUnstableScrollTo):
* scrollingcoordinator/ios/ui-scroll-fixed-expected.html: Added.
* scrollingcoordinator/ios/ui-scroll-fixed.html: Added.

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

5 months agoREGRESSION (r242551): Sporadic hangs when tapping to change selection on iOS
wenson_hsieh@apple.com [Sun, 10 Mar 2019 05:43:36 +0000 (05:43 +0000)]
REGRESSION (r242551): Sporadic hangs when tapping to change selection on iOS
https://bugs.webkit.org/show_bug.cgi?id=195475
<rdar://problem/48721153>

Reviewed by Chris Dumez.

Source/WebKit:

r242551 refactored synchronous autocorrection context requests to send an async IPC message and then use
waitForAndDispatchImmediately, instead of calling sendSync. However, this exposes a couple of existing issues in
the implementation of waitForAndDispatchImmediately that causes sporadic IPC deadlocks when changing selection.

First, passing in InterruptWaitingIfSyncMessageArrives when synchronously waiting for an IPC message currently
does not fulfill its intended behavior of interrupting waiting when a sync message arrives. This is because sync
IPC messages, by default, may be dispatched while the receiver is waiting for a sync reply. This means that the
logic in Connection::SyncMessageState::processIncomingMessage to dispatch an incoming sync message on the main
thread will attempt to handle the incoming message by enqueueing it on the main thread, and then waking up the
client runloop (i.e. signaling m_waitForSyncReplySemaphore). This works in the case of sendSync since the sync
reply semaphore is used to block the main thread, but in the case of waitForAndDispatchImmediately, a different
m_waitForMessageCondition is used instead, so SyncMessageState::processIncomingMessage will only enqueue the
incoming sync message on the main thread, and not actually invoke it.

To fix this first issue, observe that there is pre-existing logic to enqueue the incoming message and signal
m_waitForMessageCondition in Connection::processIncomingMessage. This codepath is currently not taken because we
end up bailing early in the call to SyncMessageState::processIncomingMessage. Instead, we can move this early
return further down in the function, such that if there is an incoming sync message and we're waiting with the
InterruptWaitingIfSyncMessageArrives option, we will correctly enqueue the incoming message, wake the runloop,
and proceed to handle the incoming message.

The second issue is more subtle; consider the scenario in which we send a sync message A from the web process to
the UI process, and simultaneously, in the UI process, we schedule some work to be done on the main thread.
Let's additionally suppose that this scheduled work will send an IPC message B to the web process and
synchronously wait for a reply (in the case of this particular bug, this is the sync autocorrection context
request). What happens upon receiving sync message A is that the IPC thread in the UI process will schedule A on
the main thread; however, before the scheduled response to A is invoked, we will first invoke previously
scheduled work that attempts to block synchronously until a message B is received. In summary:

1. (Web process)    sends sync IPC message A to UI process.
2. (UI process)     schedules some main runloop task that will block synchronously on IPC message B.
3. (UI process)     receives sync IPC message A and schedules A on the main runloop.
4. (UI process)     carry out the task scheduled in (2) and block on B.

...and then, the UI process and web process are now deadlocked because the UI process is waiting for B to
arrive, but the web process can't send B because it's waiting for a reply for IPC message A! To fix this second
deadlock, we first make an important observation: when using sendSync, we don't run into this problem because
immediately before sending sync IPC, we will attempt to handle any incoming sync IPC messages that have been
queued up. However, when calling waitForAndDispatchImmediately, we don't have this extra step, so a deadlock may
occur in the manner described above. To fix this, we make waitForAndDispatchImmediately behave more like
sendSync, by handling all incoming sync messages prior to blocking on an IPC response.

Test: editing/selection/ios/change-selection-by-tapping.html

* Platform/IPC/Connection.cpp:
(IPC::Connection::waitForMessage):
(IPC::Connection::processIncomingMessage):

LayoutTests:

Add a new layout test that taps to change selection 20 times in a contenteditable area and additionally
disables IPC timeout, to ensure that any IPC deadlocks will result in the test failing due to timing out.

* editing/selection/ios/change-selection-by-tapping-expected.txt: Added.
* editing/selection/ios/change-selection-by-tapping.html: Added.

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

5 months ago[Apple Pay] CanMakePaymentsWithActiveCard and OpenPaymentSetup should be async messages
aestes@apple.com [Sun, 10 Mar 2019 05:29:42 +0000 (05:29 +0000)]
[Apple Pay] CanMakePaymentsWithActiveCard and OpenPaymentSetup should be async messages
https://bugs.webkit.org/show_bug.cgi?id=195526
<rdar://problem/48745636>

Reviewed by Chris Dumez.

Source/WebCore:

* Modules/applepay/PaymentCoordinatorClient.h:
* loader/EmptyClients.cpp:
* testing/MockPaymentCoordinator.cpp:
(WebCore::MockPaymentCoordinator::canMakePaymentsWithActiveCard):
(WebCore::MockPaymentCoordinator::openPaymentSetup):
* testing/MockPaymentCoordinator.h:

Source/WebKit:

* Shared/ApplePay/WebPaymentCoordinatorProxy.cpp:
(WebKit::WebPaymentCoordinatorProxy::canMakePaymentsWithActiveCard):
(WebKit::WebPaymentCoordinatorProxy::openPaymentSetup):
* Shared/ApplePay/WebPaymentCoordinatorProxy.h:
* Shared/ApplePay/WebPaymentCoordinatorProxy.messages.in:
* WebProcess/ApplePay/WebPaymentCoordinator.cpp:
(WebKit::WebPaymentCoordinator::canMakePaymentsWithActiveCard):
(WebKit::WebPaymentCoordinator::openPaymentSetup):
(WebKit::generateCanMakePaymentsWithActiveCardReplyID): Deleted.
(WebKit::generateOpenPaymentSetupReplyID): Deleted.
(WebKit::WebPaymentCoordinator::canMakePaymentsWithActiveCardReply): Deleted.
(WebKit::WebPaymentCoordinator::openPaymentSetupReply): Deleted.
* WebProcess/ApplePay/WebPaymentCoordinator.h:
* WebProcess/ApplePay/WebPaymentCoordinator.messages.in:

Source/WebKitLegacy/mac:

* WebCoreSupport/WebPaymentCoordinatorClient.h:
* WebCoreSupport/WebPaymentCoordinatorClient.mm:
(WebPaymentCoordinatorClient::canMakePaymentsWithActiveCard):
(WebPaymentCoordinatorClient::openPaymentSetup):

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

5 months ago[iOS] Remove unneeded entitlements and sandbox allowances from the Networking service
aestes@apple.com [Sun, 10 Mar 2019 05:28:48 +0000 (05:28 +0000)]
[iOS] Remove unneeded entitlements and sandbox allowances from the Networking service
https://bugs.webkit.org/show_bug.cgi?id=195527

Reviewed by Eric Carlson.

* Configurations/Network-iOS.entitlements:
* Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:

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

5 months ago[ContentChangeObserver] Click event fires immediately on hover menu at seriouseats.com
zalan@apple.com [Sun, 10 Mar 2019 04:48:34 +0000 (04:48 +0000)]
[ContentChangeObserver] Click event fires immediately on hover menu at seriouseats.com
https://bugs.webkit.org/show_bug.cgi?id=195520
<rdar://problem/48740098>

Reviewed by Simon Fraser.

Source/WebCore:

Unfortunately seriouseats has a 300ms hover intent delay to deal with accidental menupane pop-ups. This page also hides this
non-fixed width menupane using absolute positioning and negative left.

Test: fast/events/touch/ios/content-observation/move-content-from-offscreen.html

* page/ios/ContentChangeObserver.cpp:
(WebCore::ContentChangeObserver::didInstallDOMTimer):
(WebCore::ContentChangeObserver::StyleChangeScope::~StyleChangeScope):
(WebCore::ContentChangeObserver::StyleChangeScope::isConsideredHidden const): Content auhtors tend to use x - 1 values (where x = 10^y)

LayoutTests:

* fast/events/touch/ios/content-observation/move-content-from-offscreen-expected.txt: Added.
* fast/events/touch/ios/content-observation/move-content-from-offscreen.html: Added.

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

5 months agoUse modern async IPC with reply for device orientation permission
cdumez@apple.com [Sun, 10 Mar 2019 04:34:19 +0000 (04:34 +0000)]
Use modern async IPC with reply for device orientation permission
https://bugs.webkit.org/show_bug.cgi?id=195529

Reviewed by Ryosuke Niwa.

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::requestDeviceOrientationAndMotionAccess):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::shouldAllowDeviceOrientationAndMotionAccess):
(WebKit::nextDeviceOrientationAndMotionPermissionCallbackID): Deleted.
(WebKit::WebPage::didReceiveDeviceOrientationAndMotionAccessDecision): Deleted.
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:

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

5 months agoAdd assertions to help debug crash under DOMWindowExtension::suspendForPageCache()
cdumez@apple.com [Sun, 10 Mar 2019 03:26:10 +0000 (03:26 +0000)]
Add assertions to help debug crash under DOMWindowExtension::suspendForPageCache()
https://bugs.webkit.org/show_bug.cgi?id=195488

Reviewed by Ryosuke Niwa.

Try and figure out how the document can be detached from its frame while we're suspending
DOMWindowExtensions.

* page/DOMWindow.cpp:
(WebCore::DOMWindow::willDetachDocumentFromFrame):
(WebCore::DOMWindow::suspendForPageCache):
* page/DOMWindow.h:

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

5 months agoSimplify DOMWindowProperty code / handling
cdumez@apple.com [Sun, 10 Mar 2019 02:25:42 +0000 (02:25 +0000)]
Simplify DOMWindowProperty code / handling
https://bugs.webkit.org/show_bug.cgi?id=195495

Reviewed by Ryosuke Niwa.

DOMWindowProperty code was unnecessarily complex because DOMWindowExtension inherited
from it and DOMWindowExtension needs a lot of information about the global object's
lifetime to communicate to the injected bbundle client. This subclassing is also
very confusing because a DOMWindowExtension is not a *property* on the Window object.

This patch updates DOMWindowExtension to stop subclassing DOMWindowProperty and
moves all the complexity from DOMWindowProperty to DOMWindowExtension.
DOMWindowProperty is now a very simple base class which merely has a WeakPtr to
the window and getters for the window and the frame.

* Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
(WebCore::DOMWindowIndexedDatabase::DOMWindowIndexedDatabase):
(WebCore::DOMWindowIndexedDatabase::indexedDB):
* Modules/indexeddb/DOMWindowIndexedDatabase.h:
There is no reason for DOMWindowIndexedDatabase to move its IDBFactory to a
separate data member which in PageCache. Script do not run while in PageCache.
Also, frames are nulled out while in the PageCache so the indexedDB() getter
would return null anyway while in PageCache.

* css/StyleMedia.idl:
* loader/appcache/ApplicationCacheHost.cpp:
(WebCore::ApplicationCacheHost::setDOMApplicationCache):
Store a WeakPtr to the DOMApplicationCache for safety.

(WebCore::ApplicationCacheHost::dispatchDOMEvent):
Do not fire events on the DOMApplicationCache if it is frameless to maintain
previous behavior. Previously, the DOMApplicationCache would have been nulled
out when detached from its frame so we would not have fired events.

* loader/appcache/ApplicationCacheHost.h:
* loader/appcache/DOMApplicationCache.cpp:
* loader/appcache/DOMApplicationCache.h:
Remove some unnecessary complexity. The ApplicationCacheHost is owned by the
DocumentLoader, which changes on navigation. There is therefore no reason to
null out the DOMApplicationCache on the ApplicationCacheHost when its gets
detached from its frame or enters PageCache.

* page/BarProp.idl:
* page/DOMSelection.idl:
* page/DOMWindow.cpp:
(WebCore::DOMWindow::willDestroyCachedFrame):
(WebCore::DOMWindow::willDestroyDocumentInFrame):
(WebCore::DOMWindow::willDetachDocumentFromFrame):
(WebCore::DOMWindow::registerExtension):
(WebCore::DOMWindow::unregisterExtension):

(WebCore::DOMWindow::resetDOMWindowProperties): Removed.
Stop clearing some of the DOMWindow's properties when the document gets destroyed or when
the Window for the initial empty document gets reused on navigation. I think we used to
need this because DOMWindowProperty used to hold pointers to their frame. However, this
is no longer the case nowadays as DOMWindowProperty objects get their frame from their
Window.

(WebCore::DOMWindow::resetUnlessSuspendedForDocumentSuspension):
(WebCore::DOMWindow::suspendForPageCache):
(WebCore::DOMWindow::resumeFromPageCache):
* page/DOMWindow.h:
* page/DOMWindowExtension.cpp:
(WebCore::DOMWindowExtension::DOMWindowExtension):
(WebCore::DOMWindowExtension::~DOMWindowExtension):
(WebCore::DOMWindowExtension::frame const):
(WebCore::DOMWindowExtension::suspendForPageCache):
(WebCore::DOMWindowExtension::resumeFromPageCache):
(WebCore::DOMWindowExtension::willDestroyGlobalObjectInCachedFrame):
(WebCore::DOMWindowExtension::willDestroyGlobalObjectInFrame):
(WebCore::DOMWindowExtension::willDetachGlobalObjectFromFrame):
* page/DOMWindowExtension.h:
* page/DOMWindowProperty.cpp:
(WebCore::DOMWindowProperty::DOMWindowProperty):
* page/DOMWindowProperty.h:
(WebCore::DOMWindowProperty::window const):
* page/History.idl:
* page/Location.idl:
* page/Navigator.cpp:
(WebCore::Navigator::plugins):
(WebCore::Navigator::mimeTypes):
* page/PerformanceNavigation.idl:
* page/PerformanceTiming.idl:
* page/Screen.idl:
* page/VisualViewport.cpp:
(WebCore::VisualViewport::scriptExecutionContext const):
* plugins/DOMMimeTypeArray.idl:
* plugins/DOMPluginArray.idl:

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

5 months ago[ContentChangeObserver] Start observing for content change between touchEnd and mouse...
zalan@apple.com [Sun, 10 Mar 2019 00:09:05 +0000 (00:09 +0000)]
[ContentChangeObserver] Start observing for content change between touchEnd and mouseMoved start
https://bugs.webkit.org/show_bug.cgi?id=195510
<rdar://problem/48735695>

Reviewed by Simon Fraser.

Source/WebCore:

This patch covers the observation of async changes triggered by touchStart/touchEnd (animations, timers, style recalcs).

Test: fast/events/touch/ios/content-observation/visibility-change-after-touch-end.html

* page/ios/ContentChangeObserver.cpp:
(WebCore::ContentChangeObserver::didCancelTouchEvent):
(WebCore::ContentChangeObserver::adjustObservedState):
* page/ios/ContentChangeObserver.h:
(WebCore::ContentChangeObserver::setIsInBetweenTouchEndAndMouseMoved):
(WebCore::ContentChangeObserver::isInBetweenTouchEndAndMouseMoved const):
(WebCore::ContentChangeObserver::isObservingContentChanges const):

Source/WebKit:

* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::cancelPotentialTapInFrame):

LayoutTests:

* fast/events/touch/ios/content-observation/visibility-change-after-touch-end-expected.txt: Added.
* fast/events/touch/ios/content-observation/visibility-change-after-touch-end.html: Added.

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

5 months agoCompilation can be shrunk by 8 bytes
rmorisset@apple.com [Sat, 9 Mar 2019 17:29:35 +0000 (17:29 +0000)]
Compilation can be shrunk by 8 bytes
https://bugs.webkit.org/show_bug.cgi?id=195500

Reviewed by Mark Lam.

* profiler/ProfilerCompilation.cpp:
(JSC::Profiler::Compilation::Compilation):
* profiler/ProfilerCompilation.h:

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

5 months agoBinarySwitch can be shrunk by 8 bytes
rmorisset@apple.com [Sat, 9 Mar 2019 17:25:11 +0000 (17:25 +0000)]
BinarySwitch can be shrunk by 8 bytes
https://bugs.webkit.org/show_bug.cgi?id=195493

Reviewed by Mark Lam.

* jit/BinarySwitch.cpp:
(JSC::BinarySwitch::BinarySwitch):
* jit/BinarySwitch.h:

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

5 months agoAsyncStackTrace can be shrunk by 8 bytes
rmorisset@apple.com [Sat, 9 Mar 2019 17:24:16 +0000 (17:24 +0000)]
AsyncStackTrace can be shrunk by 8 bytes
https://bugs.webkit.org/show_bug.cgi?id=195491

Reviewed by Mark Lam.

* inspector/AsyncStackTrace.h:

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

5 months agoMake it clearer which data is protected by the two locks in ScrollingTree
simon.fraser@apple.com [Sat, 9 Mar 2019 02:35:57 +0000 (02:35 +0000)]
Make it clearer which data is protected by the two locks in ScrollingTree
https://bugs.webkit.org/show_bug.cgi?id=195501

Reviewed by Tim Horton.

Gather ScrollingTree member variables into two structs, and name the struct
members and the locks to make it clear which data is protected by each lock.

We only need to protect data read by multiple threads; these are the scrolling
thread, the event handling thread (which runs ThreadedScrollingTree::tryToHandleWheelEvent()),
and the main thread, which pokes various bits of pin/rubber-banding state.
Ideally the main thread would always push data to the scrolling thread via a commit,
but that's not what happens now.

Suspiciously, ScrollingTree::shouldHandleWheelEventSynchronously() uses the root node,
so should probably hold a lock shared with the scrolling thread (webkit.org/b/195502).

* page/scrolling/ScrollingTree.cpp:
(WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
(WebCore::ScrollingTree::commitTreeState):
(WebCore::ScrollingTree::setAsyncFrameOrOverflowScrollingEnabled):
(WebCore::ScrollingTree::setMainFrameScrollPosition):
(WebCore::ScrollingTree::eventTrackingTypeForPoint):
(WebCore::ScrollingTree::isRubberBandInProgress):
(WebCore::ScrollingTree::setMainFrameIsRubberBanding):
(WebCore::ScrollingTree::isScrollSnapInProgress):
(WebCore::ScrollingTree::setMainFrameIsScrollSnapping):
(WebCore::ScrollingTree::setMainFramePinState):
(WebCore::ScrollingTree::setCanRubberBandState):
(WebCore::ScrollingTree::setScrollPinningBehavior):
(WebCore::ScrollingTree::scrollPinningBehavior):
(WebCore::ScrollingTree::willWheelEventStartSwipeGesture):
(WebCore::ScrollingTree::latchedNode):
(WebCore::ScrollingTree::setLatchedNode):
(WebCore::ScrollingTree::clearLatchedNode):
(WebCore::ScrollingTree::scrollingTreeAsText):
(WebCore::ScrollingTree::touchActionDataAtPoint const):
(WebCore::ScrollingTree::mainFrameScrollPosition): Deleted.
(WebCore::ScrollingTree::mainFrameLayoutViewport): Deleted.
(WebCore::ScrollingTree::rubberBandsAtLeft): Deleted.
(WebCore::ScrollingTree::rubberBandsAtRight): Deleted.
(WebCore::ScrollingTree::rubberBandsAtBottom): Deleted.
(WebCore::ScrollingTree::rubberBandsAtTop): Deleted.
* page/scrolling/ScrollingTree.h:
(WebCore::ScrollingTree::hasLatchedNode const):
* page/scrolling/mac/ScrollingTreeScrollingNodeDelegateMac.mm:
(WebCore::ScrollingTreeScrollingNodeDelegateMac::stretchAmount):
* platform/graphics/FloatPoint.h:
(WebCore::FloatPoint::isZero const):

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

5 months agoShare some code that sets CALayer positions
simon.fraser@apple.com [Sat, 9 Mar 2019 02:35:54 +0000 (02:35 +0000)]
Share some code that sets CALayer positions
https://bugs.webkit.org/show_bug.cgi?id=195485

Reviewed by Zalan Bujtas.

Share some code between ScrollingTreeStickyNode and ScrollingTreeFixedNode that sets the position
of a CALayer given the top-left location.

* page/scrolling/cocoa/ScrollingTreeFixedNode.mm:
(WebCore::ScrollingTreeFixedNode::relatedNodeScrollPositionDidChange):
(WebCore::ScrollingTreeFixedNodeInternal::operator*): Deleted.
* page/scrolling/cocoa/ScrollingTreeStickyNode.mm:
(WebCore::ScrollingTreeStickyNode::relatedNodeScrollPositionDidChange):
(WebCore::ScrollingTreeStickyNodeInternal::operator*): Deleted.
* platform/graphics/cocoa/WebCoreCALayerExtras.h:
* platform/graphics/cocoa/WebCoreCALayerExtras.mm:
(-[CALayer _web_setLayerTopLeftPosition:]):

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

5 months agoStack overflow crash in JSC::JSObject::hasInstance.
mark.lam@apple.com [Sat, 9 Mar 2019 01:10:33 +0000 (01:10 +0000)]
Stack overflow crash in JSC::JSObject::hasInstance.
https://bugs.webkit.org/show_bug.cgi?id=195458
<rdar://problem/48710195>

Reviewed by Yusuke Suzuki.

JSTests:

* stress/stack-overflow-in-custom-hasInstance.js: Added.

Source/JavaScriptCore:

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

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

5 months agoEnable ProcessAssertions on iOS Simulator
cdumez@apple.com [Sat, 9 Mar 2019 00:59:40 +0000 (00:59 +0000)]
Enable ProcessAssertions on iOS Simulator
https://bugs.webkit.org/show_bug.cgi?id=195479

Reviewed by Alexey Proskuryakov.

Enable ProcessAssertions on iOS Simulator. We have some layout tests timing out in the
iOS Simulator due to the WebContent process suspending. Turning on ProcessAssertions in
the iOS Simulator seems to make those tests pass.

* UIProcess/ProcessAssertion.cpp:
* UIProcess/ProcessAssertion.h:
* UIProcess/ios/ProcessAssertionIOS.mm:

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

5 months ago[ iOS Simulator ] REGRESSION (r237087) Layout Test fast/viewport/ios/*-width-viewport...
ryanhaddad@apple.com [Sat, 9 Mar 2019 00:53:46 +0000 (00:53 +0000)]
[ iOS Simulator ] REGRESSION (r237087) Layout Test fast/viewport/ios/*-width-viewport-after-changing-view-scale.html is a flaky failure
https://bugs.webkit.org/show_bug.cgi?id=195341

Unreviewed test gardening.

* platform/ios-wk2/TestExpectations:

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

5 months agoAdd support for Device Orientation / Motion permission API
cdumez@apple.com [Sat, 9 Mar 2019 00:30:45 +0000 (00:30 +0000)]
Add support for Device Orientation / Motion permission API
https://bugs.webkit.org/show_bug.cgi?id=195329
<rdar://problem/47645367>

Reviewed by Geoffrey Garen.

Source/WebCore:

Add support for Device Orientation / Motion permission API:
- https://github.com/w3c/deviceorientation/issues/57

Pages can add event listeners for 'deviceorientation' / 'devicemotion' events but
such events will not be fired until the page's JavaScript calls
DeviceOrientationEvent.requestPermission() / DeviceMotionEvent.requestPermission()
and the user grants the request.

The feature is currently behind an experimental feature flag, off by default.

Tests: fast/device-orientation/device-motion-request-permission-denied.html
       fast/device-orientation/device-motion-request-permission-granted.html
       fast/device-orientation/device-motion-request-permission-user-gesture.html
       fast/device-orientation/device-orientation-request-permission-denied.html
       fast/device-orientation/device-orientation-request-permission-granted.html
       fast/device-orientation/device-orientation-request-permission-user-gesture.html

* CMakeLists.txt:
* DerivedSources-input.xcfilelist:
* DerivedSources-output.xcfilelist:
* DerivedSources.make:
* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* dom/DeviceMotionEvent.h:
* dom/DeviceMotionEvent.idl:
* dom/DeviceOrientationAndMotionAccessController.cpp: Added.
(WebCore::DeviceOrientationAndMotionAccessController::DeviceOrientationAndMotionAccessController):
(WebCore::DeviceOrientationAndMotionAccessController::shouldAllowAccess):
(WebCore::DeviceOrientationAndMotionAccessController::setAccessState):
* dom/DeviceOrientationAndMotionAccessController.h: Added.
(WebCore::DeviceOrientationAndMotionAccessController::accessState const):
* dom/DeviceOrientationEvent.h:
* dom/DeviceOrientationEvent.idl:
* dom/DeviceOrientationOrMotionEvent.cpp: Added.
(WebCore::DeviceOrientationOrMotionEvent::requestPermission):
* dom/DeviceOrientationOrMotionEvent.h: Added.
* dom/DeviceOrientationOrMotionEvent.idl: Added.
* dom/DeviceOrientationOrMotionPermissionState.h: Added.
* dom/DeviceOrientationOrMotionPermissionState.idl: Added.
* dom/Document.cpp:
(WebCore::Document::deviceOrientationAndMotionAccessController):
* dom/Document.h:
* dom/Event.cpp:
* dom/MessagePort.cpp:
* dom/Microtasks.cpp:
* page/ChromeClient.h:
* page/DOMWindow.cpp:
(WebCore::DOMWindow::addEventListener):
(WebCore::DOMWindow::deviceOrientationController const):
(WebCore::DOMWindow::deviceMotionController const):
(WebCore::DOMWindow::isAllowedToUseDeviceMotionOrientation const):
(WebCore::DOMWindow::isAllowedToAddDeviceMotionOrientationListener const):
(WebCore::DOMWindow::startListeningForDeviceOrientationIfNecessary):
(WebCore::DOMWindow::stopListeningForDeviceOrientationIfNecessary):
(WebCore::DOMWindow::startListeningForDeviceMotionIfNecessary):
(WebCore::DOMWindow::stopListeningForDeviceMotionIfNecessary):
(WebCore::DOMWindow::removeEventListener):
(WebCore::DOMWindow::removeAllEventListeners):
* page/DOMWindow.h:
* page/DeviceController.cpp:
(WebCore::DeviceController::hasDeviceEventListener const):
* page/DeviceController.h:
* page/Settings.yaml:

Source/WebKit:

Add support for Device Orientation / Motion permission API:
- https://github.com/w3c/deviceorientation/issues/57

This adds new SPI to WKUIDelegatePrivate, until we can make this API.

* Shared/WebPreferences.yaml:
* UIProcess/API/APIUIClient.h:
(API::UIClient::shouldAllowDeviceOrientationAndMotionAccess):
* UIProcess/API/C/WKPage.cpp:
(WKPageSetPageUIClient):
* UIProcess/API/C/WKPageUIClient.h:
* UIProcess/API/Cocoa/WKUIDelegate.h:
* UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
* UIProcess/Cocoa/UIDelegate.h:
* UIProcess/Cocoa/UIDelegate.mm:
(WebKit::UIDelegate::setDelegate):
(WebKit::UIDelegate::UIClient::shouldAllowDeviceOrientationAndMotionAccess):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::requestDeviceOrientationAndMotionAccess):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::shouldAllowDeviceOrientationAndMotionAccess):
* WebProcess/WebCoreSupport/WebChromeClient.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::nextDeviceOrientationAndMotionPermissionCallbackID):
(WebKit::WebPage::shouldAllowDeviceOrientationAndMotionAccess):
(WebKit::WebPage::didReceiveDeviceOrientationAndMotionAccessDecision):
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:

Tools:

Add test infrastructure to help test the Device Orientation / Motion permission API.

* WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
* WebKitTestRunner/InjectedBundle/TestRunner.cpp:
(WTR::TestRunner::setShouldAllowDeviceOrientationAndMotionAccess):
* WebKitTestRunner/InjectedBundle/TestRunner.h:
* WebKitTestRunner/TestController.cpp:
(WTR::shouldAllowDeviceOrientationAndMotionAccess):
(WTR::TestController::createWebViewWithOptions):
(WTR::TestController::resetStateToConsistentValues):
(WTR::TestController::handleDeviceOrientationAndMotionAccessRequest):
* WebKitTestRunner/TestController.h:
(WTR::TestController::setShouldAllowDeviceOrientationAndMotionAccess):
* WebKitTestRunner/TestInvocation.cpp:
(WTR::TestInvocation::didReceiveMessageFromInjectedBundle):

LayoutTests:

Add layout test coverage.

* TestExpectations:
* fast/device-orientation/device-motion-request-permission-denied-expected.txt: Added.
* fast/device-orientation/device-motion-request-permission-denied.html: Added.
* fast/device-orientation/device-motion-request-permission-granted-expected.txt: Added.
* fast/device-orientation/device-motion-request-permission-granted.html: Added.
* fast/device-orientation/device-motion-request-permission-user-gesture-expected.txt: Added.
* fast/device-orientation/device-motion-request-permission-user-gesture.html: Added.
* fast/device-orientation/device-orientation-request-permission-denied-expected.txt: Added.
* fast/device-orientation/device-orientation-request-permission-denied.html: Added.
* fast/device-orientation/device-orientation-request-permission-granted-expected.txt: Added.
* fast/device-orientation/device-orientation-request-permission-granted.html: Added.
* fast/device-orientation/device-orientation-request-permission-user-gesture-expected.txt: Added.
* fast/device-orientation/device-orientation-request-permission-user-gesture.html: Added.
* http/tests/events/device-orientation-motion-non-secure-context.html:
* http/tests/events/device-orientation-motion-secure-context-expected.txt:
* http/tests/events/device-orientation-motion-secure-context.html:
* platform/ios-wk2/TestExpectations:
* platform/ios/http/tests/events/device-orientation-motion-non-secure-context-expected.txt:
* platform/ios/http/tests/events/device-orientation-motion-secure-context-expected.txt:

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

5 months agoIntegerCheckCombiningPhase::Range can be shrunk by 8 bytes
rmorisset@apple.com [Sat, 9 Mar 2019 00:17:37 +0000 (00:17 +0000)]
IntegerCheckCombiningPhase::Range can be shrunk by 8 bytes
https://bugs.webkit.org/show_bug.cgi?id=195487

Reviewed by Saam Barati.

* dfg/DFGIntegerCheckCombiningPhase.cpp:

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

5 months agoHave the UIProcess take the UnboundedNetworking assertion when downloads are in progress.
beidson@apple.com [Fri, 8 Mar 2019 23:58:52 +0000 (23:58 +0000)]
Have the UIProcess take the UnboundedNetworking assertion when downloads are in progress.
https://bugs.webkit.org/show_bug.cgi?id=195468

Reviewed by Andy Estes.

* UIProcess/Downloads/DownloadProxyMap.cpp:
(WebKit::DownloadProxyMap::DownloadProxyMap):
(WebKit::DownloadProxyMap::createDownloadProxy): If this is the first download, and the process has the entitlement,
  take the assertion.
(WebKit::DownloadProxyMap::downloadFinished):
(WebKit::DownloadProxyMap::processDidClose):
* UIProcess/Downloads/DownloadProxyMap.h:

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

5 months ago[ContentChangeObserver] Expand "isConsideredClickable" to descendants
zalan@apple.com [Fri, 8 Mar 2019 23:51:05 +0000 (23:51 +0000)]
[ContentChangeObserver] Expand "isConsideredClickable" to descendants
https://bugs.webkit.org/show_bug.cgi?id=195478
<rdar://problem/48724935>

Reviewed by Simon Fraser.

Source/WebCore:

In StyleChangeScope we try to figure out whether newly visible content should stick (menu panes etc) by checking if it is clickable.
This works fine as long as all the visible elements are gaining new renderers through this style update processs.
However when an element becomes visible by a change other than display: (not)none, it's not sufficient to just check the element itself,
since it might not respond to click at all, while its descendants do.
A concrete example is a max-height value change on usps.com, where the max-height is on a container (menu pane).
This container itself is not clickable while most of its children are (menu items).

Test: fast/events/touch/ios/content-observation/clickable-content-is-inside-a-container.html

* page/ios/ContentChangeObserver.cpp:
(WebCore::ContentChangeObserver::StyleChangeScope::StyleChangeScope):
(WebCore::ContentChangeObserver::StyleChangeScope::~StyleChangeScope):
(WebCore::ContentChangeObserver::StyleChangeScope::isConsideredHidden const):
(WebCore::ContentChangeObserver::StyleChangeScope::isConsideredClickable const):
(WebCore::isConsideredHidden): Deleted.
* page/ios/ContentChangeObserver.h:

LayoutTests:

* fast/events/touch/ios/content-observation/clickable-content-is-inside-a-container-expected.txt: Added.
* fast/events/touch/ios/content-observation/clickable-content-is-inside-a-container.html: Added.

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

5 months agoTypeLocation can be shrunk by 8 bytes
rmorisset@apple.com [Fri, 8 Mar 2019 23:31:38 +0000 (23:31 +0000)]
TypeLocation can be shrunk by 8 bytes
https://bugs.webkit.org/show_bug.cgi?id=195483

Reviewed by Mark Lam.

* bytecode/TypeLocation.h:
(JSC::TypeLocation::TypeLocation):

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

5 months agoGetByIdStatus can be shrunk by 16 bytes
rmorisset@apple.com [Fri, 8 Mar 2019 23:24:25 +0000 (23:24 +0000)]
GetByIdStatus can be shrunk by 16 bytes
https://bugs.webkit.org/show_bug.cgi?id=195480

Reviewed by Saam Barati.

8 bytes from reordering fields
8 more bytes by making the enum State only use 1 byte.

* bytecode/GetByIdStatus.cpp:
(JSC::GetByIdStatus::GetByIdStatus):
* bytecode/GetByIdStatus.h:

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

5 months agoAdd a compare-results script to compare benchmark results
sbarati@apple.com [Fri, 8 Mar 2019 23:20:15 +0000 (23:20 +0000)]
Add a compare-results script to compare benchmark results
https://bugs.webkit.org/show_bug.cgi?id=195486
<rdar://problem/48723397>

Reviewed by Geoffrey Garen.

This patch adds a script to compare benchmark results using Welch's two-tailed t test.
Initially, this patch only reasons about PLT5/JetStream2/Speedometer2. It will be easy
to extend it to learn about our other benchmarks.

* Scripts/compare-results: Added.
(readJSONFile):
(detectJetStream2):
(JetStream2Results):
(detectSpeedometer2):
(Speedometer2Results):
(detectPLT5):
(PLT5Results):
(detectBenchmark):
(biggerIsBetter):
(ttest):
(getOptions):
(main):

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

5 months agoPutByIdVariant can be shrunk by 8 bytes
rmorisset@apple.com [Fri, 8 Mar 2019 23:19:27 +0000 (23:19 +0000)]
PutByIdVariant can be shrunk by 8 bytes
https://bugs.webkit.org/show_bug.cgi?id=195482

Reviewed by Mark Lam.

* bytecode/PutByIdVariant.h:
(JSC::PutByIdVariant::PutByIdVariant):

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

5 months ago[ContentChangeObserver] Cleanup adjustObservedState
zalan@apple.com [Fri, 8 Mar 2019 22:12:46 +0000 (22:12 +0000)]
[ContentChangeObserver] Cleanup adjustObservedState
https://bugs.webkit.org/show_bug.cgi?id=195470
<rdar://problem/48717823>

Reviewed by Simon Fraser.

This is in preparation for introducing an observation window from touchStart -> mouseMoved.
1. Cancel pending activities (future timers, pending stylesheet recalcs) when visible content change is detected.
2. The fixed time window takes care of notifying the client -timers, style recalcs during the window should not signal themselves.
3. Reset m_isObservingPendingStyleRecalc at StartedStyleRecalc instead of EndedStyleRecalc.

* page/ios/ContentChangeObserver.cpp:
(WebCore::ContentChangeObserver::domTimerExecuteDidFinish):
(WebCore::ContentChangeObserver::styleRecalcDidStart):
(WebCore::ContentChangeObserver::styleRecalcDidFinish):
(WebCore::ContentChangeObserver::adjustObservedState):
* page/ios/ContentChangeObserver.h:
(WebCore::ContentChangeObserver::hasPendingActivity const):
(WebCore::ContentChangeObserver::isObservationTimeWindowActive const):

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

5 months agoUnreviewed, follow-up after r242568
ysuzuki@apple.com [Fri, 8 Mar 2019 21:59:34 +0000 (21:59 +0000)]
Unreviewed, follow-up after r242568

Robin pointed that calculation of `numberOfChildren` and `nonEmptyIndex` is unnecessary.

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

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

5 months ago[ContentChangeObserver] Add StartedDOMTimerExecution and StartedStyleRecalc
zalan@apple.com [Fri, 8 Mar 2019 21:11:41 +0000 (21:11 +0000)]
[ContentChangeObserver] Add StartedDOMTimerExecution and StartedStyleRecalc
https://bugs.webkit.org/show_bug.cgi?id=195463
<rdar://problem/48714762>

Reviewed by Simon Fraser.

This is in preparation for introducing m_isObservingContentChanges flag to track observing state across events (touchStart -> mouseMoved).

* page/ios/ContentChangeObserver.cpp:
(WebCore::ContentChangeObserver::domTimerExecuteDidStart):
(WebCore::ContentChangeObserver::styleRecalcDidStart):
(WebCore::ContentChangeObserver::styleRecalcDidFinish):
(WebCore::ContentChangeObserver::setShouldObserveNextStyleRecalc):
(WebCore::ContentChangeObserver::adjustObservedState):
* page/ios/ContentChangeObserver.h:
(WebCore::ContentChangeObserver::isObservingPendingStyleRecalc const):
(WebCore::ContentChangeObserver::isObservingStyleRecalc const): Deleted.

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

5 months agoEnsure old tab state is cleared between iterations of run-benchmark
slewis@apple.com [Fri, 8 Mar 2019 20:52:56 +0000 (20:52 +0000)]
Ensure old tab state is cleared between iterations of run-benchmark
https://bugs.webkit.org/show_bug.cgi?id=195393
<rdar://problem/46885583>

Reviewed by Dewei Zhu.

a) ensure the default to restore state is not set
b) terminate Safari correctly
c) Set the system default to ignore Persistent State in Safari

* Scripts/webkitpy/benchmark_runner/browser_driver/osx_browser_driver.py:
(OSXBrowserDriver): fix terminate processes to call terminate before killing.
(OSXBrowserDriver.prepare_env):
(OSXBrowserDriver.restore_env):
(OSXBrowserDriver.close_browsers):
(OSXBrowserDriver._terminate_processes):
* Scripts/webkitpy/benchmark_runner/browser_driver/osx_chrome_driver.py: add bundle id
(OSXChromeDriver):
(OSXChromeCanaryDriver):
* Scripts/webkitpy/benchmark_runner/browser_driver/osx_firefox_driver.py: ditto
(OSXFirefoxDriver):
(OSXFirefoxNightlyDriver):
* Scripts/webkitpy/benchmark_runner/browser_driver/osx_safari_driver.py: add preferences to not restore state, bundle id
(OSXSafariDriver):
(OSXSafariDriver.prepare_env):

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

5 months agoAdd assertions to help debug a WebProcessCache crash
cdumez@apple.com [Fri, 8 Mar 2019 19:54:02 +0000 (19:54 +0000)]
Add assertions to help debug a WebProcessCache crash
https://bugs.webkit.org/show_bug.cgi?id=195469

Reviewed by Brady Eidson.

I suspect the process's registrableDomain in null when evictProcess() gets
called, thus crashing when lookup it up in the HashMap. Confirm this and
how this could happen via assertions.

* UIProcess/WebProcessCache.cpp:
(WebKit::WebProcessCache::evictProcess):
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::didStartProvisionalLoadForMainFrame):

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

5 months agoAX: AOM accessibleclick does not work on iOS
cfleizach@apple.com [Fri, 8 Mar 2019 19:51:07 +0000 (19:51 +0000)]
AX: AOM accessibleclick does not work on iOS
https://bugs.webkit.org/show_bug.cgi?id=195423
<rdar://problem/48682110>

Reviewed by Joanmarie Diggs.

Return this value of this method so it can be surfaced to a higher level.

* accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper _accessibilityActivate]):

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

5 months ago[JSC] We should have more WithoutTransition functions which are usable for JSGlobalOb...
ysuzuki@apple.com [Fri, 8 Mar 2019 19:33:51 +0000 (19:33 +0000)]
[JSC] We should have more WithoutTransition functions which are usable for JSGlobalObject initialization
https://bugs.webkit.org/show_bug.cgi?id=195447

Reviewed by Filip Pizlo.

This patch reduces # of unnecessary structure transitions in JSGlobalObject initialization to avoid unnecessary allocations
caused by Structure transition. One example is WeakBlock allocation for StructureTransitionTable.
To achieve this, we (1) add putDirectNonIndexAccessorWithoutTransition and putDirectNativeIntrinsicGetterWithoutTransition
to add accessor properties without transition, and (2) add NameAdditionMode::WithoutStructureTransition mode to InternalFunction::finishCreation
to use `putDirectWithoutTransition` instead of `putDirect`.

* inspector/JSInjectedScriptHostPrototype.cpp:
(Inspector::JSInjectedScriptHostPrototype::finishCreation):
* inspector/JSJavaScriptCallFramePrototype.cpp:
(Inspector::JSJavaScriptCallFramePrototype::finishCreation):
* runtime/ArrayConstructor.cpp:
(JSC::ArrayConstructor::finishCreation):
* runtime/AsyncFunctionConstructor.cpp:
(JSC::AsyncFunctionConstructor::finishCreation):
* runtime/AsyncGeneratorFunctionConstructor.cpp:
(JSC::AsyncGeneratorFunctionConstructor::finishCreation):
* runtime/BigIntConstructor.cpp:
(JSC::BigIntConstructor::finishCreation):
* runtime/BooleanConstructor.cpp:
(JSC::BooleanConstructor::finishCreation):
* runtime/DateConstructor.cpp:
(JSC::DateConstructor::finishCreation):
* runtime/ErrorConstructor.cpp:
(JSC::ErrorConstructor::finishCreation):
* runtime/FunctionConstructor.cpp:
(JSC::FunctionConstructor::finishCreation):
* runtime/FunctionPrototype.cpp:
(JSC::FunctionPrototype::finishCreation):
(JSC::FunctionPrototype::addFunctionProperties):
(JSC::FunctionPrototype::initRestrictedProperties):
* runtime/FunctionPrototype.h:
* runtime/GeneratorFunctionConstructor.cpp:
(JSC::GeneratorFunctionConstructor::finishCreation):
* runtime/InternalFunction.cpp:
(JSC::InternalFunction::finishCreation):
* runtime/InternalFunction.h:
* runtime/IntlCollatorConstructor.cpp:
(JSC::IntlCollatorConstructor::finishCreation):
* runtime/IntlDateTimeFormatConstructor.cpp:
(JSC::IntlDateTimeFormatConstructor::finishCreation):
* runtime/IntlNumberFormatConstructor.cpp:
(JSC::IntlNumberFormatConstructor::finishCreation):
* runtime/IntlPluralRulesConstructor.cpp:
(JSC::IntlPluralRulesConstructor::finishCreation):
* runtime/JSArrayBufferConstructor.cpp:
(JSC::JSGenericArrayBufferConstructor<sharingMode>::finishCreation):
* runtime/JSArrayBufferPrototype.cpp:
(JSC::JSArrayBufferPrototype::finishCreation):
* runtime/JSGenericTypedArrayViewConstructorInlines.h:
(JSC::JSGenericTypedArrayViewConstructor<ViewClass>::finishCreation):
* runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::init):
* runtime/JSObject.cpp:
(JSC::JSObject::putDirectNonIndexAccessorWithoutTransition):
(JSC::JSObject::putDirectNativeIntrinsicGetterWithoutTransition):
* runtime/JSObject.h:
* runtime/JSPromiseConstructor.cpp:
(JSC::JSPromiseConstructor::finishCreation):
* runtime/JSTypedArrayViewConstructor.cpp:
(JSC::JSTypedArrayViewConstructor::finishCreation):
* runtime/JSTypedArrayViewPrototype.cpp:
(JSC::JSTypedArrayViewPrototype::finishCreation):
* runtime/MapConstructor.cpp:
(JSC::MapConstructor::finishCreation):
* runtime/MapPrototype.cpp:
(JSC::MapPrototype::finishCreation):
* runtime/NativeErrorConstructor.cpp:
(JSC::NativeErrorConstructorBase::finishCreation):
* runtime/NullGetterFunction.h:
* runtime/NullSetterFunction.h:
* runtime/NumberConstructor.cpp:
(JSC::NumberConstructor::finishCreation):
* runtime/ObjectConstructor.cpp:
(JSC::ObjectConstructor::finishCreation):
* runtime/ProxyConstructor.cpp:
(JSC::ProxyConstructor::finishCreation):
* runtime/RegExpConstructor.cpp:
(JSC::RegExpConstructor::finishCreation):
* runtime/RegExpPrototype.cpp:
(JSC::RegExpPrototype::finishCreation):
* runtime/SetConstructor.cpp:
(JSC::SetConstructor::finishCreation):
* runtime/SetPrototype.cpp:
(JSC::SetPrototype::finishCreation):
* runtime/StringConstructor.cpp:
(JSC::StringConstructor::finishCreation):
* runtime/SymbolConstructor.cpp:
(JSC::SymbolConstructor::finishCreation):
* runtime/WeakMapConstructor.cpp:
(JSC::WeakMapConstructor::finishCreation):
* runtime/WeakSetConstructor.cpp:
(JSC::WeakSetConstructor::finishCreation):
* wasm/js/WebAssemblyCompileErrorConstructor.cpp:
(JSC::WebAssemblyCompileErrorConstructor::finishCreation):
* wasm/js/WebAssemblyInstanceConstructor.cpp:
(JSC::WebAssemblyInstanceConstructor::finishCreation):
* wasm/js/WebAssemblyLinkErrorConstructor.cpp:
(JSC::WebAssemblyLinkErrorConstructor::finishCreation):
* wasm/js/WebAssemblyMemoryConstructor.cpp:
(JSC::WebAssemblyMemoryConstructor::finishCreation):
* wasm/js/WebAssemblyModuleConstructor.cpp:
(JSC::WebAssemblyModuleConstructor::finishCreation):
* wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
(JSC::WebAssemblyRuntimeErrorConstructor::finishCreation):
* wasm/js/WebAssemblyTableConstructor.cpp:
(JSC::WebAssemblyTableConstructor::finishCreation):

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

5 months agoop_check_tdz does not def its argument
tzagallo@apple.com [Fri, 8 Mar 2019 19:18:18 +0000 (19:18 +0000)]
op_check_tdz does not def its argument
https://bugs.webkit.org/show_bug.cgi?id=192880
<rdar://problem/46221598>

Reviewed by Saam Barati.

JSTests:

* microbenchmarks/let-for-in.js: Added.
(foo):

Source/JavaScriptCore:

This prevented the for-in loop optimization in the bytecode generator, since
the analysis sees a redefinition of the loop variable.

* bytecode/BytecodeUseDef.h:
(JSC::computeDefsForBytecodeOffset):

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

5 months agoRename AssertionState::Download.
beidson@apple.com [Fri, 8 Mar 2019 19:01:31 +0000 (19:01 +0000)]
Rename AssertionState::Download.
https://bugs.webkit.org/show_bug.cgi?id=195465

Reviewed by Andy Estes.

It's (currently) about uploads and downloads.
Let's call it "UnboundedNetworking"

* NetworkProcess/Downloads/DownloadMap.cpp:
(WebKit::DownloadMap::add):

* UIProcess/ProcessAssertion.h:

* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::didSetAssertionState):

* UIProcess/ios/ProcessAssertionIOS.mm:
(WebKit::flagsForState):
(WebKit::reasonForState):

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