WebKit-https.git
2 years agoAX: [GTK] Add support to query for aria-current
jdiggs@igalia.com [Mon, 1 May 2017 16:58:00 +0000 (16:58 +0000)]
AX: [GTK] Add support to query for aria-current
https://bugs.webkit.org/show_bug.cgi?id=149016

Reviewed by Chris Fleizach.

Tools:

Implement support for "AXARIACurrent" string attribute value.

* WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:

LayoutTests:

* platform/gtk/TestExpectations: Unskip now-passing test.

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

2 years agoCleanup: Change ASCIICaseInsensitiveHash from a class to a struct
dbates@webkit.org [Mon, 1 May 2017 16:11:24 +0000 (16:11 +0000)]
Cleanup: Change ASCIICaseInsensitiveHash from a class to a struct
https://bugs.webkit.org/show_bug.cgi?id=171460

Reviewed by Sam Weinig.

All of the members of ASCIICaseInsensitiveHash have public visibility.
We are underutilizing the purpose of a class - defaults to private
visibility of members. We should change ASCIICaseInsensitiveHash from
a class to a struct, which by definition defaults to public visibility
for members.

* wtf/text/StringHash.h:

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

2 years agoREGRESSION (r216000): test-webkitpy fails after adding new soft-linked class checker
ddkilzer@apple.com [Mon, 1 May 2017 13:10:14 +0000 (13:10 +0000)]
REGRESSION (r216000): test-webkitpy fails after adding new soft-linked class checker

Unreviewed.

Follow-up fix for:
[Cocoa] Have check-webkit-style advise against use of [get…Class() alloc]
https://bugs.webkit.org/show_bug.cgi?id=171486

* Scripts/webkitpy/style/checkers/cpp.py:
(check_soft_link_class_alloc): Use (\w+) instead of ([^\s]+) to
match and capture the function name.  The latter also mistakenly
matches C-preprocessor directives.
(CppChecker.categories): Add 'runtime/soft-linked-alloc', which
is a requirement for the CppChecker class.

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

2 years agoUnreviewed GTK+ gardening. Rebaseline giantRowspan tests after r215914.
carlosgc@webkit.org [Mon, 1 May 2017 08:41:49 +0000 (08:41 +0000)]
Unreviewed GTK+ gardening. Rebaseline giantRowspan tests after r215914.

* platform/gtk/fast/table/giantRowspan-expected.txt:
* platform/gtk/fast/table/giantRowspan2-expected.txt:

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

2 years agoUnreviewed GTK+ gardening. Update expectations of several test.
carlosgc@webkit.org [Mon, 1 May 2017 08:39:39 +0000 (08:39 +0000)]
Unreviewed GTK+ gardening. Update expectations of several test.

* platform/gtk/TestExpectations:

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

2 years agoUnreviewed GTK+ gardening. Rebaseline several WPT fetch API tests.
carlosgc@webkit.org [Mon, 1 May 2017 08:07:42 +0000 (08:07 +0000)]
Unreviewed GTK+ gardening. Rebaseline several WPT fetch API tests.

* platform/gtk/imported/w3c/web-platform-tests/fetch/api/basic/request-headers.any-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/fetch/api/basic/request-headers.any.worker-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/fetch/api/basic/scheme-about.any-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/fetch/api/cors/cors-basic.any-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/fetch/api/cors/cors-basic.any.worker-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/fetch/api/cors/cors-no-preflight.any-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/fetch/api/cors/cors-no-preflight.any.worker-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/fetch/api/cors/cors-origin.any-expected.txt: Added.
* platform/gtk/imported/w3c/web-platform-tests/fetch/api/cors/cors-origin.any.worker-expected.txt: Added.

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

2 years agoAX: AccessibilityTable::ariaRowCount() and ariaColumnCount() should not return -1...
jdiggs@igalia.com [Mon, 1 May 2017 07:56:18 +0000 (07:56 +0000)]
AX: AccessibilityTable::ariaRowCount() and ariaColumnCount() should not return -1 unless that is the author-provided value
https://bugs.webkit.org/show_bug.cgi?id=171475

Reviewed by Chris Fleizach.

Source/WebCore:

If the author has provided a valid value, return it. Otherwise, return 0.

No new tests needed. Update existing test expectations to reflect the change.

* accessibility/AccessibilityTable.cpp:
(WebCore::AccessibilityTable::ariaColumnCount):
(WebCore::AccessibilityTable::ariaRowCount):

LayoutTests:

* accessibility/table-detection-expected.txt: Updated.
* accessibility/table-with-rules-expected.txt: Updated.

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

2 years agoUnreviewed GTK+ gardening. Update expectations of several test.
carlosgc@webkit.org [Mon, 1 May 2017 07:53:49 +0000 (07:53 +0000)]
Unreviewed GTK+ gardening. Update expectations of several test.

* platform/gtk/TestExpectations:

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

2 years agoAX: Implement support for ARIA "figure" and "term" roles; update AXRoleDescription...
jdiggs@igalia.com [Mon, 1 May 2017 07:49:23 +0000 (07:49 +0000)]
AX: Implement support for ARIA "figure" and "term" roles; update AXRoleDescription mapping for "feed" role
https://bugs.webkit.org/show_bug.cgi?id=171183

Reviewed by Chris Fleizach.

Source/WebCore:

Create FeedRole, FigureRole, and TermRole and map them on the Mac and Gtk
ports. Also rename AccessibilityObject::isFigure() to isFigureElement()
for clarity as this method is specific to the HTML element and not the role.

No new tests needed: We have existing tests that cover mappings. Add new test cases
to roles-exposed.html, xml-roles-exposed.html, and roles-computedRoleString.html.

* English.lproj/Localizable.strings:
* accessibility/AccessibilityNodeObject.cpp:
(WebCore::AccessibilityNodeObject::captionForFigure):
(WebCore::AccessibilityNodeObject::alternativeText):
* accessibility/AccessibilityObject.cpp:
(WebCore::initializeRoleMap):
(WebCore::AccessibilityObject::isFigureElement): Added.
(WebCore::AccessibilityObject::isFigure): Deleted.
* accessibility/AccessibilityObject.h:
* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::exposesTitleUIElement):
(WebCore::AccessibilityRenderObject::titleUIElement):
(WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
(WebCore::AccessibilityRenderObject::determineAccessibilityRole):
* accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
(atkRole):
* accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
* accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(createAccessibilityRoleMap):
(-[WebAccessibilityObjectWrapper subrole]):
(-[WebAccessibilityObjectWrapper roleDescription]):
* platform/LocalizedStrings.cpp:
(WebCore::AXFeedText):
* platform/LocalizedStrings.h:

LayoutTests:

New test cases added and expectations updated.

* accessibility/gtk/xml-roles-exposed-expected.txt:
* accessibility/gtk/xml-roles-exposed.html:
* accessibility/roles-computedRoleString.html:
* accessibility/roles-exposed.html:
* platform/gtk/accessibility/roles-exposed-expected.txt:
* platform/mac/accessibility/roles-computedRoleString-expected.txt:
* platform/mac/accessibility/roles-exposed-expected.txt:

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

2 years ago[GTK] Add automation session API
carlosgc@webkit.org [Mon, 1 May 2017 07:03:58 +0000 (07:03 +0000)]
[GTK] Add automation session API
https://bugs.webkit.org/show_bug.cgi?id=171428

Reviewed by Carlos Alberto Lopez Perez.

Source/WebCore/platform/gtk/po:

* POTFILES.in: Add WebKitAutomationSession.cpp.

Source/WebKit2:

Add new API to allow WebKitGTK+ to be controlled by automation. By default it's disabled, applications have to
explicitly call webkit_web_context_set_automation_allowed() to enabled it. When a new automation session is
requested, the signal WebKitWebContext::automation-started is emitted with a newly created
WebKitAutomationSession, similar to how WebKitWebContext::download-started works. The user should connect to it
have access to the WebKitAutomationSession and connect it its signals. When a new web view is requested to be
created in a WebKitAutomationSession, the signal WebKitAutomationSession::create-web-view is emitted. The user
should connect to it and return a WebKitWebView. The web views used for automation are special ones and need to
be created with the new WebKitWebView:is-controlled-by-automation construct property enabled, otherwise we will
refuse to create the requested browsing context.

* PlatformGTK.cmake:
* UIProcess/API/gtk/WebKitAutomationSession.cpp: Added.
(webkitAutomationSessionSetProperty):
(webkitAutomationSessionConstructed):
(webkit_automation_session_class_init):
(webkitAutomationSessionCreate):
(webkitAutomationSessionGetSession):
(webkit_automation_session_get_id):
* UIProcess/API/gtk/WebKitAutomationSession.h: Added.
* UIProcess/API/gtk/WebKitAutomationSessionPrivate.h: Added.
* UIProcess/API/gtk/WebKitWebContext.cpp:
(webkitWebContextConstructed):
(webkit_web_context_class_init):
(webkit_web_context_is_automation_allowed):
(webkit_web_context_set_automation_allowed):
(webkitWebContextCreatePageForWebView):
* UIProcess/API/gtk/WebKitWebContext.h:
* UIProcess/API/gtk/WebKitWebView.cpp:
(webkitWebViewConstructed):
(webkitWebViewSetProperty):
(webkitWebViewGetProperty):
(webkit_web_view_class_init):
(webkit_web_view_is_controlled_by_automation):
* UIProcess/API/gtk/WebKitWebView.h:
* UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
* UIProcess/API/gtk/docs/webkit2gtk-4.0.types:
* UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
* UIProcess/API/gtk/webkit2.h:

Tools:

Add an automation mode to MiniBrowser using the new API and add a unit test too.

* MiniBrowser/gtk/BrowserWindow.c:
(webViewTitleChanged):
(webViewDecidePolicy):
(newTabCallback):
(openPrivateWindow):
(browserWindowFinalize):
(browser_window_init):
(browser_window_get_or_create_web_view_for_automation):
* MiniBrowser/gtk/BrowserWindow.h:
* MiniBrowser/gtk/main.c:
(createBrowserTab):
(createWebViewForAutomationCallback):
(automationStartedCallback):
(main):
* TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
* TestWebKitAPI/Tests/WebKit2Gtk/TestAutomationSession.cpp: Added.
(testAutomationSessionRequestSession):
(beforeAll):
(afterAll):

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

2 years agoUnreviewed. Fix GTK+ debug build after r216002.
carlosgc@webkit.org [Mon, 1 May 2017 07:02:07 +0000 (07:02 +0000)]
Unreviewed. Fix GTK+ debug build after r216002.

* WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRectList.cpp:
(WebKit::wrapClientRectList):

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

2 years agoVersioning.
jmarcell@apple.com [Mon, 1 May 2017 05:02:42 +0000 (05:02 +0000)]
Versioning.

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

2 years agoDrop support for legacy ClientRect / ClientRectList
cdumez@apple.com [Mon, 1 May 2017 00:44:06 +0000 (00:44 +0000)]
Drop support for legacy ClientRect / ClientRectList
https://bugs.webkit.org/show_bug.cgi?id=171418

Reviewed by Sam Weinig.

Source/WebCore:

Drop support for legacy ClientRect / ClientRectList types now we use
DOMRect everywhere.

* CMakeLists.txt:
* DerivedSources.cpp:
* DerivedSources.make:
* WebCore.xcodeproj/project.pbxproj:
* dom/ClientRect.cpp: Removed.
* dom/ClientRect.h: Removed.
* dom/ClientRect.idl: Removed.
* dom/ClientRectList.cpp: Removed.
* dom/ClientRectList.h: Removed.
* dom/ClientRectList.idl: Removed.
* dom/DOMAllInOne.cpp:
* dom/Element.cpp:
* html/HTMLMediaElement.cpp:
* html/track/VTTRegion.cpp:
* page/DragController.cpp:

Source/WebInspectorUI:

Drop ClientRectList-related code.

* UserInterface/Models/NativeFunctionParameters.js:

Source/WebKit2:

GTK build fix.

* WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRect.cpp:
(WebKit::kit):
(WebKit::core):
(WebKit::wrapClientRect):
(webkit_dom_client_rect_constructed):
* WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRectList.cpp:
(ClientRectList::create):
(ClientRectList::items):
(ClientRectList::ClientRectList):
* WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRectListPrivate.h:
* WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMClientRectPrivate.h:
* WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMElement.cpp:
(webkit_dom_element_get_bounding_client_rect):
(webkit_dom_element_get_client_rects):

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

2 years agoInitialize a new layout state while bailing out of simple line layout only when needed.
zalan@apple.com [Mon, 1 May 2017 00:15:38 +0000 (00:15 +0000)]
Initialize a new layout state while bailing out of simple line layout only when needed.
https://bugs.webkit.org/show_bug.cgi?id=171481
<rdar://problem/31906382>

Source/WebCore:

'-webkit-border-fit: lines' requires inline box tree.
We normally bail out of simple line layout early when we see this property.
When this property is dynamically set and we already have a simple line layout context,
RenderBlockFlow::ensureLineBoxes() takes care of the switch by calling layoutLineBoxes().
This patch makes sure that we create the layout state for this (forced)line layout only when
we don't yet have one.

Reviewed by Antti Koivisto.

Test: fast/multicol/simple-line-layout-switch-to-normal-layout-while-inside-layout.html

* rendering/RenderBlockFlow.cpp:
(WebCore::PaginatedLayoutStateMaintainer::PaginatedLayoutStateMaintainer):
(WebCore::PaginatedLayoutStateMaintainer::~PaginatedLayoutStateMaintainer):
(WebCore::RenderBlockFlow::ensureLineBoxes):
* rendering/RenderView.cpp:
(WebCore::RenderView::pushLayoutStateForPaginationIfNeeded):
(WebCore::RenderView::pushLayoutStateForPagination): Deleted.
* rendering/RenderView.h:

LayoutTests:

Reviewed by Antti Koivisto.

* fast/multicol/simple-line-layout-switch-to-normal-layout-while-inside-layout-expected.txt: Added.
* fast/multicol/simple-line-layout-switch-to-normal-layout-while-inside-layout.html: Added.

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

2 years ago[Cocoa] Have check-webkit-style advise against use of [get…Class() alloc]
mitz@apple.com [Sun, 30 Apr 2017 23:39:51 +0000 (23:39 +0000)]
[Cocoa] Have check-webkit-style advise against use of [get…Class() alloc]
https://bugs.webkit.org/show_bug.cgi?id=171486

Reviewed by Sam Weinig.

* Scripts/webkitpy/style/checkers/cpp.py:
(check_soft_link_class_alloc): Added. Looks for [get…Class() alloc] and suggests
  alloc…Instance() instead.
(check_style): Invoke new check.

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

2 years agoMore fixing after r215991
beidson@apple.com [Sun, 30 Apr 2017 21:19:42 +0000 (21:19 +0000)]
More fixing after r215991
https://bugs.webkit.org/show_bug.cgi?id=171483

Source/WebKit2:

* NetworkProcess/cocoa/NetworkProcessCocoa.mm:
(WebKit::NetworkProcess::syncAllCookies):

Tools:

* TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:
(TEST):

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

2 years agoTried to fix the iOS build after r215992
mitz@apple.com [Sun, 30 Apr 2017 21:04:31 +0000 (21:04 +0000)]
Tried to fix the iOS build after r215992

* platform/ios/WebVideoFullscreenControllerAVKit.mm:

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

2 years agoFix r215991
beidson@apple.com [Sun, 30 Apr 2017 20:55:30 +0000 (20:55 +0000)]
Fix r215991
https://bugs.webkit.org/show_bug.cgi?id=171483

Unreviewed.

Source/WebCore:

* platform/spi/cf/CFNetworkSPI.h:

Source/WebKit2:

* NetworkProcess/cocoa/NetworkProcessCocoa.mm:
(WebKit::NetworkProcess::syncAllCookies):

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

2 years agoTried to fix the iOS build after r215992
mitz@apple.com [Sun, 30 Apr 2017 20:53:01 +0000 (20:53 +0000)]
Tried to fix the iOS build after r215992

* platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
(WebAVPlayerLayerView_pictureInPicturePlayerLayerView):
(WebVideoFullscreenInterfaceAVKit::setupFullscreen):

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

2 years ago[Cocoa] Replaces uses of [get…() alloc] with alloc…Instance()
mitz@apple.com [Sun, 30 Apr 2017 20:47:21 +0000 (20:47 +0000)]
[Cocoa] Replaces uses of [get…() alloc] with alloc…Instance()
https://bugs.webkit.org/show_bug.cgi?id=171485

Reviewed by Geoffrey Garen.

Source/WebCore:

* platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
(WebCore::CDMSessionAVContentKeySession::contentKeySession):
* platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm:
(WebCore::MediaPlaybackTargetPickerMac::devicePicker):
* platform/ios/ValidationBubbleIOS.mm:
(-[WebValidationBubbleTapRecognizer initWithPopoverController:]):
(WebCore::ValidationBubble::ValidationBubble):
* platform/ios/WebVideoFullscreenControllerAVKit.mm:
(WebVideoFullscreenControllerContext::setUpFullscreen):
* platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
(WebAVPlayerLayerView_pictureInPicturePlayerLayerView):
(WebVideoFullscreenInterfaceAVKit::setupFullscreen):
* platform/mac/WebVideoFullscreenInterfaceMac.mm:
(-[WebVideoFullscreenInterfaceMacObjC setUpPIPForVideoView:withFrame:inWindow:]):
* platform/network/ios/PreviewConverter.mm:
(WebCore::PreviewConverter::PreviewConverter):
* rendering/RenderThemeIOS.mm:
(WebCore::iconForAttachment):

Source/WebKit/mac:

* WebView/WebView.mm:
(-[WebUITextIndicatorData initWithImage:textIndicatorData:scale:]):
(-[WebUITextIndicatorData initWithImage:scale:]):

Source/WebKit2:

* Platform/mac/MenuUtilities.mm:
(WebKit::menuItemForTelephoneNumber):
(WebKit::menuForTelephoneNumber):

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

2 years agoUpdates to _WKWebsiteDataStoreConfiguration cookie storage location SPI.
beidson@apple.com [Sun, 30 Apr 2017 20:24:05 +0000 (20:24 +0000)]
Updates to _WKWebsiteDataStoreConfiguration cookie storage location SPI.
<rdar://problem/31906397> and https://bugs.webkit.org/show_bug.cgi?id=171483

Reviewed by Geoff Garen (and kind of Andy Estes).
Source/WebCore:

No new tests (Covered by API test).

* platform/spi/cf/CFNetworkSPI.h:

Source/WebKit2:

Updates include:
-Taking a file path as the config argument instead of a directory.
-Proper sandbox extension handling.
-Proper and thorough API test.

* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::syncAllCookies):
* NetworkProcess/NetworkProcess.h:
* NetworkProcess/NetworkProcess.messages.in:

* NetworkProcess/cocoa/NetworkProcessCocoa.mm:
(WebKit::NetworkProcess::syncAllCookies):

* NetworkProcess/mac/RemoteNetworkingContext.mm:
(WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):

* Shared/WebsiteDataStoreParameters.cpp:
(WebKit::WebsiteDataStoreParameters::encode):
(WebKit::WebsiteDataStoreParameters::decode):
* Shared/WebsiteDataStoreParameters.h:

* UIProcess/API/Cocoa/WKProcessPool.mm:
(-[WKProcessPool _syncNetworkProcessCookies]):
* UIProcess/API/Cocoa/WKProcessPoolPrivate.h:

* UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
(-[WKWebsiteDataStore _initWithConfiguration:]):

* UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
* UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
(-[_WKWebsiteDataStoreConfiguration _cookieStoragePath]):
(-[_WKWebsiteDataStoreConfiguration _setCookieStoragePath:]):
(-[_WKWebsiteDataStoreConfiguration _cookieStorageDirectory]): Deleted.
(-[_WKWebsiteDataStoreConfiguration _setCookieStorageDirectory:]): Deleted.

* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::syncNetworkProcessCookies):
* UIProcess/WebProcessPool.h:

* UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
(WebKit::WebsiteDataStore::parameters):

* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):

* UIProcess/WebsiteData/WebsiteDataStore.h:
(WebKit::WebsiteDataStore::resolvedCookieStoragePath):
(WebKit::WebsiteDataStore::resolvedCookieStorageDirectory): Deleted.

Tools:

* TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:
(TEST):

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

2 years ago<rdar://problem/31906525> WebCore-7604.1.19 has failed to build
mitz@apple.com [Sun, 30 Apr 2017 19:52:24 +0000 (19:52 +0000)]
<rdar://problem/31906525> WebCore-7604.1.19 has failed to build

* platform/ios/WebItemProviderPasteboard.mm:
(-[WebItemProviderPasteboard setItemsUsingRegistrationInfoLists:]): Resolved type ambiguity
  by using allocUIItemProviderInstance() instead of [getUIItemProviderClass() alloc].

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

