WebKit-https.git
2 months agoUneviewed, added myself to contributors.json.
nmouchtaris@apple.com [Mon, 23 Mar 2020 22:14:38 +0000 (22:14 +0000)]
Uneviewed, added myself to contributors.json.

* Scripts/webkitpy/common/config/contributors.json:

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

2 months ago[Win] Unreviewed test gardening.
zalan@apple.com [Mon, 23 Mar 2020 21:59:55 +0000 (21:59 +0000)]
[Win] Unreviewed test gardening.

* platform/win/TestExpectations:

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

2 months ago[GTK] Allow distributors to brand user agent
commit-queue@webkit.org [Mon, 23 Mar 2020 21:50:48 +0000 (21:50 +0000)]
[GTK] Allow distributors to brand user agent
https://bugs.webkit.org/show_bug.cgi?id=162611

Patch by Michael Catanzaro <mcatanzaro@gnome.org> on 2020-03-23
Reviewed by Adrian Perez de Castro.

.:

Add build option for inserting distributor branding into the user agent string.

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

Source/WebCore:

* platform/glib/UserAgentGLib.cpp:
(WebCore::buildUserAgentString):

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

2 months ago[WebGL] Skip vertexAttrib0 simulation when using ANGLE
dino@apple.com [Mon, 23 Mar 2020 21:28:16 +0000 (21:28 +0000)]
[WebGL] Skip vertexAttrib0 simulation when using ANGLE
https://bugs.webkit.org/show_bug.cgi?id=209416
<rdar://problem/60765734>

Reviewed by Antoine Quint.

Source/WebCore:

When using ANGLE as a backend, we do not need to simulate a
missing vertexAttrib0 at the WebGL layer, since ANGLE will
handle it for us.

This causes a couple of tests to begin passing (they were marked as
failures). It also allows us to re-land r258025, which was rolled
out in r258226.

* html/canvas/WebGL2RenderingContext.cpp: Wrap any code that does vertexAttrib0
simulation in a !USE(ANGLE).
(WebCore::WebGL2RenderingContext::initializeVertexArrayObjects):
* html/canvas/WebGLRenderingContext.cpp:
(WebCore::WebGLRenderingContext::initializeVertexArrayObjects):
* html/canvas/WebGLRenderingContextBase.cpp:
(WebCore::WebGLRenderingContextBase::~WebGLRenderingContextBase):
(WebCore::WebGLRenderingContextBase::disableVertexAttribArray):
(WebCore::WebGLRenderingContextBase::validateDrawArrays):
(WebCore::WebGLRenderingContextBase::validateDrawElements):
(WebCore::WebGLRenderingContextBase::drawArrays):
(WebCore::WebGLRenderingContextBase::drawElements):
(WebCore::WebGLRenderingContextBase::getActiveUniform):
(WebCore::WebGLRenderingContextBase::getVertexAttrib):
(WebCore::WebGLRenderingContextBase::vertexAttribfImpl):
(WebCore::WebGLRenderingContextBase::vertexAttribfvImpl):
* html/canvas/WebGLRenderingContextBase.h:
* html/canvas/WebGLVertexArrayObjectBase.cpp:
(WebCore::WebGLVertexArrayObjectBase::unbindBuffer):

LayoutTests:

Remove the console logging that is no longer output when using ANGLE.
Remove failing expectations for some tests.

* fast/canvas/webgl/index-validation-with-subsequent-draws-expected.txt:
* fast/canvas/webgl/out-of-bounds-simulated-vertexAttrib0-drawArrays-expected.txt:
* platform/mac/TestExpectations:

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

2 months ago[JSC] DFG OSR exit cannot find StructureStubInfo for put_by_val if CodeBlock is once...
ysuzuki@apple.com [Mon, 23 Mar 2020 21:09:21 +0000 (21:09 +0000)]
[JSC] DFG OSR exit cannot find StructureStubInfo for put_by_val if CodeBlock is once converved from Baseline to LLInt
https://bugs.webkit.org/show_bug.cgi?id=209327
<rdar://problem/60631061>

Reviewed by Saam Barati.

JSTests:

* stress/osr-exit-attempts-to-find-stubinfo-which-is-cleared-by-previous-baseline-to-llint-conversion.js: Added.
(setter):
(foo):

Source/JavaScriptCore:

DFG compiles op_put_by_val as PutById and inlines SetterCall only when DFG found StructureStubInfo for this op_put_by_val.
However, it is still possible that DFG OSR exit cannot find StructureStubInfo for SetterCall generated by op_put_by_val.
Let's consider the following scenario.

    1. Baseline CodeBlock (A) is compiled.
    2. (A) gets DFG (B).
    3. Since (A) collects enough information for put_by_val, (B) can get StructureStubInfo from (A) and compile it as inlined Setter call.
    4. (A)'s JITData is destroyed since it is not executed. Then, (A) becomes LLInt.
    5. The CodeBlock inlining (A) gets OSR exit. So (A) is executed and (A) eventually gets Baseline CodeBlock again.
    6. (B) gets OSR exit. (B) attempts to search for StructureStubInfo in (A) for PutById (originally, put_by_val). But it does not exist since (A)'s JITData is cleared once.

We should just link to doneTarget of ByValInfo when the SetterCall is generated by `op_put_by_val`. ByValInfo and its doneTarget always exists per op_put_by_val.

* bytecode/ByValInfo.h:
(JSC::ByValInfo::ByValInfo):
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::findByValInfo):
* bytecode/CodeBlock.h:
* dfg/DFGOSRExitCompilerCommon.cpp:
(JSC::DFG::callerReturnPC):
* jit/JITOpcodes.cpp:
(JSC::JIT::privateCompileHasIndexedProperty):
* jit/JITOpcodes32_64.cpp:
(JSC::JIT::privateCompileHasIndexedProperty):
* jit/JITPropertyAccess.cpp:
(JSC::JIT::privateCompilePutByVal):
(JSC::JIT::privateCompilePutByValWithCachedId):

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

2 months agoSupport inserting text or dictation alternative by simulating keyboard input
dbates@webkit.org [Mon, 23 Mar 2020 21:00:01 +0000 (21:00 +0000)]
Support inserting text or dictation alternative by simulating keyboard input
https://bugs.webkit.org/show_bug.cgi?id=209380
<rdar://problem/59445102>

Reviewed by Darin Adler.

Source/WebKit:

As a workaround for sites the implement their own editing system (e.g. facebook.com)
add a new insertion option that makes the insertion having a passing resemblance
of a person typing. The resemblance is achieved by dispatching DOM events with type
"keydown", "keyup", and "change".

* Shared/Cocoa/InsertTextOptions.cpp:
(IPC::ArgumentCoder<WebKit::InsertTextOptions>::encode):
(IPC::ArgumentCoder<WebKit::InsertTextOptions>::decode):
Encode and decode the new option.

* Shared/Cocoa/InsertTextOptions.h: Default the new option, shouldSimulateKeyboardInput,
to false to keep our current behavior.
* UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView _shouldSimulateKeyboardInputOnTextInsertion]): Added. Returns NO when
building without USE(TEXT_INTERACTION_ADDITIONS) to keep the current behavior.

(-[WKContentView insertText:]):
(-[WKContentView insertText:alternatives:style:]):
Set the shouldSimulateKeyboardInput option.

* WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
(WebKit::WebPage::insertDictatedTextAsync):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::insertTextAsync):
If shouldSimulateKeyboardInput is false then do what we do now. Otherwise, dispatch a DOM event
of type "keydown" and perform the insertion. Then dispatch DOM events of type "keyup" and "change".

Tools:

Add tests to ensure that DOM events are dispatched on insertion when shouldSimulateKeyboardInput
is enabled.

I also added a convenience assertion function, EXPECT_NS_EQUAL, that can
compare NSObjects so long as they implement -isEqual and -description. I
make use of this to compare the actual array of fired DOM events types to
an expected array.

* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/Tests/ios/KeyboardInputTestsIOS.mm:
(TestWebKitAPI::shouldSimulateKeyboardInputOnTextInsertionOverride):
(TestWebKitAPI::TEST):
* TestWebKitAPI/cocoa/TestCocoa.h:
(TestWebKitAPI::Util::assertNSObjectsAreEqual): Added.
(EXPECT_NS_EQUAL): Added.
* TestWebKitAPI/ios/insert-text.html: Added.

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

2 months agoChange TextIterator::rangeLength to not require a live range
darin@apple.com [Mon, 23 Mar 2020 20:50:15 +0000 (20:50 +0000)]
Change TextIterator::rangeLength to not require a live range
https://bugs.webkit.org/show_bug.cgi?id=209207

Reviewed by Antti Koivisto.

Source/WebCore:

- Renamed TextIterator::rangeLength to characterCount.

* accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::rangeMatchesTextNearRange): Use characterCount.
(WebCore::resetNodeAndOffsetForReplacedNode): Ditto.
(WebCore::AXObjectCache::nextCharacterOffset): Ditto.
* accessibility/atk/AXObjectCacheAtk.cpp:
(WebCore::AXObjectCache::nodeTextChangePlatformNotification): Ditto.
* accessibility/atk/WebKitAccessibleHyperlink.cpp:
(rangeLengthForObject): Ditto.
* accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper _convertToNSRange:]): Ditto.

* dom/SimpleRange.h: Export another constructor.

* editing/AlternativeTextController.cpp:
(WebCore::AlternativeTextController::applyAlternativeTextToRange):
Use characterCount.
* editing/ApplyStyleCommand.cpp:
(WebCore::ApplyStyleCommand::applyBlockStyle): Ditto.
* editing/CompositeEditCommand.cpp:
(WebCore::CompositeEditCommand::moveParagraphs): Ditto.
* editing/Editing.cpp:
(WebCore::indexForVisiblePosition): Ditto.
* editing/TextCheckingHelper.cpp:
(WebCore::TextCheckingParagraph::rangeLength const): Ditto.
(WebCore::TextCheckingParagraph::offsetTo const): Ditto.
(WebCore::TextCheckingParagraph::checkingStart const): Ditto.
(WebCore::TextCheckingParagraph::checkingEnd const): Ditto.
(WebCore::TextCheckingParagraph::checkingLength const): Ditto.
(WebCore::TextCheckingParagraph::automaticReplacementStart const): Ditto.
(WebCore::TextCheckingParagraph::automaticReplacementLength const): Ditto.
(WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar): Ditto.
(WebCore::TextCheckingHelper::isUngrammatical const): Ditto.

* editing/TextIterator.cpp:
(WebCore::TextIterator::rangeLength): Deleted.
(WebCore::characterCount): Like the baove but the argument is SimpleRange
and return is CharacterCount. Even though each individual node is limited
to 32-bit size, ranges covering multiple nodes could have a count of
characters that exceeds 32 bits, so CharacterCount is size_t.
(WebCore::TextIterator::getLocationAndLengthFromRange): Use characterCount.

* editing/TextIterator.h: Added characterCount function,
CharacterCount and CharacterRange types. Removed TextIterator::rangeLength.
Added FIXME comments about the next steps.

* editing/VisiblePosition.cpp:
(WebCore::makeBoundaryPoint): Added.
* editing/VisiblePosition.h: Added makeBoundaryPoint. Also removed
extraneous forward declarations and moved some function bodies out of the
class definition.

* editing/VisibleUnits.cpp:
(WebCore::distanceBetweenPositions): Changed return type to ptrdiff_t.
Use characterCount.
* editing/VisibleUnits.h: Updated for the above.

* editing/cocoa/DataDetection.mm:
(WebCore::detectItemAtPositionWithRange): Use characterCount.
* editing/cocoa/DictionaryLookup.mm:
(WebCore::DictionaryLookup::rangeForSelection): Ditto.
(WebCore::DictionaryLookup::rangeAtHitTestResult): Ditto.
* editing/ios/DictationCommandIOS.cpp:
(WebCore::DictationCommandIOS::doApply): Ditto.
* editing/mac/DictionaryLookupLegacy.mm:
(WebCore::DictionaryLookup::rangeForSelection): Ditto.
(WebCore::DictionaryLookup::rangeAtHitTestResult): Ditto.
* page/EventHandler.cpp:
(WebCore::textDistance): Ditto.

Source/WebKit:

* Shared/EditingRange.cpp:
(WebKit::EditingRange::toRange): Use characterCount.
* WebProcess/WebCoreSupport/WebEditorClient.cpp:
(WebKit::insertionPointFromCurrentSelection): Changed return type to
CharacterCount and use characterCount.
(WebKit::WebEditorClient::supportsGlobalSelection): Tweaked #if.
* WebProcess/WebPage/WebPage.cpp:
(WebKit::targetFrameForEditing): Use characterCount.
* WebProcess/WebPage/glib/WebPageGLib.cpp:
(WebKit::WebPage::platformEditorState const): Ditto.
* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::rangeNearPositionMatchesText): Ditto.
* WebProcess/WebPage/mac/WebPageMac.mm:
(WebKit::WebPage::platformEditorState const): Ditto.

Source/WebKitLegacy/mac:

* WebCoreSupport/WebEditorClient.mm:
(insertionPointFromCurrentSelection): Use characterCount.
(WebEditorClient::requestCandidatesForSelection): Ditto.
* WebView/WebFrame.mm:
(-[WebFrame _convertToDOMRange:rangeIsRelativeTo:]): Ditto.

LayoutTests:

* editing/mac/spelling/autocorrection-contraction-expected.txt: Update these expected
results because of changes to delegate callbacks. The test is still passing and this
change is only in the legacy WebKit case (there is a separate result for modern WebKit).
This seems to be a progression, not evidence of a bug.

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

2 months agoRename blankURL to aboutBlankURL
youenn@apple.com [Mon, 23 Mar 2020 19:46:57 +0000 (19:46 +0000)]
Rename blankURL to aboutBlankURL
https://bugs.webkit.org/show_bug.cgi?id=209344

Reviewed by Darin Adler.

Source/WebCore:

No change of behavior.

* dom/Document.cpp:
(WebCore::Document::setURL):
(WebCore::Document::completeURL const):
(WebCore::Document::ensureTemplateDocument):
* dom/Document.h:
(WebCore::Document::urlForBindings const):
* dom/InlineStyleSheetOwner.cpp:
(WebCore::parserContextForElement):
* dom/Node.cpp:
(WebCore::Node::baseURI const):
* editing/cocoa/WebContentReaderCocoa.mm:
(WebCore::WebContentReader::readWebArchive):
* editing/markup.cpp:
(WebCore::createFragmentFromMarkup):
* html/DOMURL.cpp:
(WebCore::DOMURL::create):
* html/HTMLFrameElementBase.cpp:
(WebCore::HTMLFrameElementBase::openURL):
(WebCore::HTMLFrameElementBase::location const):
* html/parser/XSSAuditor.cpp:
(WebCore::XSSAuditor::filterScriptToken):
(WebCore::XSSAuditor::filterObjectToken):
(WebCore::XSSAuditor::filterParamToken):
(WebCore::XSSAuditor::filterEmbedToken):
(WebCore::XSSAuditor::filterFormToken):
(WebCore::XSSAuditor::filterInputToken):
(WebCore::XSSAuditor::filterButtonToken):
(WebCore::XSSAuditor::isLikelySafeResource):
* loader/DocumentLoader.cpp:
(WebCore::DocumentLoader::maybeLoadEmpty):
* loader/DocumentLoader.h:
(WebCore::DocumentLoader::serverRedirectSourceForHistory const):
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::loadWithDocumentLoader):
* loader/HistoryController.cpp:
(WebCore::HistoryController::currentItemShouldBeReplaced const):
(WebCore::HistoryController::initializeItem):
* loader/SubframeLoader.cpp:
(WebCore::SubframeLoader::requestFrame):
* loader/archive/cf/LegacyWebArchive.cpp:
(WebCore::LegacyWebArchive::createFromSelection):
* page/Location.cpp:
(WebCore::Location::url const):
* page/SecurityPolicy.cpp:
(WebCore::SecurityPolicy::shouldInheritSecurityOriginFromOwner):
* platform/win/ClipboardUtilitiesWin.cpp:
(WebCore::markupToCFHTML):
* svg/SVGImageLoader.cpp:
(WebCore::SVGImageLoader::sourceURI const):

Source/WebKit:

