Timeline
Feb 22, 2020:
- 11:16 PM Changeset in webkit [257192] by
-
- 28 edits1 delete in trunk/Source/WebCore
Refine the DOM element iterator implementation
https://bugs.webkit.org/show_bug.cgi?id=208100
Reviewed by Antti Koivisto.
- Removed the duplicate descendant iterator, keeping the one that matches the style of the ancestor and child iterators.
- Removed the non-template elementAncestors, elementChildren, elementDescendants, and elementLineage functions and changed callers to use xxxOfType<Element> instead.
- Renamed "IteratorAdapter" templates to "Range", choosing that term to match the upcoming C++20 Ranges library and range-based for loops.
- Changed the iterators to use an actual "nullptr" for end, following the "sentinel" design pattern from the Ranges library. Still kept a tiny bit of using an iterator for end around, only so we can use iterator library functions like std::distance while waiting for std::ranges::distance, which is compatible with sentinels.
- Implemented const correctness by using const types instead of separate "Const" class templates. This cut down on source code size a lot. These element iterators don't need whole separate templates to implement the const correctness the way collection classes like HashMap do.
- Improved some other details, like using more const and constexpr on members. All the functions on a range are const, because the range itself doesn't ever get modified, and all functions on an iterator are also const, because only operations like ++ and -- actually modify the iterator.
- For now at least, removed extra code we don't need in practice. We never need to compare iterators to each other except when iterating a range, for example, so kept the != used for range iteration but not ==.
- Simplified the HTMLCollection implementations by taking advantage of the null- based and sentinel designs. There are various places where we can write simpler code and pass around fewer arguments.
- Added a new descendantsOfType template that takes a predicate and filters to only the elements that match that predicate. Similar concept to how we implement HTML collections, and possibly could be used even more eventually.
- Use std::iterator in ElementIterator so we don't need to do that in derived classes. Also made more of ElementIterator protected to make it more explicit that it's an abstract class template and not something to be used directly.
The most unusual clients of the elmeent ranges and iterators are HTMLCollection and
the related caches, and this patch includes changes to those to adopt the new model.
- Headers.cmake: Removed ElementDescendantIterator.h.
- WebCore.xcodeproj/project.pbxproj: Ditto.
- dom/ChildNodeList.cpp:
(WebCore::ChildNodeList::ChildNodeList): Removed initialization of m_indexCache
since the constructor no longer requires arguments.
(WebCore::ChildNodeList::invalidateCache): Removed argument to
CollectionIndexCache::invalidate.
- dom/ChildNodeList.h: Removed collectionEnd, since it's no longer needed.
- dom/CollectionIndexCache.h: Removed the collection argument to the
constructor, hasValidCache, and invalidate functions. Updated algorithms to use
null style termination instead of actually relying on comparing with an end
iterator, since that works for our element iterators.
- dom/ContainerNode.cpp:
(WebCore::ContainerNode::childElementCount const):: Use an empty initializer
list instead of the result of the end function since std::distance requires
both begin and end iterators have the same type.
- dom/ElementAncestorIterator.h: Made the changes mentioned above, plus moved the
declarations of functions to the top of the file, since the classes are
implementation details, used downcast instead of static_cast.
- dom/ElementAndTextDescendantIterator.h: Renamed IteratorAdapter to Range,
mostly didn't make other changes since this is not one of the element iterators.
- dom/ElementChildIterator.h: Made the changes mentioned above, plus moved the
declarations of functions to the top of the file, since the classes are
implementation details.
- dom/ElementDescendantIterator.h: Removed.
- dom/ElementIterator.h: Made the changes mentioned above.
- dom/LiveNodeList.cpp: Removed some unneeded includes, including HTMLCollection.h.
(WebCore::LiveNodeList::LiveNodeList): Simplified a little bit.
(WebCore::LiveNodeList::rootNode): Moved to the header.
- dom/LiveNodeList.h: Updated since CollectionTraversal now uses the
more modern ElementDescendantIterator, not the older one that used a vector of
ancestors to do the iteration. Also use WTF_MAKE_ISO_NONALLOCATABLE since
LiveNodeList is an abstract class, and made some members protected. Removed
CachedLiveNodeList::rootNode since it was identical to LiveNodeList::rootNode,
and made LiveNodeList::rootNode protected so it can be called in
CachedLiveNodeList, and moved it to the header so it will still be inlined.
Simplified CachedListNodeList to use more final, to name long types less by
using "auto" and "using", and to not pass arguments to functions that don't
need them any more.
- dom/NameNodeList.cpp:
(WebCore::NameNodeList::create): Moved here from the header.
- dom/NameNodeList.h: Removed unneeded includes and comment, moved create
function out of the header.
- dom/TypedElementDescendantIterator.h: Made all the change mentioned above.
Also added a new filteredDescendants function, range, and iterator that uses
a filter function. Not used yet in this patch; use comes in a future one.
- html/CachedHTMLCollection.h: Updated includes, shortened type names,
and used auto to simplify the code a bit. Removed unneeded collection arguments
from various CollectionIndexCache functions.
- html/CollectionTraversal.h: Updated to use the new/typed version of
ElementDescendantIterator. Removed end functions. Use shorter type names.
Tweaked algorithms to use null termination for loops instead of end iterators.
- html/HTMLFormControlsCollection.h:
(WebCore::HTMLFormControlsCollection::item const): Removed unneeded class
template arguments.
- html/HTMLFormElement.cpp:
(WebCore::HTMLFormElement::formElementIndex): Changed to use the null check
instead of comparing iterator with end.
- html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::selectNextSourceChild): Ditto.
- html/HTMLTableSectionElement.cpp:
(WebCore::HTMLTableSectionElement::numRows const): Pass a default-constructed
iterator for end to std::distance. When we get C++20 we can clean this up by
using std::ranges::distances instead.
- html/LabelsNodeList.cpp:
(WebCore::LabelsNodeList::create): Moved here from the header.
- html/LabelsNodeList.h: Removed unneeded include, tweaked coding style a bit,
moved create function into the .cpp file.
- html/RadioNodeList.cpp: Removed unneeded include.
(WebCore::RadioNodeList::create): Moved this here from the header.
(WebCore::nonEmptyRadioButton): Renamed from toRadioButtonInputElement to make
a little clearer what the function does.
(WebCore::RadioNodeList::value const): Updated to use nonEmptyRadioButton and
straighten out the loop a tiny bit.
(WebCore::RadioNodeList::setValue): Ditto.
(WebCore::RadioNodeList::checkElementMatchesRadioNodeListFilter const): Deleted.
(WebCore::RadioNodeList::elementMatches const): Merged in the logic from
checkElementMatchesRadioNodeListFilter, since the separate function wasn't helpful.
- html/RadioNodeList.h: Removed unneeded includes. Moved the create function out
of the header. Removed unneeded override of the item function to tighten the
return type; not used in WebCore and not helpful for bindings. Made more private.
- style/StyleInvalidator.cpp:
(WebCore::Style::Invalidator::invalidateStyleForDescendants): Use null checking
style for the loop rather than comparing with end.
(WebCore::Style::Invalidator::invalidateStyleWithMatchElement): Remove an unneeded
local variable and braces.
- svg/SVGUseElement.cpp:
(WebCore::removeDisallowedElementsFromSubtree): Use null checking style rather than
comparing with end.
(WebCore::SVGUseElement::expandUseElementsInShadowTree const): Ditto. Also use
dropAssertions rather than assigning to end with a comment saying it drops assertions.
(WebCore::SVGUseElement::expandSymbolElementsInShadowTree const): Ditto.
- 11:16 PM Changeset in webkit [257191] by
-
- 13 edits in trunk
Fix some include mistakes and make some coding style tweaks to WebKit and WebKitTestRunner
https://bugs.webkit.org/show_bug.cgi?id=208099
Reviewed by Antti Koivisto.
Source/WebKit:
- WebProcess/FullScreen/WebFullScreenManager.cpp: Removed some unneeded includes.
- WebProcess/WebCoreSupport/WebChromeClient.cpp: Removed some unneeded includes.
(WebKit::WebChromeClient::createDataListSuggestionPicker): Pass references.
- WebProcess/WebCoreSupport/WebDataListSuggestionPicker.cpp:
(WebKit::WebDataListSuggestionPicker::WebDataListSuggestionPicker): Take references
instead of pointers, since they must both be non-null.
(WebKit::WebDataListSuggestionPicker::handleKeydownWithIdentifier): Updated
to use reference.
(WebKit::WebDataListSuggestionPicker::didSelectOption): Ditto.
(WebKit::WebDataListSuggestionPicker::didCloseSuggestions): Ditto.
(WebKit::WebDataListSuggestionPicker::close): Ditto.
(WebKit::WebDataListSuggestionPicker::displayWithActivationType): Ditto.
- WebProcess/WebCoreSupport/WebDataListSuggestionPicker.h: Marked the class
final, made more functions private, use references instead of pointers,
renamed m_dataListSuggestionsClient to m_client since there is only one
client we are dealing with in this class.
- WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::setActiveDataListSuggestionPicker): Take reference.
- WebProcess/WebPage/WebPage.h: Updated for the above.
Source/WebKitLegacy/mac:
- DOM/DOMDocument.mm: Removed unneeded includes and re-sorted.
- DOM/DOMDocumentFragment.mm: Ditto.
- DOM/DOMHTMLFieldSetElement.mm: Ditto.
Tools:
- WebKitTestRunner/InjectedBundle/mac/AccessibilityNotificationHandler.mm:
Sorted includes the traditional way. Added an include of AccessibilityCommonMac.h
so we can use the -[NSString createJSStringRef] method.
(-[NSString createJSStringRef]): Deleted. This is a duplicate of the method
defined in AccessibilityCommonMac.mm, and was causing a linker warning.
- 11:15 PM Changeset in webkit [257190] by
-
- 4 edits4 adds in trunk
Put more of the datalist element implementation inside ENABLE(DATALIST_ELEMENT)
https://bugs.webkit.org/show_bug.cgi?id=208098
Reviewed by Antti Koivisto.
Source/WebCore:
- html/HTMLFormControlElement.cpp:
(WebCore::HTMLFormControlElement::computeWillValidate const): Use
ancestorsOfType instead of a loop. Since this involves using the class
HTMLDataListElement, it's only implemented when ENABLE(DATALIST_ELEMENT)
is true. The old code would always do this validation for elements with
the datalist tag even if the element is not implemented, so this changes
behavior and affects some test results.
LayoutTests:
- platform/mac-wk1/TestExpectations: Removed some lines for tests that no longer
exist at the paths mentioned.
- platform/mac-wk1/fast/forms/form-pseudo-valid-style-expected.txt: Added.
- platform/mac-wk1/imported/w3c/web-platform-tests/html/semantics/forms/constraints/form-validation-willValidate-expected.txt: Added.
- platform/win/fast/forms/form-pseudo-valid-style-expected.txt: Added.
Expect failure on the parts of these tests that are specific to datalist, since
datalist is not enabled in these configurations (mac-wk1) and (win). Before now,
the code wasn't properly conditionalized and some of the datalist behavior would
be active even when the feature was not enabled. Best longer term solution is to
turn this feature on for more platforms, perhaps all of them. For now, landed new
expected results for cases that EWS indicated; more may be necessary if there are
more platforms where this feature is not enabled.
- 9:45 PM Changeset in webkit [257189] by
-
- 20 edits3 deletes in trunk/Source
Stop using QTKit for rendering WK1 video fullscreen controls
https://bugs.webkit.org/show_bug.cgi?id=207795
<rdar://problem/48894915>
Reviewed by Jon Lee.
Source/WebCore:
Drive-by fixes:
- Don't set the video layer to not-visible when in video fullscreen mode.
- Export previously un-exported methods.
- Make some ios-only classes available on mac.
- Add a couple previously unimplemented properties to WebAVPlayerController needed by AVKit.
- WebCoreFullscreenWindow doesn't depend on FULLSCREEN_API.
- WebCore.xcodeproj/project.pbxproj:
- html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::visibilityStateChanged):
- html/HTMLMediaElement.h:
(WebCore::HTMLMediaElement::setVideoFullscreenLayer):
- platform/ios/PlaybackSessionInterfaceAVKit.h:
- platform/ios/PlaybackSessionInterfaceAVKit.mm:
(WebCore::PlaybackSessionInterfaceAVKit::externalPlaybackChanged):
- platform/ios/WebAVPlayerController.h:
- platform/ios/WebAVPlayerController.mm:
(-[WebAVPlayerController canSeekFrameBackward]):
(-[WebAVPlayerController canSeekFrameForward]):
- platform/mac/WebCoreFullScreenWindow.h:
- platform/mac/WebCoreFullScreenWindow.mm:
Source/WebCore/PAL:
- PAL.xcodeproj/project.pbxproj:
- pal/spi/cocoa/AVKitSPI.h:
- pal/spi/mac/NSWindowSPI.h:
- pal/spi/mac/QTKitSPI.h: Removed.
Source/WebKit:
Use NSWindowSPI.h rather than declaring SPI in the source file.
- UIProcess/mac/WKFullScreenWindowController.mm:
Source/WebKitLegacy/mac:
Switch to using AVPlayerView instead of QTHUD to render our fullscreen controls.
In addition, switch to a modern NSWindow fullscreen API, with custom, smooth animations which
move the fullscreen window to a separate space. This requires subclassing AVPlayerView so that
fullscreen toggling will signal to the controller, so that our fullscreen button and the inline
version of same don't get out of sync. Because AVPlayerView requires an AVPlayer in order to
display the video layer, and we won't necessarily have an AVPlayer for MSE-backed videos, instead
install a custom overlay view inside the AVPlayerView in which to host the fullscreen video layer.
- WebView/WebVideoFullscreenController.h:
- WebView/WebVideoFullscreenController.mm:
(-[WebOverlayLayer layoutSublayers]):
(WebAVPlayerView_delegate):
(WebAVPlayerView_setDelegate):
(WebAVPlayerView_isFullScreen):
(WebAVPlayerView_enterFullScreen):
(WebAVPlayerView_exitFullScreen):
(allocWebAVPlayerViewInstance):
(-[WebVideoFullscreenController init]):
(-[WebVideoFullscreenController dealloc]):
(-[WebVideoFullscreenController fullscreenWindow]):
(-[WebVideoFullscreenController windowDidLoad]):
(-[WebVideoFullscreenController setVideoElement:]):
(-[WebVideoFullscreenController enterFullscreen:]):
(-[WebVideoFullscreenController exitFullscreen]):
(-[WebVideoFullscreenController applicationDidResignActive:]):
(-[WebVideoFullscreenController _requestExit]):
(-[WebVideoFullscreenController _requestEnter]):
(-[WebVideoFullscreenController cancelOperation:]):
(-[WebVideoFullscreenController playerViewIsFullScreen:]):
(-[WebVideoFullscreenController playerViewRequestEnterFullscreen:]):
(-[WebVideoFullscreenController playerViewRequestExitFullscreen:]):
(-[WebVideoFullscreenController customWindowsToEnterFullScreenForWindow:]):
(-[WebVideoFullscreenController window:startCustomAnimationToEnterFullScreenWithDuration:]):
(-[WebVideoFullscreenController customWindowsToExitFullScreenForWindow:]):
(-[WebVideoFullscreenController window:startCustomAnimationToExitFullScreenWithDuration:]):
(-[WebVideoFullscreenController windowDidEnterFullScreen:]):
(-[WebVideoFullscreenController windowWillExitFullScreen:]):
(-[WebVideoFullscreenController windowDidExitFullScreen:]):
(-[WebVideoFullscreenController clearFadeAnimation]): Deleted.
(-[WebVideoFullscreenController windowDidExitFullscreen]): Deleted.
(-[WebVideoFullscreenController windowDidEnterFullscreen]): Deleted.
(frameExpandedToRatioOfFrame): Deleted.
(createBackgroundFullscreenWindow): Deleted.
(-[WebVideoFullscreenController setupFadeAnimationIfNeededAndFadeIn:]): Deleted.
(-[WebVideoFullscreenController applicationDidChangeScreenParameters:]): Deleted.
(-[WebVideoFullscreenController updateMenuAndDockForFullscreen]): Deleted.
(-[WebVideoFullscreenController requestExitFullscreenWithAnimation:]): Deleted.
(-[WebVideoFullscreenController requestExitFullscreen]): Deleted.
(-[WebVideoFullscreenController fadeHUDIn]): Deleted.
(-[WebVideoFullscreenController observeValueForKeyPath:ofObject:change:context:]): Deleted.
(-[WebVideoFullscreenController rateChanged:]): Deleted.
(-[WebVideoFullscreenWindow initWithContentRect:styleMask:backing:defer:]): Deleted.
(-[WebVideoFullscreenWindow dealloc]): Deleted.
(-[WebVideoFullscreenWindow resignFirstResponder]): Deleted.
(-[WebVideoFullscreenWindow canBecomeKeyWindow]): Deleted.
(-[WebVideoFullscreenWindow mouseDown:]): Deleted.
(-[WebVideoFullscreenWindow cancelOperation:]): Deleted.
(-[WebVideoFullscreenWindow animatedResizeDidEnd]): Deleted.
(-[WebVideoFullscreenWindow animateFromRect:toRect:withSubAnimation:controllerAction:]): Deleted.
(-[WebVideoFullscreenWindow animationDidEnd:]): Deleted.
(-[WebVideoFullscreenWindow mouseMoved:]): Deleted.
- WebView/WebVideoFullscreenHUDWindowController.h: Removed.
- WebView/WebVideoFullscreenHUDWindowController.mm: Removed.
- 8:56 PM Changeset in webkit [257188] by
-
- 43 edits in trunk/Source
Use DOM element iterators more, and more consistently
https://bugs.webkit.org/show_bug.cgi?id=208097
Reviewed by Antti Koivisto.
Source/WebCore:
- Added uses of element iterators in many places that had hand-written loops.
- Eliminated most uses of elementAncestors, elementChildren, elementDescendants, and elementLineage functions and use ancestorsOfType<Element>, childrenOfType<Element>, descendantsOfType<Element> and lineageOfType<Element> instead. In particular, descendantsOfType<Element> uses a better traversal algorithm than elementDescendants does.
- Unrelated: Omit template arguments in various cases where the C++ language lets us just give the name of the class template without repeating the arguments.
- Unrelated: Remove some uses of the inefficient Node::nodeType function.
- accessibility/AccessibilityNodeObject.cpp:
(WebCore::AccessibilityNodeObject::mouseButtonListener const): Use
lineageOfType instead of elementLineage.
- accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest const):
Use ancestorsOfType instead of a handwritten loop.
- dom/AllDescendantsCollection.h:
(WebCore::AllDescendantsCollection::AllDescendantsCollection): Removed
class template arguments.
- dom/ClassCollection.h:
(WebCore::ClassCollection::ClassCollection): Ditto.
- dom/DocumentFragment.cpp:
(WebCore::DocumentFragment::getElementById const): Use
descendantsOfType insteadof elementDescendants.
- dom/Element.cpp:
(WebCore::Element::computeInheritedLanguage const): Use lineageOfType
instead of a handrwitten loop.
- dom/SelectorQuery.cpp:
(WebCore::SelectorDataList::closest const): Use lineageOfType instead of an
explicit loop.
(WebCore::elementsForLocalName): Use descendantsOfType instead of elementDescendants.
(WebCore::anyElement): Ditto.
(WebCore::SelectorDataList::executeSingleTagNameSelectorData const): Ditto.
(WebCore::SelectorDataList::executeSingleClassNameSelectorData const): Ditto.
(WebCore::SelectorDataList::executeSingleSelectorData const): Ditto.
(WebCore::SelectorDataList::executeSingleMultiSelectorData const): Ditto.
(WebCore::SelectorDataList::executeCompiledSimpleSelectorChecker const): Ditto.
(WebCore::SelectorDataList::executeCompiledSelectorCheckerWithCheckingContext const): Ditto.
(WebCore::SelectorDataList::executeCompiledSingleMultiSelectorData const): Ditto.
- dom/TagCollection.cpp:
(WebCore::TagCollectionNS::TagCollectionNS): Removed class template arguments.
(WebCore::TagCollection::TagCollection): Ditto.
(WebCore::HTMLTagCollection::HTMLTagCollection): Ditto.
- editing/Editor.cpp:
(WebCore::Editor::applyEditingStyleToBodyElement const): Use the function
descendantsOfType<HTMLBodyElement> instead of getElementByTagName(bodyTag).
Also merged applyEditingStyleToElement in here.
(WebCore::Editor::applyEditingStyleToElement const): Deleted.
- editing/Editor.h: Deleted applyEditingStyleToElement.
- editing/FrameSelection.cpp:
(WebCore::scanForForm): Cleaned up descendantsOfType loop so there's no
explicit use of end. Also changed if nesting a little bit.
- editing/TextManipulationController.cpp:
(WebCore::ExclusionRuleMatcher::isExcluded): Use lineageOfType instead of
elementLineage.
- html/HTMLAllCollection.h: Removed class template arguments.
- html/HTMLElement.cpp:
(WebCore::elementAffectsDirectionality): Refactored so we get a more efficient
implementation when the type of the element is known.
(WebCore::HTMLElement::adjustDirectionalityIfNeededAfterChildAttributeChanged):
Use lineageOfType instead of elementLineage.
- html/HTMLElement.h: Removed some uneeeded forward declarations.
- html/HTMLEmbedElement.cpp:
(WebCore::findWidgetRenderer): Use ancestorsOfType instead of a loop.
- html/HTMLFormControlElement.cpp:
(WebCore::HTMLFormControlElement::enclosingFormControlElement): Deleted.
- html/HTMLFormControlElement.h: Deleted unused enclosingFormControlElement.
- html/HTMLFormControlsCollection.cpp:
(WebCore::HTMLFormControlsCollection::HTMLFormControlsCollection): Removed
class template arguments.
(WebCore::HTMLFormControlsCollection::ownerNode const): Ditto.
(WebCore::HTMLFormControlsCollection::invalidateCacheForDocument): Ditto.
- html/HTMLOptGroupElement.cpp:
(WebCore::HTMLOptGroupElement::ownerSelectElement const): Use ancestorsOfType
instead of a hand-written loop.
- html/HTMLOptionElement.cpp:
(WebCore::HTMLOptionElement::parseAttribute): Use ancestorsOfType instead of
calling ownerDataListElement.
(WebCore::HTMLOptionElement::childrenChanged): Ditto.
(WebCore::HTMLOptionElement::ownerDataListElement const): Deleted. Since the
same option element can be used by multiple nested data list elements, the
concept of a single "owner" data list element isn't correct.
(WebCore::HTMLOptionElement::ownerSelectElement const): Use ancestorsOfType
instead of a hand-written loop.
- html/HTMLOptionElement.h: Deleted ownerDataListElement.
- html/HTMLOptionsCollection.cpp:
(WebCore::HTMLOptionsCollection::HTMLOptionsCollection): Removed class
template arguments.
- html/HTMLTableCellElement.cpp:
(WebCore::HTMLTableCellElement::additionalPresentationAttributeStyle const):
Use auto since findParentTable now returns a const table pointer.
- html/HTMLTableColElement.cpp:
(WebCore::HTMLTableColElement::additionalPresentationAttributeStyle const):
Ditto.
- html/HTMLTableElement.cpp:
(WebCore::HTMLTableElement::createSharedCellStyle): Made const.
(WebCore::HTMLTableElement::additionalCellStyle): Ditto.
(WebCore::HTMLTableElement::additionalGroupStyle): Ditto.
- html/HTMLTableElement.h: Made the functions const, and m_sharedCellStyle
mutable.
- html/HTMLTablePartElement.cpp:
(WebCore::HTMLTablePartElement::findParentTable const): Use ancestorsOfType
instead of a hand-written loop. Also revised return type to be const-consistent.
- html/HTMLTablePartElement.h: Updated return type.
- html/HTMLTableRowsCollection.cpp:
(WebCore::HTMLTableRowsCollection::HTMLTableRowsCollection): Removed class
template arguments.
- html/HTMLTextFormControlElement.cpp:
(WebCore::parentHTMLElement): Deleted.
(WebCore::HTMLTextFormControlElement::directionForFormData const): Use
lineageOfType rather than a hand-written loop. Also got rid of the multiple
strings in return paths since the function always returns one of two strings.
- inspector/InspectorAuditAccessibilityObject.cpp:
(WebCore::InspectorAuditAccessibilityObject::getElementsByComputedRole):
Use descendantsOfType instead of elementDescendants.
- inspector/agents/InspectorCSSAgent.cpp:
(WebCore::InspectorCSSAgent::getMatchedStylesForNode): Use ancestorsOfType
instead of a hand-written loop.
- inspector/agents/InspectorDOMAgent.cpp:
(WebCore::InspectorDOMAgent::inspect): Use isElementNode and isDocumentNode
instead of the much slower nodeType.
(WebCore::InspectorDOMAgent::highlightMousedOverNode): Use isTextNode instead of
the much slower nodeType.
- page/DragController.cpp:
(WebCore::containingLinkElement): Added. Uses lineageOfType instead of elementLineage.
(WebCore::DragController::doSystemDrag): Updated for the above.
- rendering/svg/SVGRenderSupport.cpp:
(WebCore::SVGRenderSupport::updateMaskedAncestorShouldIsolateBlending):
Use ancestorsOfType instead of a hand-written loop.
- svg/SVGElement.h: Make computedStyle public so we can use it even after downcasting
to SVGElement or a class derived from it. This arises in the revised version of
SVGRenderSupport::updateMaskedAncestorShouldIsolateBlending, which will now be able
to compile a non-virtual call to the function as a bonus.
- xml/parser/XMLDocumentParser.cpp:
(WebCore::findXMLParsingNamespaces): Factored this function out from
parseDocumentFragment. Use lineageOfType instead of elementLineage. Also add a null
check that seems to have been needed before.
(WebCore::XMLDocumentParser::parseDocumentFragment): Use findXMLParsingNamespaces.
Source/WebKit:
- WebProcess/Automation/WebAutomationSessionProxy.cpp:
(WebKit::containerElementForElement): Use ancestorsOfType to find the
HTMLDataListElement rather than an ownerDataListElement function.
While this behavior is correct as specified, the idea of an "owner"
data list element doesn't make sense since technically the same option
can be used for multiple nested data lists.
- WebProcess/WebPage/WebFrame.cpp:
(WebKit::WebFrame::containsAnyFormElements const): Use childrenOfType
instead of NodeTraversal.
(WebKit::WebFrame::containsAnyFormControls const): Ditto.
- WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::containingLinkAnchorElement): Renamed to add the word "anchor"
since this won't return link elements that aren't HTMLAnchorElement
instances. Use lineageOfType<HTMLAnchorElement> instead of elementLineage
with a separate type check.
(WebKit::elementPositionInformation): Updated for new name.
(WebKit::WebPage::performActionOnElement): Ditto.
- 6:30 PM Changeset in webkit [257187] by
-
- 10 edits in trunk
fast/forms/ios/force-gregorian-calendar-for-credit-card-expiry.html is failing in iOS 13.4 beta
https://bugs.webkit.org/show_bug.cgi?id=208096
<rdar://problem/59632008>
Reviewed by Alexey Proskuryakov.
Tools:
In the iOS 13.4 beta, the fix for <rdar://problem/56422337> changed -[UIDatePicker setCalendar:], such that
if the new calendar locale matches that of the current calendar's locale (and several other properties of the
new NSCalendar are also unchanged), then the UIDatePicker's calendar will also avoid changing.
In our layout tests, the mechanism we use to simulate the user changing their preferred calendar is no longer
compatible with the above change since the swizzled NSCalendar instance does not have a locale set, so it will
default to the same locale as the one used in the original NSCalendar. This means the call to -setCalendar: ends
up being a no-op, so the test fails to override the simulated Japanese calendar type with a Gregorian calendar
in the credit card expiry field.
To fix this, additionally specify a calendar locale identifier when generating the mock NSCalendar.
- TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl:
- TestRunnerShared/UIScriptContext/UIScriptController.h:
(WTR::UIScriptController::setDefaultCalendarType):
- WebKitTestRunner/TestController.h:
Change m_overriddenCalendarIdentifier to m_overriddenCalendarAndLocaleIdentifiers, a pair of calendar
identifier and calendar locale identifier.
- WebKitTestRunner/cocoa/TestControllerCocoa.mm:
(WTR::swizzledCalendar):
(WTR::TestController::overriddenCalendarIdentifier const):
(WTR::TestController::overriddenCalendarLocaleIdentifier const):
Clean these up by returning the
NSString *instead of making anotherRetainPtr.
(WTR::TestController::setDefaultCalendarType):
Plumb the new calendar's locale identifier through this method.
(WTR::TestController::cocoaResetStateToConsistentValues):
(WTR::TestController::getOverriddenCalendarIdentifier const): Deleted.
- WebKitTestRunner/cocoa/UIScriptControllerCocoa.h:
- WebKitTestRunner/cocoa/UIScriptControllerCocoa.mm:
(WTR::UIScriptControllerCocoa::setDefaultCalendarType):
LayoutTests:
Adjust the layout test to also set the mock calendar's locale.
- fast/forms/ios/force-gregorian-calendar-for-credit-card-expiry.html:
- resources/ui-helper.js:
(window.UIHelper.setDefaultCalendarType):
- 4:08 PM Changeset in webkit [257186] by
-
- 8 edits in trunk/Source/WebCore
Some small improvements to DOM bindings for HTML collections
https://bugs.webkit.org/show_bug.cgi?id=208092
Reviewed by Antti Koivisto.
- WebCore.xcodeproj/project.pbxproj: Added RadioNodeList.idl.
- html/HTMLAllCollection.idl: Specify [RequiresExistingAtomString] on the
argument to namedItem, and [AtomString] for the argument to item.
- html/HTMLCollection.idl: Ditto.
- html/HTMLFormControlsCollection.idl: Ditto.
- html/HTMLOptionsCollection.idl: Ditto.
- html/HTMLSelectElement.idl: Ditto.
- html/RadioNodeList.idl: Removed unneeded getter; the inherited one from NodeList
works correctly, and this isn't more efficient because of a more specific type.
- 4:27 AM WebKitGTK/2.26.x edited by
- (diff)
Feb 21, 2020:
- 7:43 PM Changeset in webkit [257185] by
-
- 49 edits5 adds in trunk
App-bound domains should have separate Network Sessions
https://bugs.webkit.org/show_bug.cgi?id=208026
<rdar://problem/59434006>
Reviewed by Brent Fulgham.
Source/WebKit:
Tests: http/tests/in-app-browser-privacy/app-bound-domain.html
http/tests/in-app-browser-privacy/switch-session-on-navigation-to-app-bound-domain.html
Supports network session switching for navigations to app-bound
domains. This requires updating the WebPage when a navigation occurs
to check whether it is to an app-bound destination. In case of a
process swap, this has to be done both in PolicyDecisionSender and
in the ProvisionalPageProxy::loadData and ProvisionalPageProxy::loadRequest
functions.
This patch also must send the In-App Browser privacy flag to the
Network process.
- NetworkProcess/NetworkDataTask.cpp:
(WebKit::NetworkDataTask::create):
- NetworkProcess/NetworkLoadParameters.h:
- NetworkProcess/NetworkResourceLoadParameters.cpp:
(WebKit::NetworkResourceLoadParameters::encode const):
(WebKit::NetworkResourceLoadParameters::decode):
- NetworkProcess/NetworkResourceLoadParameters.h:
- NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::NetworkResourceLoader::startNetworkLoad):
- NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
- NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
(WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
Passes the isNavigatingToAppBoundDomain flag to the NetworkSession.
- NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::hasAppBoundSession const):
(WebKit::NetworkProcess::setInAppBrowserPrivacyEnabled):
- NetworkProcess/NetworkProcess.h:
- NetworkProcess/NetworkProcess.messages.in:
- NetworkProcess/NetworkSession.h:
(WebKit::NetworkSession::hasAppBoundSession const):
(WebKit::NetworkSession::setInAppBrowserPrivacyEnabled):
- UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
(WKWebsiteDataStoreHasAppBoundSession):
(WKWebsiteDataStoreSetInAppBrowserPrivacyEnabled):
- UIProcess/API/C/WKWebsiteDataStoreRef.h:
- UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
(-[WKWebsiteDataStore _getWebViewCategoryFor:completionHandler:]):
- UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:
- UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::hasAppBoundSession):
(WebKit::NetworkProcessProxy::setInAppBrowserPrivacyEnabled):
- UIProcess/Network/NetworkProcessProxy.h:
- UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::hasAppBoundSession const):
(WebKit::WebsiteDataStore::setInAppBrowserPrivacyEnabled):
- UIProcess/WebsiteData/WebsiteDataStore.h:
A large portion of this patch is three functions for testing, one sets
the in-app browser privacy flag for the test case, one checks for an app-bound session, and one
checks to make sure the category was correctly set to app-bound domain.
- UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
(WebKit::WebsiteDataStore::parameters):
- NetworkProcess/NetworkSessionCreationParameters.cpp:
(WebKit::NetworkSessionCreationParameters::encode const):
(WebKit::NetworkSessionCreationParameters::decode):
- NetworkProcess/NetworkSessionCreationParameters.h:
Passes the In-app browser privacy flag value from NSUserDefaults to the network session.
- NetworkProcess/cocoa/NetworkSessionCocoa.h:
- NetworkProcess/cocoa/NetworkSessionCocoa.mm:
(WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
(WebKit::NetworkSessionCocoa::sessionWrapperForTask):
(WebKit::NetworkSessionCocoa::appBoundSession):
(WebKit::NetworkSessionCocoa::hasAppBoundSession const):
(WebKit::NetworkSessionCocoa::invalidateAndCancel):
(WebKit::NetworkSessionCocoa::clearCredentials):
Creates a new session (or returns the existing app-bound session) if
the navigation is app-bound. This is the main change in this patch.
- Shared/LoadParameters.cpp:
(WebKit::LoadParameters::encode const):
(WebKit::LoadParameters::decode):
- Shared/LoadParameters.h:
- UIProcess/ProvisionalPageProxy.cpp:
(WebKit::ProvisionalPageProxy::loadData):
(WebKit::ProvisionalPageProxy::loadRequest):
(WebKit::ProvisionalPageProxy::decidePolicyForNavigationActionSync):
- UIProcess/ProvisionalPageProxy.h:
- UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::loadRequest):
(WebKit::WebPageProxy::loadRequestWithNavigationShared):
(WebKit::WebPageProxy::loadData):
(WebKit::WebPageProxy::loadDataWithNavigationShared):
- WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::loadRequest):
(WebKit::WebPage::loadDataImpl):
(WebKit::WebPage::loadData):
(WebKit::WebPage::loadAlternateHTML):
In the case of a process swap, we must add the
isNavigatingToAppBoundDomain boolean in LoadParameters to ensure it gets sent to
the new WebPage via the ProvisionalPageProxy.
(WebKit::WebPageProxy::PolicyDecisionSender::send):
Fixes a capitalization error.
(WebKit::WebPageProxy::isAppBoundDomain):
(WebKit::WebPageProxy::setIsNavigatingToAppBoundDomain):
- UIProcess/WebPageProxy.h:
(WebKit::WebPageProxy::isNavigatingToAppBoundDomain):
These functions determine if the category is app-bound and update the
isNavigatingToAppBoundDomain boolean accordingly.
- Shared/PolicyDecision.h:
(WebKit::PolicyDecision::encode const):
(WebKit::PolicyDecision::decode):
(WebKit::WebPageProxy::receivedPolicyDecision):
(WebKit::WebPageProxy::continueNavigationInNewProcess):
(WebKit::WebPageProxy::decidePolicyForNavigationActionAsyncShared):
(WebKit::WebPageProxy::decidePolicyForNavigationAction):
(WebKit::WebPageProxy::decidePolicyForNavigationActionSyncShared):
(WebKit::WebPageProxy::decidePolicyForNewWindowAction):
(WebKit::WebPageProxy::decidePolicyForResponseShared):
- WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::dispatchDecidePolicyForResponse):
(WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
For a non-process swap case, we can send the
isNavigatingToAppBoundDomain value in the
PolicyDecision struct.
- WebProcess/Network/WebLoaderStrategy.cpp:
(WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
Sends the isNavigatingToAppBoundDomain boolean to the NetworkProcess
with the NetworkResourceLoadParameters.
(WebKit::WebPage::didReceivePolicyDecision):
(WebKit::WebPage::setIsNavigatingToAppBoundDomain):
- WebProcess/WebPage/WebPage.h:
(WebKit::WebPage::isNavigatingToAppBoundDomain):
The boolean value for isNavigatingToAppBoundDomain is stored
in the webPage so WebLoaderStrategy can access it to send to the
NetworkProcess.
Tools:
This patch is mostly test infrastructure involving 3 functions.
One sets in-app browser privacy as enabled in the network process
manually for the test. One ensures that setting the WebView category
works properly, and the last one checks for an app-bound session for
an app-bound navigation.
- WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl:
- WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
(WTR::InjectedBundle::didReceiveMessageToPage):
- WebKitTestRunner/InjectedBundle/TestRunner.cpp:
(WTR::TestRunner::getWebViewCategory):
(WTR::TestRunner::callDidReceiveWebViewCategoryCallback):
(WTR::TestRunner::hasAppBoundSession):
(WTR::TestRunner::setInAppBrowserPrivacyEnabled):
(WTR::TestRunner::callDidSetInAppBrowserPrivacyEnabledCallback):
- WebKitTestRunner/InjectedBundle/TestRunner.h:
- WebKitTestRunner/TestController.cpp:
(WTR::TestController::ensureViewSupportsOptionsForTest):
Clearing the bundleID should happen right before setting a new one,
otherwise it clears the ID after it is set and returns a null ID.
(WTR::TestController::resetStateToConsistentValues):
(WTR::TestController::getWebViewCategory):
(WTR::InAppBrowserPrivacyCallbackContext::InAppBrowserPrivacyCallbackContext):
(WTR::inAppBrowserPrivacyBooleanResultCallback):
(WTR::inAppBrowserPrivacyVoidResultCallback):
(WTR::TestController::hasAppBoundSession):
(WTR::TestController::setInAppBrowserPrivacyEnabled):
- WebKitTestRunner/TestController.h:
- WebKitTestRunner/TestInvocation.cpp:
(WTR::TestInvocation::didReceiveMessageFromInjectedBundle):
(WTR::TestInvocation::didReceiveSynchronousMessageFromInjectedBundle):
(WTR::TestInvocation::didSetInAppBrowserPrivacyEnabled):
(WTR::TestInvocation::didReceivePrevalentDomains):
(WTR::TestInvocation::didReceiveWebViewCategory):
- WebKitTestRunner/TestInvocation.h:
- WebKitTestRunner/cocoa/TestControllerCocoa.mm:
(WTR::TestController::getWebViewCategory):
LayoutTests:
Added two tests. One to test the proper categorization of app-bound
navigation, and one to check that switching sessions occurs when
navigating to an app-bound domain.
Since these tests use ITP to set user interaction, they should only
be run on iOS and mac-wk2.
- TestExpectations:
- http/tests/in-app-browser-privacy/app-bound-domain-expected.txt: Added.
- http/tests/in-app-browser-privacy/app-bound-domain.html: Added.
- http/tests/in-app-browser-privacy/switch-session-on-navigation-to-app-bound-domain-expected.txt: Added.
- http/tests/in-app-browser-privacy/switch-session-on-navigation-to-app-bound-domain.html: Added.
- platform/ios/TestExpectations:
- platform/mac-wk2/TestExpectations:
- 5:05 PM Changeset in webkit [257184] by
-
- 1 copy in tags/Safari-610.1.4
Tag Safari-610.1.4.
- 5:00 PM Changeset in webkit [257183] by
-
- 1 copy in tags/Safari-609.1.20.111.2
Tag Safari-609.1.20.111.2.
- 4:40 PM Changeset in webkit [257182] by
-
- 2 edits in trunk/LayoutTests
[ iOS wk2 ] http/tests/workers/service/Client-properties-auxiliary.html is flaky timing out.
https://bugs.webkit.org/show_bug.cgi?id=208081
Unreviewed test gardening.
- platform/ios-wk2/TestExpectations:
- 4:16 PM Changeset in webkit [257181] by
-
- 2 edits in trunk/LayoutTests
[ Mac Debug ] legacy-animation-engine/animations/animation-welcome-safari.html is flaky failing.
https://bugs.webkit.org/show_bug.cgi?id=208077
Unreviewed test gardening.
- platform/mac/TestExpectations:
- 3:49 PM Changeset in webkit [257180] by
-
- 1 copy in tags/Safari-609.1.20.100.2
Tag Safari-609.1.20.100.2.
- 3:25 PM Changeset in webkit [257179] by
-
- 2 edits in branches/safari-609.1.20.100-branch/Source/WebKit
Cherry-pick r257013. rdar://problem/59614284
Crash in WebPageProxy::didStartProvisionalLoadForFrameShared
https://bugs.webkit.org/show_bug.cgi?id=207973
Reviewed by Chris Dumez.
Use RefPtr to store Frame*.
- UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared):
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@257013 268f45cc-cd09-0410-ab3c-d52691b4dbfc
- 3:13 PM Changeset in webkit [257178] by
-
- 1 edit in branches/safari-609.1.20.100-branch/Source/WebKitLegacy/mac/WebView/WebPreferences.mm
Apply patch. rdar://problem/59652987
- 3:05 PM Changeset in webkit [257177] by
-
- 1 copy in tags/Safari-609.1.20.0.3
Tag Safari-609.1.20.0.3.
- 3:00 PM Changeset in webkit [257176] by
-
- 8 edits in branches/safari-609.1.20.100-branch/Source
Versioning.
- 2:59 PM Changeset in webkit [257175] by
-
- 2 edits in branches/safari-609-branch/Source/WebKit
Apply patch. rdar://problem/59680475
- 2:59 PM Changeset in webkit [257174] by
-
- 23 edits3 adds in branches/safari-609-branch
Apply patch. rdar://problem/59654268
- 2:58 PM Changeset in webkit [257173] by
-
- 3 edits in branches/safari-609-branch/Source/JavaScriptCore
Cherry-pick r257134. rdar://problem/59676907
Make support for bytecode caching more robust against file corruption.
https://bugs.webkit.org/show_bug.cgi?id=207972
<rdar://problem/59260595>
Reviewed by Yusuke Suzuki.
If a bytecode cache file is corrupted, we currently will always crash every time
we try to read it (in perpetuity as long as the corrupted cache file continues to
exist on disk). To guard against this, we'll harden the bytecode caching mechanism
as follows:
- Modify the writeCache operation to always write the cache file in a transactional manner i.e. we'll first write to a .tmp file, and then rename the .tmp file to the cache file only if the entire file has been written in completeness.
This ensures that we won't get corrupted cache files due to interrupted writes.
- Modify the writeCache operation to also compute a SHA1 hash of the cache file and append the hash at end of the file. Modify the readCache operation to first authenticate the SHA1 hash before allowing the cache file to be used. If the hash does not match, the file is bad, and we'll just delete it.
This ensures that we won't be crashing while decoding a corrupted cache file.
Manually tested with the following scenarios and ensuring that the client recovers
with no crashes:
- no cache file on disk.
- a 0-sized cache file on a disk.
- a truncated cache file on disk.
- a corrupted cache file on disk.
- an uncorrupted cache file on disk.
Also added some static_asserts in CachedTypes.cpp to document some invariants that
the pre-existing code is dependent on.
- API/JSScript.mm: (-[JSScript readCache]): (-[JSScript writeCache:]):
- runtime/CachedTypes.cpp:
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@257134 268f45cc-cd09-0410-ab3c-d52691b4dbfc
- 2:58 PM Changeset in webkit [257172] by
-
- 2 edits in branches/safari-609-branch/Source/WebKit
Cherry-pick r257106. rdar://problem/59676866
Add fidelity.com to the desktop class quirks list
https://bugs.webkit.org/show_bug.cgi?id=208037
<rdar://problem/59480381>
Reviewed by Brent Fulgham.
No new tests. This patch just adds a domain name to a quirks function.
- UIProcess/ios/WebPageProxyIOS.mm: (WebKit::desktopClassBrowsingRecommendedForRequest):
fidelity.com and its subdomains now return false.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@257106 268f45cc-cd09-0410-ab3c-d52691b4dbfc
- 2:58 PM Changeset in webkit [257171] by
-
- 2 edits in branches/safari-609-branch/Source/WebKit
Cherry-pick r257103. rdar://problem/59676889
WebIDBServer resume should return early if suspend does not happen
https://bugs.webkit.org/show_bug.cgi?id=208027
<rdar://problem/59617654>
Reviewed by Geoffrey Garen.
We should not try releasing a lock that is not held.
- NetworkProcess/IndexedDB/WebIDBServer.cpp: (WebKit::WebIDBServer::resume):
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@257103 268f45cc-cd09-0410-ab3c-d52691b4dbfc
- 2:58 PM Changeset in webkit [257170] by
-
- 5 edits in branches/safari-609-branch
Cherry-pick r257089. rdar://problem/59676923
NetworkCache should use 4KB threshold for mmap-ed files instead of 16KB
https://bugs.webkit.org/show_bug.cgi?id=207882
Reviewed by Alex Christensen.
Source/WebKit:
We found that a lot of Vectors in Membuster is holding resource content. This is because we have 16KB threshold for mmap-ed files.
If a file is smaller than 16KB, it is copied to Vector instead. But this is costly in terms of memory. If we use mmap-ed files,
it becomes named-pages instead of anonymous-pages. File-backed non-dirty named-pages have a lot of benefit.
- The application is offering a hint that pages are file-backed. This means that OS can purge them at any time since the content can be recovered from the disk. This is cheaper than swapping / compressing anonymous pages since just discarding works.
- The application is offering a hint that pages have spatial locality. Purging pages in one named-pages region is better compared to purging the same # of anonymous pages randomly. Anonymous pages are split by malloc implementation and access pattern of pages in one VA is random. On the other hand, named-pages are accessed together because it is file, and file typically has sequential locality. And recovery of named pages are also cheap compared to anonymous pages since OS can prefetch pages once access happens because of sequential locality of files. This tendency makes OS like purging named pages instead of anonymous pages. In WebKit use case, this works perfectly. CachedResource typically has decoded content. So typically WebProcess does not access SharedBuffer after the content is decoded.
This patch reduces the threshold from 16KB to page size (4KB in macOS, 16KB in iOS). This is pre-2015 behavior.
This offers 2.56% progression with 98% probability in Membuster.
- NetworkProcess/cache/NetworkCacheStorage.cpp: (WebKit::NetworkCache::maximumInlineBodySize): (WebKit::NetworkCache::estimateRecordsSize): (WebKit::NetworkCache::Storage::shouldStoreBodyAsBlob):
LayoutTests:
The test is assuming that 12KB file is served via non-mmap-file.
This assumption is flaky and broken by this change. For now, we pick smaller
file to meet this assumption.
- http/tests/inspector/network/resource-sizes-disk-cache-expected.txt:
- http/tests/inspector/network/resource-sizes-disk-cache.html:
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@257089 268f45cc-cd09-0410-ab3c-d52691b4dbfc
- 2:58 PM Changeset in webkit [257169] by
-
- 4 edits in branches/safari-609-branch
Cherry-pick r257077. rdar://problem/59676879
REGRESSION (r255677): Reloading tab with beforeunload prompt closes tab when asking to stay on page
https://bugs.webkit.org/show_bug.cgi?id=208015
<rdar://problem/59591630>
Reviewed by Geoffrey Garen.
Source/WebKit:
Make sure we only restart the tryClose timer after the beforeunload prompt if the timer was actually
active before the prompt (i.e. tryClose was actually called). On Reload, tryClose is not called
but beforeunload prompt may still happen.
- UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::runBeforeUnloadConfirmPanel):
Tools:
Add API test coverage.
- TestWebKitAPI/Tests/WebKitCocoa/ModalAlerts.mm: (TEST):
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@257077 268f45cc-cd09-0410-ab3c-d52691b4dbfc
- 2:58 PM Changeset in webkit [257168] by
-
- 10 edits in branches/safari-609-branch/Source/WebKit
Cherry-pick r256967. rdar://problem/59654609
Regression(r247567) HTTP Disk cache capacity is no longer set
https://bugs.webkit.org/show_bug.cgi?id=207959
<rdar://problem/59603972>
Reviewed by Alex Christensen.
NetworkProcess::initializeNetworkProcess() was setting the cache model, which
would iterate over all network sessions to update their network cache capacity.
The issue was that network sessions were not constructed yet at this point.
When the network session(s) would get created later on, they would construct
their NetworkCache and it would use the default capacity (i.e.
std::numeric_limits<size_t>::max()).
To make this safer, I have moved the capacity computation to the Cache::open()
method and now pass the capacity when constructing the network cache storage.
- NetworkProcess/NetworkProcess.cpp: (WebKit::NetworkProcess::initializeNetworkProcess): (WebKit::NetworkProcess::setCacheModelSynchronouslyForTesting): (WebKit::NetworkProcess::setCacheModel):
- NetworkProcess/NetworkProcess.h: (WebKit::NetworkProcess::cacheModel const):
- NetworkProcess/NetworkProcess.messages.in:
- NetworkProcess/cache/CacheStorageEngineCaches.cpp: (WebKit::CacheStorage::Caches::initialize):
- NetworkProcess/cache/NetworkCache.cpp: (WebKit::NetworkCache::computeCapacity): (WebKit::NetworkCache::Cache::open): (WebKit::NetworkCache::Cache::capacity const): (WebKit::NetworkCache::Cache::updateCapacity): (WebKit::NetworkCache::Cache::setCapacity): Deleted.
- NetworkProcess/cache/NetworkCache.h:
- NetworkProcess/cache/NetworkCacheStorage.cpp: (WebKit::NetworkCache::Storage::open): (WebKit::NetworkCache::Storage::Storage): (WebKit::NetworkCache::Storage::setCapacity):
- NetworkProcess/cache/NetworkCacheStorage.h:
- UIProcess/WebProcessPool.cpp: (WebKit::WebProcessPool::setCacheModel):
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@256967 268f45cc-cd09-0410-ab3c-d52691b4dbfc
- 2:58 PM Changeset in webkit [257167] by
-
- 6 edits in branches/safari-609-branch/Source/WebKit
Cherry-pick r256881. rdar://problem/59654577
Drop getSandboxExtensionsForBlobFiles() as it is dead code
https://bugs.webkit.org/show_bug.cgi?id=207909
<rdar://problem/59562180>
Reviewed by Per Arne Vollan.
- NetworkProcess/NetworkProcess.cpp:
- NetworkProcess/NetworkProcess.h:
- UIProcess/Network/NetworkProcessProxy.cpp:
- UIProcess/Network/NetworkProcessProxy.h:
- UIProcess/Network/NetworkProcessProxy.messages.in:
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@256881 268f45cc-cd09-0410-ab3c-d52691b4dbfc
- 2:58 PM Changeset in webkit [257166] by
-
- 3 edits in branches/safari-609-branch/Source/WebKit
Cherry-pick r256857. rdar://problem/59654279
NetworkDataTask should not expect its session wrapper to be always live
https://bugs.webkit.org/show_bug.cgi?id=207903
rdar://problem/59291486
Reviewed by Alex Christensen.
NetworkDataTaskCocoa should take a weak pointer to its session wrapper.
If the session wrapper is still valid, then we can remove the task from the session wrapper map.
We cannot guarantee session wrapper is valid since NetworkDataTask is ref counted.
- NetworkProcess/cocoa/NetworkDataTaskCocoa.h:
- NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa): (WebKit::NetworkDataTaskCocoa::~NetworkDataTaskCocoa):
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@256857 268f45cc-cd09-0410-ab3c-d52691b4dbfc
- 2:58 PM Changeset in webkit [257165] by
-
- 3 edits in branches/safari-609-branch/Source/WebCore
Cherry-pick r256856. rdar://problem/59654783
MediaSource.isTypeSupported() says "video/mp4;codecs=\"avc3.42C015\"" is not supported, but it is
https://bugs.webkit.org/show_bug.cgi?id=207622
Reviewed by Eric Carlson.
Revert the behavior change of MediaPlayerPrivateMediaSourceAVFObjC::supportsType() in r253952.
- platform/graphics/avfoundation/objc/AVAssetMIMETypeCache.mm: (WebCore::AVAssetMIMETypeCache::canDecodeExtendedType):
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@256856 268f45cc-cd09-0410-ab3c-d52691b4dbfc
- 2:58 PM Changeset in webkit [257164] by
-
- 1 edit in branches/safari-609-branch/Source/JavaScriptCore/runtime/JSCJSValue.h
Apply patch. rdar://problem/59654701
- 2:34 PM Changeset in webkit [257163] by
-
- 2 edits in branches/safari-609.1.20.111-branch/Source/WebKit
Apply patch. rdar://problem/59680470
- 2:25 PM Changeset in webkit [257162] by
-
- 3 edits in trunk/Source/WebKit
Remove telemetry from sandbox rules needed for basic WebKit logging
https://bugs.webkit.org/show_bug.cgi?id=208073
<rdar://problem/59658551>
Reviewed by Per Arne Vollan.
Now that we see the specific uses for the 'kern.osversion' sysctl and the need
for network-outbound connections for syslog, we can remove the telemetry.
- NetworkProcess/mac/com.apple.WebKit.NetworkProcess.sb.in:
- Resources/SandboxProfiles/ios/com.apple.WebKit.Networking.sb:
- 1:42 PM Changeset in webkit [257161] by
-
- 15 edits in trunk/Tools
Build DumpRenderTree and WebKitTestRunner for macCatalyst
https://bugs.webkit.org/show_bug.cgi?id=208068
<rdar://problem/59676596>
Reviewed by Tim Horton.
- DumpRenderTree/ios/TextInputControllerIOS.m: Import WebKitLegacy explicitly.
- DumpRenderTree/mac/Configurations/Base.xcconfig: Use cocoatouch instead of SDK.
- DumpRenderTree/mac/Configurations/DumpRenderTree.xcconfig: Ditto.
- DumpRenderTree/mac/Configurations/DumpRenderTreeApp.xcconfig: Ditto.
- DumpRenderTree/mac/Configurations/DumpRenderTreeLibrary.xcconfig: Ditto.
- DumpRenderTree/mac/Configurations/TestNetscapePlugIn.xcconfig: Ditto.
- DumpRenderTree/mac/EditingDelegate.mm: Import WebKitLegacy explicitly.
- DumpRenderTree/mac/EventSendingController.h: Ditto.
- DumpRenderTree/mac/ObjCPlugin.m: Ditto.
- DumpRenderTree/mac/ResourceLoadDelegate.mm: Ditto.
- Makefile: Add DumpRenderTree and WebKitTestRunner.
- WebKitTestRunner/Configurations/Base.xcconfig: Use cocoatouch instead of SDK.
- WebKitTestRunner/Configurations/InjectedBundle.xcconfig: Ditto.
- WebKitTestRunner/Configurations/WebKitTestRunner.xcconfig: Ditto.
- 1:39 PM Changeset in webkit [257160] by
-
- 2 edits in trunk/Source/WebCore
Remove an unused local variable after r256808
https://bugs.webkit.org/show_bug.cgi?id=208072
Reviewed by Chris Dumez.
Remove scriptsToExecuteSoon.
- dom/ScriptRunner.cpp:
(WebCore::ScriptRunner::timerFired):
- 1:36 PM Changeset in webkit [257159] by
-
- 2 edits in trunk/LayoutTests
[ iOS ] imported/w3c/web-platform-tests/IndexedDB/key-generators/reading-autoincrement-indexes-cursors.any.serviceworker.html is flaky failing.
https://bugs.webkit.org/show_bug.cgi?id=206934
Unreviewed test gardening.
- platform/ios-simulator-wk2/TestExpectations:
- 1:19 PM Changeset in webkit [257158] by
-
- 2 edits in trunk/Source/WebKit
REGRESSION (r255533) Null Deref of _sessionWrapper under [WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]
https://bugs.webkit.org/show_bug.cgi?id=208029
<rdar://problem/59404381>
Reviewed by Tim Horton.
r255533 started dereferencing _sessionWrapper without null check in didReceiveChallenge. All other delegates in this file null check
_sessionWrapper before using it because it is a weak pointer. Add a null check to avoid crashing.
- NetworkProcess/cocoa/NetworkSessionCocoa.mm:
(-[WKNetworkSessionDelegate sessionFromTask:]):
- 1:12 PM Changeset in webkit [257157] by
-
- 2 edits in trunk/Tools
[ews] Add build step to Validate ChangeLog for commit-queue
https://bugs.webkit.org/show_bug.cgi?id=208064
Reviewed by Jonathan Bedard.
- BuildSlaveSupport/ews-build/steps.py:
(ValidateChangeLogAndReviewer): Build step to validate ChangeLog.
(ValidateChangeLogAndReviewer.start):
(ValidateChangeLogAndReviewer.evaluateCommand): If the validation fails, comment on bug and mark patch as cq-.
(SetCommitQueueMinusFlagOnPatch.start): End the build (after marking the patch cq-) if build_finish_summary property is set.
- 12:26 PM Changeset in webkit [257156] by
-
- 12 edits3 copies in trunk
Create a new ImageBuffer type for drawing on a DisplayList
https://bugs.webkit.org/show_bug.cgi?id=207109
Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2020-02-21
Reviewed by Simon Fraser.
Source/WebCore:
DisplayList::ImageBuffer inherits ConcreteImageBuffer and DrawingContext.
The drawing context will be the context of DrawingContext. The operations
of ConcreteImageBuffer will have to ensure the recorded display-list is
replayed back before getting the pixels of the ImageBufferBackend.
- Sources.txt:
- WebCore.xcodeproj/project.pbxproj:
- html/HTMLCanvasElement.cpp:
(WebCore::HTMLCanvasElement::createContext2d):
(WebCore::HTMLCanvasElement::setUsesDisplayListDrawing):
(WebCore::HTMLCanvasElement::setTracksDisplayListReplay):
(WebCore::HTMLCanvasElement::displayListAsText const):
(WebCore::HTMLCanvasElement::replayDisplayListAsText const):
All the DisplayList operations will be routed to the DrawingContext of
the ImageBuffer.
(WebCore::HTMLCanvasElement::createImageBuffer const):
createImageBuffer() can decide the ImageBuffer type based on the settings
and the size of the canvas.
- html/HTMLCanvasElement.h:
- platform/graphics/ConcreteImageBuffer.h:
(WebCore::ConcreteImageBuffer::create):
The type of the ImageBuffer will be passed to this function such that
it can create instances of derived classes.
- platform/graphics/ImageBuffer.cpp:
(WebCore::ImageBuffer::create):
Create ImageBuffers which record the drawing commands to DisplayLists before
committing them to the back-ends.
- platform/graphics/ImageBuffer.h:
(WebCore::ImageBuffer::drawingContext):
(WebCore::ImageBuffer::flushDrawingContext):
Add virtual methods to support DisplayList in ImageBuffer.
- platform/graphics/PlatformImageBuffer.h:
- platform/graphics/RenderingMode.h:
Add DisplayList types to RenderingMode and define platform types for
DisplayList ImageBuffers.
- platform/graphics/displaylists/DisplayListDrawingContext.cpp: Added.
(WebCore::DisplayList::DrawingContext::DrawingContext):
(WebCore::DisplayList::DrawingContext::setTracksDisplayListReplay):
(WebCore::DisplayList::DrawingContext::replayDisplayList):
- platform/graphics/displaylists/DisplayListDrawingContext.h: Added.
(WebCore::DisplayList::DrawingContext::context const):
(WebCore::DisplayList::DrawingContext::displayList):
(WebCore::DisplayList::DrawingContext::displayList const):
(WebCore::DisplayList::DrawingContext::replayedDisplayList const):
DisplayList::DrawingContext holds a recording and an optional replaying
back DisplayLists. It also provides a recording GraphicsContext.
- platform/graphics/displaylists/DisplayListImageBuffer.h: Added.
(WebCore::DisplayList::ImageBuffer::create):
(WebCore::DisplayList::ImageBuffer::ImageBuffer):
(WebCore::DisplayList::ImageBuffer::~ImageBuffer):
Drawing commands will be recorded first because context() is overridden
to return the GraphicsContext of DrawingContext. These drawing commands
will be flushed before getting the pixels of the back-end because
flushDrawingContext() is overridden to replay back the recorded DisplayList
to the GraphicsContext of the back-end.
LayoutTests:
The extra commands are recorded by CanvasBase::setImageBuffer() which
used to issue these GraphicsContext commands directly to the backend.
With this patch, DisplayList::ImageBuffer does not allow access to the
backend context. So all the GraphicsContext commands has to be recorded.
- displaylists/canvas-display-list-expected.txt:
- 12:23 PM Changeset in webkit [257155] by
-
- 2 edits in trunk/Source/WebKit
Address post-review feedback in webkit.org/b/207352
https://bugs.webkit.org/show_bug.cgi?id=207352
Reviewed by Brian Weinstein.
Use m_mainFrame instead of going through Page, and also append the string "\n\n" instead of appending the
newline character twice.
- WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::getContentsAsString):
- 11:58 AM Changeset in webkit [257154] by
-
- 2 edits in trunk/LayoutTests
REGRESSION: (r256764?) [ Mac wk1 Release ] legacy-animation-engine/fast/animation/animation-mixed-transform-crash.html is flaky failing.
https://bugs.webkit.org/show_bug.cgi?id=208019
Unreviewed test gardening.
- platform/mac-wk1/TestExpectations:
- 11:42 AM Changeset in webkit [257153] by
-
- 2 edits in trunk/Source/WebKit
[Media in GPU process] Synchronize the properties of video layers in the GPU process with the hosting layer in the web process
https://bugs.webkit.org/show_bug.cgi?id=206132
Patch by Peng Liu <Peng Liu> on 2020-02-21
Reviewed by Eric Carlson.
A follow-up patch to fix Catalyst/watchOS/tvOS build failures related to unified build.
- WebProcess/GPU/media/cocoa/VideoLayerRemoteCocoa.h:
- 11:33 AM Changeset in webkit [257152] by
-
- 2 edits in trunk/LayoutTests
[ macOS wk2 ] webgpu/whlsl/nested-loop.html is flaky failing
https://bugs.webkit.org/show_bug.cgi?id=207117
Unreviewed test gardening.
- platform/mac-wk2/TestExpectations:
- 11:21 AM Changeset in webkit [257151] by
-
- 4 edits in trunk/Source/WebKit
[iOS] Issue extension of CoreMedia service to the WebContent process
https://bugs.webkit.org/show_bug.cgi?id=208066
<rdar://problem/35864528>
Reviewed by Geoffrey Garen.
This service should also be added to the sandbox of the GPU process.
No new tests, covered by existing tests.
- Resources/SandboxProfiles/ios/com.apple.WebKit.GPU.sb:
- Resources/SandboxProfiles/ios/com.apple.WebKit.WebContent.sb:
- UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::mediaRelatedMachServices):
- 11:03 AM Changeset in webkit [257150] by
-
- 11 edits in trunk/Source
[macOS] Large form controls are rendered at the wrong NSControlSize
https://bugs.webkit.org/show_bug.cgi?id=208043
<rdar://problem/59659134>
Reviewed by Tim Horton.
Source/WebCore:
When painting form controls that are larger than a certain threshold (for the most part, 21px), use
NSControlSizeLarge instead of NSControlSizeRegular. This makes us choose a more appropriate appearance when
painting native large form controls, as long as the system supports it. Note that not all the metrics for
NSControlSizeLarge form controls are finalized, as noted in the per-method comments below.
With this patch alone, there is no change in behavior yet; in the near future, these changes will be covered by
new platform-specific baselines.
- platform/PopupMenuStyle.h: Add a new PopupMenuSizeLarge that corresponds to a popup that has NSControlSizeLarge.
- platform/mac/ThemeMac.h: Add a helper to check (at runtime) whether the new large form control size is enabled.
- platform/mac/ThemeMac.mm:
(WebCore::controlSizeForFont): Add a new font size breakpoint, for which we use NSControlSizeLarge instead of
NSControlSizeRegular.
(WebCore::sizeFromNSControlSize):
(WebCore::sizeFromFont):
(WebCore::controlSizeFromPixelSize):
(WebCore::setControlSize):
(WebCore::checkboxSizes): Reflect the fact that checkboxes with NSControlSizeLarge are 16 by 16.
(WebCore::checkboxMargins): Just match NSControlSizeRegular margins for now. These seem incorrect already, even
for NSControlSizeRegular in macOS 10.15.
(WebCore::radioSizes): Reflect the fact that radio buttons with NSControlSizeLarge are 16 by 16, and
NSControlSizeRegular radio buttons are 14 by 14.
(WebCore::radioMargins): Just match NSControlSizeRegular margins for now. These seem incorrect already, even for
NSControlSizeRegular in macOS 10.15.
(WebCore::buttonSizes): Reflect the fact that buttons with NSControlSizeLarge are 28px tall.
(WebCore::buttonMargins): Just match NSControlSizeRegular margins for now, and add a FIXME about updating them.
(WebCore::setUpButtonCell):
(WebCore::stepperSizes): NSControlSizeLarge matches NSControlSizeRegular at the moment.
(WebCore::stepperControlSizeForFont): Add a new font size breakpoint for using NSControlSizeLarge.
- rendering/RenderThemeMac.mm:
(WebCore::RenderThemeMac::controlSizeForFont const):
(WebCore::RenderThemeMac::controlSizeForCell const):
(WebCore::RenderThemeMac::controlSizeForSystemFont const):
(WebCore::RenderThemeMac::popupButtonMargins const):
(WebCore::RenderThemeMac::popupButtonSizes const):
(WebCore::RenderThemeMac::popupButtonPadding const):
NSControlSizeLarge metrics for popup buttons cannot be determined yet.
(WebCore::RenderThemeMac::progressBarSizes const):
(WebCore::RenderThemeMac::progressBarMargins const):
(WebCore::RenderThemeMac::paintProgressBar):
NSControlSizeLarge matches NSControlSizeRegular at the moment.
(WebCore::menuListButtonSizes):
(WebCore::RenderThemeMac::popupMenuSize const):
(WebCore::RenderThemeMac::menuListSizes const):
(WebCore::RenderThemeMac::searchFieldSizes const):
(WebCore::RenderThemeMac::cancelButtonSizes const):
(WebCore::RenderThemeMac::resultsButtonSizes const):
Search field results and cancel buttons have the same size in NSControlSizeLarge as in NSControlSizeRegular.
Source/WebCore/PAL:
Import NSAppearance_Private.h in this SPI header. See WebCore ChangeLog for more details.
- pal/spi/mac/NSAppearanceSPI.h:
Source/WebKit:
See WebCore ChangeLog for more details.
- UIProcess/mac/WebPopupMenuProxyMac.mm:
(WebKit::WebPopupMenuProxyMac::showPopupMenu):
Source/WebKitLegacy/mac:
See WebCore ChangeLog for more details.
- WebCoreSupport/PopupMenuMac.mm:
(PopupMenuMac::show):
- 10:52 AM Changeset in webkit [257149] by
-
- 2 edits in trunk/LayoutTests
[ Mac wk1 Debug ] legacy-animation-engine/animations/animation-direction-normal.html is flaky failing.
https://bugs.webkit.org/show_bug.cgi?id=208065
Unreviewed test gardening.
- platform/mac-wk1/TestExpectations:
- 10:39 AM Changeset in webkit [257148] by
-
- 4 edits in trunk/Source/WebKit
Remove WebPageProxy::machSendRightCallback as it is dead code
https://bugs.webkit.org/show_bug.cgi?id=208057
<rdar://problem/59658805>
Reviewed by Geoffrey Garen.
- UIProcess/WebPageProxy.cpp:
- UIProcess/WebPageProxy.h:
- UIProcess/WebPageProxy.messages.in:
- 10:24 AM Changeset in webkit [257147] by
-
- 2 edits in trunk/Tools
[ews] Add build step to set cq- flag on bugzilla patch
https://bugs.webkit.org/show_bug.cgi?id=208021
Reviewed by Jonathan Bedard.
- BuildSlaveSupport/ews-build/steps.py:
(BugzillaMixin.set_cq_minus_flag_on_patch):
(SetCommitQueueMinusFlagOnPatch):
(SetCommitQueueMinusFlagOnPatch.start):
(SetCommitQueueMinusFlagOnPatch.getResultSummary):
- 10:23 AM Changeset in webkit [257146] by
-
- 2 edits in trunk/LayoutTests
[ Mac wk2 ] http/wpt/fetch/disable-speculative-for-reload.html is flaky failing.
https://bugs.webkit.org/show_bug.cgi?id=208062
Unreviewed test gardening.
- platform/mac-wk2/TestExpectations:
- 10:18 AM Changeset in webkit [257145] by
-
- 4 edits in trunk/Source/WebKit
Remove WebPasteBoardProxy::PasteboardCopy as it is dead code
https://bugs.webkit.org/show_bug.cgi?id=208058
<rdar://problem/59658727>
Reviewed by Geoffrey Garen.
- UIProcess/Cocoa/WebPasteboardProxyCocoa.mm:
- UIProcess/WebPasteboardProxy.h:
- UIProcess/WebPasteboardProxy.messages.in:
- 10:08 AM Changeset in webkit [257144] by
-
- 6 edits in trunk/Tools
Stub repositories fail to upload some results due to missing head svn revision
https://bugs.webkit.org/show_bug.cgi?id=207684
Reviewed by Jonathan Bedard.
- Scripts/webkitpy/common/host_mock.py: Added in call for creating stub repo checkout information for upload tests.
(MockHost.init):
- Scripts/webkitpy/layout_tests/models/test_run_results.py:
(summarize_results): Changed call to head_svn_revision to port.commits_for_upload() to bring
- Scripts/webkitpy/layout_tests/models/test_run_results_unittest.py:
(SummarizedResultsTest.setUp): Added in new required parameter for testing.
- Scripts/webkitpy/port/base.py:
(Port.commits_for_upload): Removed the forced movement up the systems tree that prevented us
from using mock SCMs and more
- Scripts/webkitpy/port/test.py: Added function to make the checkout_information.json for upload testing.
- 10:03 AM Changeset in webkit [257143] by
-
- 3 edits in trunk/Source/WebKitLegacy/mac
[iOS][Legacy WebKit] Expose SPI for Page::revealCurrentSelection()
https://bugs.webkit.org/show_bug.cgi?id=207960
<rdar://problem/59604163>
Reviewed by Wenson Hsieh.
Together with <https://bugs.webkit.org/show_bug.cgi?id=207955> this allows a client to reveal
the current selection when it's ready to do so.
- WebView/WebView.mm:
(-[WebView revealCurrentSelection]): Added.
- WebView/WebViewPrivate.h:
- 9:51 AM Changeset in webkit [257142] by
-
- 3 edits in trunk/Source/WTF
REGRESSION(r257072): MotionMark | Mac | -10%
https://bugs.webkit.org/show_bug.cgi?id=208054
<rdar://problem/59664582>
Reviewed by Geoffrey Garen.
With rAF and slow scripts, suspended functions may pile up in RunLoop because every cycle does a rendering update.
- wtf/RunLoop.cpp:
(WTF::RunLoop::performWork):
(WTF::RunLoop::suspendFunctionDispatchForCurrentCycle):
Don't suspend if there are already pending suspended functions.
- wtf/RunLoop.h:
- 9:47 AM Changeset in webkit [257141] by
-
- 2 edits in trunk/Tools
[JSCOnly] Add --verbose flag when running JavaScriptCore tests
https://bugs.webkit.org/show_bug.cgi?id=208051
Reviewed by Carlos Alberto Lopez Perez.
Verbose flag prints out each test name executed. Without this flag
stdout prints out one or two periods.
- BuildSlaveSupport/build.webkit.org-config/steps.py:
(RunJavaScriptCoreTests.start):
- 9:26 AM Changeset in webkit [257140] by
-
- 2 edits in trunk/LayoutTests
[ Mojave ] webaudio/audioparam-exponentialRampToValueAtTime.html is flaky crashing.
https://bugs.webkit.org/show_bug.cgi?id=208061
Unreviewed test gardening.
- platform/mac/TestExpectations:
- 9:22 AM Changeset in webkit [257139] by
-
- 4 edits in trunk
[WPE][GTK] googleapis.com is a public suffix, defeating isGoogle() check in UserAgentQuirks.cpp
https://bugs.webkit.org/show_bug.cgi?id=207984
Patch by Michael Catanzaro <Michael Catanzaro> on 2020-02-21
Reviewed by Daniel Bates.
Source/WebCore:
Fix the check for googleapis.com. Since it's now a public suffix, we can no longer check the
URL's base domain here. Instead, we can check endsWith().
I considered switching to endsWith() for all the checks in this file, to make our user agent
quirks robust to future changes in the public suffix list, but checking the base domain is
nicer and it seems unnecessary. We can continue to adjust our quirks in the future as
necessary.
The public suffix list:
https://github.com/publicsuffix/list/blob/7922d7c20e246552be418e8f72e577899fd30d99/public_suffix_list.dat#L11922
- platform/UserAgentQuirks.cpp:
(WebCore::isGoogle):
Tools:
- TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp:
(TestWebKitAPI::TEST):
- 9:21 AM Changeset in webkit [257138] by
-
- 9 edits2 adds in trunk
[Web Animations] Repeated animations on pseudo elements will fail to run after a while
https://bugs.webkit.org/show_bug.cgi?id=207993
Source/WebCore:
<rdar://problem/59428472>
Reviewed by Zalan Bujtas.
We failed to clear PseudoElement* from AnimationTimeline's various HashMaps on destruction,
causing animations to fail to run when those pointer addresses were reused.
Make DeclarativeAnimation::owningElement() be a WeakPtr<>.
Test: animations/many-pseudo-animations.html
- animation/AnimationTimeline.cpp:
(WebCore::AnimationTimeline::willDestoryRendererForElement):
(WebCore::AnimationTimeline::elementWasRemoved):
- animation/AnimationTimeline.h:
- animation/DeclarativeAnimation.cpp:
(WebCore::DeclarativeAnimation::DeclarativeAnimation):
(WebCore::DeclarativeAnimation::enqueueDOMEvent):
- animation/DeclarativeAnimation.h:
(WebCore::DeclarativeAnimation::owningElement const):
- dom/Element.cpp:
(WebCore::Element::removedFromAncestor):
- dom/PseudoElement.cpp:
(WebCore::PseudoElement::clearHostElement):
- rendering/updating/RenderTreeUpdater.cpp:
(WebCore::RenderTreeUpdater::tearDownRenderers):
LayoutTests:
Reviewed by Zalan Bujtas.
- animations/many-pseudo-animations-expected.txt: Added.
- animations/many-pseudo-animations.html: Added.
- 9:06 AM Changeset in webkit [257137] by
-
- 36 edits1 copy2 moves54 adds in trunk/LayoutTests
Update WPT tests for Intersection Observer
https://bugs.webkit.org/show_bug.cgi?id=208053
Patch by Frederic Wang <fwang@igalia.com> on 2020-02-21
Reviewed by Daniel Bates.
LayoutTests/imported/w3c:
- web-platform-tests/intersection-observer/bounding-box.html:
- web-platform-tests/intersection-observer/client-rect.html:
- web-platform-tests/intersection-observer/containing-block.html:
- web-platform-tests/intersection-observer/cross-origin-iframe.sub-expected.txt: Added.
- web-platform-tests/intersection-observer/cross-origin-iframe.sub.html: Renamed from LayoutTests/imported/w3c/web-platform-tests/intersection-observer/cross-origin-iframe.html.
- web-platform-tests/intersection-observer/disconnect.html:
- web-platform-tests/intersection-observer/display-none.html:
- web-platform-tests/intersection-observer/document-scrolling-element-root-expected.txt: Added.
- web-platform-tests/intersection-observer/document-scrolling-element-root.html: Added.
- web-platform-tests/intersection-observer/edge-inclusive-intersection.html:
- web-platform-tests/intersection-observer/empty-root-margin.html:
- web-platform-tests/intersection-observer/iframe-no-root-with-wrapping-scroller-expected.txt: Added.
- web-platform-tests/intersection-observer/iframe-no-root-with-wrapping-scroller.html: Copied from LayoutTests/imported/w3c/web-platform-tests/intersection-observer/iframe-no-root.html.
- web-platform-tests/intersection-observer/iframe-no-root.html:
- web-platform-tests/intersection-observer/initial-observation-with-threshold.html:
- web-platform-tests/intersection-observer/inline-client-rect.html:
- web-platform-tests/intersection-observer/isIntersecting-change-events.html:
- web-platform-tests/intersection-observer/isIntersecting-threshold-expected.txt: Added.
- web-platform-tests/intersection-observer/isIntersecting-threshold.html: Added.
- web-platform-tests/intersection-observer/multiple-targets.html:
- web-platform-tests/intersection-observer/multiple-thresholds.html:
- web-platform-tests/intersection-observer/nested-cross-origin-iframe.sub-expected.txt: Added.
- web-platform-tests/intersection-observer/nested-cross-origin-iframe.sub.html: Added.
- web-platform-tests/intersection-observer/observer-attributes.html:
- web-platform-tests/intersection-observer/observer-exceptions.html:
- web-platform-tests/intersection-observer/observer-in-iframe.html:
- web-platform-tests/intersection-observer/observer-without-js-reference.html:
- web-platform-tests/intersection-observer/remove-element.html:
- web-platform-tests/intersection-observer/resources/cross-origin-child-iframe.sub.html: Added.
- web-platform-tests/intersection-observer/resources/cross-origin-subframe.html:
- web-platform-tests/intersection-observer/resources/intersection-observer-test-utils.js:
(waitForNotification):
(waitForFrame):
(runTestCycle):
(checkJsonEntry):
- web-platform-tests/intersection-observer/resources/nested-cross-origin-child-iframe.sub.html: Added.
- web-platform-tests/intersection-observer/resources/nested-cross-origin-grand-child-iframe.html: Added.
- web-platform-tests/intersection-observer/resources/same-origin-grand-child-iframe.html: Added.
- web-platform-tests/intersection-observer/resources/scaled-target-subframe.html: Added.
- web-platform-tests/intersection-observer/resources/v2-subframe.html: Added.
- web-platform-tests/intersection-observer/resources/w3c-import.log:
- web-platform-tests/intersection-observer/root-margin-rounding-expected.txt: Added.
- web-platform-tests/intersection-observer/root-margin-rounding.html: Added.
- web-platform-tests/intersection-observer/root-margin.html:
- web-platform-tests/intersection-observer/rtl-clipped-root-expected.txt: Added.
- web-platform-tests/intersection-observer/rtl-clipped-root.html: Added.
- web-platform-tests/intersection-observer/same-document-no-root.html:
- web-platform-tests/intersection-observer/same-document-root.html:
- web-platform-tests/intersection-observer/same-document-zero-size-target.html:
- web-platform-tests/intersection-observer/same-origin-grand-child-iframe.sub-expected.txt: Added.
- web-platform-tests/intersection-observer/same-origin-grand-child-iframe.sub.html: Added.
- web-platform-tests/intersection-observer/shadow-content.html:
- web-platform-tests/intersection-observer/target-in-different-window.html:
- web-platform-tests/intersection-observer/text-target.html:
- web-platform-tests/intersection-observer/timestamp.html:
- web-platform-tests/intersection-observer/unclipped-root.html:
- web-platform-tests/intersection-observer/v2/animated-occlusion-expected.txt: Added.
- web-platform-tests/intersection-observer/v2/animated-occlusion.html: Added.
- web-platform-tests/intersection-observer/v2/blur-filter-expected.txt: Added.
- web-platform-tests/intersection-observer/v2/blur-filter.html: Added.
- web-platform-tests/intersection-observer/v2/box-shadow-expected.txt: Added.
- web-platform-tests/intersection-observer/v2/box-shadow.html: Added.
- web-platform-tests/intersection-observer/v2/cross-origin-effects.sub-expected.txt: Added.
- web-platform-tests/intersection-observer/v2/cross-origin-occlusion.sub-expected.txt: Added.
- web-platform-tests/intersection-observer/v2/delay-test-expected.txt: Added.
- web-platform-tests/intersection-observer/v2/delay-test.html: Added.
- web-platform-tests/intersection-observer/v2/drop-shadow-filter-vertical-rl-expected.txt: Added.
- web-platform-tests/intersection-observer/v2/drop-shadow-filter-vertical-rl.html: Added.
- web-platform-tests/intersection-observer/v2/iframe-target-expected.txt: Added.
- web-platform-tests/intersection-observer/v2/iframe-target.html: Added.
- web-platform-tests/intersection-observer/v2/inline-occlusion-expected.txt: Added.
- web-platform-tests/intersection-observer/v2/inline-occlusion.html: Added.
- web-platform-tests/intersection-observer/v2/position-relative-expected.txt: Added.
- web-platform-tests/intersection-observer/v2/position-relative.html: Added.
- web-platform-tests/intersection-observer/v2/scaled-target-expected.txt: Added.
- web-platform-tests/intersection-observer/v2/scaled-target.html: Added.
- web-platform-tests/intersection-observer/v2/simple-effects-expected.txt: Added.
- web-platform-tests/intersection-observer/v2/simple-effects.html: Added.
- web-platform-tests/intersection-observer/v2/simple-occlusion-expected.txt: Added.
- web-platform-tests/intersection-observer/v2/simple-occlusion-svg-foreign-object-expected.txt: Added.
- web-platform-tests/intersection-observer/v2/simple-occlusion-svg-foreign-object.html: Added.
- web-platform-tests/intersection-observer/v2/simple-occlusion.html: Added.
- web-platform-tests/intersection-observer/v2/text-editor-occlusion-expected.txt: Added.
- web-platform-tests/intersection-observer/v2/text-editor-occlusion.html: Added.
- web-platform-tests/intersection-observer/v2/text-shadow-expected.txt: Added.
- web-platform-tests/intersection-observer/v2/text-shadow.html: Added.
- web-platform-tests/intersection-observer/v2/w3c-import.log: Added.
- web-platform-tests/intersection-observer/w3c-import.log:
- web-platform-tests/intersection-observer/zero-area-element-hidden.html:
- web-platform-tests/intersection-observer/zero-area-element-visible.html:
- web-platform-tests/intersection-observer/v2/cross-origin-effects.sub.html: Added.
- web-platform-tests/intersection-observer/v2/cross-origin-occlusion.sub.html: Added.
LayoutTests:
Add iOS expectations and skip new tests timing out.
- TestExpectations:
- platform/ios/imported/w3c/web-platform-tests/intersection-observer/cross-origin-iframe.sub-expected.txt: Added.
- platform/ios/imported/w3c/web-platform-tests/intersection-observer/iframe-no-root-with-wrapping-scroller-expected.txt: Added.
- platform/ios/imported/w3c/web-platform-tests/intersection-observer/nested-cross-origin-iframe.sub-expected.txt: Remamed from platform/ios/imported/w3c/web-platform-tests/intersection-observer/nested-cross-origin-iframe.sub.txt.
- 8:43 AM Changeset in webkit [257136] by
-
- 2 edits in trunk/LayoutTests
[ Mac wk1 Debug ] legacy-animation-engine/compositing/transitions/add-remove-transition.html is flaky failing.
https://bugs.webkit.org/show_bug.cgi?id=208059
Unreviewed test gardening.
- platform/mac-wk1/TestExpectations:
- 8:27 AM Changeset in webkit [257135] by
-
- 2 edits in trunk/Source/WebKit
[iOS] Fix media related sandbox issues in the GPU process
https://bugs.webkit.org/show_bug.cgi?id=208033
Reviewed by Eric Carlson.
The mach lookup sandbox extension to 'com.apple.tccd' needs to be created with the method SandboxExtension::createHandleForMachLookup.
The file read-write sandbox extension to the media cache directory needs to be created with the parent folder of the actual cache folder,
since the media frameworks also seem to access files there.
No new tests, covered by existing tests.
- UIProcess/GPU/GPUProcessProxy.cpp:
(WebKit::GPUProcessProxy::singleton):
(WebKit::gpuProcessSessionParameters):
- 8:20 AM Changeset in webkit [257134] by
-
- 3 edits in trunk/Source/JavaScriptCore
Make support for bytecode caching more robust against file corruption.
https://bugs.webkit.org/show_bug.cgi?id=207972
<rdar://problem/59260595>
Reviewed by Yusuke Suzuki.
If a bytecode cache file is corrupted, we currently will always crash every time
we try to read it (in perpetuity as long as the corrupted cache file continues to
exist on disk). To guard against this, we'll harden the bytecode caching mechanism
as follows:
- Modify the writeCache operation to always write the cache file in a transactional manner i.e. we'll first write to a .tmp file, and then rename the .tmp file to the cache file only if the entire file has been written in completeness.
This ensures that we won't get corrupted cache files due to interrupted writes.
- Modify the writeCache operation to also compute a SHA1 hash of the cache file and append the hash at end of the file. Modify the readCache operation to first authenticate the SHA1 hash before allowing the cache file to be used. If the hash does not match, the file is bad, and we'll just delete it.
This ensures that we won't be crashing while decoding a corrupted cache file.
Manually tested with the following scenarios and ensuring that the client recovers
with no crashes:
- no cache file on disk.
- a 0-sized cache file on a disk.
- a truncated cache file on disk.
- a corrupted cache file on disk.
- an uncorrupted cache file on disk.
Also added some static_asserts in CachedTypes.cpp to document some invariants that
the pre-existing code is dependent on.
- API/JSScript.mm:
(-[JSScript readCache]):
(-[JSScript writeCache:]):
- runtime/CachedTypes.cpp:
- 4:38 AM Changeset in webkit [257133] by
-
- 2 edits in trunk/Source/WebCore
[GStreamer] TextCombinerGStreamer is failing to compile with Gst1.14
https://bugs.webkit.org/show_bug.cgi?id=208041
Reviewed by Xabier Rodriguez-Calvar.
Replace usage of gst_clear_object and gst_clear_tag_list with previous
*_unref functions. The clear versions were added in 1.16 while Ubuntu
18.04 (current LTS) and Debian stable uses 1.14.
- platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
(webkitTextCombinerPadDispose):
- 3:22 AM Changeset in webkit [257132] by
-
- 16 edits in trunk
Value sanitization for input[type=text] should not truncate a value at a control character
https://bugs.webkit.org/show_bug.cgi?id=207900
Reviewed by Darin Adler.
LayoutTests/imported/w3c:
Rebaseline the tests. Below its a summary of the number of FAIL and PASS lines changed for each test:
- web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-csiso2022jp-expected.txt: FAIL from 7312 to 374 PASS from 17 to 6955
- web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-han-expected.txt: FAIL from 21216 to 477 PASS from 53 to 20792
- web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-hangul-expected.txt: FAIL from 11155 to 0 PASS from 28 to 11183
- web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-errors-misc-expected.txt: FAIL from 3422 to 46 PASS from 9 to 3385
- web-platform-tests/encoding/legacy-mb-japanese/iso-2022-jp/iso2022jp-encode-form-expected.txt: FAIL from 7375 to 374 PASS from 17 to 7018
- web-platform-tests/html/semantics/forms/the-input-element/valueMode-expected.txt: FAIL from 20 to 10 PASS from 22 to 32
Source/WebCore:
Stop truncating value at a control character. The new behavior is compatible with Chrome and Firefox.
Inspired on Chromium patch https://codereview.chromium.org/189843008
Covered by existing tests: affected layout tests are modified to reflect the new behaviour.
This improves WPT pass-rate in around 49K new subtest passes for Japanesse encoding tests.
- html/TextFieldInputType.cpp:
(WebCore::limitLength):
LayoutTests:
Update layout tests to reflect the new behaviour.
- fast/forms/input-value-sanitization-expected.txt:
- fast/forms/input-value-sanitization.html:
- fast/forms/paste-multiline-text-input.html:
- platform/ios-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/valueMode-expected.txt:
- platform/mac-wk2/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/valueMode-expected.txt:
- platform/mac/imported/w3c/web-platform-tests/html/semantics/forms/the-input-element/valueMode-expected.txt:
- 2:26 AM Changeset in webkit [257131] by
-
- 5 edits2 adds in trunk/Source/WebCore
[WPE] Use custom theme style for media controls
https://bugs.webkit.org/show_bug.cgi?id=208002
Reviewed by Adrian Perez de Castro.
Add mediaControlsAdwaita.css and mediaControlsAdwaita.js. The style is based on GTK port with a few differences:
- Adwaita icons are included in the css.
- All buttons have effects for hover, pressed and disabled states.
- Mute and fullscreen (only for videos) buttons are always visible, but disabled when not available to avoid the dancing when they are shown.
- Media duration is always shown too (for non-live streams), being 00:00 and disabled when unknown, for the same reason.
- Timeline and volume sliders are smaller and their thumbs are circled instead of rounded rectangles.
- Slider thumbs also have effects for hover, pressed and disabled states.
- Modules/mediacontrols/mediaControlsAdwaita.css: Added.
(audio::-webkit-media-controls-panel.hidden,):
(body:-webkit-full-page-media):
(audio):
(audio:-webkit-full-page-media,):
(audio:-webkit-full-page-media::-webkit-media-controls-panel,):
(::-webkit-media-controls):
(audio::-webkit-media-controls-enclosure,):
(video::-webkit-media-controls-enclosure):
(audio::-webkit-media-controls-panel,):
(video::-webkit-media-controls-panel):
(video::-webkit-media-controls-panel div.mute-box,):
(audio::-webkit-media-controls-panel div.mute-box.hidden,):
(audio::-webkit-media-controls-mute-button,):
(audio::-webkit-media-controls-mute-button.muted,):
(audio::-webkit-media-controls-play-button,):
(audio::-webkit-media-controls-play-button.paused,):
(audio::-webkit-media-controls-current-time-display,):
(audio::-webkit-media-controls-current-time-display.no-duration,):
(audio::-webkit-media-controls-current-time-display.hidden,):
(audio::-webkit-media-controls-timeline,):
(input[type="range"][disabled]::-webkit-media-slider-thumb,):
(audio::-webkit-media-controls-timeline.hidden,):
(audio::-webkit-media-controls-volume-slider-container,):
(audio::-webkit-media-controls-volume-slider-container.hiding,):
(audio::-webkit-media-controls-volume-slider-container.down,):
(audio::-webkit-media-controls-panel .hiding.down,):
(audio::-webkit-media-controls-volume-slider,):
(audio::-webkit-media-controls-volume-slider-container input[type="range"]::-webkit-media-slider-container > div,):
(input[type="range"]::-webkit-media-slider-container):
(input[type="range"]::-webkit-media-slider-container > div):
(input[type="range"]::-webkit-media-slider-thumb):
(audio::-webkit-media-controls-toggle-closed-captions-button,):
(audio::-webkit-media-controls-toggle-closed-captions-button.hidden,):
(video::-webkit-media-controls-closed-captions-container):
(video::-webkit-media-controls-closed-captions-container.out):
(video::-webkit-media-controls-closed-captions-container.hidden):
(video::-webkit-media-controls-closed-captions-container h3):
(video::-webkit-media-controls-closed-captions-container ul):
(video::-webkit-media-controls-closed-captions-container li):
(video::-webkit-media-controls-closed-captions-container li.selected):
(audio::-webkit-media-controls-fullscreen-button,):
(audio::-webkit-media-controls-fullscreen-button.hidden,):
(audio::-webkit-media-controls-panel button:hover,):
(audio::-webkit-media-controls-panel button:active,):
(audio::-webkit-media-controls-panel button[disabled],):
- Modules/mediacontrols/mediaControlsAdwaita.js: Added.
(createControls):
(ControllerAdwaita):
(contains):
(ControllerAdwaita.prototype.createControls):
(ControllerAdwaita.prototype.configureInlineControls):
(ControllerAdwaita.prototype.shouldHaveControls):
(ControllerAdwaita.prototype.reconnectControls):
(ControllerAdwaita.prototype.setStatusHidden):
(ControllerAdwaita.prototype.updateTime):
(ControllerAdwaita.prototype.handleTimeUpdate):
(ControllerAdwaita.prototype.updateHasAudio):
(ControllerAdwaita.prototype.handleMuteButtonMouseOver):
(ControllerAdwaita.prototype.handleVolumeBoxMouseOut):
(ControllerAdwaita.prototype.removeControls):
(ControllerAdwaita.prototype.addControls):
(ControllerAdwaita.prototype.updateFullscreenButton):
(ControllerAdwaita.prototype.updateReadyState):
(ControllerAdwaita.prototype.updateDuration):
(ControllerAdwaita.prototype.setIsLive):
(ControllerAdwaita.prototype.updatePlaying):
(ControllerAdwaita.prototype.updateProgress):
(ControllerAdwaita.prototype.handleCaptionButtonClicked):
(ControllerAdwaita.prototype.buildCaptionMenu):
(ControllerAdwaita.prototype.destroyCaptionMenu):
(ControllerAdwaita.prototype.showCaptionMenu):
(ControllerAdwaita.prototype.hideCaptionMenu):
(ControllerAdwaita.prototype.captionMenuTransitionEnd):
(ControllerAdwaita.prototype.handleCaptionButtonMouseOver):
(ControllerAdwaita.prototype.handleCaptionButtonShowMenu):
(ControllerAdwaita.prototype.handleCaptionButtonMouseOut):
(ControllerAdwaita.prototype.handleCaptionMouseOut):
- Modules/mediacontrols/mediaControlsBase.js:
- PlatformWPE.cmake:
- platform/wpe/RenderThemeWPE.cpp:
(WebCore::RenderThemeWPE::extraMediaControlsStyleSheet):
(WebCore::RenderThemeWPE::mediaControlsScript):
(WebCore::RenderThemeWPE::paintMediaSliderTrack):
(WebCore::RenderThemeWPE::paintMediaVolumeSliderTrack):
- platform/wpe/RenderThemeWPE.h:
- 2:16 AM Changeset in webkit [257130] by
-
- 2 edits in trunk/Source/WebCore
Unreviewed build fix for Windows ports
WebKitBuild\Release\WTF\Headers\wtf/RefPtr.h(44): error C2027: use of undefined type 'WebCore::ImageData'
RefPtr<ImageData> is used without defining ImageData.
- platform/graphics/ConcreteImageBuffer.h: Added #include "ImageData.h".
- 12:26 AM Changeset in webkit [257129] by
-
- 4 edits2 adds in trunk
Nullptr crash in RenderStyle::isFlippedBlocksWritingMode when fragment flow gains a new in-flow descendant
https://bugs.webkit.org/show_bug.cgi?id=207296
<rdar://problem/49687828>
Patch by Jack Lee <Jack Lee> on 2020-02-21
Reviewed by Antti Koivisto.
When a multi-column fragment flow gains a new in-flow descendant, we need to call
multiColumnDescendantInserted so RenderMultiColumnSet would be created for the new
descendant.
Source/WebCore:
Test: fast/multicol/fragflow-gains-new-in-flow-descendant-crash.html
- rendering/updating/RenderTreeBuilder.cpp:
(WebCore::RenderTreeBuilder::childFlowStateChangesAndAffectsParentBlock):
LayoutTests:
- TestExpectations:
- fast/multicol/fragflow-gains-new-in-flow-descendant-crash-expected.txt: Added.
- fast/multicol/fragflow-gains-new-in-flow-descendant-crash.html: Added.