2 years ago[ATK] Implement support for aria-autocomplete
jdiggs@igalia.com [Sun, 30 Apr 2017 18:12:30 +0000 (18:12 +0000)]
[ATK] Implement support for aria-autocomplete
https://bugs.webkit.org/show_bug.cgi?id=171167

Reviewed by Chris Fleizach.

Source/WebCore:

Expose ATK_STATE_SUPPORTS_AUTOCOMPLETION in the state set, and the value
of aria-autocomplete as an object attribute, for elements which indicate
they support autocompletion.

Test: accessibility/gtk/aria-autocomplete.html

* accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::supportsARIAAutoComplete):
(WebCore::AccessibilityObject::ariaAutoCompleteValue):
* accessibility/AccessibilityObject.h:
* accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
(webkitAccessibleGetAttributes):
(setAtkStateSetFromCoreObject):
* html/HTMLAttributeNames.in:

Tools:

Add "AXSupportsAutoCompletion" attribute so the presence of
ATK_STATE_SUPPORTS_AUTOCOMPLETION can be tested.

* WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
(WTR::AccessibilityUIElement::boolAttributeValue):

LayoutTests:

* accessibility/gtk/aria-autocomplete-expected.txt: Added.
* accessibility/gtk/aria-autocomplete.html: Added.

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

2 years ago[ATK] ARIA treegrid role should be exposed as ATK_ROLE_TREE_TABLE; not ATK_ROLE_TABLE
jdiggs@igalia.com [Sun, 30 Apr 2017 18:11:56 +0000 (18:11 +0000)]
[ATK] ARIA treegrid role should be exposed as ATK_ROLE_TREE_TABLE; not ATK_ROLE_TABLE
https://bugs.webkit.org/show_bug.cgi?id=171170

Reviewed by Chris Fleizach.

Source/WebCore:

AccessibilityTable::roleValue() was returning GridRole for both grid and treegrid.
Change this so that GridRole is returned for grid and TreeGridRole is returned for
treegrid. Add TreeGridRole to, or call isTable() in, methods where the behavior
should be the same as GridRole.

Test: accessibility/gtk/interface-table.html

* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::selectedChildren):
* accessibility/AccessibilityTable.cpp:
(WebCore::AccessibilityTable::roleValue):
* accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
(atkRole):
(getInterfaceMaskFromObject):
* accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper _accessibilityTableAncestor]):
(-[WebAccessibilityObjectWrapper _accessibilityTraitsFromAncestors]):
* accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(createAccessibilityRoleMap):

Tools:

Add "AXInterfaceTable" attribute to test which elements implement AtkTable.

* WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
(WTR::AccessibilityUIElement::boolAttributeValue):

LayoutTests:

Add interface-table.html to verify that all roles which have tabular functionality
implement AtkTable. Update other tests to reflect that the ARIA treegrid role maps
to our internal TreeGridRole AccessibilityRole.

* accessibility/gtk/interface-table-cell-expected.txt: Updated.
* accessibility/gtk/interface-table-expected.txt: Added.
* accessibility/gtk/interface-table.html: Added.
* accessibility/roles-computedRoleString.html: Updated.
* platform/gtk/accessibility/aria-selected-expected.txt: Updated.
* platform/gtk/accessibility/roles-exposed-expected.txt: Updated.
* platform/mac/accessibility/roles-computedRoleString-expected.txt: Updated.

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

2 years agoAdd the support for scheduling a A/B testing with a patch.
rniwa@webkit.org [Sun, 30 Apr 2017 18:11:47 +0000 (18:11 +0000)]
Add the support for scheduling a A/B testing with a patch.
https://bugs.webkit.org/show_bug.cgi?id=171209

Reviewed by Chris Dumez.

Added the support for creating a custom test group with a patch applied.

First, each repository in a repository group has a boolean indicating whether a given repository can have
a patch applied or not. When any configuration in a test group contains a patch, we create build requests
without a test specified in order to "build" those patches. These build requests have negative order numbers
to differentiate them from regular build requests. We can't simply build ones with patches since there could
be differences in SDK, build options, etc... when patches are applied.

The JSON format for commit sets returned by /api/build-requests have been changed from using an array of
commit IDs to an array of dictionaries indicate commit and acceptsPatch boolean. /api/update-triggerable now
uses a dictionary with two keys: repository and acceptsPatch to specify a set of repositories associated with
a repository group, and /privileged-api-create-test-group uses a dictionary with two keys: revision and patch
instead of a revision string to specify commit sets.

Furthermore, the syncing script's configuration have been updated to use a dictionary of repository names to
an options dictionary instead of an array of repositories names. For now, the only supported option is
acceptsPatch but will be extended when we add the support for rolling back system components.
e.g. {"WebKit": {acceptsPatch: true}, "macOS": {}} instead of ["WebKit", "macOS"]

On the UI side, InstantFileUploader has been changed to accept only one file by default, and added a new method
allowMultipleFiles() to allow multiple files to be selected for custom roots. Also replaced the input element
with type=file by a button with a custom label to show labels such as "Apply a patch" or "Add a new root"
instead of the generic label like "choose a file".

* init-database.sql: Added trigrepo_accepts_patch to triggerable_repositories to indicate whether a given
repository can have a patch applied or not. Made request_test optional in build_requests for when a build
request is created to build patches. Such a build request have a negative request_order. Updated the related
constraints accordingly.

* public/admin/triggerables.php: Added the support for updating whether a given repository can have a patch
applied in each repository group. Only show the repositories in the repository group for this purpose since
there is no way to accept a patch on a repository without it being a part of the group.
(generate_repository_form): Now takes the markup for checkboxes instead of generating one itself.
(generate_repository_checkboxes): Now takes an array of repositories to generate checkboxes. The checkbox is
shown when the repository ID exists as a key in this array, and is checked when its value is true. The new
capability to skip repositories not in the array is used to hide repositories not associated with the group
in the list of checkboxes to indicate a repository accepts a patch.

* public/api/update-triggerable.php:
(main): Now updates the description and acceptsRoots states of each repository group, and sets acceptsPatch
boolean for each repository in the group if set in the update.
(validate_repository_groups): Use a reference to $repository_groups in order to set repository_id_list, which
contains an array of repository IDs to find the existing repository group that matches the set via
RepositoryGroupFinder's find_by_repositories. Also added a various validations for acceptsRoots, a dictionary
specifying repository and acceptsPatch.

* public/include/build-requests-fetcher.php:
(BuildRequestsFetcher::fetch_commits_for_set_if_needed): Instead of returning an array of commit IDs as
"commits", it now returns an array of dictionaries with "commit" and "patch" keys specifying the commit ID
and the patch file's ID respectively as "revisionItems".
(BuildRequestsFetcher::add_uploaded_file): Added. Extracted from fetch_commits_for_set_if_needed. Used to
add either a patch file or a custom root file in the list of uploaded files in the result.

* public/include/manifest-generator.php:
(fetch_triggerables): Each element in repository group's "repositories" field is now an array of dictionaries
with "repository" and "acceptsPatch" as keys.

* public/include/repository-group-finder.php:
(RepositoryGroupFinder::__construct): Added a map for boolean indicating whether a given repository group
allows a patch on a repository. Used in /privileged-api/create-test-group.
(RepositoryGroupFinder::accepts_patch): Added.
(RepositoryGroupFinder::populate_map): Build up the map for acceptsPatch boolean per repository per group.

* public/privileged-api/create-test-group.php:
(main): Fixed a bug that we were not explicitly checking for a duplicate test group name (with a test). Create
build requests to "build" patches if there is any patch file specified.
(commit_sets_from_revision_sets): Updated to take a dictionary with "revision" and "patch" as keys to specify
a revision and a patch if any instead of just a revision string for each repository. Also validate that each
repository is allowed to have a patch once the repository group has been found for the set of repositories.
(ensure_commit_sets):

* public/v3/components/custom-analysis-task-configurator.js:
(CustomAnalysisTaskConfigurator): Added _patchUploaders as an instance variable, which is a dictionary of
configuration names to a map of InstantFileUploader's used to upload a patch. Also renamed _fileUploaders to
_customRootUploaders for clarity.
(CustomAnalysisTaskConfigurator.prototype.setCommitSets):
(CustomAnalysisTaskConfigurator.prototype.didConstructShadowTree.createRootUploader): Added.
(CustomAnalysisTaskConfigurator.prototype.didConstructShadowTree):
(CustomAnalysisTaskConfigurator.prototype._ensurePatchUploader): Added. Creates an instant file uploader for
patches. We only allow a single patch per repository.
(CustomAnalysisTaskConfigurator.prototype._computeCommitSet): Include a patch in the commit set as needed.
(CustomAnalysisTaskConfigurator.prototype._buildRevisionTable): Show the patch file uploader for repositories
which can have patches in the current repository group.
(CustomAnalysisTaskConfigurator.cssTemplate): Show borders between every rows instead of just between tbody's
now that each row can have a patch file uploader.

* public/v3/components/instant-file-uploader.js:
(InstantFileUploader): Added _fileInput and _allowMultipleFiles as instance variables. We now show a button
in the UI instead of an input with type=file. _fileInput is a hidden input with type=file used inside a click
event of the button to let the user pick a file.
(InstantFileUploader.prototype.allowMultipleFiles): Added. Allows this instance to accept multiple files.
(InstantFileUploader.prototype.didConstructShadowTree): Synthetically click on the hidden input element when
the newly added button element is clicked to open the browser's file picker.
(InstantFileUploader.prototype.render): Hide the button to add a file if this instance can only select one file
and there is already some file being uploaded in this instance.
(InstantFileUploader.htmlTemplate): Replaced the input element with type=file with a button. Its label comes
from the default slot content.

* public/v3/models/build-request.js:
(BuildRequest): Made the test optional.
(BuildRequest.prototype.isBuild): Returns true if this is a build request for building a patch.
(BuildRequest.prototype.isTest): Returns true if this is a build request for running tests.
(BuildRequest.constructBuildRequestsFromData): Create each commit log here instead of relying on CommitSet's
constructor to construct its commit logs. Also updated per the replacement of an array of commit IDs by
an array of dictionaries with commit and patch properties.

* public/v3/models/commit-set.js:
(CommitSet): Made _repositoryToCommitMap a real Map object. Also added _repositoryToPatchMap. Also got rid of
the code to instantiate commit logs since that's now done in BuildRequest.constructBuildRequestsFromData.
(CommitSet.prototype.commitForRepository):
(CommitSet.prototype.revisionForRepository):
(CommitSet.prototype.patchForRepository): Added.
(CommitSet.prototype.latestCommitTime): Modernized the code.
(CommitSet.prototype.equals): Modernized the code. Also added the check for patches.
(MeasurementCommitSet): Updated per the change to make _repositoryToCommitMap a real Map.
(CustomCommitSet.prototype.setRevisionForRepository):
(CustomCommitSet.prototype.equals): Added the check for patches.
(CustomCommitSet.prototype.revisionForRepository):
(CustomCommitSet.prototype.patchForRepository): Added.

* public/v3/models/manifest.js:
(Manifest._didFetchManifest): Updated per the replacement of an array of commit IDs by an array of dictionaries
with commit and patch properties.

* public/v3/models/repository.js:
(Repository.prototype.ownerId): Renamed from owner for clarity.

* public/v3/models/test-group.js:
(TestGroup): Modernized the code by using LazilyEvaluatedFunction. Removed _requestsAreInOrder since it's not
necessary anymore with LazilyEvaluatedFunction.
(TestGroup.prototype.addBuildRequest):
(TestGroup.prototype.test): Use the last build request's test since the first few requests could be requests to
build patches.
(TestGroup.prototype.platform): Ditto.
(TestGroup.prototype._lastRequest): Added.
(TestGroup.prototype._orderedBuildRequests): Added.
(TestGroup.prototype.repetitionCount): Only count the build requests for testing (skipping any requests to
build patches).
(TestGroup.prototype.requestedCommitSets): Simply call _computeRequestedCommitSetsLazily.
(TestGroup.prototype._computeRequestedCommitSets): Extracted from requestedCommitSets.
(TestGroup.prototype.requestsForCommitSet):
(TestGroup.prototype.labelForCommitSet): Rewritten. Just compute the label here instead of relying on
_commitSetToLabel since requestedSets is always of the length two at the moment.
(TestGroup._revisionSetsFromCommitSets): Specify both the revision and the patch in the revision set.

* public/v3/models/triggerable.js:
(TriggerableRepositoryGroup): Added _patchAcceptingSet as an instance variable. Use
sortByNamePreferringOnesWithURL to sort repositories instead of simple sortByName.
(TriggerableRepositoryGroup.prototype.accepts): Added checks for the custom roots and patches.
(TriggerableRepositoryGroup.prototype.acceptsPatchForRepository): Added.

* server-tests/api-build-requests-tests.js: Updated the test cases per the replacement of an array of commit
IDs by an array of dictionaries with commit and patch properties.

* server-tests/api-manifest-tests.js: Updated the test case per the name of Repository's owner to ownerId.

* server-tests/api-update-triggerable.js: Updated the test case per the name of Repository's owner to ownerId,
and added a test case for updating whether a given repository group allows custom roots as well as patches
on repositories via /api/update-triggerable.
(.updateWithOSXRepositoryGroup): Updated the sample syncing script configuration per the format change.
(.refetchManifest): Added.

* server-tests/privileged-api-create-test-group-tests.js: Updated per the syncing script configuration format
change. Also added a test for creating a test group with a duplicate name, which is expected to fail with
DuplicateTestGroupName, and creating a test group with a patch both when it's allowed and when it's not allowed
in the matching repository group.
(.addTriggerableAndCreateTask): Updated per the format change.

* server-tests/resources/mock-data.js:
(MockData.addEmptyTriggerable): Added a metric and its configuration to make it appear in the manifest file.
The new test case in api-update-triggerable.js requires this.
(MockData.mockTestSyncConfigWithSingleBuilder): Updated per the syncing script configuration format change.
(MockData.mockTestSyncConfigWithTwoBuilders): Ditto.

* server-tests/tools-buildbot-triggerable-tests.js: Removed the useless assertions about test configurations,
and added assertions about custom roots and patches in the test case for updateTriggerables.

* tools/js/buildbot-syncer.js:
(BuildbotSyncer._parseRepositoryGroup): Made each assertion explicitly refer to the specific repository group
to make it more user friendly. Now each repository group uses a dictionary of repository names to its options
in the syncing script configurations. When parsed, we insert it as an array of dictionaries with repository ID
and acceptsPatch boolean specified separately since this is the format /api/update-triggerable expects.

* tools/js/buildbot-triggerable.js:
(BuildbotTriggerable.prototype.updateTriggerable):

* unit-tests/build-request-tests.js:
(sampleBuildRequestData): Updated per the commit sets format change in /api/build-requests.

* unit-tests/buildbot-syncer-tests.js: Updated the existing tests per various format changes and added a couple
of new test cases for the syncing script's configuration validation.
(sampleiOSConfig):
(smallConfiguration):
(createSampleBuildRequest):

* unit-tests/resources/mock-v3-models.js:
(MockModels.inject): Updated per the repository group format change.

* unit-tests/test-groups-tests.js:
(sampleTestGroup): Updated per the commit sets format change in /api/build-requests.

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

2 years agoInitialize functions too early in an eval
gskachkov@gmail.com [Sun, 30 Apr 2017 14:51:27 +0000 (14:51 +0000)]
Initialize functions too early in an eval
https://bugs.webkit.org/show_bug.cgi?id=161099

Reviewed by Saam Barati.

JSTests:

* stress/eval-func-decl-with-let-const-class.js: Added.

Source/JavaScriptCore:

Current patch allow to fix problem with scope in function that is
declared within eval. Before scope was set inside Interpretator.cpp and it
was scope where eval is executed, but in this case function would not
see let/const variables and classes declated in eval.
This patch devide declaration and binding in two operation, first just declare
variable with function name, and second bind variable to function with correct
scope

* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::generate):
(JSC::BytecodeGenerator::BytecodeGenerator):
* bytecompiler/BytecodeGenerator.h:
* interpreter/Interpreter.cpp:
(JSC::Interpreter::execute):

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

2 years ago[ATK] Emit object:state-changed:busy event when aria-busy value changes
jdiggs@igalia.com [Sun, 30 Apr 2017 09:56:31 +0000 (09:56 +0000)]
[ATK] Emit object:state-changed:busy event when aria-busy value changes
https://bugs.webkit.org/show_bug.cgi?id=171181

Reviewed by Chris Fleizach.

Source/WebCore:

Emit object:state-changed:busy for AXElementBusyChanged notifications.

Test: accessibility/gtk/aria-busy-changed-notification.html

* accessibility/atk/AXObjectCacheAtk.cpp:
(WebCore::AXObjectCache::postPlatformNotification):

Tools:

Add handler for AXElementBusyChanged notifications.

* WebKitTestRunner/InjectedBundle/atk/AccessibilityNotificationHandlerAtk.cpp:

LayoutTests:

New test. Also update the expectations for menu-list-unfocused-notifications.html
because the addition of the handler for AXElementBusyChanged results in that
notification being output in the test results.

* accessibility/gtk/aria-busy-changed-notification-expected.txt: Added.
* accessibility/gtk/aria-busy-changed-notification.html: Added.
* accessibility/gtk/menu-list-unfocused-notifications-expected.txt: Updated.

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

2 years ago[ES6]. Implement Annex B.3.3 function hoisting rules for eval
gskachkov@gmail.com [Sun, 30 Apr 2017 08:06:23 +0000 (08:06 +0000)]
[ES6]. Implement Annex B.3.3 function hoisting rules for eval
https://bugs.webkit.org/show_bug.cgi?id=163208

Reviewed by Saam Barati.

JSTests:

* stress/eval-func-decl-block-scoping-reassign.js: Added.
(assert):
(throw.new.Error.f):
(throw.new.Error):
* stress/eval-func-decl-block-with-remove.js: Added.
(assert):
(foo.boo):
(foo):
* stress/eval-func-decl-block-with-var-and-remove.js: Added.
(assert):
(assertThrow):
(foo):
(boo):
(joo):
(koo):
* stress/eval-func-decl-block-with-var-sinthesize.js: Added.
(assert):
(assertThrow):
(foo):
(boo):
(hoo):
(joo):
(koo):
* stress/eval-func-decl-in-block-scope-and-bind-to-top-eval-scope.js: Added.
* stress/eval-func-decl-in-eval-within-block-with-let.js: Added.
(assert):
(assertThrow):
(foo):
(boo):
(goo):
* stress/eval-func-decl-in-eval-within-with-scope.js: Added.
(assert):
(assertThrow):
(foo):
(boo):
(boo.let.val2):
(boo.let.val3):
* stress/eval-func-decl-in-frozen-global.js: Added.
(assert):
(assertThrow):
(throw.new.Error):
(Object.freeze):
* stress/eval-func-decl-in-global-of-eval.js: Added.
(assert):
(assertThrow):
(bar):
(baz):
(foobar):
* stress/eval-func-decl-in-global.js: Added.
(assert):
(assertThrow):
* stress/eval-func-decl-in-if.js: Added.
(assert):
* stress/eval-func-decl-within-eval-with-reassign-to-var.js: Added.
(assert):
(assertThrow):
(foo):
(boo):
(foobar):
(hoo):
(joo):
(koo):
(loo):
* stress/eval-func-decl-within-eval-without-reassign-to-let.js: Added.
(assert):
(assertThrow):
(foo):
(boo):
(goo):
* stress/variable-under-tdz-eval-tricky.js:
(assert):
* test262.yaml:

Source/JavaScriptCore:

Current patch implements Annex B.3.3 that is related to
hoisting of function declaration in eval.
https://tc39.github.io/ecma262/#sec-web-compat-evaldeclarationinstantiation
Function declaration in eval should create variable with
function name in function scope where eval is invoked
or bind to variable if it declared outside of the eval.
If variable is created it can be removed by 'delete a;' command.
If eval is invoke in block scope that contains let/const
variable with the same name as function declaration
we do not bind. This patch leads to the following behavior:
'''
function foo() {
   {
     print(boo); // undefined
     eval('{ function boo() {}}');
     print(boo); // function boo() {}
   }
   print(boo); // function boo() {}
}

function foobar() {
  {
    let boo = 10;
    print(boo); // 10;
    eval('{ function boo() {}}');
    print(boo); // 10;
  }
  print(boo) // 10
}

function bar() {
   {
      var boo = 10;
      print(boo); // 10
      eval('{ function boo() {} }');
      print(boo); // function boo() {}
   }
   print(boo); // function boo() {}
}

function bas() {
    {
         let boo = 10;
         eval(' { function boo() {} } ');
         print(boo); // 10
    }
    print(boo); //Reference Error
}
'''

Current implementation relies on already implemented
'hoist function in sloppy mode' feature, with small changes.
In short it works in following way: during hoisting of function
with name S in eval, we are looking for first scope that
contains space for variable with name S and if this scope
has var type we bind function there

To implement this feature was added bytecode ops:
op_resolve_scope_for_hoisting_func_decl_in_eval - get variable scope
or return undefined if variable can't be binded there.