* UIProcess/API/C/WKPage.cpp:
(WKPageLoadPlainTextStringWithUserData):
* UIProcess/API/C/WKPageGroup.cpp:
(WKPageGroupAddUserStyleSheet):
(WKPageGroupAddUserScript):
* UIProcess/API/glib/WebKitWebView.cpp:
(webkit_web_view_load_plain_text):
* UIProcess/Inspector/WebPageDebuggable.cpp:
(WebKit::WebPageDebuggable::url const):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::loadDataWithNavigationShared):
(WebKit::WebPageProxy::loadWebArchiveData):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::loadData):
(WebKit::WebPage::loadAlternateHTML):
(WebKit::WebPage::dumpHistoryForTesting):
(WebKit::WebPage::addUserScript):
(WebKit::WebPage::addUserStyleSheet):

Source/WebKitLegacy/mac:

* WebCoreSupport/WebFrameLoaderClient.mm:
(WebFrameLoaderClient::updateGlobalHistory):
* WebView/WebFrame.mm:
(-[WebFrame _loadData:MIMEType:textEncodingName:baseURL:unreachableURL:]):

Source/WTF:

Rename blankURL to aboutBlankURL and allow using it without WTF:: prefix.

* wtf/URL.cpp:
(WTF::aboutBlankURL):
(WTF::blankURL): Deleted.
* wtf/URL.h:

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

2 months agoRemove DOMCache::m_records
youenn@apple.com [Mon, 23 Mar 2020 19:33:55 +0000 (19:33 +0000)]
Remove DOMCache::m_records
https://bugs.webkit.org/show_bug.cgi?id=209425

Reviewed by Alex Christensen.

We do not need to keep references of FetchRequest and FetchResponse since we clone them before exposing them.
For that reason, remove m_records and directly use records given from the CacheStorageConnection.
Minor refactoring to modernize/improve code readability.

This is a first step towards a future refactoring that will reduce the sending of records from network process to web process
based on the request parameters: record filtering will be done in network process instead of web process.

No change of behavior.

* Modules/cache/DOMCache.cpp:
(WebCore::createResponse):
(WebCore::DOMCache::doMatch):
(WebCore::DOMCache::cloneResponses):
(WebCore::DOMCache::matchAll):
(WebCore::createRequest):
(WebCore::DOMCache::keys):
(WebCore::DOMCache::retrieveRecords):
(WebCore::DOMCache::queryCache):
(WebCore::DOMCache::queryCacheWithTargetStorage):
(WebCore::DOMCache::batchDeleteOperation):
(WebCore::DOMCache::batchPutOperation):
(WebCore::copyRequestRef): Deleted.
(WebCore::queryCacheMatch): Deleted.
(WebCore::DOMCache::updateRecords): Deleted.
* Modules/cache/DOMCache.h:

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

2 months agoXMLHttpRequest: getAllResponseHeaders() sorting
commit-queue@webkit.org [Mon, 23 Mar 2020 19:31:36 +0000 (19:31 +0000)]
XMLHttpRequest: getAllResponseHeaders() sorting
https://bugs.webkit.org/show_bug.cgi?id=200565

Patch by Rob Buis <rbuis@igalia.com> on 2020-03-23
Reviewed by Darin Adler.

LayoutTests/imported/w3c:

Update improved test result.

* web-platform-tests/xhr/getallresponseheaders-expected.txt:

Source/WebCore:

Sort headers using the ASCII-uppercase header name as key but use ASCII-lowercase header
names in the string result.

Nehavior matches Firefox and Chrome.

Test: imported/web-platform-tests/xhr/getallresponseheaders.htm

[1] https://xhr.spec.whatwg.org/#dom-xmlhttprequest-getallresponseheaders

* xml/XMLHttpRequest.cpp:
(WebCore::XMLHttpRequest::getAllResponseHeaders const):

Source/WTF:

Add a new manipulator that can efficiently convert
Strings to lower or upper ASCII.

* wtf/text/StringConcatenate.h:
(WTF::lowercase):
(WTF::uppercase):
* wtf/text/StringView.cpp:
(WTF::getCharactersWithASCIICaseInternal):
(WTF::StringView::getCharactersWithASCIICase const):
* wtf/text/StringView.h:

LayoutTests:

Update improved test results.

* platform/ios/imported/w3c/web-platform-tests/xhr/getallresponseheaders-expected.txt:
* platform/mac-highsierra/imported/w3c/web-platform-tests/xhr/getallresponseheaders-expected.txt:
* platform/mac-mojave/imported/w3c/web-platform-tests/xhr/getallresponseheaders-expected.txt:

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

2 months agoUnreviewed, address Yusuke's feedback on r258801.
ross.kirsling@sony.com [Mon, 23 Mar 2020 19:05:12 +0000 (19:05 +0000)]
Unreviewed, address Yusuke's feedback on r258801.

* builtins/RegExpPrototype.js:
(globalPrivate.hasObservableSideEffectsForRegExpSplit):
* bytecompiler/NodesCodegen.cpp:
(JSC::BytecodeIntrinsicNode::emit_intrinsic_tryGetById):

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

2 months agoUnreviewed, reverting r258847.
tsavell@apple.com [Mon, 23 Mar 2020 18:49:09 +0000 (18:49 +0000)]
Unreviewed, reverting r258847.

Broke testing on Mac Debug with an Assert

Reverted changeset:

"[LFC] Layout::Box::initialContainingBlock() should return
const InitialContainingBlock&"
https://bugs.webkit.org/show_bug.cgi?id=209406
https://trac.webkit.org/changeset/258847

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

2 months agoAdd checks for app-bound navigations when evaluating user style sheets
katherine_cheney@apple.com [Mon, 23 Mar 2020 18:47:48 +0000 (18:47 +0000)]
Add checks for app-bound navigations when evaluating user style sheets
https://bugs.webkit.org/show_bug.cgi?id=209368
<rdar://problem/60204230>

Reviewed by Brent Fulgham.

Source/WebCore:

* page/Page.cpp:
(WebCore::Page::injectUserStyleSheet):
If the style sheet is for a specific WebView, it will have a pageID
and we can check for app-bound navigation in the page object.

* style/StyleScopeRuleSets.cpp:
(WebCore::Style::ScopeRuleSets::initializeUserStyle):
If the user style sheet is being applied to all WebViews, we can check for
for a page's existence and navigation state here before the style sheet is
updated.

Tools:

Tested cases based on those in UserContentController.mm.

* TestWebKitAPI/Tests/WebKitCocoa/InAppBrowserPrivacy.mm:
(-[InAppBrowserSchemeHandler webView:startURLSchemeTask:]):
(expectScriptEvaluatesToColor):
(TEST):

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

2 months agoAdd SPI to move localStorage to a different domain
achristensen@apple.com [Mon, 23 Mar 2020 18:40:03 +0000 (18:40 +0000)]
Add SPI to move localStorage to a different domain
https://bugs.webkit.org/show_bug.cgi?id=209260
<rdar://problem/60285683>

Reviewed by Brady Eidson.

Source/WebKit:

Covered by an API test.

* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::renameDomainInWebsiteData):
(WebKit::NetworkProcess::getLocalStorageOriginDetails):
* NetworkProcess/NetworkProcess.h:
* NetworkProcess/NetworkProcess.messages.in:
* NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
(WebKit::LocalStorageNamespace::renameDomain):
* NetworkProcess/WebStorage/LocalStorageNamespace.h:
* NetworkProcess/WebStorage/StorageArea.cpp:
(WebKit::StorageArea::close):
* NetworkProcess/WebStorage/StorageArea.h:
* NetworkProcess/WebStorage/StorageManager.cpp:
(WebKit::StorageManager::renameDomain):
* NetworkProcess/WebStorage/StorageManager.h:
* NetworkProcess/WebStorage/StorageManagerSet.cpp:
(WebKit::StorageManagerSet::renameDomain):
* NetworkProcess/WebStorage/StorageManagerSet.h:
* UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
(-[WKWebsiteDataStore _renameDomain:to:forDataOfTypes:completionHandler:]):
* UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
* UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::renameDomainInWebsiteData):
* UIProcess/Network/NetworkProcessProxy.h:
* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::renameDomainInWebsiteData):
* UIProcess/WebsiteData/WebsiteDataStore.h:

Tools:

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

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

2 months agoCatch parameters must not be lexically redeclared
ross.kirsling@sony.com [Mon, 23 Mar 2020 18:23:50 +0000 (18:23 +0000)]
Catch parameters must not be lexically redeclared
https://bugs.webkit.org/show_bug.cgi?id=208976

Reviewed by Keith Miller.

JSTests:

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

Source/JavaScriptCore:

From https://tc39.es/ecma262/#sec-try-statement-static-semantics-early-errors:
  Catch : catch ( CatchParameter ) Block
    It is a Syntax Error if any element of the BoundNames of CatchParameter
    also occurs in the LexicallyDeclaredNames of Block.

In other words, let/const/class/function declarations in the immediate catch block scope
must not shadow catch parameters.

* parser/Parser.cpp:
(JSC::Parser<LexerType>::parseTryStatement):
(JSC::Parser<LexerType>::parseBlockStatement):
* parser/Parser.h:
(JSC::Scope::Scope):
(JSC::Scope::setIsCatchBlockScope): Added.
(JSC::Scope::isCatchBlockScope): Added.
(JSC::Parser::declareVariable):
(JSC::Parser::declareFunction):

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

2 months agoDisable TestWebKitAPI.ProcessSwap.GetUserMediaCaptureState if getUserMedia is not...
youenn@apple.com [Mon, 23 Mar 2020 18:10:48 +0000 (18:10 +0000)]
Disable TestWebKitAPI.ProcessSwap.GetUserMediaCaptureState if getUserMedia is not supported
https://bugs.webkit.org/show_bug.cgi?id=209428

Reviewed by Jonathan Bedard.

* TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:

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

2 months agoFixing merge conflict
jacob_uphoff@apple.com [Mon, 23 Mar 2020 18:01:52 +0000 (18:01 +0000)]
Fixing merge conflict

Unreviewed test gardening.

* platform/ios-wk2/TestExpectations:

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

2 months agoDocumentTimeline / CSSTransition objects are leaking on CNN.com
graouts@webkit.org [Mon, 23 Mar 2020 17:50:08 +0000 (17:50 +0000)]
DocumentTimeline / CSSTransition objects are leaking on CNN.com
https://bugs.webkit.org/show_bug.cgi?id=208069
<rdar://problem/59680143>

Reviewed by Darin Adler.

Integrating post-commit review feedback from Darin.

Source/WebCore:

* testing/Internals.cpp:
(WebCore::Internals::animationWithIdExists const):

Source/WTF:

* wtf/ListHashSet.h:
(WTF::=):

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

2 months agoREGRESSION(r249808): [GTK] Crash in JSC Config::permanentlyFreeze() on architecture...
commit-queue@webkit.org [Mon, 23 Mar 2020 17:34:43 +0000 (17:34 +0000)]
REGRESSION(r249808): [GTK] Crash in JSC Config::permanentlyFreeze() on architecture ppc64el
https://bugs.webkit.org/show_bug.cgi?id=209236

Patch by Michael Catanzaro <mcatanzaro@gnome.org> on 2020-03-23
Reviewed by Mark Lam.

Source/JavaScriptCore:

* heap/MarkedBlock.h: Use new CeilingOnPageSize.
* runtime/JSCConfig.cpp:
(JSC::Config::permanentlyFreeze): Use pageSize instead of vmPageSize.
* runtime/JSCConfig.h: Use new CeilingOnPageSize.

Source/WTF:

Add new CeilingOnPageSize constants, for use in JSC, in order to centralize our compile-time
page size guessing into one place. Improve the implementation of pageSize() to
RELEASE_ASSERT() when CeilingOnPageSize is wrong, so we can detect and fix it if so. (It
will be even easier to detect if we change RELEASE_ASSERT_WITH_MESSAGE() to actually print
its message in release builds.) Change pageSize() to use sysconf(_SC_PAGESIZE), which is
specified by POSIX, instead of getpagesize(), which is nonstandard.

* wtf/PageBlock.cpp:
(WTF::systemPageSize):
(WTF::pageSize):
* wtf/PageBlock.h:

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

2 months ago[Win] http/wpt/css/css-animations/start-animation-001.html is failing on Windows EWS
graouts@webkit.org [Mon, 23 Mar 2020 16:52:48 +0000 (16:52 +0000)]
[Win] http/wpt/css/css-animations/start-animation-001.html is failing on Windows EWS
https://bugs.webkit.org/show_bug.cgi?id=209426

Unreviewed test gardening.

* platform/win/TestExpectations:

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

2 months agoPort window.postMessage to the HTML event loop
cdumez@apple.com [Mon, 23 Mar 2020 16:51:24 +0000 (16:51 +0000)]
Port window.postMessage to the HTML event loop
https://bugs.webkit.org/show_bug.cgi?id=209359

Reviewed by Alex Christensen.

LayoutTests/imported/w3c:

Rebaseline test now that the logging ordering is slightly different.

* web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects-expected.txt:

Source/WebCore:

Port window.postMessage to the HTML event loop instead of using a 0-timer.

* inspector/InspectorInstrumentation.cpp:
(WebCore::InspectorInstrumentation::willPostMessageImpl):
(WebCore::InspectorInstrumentation::didPostMessageImpl):
(WebCore::InspectorInstrumentation::didFailPostMessageImpl):
(WebCore::InspectorInstrumentation::willDispatchPostMessageImpl):
(WebCore::InspectorInstrumentation::didDispatchPostMessageImpl):
* inspector/InspectorInstrumentation.h:
(WebCore::InspectorInstrumentation::willPostMessage):
(WebCore::InspectorInstrumentation::didPostMessage):
(WebCore::InspectorInstrumentation::didFailPostMessage):
(WebCore::InspectorInstrumentation::willDispatchPostMessage):
(WebCore::InspectorInstrumentation::didDispatchPostMessage):
* inspector/agents/WebDebuggerAgent.cpp:
(WebCore::WebDebuggerAgent::willPostMessage):
(WebCore::WebDebuggerAgent::didPostMessage):
(WebCore::WebDebuggerAgent::didFailPostMessage):
(WebCore::WebDebuggerAgent::willDispatchPostMessage):
(WebCore::WebDebuggerAgent::didDispatchPostMessage):
(WebCore::WebDebuggerAgent::didClearAsyncStackTraceData):
* inspector/agents/WebDebuggerAgent.h:
* page/DOMWindow.cpp:
(WebCore::DOMWindow::postMessage):
(WebCore::PostMessageTimer::PostMessageTimer): Deleted.
(WebCore::PostMessageTimer::event): Deleted.
(WebCore::PostMessageTimer::targetOrigin const): Deleted.
(WebCore::PostMessageTimer::stackTrace const): Deleted.
(WebCore::DOMWindow::postMessageTimerFired): Deleted.
* page/DOMWindow.h:

LayoutTests:

Update tests so that it does not run postMessage tests in parallel on the 2 different-origin iframes,
since the ordering would not be guaranteed and it would cause flakiness.

* http/tests/security/postMessage/resources/recv.js:
(recv):
* http/tests/security/postMessage/target-origin-expected.txt:
* http/tests/security/postMessage/target-origin.html:

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

2 months agoWeb Inspector: Uncaught Exception: TypeError: this._springEditor.removeListeners...
drousso@apple.com [Mon, 23 Mar 2020 16:15:39 +0000 (16:15 +0000)]
Web Inspector: Uncaught Exception: TypeError: this._springEditor.removeListeners is not a function. (In 'this._springEditor.removeListeners()', 'this._springEditor.removeListeners' is undefined)
https://bugs.webkit.org/show_bug.cgi?id=209325

Reviewed by Brian Burg.

* UserInterface/Controllers/CodeMirrorSpringEditingController.js:
(WI.CodeMirrorSpringEditingController.prototype.popoverDidDismiss): Deleted.

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

2 months ago[LFC] Layout::Box::initialContainingBlock() should return const InitialContainingBlock&
zalan@apple.com [Mon, 23 Mar 2020 16:08:50 +0000 (16:08 +0000)]
[LFC] Layout::Box::initialContainingBlock() should return const InitialContainingBlock&
https://bugs.webkit.org/show_bug.cgi?id=209406
<rdar://problem/60749715>

Reviewed by Antti Koivisto.

Use is<InitialContainingBlock> where applicable.

