Changeset 201588 in webkit
- Timestamp:
- Jun 1, 2016, 9:01:35 PM (9 years ago)
- Location:
- trunk/Source
- Files:
-
- 52 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r201585 r201588 1 2016-05-31 Darin Adler <darin@apple.com> 2 3 Audit RenderObject casts and fix problems and style issues found 4 https://bugs.webkit.org/show_bug.cgi?id=158221 5 6 Reviewed by Chris Dumez. 7 8 * bindings/objc/DOM.mm: 9 (-[DOMElement image]): Use auto to get more specific types in code getting 10 the renderer for an element instead of dumbing down the type to RenderObject. 11 12 * dom/Element.cpp: 13 (WebCore::Element::scrollByUnits): Call renderer only once. The comment in 14 Node advises we should do this since it has a branch in it. 15 (WebCore::Element::absoluteEventBounds): Call renderer only once. Also use 16 auto for a rect type to clarify that we are not changing the type of the 17 rect returned by the fucntion. 18 (WebCore::Element::webkitGetRegionFlowRanges): Call renderer only once. 19 20 * editing/CompositeEditCommand.cpp: 21 (WebCore::CompositeEditCommand::addBlockPlaceholderIfNeeded): Use auto 22 to get a mroe specific renderer type. 23 24 * editing/SimplifyMarkupCommand.cpp: 25 (WebCore::SimplifyMarkupCommand::doApply): Call renderer only once. 26 27 * editing/cocoa/HTMLConverter.mm: 28 (HTMLConverter::_addAttachmentForElement): Add an obviously missing 29 null check for something that is null checked elsewhere. 30 (fileWrapperForURL): Ditto. 31 (fileWrapperForElement): Changed argument type to HTMLImageElement& since 32 the call site already checks the type of the object. Use HTMLImageElement::src 33 instead of repeating the code here. Check the type of the renderer instead of 34 assuming it's a RenderImage. 35 (WebCore::editingAttributedStringFromRange): Pass a reference, not a pointer. 36 37 * html/HTMLAnchorElement.cpp: 38 (WebCore::appendServerMapMousePosition): Take a reference to an event rather 39 than a "known to be non-null" pointer. Call renderer only once. Round the 40 floating point values rather than truncating them. 41 (WebCore::HTMLAnchorElement::handleClick): Pass a reference. 42 43 * html/HTMLAttachmentElement.cpp: 44 (WebCore::HTMLAttachmentElement::setFile): Removed the now-unneeded cast since 45 the renderer function returns a pointer of a more specific type now. 46 (WebCore::HTMLAttachmentElement::parseAttribute): Ditto. 47 (WebCore::HTMLAttachmentElement::attachmentTitle): Use auto& to avoid a bit of 48 reference count churn. 49 50 * html/HTMLAttachmentElement.h: Override renderer to return a more specific type. 51 This follows the pattern that ContainerNode::renderer uses. 52 53 * html/HTMLButtonElement.h: Ditto. 54 55 * html/HTMLCanvasElement.cpp: Gave the constants at the top of the file more 56 normal names. Removed unneeded "static" from them. Moved the 57 defaultInterpolationQuality constant here from the header because it doesn't 58 need to be there. 59 (WebCore::HTMLCanvasElement::HTMLCanvasElement): Updated for name changes. 60 (WebCore::HTMLCanvasElement::createElementRenderer): Removed unneeded code to 61 set m_rendererIsCanvas to record renderer type; we can just check the type. 62 (WebCore::HTMLCanvasElement::setHeight): Updated for name changes. 63 (WebCore::HTMLCanvasElement::setWidth): Ditto. 64 (WebCore::HTMLCanvasElement::reset): Check the type of the renderer directly 65 instead of calling m_rendererIsCanvas. This helped make it clear we were 66 do extra unneeded checks since a renderer can't both be a RenderCanvas and 67 not be a RenderBox. 68 (WebCore::HTMLCanvasElement::createImageBuffer): Updated for name changes. 69 70 * html/HTMLCanvasElement.h: Moved DefaultInterpolationQuality into the cpp file. 71 Use nullptr instead of 0. Removed m_rendererIsCanvas. 72 73 * html/HTMLFieldSetElement.cpp: 74 (WebCore::HTMLFieldSetElement::HTMLFieldSetElement): Initialize m_documentVersion 75 in the class definition. 76 (WebCore::HTMLFieldSetElement::~HTMLFieldSetElement): Use m_hasDisabledAttribute. 77 (WebCore::updateFromControlElementsAncestorDisabledStateUnder): Fixed typo. 78 (WebCore::HTMLFieldSetElement::disabledAttributeChanged): Fixed mistake in this 79 function that would cause the number of disabled fieldset elements to be too high 80 if the disabled attribute's value was changed from one value to another. Use a 81 boolean to track the old value; can't think of a solution that works without that. 82 (WebCore::HTMLFieldSetElement::childrenChanged): Fixed typo. 83 (WebCore::HTMLFieldSetElement::didMoveToNewDocument): Use m_hasDisabledAttribute. 84 (WebCore::HTMLFieldSetElement::updateAssociatedElements): Changed name to make it 85 clearer what this function does. Tweaked a bit without changing behavior. 86 (WebCore::HTMLFieldSetElement::associatedElements): Updated for name change. 87 (WebCore::HTMLFieldSetElement::length): Changed to call associatedElements instead of 88 repeating that it does. 89 90 * html/HTMLFieldSetElement.h: Override renderer to return a more specific type. 91 Also updated for other changes mentioned above. 92 93 * html/HTMLFrameElement.cpp: 94 (WebCore::HTMLFrameElement::HTMLFrameElement): Initialize booleans in the class 95 definition rather than doing it here. 96 (WebCore::HTMLFrameElement::parseAttribute): Call renderer only once. 97 98 * html/HTMLFrameElement.h: Override renderer to return a more specific type. 99 Also initialize some booleans in the class definition. 100 101 * html/HTMLIFrameElement.h: Override renderer to return a more specific type. 102 103 * html/HTMLMediaElement.cpp: 104 (WebCore::HTMLMediaElement::updateRenderer): Added. Helper for a common idiom. 105 (WebCore::HTMLMediaElement::didAttachRenderers): Use auto to get a more specific 106 type for the renderer. 107 (WebCore::HTMLMediaElement::willDetachRenderers): Call renderer only once. 108 (WebCore::HTMLMediaElement::didRecalcStyle): Use updateRenderer to call renderer 109 only once. 110 (WebCore::HTMLMediaElement::loadResource): Ditto. 111 (WebCore::HTMLMediaElement::waitForSourceChange): Ditto. 112 (WebCore::HTMLMediaElement::noneSupported): Ditto. 113 (WebCore::HTMLMediaElement::setReadyState): Ditto. 114 (WebCore::HTMLMediaElement::progressEventTimerFired): Ditto. 115 (WebCore::HTMLMediaElement::selectNextSourceChild): Renamed goto label to use a style 116 that fits WebKit coding style. Call renderer only once in MediaQuery code. 117 (WebCore::HTMLMediaElement::mediaPlayerRepaint): Call renderer only once. 118 (WebCore::HTMLMediaElement::mediaPlayerSizeChanged): Use updateRenderer to call 119 renderer only once. 120 (WebCore::HTMLMediaElement::mediaPlayerRenderingCanBeAccelerated): Call renderer 121 only once. 122 (WebCore::HTMLMediaElement::mediaPlayerGraphicsDeviceAdapter): Call page only once. 123 (WebCore::HTMLMediaElement::mediaEngineWasUpdated): Use updateRenderer to call 124 renderer only once. 125 (WebCore::HTMLMediaElement::mediaPlayerCharacteristicChanged): Ditto. 126 (WebCore::HTMLMediaElement::updatePlayState): Ditto. 127 (WebCore::HTMLMediaElement::stopWithoutDestroyingMediaPlayer): Ditto. 128 (WebCore::HTMLMediaElement::resume): Ditto. 129 (WebCore::HTMLMediaElement::mediaPlayerContentBoxRect): Call renderer only once. 130 (WebCore::mediaElementIsAllowedToAutoplay): Use auto to get a more specific type. 131 132 * html/HTMLMediaElement.h: Removed conditionals around forward declarations. 133 Tweaked formatting a bit. Added the updateRender function. Override renderer to 134 return a more specific type. 135 136 * html/HTMLSelectElement.cpp: 137 (WebCore::HTMLSelectElement::optionElementChildrenChanged): Don't use the renderer 138 just to get to the document for the AXObjectCache. 139 (WebCore::HTMLSelectElement::setLength): Use auto for the list items vector. 140 (WebCore::HTMLSelectElement::nextValidIndex): Ditto. 141 (WebCore::HTMLSelectElement::firstSelectableListIndex): Ditto. 142 (WebCore::HTMLSelectElement::nextSelectableListIndexPageAway): Ditto. Also add a 143 null check for the renderer. 144 (WebCore::HTMLSelectElement::updateListBoxSelection): Split an assertion with && 145 in it into two separate assertions. Use auto for the list items vector and use 146 a reference for the list items. 147 (WebCore::HTMLSelectElement::listBoxOnChange): Use auto for the list items vector 148 and use a reference for the list items. 149 (WebCore::HTMLSelectElement::setRecalcListItems): Don't use the renderer 150 just to get to the document for the AXObjectCache. 151 (WebCore::HTMLSelectElement::selectOption): Use auto for the list items vector. 152 (WebCore::HTMLSelectElement::optionToListIndex): Ditto. 153 (WebCore::HTMLSelectElement::listToOptionIndex): Ditto. 154 (WebCore::HTMLSelectElement::searchOptionsForValue): Ditto. 155 (WebCore::HTMLSelectElement::restoreFormControlState): Ditto. 156 (WebCore::HTMLSelectElement::platformHandleKeydownEvent): Call renderer only once. 157 (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Split an assertion with 158 && in it into two separate assertions. Use auto for the list items vector. Call 159 renderer only once. 160 (WebCore::HTMLSelectElement::updateSelectedState): Use a reference for the list 161 item. 162 (WebCore::HTMLSelectElement::listBoxDefaultEventHandler): Use auto for the list 163 items vvector. Call renderer less often; could not quite get it down to once. 164 (WebCore::HTMLSelectElement::defaultEventHandler): Call renderer only once. 165 (WebCore::HTMLSelectElement::lastSelectedListIndex): Use auto for the list items 166 vector and use a reference for the list items. 167 (WebCore::HTMLSelectElement::optionAtIndex): Use a reference for the list item. 168 (WebCore::HTMLSelectElement::accessKeySetSelectedIndex): Use auto for the list 169 items vector and use a reference for the list items. 170 (WebCore::HTMLSelectElement::length): Use auto for the list items vector. 171 172 * html/HTMLTextAreaElement.h: Override renderer to return a more specific type. 173 174 * html/HTMLVideoElement.cpp: 175 (WebCore::HTMLVideoElement::didAttachRenderers): Call renderer only once and 176 don't downcast it. There was no obvious type check because the renderer has a 177 guaranteed type, but this is now clearer because it's the renderer function 178 that returns a more specific type. 179 (WebCore::HTMLVideoElement::parseAttribute): Ditto. 180 (WebCore::HTMLVideoElement::setDisplayMode): Ditto. 181 182 * html/HTMLVideoElement.h: Override renderer to return a more specific type. 183 * html/HTMLWBRElement.h: Ditto. 184 185 * html/MediaElementSession.cpp: 186 (WebCore::MediaElementSession::canControlControlsManager): Removed 187 unneeded typecast in code that null checks a renderer. 188 (WebCore::isMainContent): Remove now-unneeded downcast of a renderer 189 obtained from an HTMLMediaElement. Fixed awkward formatting by splitting 190 an if statement into two. 191 (WebCore::isElementLargeEnoughForMainContent): Remove now unneeded downcast 192 of a renderer obtained from an HTMLMediaElement. 193 194 * html/TextFieldInputType.cpp: 195 (WebCore::TextFieldInputType::forwardEvent): Call renderer only once. 196 Also use auto more in the code rather than writing out types. 197 198 * html/shadow/SliderThumbElement.cpp: 199 (WebCore::SliderThumbElement::setPositionFromPoint): Used the renderBox 200 function more consistently for all the renderers used here; before, 201 some had null checks and others did not. 202 203 * html/shadow/TextControlInnerElements.cpp: 204 (WebCore::SearchFieldResultsButtonElement::defaultEventHandler): Use auto 205 a bit more. 206 207 * page/EventHandler.cpp: 208 (WebCore::enclosingScrollableArea): Removed a redundant null check and 209 stopped using the name "element" for a local variable that was not 210 always an element. 211 212 * page/PrintContext.cpp: 213 (WebCore::enclosingBoxModelObject): Rewrote loop to be simpler and tighter. 214 Also marked this inline since it's used only one place. 215 (WebCore::PrintContext::pageNumberForElement): Use auto for the return 216 value rather than writing out the type. 217 218 * page/SpatialNavigation.cpp: 219 (WebCore::isScrollableNode): Tighten the code and use auto a bit. 220 221 * platform/ios/WebVideoFullscreenControllerAVKit.mm: Add an include of 222 RenderVideo.h since this gets at the renderer for a video. 223 224 * rendering/RenderAttachment.h: 225 (WebCore::HTMLAttachmentElement::renderer): Added. Function is here because 226 it can only be called by code that includes this header. This matches the 227 pattern of RenderElement.h and ContainerNode::renderer. 228 229 * rendering/RenderFrame.cpp: Added now-needed include. 230 231 * rendering/RenderFrame.h: 232 (WebCore::HTMLFrameElement::renderer): Added. Same logic as above. 233 234 * rendering/RenderLayerFilterInfo.cpp: 235 (WebCore::RenderLayer::FilterInfo::updateReferenceFilterClients): Use auto 236 a bit and call rendeer only once. 237 238 * rendering/RenderMedia.h: 239 (WebCore::HTMLMediaElement::renderer): Added. Same logic as above. 240 * rendering/RenderTextControlMultiLine.h: 241 (WebCore::HTMLTextAreaElement::renderer): Ditto. 242 243 * rendering/RenderVideo.cpp: 244 (WebCore::placeholder): Renamed. Tightened up argument type to match what 245 is passed at all the call sites. Use auto instead of RenderObject. 246 (WebCore::RenderVideo::offsetLeft): Use auto and the renamed function above. 247 (WebCore::RenderVideo::offsetTop): Ditto. 248 (WebCore::RenderVideo::offsetWidth): Ditto. 249 (WebCore::RenderVideo::offsetHeight): Ditto. 250 251 * rendering/RenderVideo.h: 252 (WebCore::HTMLVideoElement::renderer): Added. Same logic as above. 253 254 * svg/SVGGElement.cpp: 255 (WebCore::SVGGElement::createElementRenderer): Fixed typo. 256 257 * svg/SVGGraphicsElement.cpp: 258 (WebCore::SVGGraphicsElement::createElementRenderer): Removed 259 non-helpful oblique comment. 260 * svg/SVGPathElement.cpp: 261 (WebCore::SVGPathElement::createElementRenderer): Ditto. 262 1 263 2016-06-01 Chris Fleizach <cfleizach@apple.com> 2 264 -
trunk/Source/WebCore/bindings/objc/DOM.mm
r201441 r201588 708 708 { 709 709 // FIXME: Could we move this function to WebCore::Node and autogenerate? 710 WebCore::RenderObject* renderer = core(self)->renderer();710 auto* renderer = core(self)->renderer(); 711 711 if (!is<RenderImage>(renderer)) 712 712 return nil; 713 WebCore::CachedImage* cachedImage = downcast<RenderImage>(*renderer).cachedImage();713 auto* cachedImage = downcast<RenderImage>(*renderer).cachedImage(); 714 714 if (!cachedImage || cachedImage->errorOccurred()) 715 715 return nil; -
trunk/Source/WebCore/dom/Element.cpp
r201333 r201588 676 676 document().updateLayoutIgnorePendingStylesheets(); 677 677 678 if (!renderer()) 679 return; 680 681 if (!renderer()->hasOverflowClip()) 678 auto* renderer = this->renderer(); 679 if (!renderer) 680 return; 681 682 if (!renderer->hasOverflowClip()) 682 683 return; 683 684 … … 688 689 } 689 690 Element* stopElement = this; 690 downcast<RenderBox>(*renderer ()).scroll(direction, granularity, units, &stopElement);691 downcast<RenderBox>(*renderer).scroll(direction, granularity, units, &stopElement); 691 692 } 692 693 … … 1010 1011 result = LayoutRect(renderer()->localToAbsoluteQuad(localRect, UseTransforms, &includesFixedPositionElements).boundingBox()); 1011 1012 } else { 1012 if (is<RenderBox>(renderer())) { 1013 RenderBox& box = *downcast<RenderBox>(renderer()); 1013 auto* renderer = this->renderer(); 1014 if (is<RenderBox>(renderer)) { 1015 auto& box = downcast<RenderBox>(*renderer); 1014 1016 1015 1017 bool computedBounds = false; … … 1031 1033 RenderElement* multicolContainer = flowThread->parent(); 1032 1034 if (multicolContainer && is<RenderBox>(multicolContainer)) { 1033 LayoutRect overflowRect = downcast<RenderBox>(multicolContainer)->layoutOverflowRect();1035 auto overflowRect = downcast<RenderBox>(*multicolContainer).layoutOverflowRect(); 1034 1036 result = LayoutRect(multicolContainer->localToAbsoluteQuad(FloatRect(overflowRect), UseTransforms, &includesFixedPositionElements).boundingBox()); 1035 1037 computedBounds = true; … … 1044 1046 } 1045 1047 } else 1046 result = LayoutRect(renderer ()->absoluteBoundingBoxRect(true /* useTransforms */, &includesFixedPositionElements));1048 result = LayoutRect(renderer->absoluteBoundingBoxRect(true /* useTransforms */, &includesFixedPositionElements)); 1047 1049 } 1048 1050 … … 2968 2970 Vector<RefPtr<Range>> rangeObjects; 2969 2971 document().updateLayoutIgnorePendingStylesheets(); 2970 if (renderer() && renderer()->isRenderNamedFlowFragmentContainer()) { 2971 RenderNamedFlowFragment& namedFlowFragment = *downcast<RenderBlockFlow>(*renderer()).renderNamedFlowFragment(); 2972 auto* renderer = this->renderer(); 2973 if (renderer && renderer->isRenderNamedFlowFragmentContainer()) { 2974 auto& namedFlowFragment = *downcast<RenderBlockFlow>(*renderer).renderNamedFlowFragment(); 2972 2975 if (namedFlowFragment.isValid()) 2973 2976 namedFlowFragment.getRanges(rangeObjects); 2974 2977 } 2975 2976 2978 return rangeObjects; 2977 2979 } -
trunk/Source/WebCore/editing/CompositeEditCommand.cpp
r200931 r201588 1060 1060 document().updateLayoutIgnorePendingStylesheets(); 1061 1061 1062 RenderObject* renderer = container->renderer();1062 auto* renderer = container->renderer(); 1063 1063 if (!is<RenderBlockFlow>(renderer)) 1064 1064 return nullptr; 1065 1065 1066 // append the placeholder to make sure it follows 1067 // any unrendered blocks 1068 RenderBlockFlow& blockFlow = downcast<RenderBlockFlow>(*renderer); 1066 // Append the placeholder to make sure it follows any unrendered blocks. 1067 auto& blockFlow = downcast<RenderBlockFlow>(*renderer); 1069 1068 if (!blockFlow.height() || (blockFlow.isListItem() && blockFlow.isEmpty())) 1070 1069 return appendBlockPlaceholder(container); -
trunk/Source/WebCore/editing/SimplifyMarkupCommand.cpp
r200098 r201588 71 71 break; 72 72 73 if (!is<RenderInline>(currentNode->renderer()) || downcast<RenderInline>(*currentNode->renderer()).alwaysCreateLineBoxes()) 73 auto* renderer = currentNode->renderer(); 74 if (!is<RenderInline>(renderer) || downcast<RenderInline>(*renderer).alwaysCreateLineBoxes()) 74 75 continue; 75 76 -
trunk/Source/WebCore/editing/cocoa/HTMLConverter.mm
r201205 r201588 318 318 #else 319 319 static NSFileWrapper *fileWrapperForURL(DocumentLoader *, NSURL *); 320 static NSFileWrapper *fileWrapperForElement( Element*);320 static NSFileWrapper *fileWrapperForElement(HTMLImageElement&); 321 321 322 322 @interface NSTextAttachment (WebCoreNSTextAttachment) … … 1394 1394 fileWrapper = [[[NSFileWrapper alloc] initWithURL:url options:0 error:NULL] autorelease]; 1395 1395 } 1396 if (!fileWrapper ) {1396 if (!fileWrapper && dataSource) { 1397 1397 RefPtr<ArchiveResource> resource = dataSource->subresource(url); 1398 1398 if (!resource) … … 2424 2424 #if !PLATFORM(IOS) 2425 2425 2426 static NSFileWrapper *fileWrapperForURL(DocumentLoader *dataSource, NSURL *URL)2426 static NSFileWrapper *fileWrapperForURL(DocumentLoader* dataSource, NSURL *URL) 2427 2427 { 2428 2428 if ([URL isFileURL]) 2429 2429 return [[[NSFileWrapper alloc] initWithURL:[URL URLByResolvingSymlinksInPath] options:0 error:nullptr] autorelease]; 2430 2430 2431 RefPtr<ArchiveResource> resource = dataSource->subresource(URL); 2432 if (resource) { 2433 NSFileWrapper *wrapper = [[[NSFileWrapper alloc] initRegularFileWithContents:resource->data().createNSData().get()] autorelease]; 2434 NSString *filename = resource->response().suggestedFilename(); 2435 if (!filename || ![filename length]) 2436 filename = suggestedFilenameWithMIMEType(resource->url(), resource->mimeType()); 2437 [wrapper setPreferredFilename:filename]; 2438 return wrapper; 2431 if (dataSource) { 2432 if (RefPtr<ArchiveResource> resource = dataSource->subresource(URL)) { 2433 NSFileWrapper *wrapper = [[[NSFileWrapper alloc] initRegularFileWithContents:resource->data().createNSData().get()] autorelease]; 2434 NSString *filename = resource->response().suggestedFilename(); 2435 if (!filename || ![filename length]) 2436 filename = suggestedFilenameWithMIMEType(resource->url(), resource->mimeType()); 2437 [wrapper setPreferredFilename:filename]; 2438 return wrapper; 2439 } 2439 2440 } 2440 2441 … … 2453 2454 } 2454 2455 2455 static NSFileWrapper *fileWrapperForElement(Element* element) 2456 { 2457 NSFileWrapper *wrapper = nil; 2458 2459 const AtomicString& attr = element->getAttribute(srcAttr); 2460 if (!attr.isEmpty()) { 2461 NSURL *URL = element->document().completeURL(attr); 2462 if (DocumentLoader* loader = element->document().loader()) 2463 wrapper = fileWrapperForURL(loader, URL); 2464 } 2456 static NSFileWrapper *fileWrapperForElement(HTMLImageElement& element) 2457 { 2458 // FIXME: Should this use currentSrc instead of src? 2459 auto src = element.src(); 2460 NSFileWrapper *wrapper = src.isEmpty() ? nil : fileWrapperForURL(element.document().loader(), src); 2461 2465 2462 if (!wrapper) { 2466 auto& renderer = downcast<RenderImage>(*element->renderer()); 2467 if (renderer.cachedImage() && !renderer.cachedImage()->errorOccurred()) { 2468 wrapper = [[NSFileWrapper alloc] initRegularFileWithContents:(NSData *)(renderer.cachedImage()->imageForRenderer(&renderer)->getTIFFRepresentation())]; 2469 [wrapper setPreferredFilename:@"image.tiff"]; 2470 [wrapper autorelease]; 2463 auto* renderer = element.renderer(); 2464 if (is<RenderImage>(renderer)) { 2465 auto* image = downcast<RenderImage>(*renderer).cachedImage(); 2466 if (image && !image->errorOccurred()) { 2467 wrapper = [[[NSFileWrapper alloc] initRegularFileWithContents:(NSData *)image->imageForRenderer(renderer)->getTIFFRepresentation()] autorelease]; 2468 [wrapper setPreferredFilename:@"image.tiff"]; 2469 } 2471 2470 } 2472 2471 } … … 2487 2486 2488 2487 #if !PLATFORM(IOS) 2488 2489 2489 // This function uses TextIterator, which makes offsets in its result compatible with HTML editing. 2490 2490 NSAttributedString *editingAttributedStringFromRange(Range& range, IncludeImagesInAttributedString includeOrSkipImages) … … 2506 2506 Node* node = startContainer.traverseToChildAt(startOffset); 2507 2507 if (is<HTMLImageElement>(node)) { 2508 NSFileWrapper* fileWrapper = fileWrapperForElement(downcast<HTMLImageElement>(node));2509 NSTextAttachment *attachment = [[NSTextAttachment alloc] initWithFileWrapper:fileWrapper];2508 auto fileWrapper = fileWrapperForElement(downcast<HTMLImageElement>(*node)); 2509 NSTextAttachment *attachment = [[NSTextAttachment alloc] initWithFileWrapper:fileWrapper]; 2510 2510 [string appendAttributedString:[NSAttributedString attributedStringWithAttachment:attachment]]; 2511 2511 [attachment release]; … … 2547 2547 return [string autorelease]; 2548 2548 } 2549 #endif 2550 2551 } 2549 2550 #endif 2551 2552 } -
trunk/Source/WebCore/html/HTMLAnchorElement.cpp
r199571 r201588 139 139 } 140 140 141 static void appendServerMapMousePosition(StringBuilder& url, Event *event)142 { 143 ASSERT(event);144 if (!is<MouseEvent>(*event))145 return;146 147 ASSERT( event->target());148 Node* target = event->target()->toNode();141 static void appendServerMapMousePosition(StringBuilder& url, Event& event) 142 { 143 if (!is<MouseEvent>(event)) 144 return; 145 auto& mouseEvent = downcast<MouseEvent>(event); 146 147 ASSERT(mouseEvent.target()); 148 auto* target = mouseEvent.target()->toNode(); 149 149 ASSERT(target); 150 150 if (!is<HTMLImageElement>(*target)) 151 151 return; 152 152 153 HTMLImageElement& imageElement = downcast<HTMLImageElement>(*target);153 auto& imageElement = downcast<HTMLImageElement>(*target); 154 154 if (!imageElement.isServerMap()) 155 155 return; 156 156 157 if (!is<RenderImage>(imageElement.renderer())) 158 return; 159 auto& renderer = downcast<RenderImage>(*imageElement.renderer()); 160 161 // FIXME: This should probably pass true for useTransforms. 162 FloatPoint absolutePosition = renderer.absoluteToLocal(FloatPoint(downcast<MouseEvent>(*event).pageX(), downcast<MouseEvent>(*event).pageY())); 163 int x = absolutePosition.x(); 164 int y = absolutePosition.y(); 157 auto* renderer = imageElement.renderer(); 158 if (!is<RenderImage>(renderer)) 159 return; 160 161 // FIXME: This should probably pass UseTransforms in the MapCoordinatesFlags. 162 auto absolutePosition = downcast<RenderImage>(*renderer).absoluteToLocal(FloatPoint(mouseEvent.pageX(), mouseEvent.pageY())); 165 163 url.append('?'); 166 url.appendNumber( x);164 url.appendNumber(std::lround(absolutePosition.x())); 167 165 url.append(','); 168 url.appendNumber( y);166 url.appendNumber(std::lround(absolutePosition.y())); 169 167 } 170 168 … … 552 550 StringBuilder url; 553 551 url.append(stripLeadingAndTrailingHTMLSpaces(fastGetAttribute(hrefAttr))); 554 appendServerMapMousePosition(url, event);552 appendServerMapMousePosition(url, *event); 555 553 URL kurl = document().completeURL(url.toString()); 556 554 -
trunk/Source/WebCore/html/HTMLAttachmentElement.cpp
r200041 r201588 66 66 m_file = file; 67 67 68 auto* renderer = this->renderer(); 69 if (!is<RenderAttachment>(renderer)) 70 return; 71 72 downcast<RenderAttachment>(*renderer).invalidate(); 68 if (auto* renderer = this->renderer()) 69 renderer->invalidate(); 73 70 } 74 71 75 72 void HTMLAttachmentElement::parseAttribute(const QualifiedName& name, const AtomicString& value) 76 73 { 77 if ( (name == progressAttr || name == titleAttr || name == subtitleAttr || name == typeAttr) && is<RenderAttachment>(renderer())) {78 downcast<RenderAttachment>(*renderer()).invalidate();79 return;74 if (name == progressAttr || name == subtitleAttr || name == titleAttr || name == typeAttr) { 75 if (auto* renderer = this->renderer()) 76 renderer->invalidate(); 80 77 } 81 78 … … 85 82 String HTMLAttachmentElement::attachmentTitle() const 86 83 { 87 Stringtitle = fastGetAttribute(titleAttr);84 auto& title = fastGetAttribute(titleAttr); 88 85 if (!title.isEmpty()) 89 86 return title; -
trunk/Source/WebCore/html/HTMLAttachmentElement.h
r200041 r201588 24 24 */ 25 25 26 #ifndef HTMLAttachmentElement_h 27 #define HTMLAttachmentElement_h 26 #pragma once 28 27 29 28 #if ENABLE(ATTACHMENT_ELEMENT) … … 34 33 35 34 class File; 35 class RenderAttachment; 36 36 37 37 class HTMLAttachmentElement final : public HTMLElement { 38 38 public: 39 39 static Ref<HTMLAttachmentElement> create(const QualifiedName&, Document&); 40 40 41 WEBCORE_EXPORT File* file() const; 41 42 void setFile(File*); … … 43 44 WEBCORE_EXPORT String attachmentTitle() const; 44 45 String attachmentType() const; 46 47 RenderAttachment* renderer() const; 45 48 46 49 private: … … 60 63 61 64 #endif // ENABLE(ATTACHMENT_ELEMENT) 62 #endif // HTMLAttachmentElement_h -
trunk/Source/WebCore/html/HTMLButtonElement.h
r200041 r201588 22 22 */ 23 23 24 #ifndef HTMLButtonElement_h 25 #define HTMLButtonElement_h 24 #pragma once 26 25 27 26 #include "HTMLFormControlElement.h" 28 27 29 28 namespace WebCore { 29 30 class RenderButton; 30 31 31 32 class HTMLButtonElement final : public HTMLFormControlElement { … … 38 39 39 40 bool willRespondToMouseClickEvents() override; 41 42 RenderButton* renderer() const; 40 43 41 44 private: … … 78 81 79 82 } // namespace 80 81 #endif -
trunk/Source/WebCore/html/HTMLCanvasElement.cpp
r200041 r201588 49 49 #include "Settings.h" 50 50 #include <math.h> 51 #include <wtf/RAMSize.h>52 53 51 #include <runtime/JSCInlines.h> 54 52 #include <runtime/JSLock.h> 53 #include <wtf/RAMSize.h> 55 54 56 55 #if ENABLE(WEBGL) … … 64 63 65 64 // These values come from the WhatWG/W3C HTML spec. 66 static const int DefaultWidth = 300;67 static const int DefaultHeight = 150;65 const int defaultWidth = 300; 66 const int defaultHeight = 150; 68 67 69 68 // Firefox limits width/height to 32767 pixels, but slows down dramatically before it … … 71 70 // in exchange for a smaller maximum canvas size. The maximum canvas size is in device pixels. 72 71 #if PLATFORM(IOS) 73 static const unsigned MaxCanvasArea = 4096 * 4096;72 const unsigned maxCanvasArea = 4096 * 4096; 74 73 #elif PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101100 75 static const unsigned MaxCanvasArea = 8192 * 8192;74 const unsigned maxCanvasArea = 8192 * 8192; 76 75 #else 77 static const unsigned MaxCanvasArea = 16384 * 16384; 76 const unsigned maxCanvasArea = 16384 * 16384; 77 #endif 78 79 #if USE(CG) 80 // FIXME: It seems strange that the default quality is not the one that is literally named "default". 81 // Should fix names to make this easier to understand, or write an excellent comment here explaining why not. 82 const InterpolationQuality defaultInterpolationQuality = InterpolationLow; 83 #else 84 const InterpolationQuality defaultInterpolationQuality = InterpolationDefault; 78 85 #endif 79 86 … … 82 89 HTMLCanvasElement::HTMLCanvasElement(const QualifiedName& tagName, Document& document) 83 90 : HTMLElement(tagName, document) 84 , m_size( DefaultWidth, DefaultHeight)91 , m_size(defaultWidth, defaultHeight) 85 92 { 86 93 ASSERT(hasTagName(canvasTag)); … … 128 135 { 129 136 Frame* frame = document().frame(); 130 if (frame && frame->script().canExecuteScripts(NotAboutToExecuteScript)) { 131 m_rendererIsCanvas = true; 137 if (frame && frame->script().canExecuteScripts(NotAboutToExecuteScript)) 132 138 return createRenderer<RenderHTMLCanvas>(*this, WTFMove(style)); 133 }134 135 m_rendererIsCanvas = false;136 139 return HTMLElement::createElementRenderer(WTFMove(style), insertionPosition); 137 140 } … … 159 162 void HTMLCanvasElement::setHeight(unsigned value) 160 163 { 161 setAttributeWithoutSynchronization(heightAttr, AtomicString::number(limitToOnlyHTMLNonNegative(value, DefaultHeight)));164 setAttributeWithoutSynchronization(heightAttr, AtomicString::number(limitToOnlyHTMLNonNegative(value, defaultHeight))); 162 165 } 163 166 164 167 void HTMLCanvasElement::setWidth(unsigned value) 165 168 { 166 setAttributeWithoutSynchronization(widthAttr, AtomicString::number(limitToOnlyHTMLNonNegative(value, DefaultWidth)));169 setAttributeWithoutSynchronization(widthAttr, AtomicString::number(limitToOnlyHTMLNonNegative(value, defaultWidth))); 167 170 } 168 171 … … 337 340 bool hadImageBuffer = hasCreatedImageBuffer(); 338 341 339 int w = limitToOnlyHTMLNonNegative(fastGetAttribute(widthAttr), DefaultWidth);340 int h = limitToOnlyHTMLNonNegative(fastGetAttribute(heightAttr), DefaultHeight);342 int w = limitToOnlyHTMLNonNegative(fastGetAttribute(widthAttr), defaultWidth); 343 int h = limitToOnlyHTMLNonNegative(fastGetAttribute(heightAttr), defaultHeight); 341 344 342 345 if (m_contextStateSaver) { … … 368 371 #endif 369 372 370 if (auto renderer = this->renderer()) { 371 if (m_rendererIsCanvas) { 372 if (oldSize != size()) { 373 downcast<RenderHTMLCanvas>(*renderer).canvasSizeChanged(); 374 if (renderBox() && renderBox()->hasAcceleratedCompositing()) 375 renderBox()->contentChanged(CanvasChanged); 376 } 377 if (hadImageBuffer) 378 renderer->repaint(); 373 auto renderer = this->renderer(); 374 if (is<RenderHTMLCanvas>(renderer)) { 375 auto& canvasRenderer = downcast<RenderHTMLCanvas>(*renderer); 376 if (oldSize != size()) { 377 canvasRenderer.canvasSizeChanged(); 378 if (canvasRenderer.hasAcceleratedCompositing()) 379 canvasRenderer.contentChanged(CanvasChanged); 379 380 } 381 if (hadImageBuffer) 382 canvasRenderer.repaint(); 380 383 } 381 384 … … 637 640 return; 638 641 639 if (deviceSize.width() * deviceSize.height() > MaxCanvasArea) {642 if (deviceSize.width() * deviceSize.height() > maxCanvasArea) { 640 643 StringBuilder stringBuilder; 641 644 stringBuilder.appendLiteral("Canvas area exceeds the maximum limit (width * height > "); 642 stringBuilder.appendNumber( MaxCanvasArea);645 stringBuilder.appendNumber(maxCanvasArea); 643 646 stringBuilder.appendLiteral(")."); 644 647 document().addConsoleMessage(MessageSource::JS, MessageLevel::Warning, stringBuilder.toString()); … … 667 670 return; 668 671 m_imageBuffer->context().setShadowsIgnoreTransforms(true); 669 m_imageBuffer->context().setImageInterpolationQuality( DefaultInterpolationQuality);672 m_imageBuffer->context().setImageInterpolationQuality(defaultInterpolationQuality); 670 673 if (document().settings() && !document().settings()->antialiased2dCanvasEnabled()) 671 674 m_imageBuffer->context().setShouldAntialias(false); -
trunk/Source/WebCore/html/HTMLCanvasElement.h
r200041 r201588 26 26 */ 27 27 28 #ifndef HTMLCanvasElement_h 29 #define HTMLCanvasElement_h 28 #pragma once 30 29 31 30 #include "FloatRect.h" … … 34 33 #include <memory> 35 34 #include <wtf/Forward.h> 36 37 #if USE(CG)38 #define DefaultInterpolationQuality InterpolationLow39 #else40 #define DefaultInterpolationQuality InterpolationDefault41 #endif42 35 43 36 namespace WebCore { … … 49 42 class HTMLCanvasElement; 50 43 class Image; 44 class ImageBuffer; 51 45 class ImageData; 52 class ImageBuffer;53 class IntSize;54 46 55 47 namespace DisplayList { … … 75 67 void removeObserver(CanvasObserver&); 76 68 77 // Attributes and functions exposed to script78 69 unsigned width() const { return size().width(); } 79 70 unsigned height() const { return size().height(); } … … 95 86 } 96 87 97 CanvasRenderingContext* getContext(const String&, CanvasContextAttributes* attributes = 0);98 bool probablySupportsContext(const String&, CanvasContextAttributes* = 0);88 CanvasRenderingContext* getContext(const String&, CanvasContextAttributes* = nullptr); 89 bool probablySupportsContext(const String&, CanvasContextAttributes* = nullptr); 99 90 static bool is2dType(const String&); 100 91 #if ENABLE(WEBGL) … … 104 95 static String toEncodingMimeType(const String& mimeType); 105 96 String toDataURL(const String& mimeType, const double* quality, ExceptionCode&); 106 String toDataURL(const String& mimeType, ExceptionCode& ec) { return toDataURL(mimeType, 0, ec); }97 String toDataURL(const String& mimeType, ExceptionCode& ec) { return toDataURL(mimeType, nullptr, ec); } 107 98 108 99 // Used for rendering … … 178 169 179 170 bool m_originClean { true }; 180 bool m_rendererIsCanvas { false };181 171 bool m_ignoreReset { false }; 182 172 … … 194 184 }; 195 185 196 } //namespace 197 198 #endif 186 } // namespace WebCore -
trunk/Source/WebCore/html/HTMLFieldSetElement.cpp
r200041 r201588 41 41 inline HTMLFieldSetElement::HTMLFieldSetElement(const QualifiedName& tagName, Document& document, HTMLFormElement* form) 42 42 : HTMLFormControlElement(tagName, document, form) 43 , m_documentVersion(0)44 43 { 45 44 ASSERT(hasTagName(fieldsetTag)); … … 48 47 HTMLFieldSetElement::~HTMLFieldSetElement() 49 48 { 50 if ( fastHasAttribute(disabledAttr))49 if (m_hasDisabledAttribute) 51 50 document().removeDisabledFieldsetElement(); 52 51 } … … 66 65 while (control) { 67 66 control->setAncestorDisabled(isDisabled); 68 // Don't call setAncestorDisabled(false) on form cont orls inside disabled fieldsets.67 // Don't call setAncestorDisabled(false) on form controls inside disabled fieldsets. 69 68 if (is<HTMLFieldSetElement>(*control) && control->fastHasAttribute(disabledAttr)) 70 69 control = Traversal<HTMLFormControlElement>::nextSkippingChildren(*control, &startNode); … … 76 75 void HTMLFieldSetElement::disabledAttributeChanged() 77 76 { 78 if (fastHasAttribute(disabledAttr)) 79 document().addDisabledFieldsetElement(); 80 else 81 document().removeDisabledFieldsetElement(); 77 bool hasDisabledAttribute = fastHasAttribute(disabledAttr); 78 if (m_hasDisabledAttribute != hasDisabledAttribute) { 79 m_hasDisabledAttribute = hasDisabledAttribute; 80 if (hasDisabledAttribute) 81 document().addDisabledFieldsetElement(); 82 else 83 document().removeDisabledFieldsetElement(); 84 } 82 85 83 86 HTMLFormControlElement::disabledAttributeChanged(); … … 114 117 return; 115 118 116 // We only care about the first legend element (in which form cont orls are not disabled by this element) changing here.119 // We only care about the first legend element (in which form controls are not disabled by this element) changing here. 117 120 updateFromControlElementsAncestorDisabledStateUnder(*legend, false /* isDisabled */); 118 121 while ((legend = Traversal<HTMLLegendElement>::nextSibling(*legend))) … … 123 126 { 124 127 HTMLFormControlElement::didMoveToNewDocument(oldDocument); 125 if ( fastHasAttribute(disabledAttr)) {128 if (m_hasDisabledAttribute) { 126 129 if (oldDocument) 127 130 oldDocument->removeDisabledFieldsetElement(); … … 171 174 } 172 175 173 void HTMLFieldSetElement:: refreshElementsIfNeeded() const176 void HTMLFieldSetElement::updateAssociatedElements() const 174 177 { 175 178 uint64_t documentVersion = document().domTreeVersion(); … … 181 184 m_associatedElements.clear(); 182 185 183 for (auto& element : descendantsOfType< Element>(const_cast<HTMLFieldSetElement&>(*this))) {184 if ( element.hasTagName(objectTag))186 for (auto& element : descendantsOfType<HTMLElement>(const_cast<HTMLFieldSetElement&>(*this))) { 187 if (is<HTMLObjectElement>(element)) 185 188 m_associatedElements.append(&downcast<HTMLObjectElement>(element)); 186 189 else if (is<HTMLFormControlElement>(element)) … … 191 194 const Vector<FormAssociatedElement*>& HTMLFieldSetElement::associatedElements() const 192 195 { 193 refreshElementsIfNeeded();196 updateAssociatedElements(); 194 197 return m_associatedElements; 195 198 } … … 197 200 unsigned HTMLFieldSetElement::length() const 198 201 { 199 refreshElementsIfNeeded();200 202 unsigned length = 0; 201 for (auto & element : m_associatedElements) {203 for (auto* element : associatedElements()) { 202 204 if (element->isEnumeratable()) 203 205 ++length; -
trunk/Source/WebCore/html/HTMLFieldSetElement.h
r200041 r201588 22 22 */ 23 23 24 #ifndef HTMLFieldSetElement_h 25 #define HTMLFieldSetElement_h 24 #pragma once 26 25 27 26 #include "HTMLFormControlElement.h" … … 32 31 class FormAssociatedElement; 33 32 class HTMLFormControlsCollection; 33 class RenderFieldSet; 34 34 35 35 class HTMLFieldSetElement final : public HTMLFormControlElement { … … 47 47 void addInvalidDescendant(const HTMLFormControlElement&); 48 48 void removeInvalidDescendant(const HTMLFormControlElement&); 49 50 RenderFieldSet* renderer() const; 49 51 50 52 private: … … 65 67 bool matchesInvalidPseudoClass() const override; 66 68 67 void refreshElementsIfNeeded() const;69 void updateAssociatedElements() const; 68 70 69 71 mutable Vector<FormAssociatedElement*> m_associatedElements; 70 // When domtree is modified, we have to refresh the m_associatedElements array.71 mutable uint64_t m_documentVersion ;72 // When the DOM tree is modified, we have to refresh the m_associatedElements array. 73 mutable uint64_t m_documentVersion { 0 }; 72 74 HashSet<const HTMLFormControlElement*> m_invalidDescendants; 75 bool m_hasDisabledAttribute { false }; 73 76 }; 74 77 75 78 } // namespace 76 77 #endif -
trunk/Source/WebCore/html/HTMLFrameElement.cpp
r200041 r201588 36 36 inline HTMLFrameElement::HTMLFrameElement(const QualifiedName& tagName, Document& document) 37 37 : HTMLFrameElementBase(tagName, document) 38 , m_frameBorder(true)39 , m_frameBorderSet(false)40 38 { 41 39 ASSERT(hasTagName(frameTag)); … … 81 79 // FIXME: If we are already attached, this has no effect. 82 80 } else if (name == noresizeAttr) { 83 if ( renderer())84 renderer ()->updateFromElement();81 if (auto* renderer = this->renderer()) 82 renderer->updateFromElement(); 85 83 } else 86 84 HTMLFrameElementBase::parseAttribute(name, value); -
trunk/Source/WebCore/html/HTMLFrameElement.h
r200041 r201588 22 22 */ 23 23 24 #ifndef HTMLFrameElement_h 25 #define HTMLFrameElement_h 24 #pragma once 26 25 27 26 #include "HTMLFrameElementBase.h" 28 27 29 28 namespace WebCore { 29 30 class RenderFrame; 30 31 31 32 class HTMLFrameElement final : public HTMLFrameElementBase { … … 34 35 35 36 bool hasFrameBorder() const { return m_frameBorder; } 37 bool noResize() const; 36 38 37 bool noResize() const;39 RenderFrame* renderer() const; 38 40 39 41 private: 40 42 HTMLFrameElement(const QualifiedName&, Document&); 41 43 42 void didAttachRenderers() override; 44 void didAttachRenderers() final; 45 bool rendererIsNeeded(const RenderStyle&) final; 46 RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final; 47 void parseAttribute(const QualifiedName&, const AtomicString&) final; 43 48 44 bool rendererIsNeeded(const RenderStyle&) override; 45 RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) override; 46 47 void parseAttribute(const QualifiedName&, const AtomicString&) override; 48 49 bool m_frameBorder; 50 bool m_frameBorderSet; 49 bool m_frameBorder { true }; 50 bool m_frameBorderSet { false }; 51 51 }; 52 52 53 53 } // namespace WebCore 54 55 #endif // HTMLFrameElement_h -
trunk/Source/WebCore/html/HTMLIFrameElement.h
r200041 r201588 22 22 */ 23 23 24 #ifndef HTMLIFrameElement_h 25 #define HTMLIFrameElement_h 24 #pragma once 26 25 27 26 #include "HTMLFrameElementBase.h" … … 30 29 31 30 class DOMTokenList; 31 class RenderIFrame; 32 32 33 33 class HTMLIFrameElement final : public HTMLFrameElementBase { … … 37 37 DOMTokenList& sandbox(); 38 38 39 RenderIFrame* renderer() const; 40 39 41 private: 40 42 HTMLIFrameElement(const QualifiedName&, Document&); 41 43 42 44 #if PLATFORM(IOS) 43 bool isKeyboardFocusable(KeyboardEvent*) const override{ return false; }45 bool isKeyboardFocusable(KeyboardEvent*) const final { return false; } 44 46 #endif 45 47 46 void parseAttribute(const QualifiedName&, const AtomicString&) override;47 bool isPresentationAttribute(const QualifiedName&) const override;48 void collectStyleForPresentationAttribute(const QualifiedName&, const AtomicString&, MutableStyleProperties&) override;48 void parseAttribute(const QualifiedName&, const AtomicString&) final; 49 bool isPresentationAttribute(const QualifiedName&) const final; 50 void collectStyleForPresentationAttribute(const QualifiedName&, const AtomicString&, MutableStyleProperties&) final; 49 51 50 bool rendererIsNeeded(const RenderStyle&) override;51 RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) override;52 bool rendererIsNeeded(const RenderStyle&) final; 53 RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final; 52 54 53 55 std::unique_ptr<DOMTokenList> m_sandbox; … … 55 57 56 58 } // namespace WebCore 57 58 #endif // HTMLIFrameElement_h -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r201574 r201588 25 25 26 26 #include "config.h" 27 27 28 #if ENABLE(VIDEO) 29 28 30 #include "HTMLMediaElement.h" 29 31 … … 832 834 } 833 835 836 inline void HTMLMediaElement::updateRenderer() 837 { 838 if (auto* renderer = this->renderer()) 839 renderer->updateFromElement(); 840 } 841 834 842 void HTMLMediaElement::didAttachRenderers() 835 843 { 836 if ( RenderElement* renderer = this->renderer()) {844 if (auto* renderer = this->renderer()) { 837 845 renderer->updateFromElement(); 838 846 if (m_mediaSession->hasBehaviorRestriction(MediaElementSession::InvisibleAutoplayNotPermitted) … … 845 853 void HTMLMediaElement::willDetachRenderers() 846 854 { 847 if ( renderer())848 renderer ()->unregisterForVisibleInViewportCallback();855 if (auto* renderer = this->renderer()) 856 renderer->unregisterForVisibleInViewportCallback(); 849 857 } 850 858 … … 856 864 void HTMLMediaElement::didRecalcStyle(Style::Change) 857 865 { 858 if (renderer()) 859 renderer()->updateFromElement(); 866 updateRenderer(); 860 867 } 861 868 … … 1441 1448 updateDisplayState(); 1442 1449 1443 if (renderer()) 1444 renderer()->updateFromElement(); 1450 updateRenderer(); 1445 1451 } 1446 1452 … … 1925 1931 1926 1932 updateDisplayState(); 1927 1928 if (renderer()) 1929 renderer()->updateFromElement(); 1933 updateRenderer(); 1930 1934 } 1931 1935 … … 1968 1972 1969 1973 updateDisplayState(); 1970 1971 if (renderer()) 1972 renderer()->updateFromElement(); 1974 updateRenderer(); 1973 1975 } 1974 1976 … … 2257 2259 if (hasMediaControls()) 2258 2260 mediaControls()->loadedMetadata(); 2259 if (renderer()) 2260 renderer()->updateFromElement(); 2261 updateRenderer(); 2261 2262 2262 2263 if (is<MediaDocument>(document())) … … 2453 2454 m_previousProgressTime = time; 2454 2455 m_sentStalledEvent = false; 2455 if (renderer()) 2456 renderer()->updateFromElement(); 2456 updateRenderer(); 2457 2457 if (hasMediaControls()) 2458 2458 mediaControls()->bufferingProgressed(); … … 4178 4178 #endif 4179 4179 if (mediaURL.isEmpty()) 4180 goto check_again;4180 goto CheckAgain; 4181 4181 4182 4182 if (source->fastHasAttribute(mediaAttr)) { … … 4186 4186 LOG(Media, "HTMLMediaElement::selectNextSourceChild(%p) - 'media' is %s", this, source->media().utf8().data()); 4187 4187 #endif 4188 if (media && !MediaQueryEvaluator { "screen", document(), renderer() ? &renderer()->style() : nullptr }.evaluate(*media)) 4189 goto check_again; 4188 if (media) { 4189 auto* renderer = this->renderer(); 4190 if (!MediaQueryEvaluator { "screen", document(), renderer ? &renderer->style() : nullptr }.evaluate(*media)) 4191 goto CheckAgain; 4192 } 4190 4193 } 4191 4194 … … 4214 4217 #endif 4215 4218 if (!MediaPlayer::supportsType(parameters, this)) 4216 goto check_again;4219 goto CheckAgain; 4217 4220 } 4218 4221 … … 4224 4227 LOG(Media, "HTMLMediaElement::selectNextSourceChild(%p) - 'beforeload' removed current element", this); 4225 4228 source = 0; 4226 goto check_again;4229 goto CheckAgain; 4227 4230 } 4228 4231 4229 4232 if (!okToLoadSourceURL) 4230 goto check_again;4233 goto CheckAgain; 4231 4234 4232 4235 // Making it this far means the <source> looks reasonable. 4233 4236 canUseSourceElement = true; 4234 4237 4235 check_again:4238 CheckAgain: 4236 4239 if (!canUseSourceElement && actionIfInvalid == Complain && source) 4237 4240 source->scheduleErrorEvent(); … … 4512 4515 beginProcessingMediaPlayerCallback(); 4513 4516 updateDisplayState(); 4514 if ( renderer())4515 renderer ()->repaint();4517 if (auto* renderer = this->renderer()) 4518 renderer->repaint(); 4516 4519 endProcessingMediaPlayerCallback(); 4517 4520 } … … 4527 4530 if (m_readyState > HAVE_NOTHING) 4528 4531 scheduleResizeEventIfSizeChanged(); 4529 if (renderer()) 4530 renderer()->updateFromElement(); 4532 updateRenderer(); 4531 4533 endProcessingMediaPlayerCallback(); 4532 4534 } … … 4534 4536 bool HTMLMediaElement::mediaPlayerRenderingCanBeAccelerated(MediaPlayer*) 4535 4537 { 4536 if (is<RenderVideo>(renderer()))4537 return renderer()->view().compositor().canAccelerateVideoRendering(downcast<RenderVideo>(*renderer()));4538 return false;4538 auto* renderer = this->renderer(); 4539 return is<RenderVideo>(renderer) 4540 && downcast<RenderVideo>(*renderer).view().compositor().canAccelerateVideoRendering(downcast<RenderVideo>(*renderer)); 4539 4541 } 4540 4542 … … 4548 4550 4549 4551 #if PLATFORM(WIN) && USE(AVFOUNDATION) 4552 4550 4553 GraphicsDeviceAdapter* HTMLMediaElement::mediaPlayerGraphicsDeviceAdapter(const MediaPlayer*) const 4551 4554 { 4552 if (!document().page()) 4553 return 0; 4554 4555 return document().page()->chrome().client().graphicsDeviceAdapter(); 4556 } 4555 auto* page = document().page(); 4556 if (!page) 4557 return nullptr; 4558 return page->chrome().client().graphicsDeviceAdapter(); 4559 } 4560 4557 4561 #endif 4558 4562 … … 4561 4565 LOG(Media, "HTMLMediaElement::mediaEngineWasUpdated(%p)", this); 4562 4566 beginProcessingMediaPlayerCallback(); 4563 if (renderer()) 4564 renderer()->updateFromElement(); 4567 updateRenderer(); 4565 4568 endProcessingMediaPlayerCallback(); 4566 4569 … … 4631 4634 if (hasMediaControls()) 4632 4635 mediaControls()->reset(); 4633 if (renderer()) 4634 renderer()->updateFromElement(); 4636 updateRenderer(); 4635 4637 4636 4638 if (isPlaying() && !m_mediaSession->playbackPermitted(*this)) … … 4896 4898 4897 4899 updateMediaController(); 4898 4899 if (renderer()) 4900 renderer()->updateFromElement(); 4900 updateRenderer(); 4901 4901 } 4902 4902 … … 5059 5059 userCancelledLoad(); 5060 5060 5061 if (renderer()) 5062 renderer()->updateFromElement(); 5063 5061 updateRenderer(); 5062 5064 5063 stopPeriodicTimers(); 5065 5064 … … 5142 5141 } 5143 5142 5144 if (renderer()) 5145 renderer()->updateFromElement(); 5143 updateRenderer(); 5146 5144 } 5147 5145 … … 6247 6245 LayoutRect HTMLMediaElement::mediaPlayerContentBoxRect() const 6248 6246 { 6249 if (renderer()) 6250 return renderer()->enclosingBox().contentBoxRect(); 6251 return LayoutRect(); 6247 auto* renderer = this->renderer(); 6248 if (!renderer) 6249 return { }; 6250 return renderer->enclosingBox().contentBoxRect(); 6252 6251 } 6253 6252 … … 7011 7010 return false; 7012 7011 7013 RenderElement* renderer = element.renderer();7012 auto* renderer = element.renderer(); 7014 7013 if (!renderer) 7015 7014 return false; -
trunk/Source/WebCore/html/HTMLMediaElement.h
r201474 r201588 24 24 */ 25 25 26 #ifndef HTMLMediaElement_h 27 #define HTMLMediaElement_h 26 #pragma once 28 27 29 28 #if ENABLE(VIDEO) 29 30 30 #include "HTMLElement.h" 31 31 #include "ActiveDOMObject.h" … … 56 56 namespace WebCore { 57 57 58 #if ENABLE(WEB_AUDIO)59 58 class AudioSourceProvider; 60 class MediaElementAudioSourceNode;61 #endif 59 class AudioTrackList; 60 class AudioTrackPrivate; 62 61 class DOMError; 63 62 class DisplaySleepDisabler; … … 65 64 class HTMLSourceElement; 66 65 class HTMLTrackElement; 67 class URL;66 class InbandTextTrackPrivate; 68 67 class MediaController; 69 68 class MediaControls; 70 69 class MediaControlsHost; 70 class MediaElementAudioSourceNode; 71 71 class MediaError; 72 class MediaKeys; 72 73 class MediaPlayer; 74 class MediaSession; 75 class MediaSource; 76 class MediaStream; 77 class RenderMedia; 78 class ScriptExecutionContext; 79 class SourceBuffer; 80 class TextTrackList; 73 81 class TimeRanges; 74 #if ENABLE(ENCRYPTED_MEDIA_V2) 75 class MediaKeys; 76 #endif 77 #if ENABLE(MEDIA_SESSION) 78 class MediaSession; 79 #endif 80 #if ENABLE(MEDIA_SOURCE) 81 class MediaSource; 82 class SourceBuffer; 82 class URL; 83 83 class VideoPlaybackQuality; 84 #endif85 86 #if ENABLE(VIDEO_TRACK)87 class AudioTrackList;88 class AudioTrackPrivate;89 class InbandTextTrackPrivate;90 class TextTrackList;91 84 class VideoTrackList; 92 85 class VideoTrackPrivate; 93 86 87 #if ENABLE(VIDEO_TRACK) 94 88 typedef PODIntervalTree<MediaTime, TextTrackCue*> CueIntervalTree; 95 89 typedef CueIntervalTree::IntervalType CueInterval; … … 97 91 #endif 98 92 99 #if ENABLE(MEDIA_STREAM)100 class MediaStream;101 class ScriptExecutionContext;102 #endif103 104 93 class HTMLMediaElement 105 94 : public HTMLElement 106 , private MediaPlayerClient, public MediaPlayerSupportsTypeClient, private MediaCanStartListener, public ActiveDOMObject, public MediaControllerInterface , public PlatformMediaSessionClient, private MediaProducer 95 , public ActiveDOMObject 96 , public MediaControllerInterface 97 , public MediaPlayerSupportsTypeClient 98 , public PlatformMediaSessionClient 99 , private MediaCanStartListener 100 , private MediaPlayerClient 101 , private MediaProducer 107 102 #if ENABLE(VIDEO_TRACK) 108 103 , private AudioTrackClient … … 467 462 void updateShouldPlay(); 468 463 464 RenderMedia* renderer() const; 465 469 466 protected: 470 HTMLMediaElement(const QualifiedName&, Document&, bool );467 HTMLMediaElement(const QualifiedName&, Document&, bool createdByParser); 471 468 virtual ~HTMLMediaElement(); 472 469 … … 657 654 virtual void scheduleResizeEventIfSizeChanged() { } 658 655 659 // loading660 656 void selectMediaResource(); 661 657 void loadResource(const URL&, ContentType&, const String& keySystem); … … 746 742 #endif 747 743 748 // PlatformMediaSessionClient Overrides749 744 PlatformMediaSession::MediaType mediaType() const override; 750 745 PlatformMediaSession::MediaType presentationType() const override; … … 777 772 void resumeFromDocumentSuspension() final; 778 773 779 enum class UpdateMediaState { 780 Asynchronously, 781 Synchronously, 782 }; 774 enum class UpdateMediaState { Asynchronously, Synchronously }; 783 775 void updateMediaState(UpdateMediaState updateState = UpdateMediaState::Synchronously); 784 776 bool hasPlaybackTargetAvailabilityListeners() const { return m_hasPlaybackTargetAvailabilityListeners; } … … 790 782 void pauseAfterDetachedTask(); 791 783 void updatePlaybackControlsManager(); 784 785 void updateRenderer(); 792 786 793 787 Timer m_pendingActionTimer; … … 853 847 bool m_preparedForInline; 854 848 std::function<void()> m_preparedForInlineCompletionHandler; 849 855 850 #if PLATFORM(IOS) || (PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)) 856 851 RetainPtr<PlatformLayer> m_videoFullscreenLayer; … … 1036 1031 1037 1032 #endif 1038 #endif -
trunk/Source/WebCore/html/HTMLSelectElement.cpp
r201205 r201588 392 392 setRecalcListItems(); 393 393 updateValidity(); 394 395 if (renderer()) { 396 if (AXObjectCache* cache = renderer()->document().existingAXObjectCache()) 397 cache->childrenChanged(this); 398 } 394 if (auto* cache = document().existingAXObjectCache()) 395 cache->childrenChanged(this); 399 396 } 400 397 … … 470 467 } while (++diff); 471 468 } else { 472 const Vector<HTMLElement*>& items = listItems();469 auto& items = listItems(); 473 470 474 471 // Removing children fires mutation events, which might mutate the DOM further, so we first copy out a list … … 512 509 { 513 510 ASSERT(direction == -1 || direction == 1); 514 const Vector<HTMLElement*>& listItems = this->listItems();511 auto& listItems = this->listItems(); 515 512 int lastGoodIndex = listIndex; 516 513 int size = listItems.size(); … … 540 537 int HTMLSelectElement::firstSelectableListIndex() const 541 538 { 542 const Vector<HTMLElement*>& items = listItems();539 auto& items = listItems(); 543 540 int index = nextValidIndex(items.size(), SkipBackwards, INT_MAX); 544 541 if (static_cast<size_t>(index) == items.size()) … … 555 552 int HTMLSelectElement::nextSelectableListIndexPageAway(int startIndex, SkipDirection direction) const 556 553 { 557 const Vector<HTMLElement*>& items = listItems(); 554 auto& items = listItems(); 555 558 556 // Can't use m_size because renderer forces a minimum size. 559 557 int pageSize = 0; 560 if (is<RenderListBox>(*renderer())) 561 pageSize = downcast<RenderListBox>(*renderer()).size() - 1; // -1 so we still show context. 558 auto* renderer = this->renderer(); 559 if (is<RenderListBox>(*renderer)) 560 pageSize = downcast<RenderListBox>(*renderer).size() - 1; // -1 so we still show context. 562 561 563 562 // One page away, but not outside valid bounds. … … 621 620 void HTMLSelectElement::updateListBoxSelection(bool deselectOtherOptions) 622 621 { 622 ASSERT(renderer()); 623 623 624 #if !PLATFORM(IOS) 624 ASSERT(renderer() && (renderer()->isListBox() || m_multiple));625 ASSERT(renderer()->isListBox() || m_multiple); 625 626 #else 626 ASSERT(renderer() && (renderer()->isMenuList() || m_multiple));627 ASSERT(renderer()->isMenuList() || m_multiple); 627 628 #endif 629 628 630 ASSERT(!listItems().size() || m_activeSelectionAnchorIndex >= 0); 629 631 … … 631 633 unsigned end = std::max(m_activeSelectionAnchorIndex, m_activeSelectionEndIndex); 632 634 633 const Vector<HTMLElement*>& items = listItems();635 auto& items = listItems(); 634 636 for (unsigned i = 0; i < items.size(); ++i) { 635 HTMLElement* element =items[i];636 if (!is<HTMLOptionElement>( *element) || downcast<HTMLOptionElement>(*element).isDisabledFormControl())637 auto& element = *items[i]; 638 if (!is<HTMLOptionElement>(element) || downcast<HTMLOptionElement>(element).isDisabledFormControl()) 637 639 continue; 638 640 639 641 if (i >= start && i <= end) 640 downcast<HTMLOptionElement>( *element).setSelectedState(m_activeSelectionState);642 downcast<HTMLOptionElement>(element).setSelectedState(m_activeSelectionState); 641 643 else if (deselectOtherOptions || i >= m_cachedStateForActiveSelection.size()) 642 downcast<HTMLOptionElement>( *element).setSelectedState(false);644 downcast<HTMLOptionElement>(element).setSelectedState(false); 643 645 else 644 downcast<HTMLOptionElement>( *element).setSelectedState(m_cachedStateForActiveSelection[i]);646 downcast<HTMLOptionElement>(element).setSelectedState(m_cachedStateForActiveSelection[i]); 645 647 } 646 648 … … 653 655 ASSERT(!usesMenuList() || m_multiple); 654 656 655 const Vector<HTMLElement*>& items = listItems();657 auto& items = listItems(); 656 658 657 659 // If the cached selection list is empty, or the size has changed, then fire … … 665 667 bool fireOnChange = false; 666 668 for (unsigned i = 0; i < items.size(); ++i) { 667 HTMLElement* element =items[i];668 bool selected = is<HTMLOptionElement>( *element) && downcast<HTMLOptionElement>(*element).selected();669 auto& element = *items[i]; 670 bool selected = is<HTMLOptionElement>(element) && downcast<HTMLOptionElement>(element).selected(); 669 671 if (selected != m_lastOnChangeSelection[i]) 670 672 fireOnChange = true; … … 755 757 if (!inDocument()) 756 758 invalidateSelectedItems(); 757 758 if (renderer()) { 759 if (AXObjectCache* cache = renderer()->document().existingAXObjectCache()) 760 cache->childrenChanged(this); 761 } 759 if (auto* cache = document().existingAXObjectCache()) 760 cache->childrenChanged(this); 762 761 } 763 762 … … 858 857 bool shouldDeselect = !m_multiple || (flags & DeselectOtherOptions); 859 858 860 const Vector<HTMLElement*>& items = listItems();859 auto& items = listItems(); 861 860 int listIndex = optionToListIndex(optionIndex); 862 861 863 862 HTMLElement* element = nullptr; 864 if (listIndex >= 0) {863 if (listIndex >= 0) 865 864 element = items[listIndex]; 866 }867 865 868 866 if (shouldDeselect) … … 900 898 int HTMLSelectElement::optionToListIndex(int optionIndex) const 901 899 { 902 const Vector<HTMLElement*>& items = listItems();900 auto& items = listItems(); 903 901 int listSize = static_cast<int>(items.size()); 904 902 if (optionIndex < 0 || optionIndex >= listSize) … … 919 917 int HTMLSelectElement::listToOptionIndex(int listIndex) const 920 918 { 921 const Vector<HTMLElement*>& items = listItems();919 auto& items = listItems(); 922 920 if (listIndex < 0 || listIndex >= static_cast<int>(items.size()) || !is<HTMLOptionElement>(*items[listIndex])) 923 921 return -1; … … 978 976 size_t HTMLSelectElement::searchOptionsForValue(const String& value, size_t listIndexStart, size_t listIndexEnd) const 979 977 { 980 const Vector<HTMLElement*>& items = listItems();978 auto& items = listItems(); 981 979 size_t loopEndIndex = std::min(items.size(), listIndexEnd); 982 980 for (size_t i = listIndexStart; i < loopEndIndex; ++i) { … … 993 991 recalcListItems(); 994 992 995 const Vector<HTMLElement*>& items = listItems();993 auto& items = listItems(); 996 994 size_t itemsSize = items.size(); 997 995 if (!itemsSize) … … 1086 1084 1087 1085 #if !PLATFORM(WIN) 1086 1088 1087 bool HTMLSelectElement::platformHandleKeydownEvent(KeyboardEvent* event) 1089 1088 { … … 1100 1099 // that our caller doesn't process the event further, but don't set 1101 1100 // the event as handled. 1102 if (!is<RenderMenuList>(renderer())) 1101 auto* renderer = this->renderer(); 1102 if (!is<RenderMenuList>(renderer)) 1103 1103 return true; 1104 1104 … … 1108 1108 // after the user makes a selection from the menu. 1109 1109 saveLastSelection(); 1110 downcast<RenderMenuList>(*renderer ()).showPopup();1110 downcast<RenderMenuList>(*renderer).showPopup(); 1111 1111 event->setDefaultHandled(); 1112 1112 } … … 1116 1116 return false; 1117 1117 } 1118 1118 1119 #endif 1119 1120 1120 1121 void HTMLSelectElement::menuListDefaultEventHandler(Event* event) 1121 1122 { 1122 ASSERT(renderer() && renderer()->isMenuList()); 1123 ASSERT(renderer()); 1124 ASSERT(renderer()->isMenuList()); 1123 1125 1124 1126 const Page* page = document().page(); … … 1143 1145 const String& keyIdentifier = keyboardEvent.keyIdentifier(); 1144 1146 bool handled = true; 1145 const Vector<HTMLElement*>& listItems = this->listItems();1147 auto& listItems = this->listItems(); 1146 1148 int listIndex = optionToListIndex(selectedIndex()); 1147 1149 … … 1197 1199 focus(); 1198 1200 1199 // Calling focus() may remove the renderer or change the 1200 // renderer type.1201 if (!is<RenderMenuList>(renderer ()))1201 // Calling focus() may remove the renderer or change the renderer type. 1202 auto* renderer = this->renderer(); 1203 if (!is<RenderMenuList>(renderer)) 1202 1204 return; 1203 1205 … … 1207 1209 // after the user makes a selection from the menu. 1208 1210 saveLastSelection(); 1209 downcast<RenderMenuList>(*renderer ()).showPopup();1211 downcast<RenderMenuList>(*renderer).showPopup(); 1210 1212 handled = true; 1211 1213 } … … 1214 1216 focus(); 1215 1217 1216 // Calling focus() may remove the renderer or change the 1217 // renderer type.1218 if (!is<RenderMenuList>(renderer ()))1218 // Calling focus() may remove the renderer or change the renderer type. 1219 auto* renderer = this->renderer(); 1220 if (!is<RenderMenuList>(renderer)) 1219 1221 return; 1220 1222 … … 1224 1226 // after the user makes a selection from the menu. 1225 1227 saveLastSelection(); 1226 downcast<RenderMenuList>(*renderer ()).showPopup();1228 downcast<RenderMenuList>(*renderer).showPopup(); 1227 1229 handled = true; 1228 1230 } else if (keyCode == '\r') { … … 1241 1243 focus(); 1242 1244 #if !PLATFORM(IOS) 1243 if (is<RenderMenuList>(renderer())) { 1244 auto& menuList = downcast<RenderMenuList>(*renderer()); 1245 auto* renderer = this->renderer(); 1246 if (is<RenderMenuList>(renderer)) { 1247 auto& menuList = downcast<RenderMenuList>(*renderer); 1245 1248 ASSERT(!menuList.popupIsVisible()); 1246 1249 // Save the selection so it can be compared to the new … … 1278 1281 bool multiSelect = m_multiple && multi && !shift; 1279 1282 1280 HTMLElement* clickedElement =listItems()[listIndex];1281 if (is<HTMLOptionElement>( *clickedElement)) {1283 auto& clickedElement = *listItems()[listIndex]; 1284 if (is<HTMLOptionElement>(clickedElement)) { 1282 1285 // Keep track of whether an active selection (like during drag 1283 1286 // selection), should select or deselect. 1284 if (downcast<HTMLOptionElement>( *clickedElement).selected() && multiSelect)1287 if (downcast<HTMLOptionElement>(clickedElement).selected() && multiSelect) 1285 1288 m_activeSelectionState = false; 1286 1289 if (!m_activeSelectionState) 1287 downcast<HTMLOptionElement>( *clickedElement).setSelectedState(false);1290 downcast<HTMLOptionElement>(clickedElement).setSelectedState(false); 1288 1291 } 1289 1292 … … 1292 1295 // this will deselect all items in the list. 1293 1296 if (!shiftSelect && !multiSelect) 1294 deselectItemsWithoutValidation( clickedElement);1297 deselectItemsWithoutValidation(&clickedElement); 1295 1298 1296 1299 // If the anchor hasn't been set, and we're doing a single selection or a … … 1300 1303 1301 1304 // Set the selection state of the clicked option. 1302 if (is<HTMLOptionElement>( *clickedElement) && !downcast<HTMLOptionElement>(*clickedElement).isDisabledFormControl())1303 downcast<HTMLOptionElement>( *clickedElement).setSelectedState(true);1305 if (is<HTMLOptionElement>(clickedElement) && !downcast<HTMLOptionElement>(clickedElement).isDisabledFormControl()) 1306 downcast<HTMLOptionElement>(clickedElement).setSelectedState(true); 1304 1307 1305 1308 // If there was no selectedIndex() for the previous initialization, or If … … 1316 1319 void HTMLSelectElement::listBoxDefaultEventHandler(Event* event) 1317 1320 { 1318 const Vector<HTMLElement*>& listItems = this->listItems();1321 auto& listItems = this->listItems(); 1319 1322 1320 1323 if (event->type() == eventNames().mousedownEvent && is<MouseEvent>(*event) && downcast<MouseEvent>(*event).button() == LeftButton) { 1321 1324 focus(); 1325 1322 1326 // Calling focus() may remove or change our renderer, in which case we don't want to handle the event further. 1323 if (!is<RenderListBox>(renderer())) 1327 auto* renderer = this->renderer(); 1328 if (!is<RenderListBox>(renderer)) 1324 1329 return; 1330 auto& renderListBox = downcast<RenderListBox>(*renderer); 1325 1331 1326 1332 // Convert to coords relative to the list box if needed. 1327 1333 MouseEvent& mouseEvent = downcast<MouseEvent>(*event); 1328 IntPoint localOffset = roundedIntPoint(render er()->absoluteToLocal(mouseEvent.absoluteLocation(), UseTransforms));1329 int listIndex = downcast<RenderListBox>(*renderer()).listIndexAtOffset(toIntSize(localOffset));1334 IntPoint localOffset = roundedIntPoint(renderListBox.absoluteToLocal(mouseEvent.absoluteLocation(), UseTransforms)); 1335 int listIndex = renderListBox.listIndexAtOffset(toIntSize(localOffset)); 1330 1336 if (listIndex >= 0) { 1331 1337 if (!isDisabledFormControl()) { … … 1341 1347 mouseEvent.setDefaultHandled(); 1342 1348 } 1343 } else if (event->type() == eventNames().mousemoveEvent && is<MouseEvent>(*event) && !downcast<Render Box>(*renderer()).canBeScrolledAndHasScrollableArea()) {1349 } else if (event->type() == eventNames().mousemoveEvent && is<MouseEvent>(*event) && !downcast<RenderListBox>(*renderer()).canBeScrolledAndHasScrollableArea()) { 1344 1350 MouseEvent& mouseEvent = downcast<MouseEvent>(*event); 1345 1351 if (mouseEvent.button() != LeftButton || !mouseEvent.buttonDown()) 1346 1352 return; 1347 1353 1348 IntPoint localOffset = roundedIntPoint(renderer()->absoluteToLocal(mouseEvent.absoluteLocation(), UseTransforms)); 1349 int listIndex = downcast<RenderListBox>(*renderer()).listIndexAtOffset(toIntSize(localOffset)); 1354 auto& renderListBox = downcast<RenderListBox>(*renderer()); 1355 IntPoint localOffset = roundedIntPoint(renderListBox.absoluteToLocal(mouseEvent.absoluteLocation(), UseTransforms)); 1356 int listIndex = renderListBox.listIndexAtOffset(toIntSize(localOffset)); 1350 1357 if (listIndex >= 0) { 1351 1358 if (!isDisabledFormControl()) { … … 1489 1496 void HTMLSelectElement::defaultEventHandler(Event* event) 1490 1497 { 1491 if (!renderer()) 1498 auto* renderer = this->renderer(); 1499 if (!renderer) 1492 1500 return; 1493 1501 … … 1498 1506 } 1499 1507 1500 if (renderer ()->isMenuList())1508 if (renderer->isMenuList()) 1501 1509 menuListDefaultEventHandler(event); 1502 1510 else … … 1521 1529 int HTMLSelectElement::lastSelectedListIndex() const 1522 1530 { 1523 const Vector<HTMLElement*>& items = listItems();1531 auto& items = listItems(); 1524 1532 for (size_t i = items.size(); i;) { 1525 HTMLElement* element =items[--i];1526 if (is<HTMLOptionElement>( *element) && downcast<HTMLOptionElement>(*element).selected())1533 auto& element = *items[--i]; 1534 if (is<HTMLOptionElement>(element) && downcast<HTMLOptionElement>(element).selected()) 1527 1535 return i; 1528 1536 } … … 1542 1550 String HTMLSelectElement::optionAtIndex(int index) const 1543 1551 { 1544 const Vector<HTMLElement*>& items = listItems(); 1545 1546 HTMLElement* element = items[index]; 1547 if (!is<HTMLOptionElement>(*element) || downcast<HTMLOptionElement>(*element).isDisabledFormControl()) 1552 auto& element = *listItems()[index]; 1553 if (!is<HTMLOptionElement>(element) || downcast<HTMLOptionElement>(element).isDisabledFormControl()) 1548 1554 return String(); 1549 return downcast<HTMLOptionElement>( *element).textIndentedToRespectGroupLabel();1555 return downcast<HTMLOptionElement>(element).textIndentedToRespectGroupLabel(); 1550 1556 } 1551 1557 … … 1576 1582 1577 1583 // If this index is already selected, unselect. otherwise update the selected index. 1578 const Vector<HTMLElement*>& items = listItems();1584 auto& items = listItems(); 1579 1585 int listIndex = optionToListIndex(index); 1580 1586 if (listIndex >= 0) { 1581 HTMLElement* element =items[listIndex];1582 if (is<HTMLOptionElement>( *element)) {1583 if (downcast<HTMLOptionElement>( *element).selected())1584 downcast<HTMLOptionElement>( *element).setSelectedState(false);1587 auto& element = *items[listIndex]; 1588 if (is<HTMLOptionElement>(element)) { 1589 if (downcast<HTMLOptionElement>(element).selected()) 1590 downcast<HTMLOptionElement>(element).setSelectedState(false); 1585 1591 else 1586 1592 selectOption(index, DispatchChangeEvent | UserDriven); … … 1600 1606 unsigned options = 0; 1601 1607 1602 const Vector<HTMLElement*>& items = listItems();1608 auto& items = listItems(); 1603 1609 for (unsigned i = 0; i < items.size(); ++i) { 1604 1610 if (is<HTMLOptionElement>(*items[i])) -
trunk/Source/WebCore/html/HTMLTextAreaElement.h
r200041 r201588 22 22 */ 23 23 24 #ifndef HTMLTextAreaElement_h 25 #define HTMLTextAreaElement_h 24 #pragma once 26 25 27 26 #include "HTMLTextFormControlElement.h" … … 30 29 31 30 class BeforeTextInsertedEvent; 31 class RenderTextControlMultiLine; 32 32 class VisibleSelection; 33 33 … … 63 63 64 64 bool willRespondToMouseClickEvents() override; 65 66 RenderTextControlMultiLine* renderer() const; 65 67 66 68 private: … … 133 135 134 136 } //namespace 135 136 #endif -
trunk/Source/WebCore/html/HTMLVideoElement.cpp
r200361 r201588 25 25 26 26 #include "config.h" 27 27 28 #if ENABLE(VIDEO) 29 28 30 #include "HTMLVideoElement.h" 29 31 … … 88 90 m_imageLoader = std::make_unique<HTMLImageLoader>(*this); 89 91 m_imageLoader->updateFromElement(); 90 if ( renderer())91 downcast<RenderImage>(*renderer()).imageResource().setCachedImage(m_imageLoader->image());92 if (auto* renderer = this->renderer()) 93 renderer->imageResource().setCachedImage(m_imageLoader->image()); 92 94 } 93 95 } … … 122 124 m_imageLoader->updateFromElementIgnoringPreviousError(); 123 125 } else { 124 if ( renderer())125 downcast<RenderImage>(*renderer()).imageResource().setCachedImage(nullptr);126 if (auto* renderer = this->renderer()) 127 renderer->imageResource().setCachedImage(nullptr); 126 128 } 127 129 } … … 247 249 } 248 250 249 if (renderer() && displayMode() != oldMode) 250 renderer()->updateFromElement(); 251 if (auto* renderer = this->renderer()) { 252 if (displayMode() != oldMode) 253 renderer->updateFromElement(); 254 } 251 255 } 252 256 -
trunk/Source/WebCore/html/HTMLVideoElement.h
r200361 r201588 34 34 35 35 class HTMLImageLoader; 36 class RenderVideo; 36 37 37 38 class HTMLVideoElement final : public HTMLMediaElement { 38 39 public: 39 static Ref<HTMLVideoElement> create(const QualifiedName&, Document&, bool );40 static Ref<HTMLVideoElement> create(const QualifiedName&, Document&, bool createdByParser); 40 41 41 42 WEBCORE_EXPORT unsigned videoWidth() const; … … 91 92 #endif 92 93 94 RenderVideo* renderer() const; 95 93 96 private: 94 HTMLVideoElement(const QualifiedName&, Document&, bool );97 HTMLVideoElement(const QualifiedName&, Document&, bool createdByParser); 95 98 96 99 void scheduleResizeEvent() override; -
trunk/Source/WebCore/html/HTMLWBRElement.h
r200041 r201588 24 24 */ 25 25 26 #ifndef HTMLWBRElement_h 27 #define HTMLWBRElement_h 26 #pragma once 28 27 29 28 #include "HTMLElement.h" … … 31 30 namespace WebCore { 32 31 32 class RenderLineBreak; 33 33 34 class HTMLWBRElement final : public HTMLElement { 34 35 public: 35 36 static Ref<HTMLWBRElement> create(const QualifiedName&, Document&); 37 38 RenderLineBreak* renderer() const; 36 39 37 40 private: … … 42 45 43 46 } // namespace WebCore 44 45 #endif // HTMLWBRElement_h46 -
trunk/Source/WebCore/html/MediaElementSession.cpp
r201167 r201588 44 44 #include "Page.h" 45 45 #include "PlatformMediaSessionManager.h" 46 #include "RenderMedia.h" 46 47 #include "RenderView.h" 47 48 #include "ScriptController.h" … … 229 230 return false; 230 231 231 RenderBox* renderer = downcast<RenderBox>(element.renderer()); 232 if (!renderer) 232 if (!element.renderer()) 233 233 return false; 234 234 … … 511 511 512 512 // Elements which have not yet been laid out, or which are not yet in the DOM, cannot be main content. 513 RenderBox* renderer = downcast<RenderBox>(element.renderer());513 auto* renderer = element.renderer(); 514 514 if (!renderer) 515 515 return false; … … 521 521 // But elements which have audio & video and are already playing should not stop playing because 522 522 // they are scrolled off the page. 523 if (renderer->style().visibility() != VISIBLE 524 || (renderer->visibleInViewportState() != RenderElement::VisibleInViewport && !element.isPlaying()) 525 ) { 526 return false; 527 } 523 if (renderer->style().visibility() != VISIBLE) 524 return false; 525 if (renderer->visibleInViewportState() != RenderElement::VisibleInViewport && !element.isPlaying()) 526 return false; 528 527 529 528 // Main content elements must be in the main frame. … … 562 561 563 562 // Elements which have not yet been laid out, or which are not yet in the DOM, cannot be main content. 564 RenderBox* renderer = downcast<RenderBox>(element.renderer());563 auto* renderer = element.renderer(); 565 564 if (!renderer) 566 565 return false; -
trunk/Source/WebCore/html/TextFieldInputType.cpp
r200041 r201588 194 194 element().document().updateStyleIfNeeded(); 195 195 196 auto* renderer = element().renderer(); 196 197 if (element().renderer()) { 197 RenderTextControlSingleLine& renderTextControl = downcast<RenderTextControlSingleLine>(*element().renderer());198 198 if (event->type() == eventNames().blurEvent) { 199 if (RenderTextControlInnerBlock* innerTextRenderer = innerTextElement()->renderer()) { 200 if (RenderLayer* innerLayer = innerTextRenderer->layer()) { 201 ScrollOffset scrollOffset(!renderTextControl.style().isLeftToRightDirection() ? innerLayer->scrollWidth() : 0, 0); 199 if (auto* innerTextRenderer = innerTextElement()->renderer()) { 200 if (auto* innerLayer = innerTextRenderer->layer()) { 201 bool isLeftToRightDirection = downcast<RenderTextControlSingleLine>(*renderer).style().isLeftToRightDirection(); 202 ScrollOffset scrollOffset(isLeftToRightDirection ? 0 : innerLayer->scrollWidth(), 0); 202 203 innerLayer->scrollToOffset(scrollOffset, RenderLayer::ScrollOffsetClamped); 203 204 } 204 205 } 205 206 206 capsLockStateMayHaveChanged(); 207 207 } else if (event->type() == eventNames().focusEvent) -
trunk/Source/WebCore/html/shadow/SliderThumbElement.cpp
r200895 r201588 254 254 { 255 255 RefPtr<HTMLInputElement> input = hostInput(); 256 if (!input || !input->renderer() || !renderBox()) 257 return; 258 259 HTMLElement* trackElement = input->sliderTrackElement(); 260 if (!trackElement->renderBox()) 256 if (!input) 257 return; 258 259 auto* inputRenderer = input->renderBox(); 260 if (!inputRenderer) 261 return; 262 263 auto* thumbRenderer = renderBox(); 264 if (!thumbRenderer) 265 return; 266 267 ASSERT(input->sliderTrackElement()); 268 auto* trackRenderer = input->sliderTrackElement()->renderBox(); 269 if (!trackRenderer) 261 270 return; 262 271 263 272 // Do all the tracking math relative to the input's renderer's box. 264 RenderBox& inputRenderer = downcast<RenderBox>(*input->renderer());265 RenderBox& trackRenderer = *trackElement->renderBox();266 273 267 274 bool isVertical = hasVerticalAppearance(*input); 268 bool isLeftToRightDirection = renderBox()->style().isLeftToRightDirection();275 bool isLeftToRightDirection = thumbRenderer->style().isLeftToRightDirection(); 269 276 270 LayoutPoint offset(inputRenderer.absoluteToLocal(absolutePoint, UseTransforms));271 FloatRect trackBoundingBox = trackRenderer.localToContainerQuad(FloatRect(0, 0, trackRenderer.width(), trackRenderer.height()), &inputRenderer).enclosingBoundingBox();277 auto offset = inputRenderer->absoluteToLocal(absolutePoint, UseTransforms); 278 auto trackBoundingBox = trackRenderer->localToContainerQuad(FloatRect { { }, trackRenderer->size() }, inputRenderer).enclosingBoundingBox(); 272 279 273 280 LayoutUnit trackLength; 274 281 LayoutUnit position; 275 282 if (isVertical) { 276 trackLength = trackRenderer .contentHeight() - renderBox()->height();277 position = offset.y() - renderBox()->height() / 2 - trackBoundingBox.y() - renderBox()->marginBottom();283 trackLength = trackRenderer->contentHeight() - thumbRenderer->height(); 284 position = offset.y() - thumbRenderer->height() / 2 - trackBoundingBox.y() - thumbRenderer->marginBottom(); 278 285 } else { 279 trackLength = trackRenderer .contentWidth() - renderBox()->width();280 position = offset.x() - renderBox()->width() / 2 - trackBoundingBox.x();281 position -= isLeftToRightDirection ? renderBox()->marginLeft() : renderBox()->marginRight();286 trackLength = trackRenderer->contentWidth() - thumbRenderer->width(); 287 position = offset.x() - thumbRenderer->width() / 2 - trackBoundingBox.x(); 288 position -= isLeftToRightDirection ? thumbRenderer->marginLeft() : thumbRenderer->marginRight(); 282 289 } 283 290 284 291 position = std::max<LayoutUnit>(0, std::min(position, trackLength)); 285 const Decimalratio = Decimal::fromDouble(static_cast<double>(position) / trackLength);286 const Decimalfraction = isVertical || !isLeftToRightDirection ? Decimal(1) - ratio : ratio;287 StepRange stepRange(input->createStepRange(RejectAny));288 Decimalvalue = stepRange.clampValue(stepRange.valueFromProportion(fraction));292 auto ratio = Decimal::fromDouble(static_cast<double>(position) / trackLength); 293 auto fraction = isVertical || !isLeftToRightDirection ? Decimal(1) - ratio : ratio; 294 auto stepRange = input->createStepRange(RejectAny); 295 auto value = stepRange.clampValue(stepRange.valueFromProportion(fraction)); 289 296 290 297 #if ENABLE(DATALIST_ELEMENT) -
trunk/Source/WebCore/html/shadow/TextControlInnerElements.cpp
r200098 r201588 179 179 { 180 180 // On mousedown, bring up a menu, if needed 181 HTMLInputElement* input = downcast<HTMLInputElement>(shadowHost());181 auto* input = downcast<HTMLInputElement>(shadowHost()); 182 182 if (input && event->type() == eventNames().mousedownEvent && is<MouseEvent>(*event) && downcast<MouseEvent>(*event).button() == LeftButton) { 183 183 input->focus(); 184 184 input->select(); 185 185 #if !PLATFORM(IOS) 186 if ( RenderObject* renderer = input->renderer()) {187 RenderSearchField& searchFieldRenderer = downcast<RenderSearchField>(*renderer);186 if (auto* renderer = input->renderer()) { 187 auto& searchFieldRenderer = downcast<RenderSearchField>(*renderer); 188 188 if (searchFieldRenderer.popupIsVisible()) 189 189 searchFieldRenderer.hidePopup(); -
trunk/Source/WebCore/page/EventHandler.cpp
r201384 r201588 1776 1776 static ScrollableArea* enclosingScrollableArea(Node* node) 1777 1777 { 1778 if (!node) 1779 return nullptr; 1780 1781 for (auto element = node; element; element = element->parentOrShadowHostNode()) { 1782 if (is<HTMLIFrameElement>(*element) || is<HTMLHtmlElement>(*element) || is<HTMLDocument>(*element)) 1778 for (auto ancestor = node; ancestor; ancestor = ancestor->parentOrShadowHostNode()) { 1779 if (is<HTMLIFrameElement>(*ancestor) || is<HTMLHtmlElement>(*ancestor) || is<HTMLDocument>(*ancestor)) 1783 1780 return nullptr; 1784 1781 1785 auto renderer = element->renderer();1782 auto renderer = ancestor->renderer(); 1786 1783 if (!renderer) 1787 1784 continue; -
trunk/Source/WebCore/page/PrintContext.cpp
r199964 r201588 223 223 } 224 224 225 static RenderBoxModelObject* enclosingBoxModelObject(RenderObject* object) 226 { 227 228 while (object && !is<RenderBoxModelObject>(*object)) 229 object = object->parent(); 230 if (!object) 231 return nullptr; 232 return downcast<RenderBoxModelObject>(object); 225 static inline RenderBoxModelObject* enclosingBoxModelObject(RenderElement* renderer) 226 { 227 while (renderer && !is<RenderBoxModelObject>(*renderer)) 228 renderer = renderer->parent(); 229 return downcast<RenderBoxModelObject>(renderer); 233 230 } 234 231 … … 239 236 element->document().updateLayout(); 240 237 241 RenderBoxModelObject* box = enclosingBoxModelObject(element->renderer());238 auto* box = enclosingBoxModelObject(element->renderer()); 242 239 if (!box) 243 240 return -1; -
trunk/Source/WebCore/page/SpatialNavigation.cpp
r201205 r201588 420 420 bool isScrollableNode(const Node* node) 421 421 { 422 if (!node) 423 return false; 422 424 ASSERT(!node->isDocumentNode()); 423 424 if (!node) 425 return false; 426 427 if (RenderObject* renderer = node->renderer()) 428 return is<RenderBox>(*renderer) && downcast<RenderBox>(*renderer).canBeScrolledAndHasScrollableArea() && node->hasChildNodes(); 429 430 return false; 425 auto* renderer = node->renderer(); 426 return is<RenderBox>(renderer) && downcast<RenderBox>(*renderer).canBeScrolledAndHasScrollableArea() && node->hasChildNodes(); 431 427 } 432 428 -
trunk/Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm
r201474 r201588 42 42 #import <WebCore/FrameView.h> 43 43 #import <WebCore/HTMLVideoElement.h> 44 #import <WebCore/Render Element.h>44 #import <WebCore/RenderVideo.h> 45 45 #import <WebCore/WebCoreThreadRun.h> 46 46 … … 82 82 static IntRect elementRectInWindow(HTMLVideoElement* videoElement) 83 83 { 84 if (!videoElement || !videoElement->renderer() || !videoElement->document().view()) 85 return IntRect(); 86 87 return videoElement->document().view()->convertToContainingWindow(videoElement->renderer()->absoluteBoundingBoxRect()); 84 if (!videoElement) 85 return { }; 86 auto* renderer = videoElement->renderer(); 87 auto* view = videoElement->document().view(); 88 if (!renderer || !view) 89 return { }; 90 return view->convertToContainingWindow(renderer->absoluteBoundingBoxRect()); 88 91 } 89 92 -
trunk/Source/WebCore/rendering/RenderAttachment.h
r200041 r201588 24 24 */ 25 25 26 #ifndef RenderAttachment_h 27 #define RenderAttachment_h 26 #pragma once 28 27 29 28 #if ENABLE(ATTACHMENT_ELEMENT) 30 29 30 #include "HTMLAttachmentElement.h" 31 31 #include "RenderReplaced.h" 32 32 33 33 namespace WebCore { 34 35 class HTMLAttachmentElement;36 34 37 35 class RenderAttachment final : public RenderReplaced { … … 55 53 }; 56 54 55 inline RenderAttachment* HTMLAttachmentElement::renderer() const 56 { 57 return downcast<RenderAttachment>(HTMLElement::renderer()); 58 } 59 57 60 } // namespace WebCore 58 61 … … 60 63 61 64 #endif // ENABLE(ATTACHMENT_ELEMENT) 62 #endif // RenderAttachment_h -
trunk/Source/WebCore/rendering/RenderFrame.cpp
r200041 r201588 26 26 27 27 #include "HTMLFrameElement.h" 28 #include "RenderFrameSet.h" 28 29 29 30 namespace WebCore { -
trunk/Source/WebCore/rendering/RenderFrame.h
r200041 r201588 21 21 */ 22 22 23 #ifndef RenderFrame_h 24 #define RenderFrame_h 23 #pragma once 25 24 25 #include "HTMLFrameElement.h" 26 26 #include "RenderFrameBase.h" 27 #include "RenderFrameSet.h"28 27 29 28 namespace WebCore { 30 29 31 class HTMLFrameElement;30 struct FrameEdgeInfo; 32 31 33 32 class RenderFrame final : public RenderFrameBase { … … 38 37 FrameEdgeInfo edgeInfo() const; 39 38 39 void updateFromElement() final; 40 40 41 private: 41 42 void frameOwnerElement() const = delete; 42 43 43 const char* renderName() const override { return "RenderFrame"; } 44 bool isFrame() const override { return true; } 44 const char* renderName() const final { return "RenderFrame"; } 45 bool isFrame() const final { return true; } 46 }; 45 47 46 void updateFromElement() override; 47 }; 48 inline RenderFrame* HTMLFrameElement::renderer() const 49 { 50 return downcast<RenderFrame>(HTMLFrameElementBase::renderer()); 51 } 48 52 49 53 } // namespace WebCore 50 54 51 55 SPECIALIZE_TYPE_TRAITS_RENDER_OBJECT(RenderFrame, isFrame()) 52 53 #endif // RenderFrame_h -
trunk/Source/WebCore/rendering/RenderLayerFilterInfo.cpp
r186392 r201588 107 107 } else { 108 108 // Reference is internal; add layer as a client so we can trigger filter repaint on SVG attribute change. 109 Element* filter = m_layer.renderer().document().getElementById(referenceOperation.fragment());110 if (!filter || !is<RenderSVGResourceFilter>(filter->renderer()))109 auto* filter = m_layer.renderer().document().getElementById(referenceOperation.fragment()); 110 if (!filter) 111 111 continue; 112 downcast<RenderSVGResourceFilter>(*filter->renderer()).addClientRenderLayer(&m_layer); 112 auto* renderer = filter->renderer(); 113 if (!is<RenderSVGResourceFilter>(renderer)) 114 continue; 115 downcast<RenderSVGResourceFilter>(*renderer).addClientRenderLayer(&m_layer); 113 116 m_internalSVGReferences.append(filter); 114 117 } -
trunk/Source/WebCore/rendering/RenderMedia.h
r200041 r201588 24 24 */ 25 25 26 #ifndef RenderMedia_h 27 #define RenderMedia_h 26 #pragma once 28 27 29 28 #if ENABLE(VIDEO) … … 61 60 }; 62 61 62 inline RenderMedia* HTMLMediaElement::renderer() const 63 { 64 return downcast<RenderMedia>(HTMLElement::renderer()); 65 } 66 63 67 } // namespace WebCore 64 68 … … 66 70 67 71 #endif // ENABLE(VIDEO) 68 69 #endif // RenderMedia_h -
trunk/Source/WebCore/rendering/RenderTextControlMultiLine.h
r200041 r201588 20 20 */ 21 21 22 #ifndef RenderTextControlMultiLine_h 23 #define RenderTextControlMultiLine_h 22 #pragma once 24 23 24 #include "HTMLTextAreaElement.h" 25 25 #include "RenderTextControl.h" 26 26 27 27 namespace WebCore { 28 29 class HTMLTextAreaElement;30 28 31 29 class RenderTextControlMultiLine final : public RenderTextControl { … … 51 49 }; 52 50 51 inline RenderTextControlMultiLine* HTMLTextAreaElement::renderer() const 52 { 53 return downcast<RenderTextControlMultiLine>(HTMLTextFormControlElement::renderer()); 54 } 55 53 56 } // namespace WebCore 54 57 55 58 SPECIALIZE_TYPE_TRAITS_RENDER_OBJECT(RenderTextControlMultiLine, isTextArea()) 56 57 #endif // RenderTextControlMultiLine_h -
trunk/Source/WebCore/rendering/RenderVideo.cpp
r200041 r201588 278 278 279 279 #if ENABLE(FULLSCREEN_API) 280 static const RenderBlock* rendererPlaceholder(const RenderObject* renderer) 281 { 282 RenderObject* parent = renderer->parent(); 280 281 static const RenderBlock* placeholder(const RenderVideo& renderer) 282 { 283 auto* parent = renderer.parent(); 283 284 return is<RenderFullScreen>(parent) ? downcast<RenderFullScreen>(*parent).placeholder() : nullptr; 284 285 } … … 286 287 LayoutUnit RenderVideo::offsetLeft() const 287 288 { 288 if ( const RenderBlock* block = rendererPlaceholder(this))289 if (auto* block = placeholder(*this)) 289 290 return block->offsetLeft(); 290 291 return RenderMedia::offsetLeft(); … … 293 294 LayoutUnit RenderVideo::offsetTop() const 294 295 { 295 if ( const RenderBlock* block = rendererPlaceholder(this))296 if (auto* block = placeholder(*this)) 296 297 return block->offsetTop(); 297 298 return RenderMedia::offsetTop(); … … 300 301 LayoutUnit RenderVideo::offsetWidth() const 301 302 { 302 if ( const RenderBlock* block = rendererPlaceholder(this))303 if (auto* block = placeholder(*this)) 303 304 return block->offsetWidth(); 304 305 return RenderMedia::offsetWidth(); … … 307 308 LayoutUnit RenderVideo::offsetHeight() const 308 309 { 309 if ( const RenderBlock* block = rendererPlaceholder(this))310 if (auto* block = placeholder(*this)) 310 311 return block->offsetHeight(); 311 312 return RenderMedia::offsetHeight(); 312 313 } 314 313 315 #endif 314 316 -
trunk/Source/WebCore/rendering/RenderVideo.h
r200041 r201588 24 24 */ 25 25 26 #ifndef RenderVideo_h 27 #define RenderVideo_h 26 #pragma once 28 27 29 28 #if ENABLE(VIDEO) 30 29 30 #include "HTMLVideoElement.h" 31 31 #include "RenderMedia.h" 32 32 33 33 namespace WebCore { 34 35 class HTMLVideoElement;36 34 37 35 class RenderVideo final : public RenderMedia { … … 53 51 bool shouldDisplayVideo() const; 54 52 53 void updateFromElement() final; 54 55 55 private: 56 56 void mediaElement() const = delete; 57 57 58 void updateFromElement() override; 59 60 void intrinsicSizeChanged() override; 58 void intrinsicSizeChanged() final; 61 59 LayoutSize calculateIntrinsicSize(); 62 60 bool updateIntrinsicSize(); 63 61 64 void imageChanged(WrappedImagePtr, const IntRect*) override;62 void imageChanged(WrappedImagePtr, const IntRect*) final; 65 63 66 const char* renderName() const override{ return "RenderVideo"; }64 const char* renderName() const final { return "RenderVideo"; } 67 65 68 bool requiresLayer() const override{ return true; }69 bool isVideo() const override{ return true; }66 bool requiresLayer() const final { return true; } 67 bool isVideo() const final { return true; } 70 68 71 void paintReplaced(PaintInfo&, const LayoutPoint&) override;69 void paintReplaced(PaintInfo&, const LayoutPoint&) final; 72 70 73 void layout() override;71 void layout() final; 74 72 75 LayoutUnit computeReplacedLogicalWidth(ShouldComputePreferred = ComputeActual) const override;76 LayoutUnit computeReplacedLogicalHeight() const override;77 LayoutUnit minimumReplacedHeight() const override;73 LayoutUnit computeReplacedLogicalWidth(ShouldComputePreferred = ComputeActual) const final; 74 LayoutUnit computeReplacedLogicalHeight() const final; 75 LayoutUnit minimumReplacedHeight() const final; 78 76 79 77 #if ENABLE(FULLSCREEN_API) 80 LayoutUnit offsetLeft() const override;81 LayoutUnit offsetTop() const override;82 LayoutUnit offsetWidth() const override;83 LayoutUnit offsetHeight() const override;78 LayoutUnit offsetLeft() const final; 79 LayoutUnit offsetTop() const final; 80 LayoutUnit offsetWidth() const final; 81 LayoutUnit offsetHeight() const final; 84 82 #endif 85 83 86 84 void updatePlayer(); 87 85 88 bool foregroundIsKnownToBeOpaqueInRect(const LayoutRect& localRect, unsigned maxDepthToTest) const override;86 bool foregroundIsKnownToBeOpaqueInRect(const LayoutRect& localRect, unsigned maxDepthToTest) const final; 89 87 90 88 LayoutSize m_cachedImageSize; 91 89 }; 90 91 inline RenderVideo* HTMLVideoElement::renderer() const 92 { 93 return downcast<RenderVideo>(HTMLMediaElement::renderer()); 94 } 92 95 93 96 } // namespace WebCore … … 96 99 97 100 #endif // ENABLE(VIDEO) 98 #endif // RenderVideo_h -
trunk/Source/WebCore/svg/SVGGElement.cpp
r200041 r201588 86 86 RenderPtr<RenderElement> SVGGElement::createElementRenderer(RenderStyle&& style, const RenderTreePosition&) 87 87 { 88 // SVG 1.1 testsuite explicit ely uses constructs like <g display="none"><linearGradient>88 // SVG 1.1 testsuite explicitly uses constructs like <g display="none"><linearGradient> 89 89 // We still have to create renderers for the <g> & <linearGradient> element, though the 90 90 // subtree may be hidden - we only want the resource renderers to exist so they can be -
trunk/Source/WebCore/svg/SVGGraphicsElement.cpp
r200098 r201588 164 164 RenderPtr<RenderElement> SVGGraphicsElement::createElementRenderer(RenderStyle&& style, const RenderTreePosition&) 165 165 { 166 // By default, any subclass is expected to do path-based drawing167 166 return createRenderer<RenderSVGPath>(*this, WTFMove(style)); 168 167 } -
trunk/Source/WebCore/svg/SVGPathElement.cpp
r201561 r201588 415 415 RenderPtr<RenderElement> SVGPathElement::createElementRenderer(RenderStyle&& style, const RenderTreePosition&) 416 416 { 417 // By default, any subclass is expected to do path-based drawing418 417 return createRenderer<RenderSVGPath>(*this, WTFMove(style)); 419 418 } -
trunk/Source/WebKit/mac/ChangeLog
r201542 r201588 1 2016-05-31 Darin Adler <darin@apple.com> 2 3 Audit RenderObject casts and fix problems and style issues found 4 https://bugs.webkit.org/show_bug.cgi?id=158221 5 6 Reviewed by Chris Dumez. 7 8 * Misc/WebNSPasteboardExtras.mm: 9 (imageFromElement): Use auto and tighten the logic a bit. 10 (-[NSPasteboard _web_declareAndWriteDragImageForElement:URL:title:archive:source:]): 11 Use auto and added a comment about this not using imageFromElement. 12 13 * Plugins/WebBaseNetscapePluginView.mm: 14 (-[WebBaseNetscapePluginView _windowClipRect]): Consistently cast to 15 RenderEmbeddedObject, which is the class used for renderers for plug-ins. 16 (-[WebBaseNetscapePluginView inFlatteningPaint]): Ditto. 17 (-[WebBaseNetscapePluginView invalidatePluginContentRect:]): Ditto. 18 (-[WebBaseNetscapePluginView actualVisibleRectInWindow]): Ditto. 19 20 * WebCoreSupport/WebFrameLoaderClient.mm: 21 (WebFrameLoaderClient::createPlugin): Changed code so it does a null check 22 rather than assuming the renderer is non-null. 23 (WebFrameLoaderClient::createJavaAppletWidget): Ditto. 24 1 25 2016-05-31 Yusuke Suzuki <utatane.tea@gmail.com> 2 26 -
trunk/Source/WebKit/mac/Misc/WebNSPasteboardExtras.mm
r198289 r201588 220 220 static CachedImage* imageFromElement(DOMElement *domElement) 221 221 { 222 Element* element = core(domElement);222 auto* element = core(domElement); 223 223 if (!element) 224 224 return nullptr; 225 226 ASSERT(element->renderer()); 227 auto& imageRenderer = downcast<RenderImage>(*element->renderer()); 228 if (!imageRenderer.cachedImage() || imageRenderer.cachedImage()->errorOccurred()) 225 auto* renderer = element->renderer(); 226 if (!is<RenderImage>(renderer)) 229 227 return nullptr; 230 return imageRenderer.cachedImage(); 228 auto* image = downcast<RenderImage>(*renderer).cachedImage(); 229 if (!image || image->errorOccurred()) 230 return nullptr; 231 return image; 231 232 } 232 233 … … 276 277 if (auto* renderer = core(element)->renderer()) { 277 278 if (is<RenderImage>(*renderer)) { 278 if (CachedImage* image = downcast<RenderImage>(*renderer).cachedImage()) { 279 if (auto* image = downcast<RenderImage>(*renderer).cachedImage()) { 280 // FIXME: This doesn't check errorOccured the way imageFromElement does. 279 281 extension = image->image()->filenameExtension(); 280 282 if (![extension length]) -
trunk/Source/WebKit/mac/Plugins/WebBaseNetscapePluginView.mm
r193378 r201588 41 41 #import "WebView.h" 42 42 #import "WebViewInternal.h" 43 44 43 #import <WebCore/AuthenticationCF.h> 45 44 #import <WebCore/AuthenticationMac.h> … … 54 53 #import <WebCore/Page.h> 55 54 #import <WebCore/ProtectionSpace.h> 55 #import <WebCore/RenderEmbeddedObject.h> 56 56 #import <WebCore/RenderView.h> 57 #import <WebCore/RenderWidget.h>58 57 #import <WebCore/SecurityOrigin.h> 59 58 #import <WebCore/WebCoreObjCExtras.h> … … 283 282 { 284 283 auto* renderer = _element->renderer(); 285 if (! renderer)284 if (!is<RenderEmbeddedObject>(renderer)) 286 285 return NSZeroRect; 287 288 return downcast<RenderWidget>(*renderer).windowClipRect(); 286 return downcast<RenderEmbeddedObject>(*renderer).windowClipRect(); 289 287 } 290 288 … … 445 443 - (BOOL)inFlatteningPaint 446 444 { 447 RenderObject* renderer = _element->renderer(); 448 if (renderer) 449 return renderer->view().frameView().paintBehavior() & PaintBehaviorFlattenCompositingLayers; 450 451 return NO; 445 auto* renderer = _element->renderer(); 446 if (!is<RenderEmbeddedObject>(renderer)) 447 return NO; 448 return !!(downcast<RenderEmbeddedObject>(*renderer).view().frameView().paintBehavior() & PaintBehaviorFlattenCompositingLayers); 452 449 } 453 450 … … 856 853 - (void)invalidatePluginContentRect:(NSRect)rect 857 854 { 858 if (RenderBoxModelObject* renderer = downcast<RenderBoxModelObject>(_element->renderer())) { 859 IntRect contentRect(rect); 860 contentRect.move(renderer->borderLeft() + renderer->paddingLeft(), renderer->borderTop() + renderer->paddingTop()); 861 862 renderer->repaintRectangle(contentRect); 863 } 855 auto* renderer = _element->renderer(); 856 if (!is<RenderEmbeddedObject>(renderer)) 857 return; 858 auto& object = downcast<RenderEmbeddedObject>(*renderer); 859 IntRect contentRect(rect); 860 contentRect.move(object.borderLeft() + object.paddingLeft(), object.borderTop() + object.paddingTop()); 861 object.repaintRectangle(contentRect); 864 862 } 865 863 … … 867 865 { 868 866 auto* renderer = _element->renderer(); 869 if (! renderer)867 if (!is<RenderEmbeddedObject>(renderer)) 870 868 return NSZeroRect; 871 872 IntRect widgetRect = renderer->pixelSnappedAbsoluteClippedOverflowRect(); 873 widgetRect = renderer->view().frameView().contentsToWindow(widgetRect); 874 return intersection(downcast<RenderWidget>(*renderer).windowClipRect(), widgetRect); 869 auto& object = downcast<RenderEmbeddedObject>(*renderer); 870 auto widgetRect = object.view().frameView().contentsToWindow(object.pixelSnappedAbsoluteClippedOverflowRect()); 871 return intersection(object.windowClipRect(), widgetRect); 875 872 } 876 873 -
trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
r201038 r201588 2001 2001 if (WKShouldBlockPlugin([pluginPackage bundleIdentifier], [pluginPackage bundleVersion])) { 2002 2002 errorCode = WebKitErrorBlockedPlugInVersion; 2003 if (is<RenderEmbeddedObject>( *element->renderer()))2003 if (is<RenderEmbeddedObject>(element->renderer())) 2004 2004 downcast<RenderEmbeddedObject>(*element->renderer()).setPluginUnavailabilityReason(RenderEmbeddedObject::InsecurePluginVersion); 2005 2005 } else { … … 2106 2106 if (WKShouldBlockPlugin([pluginPackage bundleIdentifier], [pluginPackage bundleVersion])) { 2107 2107 errorCode = WebKitErrorBlockedPlugInVersion; 2108 if (is<RenderEmbeddedObject>( *element->renderer()))2108 if (is<RenderEmbeddedObject>(element->renderer())) 2109 2109 downcast<RenderEmbeddedObject>(*element->renderer()).setPluginUnavailabilityReason(RenderEmbeddedObject::InsecurePluginVersion); 2110 2110 } else { … … 2184 2184 CallFrameLoadDelegate(implementations->didCreateJavaScriptContextForFrameFunc, webView, @selector(webView:didCreateJavaScriptContext:forFrame:), 2185 2185 script.javaScriptContext(), m_webFrame.get()); 2186 } else if (implementations->didClearWindowObjectForFrameFunc) {2187 #e lse2186 } else 2187 #endif 2188 2188 if (implementations->didClearWindowObjectForFrameFunc) { 2189 #endif2190 2189 CallFrameLoadDelegate(implementations->didClearWindowObjectForFrameFunc, webView, @selector(webView:didClearWindowObject:forFrame:), 2191 2190 script.windowScriptObject(), m_webFrame.get()); -
trunk/Source/WebKit2/ChangeLog
r201587 r201588 1 2016-05-31 Darin Adler <darin@apple.com> 2 3 Audit RenderObject casts and fix problems and style issues found 4 https://bugs.webkit.org/show_bug.cgi?id=158221 5 6 Reviewed by Chris Dumez. 7 8 * Shared/WebRenderObject.cpp: 9 (WebKit::WebRenderObject::WebRenderObject): Tightened up the code that 10 builds the tree of objects; fewer local variables. 11 12 * WebProcess/Plugins/PluginView.cpp: 13 (WebKit::PluginView::invalidateRect): Cast to RenderEmbeddedObject since 14 that is the class used for plug-ins. 15 (WebKit::PluginView::pluginProcessCrashed): Ditto. 16 * WebProcess/WebPage/WebPage.cpp: 17 (WebKit::WebPage::createPlugin): Ditto. 18 (WebKit::WebPage::plugInIsPrimarySize): Check the renderer for null here. 19 Did not change this to RenderEmbeddedObject, though, because I wasn't 20 absolute certain this is only called with that type of renderer. 21 22 * WebProcess/WebPage/ios/WebPageIOS.mm: 23 (WebKit::WebPage::rangeForWebSelectionAtPosition): Tweaked. 24 1 25 2016-06-01 Brady Eidson <beidson@apple.com> 2 26 -
trunk/Source/WebKit2/Shared/WebRenderObject.cpp
r198771 r201588 114 114 Vector<RefPtr<API::Object>> children; 115 115 116 for (RenderObject* coreChild = renderer->firstChildSlow(); coreChild; coreChild = coreChild->nextSibling()) { 117 RefPtr<WebRenderObject> child = adoptRef(new WebRenderObject(coreChild, shouldIncludeDescendants)); 118 children.append(WTFMove(child)); 119 } 116 for (auto* coreChild = renderer->firstChildSlow(); coreChild; coreChild = coreChild->nextSibling()) 117 children.append(adoptRef(*new WebRenderObject(coreChild, shouldIncludeDescendants))); 120 118 121 119 if (is<RenderWidget>(*renderer)) { 122 if (Widget* widget = downcast<RenderWidget>(*renderer).widget()) { 123 if (is<FrameView>(*widget)) { 124 FrameView& frameView = downcast<FrameView>(*widget); 125 if (RenderView* coreContentRenderer = frameView.frame().contentRenderer()) { 126 RefPtr<WebRenderObject> contentRenderer = adoptRef(new WebRenderObject(coreContentRenderer, shouldIncludeDescendants)); 127 128 children.append(WTFMove(contentRenderer)); 129 } 130 } 120 auto* widget = downcast<RenderWidget>(*renderer).widget(); 121 if (is<FrameView>(widget)) { 122 if (auto* coreContentRenderer = downcast<FrameView>(*widget).frame().contentRenderer()) 123 children.append(adoptRef(*new WebRenderObject(coreContentRenderer, shouldIncludeDescendants))); 131 124 } 132 125 } -
trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp
r201575 r201588 1364 1364 return; 1365 1365 1366 RenderBoxModelObject* renderer = downcast<RenderBoxModelObject>(m_pluginElement->renderer()); 1367 if (!renderer) 1368 return; 1366 auto* renderer = m_pluginElement->renderer(); 1367 if (!is<RenderEmbeddedObject>(renderer)) 1368 return; 1369 auto& object = downcast<RenderEmbeddedObject>(*renderer); 1369 1370 1370 1371 IntRect contentRect(dirtyRect); 1371 contentRect.move( renderer->borderLeft() + renderer->paddingLeft(), renderer->borderTop() + renderer->paddingTop());1372 contentRect.move(object.borderLeft() + object.paddingLeft(), object.borderTop() + object.paddingTop()); 1372 1373 renderer->repaintRectangle(contentRect); 1373 1374 } … … 1565 1566 m_pluginProcessHasCrashed = true; 1566 1567 1567 if (!is<RenderEmbeddedObject>(m_pluginElement->renderer())) 1568 auto* renderer = m_pluginElement->renderer(); 1569 if (!is<RenderEmbeddedObject>(renderer)) 1568 1570 return; 1569 1571 1570 1572 m_pluginElement->setNeedsStyleRecalc(SyntheticStyleChange); 1571 1573 1572 downcast<RenderEmbeddedObject>(* m_pluginElement->renderer()).setPluginUnavailabilityReason(RenderEmbeddedObject::PluginCrashed);1573 1574 downcast<RenderEmbeddedObject>(*renderer).setPluginUnavailabilityReason(RenderEmbeddedObject::PluginCrashed); 1575 1574 1576 Widget::invalidate(); 1575 1577 } -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
r201519 r201588 763 763 if (isBlockedPlugin) { 764 764 bool replacementObscured = false; 765 if (is<RenderEmbeddedObject>(*pluginElement->renderer())) { 766 auto& renderObject = downcast<RenderEmbeddedObject>(*pluginElement->renderer()); 765 auto* renderer = pluginElement->renderer(); 766 if (is<RenderEmbeddedObject>(renderer)) { 767 auto& renderObject = downcast<RenderEmbeddedObject>(*renderer); 767 768 renderObject.setPluginUnavailabilityReasonWithDescription(RenderEmbeddedObject::InsecurePluginVersion, unavailabilityDescription); 768 769 replacementObscured = renderObject.isReplacementObscured(); … … 5129 5130 bool WebPage::plugInIsPrimarySize(WebCore::HTMLPlugInImageElement& plugInImageElement, unsigned& candidatePlugInArea) 5130 5131 { 5131 auto & pluginRenderBox = downcast<RenderBox>(*plugInImageElement.renderer());5132 if ( pluginRenderBox.contentWidth() < primarySnapshottedPlugInMinimumWidth || pluginRenderBox.contentHeight() < primarySnapshottedPlugInMinimumHeight)5132 auto* renderer = plugInImageElement.renderer(); 5133 if (!is<RenderBox>(renderer)) 5133 5134 return false; 5134 5135 5135 LayoutUnit contentArea = pluginRenderBox.contentWidth() * pluginRenderBox.contentHeight(); 5136 auto& box = downcast<RenderBox>(*renderer); 5137 if (box.contentWidth() < primarySnapshottedPlugInMinimumWidth || box.contentHeight() < primarySnapshottedPlugInMinimumHeight) 5138 return false; 5139 5140 LayoutUnit contentArea = box.contentWidth() * box.contentHeight(); 5136 5141 if (contentArea > candidatePlugInArea * primarySnapshottedPlugInSearchBucketSize) { 5137 5142 candidatePlugInArea = contentArea.toUnsigned(); 5138 5143 return true; 5139 5144 } 5145 5140 5146 return false; 5141 5147 } 5148 5142 5149 #endif // ENABLE(PRIMARY_SNAPSHOTTED_PLUGIN_HEURISTIC) 5143 5150 -
trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm
r201583 r201588 915 915 auto* renderer = currentNode->renderer(); 916 916 if (is<RenderBlockFlow>(renderer)) { 917 auto *renderText = downcast<RenderBlockFlow>(renderer)->findClosestTextAtAbsolutePoint(point);917 auto* renderText = downcast<RenderBlockFlow>(*renderer).findClosestTextAtAbsolutePoint(point); 918 918 if (renderText && renderText->textNode()) 919 919 currentNode = renderText->textNode();
Note:
See TracChangeset
for help on using the changeset viewer.