There is a corner case, hoist function in eval within catch block,
that is not covered by this patch, and will be fixed in
https://bugs.webkit.org/show_bug.cgi?id=168184

* bytecode/BytecodeDumper.cpp:
(JSC::BytecodeDumper<Block>::dumpBytecode):
* bytecode/BytecodeList.json:
* bytecode/BytecodeUseDef.h:
(JSC::computeUsesForBytecodeOffset):
(JSC::computeDefsForBytecodeOffset):
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::finalizeLLIntInlineCaches):
* bytecode/EvalCodeBlock.h:
(JSC::EvalCodeBlock::functionHoistingCandidate):
(JSC::EvalCodeBlock::numFunctionHoistingCandidates):
* bytecode/UnlinkedEvalCodeBlock.h:
* bytecompiler/BytecodeGenerator.cpp:
(JSC::BytecodeGenerator::BytecodeGenerator):
(JSC::BytecodeGenerator::hoistSloppyModeFunctionIfNecessary):
(JSC::BytecodeGenerator::emitResolveScopeForHoistingFuncDeclInEval):
* bytecompiler/BytecodeGenerator.h:
* dfg/DFGAbstractInterpreterInlines.h:
(JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
* dfg/DFGByteCodeParser.cpp:
(JSC::DFG::ByteCodeParser::parseBlock):
* dfg/DFGCapabilities.cpp:
(JSC::DFG::capabilityLevel):
* dfg/DFGClobberize.h:
(JSC::DFG::clobberize):
* dfg/DFGDoesGC.cpp:
(JSC::DFG::doesGC):
* dfg/DFGFixupPhase.cpp:
(JSC::DFG::FixupPhase::fixupNode):
* dfg/DFGNode.h:
(JSC::DFG::Node::hasIdentifier):
* dfg/DFGNodeType.h:
* dfg/DFGOperations.cpp:
* dfg/DFGOperations.h:
* dfg/DFGPredictionPropagationPhase.cpp:
* dfg/DFGSafeToExecute.h:
(JSC::DFG::safeToExecute):
* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::compileResolveScopeForHoistingFuncDeclInEval):
* dfg/DFGSpeculativeJIT.h:
(JSC::DFG::SpeculativeJIT::callOperation):
* 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::compileResolveScopeForHoistingFuncDeclInEval):
* interpreter/Interpreter.cpp:
(JSC::Interpreter::execute):
* jit/JIT.cpp:
(JSC::JIT::privateCompileMainPass):
* jit/JIT.h:
* jit/JITOperations.h:
* jit/JITPropertyAccess.cpp:
(JSC::JIT::emit_op_resolve_scope_for_hoisting_func_decl_in_eval):
* jit/JITPropertyAccess32_64.cpp:
(JSC::JIT::emit_op_resolve_scope_for_hoisting_func_decl_in_eval):
* llint/LowLevelInterpreter.asm:
* parser/Parser.cpp:
(JSC::Parser<LexerType>::parseFunctionDeclarationStatement):
* parser/Parser.h:
(JSC::Scope::getSloppyModeHoistedFunctions):
(JSC::Parser::declareFunction):
* runtime/CommonSlowPaths.cpp:
(JSC::SLOW_PATH_DECL):
* runtime/CommonSlowPaths.h:
* runtime/EvalExecutable.h:
(JSC::EvalExecutable::numFunctionHoistingCandidates):
(JSC::EvalExecutable::numTopLevelFunctionDecls):
(JSC::EvalExecutable::numberOfFunctionDecls): Deleted.
* runtime/JSScope.cpp:
(JSC::JSScope::resolve):
(JSC::JSScope::resolveScopeForHoistingFuncDeclInEval):
* runtime/JSScope.h:

LayoutTests:

* inspector/runtime/evaluate-CommandLineAPI-expected.txt:
* inspector/runtime/evaluate-CommandLineAPI.html:
* js/parser-syntax-check-expected.txt:
* js/script-tests/parser-syntax-check.js:

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

2 years agoRegression (r215941) Unexpected logging causes perf tests to fail.
beidson@apple.com [Sun, 30 Apr 2017 07:21:23 +0000 (07:21 +0000)]
Regression (r215941) Unexpected logging causes perf tests to fail.
<rdar://problem/31907269> and https://bugs.webkit.org/show_bug.cgi?id=171482

Reviewed by Alexey Proskuryakov.

* Shared/mac/SandboxExtensionMac.mm:
(WebKit::resolveAndCreateReadWriteDirectoryForSandboxExtension):

* UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::WebProcessPool::networkingCachesDirectory):
(WebKit::WebProcessPool::webContentCachesDirectory):

* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary): Only resolve the cookie storage directory
  if a custom one has been set.

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

2 years agoUse PEP8 style guide for raising exceptions in webkitpy.
aakash_jain@apple.com [Sun, 30 Apr 2017 05:02:20 +0000 (05:02 +0000)]
Use PEP8 style guide for raising exceptions in webkitpy.
https://bugs.webkit.org/show_bug.cgi?id=171439

Reviewed by Daniel Bates.

As per https://www.python.org/dev/peps/pep-0008/
"When raising an exception in Python 2, use raise ValueError('message')
instead of the older form raise ValueError, 'message'"

* Scripts/webkitpy/common/net/irc/ircbot.py: Using new style for raising exceptions.
* Scripts/webkitpy/common/thread/messagepump.py: Same.
* Scripts/webkitpy/tool/bot/queueengine.py: Same.
* Scripts/webkitpy/tool/commands/queues.py: Same.
* Scripts/webkitpy/tool/commands/stepsequence.py: Same.
* Scripts/webkitpy/tool/multicommandtool.py: Same.
* Scripts/webkitpy/tool/steps/abstractstep.py: Same.

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

2 years agoZero out PerformanceResourceTiming properties for cached cross-origin responses witho...
commit-queue@webkit.org [Sun, 30 Apr 2017 03:32:58 +0000 (03:32 +0000)]
Zero out PerformanceResourceTiming properties for cached cross-origin responses without Timing-Allow-Origin
https://bugs.webkit.org/show_bug.cgi?id=171394

Patch by Joseph Pecoraro <pecoraro@apple.com> on 2017-04-29
Reviewed by Youenn Fablet.

LayoutTests/imported/w3c:

WebKit doesn't create multiple PerformanceResourceTiming entries for
loads that use the same CachedResource. However for revalidation
requests, which may happen for cached entries, we will send new
network requests. These tests cover whether revalidation requests
include timing data or not.

* web-platform-tests/resource-timing/resources/rt-revalidation-response.py: Added.
* web-platform-tests/resource-timing/rt-cors-expected.txt:
* web-platform-tests/resource-timing/rt-cors.js:
* web-platform-tests/resource-timing/rt-cors.worker-expected.txt:
* web-platform-tests/resource-timing/rt-revalidate-requests-expected.txt: Added.
* web-platform-tests/resource-timing/rt-revalidate-requests.html: Added.

Source/WebCore:

* loader/ResourceTiming.cpp:
(WebCore::ResourceTiming::fromCache):
(WebCore::ResourceTiming::ResourceTiming):
* loader/ResourceTiming.h:
* loader/cache/CachedResourceLoader.cpp:
(WebCore::CachedResourceLoader::requestResource):
Include the timing-allow-origin check for cached responses.
Also, avoid including an extra entry for an ongoing cached resource
load, since when that load completes it should be reported.

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

2 years agoReadd assertion removed accidentally in r215955
commit-queue@webkit.org [Sun, 30 Apr 2017 03:30:32 +0000 (03:30 +0000)]
Readd assertion removed accidentally in r215955
https://bugs.webkit.org/show_bug.cgi?id=171466

Patch by Youenn Fablet <youenn@apple.com> on 2017-04-29
Reviewed by Eric Carlson.

Source/WebCore:

Unreviewed.

* platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
(WebCore::MockRealtimeVideoSourceMac::orientationChanged): Improved FIXME after review.

Source/WebKit2:

* WebProcess/WebPage/WebBackForwardListProxy.cpp:
(WebKit::WebBackForwardListProxy::addItemFromUIProcess):

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

2 years ago[macOS] Picture-in-picture should be disabled in WebPlaybackControlsManager during...
aestes@apple.com [Sun, 30 Apr 2017 03:28:27 +0000 (03:28 +0000)]
[macOS] Picture-in-picture should be disabled in WebPlaybackControlsManager during external media playback
https://bugs.webkit.org/show_bug.cgi?id=171468
<rdar://problem/31900349>

Reviewed by Eric Carlson.

Source/WebCore:

* platform/mac/WebPlaybackControlsManager.h: Declared canTogglePictureInPicture as a
readwrite property.
* platform/mac/WebPlaybackControlsManager.mm: Synthesize canTogglePictureInPicture.
(-[WebPlaybackControlsManager canTogglePictureInPicture]): Deleted.
* platform/mac/WebPlaybackSessionInterfaceMac.h:
* platform/mac/WebPlaybackSessionInterfaceMac.mm:
(WebCore::WebPlaybackSessionInterfaceMac::externalPlaybackChanged): Called
-[WebPlaybackControlsManager setCanTogglePictureInPicture:].

Source/WebKit2:

* UIProcess/Cocoa/WebViewImpl.mm:
(WebKit::WebViewImpl::updateMediaTouchBar): Set canTogglePictureInPicture to YES by default
on WebPlaybackControlsManager.

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

2 years agoFix tests broken by r215964.
simon.fraser@apple.com [Sun, 30 Apr 2017 03:06:09 +0000 (03:06 +0000)]
Fix tests broken by r215964.

Fix copy-paste error that caused the wrong paint phase to get passed to the fire writeLayerRenderers()
call, causing extra renderer dumping.

Also remove unused default arguments.

* rendering/RenderTreeAsText.cpp:
(WebCore::writeLayerRenderers):
(WebCore::writeLayers):

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

2 years agoDeep nesting is leading to ReferenceError for hoisted function
gskachkov@gmail.com [Sat, 29 Apr 2017 21:25:50 +0000 (21:25 +0000)]
Deep nesting is leading to ReferenceError for hoisted function
https://bugs.webkit.org/show_bug.cgi?id=171456

Reviewed by Yusuke Suzuki.

Current patch fix error that appears during hoisting of the function
in block scope. Error happens only when exist some deep scope that lead
to increase scope stack, after which list of the hosted candidates do not
copied to updated scope stack.

Source/JavaScriptCore:
* parser/Parser.h:
(JSC::Scope::Scope):

LayoutTests:
* js/function-declaration-statement-expected.txt:
* js/script-tests/function-declaration-statement.js:
(deepNesting.foo):
(deepNesting):
(deepNestingForFunctionDeclaration.foo):
(deepNestingForFunctionDeclaration):
(eval.deepNestingInEval.foo):
(eval.deepNestingInEval):
(eval.deepNestingForFunctionDeclarationInEval.foo):
(eval.deepNestingForFunctionDeclarationInEval):

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

2 years agoiBooks text can overlap, sometimes columns are shifted splitting words.
zalan@apple.com [Sat, 29 Apr 2017 21:16:44 +0000 (21:16 +0000)]
iBooks text can overlap, sometimes columns are shifted splitting words.
https://bugs.webkit.org/show_bug.cgi?id=171472
<rdar://problem/31096037>

Reviewed by Antti Koivisto.

Source/WebCore:

Instead of just checking if the glyph is taller than the line, we need to ensure that both the
ascent and the descent have enough space (this is for -webkit-line-box-contain: glyph).

Test: fast/text/simple-line-layout-glyph-overflows-line.html

* rendering/SimpleLineLayout.cpp:
(WebCore::SimpleLineLayout::canUseForText): compute the available space for the ascent/descent
and check them against the ceil-ed(see FontCascade::floatWidthForSimpleText) glyph min/max y.

LayoutTests:

* fast/text/simple-line-layout-glyph-overflows-line-expected.html: Added.
* fast/text/simple-line-layout-glyph-overflows-line.html: Added.

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

2 years agoAX: Improve performance of addChildren()/childrenChanged()
n_wang@apple.com [Sat, 29 Apr 2017 18:55:18 +0000 (18:55 +0000)]
AX: Improve performance of addChildren()/childrenChanged()
https://bugs.webkit.org/show_bug.cgi?id=171443

Reviewed by Chris Fleizach.

There's a lot of unnecessary work happening when childrenChanged() is being called.
Some of the improvements here:
1. When childrenChanged() is being called on some element, we are marking its parent
   chain dirty. However, in the addChild() method we are then clearing each child of
   that 'dirty' parent, eventually making the entire tree dirty.
   Added a m_subTreeDirty flag and using the needsToUpdateChildren() check to make sure
   we are only clearing the right chain without updating the unchanged siblings.
2. In the addChild() method we are calling accessibilityIsIgnored() on each child and that
   might lead to going up the parent chain again to get necessary information.
   Since we are already traversing the tree from top to bottom to add children, added a
   struct to store the information and pass it to the child so to avoid unnecessary traversal.
3. Reduced the amount work of ARIA text controls perform when updating its parents in childrenChanged()
   so that we don't update a big portion of the tree while typing.

No new tests since this didn't change any functionality.

* accessibility/AccessibilityNodeObject.cpp:
(WebCore::AccessibilityNodeObject::AccessibilityNodeObject):
(WebCore::AccessibilityNodeObject::childrenChanged):
(WebCore::AccessibilityNodeObject::insertChild):
(WebCore::AccessibilityNodeObject::addChildren):
(WebCore::AccessibilityNodeObject::isDescendantOfBarrenParent):
* accessibility/AccessibilityNodeObject.h:
* accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::AccessibilityObject):
(WebCore::AccessibilityObject::defaultObjectInclusion):
(WebCore::AccessibilityObject::setIsIgnoredFromParentDataForChild):
* accessibility/AccessibilityObject.h:
(WebCore::AccessibilityIsIgnoredFromParentData::AccessibilityIsIgnoredFromParentData):
(WebCore::AccessibilityIsIgnoredFromParentData::isNull):
(WebCore::AccessibilityObject::setNeedsToUpdateSubTree):
(WebCore::AccessibilityObject::needsToUpdateChildren):
(WebCore::AccessibilityObject::setIsIgnoredFromParentData):
* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::updateChildrenIfNecessary):
(WebCore::AccessibilityRenderObject::addChildren):
* accessibility/AccessibilityRenderObject.h:
(WebCore::AccessibilityRenderObject::setRenderObject):
(WebCore::AccessibilityRenderObject::needsToUpdateChildren): Deleted.

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

2 years ago[Xcode] libwebrtc SRCROOT includes examples
mitz@apple.com [Sat, 29 Apr 2017 18:33:10 +0000 (18:33 +0000)]
[Xcode] libwebrtc SRCROOT includes examples
https://bugs.webkit.org/show_bug.cgi?id=171478

Reviewed by Tim Horton.

* Configurations/Base.xcconfig: Exclude the Source/webrtc/examples subdirectory from
  installsrc. Its contents are not used for building any of the targets in the project.

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

2 years agoMove WebCore CPUTime to WTF and implement it in all the platforms
utatane.tea@gmail.com [Sat, 29 Apr 2017 18:03:22 +0000 (18:03 +0000)]
Move WebCore CPUTime to WTF and implement it in all the platforms
https://bugs.webkit.org/show_bug.cgi?id=171477

Reviewed by Chris Dumez.

Source/WebCore:

Move CPUTime to WTF. And rename getCPUTime to CPUTime::get().

* CMakeLists.txt:
* PlatformMac.cmake:
* WebCore.xcodeproj/project.pbxproj:
* page/ChromeClient.h:
* page/PerformanceMonitor.cpp:
(WebCore::PerformanceMonitor::PerformanceMonitor):
(WebCore::PerformanceMonitor::measurePostLoadCPUUsage):
(WebCore::PerformanceMonitor::measurePostBackgroundingCPUUsage):
(WebCore::PerformanceMonitor::measureCPUUsageInActivityState):
* page/PerformanceMonitor.h:
* platform/CPUMonitor.cpp:
(WebCore::CPUMonitor::setCPULimit):
(WebCore::CPUMonitor::timerFired):
* platform/CPUMonitor.h:

Source/WebKit2:

We now hold Seconds in CPUTime instead of int64_t. It finally sends
Seconds through WebKit2 IPC. We do not need to specialize ArgumentCoder
for Seconds since Seconds just holds double.

* UIProcess/PerActivityStateCPUUsageSampler.cpp:
(WebKit::PerActivityStateCPUUsageSampler::PerActivityStateCPUUsageSampler):
(WebKit::PerActivityStateCPUUsageSampler::reportWebContentCPUTime):
(WebKit::PerActivityStateCPUUsageSampler::loggingTimerFired):
* UIProcess/PerActivityStateCPUUsageSampler.h:
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::reportWebContentCPUTime):
* UIProcess/WebProcessPool.h:
* UIProcess/WebProcessPool.messages.in:
* WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::reportProcessCPUTime):
* WebProcess/WebCoreSupport/WebChromeClient.h:

Source/WTF:

We move WebCore::CPUTime to WTF::CPUTime since it is useful even in JSC
and it does not depend on any external libraries.
And we additionally implement WTF::CPUTime in all the platforms: Windows and Unix.

In CPUTime, instead of holding int64_t, we hold MonotonicTime and Seconds.

* WTF.xcodeproj/project.pbxproj:
* wtf/CMakeLists.txt:
* wtf/CPUTime.cpp: Copied from Source/WebCore/platform/CPUTime.cpp.
(WTF::CPUTime::percentageCPUUsageSince):
* wtf/CPUTime.h: Renamed from Source/WebCore/platform/CPUTime.h.
* wtf/PlatformEfl.cmake:
* wtf/PlatformGTK.cmake:
* wtf/PlatformJSCOnly.cmake:
* wtf/PlatformMac.cmake:
* wtf/PlatformWin.cmake:
* wtf/cocoa/CPUTimeCocoa.mm: Renamed from Source/WebCore/platform/cocoa/CPUTimeCocoa.mm.
(WTF::timeValueToMicroseconds):
(WTF::CPUTime::get):
* wtf/unix/CPUTimeUnix.cpp: Renamed from Source/WebCore/platform/CPUTime.cpp.
(WTF::timevalToSeconds):
(WTF::CPUTime::get):
* wtf/win/CPUTimeWin.cpp: Added.
(WTF::fileTimeToSeconds):
(WTF::CPUTime::get):

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

2 years ago[JSC] LabelScopePtr is not necessary
utatane.tea@gmail.com [Sat, 29 Apr 2017 16:32:59 +0000 (16:32 +0000)]
[JSC] LabelScopePtr is not necessary
https://bugs.webkit.org/show_bug.cgi?id=171474

Reviewed by Geoffrey Garen.

Originally, LabelScopePtr is introduced because LabelScopes uses Vector<> instead of SegmentedVector<>.
LabelScopePtr holds the pointer to the vector owner and index instead of the pointer to LabelScope directly
since Vector<> can relocate LocalScopes inside it.
The reason why LabelScopes use Vector instead is that there is code copying this vector. SegmentedVector<>
prohibits copying since it is so costly. So, we used Vector<> here instead of SegmentedVector<>.

But the latest code does not have copying code for LabelScopes. Thus, we can take the same design to Label and
RegisterID. Just use SegmentedVector<> and Ref<>/RefPtr<>. This patch removes LabelScopePtr since it is no
longer necessary. And use SegmentedVector for LabelScopes.

* bytecompiler/BytecodeGenerator.cpp:
(JSC::reclaim):
(JSC::BytecodeGenerator::reclaimFreeRegisters):
(JSC::BytecodeGenerator::newLabelScope):
(JSC::BytecodeGenerator::newLabel):
(JSC::BytecodeGenerator::pushFinallyControlFlowScope):
(JSC::BytecodeGenerator::breakTarget):
(JSC::BytecodeGenerator::continueTarget):
(JSC::BytecodeGenerator::emitEnumeration):
* bytecompiler/BytecodeGenerator.h:
* bytecompiler/LabelScope.h:
(JSC::LabelScope::LabelScope):
(JSC::LabelScope::breakTarget):
(JSC::LabelScope::continueTarget):
(JSC::LabelScope::type):
(JSC::LabelScope::name):
(JSC::LabelScope::scopeDepth):
(JSC::LabelScope::ref):
(JSC::LabelScope::deref):
(JSC::LabelScope::refCount):
(JSC::LabelScopePtr::LabelScopePtr): Deleted.
(JSC::LabelScopePtr::operator=): Deleted.
(JSC::LabelScopePtr::~LabelScopePtr): Deleted.
(JSC::LabelScopePtr::operator!): Deleted.
(JSC::LabelScopePtr::operator*): Deleted.
(JSC::LabelScopePtr::operator->): Deleted.
(JSC::LabelScopePtr::null): Deleted.
* bytecompiler/NodesCodegen.cpp:
(JSC::DoWhileNode::emitBytecode):
(JSC::WhileNode::emitBytecode):
(JSC::ForNode::emitBytecode):
(JSC::ForInNode::emitBytecode):
(JSC::ContinueNode::trivialTarget):
(JSC::ContinueNode::emitBytecode):
(JSC::BreakNode::trivialTarget):
(JSC::BreakNode::emitBytecode):
(JSC::SwitchNode::emitBytecode):
(JSC::LabelNode::emitBytecode):

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