* layout/FormattingContext.cpp:
(WebCore::Layout::FormattingContext::geometryForBox const):
(WebCore::Layout::FormattingContext::collectOutOfFlowDescendantsIfNeeded):
* layout/FormattingContextQuirks.cpp:
(WebCore::Layout::FormattingContext::Quirks::heightValueOfNearestContainingBlockWithFixedHeight):
* layout/blockformatting/BlockFormattingContextQuirks.cpp:
* layout/displaytree/DisplayPainter.cpp:
(WebCore::Display::absoluteDisplayBox):
* layout/invalidation/InvalidationState.cpp:
(WebCore::Layout::InvalidationState::markNeedsUpdate):
* layout/layouttree/LayoutBox.cpp:
(WebCore::Layout::Box::establishesBlockFormattingContext const):
(WebCore::Layout::Box::containingBlock const):
(WebCore::Layout::Box::formattingContextRoot const):
(WebCore::Layout::Box::initialContainingBlock const):
(WebCore::Layout::Box::isInFormattingContextOf const):
(WebCore::Layout::Box::isOverflowVisible const):
* layout/layouttree/LayoutBox.h:
(WebCore::Layout::Box::isInitialContainingBlock const):
(WebCore::Layout::Box::isInlineTextBox const):
(WebCore::Layout::Box::isLineBreakBox const):
(WebCore::Layout::Box::isReplacedBox const):
* layout/layouttree/LayoutInitialContainingBlock.cpp:
(WebCore::Layout::InitialContainingBlock::InitialContainingBlock):
* layout/layouttree/LayoutInlineTextBox.cpp:
(WebCore::Layout::InlineTextBox::InlineTextBox):
* layout/layouttree/LayoutLineBreakBox.cpp:
(WebCore::Layout::LineBreakBox::LineBreakBox):
* layout/layouttree/LayoutReplacedBox.cpp:
(WebCore::Layout::ReplacedBox::ReplacedBox):
* layout/layouttree/LayoutTreeBuilder.cpp:
(WebCore::Layout::outputLayoutBox):

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

2 months ago[MSE] Handle the case where AVStreamDataParser packages sync and non-sync samples...
jer.noble@apple.com [Mon, 23 Mar 2020 15:38:54 +0000 (15:38 +0000)]
[MSE] Handle the case where AVStreamDataParser packages sync and non-sync samples together in a CMSampleBufferRef.
https://bugs.webkit.org/show_bug.cgi?id=209365
<rdar://problem/60625209>

Reviewed by Eric Carlson.

AVStreamDataParser will package together muliple samples into a single CMSampleBufferRef for efficiency's sake. When
this occurs, it may include sync and non-sync samples together into the same CMSampleBufferRef, which is problematic
as we consider a CMSampleBufferRef to be "sync" only when every sample inside the buffer is also sync.

To handle this scenario, when receiving a CMSampleBufferRef from AVStreamDataParser, first check whether that buffer
is "homogeneous", meaning every sample within the buffer has the same effective MediaSample flags. Then, if the buffer
is not homogenous, break the buffer into muliple homogenious CMSampleBufferRefs. Then, each of those resulting buffers
is passed up to SourceBuffer as a MediaSample individually.

* platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h:
* platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:
(WebCore::isCMSampleBufferAttachmentRandomAccess):
(WebCore::isCMSampleBufferRandomAccess):
(WebCore::isCMSampleBufferAttachmentNonDisplaying):
(WebCore::isCMSampleBufferNonDisplaying):
(WebCore::MediaSampleAVFObjC::flags const):
(WebCore::MediaSampleAVFObjC::isHomogeneous const):
(WebCore::MediaSampleAVFObjC::divideIntoHomogeneousSamples):
* platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
(WebCore::SourceBufferPrivateAVFObjC::processCodedFrame):

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

2 months ago[iOS] Deny mach lookup access to icon services
pvollan@apple.com [Mon, 23 Mar 2020 15:35:42 +0000 (15:35 +0000)]
[iOS] Deny mach lookup access to icon services
https://bugs.webkit.org/show_bug.cgi?id=209340

Reviewed by Brent Fulgham.

Source/WebKit:

Tested by fast/sandbox/ios/sandbox-mach-lookup.html

* Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

LayoutTests:

* fast/sandbox/ios/sandbox-mach-lookup-expected.txt:
* fast/sandbox/ios/sandbox-mach-lookup.html:

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

2 months ago[MSE][GStreamer] Clean and explain first sample PTS hack
aboya@igalia.com [Mon, 23 Mar 2020 15:27:38 +0000 (15:27 +0000)]
[MSE][GStreamer] Clean and explain first sample PTS hack
https://bugs.webkit.org/show_bug.cgi?id=209335

Reviewed by Philippe Normand.

MediaSample::applyPtsOffset() had a rather confusing name, so it has
been changed to something more descriptive of its actual function:
extendToTheBeginning().

Also, its only argument has been removed, as it's always zero.

An explanation of the hack has also been added.

This patch introduces no behavior changes.

* platform/graphics/gstreamer/MediaSampleGStreamer.cpp:
(WebCore::MediaSampleGStreamer::extendToTheBeginning):
(WebCore::MediaSampleGStreamer::applyPtsOffset): Deleted.
* platform/graphics/gstreamer/MediaSampleGStreamer.h:
* platform/graphics/gstreamer/mse/AppendPipeline.cpp:
(WebCore::AppendPipeline::appsinkNewSample):

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

2 months ago[LFC] Remove unused LayoutAncestorIterator class
zalan@apple.com [Mon, 23 Mar 2020 15:25:39 +0000 (15:25 +0000)]
[LFC] Remove unused LayoutAncestorIterator class
https://bugs.webkit.org/show_bug.cgi?id=209401
<rdar://problem/60743144>

Reviewed by Sam Weinig.

* WebCore.xcodeproj/project.pbxproj:
* layout/blockformatting/BlockFormattingContextGeometry.cpp:
* layout/displaytree/DisplayPainter.cpp:
* layout/layouttree/LayoutAncestorIterator.h: Removed.
* layout/layouttree/LayoutChildIterator.h:
(WebCore::Layout::LayoutChildIteratorAdapter<T>::last const): Deleted.
* layout/layouttree/LayoutIterator.h:
(WebCore::Layout::LayoutBoxTraversal::nextSkippingChildren): Deleted.
(WebCore::Layout::Traversal::lastChild): Deleted.
(WebCore::Layout::Traversal::previousSibling): Deleted.
(WebCore::Layout::Traversal::findAncestorOfType): Deleted.
(WebCore::Layout::LayoutIterator<T>::traversePreviousSibling): Deleted.
(WebCore::Layout::LayoutIterator<T>::traverseAncestor): Deleted.
* layout/layouttree/LayoutTreeBuilder.cpp:

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

2 months ago[Web Animations] Refactor cancelDeclarativeAnimationsForElement and willDestroyRender...
graouts@webkit.org [Mon, 23 Mar 2020 14:41:04 +0000 (14:41 +0000)]
[Web Animations] Refactor cancelDeclarativeAnimationsForElement and willDestroyRendererForElement on AnimationTimeline
https://bugs.webkit.org/show_bug.cgi?id=209423

Reviewed by Antti Koivisto.

The methods cancelDeclarativeAnimationsForElement and willDestroyRendererForElement on AnimationTimeline did the same
thing save for the argument passed to WebAnimation::cancel(). We now refactor those two methods into a single
cancelDeclarativeAnimationsForElement method with an argument to set whether cancelation should be silent.
As a result, we also change WebAnimation::cancel() to have a single flavor instead of one without an argument and one
with the silent argument.

No test because there is no change in visible behavior.

* animation/AnimationTimeline.cpp:
(WebCore::AnimationTimeline::elementWasRemoved):
(WebCore::AnimationTimeline::cancelDeclarativeAnimationsForElement):
(WebCore::AnimationTimeline::willDestroyRendererForElement): Deleted.
* animation/AnimationTimeline.h:
* animation/DeclarativeAnimation.cpp:
(WebCore::DeclarativeAnimation::cancel):
* animation/DeclarativeAnimation.h:
* animation/WebAnimation.cpp:
* animation/WebAnimation.h:
* rendering/updating/RenderTreeUpdater.cpp:
(WebCore::RenderTreeUpdater::tearDownRenderers):

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

2 months agoUnreviewed, reverting r258803.
jacob_uphoff@apple.com [Mon, 23 Mar 2020 14:38:22 +0000 (14:38 +0000)]
Unreviewed, reverting r258803.

This revision caused many layout tests and 10 API tests to
start failing/crashing

Reverted changeset:

"[Cocoa] Deny access to database mapping service"
https://bugs.webkit.org/show_bug.cgi?id=209339
https://trac.webkit.org/changeset/258803

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

2 months agoAudioTrackPrivateMediaStream recovers from a muted track very late
youenn@apple.com [Mon, 23 Mar 2020 14:35:25 +0000 (14:35 +0000)]
AudioTrackPrivateMediaStream recovers from a muted track very late
https://bugs.webkit.org/show_bug.cgi?id=209411

Reviewed by Eric Carlson.

In case of a muted track, the AudioSampleDataSource is not pushed any new sample.
When unmuting the tracks, pulled samples will be zeroes for some time until the newly pushed samples are used.
To fix this, we pause the audio player whenever muted/disabled/ended and restart playing when unmuted/enabled.
Manually tested.

* platform/mediastream/AudioTrackPrivateMediaStream.cpp:
(WebCore::AudioTrackPrivateMediaStream::updateRendererMutedState):

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

2 months agoAudioMediaStreamTrackRendererCocoa does not recover from AudioSession interruption
youenn@apple.com [Mon, 23 Mar 2020 14:33:42 +0000 (14:33 +0000)]
AudioMediaStreamTrackRendererCocoa does not recover from AudioSession interruption
https://bugs.webkit.org/show_bug.cgi?id=209412

Reviewed by Eric Carlson.

In case there is an AudioSession interruption, like the app is in the background
and another app starts to play audio, AudioMediaStreamTrackRendererCocoa will not restart playing audio.
Fix this by clearing the AudioUnit when starting since the renderer is paused during the interruption.
This ensures resuming from the interruption in a clean state.

Manually tested.

* platform/mediastream/mac/AudioMediaStreamTrackRendererCocoa.cpp:
(WebCore::AudioMediaStreamTrackRendererCocoa::start):

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

2 months agoRemoteAudioSession should listen to GPUProcess messages
youenn@apple.com [Mon, 23 Mar 2020 14:26:33 +0000 (14:26 +0000)]
RemoteAudioSession should listen to GPUProcess messages
https://bugs.webkit.org/show_bug.cgi?id=209422

Reviewed by Eric Carlson.

Make sure RemoteAudioSession is registered as a listener to GPUProcess messages.

* WebProcess/GPU/media/RemoteAudioSession.cpp:
(WebKit::RemoteAudioSession::RemoteAudioSession):
(WebKit::RemoteAudioSession::~RemoteAudioSession):

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

2 months agoMediaDevices::refreshDevices should take device type into account
youenn@apple.com [Mon, 23 Mar 2020 14:24:19 +0000 (14:24 +0000)]
MediaDevices::refreshDevices should take device type into account
https://bugs.webkit.org/show_bug.cgi?id=209417
<rdar://problem/60521332>

Reviewed by Eric Carlson.

Source/WebCore:

Now that we set deviceId to the empty string when media capture is not granted,
we can have two devices with the same ID. We also need to handle the device type.

* Modules/mediastream/MediaDevices.cpp:
(WebCore::MediaDevices::refreshDevices):

LayoutTests:

* fast/mediastream/media-device-info-expected.txt:
* fast/mediastream/media-device-info.html:

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

2 months ago[LFC] Box::establishesBlockFormattingContext should check isInitialContainingBlock
zalan@apple.com [Mon, 23 Mar 2020 14:22:04 +0000 (14:22 +0000)]
[LFC] Box::establishesBlockFormattingContext should check isInitialContainingBlock
https://bugs.webkit.org/show_bug.cgi?id=209390
<rdar://problem/60735021>

Reviewed by Antti Koivisto.

It's more correct to call isInitialContainingBlock() to check if the current box is the ICB.

* layout/layouttree/LayoutBox.cpp:
(WebCore::Layout::Box::establishesBlockFormattingContext const):
(WebCore::Layout::Box::initialContainingBlock const):

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

2 months ago[GTK][WPE] Check the cgroups memory limits (v1 and v2) to calculate the systemMemoryU...
psaavedra@igalia.com [Mon, 23 Mar 2020 13:33:51 +0000 (13:33 +0000)]
[GTK][WPE] Check the cgroups memory limits (v1 and v2) to calculate the systemMemoryUsedAsPercentage() in the MemoryPressureMonitor
https://bugs.webkit.org/show_bug.cgi?id=209186

Reviewed by Carlos Alberto Lopez Perez.

Modifies the systemMemoryUsedAsPercentage() function adding the logic
to read the memory limits and the current memory used in the cgroup
associated to the WebKit process:

- memory.memsw.usage_in_bytes (or memory.memsw.max in cgroupV2):
  current usage for memory+Swap
- memory.limit_in_bytes (or memory.current in cgroupV2):
  limit of memory usage
- memory.memsw.limit_in_bytes (or memory.max in cgroupV2):
  limit of memory+Swap usage

In case of the WK processes are associated to a cgroup with memory
controller, the function reads the memory.limit_in_bytes or
the memory.memsw.limit_in_bytes and the and memory.usage_in_bytes
from the cgroup mount point and calculates the percentage of
memory used.

In other cases (no cgroup memory controller associated or limits
higher than the real memory available), the function will return the
percentage based on the real memory available and real total memory
in the system.

The logic supports supports both cgroupV1 and cgroupV2

* UIProcess/linux/MemoryPressureMonitor.cpp:
(WebKit::getMemoryTotalWithCgroup):
(WebKit::getMemoryUsageWithCgroup):
(WebKit::getCgroupController):
(WebKit::systemMemoryUsedAsPercentage):

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

2 months ago[Web Animations] ElementAnimationRareData is created too frequently
graouts@webkit.org [Mon, 23 Mar 2020 12:41:21 +0000 (12:41 +0000)]
[Web Animations] ElementAnimationRareData is created too frequently
https://bugs.webkit.org/show_bug.cgi?id=209415

Reviewed by Antti Koivisto.

The various accessors on Element to access transitions and animations will ensure there is a backing
ElementAnimationRareData object. However, in a lot of cases, such as when we consider whether CSS
Transitions should be created, updated or removed under AnimationTimeline::updateCSSTransitionsForElement(),
we end up not needing to actually access the data structures on ElementAnimationRareData.

We now make the various methods on Element to access transitions and animations `const T*` and add ensure*()
methods to access the collections for modification. We also add methods to query whether there are running or
completed transitions at all or for a given property.

No test because there is no change in visible behavior.

* animation/AnimationTimeline.cpp:
(WebCore::AnimationTimeline::animationWasAddedToElement):
(WebCore::AnimationTimeline::animationWasRemovedFromElement):
(WebCore::AnimationTimeline::removeDeclarativeAnimationFromListsForOwningElement):
(WebCore::AnimationTimeline::animationsForElement const):
(WebCore::AnimationTimeline::willDestroyRendererForElement):
(WebCore::AnimationTimeline::cancelDeclarativeAnimationsForElement):
(WebCore::AnimationTimeline::updateCSSTransitionsForElementAndProperty):
(WebCore::AnimationTimeline::updateCSSTransitionsForElement):
* animation/AnimationTimeline.h:
* animation/DocumentTimeline.cpp:
(WebCore::DocumentTimeline::transitionDidComplete):
* dom/Element.cpp:
(WebCore::Element::webAnimations const):
(WebCore::Element::cssAnimations const):
(WebCore::Element::transitions const):
(WebCore::Element::hasCompletedTransitionsForProperty const):
(WebCore::Element::hasRunningTransitionsForProperty const):
(WebCore::Element::hasRunningTransitions const):
(WebCore::Element::ensureWebAnimations):
(WebCore::Element::ensureCSSAnimations):
(WebCore::Element::ensureTransitions):
(WebCore::Element::ensureCompletedTransitionsByProperty):
(WebCore::Element::ensureRunningTransitionsByProperty):
(WebCore::Element::webAnimations): Deleted.
(WebCore::Element::cssAnimations): Deleted.
(WebCore::Element::transitions): Deleted.
(WebCore::Element::completedTransitionsByProperty): Deleted.
(WebCore::Element::runningTransitionsByProperty): Deleted.
* dom/Element.h:

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