2 years agoCrash under WebCore::AccessibilityRenderObject::handleAriaExpandedChanged().
pvollan@apple.com [Sat, 29 Apr 2017 06:17:10 +0000 (06:17 +0000)]
Crash under WebCore::AccessibilityRenderObject::handleAriaExpandedChanged().
https://bugs.webkit.org/show_bug.cgi?id=171427
Source/WebCore:

rdar://problem/31863417

Reviewed by Brent Fulgham.

The AccessibilityRenderObject object might delete itself in handleAriaExpandedChanged() under the call
to the parentObject() method. This will cause a crash when accessing the object later in this method.
Protect the current object while executing arbitrary event code.

Test: accessibility/accessibility-crash-setattribute.html

* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::handleAriaExpandedChanged):

LayoutTests:

Reviewed by Brent Fulgham.

* accessibility/accessibility-crash-setattribute-expected.txt: Added.
* accessibility/accessibility-crash-setattribute.html: Added.

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

2 years agoUnreviewed test gardening (Mac WK1)
wenson_hsieh@apple.com [Sat, 29 Apr 2017 04:57:06 +0000 (04:57 +0000)]
Unreviewed test gardening (Mac WK1)

Mark a LayoutTest as PASS on Mac WK1. This test is currently skipped globally,
but was meant to be enabled for WK1 on Mac. Followup to r213897.

* platform/mac-wk1/TestExpectations:

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

2 years agoDiagnostic logging of navigations is too verbose
cdumez@apple.com [Sat, 29 Apr 2017 03:55:35 +0000 (03:55 +0000)]
Diagnostic logging of navigations is too verbose
https://bugs.webkit.org/show_bug.cgi?id=171455
<rdar://problem/31543815>

Reviewed by Andreas Kling.

Diagnostic logging of navigation is too verbose. We log things that are not actually user
navigations (e.g. speculative loads, bookmark icon fetches, ...). To address the issue,
we now only log *observable* loads. We do so by only logging if the page is visible or
if it becomes visible.

* loader/FrameLoader.cpp:
(WebCore::FrameLoader::loadWithDocumentLoader):
(WebCore::logNavigation): Deleted.
* page/Page.cpp:
(WebCore::Page::setIsVisibleInternal):
(WebCore::Page::logNavigation):
(WebCore::Page::mainFrameLoadStarted):
* page/Page.h:

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

2 years agoAX: ARIA "region" role which lacks an accessible name should not be treated as a...
jdiggs@igalia.com [Sat, 29 Apr 2017 02:07:21 +0000 (02:07 +0000)]
AX: ARIA "region" role which lacks an accessible name should not be treated as a landmark
https://bugs.webkit.org/show_bug.cgi?id=171180

Reviewed by Chris Fleizach.

Source/WebCore:

Remove mapping of LandmarkRegionRole for regions which lack an accessible name.
Doing so had a side effect of causing a number of DPub ARIA roles to stop being
mapped as ARIA landmarks. This is due to our internal role mappings, namely
treating the DPub ARIA landmark roles as if they were regions. Because DPub's
landmarks do not subclass region, and do not have the same name-from-author
requirement as region, create a new LandmarkDocRegionRole AccessibilityRole and
map DPub ARIA's generic landmarks to it.

No new tests because we already have sufficient coverage. Several existing
tests were given additional test cases to cover named and unnamed regions,
and test expectations updated accordingly.

* accessibility/AccessibilityNodeObject.cpp:
(WebCore::AccessibilityNodeObject::determineAriaRoleAttribute):
* accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::accessibleNameDerivesFromContent):
(WebCore::AccessibilityObject::isLandmark):
(WebCore::initializeRoleMap):
(WebCore::AccessibilityObject::computedRoleString):
* accessibility/AccessibilityObject.h:
* accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
(atkRole):
* accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper _accessibilityIsLandmarkRole:]):
(-[WebAccessibilityObjectWrapper determineIsAccessibilityElement]):
* accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
(-[WebAccessibilityObjectWrapperBase ariaLandmarkRoleDescription]):
* accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
(createAccessibilityRoleMap):
(-[WebAccessibilityObjectWrapper subrole]):

LayoutTests:

Add new test cases to several tests so that we have coverage for both named and
unnamed regions, which now have different mappings. In aria-namefrom-author.html,
the region role was replaced with the table role because the test requires elements
which have mapped ARIA roles and lack an author-provided name. A region which lacks
an author-provided name is no longer mapped as an ARIA role as per the spec. Table
was introduced in ARIA 1.1 and serves the same purpose with respect to what is
being tested.

* accessibility/aria-namefrom-author.html:
* accessibility/gtk/xml-roles-exposed-expected.txt:
* accessibility/gtk/xml-roles-exposed.html:
* accessibility/mac/aria-grouping-roles.html:
* accessibility/roles-computedRoleString.html:
* accessibility/roles-exposed.html:
* platform/gtk/accessibility/roles-exposed-expected.txt:
* platform/mac/accessibility/roles-computedRoleString-expected.txt:
* platform/mac/accessibility/roles-exposed-expected.txt:

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

2 years agoAdd system trace points for Document::updateTouchEventRegions()
simon.fraser@apple.com [Sat, 29 Apr 2017 01:55:10 +0000 (01:55 +0000)]
Add system trace points for Document::updateTouchEventRegions()
https://bugs.webkit.org/show_bug.cgi?id=171470
rdar://problem/31901239

Reviewed by Tim Horton.

Add trace markers for updateTouchEventRegions.

Source/WTF:

* wtf/SystemTracing.h:

Tools:

* Tracing/SystemTracePoints.plist:

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

2 years agoLayoutTests/js/dom/Promise-static-all/race.html are flakey - Unhandled Promise Reject...
joepeck@webkit.org [Sat, 29 Apr 2017 01:19:28 +0000 (01:19 +0000)]
LayoutTests/js/dom/Promise-static-all/race.html are flakey - Unhandled Promise Rejection messages
https://bugs.webkit.org/show_bug.cgi?id=171445

Unreviewed test gardening.

* js/dom/Promise-static-all.html:
Fix an accidentally commented out line.

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

2 years agowebkitpy: Add apple_additions to webkitpy to insert Internal tools
jbedard@apple.com [Sat, 29 Apr 2017 01:06:27 +0000 (01:06 +0000)]
webkitpy: Add apple_additions to webkitpy to insert Internal tools
https://bugs.webkit.org/show_bug.cgi?id=170461
<rdar://problem/31433077>

Reviewed by Daniel Bates.

Allow a package to be pulled in by run-webkit-tests which provides an interface to
run layout tests on an iOS device.  If this package is not available, throw an
exception when attempting to run layout tests on an iOS device.

* Scripts/webkitpy/port/config.py:
(apple_additions): Import apple_additions package.
* Scripts/webkitpy/port/device.py:
(Device.install_dylibs): Pass a directory with all the frameworks and dylibs to be
installed on a device.
(Device.prepare_for_testing): Pass a list of ports to forward from the device to the
host, the bundle id of the app to be used for testing and a path to the layout test
directory to be mounted on the device.
(Device.finished_testing):
* Scripts/webkitpy/port/factory.py:
(platform_options): Add apple_additions platform options if apple_additions exists.
* Scripts/webkitpy/port/ios.py:
(IOSPort.setup_test_run): Install dylibs and frameworks on the device, pass ports
to forward, the bundle ID of the testing app and the layout tests directory to
each device.
* Scripts/webkitpy/port/ios_device.py:
(IOSDevicePort):
(IOSDevicePort.default_child_processes): Query apple_additions for the number of child
processes to be run.
(IOSDevicePort.using_multiple_devices): Always assume multiple devices are used. When
a single device is used, it is still accessed through an array.
(IOSDevicePort._device_for_worker_number_map): Query apple_additions for the device
for worker number map.
(IOSDevicePort._driver_class): Query apple_additions for the test driver.
(IOSDevicePort.determine_full_port_name): Use class variable over hard-coded string.
(IOSDevicePort.check_for_leaks): No implementation for iOSDevicePort.
(IOSDevicePort.look_for_new_crash_logs): Ditto.
(IOSDevicePort.look_for_new_samples): Ditto.
(IOSDevicePort.sample_process): Ditto.
(IOSDevicePort._build_driver_flags): Use class variable over hard-coded string.
(IOSDevicePort._create_devices): Check that devices are available for testing and check
that we have enough devices for each child process.
(IOSDevicePort.clean_up_test_run): Have apple_additions preform any needed clean up.
* Scripts/webkitpy/port/ios_device_unittest.py:
(IOSDeviceTest.test_operating_system):
(IOSDeviceTest.test_spindump): Override method from DarwinTest.
(IOSDeviceTest.test_sample_process): Ditto.
(IOSDeviceTest.test_sample_process_exception): Ditto.

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

2 years agoEnhance showLayerTree() to show fragments
simon.fraser@apple.com [Sat, 29 Apr 2017 00:48:11 +0000 (00:48 +0000)]
Enhance showLayerTree() to show fragments
https://bugs.webkit.org/show_bug.cgi?id=171469

Reviewed by Zalan Bujtas.

Have showLayerTree() dump fragments, like:

     normal flow list(1)
      layer 0x11c1879c0 at (0,0) size 700x1858 backgroundClip at (0,0) size 2120x779 clip at (0,0) size 2120x779
           fragment 0: bounds in layer at (0,0) size 700x1858 fragment bounds at (0,0) size 700x779
           fragment 1: bounds in layer at (710,-779) size 700x1858 fragment bounds at (710,0) size 700x779
           fragment 2: bounds in layer at (1420,-1558) size 700x1858 fragment bounds at (1420,0) size 700x300
        RenderMultiColumnFlowThread 0x11f1f3340 at (0,0) size 700x1858

We want these to show before the child renderers, so factor that code into writeLayerRenderers().

Overloading of write() for layers doesn't help anyone, so call it writeLayer() for searchability.

* rendering/RenderLayer.cpp:
(WebCore::showLayerTree):
* rendering/RenderLayer.h:
* rendering/RenderTreeAsText.cpp:
(WebCore::writeLayer):
(WebCore::writeLayerRenderers):
(WebCore::writeLayers):
* rendering/RenderTreeAsText.h:

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

2 years agoModernize RenderTreeAsText code
simon.fraser@apple.com [Sat, 29 Apr 2017 00:48:08 +0000 (00:48 +0000)]
Modernize RenderTreeAsText code
https://bugs.webkit.org/show_bug.cgi?id=171458

Reviewed by Zalan Bujtas.

Use modern loops. More references to render objects and layers.

* rendering/RenderTreeAsText.cpp:
(WebCore::write):
(WebCore::writeRenderNamedFlowThreads):
(WebCore::writeLayers):
(WebCore::writeSelection):
(WebCore::externalRepresentation):

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

2 years agoFix and re-enable data interaction unit tests
wenson_hsieh@apple.com [Sat, 29 Apr 2017 00:44:13 +0000 (00:44 +0000)]
Fix and re-enable data interaction unit tests
https://bugs.webkit.org/show_bug.cgi?id=171446
<rdar://problem/31820646>

Reviewed by Tim Horton.

Source/WebCore:

Three small tweaks to get all data interaction tests passing again (changes detailed below).
Fixes a failing unit test: DataInteractionTests.RespectsExternalSourceFidelityRankings.

* page/mac/DragControllerMac.mm:

When dropping in a plain text editable area, don't consider kUTTypeText to be a UTI supported by the destination.
This is because doing so would cause rich text UTIs, such as kUTTypeHTML, to match, so that the plain text area
would report HTML as a preferred UTI type to load when dropping rich content over it. What we want to check for
conformance here is really kUTTypePlainText.

(WebCore::DragController::updatePreferredTypeIdentifiersForDragHandlingMethod):
* platform/Pasteboard.h:
* platform/ios/PasteboardIOS.mm:

The default Pasteboard constructor no longer makes a sync call to the UI process to get the change count.
Instead, we introduce a new constructor that takes and sets the change count. This default constructor was used
from three places: Pasteboard::createForCopyAndPaste, Pasteboard::createPrivate and StaticPasteboard::create.

The first two call sites have been refactored to first fetch the change count from the UI process and then pass
it in to the constructor.

(WebCore::changeCountForPasteboard):
(WebCore::Pasteboard::Pasteboard):
(WebCore::Pasteboard::createForCopyAndPaste):
(WebCore::Pasteboard::createPrivate):
(WebCore::Pasteboard::readString):
(WebCore::Pasteboard::types):
* platform/mac/DragDataMac.mm:
(WebCore::typeIsAppropriateForSupportedTypes):
(WebCore::DragData::updatePreferredTypeIdentifiers):

Remove the two-pass heuristic. Instead, we should follow this policy: "select the highest fidelity UTI that
conforms to one of the destination's supported types".

* platform/mac/PasteboardMac.mm:
(WebCore::Pasteboard::Pasteboard):

Tools:

Enables all DataInteractionTests, and adjusts file upload tests to no longer write to a temporary file before
registering with the UIItemProvider, and instead just register data directly via
-registerDataRepresentationForTypeIdentifier:visibility:loadHandler:.

* TestWebKitAPI/Tests/ios/DataInteractionTests.mm:
(TestWebKitAPI::TEST):
(temporaryURLForDataInteractionFileLoad): Deleted.
(cleanUpDataInteractionTemporaryPath): Deleted.
(-[UIItemProvider registerFileRepresentationForTypeIdentifier:withData:filename:]): Deleted.
* TestWebKitAPI/ios/DataInteractionSimulator.h:
* TestWebKitAPI/ios/DataInteractionSimulator.mm:

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

2 years agoTeach the DatabaseProcess to be fully SessionID aware
beidson@apple.com [Sat, 29 Apr 2017 00:34:38 +0000 (00:34 +0000)]
Teach the DatabaseProcess to be fully SessionID aware
https://bugs.webkit.org/show_bug.cgi?id=171451

Reviewed by Geoffrey Garen.
Source/WebKit2:

SessionIDs were already at the periphery of IDB and the DatabaseProcess.
Getting a separate IDBServer per SessionID is a pretty straightforward improvement.

* DatabaseProcess/DatabaseProcess.cpp:
(WebKit::DatabaseProcess::idbServer):
(WebKit::DatabaseProcess::initializeWebsiteDataStore):
(WebKit::DatabaseProcess::fetchWebsiteData):
(WebKit::DatabaseProcess::deleteWebsiteData):
(WebKit::DatabaseProcess::deleteWebsiteDataForOrigins):
(WebKit::DatabaseProcess::indexedDatabaseOrigins):
(WebKit::DatabaseProcess::initializeDatabaseProcess): Deleted.
(WebKit::DatabaseProcess::ensureIndexedDatabaseRelativePathExists): Deleted.
(WebKit::DatabaseProcess::absoluteIndexedDatabasePathFromDatabaseRelativePath): Deleted.
* DatabaseProcess/DatabaseProcess.h:
(WebKit::DatabaseProcess::indexedDatabaseDirectory): Deleted.
* DatabaseProcess/DatabaseProcess.messages.in:

* DatabaseProcess/DatabaseToWebProcessConnection.cpp:
(WebKit::DatabaseToWebProcessConnection::establishIDBConnectionToServer):
* DatabaseProcess/DatabaseToWebProcessConnection.h:
* DatabaseProcess/DatabaseToWebProcessConnection.messages.in:

* DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
(WebKit::WebIDBConnectionToClient::create):
(WebKit::WebIDBConnectionToClient::WebIDBConnectionToClient):
(WebKit::WebIDBConnectionToClient::disconnectedFromWebProcess):
(WebKit::WebIDBConnectionToClient::deleteDatabase):
(WebKit::WebIDBConnectionToClient::openDatabase):
(WebKit::WebIDBConnectionToClient::abortTransaction):
(WebKit::WebIDBConnectionToClient::commitTransaction):
(WebKit::WebIDBConnectionToClient::didFinishHandlingVersionChangeTransaction):
(WebKit::WebIDBConnectionToClient::createObjectStore):
(WebKit::WebIDBConnectionToClient::deleteObjectStore):
(WebKit::WebIDBConnectionToClient::renameObjectStore):
(WebKit::WebIDBConnectionToClient::clearObjectStore):
(WebKit::WebIDBConnectionToClient::createIndex):
(WebKit::WebIDBConnectionToClient::deleteIndex):
(WebKit::WebIDBConnectionToClient::renameIndex):
(WebKit::WebIDBConnectionToClient::putOrAdd):
(WebKit::WebIDBConnectionToClient::getRecord):
(WebKit::WebIDBConnectionToClient::getAllRecords):
(WebKit::WebIDBConnectionToClient::getCount):
(WebKit::WebIDBConnectionToClient::deleteRecord):
(WebKit::WebIDBConnectionToClient::openCursor):
(WebKit::WebIDBConnectionToClient::iterateCursor):
(WebKit::WebIDBConnectionToClient::establishTransaction):
(WebKit::WebIDBConnectionToClient::databaseConnectionPendingClose):
(WebKit::WebIDBConnectionToClient::databaseConnectionClosed):
(WebKit::WebIDBConnectionToClient::abortOpenAndUpgradeNeeded):
(WebKit::WebIDBConnectionToClient::didFireVersionChangeEvent):
(WebKit::WebIDBConnectionToClient::openDBRequestCancelled):
(WebKit::WebIDBConnectionToClient::confirmDidCloseFromServer):
(WebKit::WebIDBConnectionToClient::getAllDatabaseNames):
* DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:

* Shared/Databases/DatabaseProcessCreationParameters.cpp:
(WebKit::DatabaseProcessCreationParameters::encode):
(WebKit::DatabaseProcessCreationParameters::decode):
* Shared/Databases/DatabaseProcessCreationParameters.h:

* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::ensureDatabaseProcess):
(WebKit::WebProcessPool::resolvePathsForSandboxExtensions):
(WebKit::WebProcessPool::pageAddedToProcess):
* UIProcess/WebProcessPool.h:

* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
(WebKit::WebsiteDataStore::databaseProcessParameters):
* UIProcess/WebsiteData/WebsiteDataStore.h:
(WebKit::WebsiteDataStore::resolvedIndexedDatabaseDirectory):

* WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
(WebKit::WebIDBConnectionToServer::create):
(WebKit::WebIDBConnectionToServer::WebIDBConnectionToServer):
* WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:

* WebProcess/Databases/WebToDatabaseProcessConnection.cpp:
(WebKit::WebToDatabaseProcessConnection::idbConnectionToServerForSession):

Tools:

* TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:

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

2 years agoMarked media/track/track-in-band-style.html as flaky timeout.
ryanhaddad@apple.com [Sat, 29 Apr 2017 00:20:42 +0000 (00:20 +0000)]
Marked media/track/track-in-band-style.html as flaky timeout.
https://bugs.webkit.org/show_bug.cgi?id=171465

Unreviewed test gardening.

Patch by Matt Lewis <jlewis3@apple.com> on 2017-04-28

* platform/mac/TestExpectations:

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

2 years agoApp crashing: Dispatch queue: com.apple.root.user-interactive-qos / vBoxConvolve...
dino@apple.com [Fri, 28 Apr 2017 23:34:48 +0000 (23:34 +0000)]
App crashing: Dispatch queue: com.apple.root.user-interactive-qos / vBoxConvolve / WebCore::FEGaussianBlur::platformApplySoftware()
https://bugs.webkit.org/show_bug.cgi?id=171461
<rdar://problem/30534722>

Reviewed by Eric Carlson.

Source/WebCore:

We're getting reports of crashes in this function, caused by null or empty data being
passed to vImage. Guard against this, in a way that will ASSERT in debug builds if
anyone comes across it.

Test: css3/filters/blur-various-radii.html

* platform/graphics/filters/FEGaussianBlur.cpp:
(WebCore::accelerateBoxBlur): Return early if things don't look good.

LayoutTests:

Test a bunch of blurs a frame at a time.

* css3/filters/blur-various-radii-expected.html: Added.
* css3/filters/blur-various-radii.html: Added.

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

2 years agoStop using legacy ClientRect / ClientRectList in Internals
cdumez@apple.com [Fri, 28 Apr 2017 23:28:41 +0000 (23:28 +0000)]
Stop using legacy ClientRect / ClientRectList in Internals
https://bugs.webkit.org/show_bug.cgi?id=171412

Reviewed by Simon Fraser.

Source/WebCore:

Stop using legacy ClientRect / ClientRectList in Internals amd use the
newer DOMRect instead.

* dom/DOMRect.idl:
* page/Page.cpp:
(WebCore::Page::nonFastScrollableRects):
(WebCore::Page::touchEventRectsForEvent):
(WebCore::Page::passiveTouchEventListenerRects):
* page/Page.h:
* testing/Internals.cpp:
(WebCore::Internals::absoluteCaretBounds):
(WebCore::Internals::boundingBox):
(WebCore::Internals::inspectorHighlightRects):
(WebCore::Internals::layoutViewportRect):
(WebCore::Internals::visualViewportRect):
(WebCore::Internals::touchEventRectsForEvent):
(WebCore::Internals::passiveTouchEventListenerRects):
(WebCore::Internals::nonFastScrollableRects):
(WebCore::Internals::selectionBounds):
* testing/Internals.h:
* testing/Internals.idl:

LayoutTests:

Rebaseline existing tests as DOMRect has more properties than ClientRect.

* fast/visual-viewport/nonzoomed-rects-expected.txt:
* fast/visual-viewport/rtl-nonzoomed-rects-expected.txt:
* fast/visual-viewport/rtl-zoomed-rects-expected.txt:
* fast/visual-viewport/rubberbanding-viewport-rects-expected.txt:
* fast/visual-viewport/rubberbanding-viewport-rects-extended-background-expected.txt:
* fast/visual-viewport/rubberbanding-viewport-rects-header-footer-expected.txt:
* fast/visual-viewport/zoomed-fixed-expected.txt:
* fast/visual-viewport/zoomed-fixed-header-and-footer-expected.txt:
* fast/visual-viewport/zoomed-rects-expected.txt:
* inspector/dom/hideHighlight-expected.txt:
* inspector/dom/highlightQuad-expected.txt:
* inspector/dom/highlightRect-expected.txt:

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

2 years agogetUserMedia video streams should follow device orientation
commit-queue@webkit.org [Fri, 28 Apr 2017 23:26:31 +0000 (23:26 +0000)]
getUserMedia video streams should follow device orientation
https://bugs.webkit.org/show_bug.cgi?id=171284

Patch by Youenn Fablet <youenn@apple.com> on 2017-04-28
Reviewed by Eric Carlson.

Source/WebCore:

Only really affects AVVideoCaptureSource on iOS. Manually testing the following cases:
- Mac: no change of behavior
- iOS: page loaded in portrait, video is portrait. page loaded in landscape, video is landscape
- iOS: changing the device orientation makes the video samples to be moved to landscape/portrait.
- Same tests as above with peer connection.

Making Document having an OrientationNotifier that AVVideoCaptureSources get registered to.
Making AVVideoCaptureSource an OrientationNotifier::Observer so that it can changes width/height if needed.

Refactoring to specialize CaptureFactory in VideoCaptureFactory and AudioCaptureFactory.
Refactoring to return a CaptureSourceOrError instead of passing an out parameter plus returning a RefPtr.

* Modules/mediastream/UserMediaRequest.cpp:
(WebCore::UserMediaRequest::allow):
* WebCore.xcodeproj/project.pbxproj:
* dom/Document.cpp:
(WebCore::Document::orientationChanged):
* dom/Document.h:
* page/Frame.cpp:
(WebCore::Frame::orientationChanged):
* platform/OrientationNotifer.h: Copied from Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h.
(WebCore::OrientationNotifier::Observer::setNotifier):
(WebCore::OrientationNotifier::Observer::~Observer):
(WebCore::OrientationNotifier::orientationChanged):
(WebCore::OrientationNotifier::addObserver):
(WebCore::OrientationNotifier::removeObserver):
* platform/mediastream/MediaStreamPrivate.cpp:
(WebCore::MediaStreamPrivate::monitorOrientation):
* platform/mediastream/MediaStreamPrivate.h:
* platform/mediastream/RealtimeMediaSource.h:
(WebCore::CaptureSourceOrError::CaptureSourceOrError):
(WebCore::CaptureSourceOrError::operator bool):
(WebCore::CaptureSourceOrError::source):
* platform/mediastream/RealtimeMediaSourceCenter.cpp:
(WebCore::RealtimeMediaSourceCenter::setAudioFactory):
(WebCore::RealtimeMediaSourceCenter::unsetAudioFactory):
(WebCore::RealtimeMediaSourceCenter::setVideoFactory):
(WebCore::RealtimeMediaSourceCenter::unsetVideoFactory):
* platform/mediastream/RealtimeMediaSourceCenter.h:
(WebCore::RealtimeMediaSourceCenter::defaultAudioFactory):
(WebCore::RealtimeMediaSourceCenter::defaultVideoFactory):
(WebCore::RealtimeMediaSourceCenter::audioFactory):
(WebCore::RealtimeMediaSourceCenter::videoFactory):
* platform/mediastream/mac/AVAudioCaptureSource.h:
* platform/mediastream/mac/AVAudioCaptureSource.mm:
(WebCore::AVAudioCaptureSource::create):
(WebCore::AVAudioCaptureSource::factory):
* platform/mediastream/mac/AVVideoCaptureSource.h:
* platform/mediastream/mac/AVVideoCaptureSource.mm:
(WebCore::AVVideoCaptureSource::create):
(WebCore::AVVideoCaptureSource::factory):
(WebCore::AVVideoCaptureSource::monitorOrientation):
(WebCore::AVVideoCaptureSource::orientationChanged):
(WebCore::AVVideoCaptureSource::processNewFrame):
* platform/mediastream/mac/CoreAudioCaptureSource.cpp:
(WebCore::CoreAudioCaptureSource::create):
(WebCore::CoreAudioCaptureSource::factory):
* platform/mediastream/mac/CoreAudioCaptureSource.h:
* platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
(WebCore::MockRealtimeAudioSource::create):
* platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
* platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
(WebCore::MockRealtimeVideoSource::create):
(WebCore::MockRealtimeVideoSourceMac::orientationChanged):
* platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
(WebCore::RealtimeMediaSourceCenterMac::createMediaStream):
(WebCore::RealtimeMediaSourceCenterMac::bestSourcesForTypeAndConstraints):
(WebCore::RealtimeMediaSourceCenterMac::defaultAudioFactory):
(WebCore::RealtimeMediaSourceCenterMac::defaultVideoFactory):
* platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:
* platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
(WebCore::RealtimeMediaSourceCenterOwr::createMediaStream):
* platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.h:
* platform/mock/MockRealtimeAudioSource.cpp:
(WebCore::MockRealtimeAudioSource::create):
(WebCore::MockRealtimeAudioSource::factory):
* platform/mock/MockRealtimeAudioSource.h:
* platform/mock/MockRealtimeMediaSourceCenter.cpp:
(WebCore::MockRealtimeMediaSourceCenter::validateRequestConstraints):
(WebCore::MockRealtimeMediaSourceCenter::createMediaStream):
(WebCore::MockRealtimeMediaSourceCenter::defaultAudioFactory):
(WebCore::MockRealtimeMediaSourceCenter::defaultVideoFactory):
* platform/mock/MockRealtimeMediaSourceCenter.h:
* platform/mock/MockRealtimeVideoSource.cpp:
(WebCore::MockRealtimeVideoSource::create):
(WebCore::MockRealtimeVideoSource::factory):
* platform/mock/MockRealtimeVideoSource.h:

Source/WebKit2:

Refactoring to specialize CaptureFactory in VideoCaptureFactory and AudioCaptureFactory.
Refactoring to return a CaptureSourceOrError instead of passing an out parameter in addition to returning a RefPtr.

* Shared/WebCoreArgumentCoders.h:
* UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
(WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
* UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
* UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in:
* WebProcess/cocoa/UserMediaCaptureManager.cpp:
(WebKit::UserMediaCaptureManager::createCaptureSource):
(WebKit::UserMediaCaptureManager::createMediaSourceForCaptureDeviceWithConstraints): Deleted.
* WebProcess/cocoa/UserMediaCaptureManager.h:

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

2 years ago[iOS] We should not take a background assertion for the UIProcess when app is MobileMail
cdumez@apple.com [Fri, 28 Apr 2017 22:41:56 +0000 (22:41 +0000)]
[iOS] We should not take a background assertion for the UIProcess when app is MobileMail
https://bugs.webkit.org/show_bug.cgi?id=171435
<rdar://problem/31132330>

Reviewed by Geoffrey Garen.

Add SPI to disable taking on background process assertions in the UIProcess.
This is useful for MobileMail.

* UIProcess/API/APIProcessPoolConfiguration.cpp:
(API::ProcessPoolConfiguration::copy):
* UIProcess/API/APIProcessPoolConfiguration.h:
* UIProcess/API/Cocoa/_WKProcessPoolConfiguration.h:
* UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
(-[_WKProcessPoolConfiguration shouldTakeUIBackgroundAssertion]):
(-[_WKProcessPoolConfiguration setShouldTakeUIBackgroundAssertion:]):
* UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::NetworkProcessProxy):
* UIProcess/ProcessAssertion.h:
(WebKit::ProcessAssertion::setClient):
* UIProcess/ProcessThrottler.cpp:
(WebKit::ProcessThrottler::ProcessThrottler):
(WebKit::m_shouldTakeUIBackgroundAssertion):
(WebKit::ProcessThrottler::didConnectToProcess):
* UIProcess/ProcessThrottler.h:
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::WebProcessPool):
* UIProcess/WebProcessPool.h:
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::WebProcessProxy):

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

2 years agoUnreviewed attempt to fix iOS build after r215943.
cdumez@apple.com [Fri, 28 Apr 2017 22:39:15 +0000 (22:39 +0000)]
Unreviewed attempt to fix iOS build after r215943.

* Configurations/Base.xcconfig:

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

2 years agoUnify how BitmapImage handles the availability of a decoded for large and animated...
commit-queue@webkit.org [Fri, 28 Apr 2017 22:37:56 +0000 (22:37 +0000)]
Unify how BitmapImage handles the availability of a decoded for large and animated images
https://bugs.webkit.org/show_bug.cgi?id=171410

Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2017-04-28
Reviewed by Simon Fraser.

Rename some functions which are related to animation frame availability.
Make BitmapImage call ImageObserver::imageFrameAvailable() whenever a
frame is available regardless it is for an animated or for a large image.

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::isVisibleInViewport):
* html/MediaElementSession.cpp:
(WebCore::MediaElementSession::autoplayPermitted):
(WebCore::isMainContentForPurposesOfAutoplay):
* loader/cache/CachedImage.cpp:
(WebCore::CachedImage::CachedImageObserver::imageFrameAvailable):
(WebCore::CachedImage::imageFrameAvailable):
(WebCore::CachedImage::usesImageContainerSize): Deleted.
(WebCore::CachedImage::imageHasRelativeWidth): Deleted.
(WebCore::CachedImage::imageHasRelativeHeight): Deleted.
(WebCore::CachedImage::CachedImageObserver::animationAdvanced): Deleted.
(WebCore::CachedImage::animationAdvanced): Deleted.
* loader/cache/CachedImage.h:
* loader/cache/CachedImageClient.h:
(WebCore::CachedImageClient::imageFrameAvailable):
(WebCore::CachedImageClient::newImageAnimationFrameAvailable): Deleted.
* platform/graphics/BitmapImage.cpp:
(WebCore::BitmapImage::internalAdvanceAnimation):
(WebCore::BitmapImage::imageFrameAvailableAtIndex):
(WebCore::BitmapImage::newFrameNativeImageAvailableAtIndex): Deleted.
* platform/graphics/BitmapImage.h:
* platform/graphics/Image.h:
(WebCore::Image::imageFrameAvailableAtIndex):
(WebCore::Image::newFrameNativeImageAvailableAtIndex): Deleted.
* platform/graphics/ImageFrameCache.cpp:
(WebCore::ImageFrameCache::cacheAsyncFrameNativeImageAtIndex):
* platform/graphics/ImageObserver.h:
* platform/graphics/ImageTypes.h:
* rendering/RenderElement.cpp:
(WebCore::RenderElement::RenderElement):
(WebCore::RenderElement::shouldRepaintInVisibleRect):
(WebCore::RenderElement::imageFrameAvailable):
(WebCore::RenderElement::repaintForPausedImageAnimationsIfNeeded):
(WebCore::shouldRepaintForImageAnimation): Deleted.
(WebCore::RenderElement::newImageAnimationFrameAvailable): Deleted.
* rendering/RenderElement.h:
* rendering/RenderView.cpp:
(WebCore::RenderView::updateVisibleViewportRect):
* svg/graphics/SVGImageClients.h:

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

2 years agoARGUMENT BAD: time, time >= 0
commit-queue@webkit.org [Fri, 28 Apr 2017 22:33:28 +0000 (22:33 +0000)]
ARGUMENT BAD: time, time >= 0
https://bugs.webkit.org/show_bug.cgi?id=164336
rdar://problem/29314891

Patch by Jeremy Jones <jeremyj@apple.com> on 2017-04-28
Reviewed by Eric Carlson.

Source/WebCore:

Handle invalid duration and current time when calculating remaining time.

Test media/modern-media-controls/pip-support/pip-support-click.html now works without a workaround
in media/modern-media-controls/pip-support/pip-support-enabled.html

* platform/mac/WebVideoFullscreenHUDWindowController.mm:
(-[WebVideoFullscreenHUDWindowController remainingTimeText]):

LayoutTests:

Remove workaround that affected other tests.

* media/modern-media-controls/pip-support/pip-support-click.html:

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

2 years agoUnreviewed follow-up to r214705.
jbedard@apple.com [Fri, 28 Apr 2017 22:10:10 +0000 (22:10 +0000)]
Unreviewed follow-up to r214705.

shut.copytree will fail if given a file as an argument instead of a directory.

* Scripts/webkitpy/common/system/filesystem.py:
(FileSystem.copy_to_base_host): Use copytree when source is a directory and copyfile
when source is a file.
(FileSystem.copy_from_base_host): Ditto.

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

2 years agoAdd WebCore::protocolIsJavaScript(StringView)
dbates@webkit.org [Fri, 28 Apr 2017 21:45:43 +0000 (21:45 +0000)]
Add WebCore::protocolIsJavaScript(StringView)
https://bugs.webkit.org/show_bug.cgi?id=171396

Reviewed by Alex Christensen.

Add an overload of WebCore::protocolIsJavaScript() that takes a StringView to
avoid the need for a caller to allocate a new String object when converting
from a StringView to a String. We are not using this functionality at the moment,
but we will in the patch for <https://bugs.webkit.org/show_bug.cgi?id=170925>.

No functionality has changed. So, no new tests.

* platform/URL.cpp: Remove an outdated comment about protocolIs(StringView, const char*).
This overload was removed in r212508.
(WebCore::protocolIsInternal): Added.
(WebCore::protocolIs): Implemented in terms of WebCore::protocolIsInternal().
(WebCore::URL::protocolIs): Ditto.
(WebCore::protocolIsJavaScript): Added; overload that takes a StringView.
(WebCore::mimeTypeFromDataURL): Modified to use WebCore::protocolIsInternal().
* platform/URL.h:

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

2 years ago[macOS] WebPlaybackControlsManager needs to know when the selected text or audio...
aestes@apple.com [Fri, 28 Apr 2017 21:44:15 +0000 (21:44 +0000)]
[macOS] WebPlaybackControlsManager needs to know when the selected text or audio track changes
https://bugs.webkit.org/show_bug.cgi?id=171434
<rdar://problem/31887922>

Reviewed by Eric Carlson.

Source/WebCore:

* dom/GenericEventQueue.cpp:
(WebCore::GenericEventQueue::hasPendingEventsOfType): Added to check if a pending event
exists of a certain type.
* dom/GenericEventQueue.h:
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::setSelectedTextTrack): Even if no track modes change, fire a
change event when the track to select is off or automatic so that
WebPlaybackSessionModelMediaElement detects the change.
* html/track/TrackListBase.cpp:
(TrackListBase::isChangeEventScheduled): Returns true if m_asyncEventQueue has a pending
change event.
* html/track/TrackListBase.h:
* platform/cocoa/WebPlaybackSessionModel.h:
(WebCore::WebPlaybackSessionModelClient::audioMediaSelectionIndexChanged):
(WebCore::WebPlaybackSessionModelClient::legibleMediaSelectionIndexChanged):
* platform/cocoa/WebPlaybackSessionModelMediaElement.h:
* platform/cocoa/WebPlaybackSessionModelMediaElement.mm:
(WebCore::WebPlaybackSessionModelMediaElement::setMediaElement): Registered/unregistered for
the change event on the audio and text tracks.
(WebCore::WebPlaybackSessionModelMediaElement::updateForEventName): Called
updateMediaSelectionIndices() when the change event fires.
(WebCore::WebPlaybackSessionModelMediaElement::updateMediaSelectionOptions): Renamed from
updateLegibleOptions().
(WebCore::WebPlaybackSessionModelMediaElement::updateMediaSelectionIndices): Called
audioMediaSelectionIndexChanged() and legibleMediaSelectionIndexChanged() on m_clients with
the updated indices.
(WebCore::WebPlaybackSessionModelMediaElement::legibleMediaSelectedIndex): Fixed a bug
where selectedIndex would never be set to offIndex if offIndex is 0 (which it usually is).
(WebCore::WebPlaybackSessionModelMediaElement::updateLegibleOptions): Renamed to
updateMediaSelectionOptions().
* platform/mac/WebPlaybackControlsManager.h:
* platform/mac/WebPlaybackControlsManager.mm:
(-[WebPlaybackControlsManager setAudioMediaSelectionIndex:]): Set
_currentAudioTouchBarMediaSelectionOption to the object at selectedIndex and manually
triggered a KVO notification. We can't call -setCurrentAudioTouchBarMediaSelectionOption:
here since that will send a message back to the Web process.
(-[WebPlaybackControlsManager setLegibleMediaSelectionIndex:]): Ditto for
_currentLegibleTouchBarMediaSelectionOption.
* platform/mac/WebPlaybackSessionInterfaceMac.h:
* platform/mac/WebPlaybackSessionInterfaceMac.mm:
(WebCore::WebPlaybackSessionInterfaceMac::audioMediaSelectionIndexChanged): Called
-[WebPlaybackControlsManager setAudioMediaSelectionIndex:].
(WebCore::WebPlaybackSessionInterfaceMac::legibleMediaSelectionIndexChanged): Called
-[WebPlaybackControlsManager setLegibleMediaSelectionIndex:].

Source/WebKit2:

* UIProcess/Cocoa/WebPlaybackSessionManagerProxy.h:
* UIProcess/Cocoa/WebPlaybackSessionManagerProxy.messages.in:
* UIProcess/Cocoa/WebPlaybackSessionManagerProxy.mm:
(WebKit::WebPlaybackSessionModelContext::setAudioMediaSelectionIndex): Set
m_audioMediaSelectedIndex and notified clients.
(WebKit::WebPlaybackSessionModelContext::setLegibleMediaSelectionIndex): Ditto for
m_legibleMediaSelectedIndex.
(WebKit::WebPlaybackSessionManagerProxy::setAudioMediaSelectionIndex): Called
WebPlaybackSessionModelContext::setAudioMediaSelectionIndex().
(WebKit::WebPlaybackSessionManagerProxy::setLegibleMediaSelectionIndex): Called
WebPlaybackSessionModelContext::setLegibleMediaSelectionIndex().
* WebProcess/cocoa/WebPlaybackSessionManager.h:
* WebProcess/cocoa/WebPlaybackSessionManager.mm:
(WebKit::WebPlaybackSessionInterfaceContext::audioMediaSelectionIndexChanged): Called
WebPlaybackSessionManager:: audioMediaSelectionIndexChanged().
(WebKit::WebPlaybackSessionInterfaceContext::legibleMediaSelectionIndexChanged): Called
WebPlaybackSessionManager::legibleMediaSelectionIndexChanged().
(WebKit::WebPlaybackSessionManager::audioMediaSelectionIndexChanged): Sent
WebPlaybackSessionManagerProxy::SetAudioMediaSelectionIndex().
(WebKit::WebPlaybackSessionManager::legibleMediaSelectionIndexChanged): Sent
WebPlaybackSessionManagerProxy::SetLegibleMediaSelectionIndex().

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

2 years agoAdd StringView::toExistingAtomicString()
dbates@webkit.org [Fri, 28 Apr 2017 21:22:19 +0000 (21:22 +0000)]
Add StringView::toExistingAtomicString()
https://bugs.webkit.org/show_bug.cgi?id=171405

Reviewed by Andreas Kling.

Similar to the reasons for JSString::toExistingAtomicString() we should expose a way to
convert a StringView to an existing atomic string. Looking up an atomic string is more
efficient that creating one, which requires a lookup and memory allocation.

We are not making use of StringView::toExistingAtomicString() now, but will in the patch
for <https://bugs.webkit.org/show_bug.cgi?id=170925>.

* wtf/text/AtomicStringImpl.cpp:
(WTF::AtomicStringImpl::lookUp): Modified to take a const LChar*/UChar*.
(WTF::AtomicStringImpl::lookUpInternal): Renamed to AtomicStringImpl::lookup() to avoid
an extra function call.
* wtf/text/AtomicStringImpl.h:
* wtf/text/StringView.h:
(WTF::StringView::toExistingAtomicString): Added.

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