2 months ago[GTK][WPE] Disable systemd logging by default
philn@webkit.org [Mon, 23 Mar 2020 12:22:31 +0000 (12:22 +0000)]
[GTK][WPE] Disable systemd logging by default

Rubber-stamped by Žan Doberšek.

The logAlways logs are filling the journal way too fast currently,
specially on EWS running tests and buildbots. For the time being
disable logging until we figure out a better way to handle this.

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

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

2 months ago[GStreamer] Fail gracefully in the absence of a WebVTT encoder.
cturner@igalia.com [Mon, 23 Mar 2020 11:03:58 +0000 (11:03 +0000)]
[GStreamer] Fail gracefully in the absence of a WebVTT encoder.
https://bugs.webkit.org/show_bug.cgi?id=209290

Reviewed by Philippe Normand.

Covered by existing tests.

* platform/graphics/gstreamer/GStreamerCommon.cpp:
(WebCore::initializeGStreamer): Gets rid of "plugin not found"
errors. It's not an error to have potentially broken AAC decoders,
but it's nice to give a clear warning.
* platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
(webkit_text_combiner_class_init):
(webkitTextCombinerNew): Check for the "subenc" *plugin*. This
check indirectly tells us the "webvttenc" *element* will exist.

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

2 months ago[WPE] AsyncScrolling: horizontal scrolling is inverted
commit-queue@webkit.org [Mon, 23 Mar 2020 10:57:14 +0000 (10:57 +0000)]
[WPE] AsyncScrolling: horizontal scrolling is inverted
https://bugs.webkit.org/show_bug.cgi?id=208638

Source/WebCore:

Patch by Carlos Garcia Campos <cgarcia@igalia.com> on 2020-03-23
Reviewed by Adrian Perez de Castro.

Scrolling down should scroll to the right and up to the left..

* page/scrolling/nicosia/ScrollingTreeFrameScrollingNodeNicosia.cpp:
(WebCore::ScrollingTreeFrameScrollingNodeNicosia::handleWheelEvent): Invert also the x axis.
* page/scrolling/nicosia/ScrollingTreeOverflowScrollingNodeNicosia.cpp:
(WebCore::ScrollingTreeOverflowScrollingNodeNicosia::handleWheelEvent): Ditto.

Source/WebKit:

Patch by Chris Lord <clord@igalia.com> on 2020-03-23
Reviewed by Adrian Perez de Castro.

* UIProcess/API/wpe/ScrollGestureController.cpp:
(WebKit::ScrollGestureController::handleEvent):

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

2 months agoAdd missing committer status to Chris Lord in contributors.json
clord@igalia.com [Mon, 23 Mar 2020 10:49:46 +0000 (10:49 +0000)]
Add missing committer status to Chris Lord in contributors.json

Unreviewed

* Scripts/webkitpy/common/config/contributors.json:

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

2 months agoExplicitly activate the new DrawingAreaProxy on PSON navigation
youenn@apple.com [Mon, 23 Mar 2020 10:16:21 +0000 (10:16 +0000)]
Explicitly activate the new DrawingAreaProxy on PSON navigation
https://bugs.webkit.org/show_bug.cgi?id=209232

Reviewed by Antti Koivisto.

Delay tree unfreezing for provisional pages until the main frame load is committed.
At that point, UIProcess is made aware and is doing the process swap.
We can thus unfreeze the tree so that UIProcess starts getting DrawAreaProxy messages.

This allows UIProcess to start listening to DrawAreaProxy messages at the time of doing process swapping in WebPageProxy.

* UIProcess/DrawingAreaProxy.cpp:
(WebKit::DrawingAreaProxy::DrawingAreaProxy):
(WebKit::DrawingAreaProxy::startReceivingMessages):
* UIProcess/DrawingAreaProxy.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::setDrawingArea):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::didCompletePageTransition):
(WebKit::WebPage::didCommitLoad):

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

2 months agoStringView::startsWith and String::startsWith do not treat null strings the same
youenn@apple.com [Mon, 23 Mar 2020 09:48:12 +0000 (09:48 +0000)]
StringView::startsWith and String::startsWith do not treat null strings the same
https://bugs.webkit.org/show_bug.cgi?id=209273

Reviewed by Darin Adler.

Source/WTF:

Align StringImpl with StringView and make startsWith return true if prefix is null.

* wtf/text/StringImpl.cpp:
(WTF::StringImpl::startsWith const):

Tools:

* TestWebKitAPI/Tests/WTF/StringView.cpp:
(TestWebKitAPI::TEST):
* TestWebKitAPI/Tests/WTF/WTFString.cpp:
(TestWebKitAPI::TEST):

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

2 months ago[Web Animations] Fix the typo for ElementAnimationRareData::completedTransitionByProp...
graouts@webkit.org [Mon, 23 Mar 2020 09:05:26 +0000 (09:05 +0000)]
[Web Animations] Fix the typo for ElementAnimationRareData::completedTransitionByProperty()
https://bugs.webkit.org/show_bug.cgi?id=209413

Reviewed by Antti Koivisto.

There can be several completed transitions by property, so renaming this property to completedTransitionsByProperty.

* animation/AnimationTimeline.cpp:
(WebCore::AnimationTimeline::removeDeclarativeAnimationFromListsForOwningElement):
(WebCore::AnimationTimeline::updateCSSTransitionsForElement):
* animation/DocumentTimeline.cpp:
(WebCore::DocumentTimeline::transitionDidComplete):
* animation/ElementAnimationRareData.h:
(WebCore::ElementAnimationRareData::completedTransitionsByProperty):
(WebCore::ElementAnimationRareData::completedTransitionByProperty): Deleted.
* dom/Element.cpp:
(WebCore::Element::completedTransitionsByProperty):
(WebCore::Element::completedTransitionByProperty): Deleted.
* dom/Element.h:

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

2 months agoDocumentTimeline / CSSTransition objects are leaking on CNN.com
graouts@webkit.org [Mon, 23 Mar 2020 08:17:26 +0000 (08:17 +0000)]
DocumentTimeline / CSSTransition objects are leaking on CNN.com
https://bugs.webkit.org/show_bug.cgi?id=208069
<rdar://problem/59680143>

Reviewed by Simon Fraser, Geoffrey Garen and Darin Adler.

Source/WebCore:

Test: webanimations/leak-css-animation.html

We add a test feature that lets use query the availability of a given WebAnimation by its "id" property in the WebAnimation::instances list.
We also fix some build issues that appeared with a change in UnifiedSources order.

* animation/ElementAnimationRareData.cpp:
(WebCore::ElementAnimationRareData::setAnimationsCreatedByMarkup):
* animation/ElementAnimationRareData.h:
(WebCore::ElementAnimationRareData::setAnimationsCreatedByMarkup): Deleted.
* animation/WebAnimation.h:
* testing/Internals.cpp:
(WebCore::Internals::animationWithIdExists const):
* testing/Internals.h:
* testing/Internals.idl:

Source/WTF:

If a CSSAnimation is set on an element using the `animation-name` CSS property, and later removed, it will leak due to the ListHashSet<RefPtr<CSSAnimation>>
(aka CSSAnimationCollection) member on ElementAnimationRareData being replaced to the new list, but the old list not being cleared from its members.

We fix the ListHashSet assignment operator to use swap ensuring previously held items are cleared.

* wtf/ListHashSet.h:
(WTF::=):

Tools:

Add a test that checks that a ListHashSet containing RefPtr<> types correctly calls the destructor for those items when the assignment operator is used.

* TestWebKitAPI/Tests/WTF/ListHashSet.cpp:
(TestWebKitAPI::ListHashSetReferencedItem::create):
(TestWebKitAPI::ListHashSetReferencedItem::ListHashSetReferencedItem):
(TestWebKitAPI::ListHashSetReferencedItem::~ListHashSetReferencedItem):
(TestWebKitAPI::FakeElementAnimationRareData::FakeElementAnimationRareData):
(TestWebKitAPI::FakeElementAnimationRareData::~FakeElementAnimationRareData):
(TestWebKitAPI::FakeElementAnimationRareData::collection):
(TestWebKitAPI::FakeElementAnimationRareData::setCollection):
(TestWebKitAPI::TEST):

LayoutTests:

Add a test that checks that setting a CSSAnimation on an element, waiting a frame, and removing it will not leak that CSSAnimation.

* webanimations/leak-css-animation-expected.txt: Added.
* webanimations/leak-css-animation.html: Added.
* webanimations/resources/css-animation-leak-iframe.html: Added.

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

2 months agoUnreviewed, rename keepAlive to ensureStillAliveHere
ysuzuki@apple.com [Mon, 23 Mar 2020 04:57:06 +0000 (04:57 +0000)]
Unreviewed, rename keepAlive to ensureStillAliveHere
https://bugs.webkit.org/show_bug.cgi?id=209398

Based on Geoff and Mark's feedback, renaming keepAlive to ensureStillAliveHere
to make the effect of keepAlive clear.

* ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::compileAtomicsReadModifyWrite):
(JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
(JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
(JSC::FTL::DFG::LowerDFGToB3::compileArraySlice):
(JSC::FTL::DFG::LowerDFGToB3::ensureStillAliveHere):
(JSC::FTL::DFG::LowerDFGToB3::keepAlive): Deleted.
* heap/HeapCell.cpp:
(JSC::ensureStillAliveHere):
(JSC::keepAlive): Deleted.
* heap/HeapCell.h:
(JSC::ensureStillAliveHere):
(JSC::HeapCell::use const):
(JSC::keepAlive): Deleted.
* runtime/JSCJSValue.cpp:
(JSC::ensureStillAliveHere):
(JSC::keepAlive): Deleted.
* runtime/JSCJSValue.h:
(JSC::ensureStillAliveHere):
(JSC::keepAlive): Deleted.
* wasm/js/WebAssemblyModuleRecord.cpp:
(JSC::WebAssemblyModuleRecord::link):

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

2 months ago[JSC] Add JSC::keepAlive(JSValue)
ysuzuki@apple.com [Mon, 23 Mar 2020 00:40:46 +0000 (00:40 +0000)]
[JSC] Add JSC::keepAlive(JSValue)
https://bugs.webkit.org/show_bug.cgi?id=209398

Reviewed by Mark Lam.

Add JSC::keepAlive(JSValue). This is useful to make some JSValue variable alive from GC.

* heap/HeapCell.cpp:
* runtime/JSCJSValue.cpp:
(JSC::keepAlive):
* runtime/JSCJSValue.h:
(JSC::keepAlive):

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

2 months ago[ Mac ] imported/w3c/web-platform-tests/web-animations/timing-model/timelines/update...
commit-queue@webkit.org [Sun, 22 Mar 2020 22:57:22 +0000 (22:57 +0000)]
[ Mac ] imported/w3c/web-platform-tests/web-animations/timing-model/timelines/update-and-send-events-replacement.html is flaky failing.
https://bugs.webkit.org/show_bug.cgi?id=209239
<rdar://problem/60591358>

Patch by Antoine Quint <graouts@apple.com> on 2020-03-22
Reviewed by Simon Fraser.

Source/WebCore:

This test was made flaky by r257417, the initial fix for webkit.org/b/208069. A new, appropriate fix for that bug is in the works. In the
meantime we revert r257417 in this patch.

The reason this test became flaky is that it features the following code:

    animB.timeline = new DocumentTimeline({
      originTime:
        document.timeline.currentTime - 100 * MS_PER_SEC - animB.startTime,
    });

In this case the only reference to the created DocumentTimeline is through `animB.timeline`. But because r257417 made the timeline reference from
WebAnimation a weak reference, in some cases, if GC kicks in, the timeline would be dereferenced and the test would fail. We restore that relationship
to its previous state, which is a strong reference.

* animation/WebAnimation.cpp:
(WebCore::WebAnimation::setTimeline):
(WebCore::WebAnimation::setTimelineInternal):
(WebCore::WebAnimation::enqueueAnimationEvent):
(WebCore::WebAnimation::acceleratedStateDidChange):
(WebCore::WebAnimation::timeline const): Deleted.
* animation/WebAnimation.h:
(WebCore::WebAnimation::timeline const):

LayoutTests:

* platform/mac/TestExpectations:

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

2 months ago[GTK][WPE] Gardening, update TestExpectations
dpino@igalia.com [Sun, 22 Mar 2020 20:33:05 +0000 (20:33 +0000)]
[GTK][WPE] Gardening, update TestExpectations
https://bugs.webkit.org/show_bug.cgi?id=209404

Unreviewed gardening.

* platform/gtk/TestExpectations:
* platform/wpe/TestExpectations:

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

2 months agoAdopt -[UIWindowScene interfaceOrientation] when determining device orientation
wenson_hsieh@apple.com [Sun, 22 Mar 2020 19:29:40 +0000 (19:29 +0000)]
Adopt -[UIWindowScene interfaceOrientation] when determining device orientation
https://bugs.webkit.org/show_bug.cgi?id=209372
<rdar://problem/60491857>

Reviewed by Darin Adler.

Currently, for WebKit clients that have adopted the UIScene lifecycle (and also do not set an interface
orientation override, like MobileSafari does), device orientation APIs will always report that the device is in
portrait mode, regardless of the actual device orientation. This is because our current mechanism for tracking
device orientation asks the shared UIApplication for its -statusBarOrientation. This is hard-coded to always
return UIInterfaceOrientationPortrait for apps that adopt the UIScene lifecycle, and will additionally trigger a
simulated crash, explaining that it is invalid for any scene-based app to call -statusBarOrientation.

To fix this, we adjust the `deviceOrientation` helper in WKWebViewIOS.mm to work for scene-based apps. See below
for more details.

* Platform/spi/ios/UIKitSPI.h:
* UIProcess/API/ios/WKWebViewIOS.h:
* UIProcess/API/ios/WKWebViewIOS.mm:
(-[WKWebView _setupScrollAndContentViews]):

Change call sites of `deviceOrientation()` to be `[self _deviceOrientation]` instead.

(-[WKWebView _deviceOrientation]):

Replace `deviceOrientation()` with a `_deviceOrientation` helper method on `WKWebView`. For non-scene-based
apps, this new helper method does not change any behavior, and continues to go through UIApplication. However,
for scene-based apps, we instead ask the web view's window's `UIWindowScene` for its interface orientation.

Importantly, this means that if a WKWebView is not parented, it doesn't have a valid device orientation (i.e.
the orientation is UIInterfaceOrientationUnknown). As such, a newly created WKWebView that is unparented will
start out with no orientation; it's only upon moving the view into a window that it is able to determine the
device orientation. To ensure this, we add logic to -didMoveToWindow to recompute device orientation and
dispatch an update if needed.

To avoid sending unnecessary updates, if a WKWebView is unparented, we wait until it's parented again to send
the new device orientation.

(-[WKWebView didMoveToWindow]):
(-[WKWebView _windowDidRotate:]):
(deviceOrientation): Deleted.

See -[WKWebView _deviceOrientation] above.

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

2 months ago[LFC] Introduce InitialContainingBox class
zalan@apple.com [Sun, 22 Mar 2020 17:41:12 +0000 (17:41 +0000)]
[LFC] Introduce InitialContainingBox class
https://bugs.webkit.org/show_bug.cgi?id=209399
<rdar://problem/60741767>

Reviewed by Antti Koivisto.

ICB is the top level containing block. This helps to make sure we don't accidentally call parent() on the ICB.
This is also a preparation for "const Box& Layout::Box::parent()".

* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* layout/integration/LayoutIntegrationBoxTree.cpp:
(WebCore::LayoutIntegration::BoxTree::BoxTree):
(): Deleted.
* layout/integration/LayoutIntegrationBoxTree.h:
(WebCore::LayoutIntegration::BoxTree::rootLayoutBox const):
(WebCore::LayoutIntegration::BoxTree::rootLayoutBox):
* layout/layouttree/LayoutBox.cpp:
(WebCore::Layout::Box::isInitialContainingBlock const): Deleted.
* layout/layouttree/LayoutBox.h:
(WebCore::Layout::Box::isInitialContainingBlock const):
* layout/layouttree/LayoutContainerBox.h:
* layout/layouttree/LayoutTreeBuilder.cpp:
(WebCore::Layout::TreeBuilder::buildLayoutTree):

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

2 months ago[LFC] Layout::Box::containingBlock should return a const ContainerBox&
zalan@apple.com [Sun, 22 Mar 2020 14:02:37 +0000 (14:02 +0000)]
[LFC] Layout::Box::containingBlock should return a const ContainerBox&
https://bugs.webkit.org/show_bug.cgi?id=209381
<rdar://problem/60732278>

Reviewed by Antti Koivisto.

Layout tree is immutable during layout, so every box should be able to return a valid containing block (except the ICB).
(This patch also removes the unused isDescendantOf() function and renames isDescendantOfFormattingRoot to isInFormattingContextOf).

* layout/FormattingContext.cpp:
(WebCore::Layout::FormattingContext::layoutOutOfFlowContent):
(WebCore::Layout::FormattingContext::validateGeometryConstraintsAfterLayout const):
* layout/FormattingContextGeometry.cpp:
(WebCore::Layout::isHeightAuto):
(WebCore::Layout::FormattingContext::Geometry::computedHeightValue const):
(WebCore::Layout::FormattingContext::Geometry::staticVerticalPositionForOutOfFlowPositioned const):
(WebCore::Layout::FormattingContext::Geometry::staticHorizontalPositionForOutOfFlowPositioned const):
(WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
(WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry const):
(WebCore::Layout::FormattingContext::Geometry::inFlowPositionedPositionOffset const):
* layout/FormattingContextQuirks.cpp:
(WebCore::Layout::FormattingContext::Quirks::heightValueOfNearestContainingBlockWithFixedHeight):
* layout/Verification.cpp:
(WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):
* layout/blockformatting/BlockFormattingContext.cpp:
(WebCore::Layout::BlockFormattingContext::layoutInFlowContent):
(WebCore::Layout::BlockFormattingContext::usedAvailableWidthForFloatAvoider):
(WebCore::Layout::BlockFormattingContext::precomputeVerticalPositionForAncestors):
(WebCore::Layout::BlockFormattingContext::precomputeVerticalPositionForBoxAndAncestors):
(WebCore::Layout::BlockFormattingContext::verticalPositionWithMargin const):
* layout/blockformatting/BlockFormattingContextGeometry.cpp:
(WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin const):
* layout/blockformatting/BlockFormattingContextQuirks.cpp:
(WebCore::Layout::BlockFormattingContext::Quirks::stretchedInFlowHeight):
(WebCore::Layout::initialContainingBlock): Deleted.
* layout/blockformatting/BlockMarginCollapse.cpp:
(WebCore::Layout::BlockFormattingContext::MarginCollapse::marginsCollapseThrough const):
* layout/blockformatting/PrecomputedBlockMarginCollapse.cpp:
(WebCore::Layout::BlockFormattingContext::MarginCollapse::precomputedPositiveNegativeValues const):
* layout/displaytree/DisplayPainter.cpp:
(WebCore::Display::absoluteDisplayBox):
* layout/floats/FloatingContext.cpp:
(WebCore::Layout::FloatingContext::verticalPositionWithClearance const):
(WebCore::Layout::FloatingContext::absoluteDisplayBoxCoordinates const):
(WebCore::Layout::FloatingContext::mapToFloatingStateRoot const):
(WebCore::Layout::FloatingContext::mapTopToFloatingStateRoot const):
(WebCore::Layout::FloatingContext::mapPointFromFormattingContextRootToFloatingStateRoot const):
* layout/floats/FloatingState.cpp:
(WebCore::Layout::FloatingState::bottom const):
(WebCore::Layout::FloatingState::top const):
* layout/floats/FloatingState.h:
(WebCore::Layout::FloatingState::FloatItem::isInFormattingContextOf const):
(WebCore::Layout::FloatingState::FloatItem::isDescendantOfFormattingRoot const): Deleted.
* layout/layouttree/LayoutBox.cpp:
(WebCore::Layout::Box::containingBlock const):
(WebCore::Layout::Box::formattingContextRoot const):
(WebCore::Layout::Box::isInFormattingContextOf const):
(WebCore::Layout::Box::isDescendantOf const): Deleted.
(WebCore::Layout::Box::isContainingBlockDescendantOf const): Deleted.
* layout/layouttree/LayoutBox.h:

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

2 months agoWeb Inspector: Uncaught Exception: Right side of assignment cannot be destructured...
drousso@apple.com [Sun, 22 Mar 2020 07:42:18 +0000 (07:42 +0000)]
Web Inspector: Uncaught Exception: Right side of assignment cannot be destructured (at QuickConsole.js:358:30)
https://bugs.webkit.org/show_bug.cgi?id=209388

Reviewed by Joseph Pecoraro.

* UserInterface/Views/QuickConsole.js:
(WI.QuickConsole.prototype._handleFramePageExecutionContextChanged):

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

2 months agoAn animated PNG plays the frames one time more than the image loopCount
commit-queue@webkit.org [Sun, 22 Mar 2020 05:02:55 +0000 (05:02 +0000)]
An animated PNG plays the frames one time more than the image loopCount
https://bugs.webkit.org/show_bug.cgi?id=205640

Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2020-03-21
Reviewed by Darin Adler.

Source/WebCore:

Make the repetitionCount calculation for GIFs different from it for other
image formats.

Tests: fast/images/animated-gif-loop-count.html
       fast/images/animated-png-loop-count.html

* platform/graphics/cg/ImageDecoderCG.cpp:
(WebCore::ImageDecoderCG::repetitionCount const):
* platform/graphics/cg/UTIRegistry.cpp:
(WebCore::isGIFImageType):
* platform/graphics/cg/UTIRegistry.h:

LayoutTests:

Refactor the js code to a separate js file. Add two layout tests: one for
animated GIFs and the other for animated PNGs.

* fast/images/animated-gif-loop-count-expected.html: Added.
* fast/images/animated-gif-loop-count.html: Added.
* fast/images/animated-image-loop-count-expected.html: Removed.
* fast/images/animated-image-loop-count.html: Removed.
* fast/images/animated-png-loop-count-expected.html: Added.
* fast/images/animated-png-loop-count.html: Added.
* fast/images/resources/animated-image-loop-count.js: Added.
* fast/images/resources/animated-red-green-blue-repeat-1.png: Added.
* fast/images/resources/animated-red-green-blue-repeat-2.png: Added.
* fast/images/resources/animated-red-green-blue-repeat-infinite.png: Added.
* platform/ios/TestExpectations:
* platform/mac-wk1/TestExpectations:
* platform/win/TestExpectations:

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

2 months agoNullptr crash in RenderObject::RenderObjectBitfields::isBox when current renderer...
commit-queue@webkit.org [Sun, 22 Mar 2020 04:59:05 +0000 (04:59 +0000)]
Nullptr crash in RenderObject::RenderObjectBitfields::isBox when current renderer is the RenderView
https://bugs.webkit.org/show_bug.cgi?id=209251
<rdar://problem/60103614>

Patch by Jack Lee <shihchieh_lee@apple.com> on 2020-03-21
Reviewed by Darin Adler.

Source/WebCore:

In this case, which is a valid scenario, we are looking for sibling of an AccessibilityRenderObject through the parent of its renderer, which happens to be of <RenderView>. Since <RenderView> has no parent, we need to skip calling isInlineWithContinuation with a null parent, by adding null check.

Test: fast/frames/iframe-empty-doc-crash.html

* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::nextSibling const):

LayoutTests:

In this case, which is a valid scenario, we are looking for sibling of an AccessibilityRenderObject through the parent of its renderer, which happens to be of <RenderView>. Since <RenderView> has no parent, we need to skip calling isInlineWithContinuation with a null parent, by adding null check.

* fast/frames/iframe-empty-doc-crash-expected.txt: Added.
* fast/frames/iframe-empty-doc-crash.html: Added.

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

2 months agoSet INSTALLHDRS_SCRIPT_PHASE in ANGLE builds
krollin@apple.com [Sun, 22 Mar 2020 02:57:36 +0000 (02:57 +0000)]
Set INSTALLHDRS_SCRIPT_PHASE in ANGLE builds
https://bugs.webkit.org/show_bug.cgi?id=209384
<rdar://problem/59513380>

Reviewed by Dan Bernstein.

Production ANGLE builds are technically non-compliant. During the
installhdrs build action, ANGLE headers are exported but are not
post-processed. This differs from the install build action, where the
exported headers *are* post-processed. The headers need to be treated
identically under both actions. The post-processing is enabled by
setting the INSTALLHDRS_SCRIPT_PHASE build setting to YES. Most other
WebKit projects already set this setting (see, for example,
https://trac.webkit.org/changeset/155787,
https://trac.webkit.org/changeset/110327, and
https://trac.webkit.org/changeset/41417).

* Configurations/ANGLE.xcconfig:

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

2 months agodecodeSharedBuffer() in WebCoreArgumentCoders.cpp should validate `bufferSize`
ddkilzer@apple.com [Sun, 22 Mar 2020 01:31:25 +0000 (01:31 +0000)]
decodeSharedBuffer() in WebCoreArgumentCoders.cpp should validate `bufferSize`
<https://webkit.org/b/209373>
<rdar://problem/60610919>

Reviewed by Darin Adler.

* Shared/WebCoreArgumentCoders.cpp:
(IPC::decodeSharedBuffer):
- Return early if `bufferSize` is too big.

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

2 months agoLayoutTest fast/scrolling/scroll-container-horizontally.html frequently times out...
simon.fraser@apple.com [Sat, 21 Mar 2020 19:10:43 +0000 (19:10 +0000)]
LayoutTest fast/scrolling/scroll-container-horizontally.html frequently times out & fails
https://bugs.webkit.org/show_bug.cgi?id=158237

Unreviewed test gardening.

No longer flaky after r258679.

* platform/mac-wk2/TestExpectations:

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

2 months ago[ Mac wk2 ] tiled-drawing/simple-document-with-margin-tiles.html is flaky failing.
simon.fraser@apple.com [Sat, 21 Mar 2020 18:56:04 +0000 (18:56 +0000)]
[ Mac wk2 ] tiled-drawing/simple-document-with-margin-tiles.html is flaky failing.
https://bugs.webkit.org/show_bug.cgi?id=207518

Unreviewed test gardening.

No longer flaky after r258679.

* platform/mac-wk2/TestExpectations:

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

2 months ago[ Mac wk2 ] tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-with-handler...
simon.fraser@apple.com [Sat, 21 Mar 2020 18:52:44 +0000 (18:52 +0000)]
[ Mac wk2 ] tiled-drawing/scrolling/fast-scroll-div-latched-mainframe-with-handler.html is flaky failing.
https://bugs.webkit.org/show_bug.cgi?id=208471

Unreviewed test gardening.

No longer flaky after r258679.

* platform/mac-wk2/TestExpectations:

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

2 months ago[ Mac wk2 ] fast/scrolling/momentum-scroll-with-borders.html is flaky timing out.
simon.fraser@apple.com [Sat, 21 Mar 2020 18:29:13 +0000 (18:29 +0000)]
[ Mac wk2 ] fast/scrolling/momentum-scroll-with-borders.html is flaky timing out.
https://bugs.webkit.org/show_bug.cgi?id=209013

Unreviewed test fixing. This test needs to send the "end" event for the momentum phase
for WheelEventTestMonitor to work correctly.

* fast/scrolling/momentum-scroll-with-borders.html:

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

2 months agoWeb Inspector: REGRESSION(r257380, r257759): focusing the inspected page when docked...
drousso@apple.com [Sat, 21 Mar 2020 18:06:32 +0000 (18:06 +0000)]
Web Inspector: REGRESSION(r257380, r257759): focusing the inspected page when docked dims most of the interface
https://bugs.webkit.org/show_bug.cgi?id=209366

Reviewed by Timothy Hatcher.

* UserInterface/Views/ButtonNavigationItem.css:
(body.window-inactive .navigation-bar .item.button > img): Added.
(body.window-inactive .navigation-bar .item.button.disabled > img): Added.
(body:matches(.window-inactive, .window-docked-inactive) .navigation-bar .item.button > img): Deleted.
(body:matches(.window-inactive, .window-docked-inactive) .navigation-bar .item.button.disabled > img): Deleted.
* UserInterface/Views/RenderingFrameTimelineOverviewGraph.css:
(body.window-inactive .timeline-overview-graph.rendering-frame > .frame-marker): Added.
(body:matches(.window-inactive, .window-docked-inactive) .timeline-overview-graph.rendering-frame > .frame-marker): Deleted.
* UserInterface/Views/TabBar.css:
(body:not(.docked).window-inactive .tab-bar): Added.
(body.docked.window-inactive .tab-bar): Added.
(body.window-inactive .tab-bar > .border): Added.
(body.window-inactive .tab-bar > .navigation-bar > .item.divider): Added.
(body:not(.docked).window-inactive .tab-bar > .tabs > .item): Added.
(body:not(.docked).window-inactive .tab-bar > .tabs > .item:not(.disabled).selected): Added.
(body.docked.window-inactive .tab-bar > .tabs > .item:not(.disabled).selected): Added.
(body.window-inactive .tab-bar > .tabs > .item > .icon): Added.
(body.window-inactive .tab-bar > .tabs > .item:not(.disabled).selected > .icon): Added.
(body.window-inactive .tab-bar > .tabs > .item > .title): Added.
(body.window-inactive .tab-bar > .tabs > .item:not(.disabled).selected > .title): Added.
(body:not(.docked).window-inactive .tab-bar > .tabs.dragging-tab > .item:not(.disabled).selected, body:not(.docked).window-inactive .tab-bar > .tabs.static-layout:not(.animating.inserting-tab):not(.dragging-tab) > .item:nth-last-child(1 of :not(.pinned)), body:not(.docked).window-inactive .tab-bar > .tabs.animating.closing-tab > .item:not(.disabled).selected): Added.
(@media (prefers-color-scheme: dark) body.docked.window-inactive .tab-bar > .tabs > .item:not(.disabled).selected): Added.
(@media (prefers-color-scheme: dark) body:not(.docked).window-inactive .tab-bar): Added.
(@media (prefers-color-scheme: dark) body:not(.docked).window-inactive .tab-bar > .tabs > .item): Added.
(@media (prefers-color-scheme: dark) body:not(.docked).window-inactive .tab-bar > .tabs > .item:not(.disabled).selected): Added.
(body:not(.docked):matches(.window-inactive, .window-docked-inactive) .tab-bar): Deleted.
(body.docked:matches(.window-inactive, .window-docked-inactive) .tab-bar): Deleted.
(body:matches(.window-inactive, .window-docked-inactive) .tab-bar > .border): Deleted.
(body:matches(.window-inactive, .window-docked-inactive) .tab-bar > .navigation-bar > .item.divider): Deleted.
(body:not(.docked):matches(.window-inactive, .window-docked-inactive) .tab-bar > .tabs > .item): Deleted.
(body:not(.docked):matches(.window-inactive, .window-docked-inactive) .tab-bar > .tabs > .item:not(.disabled).selected): Deleted.
(body.docked:matches(.window-inactive, .window-docked-inactive) .tab-bar > .tabs > .item:not(.disabled).selected): Deleted.
(body:matches(.window-inactive, .window-docked-inactive) .tab-bar > .tabs > .item > .icon): Deleted.
(body:matches(.window-inactive, .window-docked-inactive) .tab-bar > .tabs > .item:not(.disabled).selected > .icon): Deleted.
(body:matches(.window-inactive, .window-docked-inactive) .tab-bar > .tabs > .item > .title): Deleted.
(body:matches(.window-inactive, .window-docked-inactive) .tab-bar > .tabs > .item:not(.disabled).selected > .title): Deleted.
(body:not(.docked):matches(.window-inactive, .window-docked-inactive) .tab-bar > .tabs.dragging-tab > .item:not(.disabled).selected, body:not(.docked):matches(.window-inactive, .window-docked-inactive) .tab-bar > .tabs.static-layout:not(.animating.inserting-tab):not(.dragging-tab) > .item:nth-last-child(1 of :not(.pinned)), body:not(.docked):matches(.window-inactive, .window-docked-inactive) .tab-bar > .tabs.animating.closing-tab > .item:not(.disabled).selected): Deleted.
(@media (prefers-color-scheme: dark) body.docked:matches(.window-inactive, .window-docked-inactive) .tab-bar > .tabs > .item:not(.disabled).selected): Deleted.
(@media (prefers-color-scheme: dark) body:not(.docked):matches(.window-inactive, .window-docked-inactive) .tab-bar): Deleted.
(@media (prefers-color-scheme: dark) body:not(.docked):matches(.window-inactive, .window-docked-inactive) .tab-bar > .tabs > .item): Deleted.
(@media (prefers-color-scheme: dark) body:not(.docked):matches(.window-inactive, .window-docked-inactive) .tab-bar > .tabs > .item:not(.disabled).selected): Deleted.
* UserInterface/Views/TimelineRecordFrame.css:
(body.window-inactive .timeline-record-frame.selected): Added.
(body:matches(.window-inactive, .window-docked-inactive) .timeline-record-frame.selected): Deleted.
* UserInterface/Views/TimelineRuler.css:
(body.window-inactive .timeline-ruler > .header > .divider): Added.
(body:matches(.window-inactive, .window-docked-inactive) .timeline-ruler > .header > .divider): Deleted.
* UserInterface/Views/Variables.css:
(body.window-inactive): Added.
(body.window-inactive *): Added.
(@media (prefers-color-scheme: dark) body.window-inactive): Added.
(@media (prefers-color-scheme: dark) body.window-inactive *): Added.
(body:matches(.window-inactive, .window-docked-inactive)): Deleted.
(body:matches(.window-inactive, .window-docked-inactive) *): Deleted.
(@media (prefers-color-scheme: dark) body:matches(.window-inactive, .window-docked-inactive)): Deleted.
(@media (prefers-color-scheme: dark) body:matches(.window-inactive, .window-docked-inactive) *): Deleted.
Remove usage of `.window-docked-inactive` as we don't want the UI to change when the focus
switches between the inspected page and the docked Web Inspector area, which happens a lot.

* UserInterface/Views/BreakpointTreeElement.css:
(body:not(.window-inactive, .window-docked-inactive) .tree-outline:focus-within .item.breakpoint.selected .status > .status-image.resolved): Added.
(.tree-outline:focus .item.breakpoint.selected .status > .status-image.resolved): Deleted.
* UserInterface/Views/CallFrameTreeElement.css:
(body:not(.window-inactive, .window-docked-inactive) .tree-outline:focus-within .item.call-frame.selected .status > .status-image): Added.
(.tree-outline:focus .item.call-frame.selected .status > .status-image): Deleted.
* UserInterface/Views/CanvasSidebarPanel.css:
(body:not(.window-inactive, .window-docked-inactive) .sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline:focus-within .item.processing.selected .subtitle > progress): Added.
(.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline:focus .item.processing.selected .subtitle > progress): Deleted.
* UserInterface/Views/DOMTreeContentView.css:
(body:not(.window-inactive, .window-docked-inactive) .tree-outline.dom-tree:focus-within .tree-outline.dom li:matches(.selected, .hovered) .status-image.breakpoint): Added.
(body:not(.window-inactive, .window-docked-inactive) .tree-outline.dom-tree:focus-within .tree-outline.dom li:matches(.selected, .hovered) .status-image.breakpoint.subtree): Added.
(body:not(.window-inactive, .window-docked-inactive) .content-view.dom-tree .tree-outline.dom:focus li:matches(.selected, .hovered) .status-image.breakpoint): Deleted.
(body:not(.window-inactive, .window-docked-inactive) .content-view.dom-tree .tree-outline.dom:focus li:matches(.selected, .hovered) .status-image.breakpoint.subtree): Deleted.
* UserInterface/Views/DOMTreeOutline.css:
(body:not(.window-inactive, .window-docked-inactive) .tree-outline.dom:not(.non-selectable):focus-within li.selected .selection-area): Added.
(body:not(.window-inactive, .window-docked-inactive) .tree-outline.dom:focus-within li.inspected-node.selected > span::after): Added.
(body:not(.window-inactive, .window-docked-inactive) .tree-outline.dom:focus-within li.selected .pseudo-class-indicator): Added.
(body:not(.window-inactive, .window-docked-inactive) .tree-outline.dom:focus-within li.selected): Added.
(body:not(.window-inactive, .window-docked-inactive) .tree-outline.dom:focus-within li.selected *): Added.
(body:not(.window-inactive, .window-docked-inactive) .tree-outline.dom:focus-within li.parent.selected::before): Added.
(body:not(.window-inactive, .window-docked-inactive) .tree-outline.dom:focus-within li.parent.expanded.selected::before): Added.
(.tree-outline.dom:not(.non-selectable):focus-within li.selected .selection-area): Deleted.
(.tree-outline.dom:focus-within li.inspected-node.selected > span::after): Deleted.
(.tree-outline.dom:focus-within li.selected .pseudo-class-indicator): Deleted.
(.tree-outline.dom:focus-within li.selected): Deleted.
(.tree-outline.dom:focus-within li.selected *): Deleted.
(.tree-outline.dom:focus-within li.parent.selected::before): Deleted.
(.tree-outline.dom:focus-within li.parent.expanded.selected::before): Deleted.
* UserInterface/Views/Main.css:
(:focus .selected .go-to-arrow, .selected:focus .go-to-arrow): Added.
(:focus .selected .go-to-arrow:active, .selected .go:focus-to-arrow:active): Added.
(@media (prefers-color-scheme: dark) :focus .selected .go-to-arrow, .selected:focus .go-to-arrow): Added.
(:focus .selected .go-to-arrow): Deleted.
(:focus .selected .go-to-arrow:active): Deleted.
(@media (prefers-color-scheme: dark) :focus .selected .go-to-arrow): Deleted.
* UserInterface/Views/RecordingActionTreeElement.css:
(body:not(.window-inactive, .window-docked-inactive) .tree-outline:focus-within .item.recording-action.selected:not(.invalid, .initial-state, .has-context-replacer, .name-unknown) > .icon): Added.
(body:not(.window-inactive, .window-docked-inactive) .tree-outline:focus-within .item.recording-action.selected > .titles .parameter.swizzled, body:not(.window-inactive, .window-docked-inactive) .tree-outline:focus-within .item.recording-action.selected::before): Added.
(.tree-outline:focus .item.recording-action.selected:not(.invalid, .initial-state, .has-context-replacer, .name-unknown) > .icon): Deleted.
(body:not(.window-inactive, .window-docked-inactive) .tree-outline:focus .item.recording-action.selected > .titles .parameter.swizzled, body:not(.window-inactive, .window-docked-inactive) .tree-outline:focus .item.recording-action.selected::before): Deleted.
* UserInterface/Views/ResourceTreeElement.css:
(.item.resource.resource-type-websocket:not(.selected) .status .ready-state.open, .tree-outline:not(:focus-within) .item.resource.resource-type-websocket.selected .status .ready-state.open, body:matches(.window-inactive, .window-docked-inactive) .item.resource.resource-type-websocket.selected .status .ready-state.open): Added.
(.item.resource.resource-type-websocket:not(.selected) .status .ready-state.connecting, .tree-outline:not(:focus-within) .item.resource.resource-type-websocket.selected .status .ready-state.connecting, body:matches(.window-inactive, .window-docked-inactive) .item.resource.resource-type-websocket.selected .status .ready-state.connecting): Added.
(.item.resource.resource-type-websocket:not(.selected) .status .ready-state.open, .tree-outline:not(:focus) .item.resource.resource-type-websocket.selected .status .ready-state.open, body:matches(.window-inactive, .window-docked-inactive) .item.resource.resource-type-websocket.selected .status .ready-state.open): Deleted.
(.item.resource.resource-type-websocket:not(.selected) .status .ready-state.connecting, .tree-outline:not(:focus) .item.resource.resource-type-websocket.selected .status .ready-state.connecting, body:matches(.window-inactive, .window-docked-inactive) .item.resource.resource-type-websocket.selected .status .ready-state.connecting): Deleted.
* UserInterface/Views/ScriptDetailsTimelineView.css:
(body:not(.window-inactive, .window-docked-inactive) .tree-outline:focus-within .item.selected .alternate-subtitle): Added.
(.tree-outline:focus .item.selected .alternate-subtitle): Deleted.
* UserInterface/Views/SourceCodeTreeElement.css:
(.tree-outline .item .status > .toggle-script-blackbox, body:not(.window-inactive, .window-docked-inactive) .tree-outline:focus-within .item.selected .status > .toggle-script-blackbox.pattern-blackboxed): Added.
(.tree-outline .item .status > .toggle-script-blackbox, .tree-outline:focus .item.selected .status > .toggle-script-blackbox.pattern-blackboxed): Deleted.
* UserInterface/Views/ThreadTreeElement.css:
(body:not(.window-inactive, .window-docked-inactive) .tree-outline:focus-within > .item.thread.selected .status-button.resume): Added.
(.tree-outline:focus > .item.thread.selected .status-button.resume): Deleted.
* UserInterface/Views/TimelineOverview.css:
(.timeline-overview > .tree-outline.timelines .item.selected + .item): Added.
(body:not(.window-inactive, .window-docked-inactive) .timeline-overview > .tree-outline.timelines:focus-within .item.selected + .item): Added.
(@media (prefers-color-scheme: dark) .timeline-overview > .tree-outline.timelines .item.selected + .item): Added.
(.timeline-overview > .tree-outline.timelines .item.selected + .item, body:matches(.window-inactive, .window-docked-inactive) .timeline-overview > .tree-outline.timelines .item.selected + .item): Deleted.
(.timeline-overview > .tree-outline.timelines :focus .item.selected + .item): Deleted.
(@media (prefers-color-scheme: dark) .timeline-overview > .tree-outline.timelines .item.selected + .item, body:matches(.window-inactive, .window-docked-inactive) .timeline-overview > .tree-outline.timelines .item.selected + .item): Deleted.
* UserInterface/Views/TreeElementStatusButton.css:
(body:not(.window-inactive, .window-docked-inactive) .tree-outline:focus-within .item.selected > .status > .status-button): Added.
(:focus .item.selected > .status > .status-button): Deleted.
Fix cases where `:focus` was still being checked from the `WI.TreeOutline` instead of the
individual `WI.TreeElement`. We should be using `:focus-within`, but only if the window or
docked Web Inspector area is also focused.

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

2 months ago[GTK] Use ${PYTHON_EXECUTABLE} to run generate-gtkdoc
commit-queue@webkit.org [Sat, 21 Mar 2020 15:22:05 +0000 (15:22 +0000)]
[GTK] Use ${PYTHON_EXECUTABLE} to run generate-gtkdoc
https://bugs.webkit.org/show_bug.cgi?id=208970

Patch by Michael Catanzaro <mcatanzaro@gnome.org> on 2020-03-21
Reviewed by Konstantin Tokarev.

.:

There's no need to rely on shebangs when executing python scripts from CMake. This should
ensure the script always works even if the shebang does not.

* Source/cmake/GtkDoc.cmake:

Tools:

We are allowed to use /usr/bin/env in this script because it's not installed (so not
packaged). Therefore we can make the shebang compatible with FreeBSD in this particularl
case.

* gtkdoc/generate-gtkdoc:

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

2 months agoMake the MediaSample::toJSONString method generic
philn@webkit.org [Sat, 21 Mar 2020 14:25:09 +0000 (14:25 +0000)]
Make the MediaSample::toJSONString method generic
https://bugs.webkit.org/show_bug.cgi?id=209287

Reviewed by Eric Carlson.

It is generic and thus can be shared to sub-classes.

* platform/MediaSample.h:
(WebCore::MediaSample::toJSONString const):
* platform/graphics/avfoundation/objc/MediaSampleAVFObjC.h:
* platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm:

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

2 months agotelerik.com: Placeholder text is misaligned in search text box
zalan@apple.com [Sat, 21 Mar 2020 14:11:01 +0000 (14:11 +0000)]
telerik.com: Placeholder text is misaligned in search text box
https://bugs.webkit.org/show_bug.cgi?id=209371
<rdar://problem/45945564>

Reviewed by Antti Koivisto.

Source/WebCore:

Let the placeholder box do its own vertical positioning/sizing.
The placeholder box's height is currently set to the height of the editable renderer (sibling box), so when the ::placeholder has
a large font-size set, the text is oddly positioned and gets cut off (the placeholder box has 'overflow: hidden' UA style).
This patch makes the placeholder box center aligned and sized based on the used size (matches both Chrome and FF).

Test: fast/forms/placeholder-content-center.html

* rendering/RenderTextControlSingleLine.cpp:
(WebCore::RenderTextControlSingleLine::layout):

LayoutTests:

* fast/forms/placeholder-content-center-expected.html: Added.
* fast/forms/placeholder-content-center.html: Added.

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

2 months agoREGRESSION (r258679): [ Mac ] fast/scrolling/arrow-key-scroll-in-rtl-document.html...
simon.fraser@apple.com [Sat, 21 Mar 2020 05:54:52 +0000 (05:54 +0000)]
REGRESSION (r258679): [ Mac ] fast/scrolling/arrow-key-scroll-in-rtl-document.html is failing and timing out
https://bugs.webkit.org/show_bug.cgi?id=209299

Reviewed by Daniel Bates.

fast/scrolling/arrow-key-scroll-in-rtl-document.html is unusual in that it uses monitorWheelEvents()
but then issues arrow key presses.

WebCore responds to arrow keys via WebEditorClient::handleKeyboardEvent() calling down into
WebPage::scroll() which ends up in FrameView::requestScrollPositionUpdate() and bounces to the
scrolling thread. This isn't tracked by existing 'defer' reasons on WheelEventTestMonitor, so add a
new defer reason that covers the period for adding the requested scroll go the scrolling state tree,
and responding to it in the scrolling thread.

* page/WheelEventTestMonitor.cpp:
(WebCore::operator<<):
* page/WheelEventTestMonitor.h:
* page/scrolling/AsyncScrollingCoordinator.cpp:
(WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
* page/scrolling/ThreadedScrollingTree.cpp:
(WebCore::ThreadedScrollingTree::scrollingTreeNodeRequestsScroll):
* page/scrolling/ThreadedScrollingTree.h:

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

2 months ago[iPadOS] Yahoo! search results are sometimes zoomed in a little
wenson_hsieh@apple.com [Sat, 21 Mar 2020 02:42:39 +0000 (02:42 +0000)]
[iPadOS] Yahoo! search results are sometimes zoomed in a little
https://bugs.webkit.org/show_bug.cgi?id=209356
<rdar://problem/60563952>

Reviewed by Tim Horton.

Source/WebKit:

When the web content process uses `WebPage::scalePage()` to modify the viewport scale (e.g. after a viewport
configuration change) on iOS, it's possible for this new scale to be replaced by a previous scale when
dispatching the next visible content rect update. Consider the following scenario:

1. A remote layer tree transaction is sent to the UI process containing scale `a`.
2. `WebPage::scalePage` is called with a scale `b`.
3. A visible content rect update with scale `a` is scheduled, sent to the web process and dispatched.
4. The page scale reverts to `a`.

This bug exercises the above scenario: the Yahoo search results page specifies a responsive viewport
(device-width and scale=1), but proceeds to lay out outside of the bounds of the device width. As such, after
the document finishes parsing, we attempt to shrink the page to fit; however, if this shrinking happens after
a remote layer tree transaction with the old scale but before the next visible content rect update containing
that old scale, we will end up reverting to this old scale instead of the scale after shrinking to fit. This
same bug is present when using `setViewScale`, which was exercised by the flaky test below, since the new scale
after the viewport configuration change may be overridden by an incoming visible content rect update.

To fix this, we add a mechanism to detect when the page scale has been changed by the web process (e.g. after a
viewport change) and remember the last committed layer tree identifier at that moment. Later, if we get a
visible content rect update with a layer tree commit identifier equal to (or older than) the layer tree commit
identifier when we changed the page scale, don't set the page scale factor using this incoming scale; instead,
wait for the next visible content rect update (which will contain the new scale).

Fixes an existing flaky test: fast/viewport/ios/device-width-viewport-after-changing-view-scale.html

* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::close):
(WebKit::WebPage::scalePage):
(WebKit::WebPage::platformDidScalePage):

Add a platform hook that is invoked after scaling the page via `scalePage`. See below for the iOS version.

(WebKit::WebPage::didCommitLoad):
(WebKit::WebPage::didFinishDocumentLoad):
(WebKit::WebPage::didFinishLoad):

Drive-by fix: remove an unnecessary `UNUSED_PARAM`. Also, replace calls to schedule the shrink to fit content
timer with a call to `shrinkToFitContent` instead.

* WebProcess/WebPage/WebPage.h:

Add a member variable to remember the last sent layer tree commit ID and page scale, when we last changed the
page scale via the web process. This is set in `platformDidScalePage` below.

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

Refactor this to not return a bool, but instead call `viewportConfigurationChanged` at the end if the viewport
actually changed.

(WebKit::WebPage::updateVisibleContentRects):

Ignore the incoming page scale when updating visible content rects if it:
1. Is the same as the last page scale we sent via layer tree commit.
2. After sending the above scale, we've since adjusted the page scale such that it is no longer the same.

(WebKit::WebPage::platformDidScalePage):

Update `m_lastLayerTreeTransactionIdAndPageScaleBeforeScalingPage`.

(WebKit::WebPage::scheduleShrinkToFitContent): Deleted.
(WebKit::WebPage::shrinkToFitContentTimerFired): Deleted.

Remove the zero-delay timer before running the shrink-to-fit heuristic, and just call `shrinkToFitContent`
directly. This was a source of flakiness when trying to reproduce the bug, and doesn't seem to serve any
purpose since we shrink-to-fit after dispatching the "DOMContentLoaded" and "load" events anyways.

(WebKit::WebPage::immediatelyShrinkToFitContent): Deleted.

LayoutTests:

Remove failing expectations for fast/viewport/ios/device-width-viewport-after-changing-view-scale.html.

* platform/ios-wk2/TestExpectations:

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

2 months ago[Cocoa] Deny access to database mapping service
pvollan@apple.com [Sat, 21 Mar 2020 01:10:42 +0000 (01:10 +0000)]
[Cocoa] Deny access to database mapping service
https://bugs.webkit.org/show_bug.cgi?id=209339
Source/WebKit:

<rdar://problem/56966010>

Reviewed by Brent Fulgham.

In order for the WebContent process to not have permantent access to the database mapping service,
this patch creates an extension for the service in the UI process, sends it to the WebContent
process, where it is consumed. Then, an API call is made which will map the database, and next the
WebContent process will revoke the extension. The WebContent process has then mapped the database,
and access to the database mapping service is no longer needed.

Tested by: fast/sandbox/ios/sandbox-mach-lookup.html

* Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
* Shared/WebProcessCreationParameters.cpp:
(WebKit::WebProcessCreationParameters::encode const):
(WebKit::WebProcessCreationParameters::decode):
* Shared/WebProcessCreationParameters.h:
* UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::WebProcessPool::platformInitializeWebProcess):
* WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::platformInitializeWebProcess):
* WebProcess/com.apple.WebProcess.sb.in:

Source/WTF:

<rdar://problem/56966010>

Reviewed by Brent Fulgham.

Disable the use of UTTypeRecord swizzling, since this is not needed with the new approach
of denying the database mapping service in this patch.

* wtf/PlatformUse.h:

LayoutTests:

Reviewed by Brent Fulgham.

* fast/sandbox/ios/sandbox-mach-lookup-expected.txt:
* fast/sandbox/ios/sandbox-mach-lookup.html:

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

2 months ago[iOS] Add telemetry for message filtering
pvollan@apple.com [Sat, 21 Mar 2020 00:52:08 +0000 (00:52 +0000)]
[iOS] Add telemetry for message filtering
https://bugs.webkit.org/show_bug.cgi?id=209003
<rdar://problem/60376722>

Reviewed by Brent Fulgham.

* Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:

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

2 months agohasObservableSideEffectsForRegExpSplit doesn't check for @@match override
ross.kirsling@sony.com [Sat, 21 Mar 2020 00:38:45 +0000 (00:38 +0000)]
hasObservableSideEffectsForRegExpSplit doesn't check for @@match override
https://bugs.webkit.org/show_bug.cgi?id=209363

Reviewed by Michael Saboff.

JSTests:

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

Source/JavaScriptCore:

Our RegExp.prototype[@@split] implementation has a fast path for unadultered RegExp objects,
but we're using that fast path even when @@match has been overridden.