2 years agoRange.getClientRects() / getBoundingClientRect() should return DOMRect types
cdumez@apple.com [Fri, 28 Apr 2017 21:16:30 +0000 (21:16 +0000)]
Range.getClientRects() / getBoundingClientRect() should return DOMRect types
https://bugs.webkit.org/show_bug.cgi?id=171393

Reviewed by Simon Fraser.

Source/WebCore:

Range.getClientRects() / getBoundingClientRect() should return DOMRect types:
- https://drafts.csswg.org/cssom-view/#extensions-to-the-range-interface

Test: fast/dom/Range/getBoundingClientRect-getClientRects-return-type.html

* CMakeLists.txt:
* WebCore.xcodeproj/project.pbxproj:
* dom/DOMRect.cpp: Copied from Source/WebCore/dom/DOMRect.h.
(WebCore::createDOMRectVector):
* dom/DOMRect.h:
* dom/Element.cpp:
(WebCore::Element::getClientRects):
* dom/Range.cpp:
(WebCore::Range::getClientRects):
(WebCore::Range::getBoundingClientRect):
* dom/Range.h:
* dom/Range.idl:

LayoutTests:

Add layout test coverage.

* fast/dom/Range/getBoundingClientRect-getClientRects-return-type-expected.txt: Added.
* fast/dom/Range/getBoundingClientRect-getClientRects-return-type.html: Added.

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

2 years agoTweak window.open features argument tokenizer to match HTML standard and Edge
cdumez@apple.com [Fri, 28 Apr 2017 21:02:17 +0000 (21:02 +0000)]
Tweak window.open features argument tokenizer to match HTML standard and Edge
https://bugs.webkit.org/show_bug.cgi?id=170548

Reviewed by Geoffrey Garen.

LayoutTests/imported/w3c:

* web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noopener-expected.txt:
Rebaseline test now that more checks are passing. The remaining failures are because the test currently expects "noopener=0" / "noopener=false" to activate
the 'noopener' feature. The test matches the specification which currently says that if the 'noopener' key is present, then the 'noopener' feature should be
activated, no matter its value. However, I am intentionally not making this change yet because:
- This behavior would be inconsistent with other Window features
- There is upstream discussion on this (https://github.com/whatwg/html/issues/2600) and the current feedback is that the specification should likely
  change to treat 'noopener' more consistently with other features.
I will follow-up once the specification / test settles.

* web-platform-tests/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-tokenization-noopener.html:
Re-sync test from upstream after https://github.com/w3c/web-platform-tests/pull/5715.

Source/WebCore:

Update window.open() features argument tokenizer to match HTML standard:
- https://html.spec.whatwg.org/#concept-window-open-features-tokenize

Also update window.open() to return null instead of the window when
the 'noopener' feature is activated, as per:
- https://html.spec.whatwg.org/#dom-open (Step 10)

No new tests, rebaselined existing test.

* page/DOMWindow.cpp:
(WebCore::DOMWindow::createWindow):
Update window.open() to return null instead of the window when
the 'noopener' feature is activated, as per:
- https://html.spec.whatwg.org/#dom-open (Step 10)

* page/WindowFeatures.cpp:
(WebCore::isSeparator):
Treat all ASCII spaces as feature separators, as per:
- https://html.spec.whatwg.org/#feature-separator
This has the effect of adding U+000C (FormFeed) as a separator.

(WebCore::processFeaturesString):
Align tokenizing code with the specification:
- https://html.spec.whatwg.org/#concept-window-open-features-tokenize
In particular, the following changes were made:
- After the key, skip to first '=', but don't skip past a ',' or a non-separator.
  The "or a non-separator" part is new in the spec (step 3.6.1) and is now implemented.
- After looking for the '=', only treat what follows as a value if the current character
  is a separator. This is as per step 7 in the spec.
These changes now cause us to parse 'foo noopener=1' as ('foo', ''), ('noopener', '1').

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

2 years agoImplement ondevicechange
eric.carlson@apple.com [Fri, 28 Apr 2017 20:57:08 +0000 (20:57 +0000)]
Implement ondevicechange
https://bugs.webkit.org/show_bug.cgi?id=169872

Unreviewed, remove some dead code accidentally committed in r215929.

* platform/mediastream/CaptureDeviceManager.cpp:

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

2 years agoUpdate DOMTokenList.replace() to match the latest DOM specification
cdumez@apple.com [Fri, 28 Apr 2017 20:52:28 +0000 (20:52 +0000)]
Update DOMTokenList.replace() to match the latest DOM specification
https://bugs.webkit.org/show_bug.cgi?id=171388

Reviewed by Alex Christensen.

LayoutTests/imported/w3c:

Re-sync web-platform-test after:
- https://github.com/w3c/web-platform-tests/pull/5725

This adds test coverage for the behavior change in this patch.

* web-platform-tests/dom/nodes/Element-classlist.html:

Source/WebCore:

Update DOMTokenList.replace() to match the latest DOM specification after:
- https://github.com/whatwg/dom/issues/442
- https://github.com/whatwg/infra/pull/126

The latest spec text is at:
- https://dom.spec.whatwg.org/#dom-domtokenlist-replace
- https://infra.spec.whatwg.org/#set-replace

The behavior change in this patch causes (a, b, c).replace(a, c) to return
(c, b) instead of (b, c). This new behavior is aligned with Firefox as well.

No new tests, updated existing test.

* html/DOMTokenList.cpp:
(WebCore::DOMTokenList::replace):

Source/WTF:

Add Vector::findMatching() API which takes in a lambda function for convenience.
Add optional startIndex parameter to Vector::removeFirstMatching() / removeAllMatching()
to remove items only after given index.

* wtf/Vector.h:
(WTF::minCapacity>::findMatching):
(WTF::minCapacity>::find):
(WTF::minCapacity>::removeFirstMatching):
(WTF::minCapacity>::removeAllMatching):

Tools:

Add API test coverage for new Vector API.

* TestWebKitAPI/Tests/WTF/Vector.cpp:
(TestWebKitAPI::TEST):

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

2 years agoWebKitTestRunner/DumpRenderTree prevent device from sleeping
jbedard@apple.com [Fri, 28 Apr 2017 20:50:56 +0000 (20:50 +0000)]
WebKitTestRunner/DumpRenderTree prevent device from sleeping
https://bugs.webkit.org/show_bug.cgi?id=170731

Reviewed by Alex Christensen.

While running layout tests on a device, the device should not be put asleep.

* DumpRenderTree/mac/DumpRenderTree.mm:
(dumpRenderTree): Disable idle timer.
* WebKitTestRunner/ios/TestControllerIOS.mm:
(WTR::TestController::platformInitialize): Ditto.

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

2 years agoStart of support for multiple WebsiteDataStore/SessionIDs per process
beidson@apple.com [Fri, 28 Apr 2017 20:48:40 +0000 (20:48 +0000)]
Start of support for multiple WebsiteDataStore/SessionIDs per process
https://bugs.webkit.org/show_bug.cgi?id=171422

Reviewed by Geoffrey Garen.

Source/WebCore:

Covered by API tests.

* platform/network/NetworkStorageSession.h:
* platform/network/cf/NetworkStorageSessionCFNet.cpp:
(WebCore::NetworkStorageSession::ensureSession):
* platform/spi/cf/CFNetworkSPI.h:

Source/WebKit2:

* CMakeLists.txt:
* WebKit2.xcodeproj/project.pbxproj:

* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::addWebsiteDataStore):
(WebKit::NetworkProcess::destroySession):
(WebKit::NetworkProcess::destroyPrivateBrowsingSession): Deleted.
* NetworkProcess/NetworkProcess.h:
* NetworkProcess/NetworkProcess.messages.in:

* NetworkProcess/RemoteNetworkingContext.h:
* NetworkProcess/mac/RemoteNetworkingContext.mm:
(WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
* NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:
(WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):

* Shared/WebsiteDataStoreParameters.cpp: Copied from Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h.
(WebKit::WebsiteDataStoreParameters::WebsiteDataStoreParameters):
(WebKit::WebsiteDataStoreParameters::encode):
(WebKit::WebsiteDataStoreParameters::decode):
* Shared/WebsiteDataStoreParameters.h: Copied from Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h.

* UIProcess/API/APIWebsiteDataStore.cpp:
(API::WebsiteDataStore::defaultDataStore):
(API::WebsiteDataStore::createLegacy):
(API::WebsiteDataStore::WebsiteDataStore):
(API::WebsiteDataStore::create): Deleted.
* UIProcess/API/APIWebsiteDataStore.h:

* UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
(-[WKWebsiteDataStore _initWithConfiguration:]):

* UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:
(webkitWebsiteDataManagerCreate):
(webkitWebsiteDataManagerGetDataStore):

* UIProcess/WebPageProxy.cpp:
(WebKit::m_weakPtrFactory):
* UIProcess/WebPageProxy.h:

* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::WebProcessPool):
(WebKit::WebProcessPool::setAnyPageGroupMightHavePrivateBrowsingEnabled):
(WebKit::WebProcessPool::pageAddedToProcess):
(WebKit::WebProcessPool::pageRemovedFromProcess):

* UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
(WebKit::WebsiteDataStore::parameters):
* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::create):
(WebKit::WebsiteDataStore::WebsiteDataStore):
(WebKit::WebsiteDataStore::~WebsiteDataStore):
(WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
(WebKit::WebsiteDataStore::parameters):
* UIProcess/WebsiteData/WebsiteDataStore.h:

* WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.h:
* WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
(WebKit::WebFrameNetworkingContext::ensureWebsiteDataStoreSession):
(WebKit::WebFrameNetworkingContext::storageSession):
* WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
(WebKit::WebFrameNetworkingContext::ensureWebsiteDataStoreSession):
* WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.h:

* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::addWebsiteDataStore):
(WebKit::WebProcess::destroySession):
(WebKit::WebProcess::destroyPrivateBrowsingSession): Deleted.
* WebProcess/WebProcess.h:
* WebProcess/WebProcess.messages.in:
* WebProcess/cocoa/WebProcessCocoa.mm:

Tools:

* TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:
(TEST):

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

2 years agoURLSearchParams should be reflective
cdumez@apple.com [Fri, 28 Apr 2017 20:43:26 +0000 (20:43 +0000)]
URLSearchParams should be reflective
https://bugs.webkit.org/show_bug.cgi?id=171345

Reviewed by Alex Christensen.

LayoutTests/imported/w3c:

Merge https://github.com/w3c/web-platform-tests/pull/5736 to gain test
coverage.

* web-platform-tests/url/urlsearchparams-constructor-expected.txt:
* web-platform-tests/url/urlsearchparams-constructor.html:

Source/WebCore:

There was a bug in our implementation of [1] where we would replace
'+' with 0x20 *after* URL-decoding the string, instead of *before*.
This was causing us to replace URL-encoded '+' characters with 0x20.

[1] https://url.spec.whatwg.org/#concept-urlencoded-parser

No new tests, updated existing test.

* platform/URLParser.cpp:

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

2 years agoAdding a runtime flag specific to MediaDevices
commit-queue@webkit.org [Fri, 28 Apr 2017 20:42:40 +0000 (20:42 +0000)]
Adding a runtime flag specific to MediaDevices
https://bugs.webkit.org/show_bug.cgi?id=171433

Patch by Youenn Fablet <youenn@apple.com> on 2017-04-28
Reviewed by Geoffrey Garen.

Source/WebCore:

Covered by existing tests.

Adding a preference for MediaDevices.
Setting media devices runtime flag to false by default.
Setting peer connection and media stream flags to true by default.
Activating mediaDevices and getUserMedia Navigator properties based on media devices flag.

* Modules/mediastream/NavigatorMediaDevices.idl:
* Modules/mediastream/NavigatorUserMedia.idl:
* page/RuntimeEnabledFeatures.cpp:
(WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
* page/RuntimeEnabledFeatures.h:
(WebCore::RuntimeEnabledFeatures::mediaDevicesEnabled):
(WebCore::RuntimeEnabledFeatures::setMediaDevicesEnabled):

Source/WebKit/mac:

Adding a preference for MediaDevices.
Setting media devices runtime flag to false by default.
Setting peer connection and media stream flags to true by default.

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

Source/WebKit2:

Adding a preference for MediaDevices.
Setting media devices runtime flag to false by default.
Setting peer connection and media stream flags to true by default.
Sending microphone sandbox extension based on media devices and not media stream flag.

* Shared/WebPreferencesDefinitions.h:
* UIProcess/API/C/WKPreferences.cpp:
(WKPreferencesSetMediaDevicesEnabled):
(WKPreferencesGetMediaDevicesEnabled):
* UIProcess/API/C/WKPreferencesRef.h:
* UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::WebProcessPool::platformInitializeWebProcess):
* UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
(WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
* WebProcess/InjectedBundle/InjectedBundle.cpp:
(WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::updatePreferences):

Tools:

Updating WTR and DRT as peer connection and media stream runtime flags are enabled by default.
Setting media devices runtime flag to true for WTR and DRT.

* DumpRenderTree/mac/DumpRenderTree.mm:
(enableExperimentalFeatures):
(resetWebPreferencesToConsistentValues):
* TestWebKitAPI/Tests/WebKit2/EnumerateMediaDevices.cpp:
(TestWebKitAPI::TEST):
* TestWebKitAPI/Tests/WebKit2/UserMedia.cpp:
(TestWebKitAPI::TEST):
* WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
(WTR::InjectedBundle::beginTesting):
* WebKitTestRunner/InjectedBundle/TestRunner.cpp:
(WTR::TestRunner::setMediaDevicesEnabled):
(WTR::TestRunner::setMediaStreamEnabled): Deleted.
(WTR::TestRunner::setPeerConnectionEnabled): Deleted.
* WebKitTestRunner/InjectedBundle/TestRunner.h:
* WebKitTestRunner/TestController.cpp:
(WTR::TestController::resetPreferencesToConsistentValues):

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

2 years agoLayoutTests/js/dom/Promise-static-all/race.html are flakey - Unhandled Promise Reject...
joepeck@webkit.org [Fri, 28 Apr 2017 20:13:57 +0000 (20:13 +0000)]
LayoutTests/js/dom/Promise-static-all/race.html are flakey - Unhandled Promise Rejection messages
https://bugs.webkit.org/show_bug.cgi?id=171445

Reviewed by Saam Barati.

* js/dom/Promise-static-all.html:
* js/dom/Promise-static-race.html:
Silence the console messages for unhandled rejections in this test.
There are unhandled rejections and messages sometimes appear
depending on the order of events on the page. The messages are not
important for this test so just mute them.

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

2 years agoUnreviewed, skip imported/w3c/web-platform-tests/html/semantics/tabular-data/processi...
cdumez@apple.com [Fri, 28 Apr 2017 19:53:54 +0000 (19:53 +0000)]
Unreviewed, skip imported/w3c/web-platform-tests/html/semantics/tabular-data/processing-model-1/span-limits.html in Debug builds

This test is slow.

* TestExpectations:

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

2 years agoMark imported/w3c/web-platform-tests/webrtc/rtcpeerconnection/rtcpeerconnection-idl...
ryanhaddad@apple.com [Fri, 28 Apr 2017 19:50:38 +0000 (19:50 +0000)]
Mark imported/w3c/web-platform-tests/webrtc/rtcpeerconnection/rtcpeerconnection-idl.html as flaky.
https://bugs.webkit.org/show_bug.cgi?id=171094

Unreviewed test gardening.

* TestExpectations:

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

2 years agoImplement ondevicechange
eric.carlson@apple.com [Fri, 28 Apr 2017 19:46:01 +0000 (19:46 +0000)]
Implement ondevicechange
https://bugs.webkit.org/show_bug.cgi?id=169872

Unreviewed, fix test crash.

* platform/mediastream/RealtimeMediaSourceCenter.cpp:
(WebCore::RealtimeMediaSourceCenter::addDevicesChangedObserver): "nextToken" must be static.

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

2 years ago[WebGPU] Label MTLCommandQueues with a prefix for internal telemetry
dino@apple.com [Fri, 28 Apr 2017 19:08:14 +0000 (19:08 +0000)]
[WebGPU] Label MTLCommandQueues with a prefix for internal telemetry
https://bugs.webkit.org/show_bug.cgi?id=171441
<rdar://problem/31826915>

Reviewed by Tim Horton.

Source/WebCore:

Prefix any label that is set by the WebGPU API so that
our telemetry can identify the use. Don't expose that
prefix to the API though.

New API Test: GPUCommandQueue

* platform/graphics/cocoa/GPUCommandQueueMetal.mm:
(WebCore::GPUCommandQueue::GPUCommandQueue):
(WebCore::GPUCommandQueue::label):
(WebCore::GPUCommandQueue::setLabel):

Tools:

Add an API test for GPUCommandQueue, exercising creation
and setting the label.

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/WebCore/mac/GPUCommandQueue.mm: Added.
(TestWebKitAPI::TEST_F):

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

2 years agoRebaseline imported/w3c/web-platform-tests/webrtc/rtcpeerconnection/rtcpeerconnection...
ryanhaddad@apple.com [Fri, 28 Apr 2017 18:39:33 +0000 (18:39 +0000)]
Rebaseline imported/w3c/web-platform-tests/webrtc/rtcpeerconnection/rtcpeerconnection-idl.html after r215916.

Unreviewed test gardening.

* web-platform-tests/webrtc/rtcpeerconnection/rtcpeerconnection-idl-expected.txt:

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

2 years ago[ATK] aria-modal="true" should be exposed via ATK_STATE_MODAL
jdiggs@igalia.com [Fri, 28 Apr 2017 18:17:26 +0000 (18:17 +0000)]
[ATK] aria-modal="true" should be exposed via ATK_STATE_MODAL
https://bugs.webkit.org/show_bug.cgi?id=171188

Reviewed by Chris Fleizach.

Source/WebCore:

Include ATK_STATE_MODAL in the AtkObject's state set if the accessible
element's node is the current ARIA modal node.

Test: accessibility/gtk/aria-modal-state-exposed.html

* accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::isAriaModalNode):
* accessibility/AccessibilityObject.h:
* accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
(setAtkStateSetFromCoreObject):

Tools:

Add "AXModal" attribute string so that we can test the state's exposure.

* WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
(WTR::AccessibilityUIElement::boolAttributeValue):

LayoutTests:

* accessibility/gtk/aria-modal-state-exposed-expected.txt: Added.
* accessibility/gtk/aria-modal-state-exposed.html: Added.

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

2 years agoRebaselining test after r215916.
ryanhaddad@apple.com [Fri, 28 Apr 2017 17:52:18 +0000 (17:52 +0000)]
Rebaselining test after r215916.
https://bugs.webkit.org/show_bug.cgi?id=171438

Unreviewed test gardening.

Patch by Matt Lewis <jlewis3@apple.com> on 2017-04-28

* js/dom/global-constructors-attributes-dedicated-worker-expected.txt:
* platform/mac-elcapitan/js/dom/global-constructors-attributes-expected.txt:
* platform/mac-wk1/js/dom/global-constructors-attributes-expected.txt:
* platform/mac/js/dom/global-constructors-attributes-expected.txt:

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

2 years agoRevert instrumentation from https://bugs.webkit.org/show_bug.cgi?id=170086 that is...
mark.lam@apple.com [Fri, 28 Apr 2017 17:51:33 +0000 (17:51 +0000)]
Revert instrumentation from https://bugs.webkit.org/show_bug.cgi?id=170086 that is no longer needed.
https://bugs.webkit.org/show_bug.cgi?id=170094

Reviewed by JF Bastien and Keith Miller.

* heap/Heap.cpp:
(JSC::Heap::resumeThePeriphery):

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

2 years agoImplement ondevicechange
eric.carlson@apple.com [Fri, 28 Apr 2017 17:22:19 +0000 (17:22 +0000)]
Implement ondevicechange
https://bugs.webkit.org/show_bug.cgi?id=169872
<rdar://problem/28945035>

Reviewed by Jer Noble.

Source/WebCore:

Test: fast/mediastream/device-change-event.html

* Modules/mediastream/MediaDevices.cpp:
(WebCore::MediaDevices::MediaDevices): Register for devicechange callbacks.
(WebCore::MediaDevices::~MediaDevices): Unregister.
(WebCore::MediaDevices::scheduledEventTimerFired):
* Modules/mediastream/MediaDevices.h:
* Modules/mediastream/MediaDevices.idl:

* Modules/mediastream/MediaDevicesEnumerationRequest.cpp:
(WebCore::MediaDevicesEnumerationRequest::setDeviceInfo): Remove unnecessary instance variables.
* Modules/mediastream/MediaDevicesEnumerationRequest.h:

* Modules/mediastream/MediaDevicesRequest.cpp:
(WebCore::MediaDevicesRequest::start): Remove m_idHashSalt, it isn't used. RealtimeMediaSourceCenter
now has the method to hash ids and group IDs.
(WebCore::hashString): Deleted.
(WebCore::MediaDevicesRequest::hashID): Deleted.
* Modules/mediastream/MediaDevicesRequest.h:

* dom/Document.h:
(WebCore::Document::setDeviceIDHashSalt):
(WebCore::Document::deviceIDHashSalt):

* dom/EventNames.h: Add devicechange.

* dom/EventTargetFactory.in: Add MediaDevices.

* html/HTMLAttributeNames.in: Add ondevicechange.

* platform/mediastream/CaptureDeviceManager.cpp:
(WebCore::CaptureDeviceManager::captureDeviceFromPersistentID): Renamed from captureDeviceFromDeviceID
and changed to return a std::optional<CaptureDevice>.
(WebCore::CaptureDeviceManager::captureDeviceFromDeviceID): Deleted.

* platform/mediastream/RealtimeMediaSourceCenter.cpp:
(WebCore::addStringToSHA): New, add string bytes to SHA1. Moved from MediaDevicesRequest
so we can use for in testing.
(WebCore::RealtimeMediaSourceCenter::hashStringWithSalt): Generate hash for a string with a
salt. Moved from MediaDevicesRequest so we can use for in testing.
(WebCore::RealtimeMediaSourceCenter::captureDeviceWithUniqueID): Find a CaptureDevice given
a unique ID and the process hash salt.
(WebCore::RealtimeMediaSourceCenter::setDeviceEnabled): Enable/disable a device. Used for
layout tests only.
(WebCore::RealtimeMediaSourceCenter::addDevicesChangedObserver): Add a devices changed listener.
(WebCore::RealtimeMediaSourceCenter::removeDevicesChangedObserver): Remove a listener.
(WebCore::RealtimeMediaSourceCenter::captureDevicesChanged): Notify listeners.
* platform/mediastream/RealtimeMediaSourceCenter.h:

* platform/mediastream/mac/AVCaptureDeviceManager.mm:
(WebCore::AVCaptureDeviceManager::addDevicesChangedObserver): Update for change to captureDeviceFromDeviceID.

* platform/mock/MockRealtimeMediaSource.cpp:
(WebCore::MockRealtimeMediaSource::audioDevices): All devices are enabled by default.
(WebCore::MockRealtimeMediaSource::videoDevices): Ditto.

* platform/mock/MockRealtimeMediaSourceCenter.cpp:
(WebCore::MockRealtimeMediaSourceCenter::createMediaStream): Drive-by cleanup: use the vector
of devices instead of making assumptions about the number.
(WebCore::MockRealtimeMediaSourceCenter::getMediaStreamDevices): Only include enabled devices.
(WebCore::MockRealtimeMediaSourceCenter::setDeviceEnabled): Enable or disable a device.
* platform/mock/MockRealtimeMediaSourceCenter.h:

* testing/Internals.cpp:
(WebCore::Internals::setMediaDeviceState): Enable or disable a mock capture device.
* testing/Internals.h:
* testing/Internals.idl:

LayoutTests:

* fast/mediastream/device-change-event-expected.txt: Added.
* fast/mediastream/device-change-event.html: Added.

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

2 years agoFix memory corruption issue after r215883.
achristensen@apple.com [Fri, 28 Apr 2017 17:16:47 +0000 (17:16 +0000)]
Fix memory corruption issue after r215883.
https://bugs.webkit.org/show_bug.cgi?id=171365

Reviewed by Brady Eidson.

This fixes a crash when starting WebKit2.

* platform/network/cf/NetworkStorageSessionCFNet.cpp:
(WebCore::NetworkStorageSession::NetworkStorageSession):
Initialize m_platformCookieStorage with the default constructor of RetainPtr,
then call NetworkStorageSession::cookieStorage which checks m_platformCookieStorage
for null.  It was checking uninitialized memory when we had m_platformCookieStorage
in the initializer list.

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

2 years agoAX: Implement aria-value support for focusable separators
jdiggs@igalia.com [Fri, 28 Apr 2017 17:08:57 +0000 (17:08 +0000)]
AX: Implement aria-value support for focusable separators
https://bugs.webkit.org/show_bug.cgi?id=171169

Reviewed by Chris Fleizach.

Source/WebCore:

Add SplitterRole to the roles which support range value and are considered a range
control, as long as the SplitterRole element is focusable. Also replace ATK's role-
based check with a call to supportsRangeValue() when determining if the AtkValue
interface should be implemented.

Test: accessibility/separator-values.html

* accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::isRangeControl):
(WebCore::AccessibilityObject::supportsRangeValue):
* accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
(getInterfaceMaskFromObject):

LayoutTests:

* accessibility/separator-values-expected.txt: Added.
* accessibility/separator-values.html: Added.

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

2 years ago[ATK] GridCellRole should implement AtkTableCell (regression?)
jdiggs@igalia.com [Fri, 28 Apr 2017 16:28:32 +0000 (16:28 +0000)]
[ATK] GridCellRole should implement AtkTableCell (regression?)
https://bugs.webkit.org/show_bug.cgi?id=171179

Reviewed by Chris Fleizach.

Source/WebCore:

Add GridCellRole to the group of roles which should implement AtkTableCell.

Test: accessibility/gtk/interface-table-cell.html

* accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
(getInterfaceMaskFromObject):

Tools:

Add new "AXInterfaceTableCell" attribute so that we can test whether or
not there is an implementation of AtkTableCell (i.e. without risking false
negatives from bugs in the interface's implementation).

* WebKitTestRunner/InjectedBundle/atk/AccessibilityUIElementAtk.cpp:
(WTR::AccessibilityUIElement::boolAttributeValue):

LayoutTests:

* accessibility/gtk/interface-table-cell-expected.txt: Added.
* accessibility/gtk/interface-table-cell.html: Added.

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

2 years agoREGRESSION(r215211): [GTK] Several webgl related tests are failing
magomez@igalia.com [Fri, 28 Apr 2017 11:53:52 +0000 (11:53 +0000)]
REGRESSION(r215211): [GTK] Several webgl related tests are failing
https://bugs.webkit.org/show_bug.cgi?id=170730

Reviewed by Said Abou-Hallawa.

Source/WebCore:

There is a wrong situation in the image decoders where the complete data has been assigned
to them but the size of the image hasn't been decoded yet. This is causing rendering
issues in webgl when decoding the images used as textures. To fix this, we refactor how the
encoded data status is stored to avoid that situation: the status is handled completely
by ImageDecoder.h, and it's the one forcing the decode of the size when data gets assigned
to the decoders.

Covered by existent tests.

* platform/image-decoders/ImageDecoder.h:
(WebCore::ImageDecoder::isAllDataReceived):
(WebCore::ImageDecoder::setData):
(WebCore::ImageDecoder::encodedDataStatus):
(WebCore::ImageDecoder::isSizeAvailable):
(WebCore::ImageDecoder::setSize):
(WebCore::ImageDecoder::setFailed):
(WebCore::ImageDecoder::failed):
* platform/image-decoders/bmp/BMPImageDecoder.cpp:
(WebCore::BMPImageDecoder::frameBufferAtIndex):
(WebCore::BMPImageDecoder::decode):
(WebCore::BMPImageDecoder::encodedDataStatus): Deleted.
* platform/image-decoders/bmp/BMPImageDecoder.h:
* platform/image-decoders/gif/GIFImageDecoder.cpp:
(WebCore::GIFImageDecoder::frameCount):
(WebCore::GIFImageDecoder::frameBufferAtIndex):
(WebCore::GIFImageDecoder::decode):
(WebCore::GIFImageDecoder::encodedDataStatus): Deleted.
* platform/image-decoders/gif/GIFImageDecoder.h:
* platform/image-decoders/ico/ICOImageDecoder.cpp:
(WebCore::ICOImageDecoder::setData):
(WebCore::ICOImageDecoder::frameCount):
(WebCore::ICOImageDecoder::frameBufferAtIndex):
(WebCore::ICOImageDecoder::setDataForPNGDecoderAtIndex):
(WebCore::ICOImageDecoder::decode):
(WebCore::ICOImageDecoder::decodeAtIndex):
(WebCore::ICOImageDecoder::encodedDataStatus): Deleted.
* platform/image-decoders/ico/ICOImageDecoder.h:
* platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
(WebCore::JPEGImageDecoder::frameBufferAtIndex):
(WebCore::JPEGImageDecoder::decode):
(WebCore::JPEGImageDecoder::encodedDataStatus): Deleted.
* platform/image-decoders/jpeg/JPEGImageDecoder.h:
* platform/image-decoders/png/PNGImageDecoder.cpp:
(WebCore::PNGImageDecoder::frameBufferAtIndex):
(WebCore::PNGImageDecoder::decode):
(WebCore::PNGImageDecoder::encodedDataStatus): Deleted.
* platform/image-decoders/png/PNGImageDecoder.h:
* platform/image-decoders/webp/WEBPImageDecoder.cpp:
(WebCore::WEBPImageDecoder::frameBufferAtIndex):
(WebCore::WEBPImageDecoder::decode):
(WebCore::WEBPImageDecoder::encodedDataStatus): Deleted.
* platform/image-decoders/webp/WEBPImageDecoder.h:

LayoutTests:

Adjust test expectations for the tests that were failing. They must pass now.

* platform/gtk/TestExpectations:

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

2 years agoTeach WebProcessPool to track a map of SessionIDs to WebPageProxys to manage their...
beidson@apple.com [Fri, 28 Apr 2017 07:04:16 +0000 (07:04 +0000)]
Teach WebProcessPool to track a map of SessionIDs to WebPageProxys to manage their lifetime
https://bugs.webkit.org/show_bug.cgi?id=171408

Reviewed by Alex Christensen.

* UIProcess/API/APIPageConfiguration.cpp:
(API::PageConfiguration::sessionID):
* UIProcess/API/APIPageConfiguration.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::reattachToWebProcess):
(WebKit::WebPageProxy::close):
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::pageAddedToProcess):
(WebKit::WebProcessPool::pageRemovedFromProcess):
* UIProcess/WebProcessPool.h:
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::createWebPage):
(WebKit::WebProcessProxy::addExistingWebPage):
(WebKit::WebProcessProxy::removeWebPage):
* UIProcess/WebProcessProxy.h:

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

2 years agoMove UUID from WebCore/platform to WTF
carlosgc@webkit.org [Fri, 28 Apr 2017 06:30:17 +0000 (06:30 +0000)]
Move UUID from WebCore/platform to WTF
https://bugs.webkit.org/show_bug.cgi?id=171372

Reviewed by Michael Catanzaro.

Source/WebCore:

UUID only contains createCanonicalUUIDString() that is platform independent and doesn't depend on anything from
WebCore, only from WTF.

* CMakeLists.txt:
* Modules/encryptedmedia/legacy/LegacyCDMSessionClearKey.cpp:
* Modules/mediacontrols/MediaControlsHost.cpp:
* Modules/mediastream/RTCPeerConnection.cpp:
* Modules/webaudio/MediaStreamAudioSource.cpp:
* Modules/webdatabase/DatabaseTracker.cpp:
* WebCore.order:
* WebCore.xcodeproj/project.pbxproj:
* editing/mac/EditorMac.mm:
* fileapi/BlobURL.cpp:
* loader/appcache/ApplicationCacheHost.cpp:
* loader/appcache/ApplicationCacheStorage.cpp:
* platform/URL.cpp:
* platform/glib/FileSystemGlib.cpp:
* platform/graphics/avfoundation/cf/CDMSessionAVFoundationCF.cpp:
* platform/graphics/avfoundation/objc/CDMSessionAVContentKeySession.mm:
* platform/graphics/avfoundation/objc/CDMSessionAVFoundationObjC.mm:
* platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
* platform/mediastream/CaptureDeviceManager.cpp:
* platform/mediastream/MediaStreamPrivate.h:
* platform/mediastream/MediaStreamTrackPrivate.cpp:
* platform/mediastream/RealtimeMediaSource.cpp:
* platform/mediastream/mac/AVCaptureDeviceManager.mm:
* platform/mediastream/mac/AVMediaCaptureSource.mm:
* platform/mediastream/openwebrtc/RealtimeMediaSourceCenterOwr.cpp:
* platform/mock/MockRealtimeAudioSource.cpp:
* platform/mock/MockRealtimeMediaSourceCenter.cpp:
* platform/mock/MockRealtimeVideoSource.cpp:
* testing/MockCDMFactory.cpp:

Source/WebKit2:

* UIProcess/Automation/WebAutomationSession.cpp:
(WebKit::WebAutomationSession::handleForWebPageProxy):
(WebKit::WebAutomationSession::handleForWebFrameID):
* UIProcess/gtk/WaylandCompositor.cpp:
* WebProcess/Automation/WebAutomationSessionProxy.cpp:
(WebKit::createUUID):
* WebProcess/Plugins/PDF/PDFPlugin.mm:
(WebKit::PDFPlugin::openWithNativeApplication):

Source/WTF:

* WTF.xcodeproj/project.pbxproj:
* wtf/CMakeLists.txt:
* wtf/UUID.cpp: Renamed from Source/WebCore/platform/UUID.cpp.
* wtf/UUID.h: Renamed from Source/WebCore/platform/UUID.h.

Tools:

* WebKitTestRunner/TestController.cpp:

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

2 years ago[INTL] Implement the caseFirst option for Intl.Collator
commit-queue@webkit.org [Fri, 28 Apr 2017 06:00:20 +0000 (06:00 +0000)]
[INTL] Implement the caseFirst option for Intl.Collator
https://bugs.webkit.org/show_bug.cgi?id=158188

Patch by Andy VanWagoner <thetalecrafter@gmail.com> on 2017-04-27
Reviewed by Geoffrey Garen.

Source/JavaScriptCore:

Implements the caseFirst option and unicode locale extension.
The caseFirst option explicitly determines whether upper or lower case comes first.

* runtime/IntlCollator.cpp:
(JSC::sortLocaleData): Added kf data.
(JSC::searchLocaleData): Added kf data.
(JSC::IntlCollator::initializeCollator): Set caseFirst option.
(JSC::IntlCollator::createCollator): Set new attributes on ICU collator.
(JSC::IntlCollator::caseFirstString): Added.
(JSC::IntlCollator::resolvedOptions): Added caseFirst property.
* runtime/IntlCollator.h:

LayoutTests:

Updates the Intl.Collator tests to check caseFirst support.
The caseFirst option or unicode locale extension lets the user explicitly
set if lower or upper case characters should be first in order.

* js/intl-collator-expected.txt:
* js/script-tests/intl-collator.js:
(testCollator):

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

2 years ago[GTK] Web Inspector: Add new GTK+ icons for different Script Timeline Views (Events...
commit-queue@webkit.org [Fri, 28 Apr 2017 05:20:35 +0000 (05:20 +0000)]
[GTK] Web Inspector: Add new GTK+ icons for different Script Timeline Views (Events and Call Trees)
https://bugs.webkit.org/show_bug.cgi?id=155077

Patch by Fujii Hironori <Hironori.Fujii@sony.com> on 2017-04-27
Reviewed by Joseph Pecoraro.

* UserInterface/Images/gtk/CallTrees.svg: Added.
* UserInterface/Images/gtk/Events.svg: Added.
* UserInterface/Views/PathComponentIcons.css:
(body:not(.mac-platform, .windows-platform) .heap-snapshot-record .icon,):
(body:not(.mac-platform, .windows-platform) .events-icon .icon,): Deleted.

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

2 years agoFix some RELEASE_ASSERT failures caused by OutOfMemoryErrors.
mark.lam@apple.com [Fri, 28 Apr 2017 04:15:00 +0000 (04:15 +0000)]
Fix some RELEASE_ASSERT failures caused by OutOfMemoryErrors.
https://bugs.webkit.org/show_bug.cgi?id=171404
<rdar://problem/31876178>

Reviewed by Saam Barati.

JSTests:

* stress/js-fixed-array-out-of-memory.js: Added.

Source/JavaScriptCore:

1. Added some tryAllocate() functions in JSCellInlines.h.
2. Consolidated the implementations of allocateCell() template functions into a
   single tryAllocateCellHelper() to reduce redundancy and eliminate needing to
   copy-paste for variations of allocateCell and tryAllocateCell.
3. Changed JSFixedArray::createFromArray() and constructEmptyArray() to check for
   allocation failure and throw an OutOfMemoryError.  It was already possible to
   throw errors from these functions for other reasons.  So, their clients are
   already ready to handle OOMEs.

* ftl/FTLOperations.cpp:
(JSC::FTL::operationMaterializeObjectInOSR):
* runtime/JSCInlines.h:
* runtime/JSCell.h:
* runtime/JSCellInlines.h:
(JSC::tryAllocateCellHelper):
(JSC::allocateCell):
(JSC::tryAllocateCell):
* runtime/JSFixedArray.h:
(JSC::JSFixedArray::createFromArray):
(JSC::JSFixedArray::tryCreate):
(JSC::JSFixedArray::create): Deleted.
* runtime/JSGlobalObject.h:
(JSC::constructEmptyArray):

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

2 years agoMake navigation policy checking more robust
achristensen@apple.com [Fri, 28 Apr 2017 04:05:56 +0000 (04:05 +0000)]
Make navigation policy checking more robust
https://bugs.webkit.org/show_bug.cgi?id=171409
<rdar://problem/31489248>

Reviewed by Geoffrey Garen.

No change in behavior.  Just added a protectedThis to a lambda and made the functions non-copyable.

* loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::willSendRequest):
* loader/PolicyCallback.cpp:
(WebCore::PolicyCallback::set):
(WebCore::PolicyCallback::clear): Deleted.
* loader/PolicyCallback.h:
* loader/PolicyChecker.cpp:
(WebCore::PolicyChecker::cancelCheck):
(WebCore::PolicyChecker::stopCheck):
(WebCore::PolicyChecker::continueAfterNavigationPolicy):
(WebCore::PolicyChecker::continueAfterNewWindowPolicy):
(WebCore::PolicyChecker::continueAfterContentPolicy):

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

2 years agoData interaction should not load pasteboard content before performing the data operation
wenson_hsieh@apple.com [Fri, 28 Apr 2017 04:01:43 +0000 (04:01 +0000)]
Data interaction should not load pasteboard content before performing the data operation
https://bugs.webkit.org/show_bug.cgi?id=171414
<rdar://problem/31878197>

Reviewed by Tim Horton.

When interacting with a link, we should not try to fetch pasteboard contents for the URL UTI type before
performing the data operation. Teaches DragController to know whether it is allowed to load data from the
dragging pasteboard, and uses this information in DragController::dragOperation to determine whether to use
DragData::containsURLTypeIdentifier or DragData::containsURL.

* page/DragController.cpp:
(WebCore::DragController::DragController):
(WebCore::DragController::performDragOperation):
* page/DragController.h:
(WebCore::DragController::canLoadDataFromDraggingPasteboard):
* page/mac/DragControllerMac.mm:
(WebCore::DragController::dragOperation):
* platform/DragData.h:
* platform/ios/WebItemProviderPasteboard.mm:
(-[WebItemProviderPasteboard _preLoadedDataConformingToType:forItemProviderAtIndex:]):
* platform/mac/DragDataMac.mm:
(WebCore::DragData::containsURLTypeIdentifier):

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

2 years agoSupport for promise rejection events (unhandledrejection)
joepeck@webkit.org [Fri, 28 Apr 2017 03:33:57 +0000 (03:33 +0000)]
Support for promise rejection events (unhandledrejection)
https://bugs.webkit.org/show_bug.cgi?id=150358
<rdar://problem/28441651>

Reviewed by Saam Barati.

Patch by Joseph Pecoraro and Yusuke Suzuki.

LayoutTests/imported/w3c:

* web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_bits-expected.txt:
* web-platform-tests/WebCryptoAPI/derive_bits_keys/test_ecdh_keys-expected.txt:
* web-platform-tests/html/semantics/embedded-content/media-elements/event_pause_noautoplay-expected.txt:
* web-platform-tests/html/semantics/embedded-content/media-elements/event_play_noautoplay-expected.txt:
* web-platform-tests/html/semantics/embedded-content/media-elements/paused_true_during_pause-expected.txt:
* web-platform-tests/html/syntax/parsing/html5lib_innerHTML_adoption01-expected.txt:
* web-platform-tests/html/webappapis/scripting/events/body-exposed-window-event-handlers-expected.txt:
* web-platform-tests/streams/piping/close-propagation-forward-expected.txt:
* web-platform-tests/streams/piping/error-propagation-backward-expected.txt:
* web-platform-tests/streams/piping/error-propagation-forward-expected.txt:
* web-platform-tests/streams/piping/flow-control-expected.txt:
* web-platform-tests/streams/piping/general-expected.txt:
* web-platform-tests/user-timing/measure_exceptions_navigation_timing-expected.txt:
Rebaseline expectations to include unhandled promise rejection messages.
Also change how the test harness reports success or failure to use the values
immediately on completion and then allow a run loop cycle before completing
the test to gather the output.