This is illegitimate because the RegExp species constructor calls IsRegExp, which hits the @@match getter.

* builtins/BuiltinNames.h:
* builtins/RegExpPrototype.js:
(globalPrivate.hasObservableSideEffectsForRegExpSplit):
* bytecode/LinkTimeConstant.h:
* runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::init):

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

2 months agorun-webkit-tests: Report MacCatalyst as a unique platform
jbedard@apple.com [Sat, 21 Mar 2020 00:27:32 +0000 (00:27 +0000)]
run-webkit-tests: Report MacCatalyst as a unique platform
https://bugs.webkit.org/show_bug.cgi?id=209361

Rubber-stamped by Aakash Jain.

* Scripts/webkitpy/port/mac.py:
(MacCatalystPort):
(MacCatalystPort.configuration_for_upload): Treat MacCatalyst as a separate platform from Mac.

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

2 months agoContent-Type & Nosniff Ignored on XML External Entity Resources
ddkilzer@apple.com [Fri, 20 Mar 2020 23:52:09 +0000 (23:52 +0000)]
Content-Type & Nosniff Ignored on XML External Entity Resources
<https://webkit.org/b/191171>
<rdar://problem/45763222>

Reviewed by Darin Adler.

Source/WebCore:

Test: http/tests/security/contentTypeOptions/nosniff-xml-external-entity.xhtml

* platform/MIMETypeRegistry.cpp:
(WebCore::MIMETypeRegistry::isXMLEntityMIMEType): Add.
* platform/MIMETypeRegistry.h:
(WebCore::MIMETypeRegistry::isXMLEntityMIMEType): Add.
- Checks for XML external entity MIME types.

* xml/parser/XMLDocumentParserLibxml2.cpp:
(WebCore::externalEntityMimeTypeAllowedByNosniff): Add.
- Checks whether the MIME type is valid based on the presence of
  the "X-Content-Type-Options: nosniff" header.
(WebCore::openFunc):
- Drop the contents of the resource that was returned and print
  an error message to the Web Inspector console if
  externalEntityMimeTypeAllowedByNosniff() says the MIME type is
  not allowed.

LayoutTests:

* http/tests/security/contentTypeOptions/nosniff-xml-external-entity-expected.txt: Add.
* http/tests/security/contentTypeOptions/nosniff-xml-external-entity.xhtml: Add.

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

2 months agoCORS-disabling SPI introduced in r253978 should make responses non-opaque
achristensen@apple.com [Fri, 20 Mar 2020 23:24:33 +0000 (23:24 +0000)]
CORS-disabling SPI introduced in r253978 should make responses non-opaque
https://bugs.webkit.org/show_bug.cgi?id=209351
<rdar://problem/60024850>

Reviewed by Chris Dumez.

Source/WebCore:

Covered by making the API test actually check that response content is readable.

* loader/DocumentThreadableLoader.cpp:
(WebCore::DocumentThreadableLoader::responseReceived):

Tools:

* TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

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

2 months agoREGRESSION (r258707): storage/indexeddb/cursor-leak.html is flaky timing out
sihui_liu@apple.com [Fri, 20 Mar 2020 22:56:09 +0000 (22:56 +0000)]
REGRESSION (r258707): storage/indexeddb/cursor-leak.html is flaky timing out
https://bugs.webkit.org/show_bug.cgi?id=209318
<rdar://problem/60657081>

Unreviewed test gardening after r258768.

* platform/ios-wk2/TestExpectations:
* platform/mac/TestExpectations:

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

2 months agoHave insertDictatedTextAsync() take an InsertTextOptions
dbates@webkit.org [Fri, 20 Mar 2020 22:45:25 +0000 (22:45 +0000)]
Have insertDictatedTextAsync() take an InsertTextOptions
https://bugs.webkit.org/show_bug.cgi?id=209308
<rdar://problem/60652838>

Reviewed by Darin Adler.

This will provide future extensibility, which I plan to make use of in a subsequent patch,
in addition to making the interface for insertDictatedTextAsync() more like insertTextAsync().

* UIProcess/Cocoa/WebPageProxyCocoa.mm:
(WebKit::WebPageProxy::insertDictatedTextAsync): Pass the options through. The caller is now
responsible for setting the registerUndoGroup insertion option.
* UIProcess/Cocoa/WebViewImpl.mm:
(WebKit::WebViewImpl::insertText): Stack-allocate a InsertTextOptions setting its registerUndoGroup
field and pass this object through.
* UIProcess/WebPageProxy.h:
* UIProcess/ios/WKContentViewInteraction.mm:
(-[WKContentView insertText:alternatives:style:]): Pass the default constructed InsertTextOptions,
which defaults registerUndoGroup to false to keep the current behavior.
* WebProcess/WebPage/Cocoa/WebPageCocoa.mm:
(WebKit::WebPage::insertDictatedTextAsync): Write in terms of InsertTextOptions.registerUndoGroup.
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:

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

2 months agoEnsure media cache directory is created before passing to AVURLAsset.
jer.noble@apple.com [Fri, 20 Mar 2020 22:36:45 +0000 (22:36 +0000)]
Ensure media cache directory is created before passing to AVURLAsset.
https://bugs.webkit.org/show_bug.cgi?id=209341

Reviewed by Eric Carlson.

Source/WebCore:

Sandbox changes require the media cache directory to be created before passing to
AVFoundation, to ensure that a sandbox extension is allowed to be created for that
directory.

When the mediaCacheDirectory is empty or null, no longer specify a temporary directory. This
allows clients to disable caching by specifying an empty string for the cache directory.
Since now assetCacheForPath() can return nil, update all the call sites to handle that
possibility. Add a new method, ensureAssetCacheExistsAtPath() which tries to create a
directory at the specified path, and returns nil if that is not possible. This ensures the
cache path exists before adding the AVAssetCache to the AVURLAsset options dictionary.

* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::assetCacheForPath):
(WebCore::ensureAssetCacheExistsForPath):
(WebCore::MediaPlayerPrivateAVFoundationObjC::originsInMediaCache):
(WebCore::MediaPlayerPrivateAVFoundationObjC::clearMediaCache):
(WebCore::MediaPlayerPrivateAVFoundationObjC::clearMediaCacheForOrigins):
(WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):

Source/WebKitLegacy/mac:

MediaPlayerPrivateAVFoundaionObjC will no longer create an asset cache in a temporary
directory by default; ensure that it's media cache directory is set during initialization.

* WebView/WebView.mm:
(-[WebView _commonInitializationWithFrameName:groupName:]):

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

2 months ago[ iOS wk2 ] animations/animation-direction-reverse.html is a flaky failure
jacob_uphoff@apple.com [Fri, 20 Mar 2020 22:31:03 +0000 (22:31 +0000)]
[ iOS wk2 ] animations/animation-direction-reverse.html is a flaky failure
https://bugs.webkit.org/show_bug.cgi?id=209362

Unreviewed test gardening.

* platform/ios-wk2/TestExpectations:

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

2 months agoUpdate imported/w3c/web-platform-tests/css/css-text/line-break/line-break-{strict...
jacob_uphoff@apple.com [Fri, 20 Mar 2020 22:27:17 +0000 (22:27 +0000)]
Update imported/w3c/web-platform-tests/css/css-text/line-break/line-break-{strict,normal}-015.xht
https://bugs.webkit.org/show_bug.cgi?id=209250

Fixing test expectations.

Unreviewed test gardening.

* platform/mac/TestExpectations:

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

2 months agoReplace "deferred element focus" functionality with alternative solution
dbates@webkit.org [Fri, 20 Mar 2020 21:55:10 +0000 (21:55 +0000)]
Replace "deferred element focus" functionality with alternative solution
https://bugs.webkit.org/show_bug.cgi?id=201608

Reviewed by Wenson Hsieh.

This is a partial revert of r190278. Have the web process perform a layout, if needed, when
computing focus element information and send an editor state update immediately. If layout is
not needed then explicitly schedule a full editor state update.

Currently, fetching focus element information neither sends an editor state update nor
schedules one. As a result, when the web process tells the UI process to focus an element the
UI process may need to defer doing so if the last received update did not include details
that require up-to-date layout (e.g. the bounding rect of the focused element, which is used
to scroll and zoom to center the focused element). The UI process then schedules an async message
to the web process to fetch the full editor state, which will arrive in a layer tree commit message
from the web process. (Note that the UI process schedules this request to ensure the web process
knows that it is waiting for a layer tree commit. The web process can use this info to expedite
a layer tree commit, if needed). This deferral mechanism complicates the element focusing and
defocusing logic in the UI process and prevents fixing <https://bugs.webkit.org/show_bug.cgi?id=199960>.
Instead remove this deferral concept and have the web process ensure that a full editor state
update is sent or will be sent when computing the focus element information.

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::resetStateAfterProcessExited):
* UIProcess/WebPageProxy.h:
* UIProcess/ios/WebPageProxyIOS.mm:
(WebKit::WebPageProxy::didCommitLayerTree):
(WebKit::WebPageProxy::elementDidFocus):
(WebKit::WebPageProxy::elementDidBlur):
Remove bookkeeping code to track a deferred focus event or to perform the deferred event
on layer tree commit.

* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::elementDidFocus):
* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::getFocusedElementInformation): Save off whether a layout is needed then
tell the page to layout if needed. If a layout was needed then send an editor state update
immediately (it's an async message): this update will be a "full editor state" update that
includes up-to-date layout details. Otherwise, schedule a full editor state update. While I
am here, I updated the code to take out a ref on the focused frame's document before performing
a layout because layout can cause arbitrary JavaScript execution that could detach the document
from its frame view as part of destroying the document. Document destruction is detected by
checking whether the document has been detached from its frame view. If this happens then
bail out as there is no need to get focus element info.

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

2 months agoIntersection Observer intersections are wrong with zooming
ajuma@chromium.org [Fri, 20 Mar 2020 21:54:46 +0000 (21:54 +0000)]
Intersection Observer intersections are wrong with zooming
https://bugs.webkit.org/show_bug.cgi?id=209264

Unreviewed test gardening.

Add an expected.txt file that was accidentally omitted in r258787.

* intersection-observer/root-margin-with-zoom-expected.txt: Added.

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

2 months agocommit-queue should skip building and testing if patch already passed tests on mac...
aakash_jain@apple.com [Fri, 20 Mar 2020 21:38:36 +0000 (21:38 +0000)]
commit-queue should skip building and testing if patch already passed tests on mac-wk2 queue
https://bugs.webkit.org/show_bug.cgi?id=208938

Reviewed by Jonathan Bedard.

* BuildSlaveSupport/ews-build/steps.py:
(RunWebKitTests.doStepIf): Skip testing if patch already passed mac-wk2 tests.
(CheckPatchStatusOnEWSQueues): Build-step to check patch status on other queues.
(CheckPatchStatusOnEWSQueues.get_patch_status):
(CheckPatchStatusOnEWSQueues.start):
* BuildSlaveSupport/ews-build/steps_unittest.py:
(test_skip_for_mac_wk2_passed_patch_on_commit_queue): Added unit-tests.
* BuildSlaveSupport/ews-build/factories.py: Added build-step to check the patch status on other queues.
* BuildSlaveSupport/ews-build/factories_unittest.py: Updated unit-test.
* BuildSlaveSupport/ews-app/ews/views/statusbubble.py: Added the new step status to STEPS_TO_HIDE.

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

2 months agoFix name of "X-Content-Type:" HTTP header in console logging
ddkilzer@apple.com [Fri, 20 Mar 2020 21:21:04 +0000 (21:21 +0000)]
Fix name of "X-Content-Type:" HTTP header in console logging
<https://webkit.org/b/209348>

Reviewed by Devin Rousso.

Source/WebCore:

* css/StyleSheetContents.cpp:
(WebCore::StyleSheetContents::parseAuthorStyleSheet):
* dom/LoadableClassicScript.cpp:
(WebCore::LoadableClassicScript::notifyFinished):
* workers/WorkerScriptLoader.cpp:
(WebCore::WorkerScriptLoader::validateWorkerResponse):
- Change "X-Content-Type:" to "X-Content-Type-Options:" to fix
  the name of the header.

LayoutTests:

* http/tests/security/contentTypeOptions/nosniff-dynamic-script-blocked-expected.txt:
* http/tests/security/contentTypeOptions/nosniff-script-blocked-expected.txt:
* http/tests/security/contentTypeOptions/nosniff-script-without-content-type-blocked-expected.txt:
- Update test results for the correct name of the header:
  "X-Content-Type-Options:".

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

2 months agoIntersection Observer intersections are wrong with zooming
ajuma@chromium.org [Fri, 20 Mar 2020 20:58:54 +0000 (20:58 +0000)]
Intersection Observer intersections are wrong with zooming
https://bugs.webkit.org/show_bug.cgi?id=209264

Reviewed by Simon Fraser.

Source/WebCore:

An IntersectionObserver's rootMargin is expressed in CSS pixels,
but we weren't accounting for page zoom. Fix this by multiplying
the root margin by the zoom factor.

Test: intersection-observer/root-margin-with-zoom.html

* dom/Document.cpp:
(WebCore::expandRootBoundsWithRootMargin):
(WebCore::computeIntersectionState):

LayoutTests:

* intersection-observer/root-margin-with-zoom.html: Added.

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

2 months ago[ews] Better organize patch status api data
aakash_jain@apple.com [Fri, 20 Mar 2020 20:44:56 +0000 (20:44 +0000)]
[ews] Better organize patch status api data
https://bugs.webkit.org/show_bug.cgi?id=209342

Reviewed by Jonathan Bedard.

* BuildSlaveSupport/ews-app/ews/views/status.py:
(Status._build_status):
(Status._build_statuses_for_patch): Updated to return dictionary instead of list.
(Status.get): Remove safe=false now that we are returning a dictionary.

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

2 months agoREGRESSION: (r258747) [ Mac wk1 Release ] media/video-background-tab-playback.html...
lawrence.j@apple.com [Fri, 20 Mar 2020 20:40:41 +0000 (20:40 +0000)]
REGRESSION: (r258747) [ Mac wk1 Release ] media/video-background-tab-playback.html is failing.
https://bugs.webkit.org/show_bug.cgi?id=209353

Unreviewed test gardening.

* platform/mac-wk1/TestExpectations:

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

2 months agoAdd correct annotations to block isa pointer
commit-queue@webkit.org [Fri, 20 Mar 2020 20:34:51 +0000 (20:34 +0000)]
Add correct annotations to block isa pointer
https://bugs.webkit.org/show_bug.cgi?id=209355
<rdar://problem/60431606>

Patch by Oliver Hunt <oliver@nerget,com> on 2020-03-20
Reviewed by Keith Miller.

Trivial definition update.

* wtf/BlockPtr.h:
(WTF::BlockPtr<R):

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

2 months agoRegExp.prototype[@@replace] doesn't coerce result index to integer
ross.kirsling@sony.com [Fri, 20 Mar 2020 20:19:56 +0000 (20:19 +0000)]
RegExp.prototype[@@replace] doesn't coerce result index to integer
https://bugs.webkit.org/show_bug.cgi?id=209323

Reviewed by Yusuke Suzuki.

JSTests:

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

Source/JavaScriptCore:

From https://tc39.es/ecma262/#sec-regexp.prototype-@@replace:
  21.2.5.10 RegExp.prototype [ @@replace ] ( string, replaceValue )
    ...
    14. For each result in results, do
      ...
      e. Let position be ? ToInteger(? Get(result, "index")).
      f. Set position to max(min(position, lengthS), 0).

result.index may be undefined, so it doesn't suffice to coerce it with comparison operators.

* builtins/RegExpPrototype.js:

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

2 months agoImprove the previous build fix.
timothy_horton@apple.com [Fri, 20 Mar 2020 20:16:38 +0000 (20:16 +0000)]
Improve the previous build fix.

* WebCoreSupport/WebFrameLoaderClient.mm:
Darin points out that we have USE(WEB_THREAD), so might as well use it!

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

2 months ago[GPUP] Add PlatformLayerContainer to hold pointer to PlatformLayer
don.olmstead@sony.com [Fri, 20 Mar 2020 20:04:30 +0000 (20:04 +0000)]
[GPUP] Add PlatformLayerContainer to hold pointer to PlatformLayer
https://bugs.webkit.org/show_bug.cgi?id=208963

Reviewed by Eric Carlson.

Source/WebCore:

Add a PlatformLayerContainer definition for use within the GPU Process code.
Migrate to using over typedef in the file.

* platform/graphics/PlatformLayer.h:

Source/WebKit:

Use PlatformLayerContainer since RetainPtr is a Cocoa only construct. This
allows non-Cocoa ports to get further with compiling out the GPU Process.

* WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp:
* WebProcess/GPU/media/MediaPlayerPrivateRemote.h:
* WebProcess/GPU/media/VideoLayerRemote.h:
* WebProcess/GPU/media/cocoa/MediaPlayerPrivateRemoteCocoa.mm:
(WebKit::MediaPlayerPrivateRemote::createVideoFullscreenLayer):
* WebProcess/GPU/media/cocoa/VideoLayerRemoteCocoa.mm:
(WebKit::createVideoLayerRemote):
* WebProcess/GPU/webrtc/SampleBufferDisplayLayer.h:

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

2 months agoIsolated tree updates must happen after AXObject has finished handling notifications.
andresg_22@apple.com [Fri, 20 Mar 2020 19:56:49 +0000 (19:56 +0000)]
Isolated tree updates must happen after AXObject has finished handling notifications.
https://bugs.webkit.org/show_bug.cgi?id=209354

Reviewed by Chris Fleizach.

Isolated tree updates were happening in AXObjectCache::postNotification,
but that is too early because the AXObject tree is updated during
notificationPostTimerFired. Thus, moved the updates to after all
AXObject tree updates have been done.
In addition, fixed the check for replacement of the IsolatedObject in
AXIsolatedTree::applyPendingChanges, which now happens only if the old
and new objects have the same platform wrapper.

* accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::notificationPostTimerFired):
(WebCore::AXObjectCache::postNotification):
* accessibility/isolatedtree/AXIsolatedTree.cpp:
(WebCore::AXIsolatedTree::applyPendingChanges):

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

2 months ago[ iOS wk2 ] http/tests/resourceLoadStatistics/third-party-cookie-blocking-on-sites...
lawrence.j@apple.com [Fri, 20 Mar 2020 19:35:02 +0000 (19:35 +0000)]
[ iOS wk2 ] http/tests/resourceLoadStatistics/third-party-cookie-blocking-on-sites-without-user-interaction-database.html is flaky timing out.
https://bugs.webkit.org/show_bug.cgi?id=209357

Unreviewed test gardening.

* platform/ios-wk2/TestExpectations:

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

2 months agoWeb Inspector: REGRESSION(r257835): close and undock buttons are shown in remote...
drousso@apple.com [Fri, 20 Mar 2020 19:22:02 +0000 (19:22 +0000)]
Web Inspector: REGRESSION(r257835): close and undock buttons are shown in remote inspector
https://bugs.webkit.org/show_bug.cgi?id=209346

Reviewed by Timothy Hatcher.

In the case of remote inspection, the frontend is told that docking is not available before
it is even shown (via `InspectorFrontendAPI.setDockingUnavailable`). Additionally, the
backend (`WebKit::RemoteWebInspectorUI`) never tells the frontend what dock side it actually
is (via `InspectorFrontendAPI.setDockSide`), as there would be no point, given that docking
is unavailable, meaning that the frontend must be undocked.

Before r257835, the docking state held by `WI._dockConfiguration` and `WI.docked`, neither
of which would be set as described above. As a result, in `WI._updateDockNavigationItems`
`WI.docked` would be undefined, which is falsy, thereby causing all docking navigation items
to be hidden. After r257835, these were merged into one `WI.dockConfiguration`, which is
compared against `WI.DockConfiguration.Undocked` instead of just being falsy checked,
meaning it would result in `true` which would not hide all of the docking navigation items.

Change the logic of `WI.updateDockingAvailability` such that if the frontend is told that
docking is unavailable, mark the `WI.dockConfiguration` as `WI.DockConfiguration.Undocked`.
This way, the frontend will always have a valid value for `WI.dockConfiguration`.

Additionally, further leverage `InspectorFrontendHost.supportsDockSide` to only create the
docking navigation items that are actually supported by the host.

* UserInterface/Base/Main.js:
(WI.contentLoaded):
(WI.updateDockingAvailability):
(WI.resizeDockedFrameMouseDown):
(WI.dockedConfigurationSupportsSplitContentBrowser):
(WI._updateDockNavigationItems):
(WI._updateTabBarDividers):

* UserInterface/Views/TabBar.js:
(WI.TabBar.get horizontalPadding):
(WI.TabBar.prototype.resetCachedWidths): Added.
When switching dock configurations, we need to reset the cached width of each tab bar item,
as otherwise, a large width cached when undocked can incorrectly be used when docked.

* UserInterface/Views/TabBarItem.js:
(WI.TabBarItem.get horizontalMargin):
Replace negative checks of `WI.dockConfiguration` with positive ones that can't be fooled by
a falsy value.

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

2 months agoFix the build.
timothy_horton@apple.com [Fri, 20 Mar 2020 18:59:26 +0000 (18:59 +0000)]
Fix the build.

* WebCoreSupport/WebFrameLoaderClient.mm:

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

2 months agoFix for retrieving focus in isolated tree mode.
andresg_22@apple.com [Fri, 20 Mar 2020 18:50:00 +0000 (18:50 +0000)]
Fix for retrieving focus in isolated tree mode.
https://bugs.webkit.org/show_bug.cgi?id=209336

Reviewed by Chris Fleizach.

Focused object requests can come on the secondary thread before the
isolated tree has been generated. Thus, AXObjectCache::isolatedTreeFocusedObject
needs to generate the isolated tree if it doesn't exist, similar to
isolatedTreeRootObject.

* accessibility/AXObjectCache.cpp:
(WebCore::AXObjectCache::isolatedTreeFocusedObject):
(WebCore::AXObjectCache::focusedUIElementForPage):
(WebCore::AXObjectCache::getOrCreateIsolatedTree const):
(WebCore::AXObjectCache::isolatedTreeRootObject):
* accessibility/AXObjectCache.h:
* accessibility/isolatedtree/AXIsolatedObject.cpp:
(WebCore::AXIsolatedObject::focusedUIElement const):
* accessibility/isolatedtree/AXIsolatedTree.h:
m_pendingFocusedNodeID wasn't being initialized, which was causing
random crashes when accessing the HashMap of isolated objects for a
spurious AXID.

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

2 months ago[ iOS ] http/tests/security/stylesheet-href-redirect.html is flaky timing out
jacob_uphoff@apple.com [Fri, 20 Mar 2020 18:40:36 +0000 (18:40 +0000)]
[ iOS ] http/tests/security/stylesheet-href-redirect.html is flaky timing out
https://bugs.webkit.org/show_bug.cgi?id=209352

Unreviewed test gardening.

* platform/ios-wk2/TestExpectations:

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

2 months agoFix JSCOnly build without unified sources
commit-queue@webkit.org [Fri, 20 Mar 2020 18:39:35 +0000 (18:39 +0000)]
Fix JSCOnly build without unified sources
https://bugs.webkit.org/show_bug.cgi?id=209343

Patch by Justin Michaud <justin@justinmichaud.com> on 2020-03-20
Reviewed by Keith Miller.

.:

* .gitignore:

Source/JavaScriptCore:

I managed to get clangd to work for code completion using the following command:

./Tools/Scripts/build-webkit --jsc-only --cmakeargs="-DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DENABLE_UNIFIED_BUILDS=OFF" && compdb -p WebKitBuild/Release/ list > compile_commands.json

This patch fixes the build for non-unified sources, and adds some extra clangd files to .gitignore.

* API/MarkedJSValueRefArray.h:
* jit/JITPropertyAccess.cpp:

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

2 months ago[ iOS wk2 ] css2.1/20110323/replaced-intrinsic-ratio-001.htm is flaky failing.
lawrence.j@apple.com [Fri, 20 Mar 2020 18:37:12 +0000 (18:37 +0000)]
[ iOS wk2 ] css2.1/20110323/replaced-intrinsic-ratio-001.htm is flaky failing.
https://bugs.webkit.org/show_bug.cgi?id=209350

Unreviewed test gardening.

* platform/ios-wk2/TestExpectations:

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

2 months agoUpstream a variety of Cocoa-platform HAVE and ENABLE macros
timothy_horton@apple.com [Fri, 20 Mar 2020 18:31:38 +0000 (18:31 +0000)]
Upstream a variety of Cocoa-platform HAVE and ENABLE macros
https://bugs.webkit.org/show_bug.cgi?id=209307

Reviewed by Andy Estes.

Source/JavaScriptCore:

* Configurations/FeatureDefines.xcconfig:

Source/WebCore:

* Configurations/FeatureDefines.xcconfig:

Source/WebCore/PAL:

* Configurations/FeatureDefines.xcconfig:
* pal/spi/cocoa/AVFoundationSPI.h:
* pal/spi/cocoa/RevealSPI.h:
* pal/spi/ios/UIKitSPI.h:

Source/WebKit:

* Configurations/FeatureDefines.xcconfig:
* Platform/spi/ios/PDFKitSPI.h:
* UIProcess/RemoteLayerTree/ios/RemoteLayerTreeHostIOS.mm:
(WebKit::createRemoteView):
* UIProcess/RemoteLayerTree/ios/RemoteLayerTreeViews.mm:
* UIProcess/ios/WKPDFView.mm:
(-[WKPDFView web_initWithFrame:webView:mimeType:]):

Source/WebKitLegacy/mac:

* Configurations/FeatureDefines.xcconfig:

Source/WTF:

* wtf/PlatformEnableCocoa.h:
* wtf/PlatformHave.h:

Tools:

* TestWebKitAPI/Configurations/FeatureDefines.xcconfig:

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

2 months ago[ iOS ] REGRESSION: http/tests/cache/disk-cache/disk-cache-disable.html is flaky...
jacob_uphoff@apple.com [Fri, 20 Mar 2020 18:16:44 +0000 (18:16 +0000)]
[ iOS ] REGRESSION: http/tests/cache/disk-cache/disk-cache-disable.html is flaky timing out
https://bugs.webkit.org/show_bug.cgi?id=209349.

Unreviewed test gardening.

* platform/ios-wk2/TestExpectations:

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

2 months agoUse same syntax for ComputePagesForPrintingAndDrawToPDF message as other messages
commit-queue@webkit.org [Fri, 20 Mar 2020 17:50:21 +0000 (17:50 +0000)]
Use same syntax for ComputePagesForPrintingAndDrawToPDF message as other messages
https://bugs.webkit.org/show_bug.cgi?id=209310
<rdar://problem/60648013>

Patch by Alex Christensen <achristensen@webkit.org> on 2020-03-20
Reviewed by Sam Weinig.

This makes it easier for scripts to find which messages are unused.

* UIProcess/ios/WebPageProxyIOS.mm:
(WebKit::WebPageProxy::computePagesForPrintingAndDrawToPDF):

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

2 months agoAdd routines to check about:blank and about:srcdoc URLs
youenn@apple.com [Fri, 20 Mar 2020 17:40:44 +0000 (17:40 +0000)]
Add routines to check about:blank and about:srcdoc URLs
https://bugs.webkit.org/show_bug.cgi?id=209174

Reviewed by Alex Christensen.

LayoutTests/imported/w3c:

* web-platform-tests/html/dom/usvstring-reflection.https-expected.txt:

Source/WebCore:

* Modules/fetch/FetchRequest.cpp:
(WebCore::computeReferrer):
* dom/Document.cpp:
(WebCore::isURLPotentiallyTrustworthy):
* html/HTMLFrameElementBase.cpp:
(WebCore::HTMLFrameElementBase::location const):
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::shouldTreatURLAsSrcdocDocument const):
* page/SecurityPolicy.cpp:
(WebCore::SecurityPolicy::shouldInheritSecurityOriginFromOwner):

Source/WebKit:

* WebProcess/WebCoreSupport/WebResourceLoadObserver.cpp:
(WebKit::WebResourceLoadObserver::requestStorageAccessUnderOpener):

Source/WTF:

* wtf/URL.cpp:
(WTF::aboutSrcDocURL):
(WTF::URL::isAboutBlank const):
(WTF::URL::isAboutSrcDoc const):
* wtf/URL.h:

LayoutTests:

* platform/mac-wk1/imported/w3c/web-platform-tests/html/dom/usvstring-reflection.https-expected.txt:

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