* web-platform-tests/resource-timing/rt-resource-errors.html:
This is our own WPT test yet to be uploaded, so update the test to prevent
an unexpected unhandled rejection.

Source/JavaScriptCore:

Implement support for promise.[[PromiseIsHandled]] and the
HostPromiseRejectionTracker hook for HTML to track promise rejections:
https://tc39.github.io/ecma262/#sec-host-promise-rejection-tracker
https://html.spec.whatwg.org/multipage/webappapis.html#unhandled-promise-rejections

* builtins/BuiltinNames.h:
New private symbols.

* builtins/PromiseOperations.js:
(globalPrivate.newHandledRejectedPromise):
Utility to create a rejected promise with [[PromiseIsHandled]] to true.

(globalPrivate.rejectPromise):
(globalPrivate.initializePromise):
* builtins/PromisePrototype.js:
(then):
Implement standard behavior of [[PromiseIsHandled]] and the host hook.

* runtime/JSPromise.cpp:
(JSC::JSPromise::isHandled):
* runtime/JSPromise.h:
C++ accessors for the [[PromiseIsHandled]] state.

* bytecode/BytecodeIntrinsicRegistry.cpp:
(JSC::BytecodeIntrinsicRegistry::BytecodeIntrinsicRegistry):
* bytecode/BytecodeIntrinsicRegistry.h:
Expose private values for the Reject / Handle enum values in built-ins.

* jsc.cpp:
* runtime/JSGlobalObject.h:
(JSC::JSGlobalObject::promiseResolveFunction):
Add a new GlobalObjectMethodTable hook matching the promise rejection hook.

* runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::init):
(JSC::JSGlobalObject::visitChildren):
* runtime/JSGlobalObjectFunctions.cpp:
(JSC::globalFuncHostPromiseRejectionTracker):
* runtime/JSGlobalObjectFunctions.h:
Plumb the builtin hook through to the optional GlobalObjectMethodTable hook.

* inspector/InjectedScriptSource.js:
(InjectedScript.prototype.createFakeValueDescriptor):
Silence possible rejected promises created internally via Web Inspector.

Source/WebCore:

Implement support for the `onunhandledrejection` and `rejectionhandled` events.
They dispatch a new PromiseRejectionEvent using the ES6 HostPromiseRejectionTracker hook:
https://tc39.github.io/ecma262/#sec-host-promise-rejection-tracker
https://html.spec.whatwg.org/multipage/webappapis.html#unhandled-promise-rejections

This is currently implemented only for Documents and not yet Web Workers.

Tests: js/dom/unhandled-promise-rejection-basic.html
       js/dom/unhandled-promise-rejection-bindings-type-error.html
       js/dom/unhandled-promise-rejection-console-no-report.html
       js/dom/unhandled-promise-rejection-console-report.html
       js/dom/unhandled-promise-rejection-handle-during-event.html
       js/dom/unhandled-promise-rejection-handle-in-handler.html
       js/dom/unhandled-promise-rejection-handle.html
       js/dom/unhandled-promise-rejection-order.html

* CMakeLists.txt:
* DerivedSources.cpp:
* DerivedSources.make:
* WebCore.xcodeproj/project.pbxproj:
* dom/DOMAllInOne.cpp:
New files.

* bindings/scripts/CodeGenerator.pm:
(IsPromiseType):
* bindings/scripts/CodeGeneratorJS.pm:
(AddToIncludesForIDLType):
(GetBaseIDLType):
Binding support for Promise<T> attributes.

* bindings/js/JSDOMConvert.h:
* bindings/js/JSDOMConvertPromise.h: Copied from Source/JavaScriptCore/runtime/JSPromise.h.
(WebCore::Converter<IDLPromise<T>>::convert):
(WebCore::JSConverter<IDLPromise<T>>::convert):
Promise<T> binding conversion is currently unimplemented, which only means
web developers creating their own PromiseRejectionEvent will not get
autowrapping of values assigned to `promise` in event initialization.
Engine generated events will have expected behavior.

* bindings/js/JSDOMWindowBase.cpp:
(WebCore::JSDOMWindowBase::promiseRejectionTracker):
* bindings/js/JSDOMWindowBase.h:
* bindings/js/JSWorkerGlobalScopeBase.cpp:
Implement HostPromiseRejectionTracker hook for Document but not Worker.
Passes through to the ScriptExecutionContext's tracker.

* bindings/js/JSMainThreadExecState.cpp:
(WebCore::JSMainThreadExecState::didLeaveScriptContext):
* bindings/js/JSMainThreadExecState.h:
(WebCore::JSMainThreadExecState::~JSMainThreadExecState):
When completing script execution and performing microtasks notify
about rejected promises. Technically this should go inside of
performing a microtask checkpoint, except lacking EventLoop
concepts we use ScriptExecutionState.

* dom/EventNames.h:
* dom/EventNames.in:
* dom/PromiseRejectionEvent.cpp: Added.
(WebCore::PromiseRejectionEvent::PromiseRejectionEvent):
(WebCore::PromiseRejectionEvent::~PromiseRejectionEvent):
* dom/PromiseRejectionEvent.h: Added.
* dom/PromiseRejectionEvent.idl: Added.
New PromiseRejectionEvent event interface.

* dom/GlobalEventHandlers.idl:
New onunhandledrejection and onrejectionhandled.

* dom/RejectedPromiseTracker.cpp: Added.
(WebCore::RejectedPromise::RejectedPromise):
(WebCore::RejectedPromise::globalObject):
(WebCore::RejectedPromise::promise):
(WebCore::UnhandledPromise::UnhandledPromise):
(WebCore::UnhandledPromise::callStack):
(WebCore::RejectedPromiseTracker::RejectedPromiseTracker):
(WebCore::RejectedPromiseTracker::~RejectedPromiseTracker):
(WebCore::createScriptCallStackFromReason):
(WebCore::RejectedPromiseTracker::promiseRejected):
(WebCore::RejectedPromiseTracker::promiseHandled):
(WebCore::RejectedPromiseTracker::processQueueSoon):
(WebCore::RejectedPromiseTracker::reportUnhandledRejections):
(WebCore::RejectedPromiseTracker::reportRejectionHandled):
* dom/RejectedPromiseTracker.h: Added.
Track and report rejected promises. The promises are tracked weakly
allowing them to be collected before they are reported. When reporting
we dispatch PromiseRejectionEvent events, and if the default is not
prevented we log a message to the console.

* dom/ScriptExecutionContext.cpp:
(WebCore::ScriptExecutionContext::reportUnhandledPromiseRejection):
(WebCore::ScriptExecutionContext::ensureRejectedPromiseTrackerSlow):
* dom/ScriptExecutionContext.h:
(WebCore::ScriptExecutionContext::ensureRejectedPromiseTracker):
Each ScriptExecutionContext can own a rejected promise tracker.

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::pauseInternal):
https://html.spec.whatwg.org/multipage/embedded-content.html#internal-pause-steps
Internal pause steps say to timeupdate, pause, and rejecting pending play promises
should all happen in a queued task. Here the first two actions are already scheduled
on tasks, but rejecting play promises was not being done in a task, so this makes
that change.

* Modules/streams/ReadableStream.js:
(pipeThrough):
* Modules/streams/ReadableStreamInternals.js:
(readableStreamReaderGenericInitialize):
(readableStreamError):
(readableStreamReaderGenericRelease):
Satisfy parts of the Streams specification which state to set the
[[PromiseIsHandled]] internal state of promises created internally
by the Streams APIs. This prevents some internal promises from
appearing as unhandled promise rejections.

LayoutTests:

* js/dom/unhandled-promise-rejection-basic-expected.txt: Added.
* js/dom/unhandled-promise-rejection-basic.html: Added.
* js/dom/unhandled-promise-rejection-bindings-type-error-expected.txt: Added.
* js/dom/unhandled-promise-rejection-bindings-type-error.html: Added.
* js/dom/unhandled-promise-rejection-console-no-report-expected.txt: Added.
* js/dom/unhandled-promise-rejection-console-no-report.html: Added.
* js/dom/unhandled-promise-rejection-console-report-expected.txt: Added.
* js/dom/unhandled-promise-rejection-console-report.html: Added.
* js/dom/unhandled-promise-rejection-handle-during-event-expected.txt: Added.
* js/dom/unhandled-promise-rejection-handle-during-event.html: Added.
* js/dom/unhandled-promise-rejection-handle-expected.txt: Added.
* js/dom/unhandled-promise-rejection-handle-in-handler-expected.txt: Added.
* js/dom/unhandled-promise-rejection-handle-in-handler.html: Added.
* js/dom/unhandled-promise-rejection-handle.html: Added.
* js/dom/unhandled-promise-rejection-order-expected.txt: Added.
* js/dom/unhandled-promise-rejection-order.html: Added.
New tests specific to the `onunhandledrejection` and `onrejectionhandled` events.

* resources/testharnessreport.js:
(self.testRunner.add_completion_callback.sanitize):
(self.testRunner.add_completion_callback):
Report results immediately and then finish the test after a turn. This way
if the test ends with a pass, but may get unhandled rejections after
completing which should not make the test appear as if it failed. Some tests
have unhandled promise rejections but are expected to pass. Likewise some
tests perform cleanup in their own completion callbacks, which happen after
this initial completion callback, and we want to report results after all
the work is done as it may eliminate non-deterministic debug test output.

* TestExpectations:
Mark some tests as flakey that have sometimes have unhandled promise rejections.
These tests are all various imported tests that use the testharness.

* fast/mediastream/MediaStream-MediaElement-setObject-null-expected.txt:
* http/tests/security/video-cross-origin-caching-expected.txt:
* inspector/debugger/break-on-exception-throw-in-promise-expected.txt:
* inspector/debugger/break-on-uncaught-exception-throw-in-promise-expected.txt:
* inspector/worker/resources-in-worker-expected.txt:
* js/dom/dom-static-property-for-in-iteration-expected.txt:
* js/dom/global-constructors-attributes-dedicated-worker-expected.txt:
* js/promises-tests/promises-tests-2-2-6-expected.txt:
* platform/mac/inspector/model/remote-object-expected.txt:
* webrtc/libwebrtc/release-while-creating-offer-expected.txt:
* webrtc/libwebrtc/release-while-setting-local-description-expected.txt:
Update tests with unhandled promise rejection messages.

* media/W3C/audio/events/event_pause_manual.html:
* media/audio-playback-restriction-play-expected.txt:
* media/audio-playback-restriction-play.html:
* media/click-volume-bar-not-pausing.html:
* media/remote-control-command-is-user-gesture-expected.txt:
* media/remote-control-command-is-user-gesture.html:
* media/track/track-mode.html:
* media/video-autoplay-allowed-but-fullscreen-required.html:
* media/video-display-none-crash.html:
* media/video-main-content-deny-display-none.html:
* media/video-main-content-deny-not-in-dom.html:
* media/video-main-content-deny-not-visible.html:
* media/video-main-content-deny-obscured.html:
* media/video-main-content-deny-too-small.html:
* media/video-multiple-concurrent-playback-expected.txt:
* media/video-play-audio-require-user-gesture-expected.txt:
* media/video-play-audio-require-user-gesture.html:
* media/video-play-pause-events-expected.txt:
* media/video-play-pause-events.html:
* media/video-play-pause-exception-expected.txt:
* media/video-play-pause-exception.html:
* media/video-play-require-user-gesture-expected.txt:
* media/video-play-require-user-gesture.html:
* media/video-preload-expected.txt:
* media/video-preload.html:
* media/video-test.js:
(handlePromise.handle):
Snuff many possible unhandled promise rejections in media via media.play().

* streams/reference-implementation/pipe-to-expected.txt:
* streams/reference-implementation/pipe-to-options-expected.txt:
* streams/reference-implementation/readable-stream-templated-expected.txt:
* streams/reference-implementation/writable-stream-abort-expected.txt:
* streams/reference-implementation/writable-stream-expected.txt:
These stream tests are out of date and produce unhandled rejections.

* streams/shadowing-Promise.html:
Update non-imported tests to prevent unhandled rejection messages.

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

2 years agoWeb Inspector: Remove unused ToggleControlToolbarItem.js
nvasilyev@apple.com [Fri, 28 Apr 2017 02:07:40 +0000 (02:07 +0000)]
Web Inspector: Remove unused ToggleControlToolbarItem.js
https://bugs.webkit.org/show_bug.cgi?id=171401

Reviewed by Joseph Pecoraro.

* UserInterface/Main.html:
* UserInterface/Views/ToggleControlToolbarItem.js: Removed.

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

2 years agoAlign colspan/rowspan limits with the latest HTML specification
cdumez@apple.com [Fri, 28 Apr 2017 01:53:56 +0000 (01:53 +0000)]
Align colspan/rowspan limits with the latest HTML specification
https://bugs.webkit.org/show_bug.cgi?id=171322

Reviewed by Darin Adler.

LayoutTests/imported/w3c:

Re-sync some web-platform-tests from upstream to gain test coverage and
rebaseline.

* resources/import-expectations.json:
* web-platform-tests/html/dom/elements-tabular.js:
* web-platform-tests/html/dom/reflection-embedded-expected.txt:
* web-platform-tests/html/dom/reflection-tabular-expected.txt:
* web-platform-tests/html/dom/reflection.js:
(ReflectionTests.typeMap.string_appeared_here.toString):
(ReflectionTests.typeMap.string_appeared_here.valueOf):
(ReflectionTests.reflects):
* web-platform-tests/html/semantics/tabular-data/attributes-common-to-td-and-th-elements/w3c-import.log:
* web-platform-tests/html/semantics/tabular-data/processing-model-1/span-limits-expected.txt: Added.
* web-platform-tests/html/semantics/tabular-data/processing-model-1/span-limits.html: Added.
* web-platform-tests/html/semantics/tabular-data/processing-model-1/w3c-import.log:
* web-platform-tests/html/semantics/tabular-data/the-caption-element/w3c-import.log:
* web-platform-tests/html/semantics/tabular-data/the-table-element/w3c-import.log:
* web-platform-tests/html/semantics/tabular-data/the-tbody-element/w3c-import.log:
* web-platform-tests/html/semantics/tabular-data/the-tfoot-element/w3c-import.log:
* web-platform-tests/html/semantics/tabular-data/the-thead-element/w3c-import.log:
* web-platform-tests/html/semantics/tabular-data/the-tr-element/w3c-import.log:
* web-platform-tests/html/semantics/tabular-data/w3c-import.log:

Source/WebCore:

Align colspan/rowspan limits with the latest HTML specification after:
- https://github.com/whatwg/html/pull/1993

The following changes were made:
- Our rowspan limit was raised from 8190 to 65534
- A colspan limit of 1000 was introduced. Blink has UseCounter data showing that
  colspans over 1000 are extremely rare and Gecko has data showing that when we
  get a colspan greater than 1000, it is usually a bug. Therefore, this change
  should be fine.
- The limits are now properly reflected via the IDL attributes instead of lying
  to the Web about the colspan / rowspan we are using internally.

Test: imported/w3c/web-platform-tests/html/semantics/tabular-data/processing-model-1/span-limits.html

* html/HTMLTableCellElement.cpp:
(WebCore::HTMLTableCellElement::colSpan):
(WebCore::HTMLTableCellElement::rowSpan):
(WebCore::HTMLTableCellElement::rowSpanForBindings):
(WebCore::HTMLTableCellElement::setColSpan):
* html/HTMLTableCellElement.h:
* html/HTMLTableCellElement.idl:
* html/parser/HTMLParserIdioms.cpp:
(WebCore::parseHTMLIntegerInternal):
(WebCore::parseHTMLInteger):
(WebCore::parseHTMLNonNegativeInteger):
(WebCore::parseValidHTMLNonNegativeIntegerInternal):
(WebCore::parseHTTPRefreshInternal):
* html/parser/HTMLParserIdioms.h:
(WebCore::parseHTMLInteger):
(WebCore::parseHTMLNonNegativeInteger):

(WebCore::clampHTMLNonNegativeIntegerToRange):
Add utility function to implement:
- https://html.spec.whatwg.org/#clamped-to-the-range

Source/WebKit/mac:

ObjC bindings build fix.

* DOM/DOMHTMLTableCellElement.mm:
(-[DOMHTMLTableCellElement colSpan]):
(-[DOMHTMLTableCellElement setColSpan:]):

Source/WebKit2:

GTK build fix.

* WebProcess/InjectedBundle/API/gtk/DOM/WebKitDOMHTMLTableCellElement.cpp:
(webkit_dom_html_table_cell_element_get_col_span):
(webkit_dom_html_table_cell_element_set_col_span):

LayoutTests:

Rebaseline a couple of rowspan tests now that our max limit has changed.

* fast/table/giantRowspan2-expected.txt:
* platform/ios/fast/table/giantRowspan-expected.txt:
* platform/ios/imported/w3c/web-platform-tests/html/dom/reflection-embedded-expected.txt:
* platform/mac/fast/table/giantRowspan-expected.txt:

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

2 years agoMark fast/mediacapturefromelement/CanvasCaptureMediaStream-2d-events.html as a flaky...
ryanhaddad@apple.com [Fri, 28 Apr 2017 01:32:30 +0000 (01:32 +0000)]
Mark fast/mediacapturefromelement/CanvasCaptureMediaStream-2d-events.html as a flaky failure.
https://bugs.webkit.org/show_bug.cgi?id=170835

Unreviewed test gardening.

Patch by Matt Lewis <jlewis3@apple.com> on 2017-04-27

* TestExpectations:

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

2 years agoMark imported/blink/paint/deprecatedpaintlayer/non-self-painting-layer-overrides...
commit-queue@webkit.org [Fri, 28 Apr 2017 01:23:45 +0000 (01:23 +0000)]
Mark imported/blink/paint/deprecatedpaintlayer/non-self-painting-layer-overrides-visibility.html as a flaky crash.
https://bugs.webkit.org/show_bug.cgi?id=171406

Unreviewed test gardening.

Patch by Matt Lewis <jlewis3@apple.com> on 2017-04-27

* platform/mac/TestExpectations:

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

2 years agoAdd back tests inadvertently deleted in r205032.
msaboff@apple.com [Fri, 28 Apr 2017 00:57:26 +0000 (00:57 +0000)]
Add back tests inadvertently deleted in r205032.

Rubber stamped by Geoffrey Garen.

* MallocBench/run-malloc-benchmarks:

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

2 years agoWKUIDelegatePrivate needs a hook to vend data used to initialize item providers for...
wenson_hsieh@apple.com [Fri, 28 Apr 2017 00:54:38 +0000 (00:54 +0000)]
WKUIDelegatePrivate needs a hook to vend data used to initialize item providers for data interaction
https://bugs.webkit.org/show_bug.cgi?id=171386
<rdar://problem/31557237>

Reviewed by Beth Dakin.

Source/WebCore:

Teach WebItemProviderPasteboard to remember what WebItemProviderRegistrationInfoList it was initialized with
when beginning a drag. This information is cleared out the next time the list of item providers is set to
something different, which happens when the data interaction session concludes.

* platform/ios/WebItemProviderPasteboard.h:
* platform/ios/WebItemProviderPasteboard.mm:
(-[WebItemProviderPasteboard init]):
(-[WebItemProviderPasteboard setItemProviders:]):
(-[WebItemProviderPasteboard setItemsUsingRegistrationInfoLists:]):
(-[WebItemProviderPasteboard registrationInfoAtIndex:]):
(-[WebItemProviderPasteboard itemProviderAtIndex:]):

Source/WebKit2:

Add a new WKUIDelegate hook, _webView:adjustedDataInteractionItemProvidersForItemProvider:representingObjects:additionalData:.

* UIProcess/API/Cocoa/WKUIDelegatePrivate.h:

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

2 years agobmalloc scavenger should know what page classes are allocating
msaboff@apple.com [Fri, 28 Apr 2017 00:37:51 +0000 (00:37 +0000)]
bmalloc scavenger should know what page classes are allocating
https://bugs.webkit.org/show_bug.cgi?id=171384

Reviewed by Geoffrey Garen.

This change replaces m_isAllocatingPages with a per page class flag to track which page
classes are currently allocating.  When scavenging, we skip page classes that are actively
allocating and come back to them on a subsequent pass.  This reduces the amount of time it
takes for scavenger to free up pages as well as the total time it takes to handle all
page classes.

* bmalloc/Heap.cpp:
(bmalloc::Heap::Heap):
(bmalloc::Heap::concurrentScavenge):
(bmalloc::Heap::scavenge):
(bmalloc::Heap::scavengeSmallPages):
(bmalloc::Heap::scavengeLargeObjects):
(bmalloc::Heap::allocateSmallPage):
(bmalloc::Heap::splitAndAllocate):
(bmalloc::Heap::deallocateLarge):
* bmalloc/Heap.h:
(bmalloc::Heap::takeRequestedScavengerThreadQOSClass): Deleted.
* bmalloc/VMHeap.h:
(bmalloc::VMHeap::deallocateSmallPage):
* bmalloc/bmalloc.h:
(bmalloc::api::scavenge):

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