Do not reparse the same URL repeatedly for HTMLImageElement src attribute setter#25003
Conversation
|
EWS run on previous version of this PR (hash f09fb03) Details |
f09fb03 to
b7d7c5e
Compare
|
EWS run on previous version of this PR (hash b7d7c5e) Details |
b7d7c5e to
6330c74
Compare
|
EWS run on previous version of this PR (hash 6330c74) Details |
6330c74 to
9408ea9
Compare
|
EWS run on previous version of this PR (hash 9408ea9) Details |
Nit: Typo. |
Oops, fixed! |
9408ea9 to
eb2af2d
Compare
|
EWS run on previous version of this PR (hash eb2af2d) Details |
Source/WTF/wtf/URL.cpp
Outdated
There was a problem hiding this comment.
What does the boolean signify? Can we use define a struct with a descriptive name instead?
There was a problem hiding this comment.
it is indicating whether the strip operation changed the url. I'll change it to struct.
eb2af2d to
37b392f
Compare
|
EWS run on previous version of this PR (hash 37b392f) Details |
37b392f to
7e8b4cd
Compare
|
EWS run on previous version of this PR (hash 7e8b4cd) Details |
7e8b4cd to
e8dd48d
Compare
|
EWS run on previous version of this PR (hash e8dd48d) Details |
e8dd48d to
b79a10a
Compare
|
EWS run on current version of this PR (hash b79a10a) Details |
…bute setter https://bugs.webkit.org/show_bug.cgi?id=269975 rdar://123492927 Reviewed by Ryosuke Niwa. This patch cleans up a lot of HTMLImageElement src attribute setter path. 1. HTMLImageElement should not make m_currentSrc AtomString eagerly. This is rarely accessed. So we should defer it. 2. HTMLImageElement should have super fast path for no `sizes` attribute case since this is common. We should not invoke SizesAttributeParser. 3. ImageCandidate should carry underlying AtomString if possible. Attributes are AtomString. So by carrying it, we can avoid AtomString creation for `m_bestFitImageURL = candidate.string.toAtomString()`. 4. We should use HTMLImageElement::currentURL if possible in ImageLoader, avoiding repeated parsing of the same URL string. 5. FrameLoader should keep m_outgoingReferrerURL. Then subsequent code can use this URL instead of parsing it repeatedly. We enhance URL::strippedForUseAsReferrer to further avoid reparsing URL from stripped string. * Source/WTF/wtf/URL.cpp: (WTF::URL::strippedForUseAsReferrer const): (WTF::URL::strippedForUseAsReferrerWithExplicitPort const): * Source/WTF/wtf/URL.h: * Source/WTF/wtf/text/StringView.h: (WTF::StringViewWithUnderlyingString::toAtomString const): * Source/WebCore/Modules/fetch/FetchLoader.cpp: (WebCore::FetchLoader::start): * Source/WebCore/Modules/reporting/ReportingScope.cpp: (WebCore::ReportingScope::generateTestReport): * Source/WebCore/html/HTMLImageElement.cpp: (WebCore::HTMLImageElement::currentSrc): (WebCore::HTMLImageElement::setBestFitURLAndDPRFromImageCandidate): (WebCore::HTMLImageElement::selectImageSource): * Source/WebCore/html/HTMLImageElement.h: (WebCore::HTMLImageElement::currentSrc const): Deleted. * Source/WebCore/html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::mediaPlayerReferrer const): * Source/WebCore/html/parser/HTMLPreloadScanner.cpp: (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes): * Source/WebCore/html/parser/HTMLSrcsetParser.cpp: (WebCore::parseImageCandidatesFromSrcsetAttribute): (WebCore::pickBestImageCandidate): (WebCore::bestFitSourceForImageAttributes): * Source/WebCore/html/parser/HTMLSrcsetParser.h: (WebCore::ImageCandidate::ImageCandidate): (WebCore::ImageCandidate::isEmpty const): * Source/WebCore/loader/CrossOriginAccessControl.cpp: (WebCore::updateRequestReferrer): * Source/WebCore/loader/CrossOriginAccessControl.h: * Source/WebCore/loader/CrossOriginPreflightChecker.cpp: (WebCore::CrossOriginPreflightChecker::doPreflight): * Source/WebCore/loader/FrameLoader.cpp: (WebCore::FrameLoader::setOutgoingReferrer): (WebCore::FrameLoader::outgoingReferrerURL): (WebCore::FrameLoader::loadFrameRequest): (WebCore::FrameLoader::loadResourceSynchronously): (WebCore::createWindow): * Source/WebCore/loader/FrameLoader.h: * Source/WebCore/loader/ImageLoader.cpp: (WebCore::ImageLoader::updateFromElement): * Source/WebCore/loader/LinkLoader.cpp: (WebCore::LinkLoader::preloadIfNeeded): * Source/WebCore/loader/PingLoader.cpp: (WebCore::PingLoader::loadImage): (WebCore::PingLoader::sendViolationReport): * Source/WebCore/loader/SubframeLoader.cpp: (WebCore::FrameLoader::SubframeLoader::loadOrRedirectSubframe): (WebCore::FrameLoader::SubframeLoader::loadSubframe): * Source/WebCore/loader/SubframeLoader.h: * Source/WebCore/loader/SubresourceLoader.cpp: (WebCore::SubresourceLoader::checkRedirectionCrossOriginAccessControl): * Source/WebCore/loader/WorkerThreadableLoader.cpp: (WebCore::WorkerThreadableLoader::WorkerThreadableLoader): * Source/WebCore/loader/cache/CachedResourceRequest.cpp: (WebCore::CachedResourceRequest::updateReferrerAndOriginHeaders): * Source/WebCore/page/LocalDOMWindow.cpp: (WebCore::LocalDOMWindow::setLocation): (WebCore::LocalDOMWindow::createWindow): * Source/WebCore/page/SecurityPolicy.cpp: (WebCore::SecurityPolicy::shouldHideReferrer): (WebCore::SecurityPolicy::referrerToOriginString): (WebCore::SecurityPolicy::generateReferrerHeader): * Source/WebCore/page/SecurityPolicy.h: * Source/WebCore/page/csp/ContentSecurityPolicy.cpp: (WebCore::ContentSecurityPolicy::createURLForReporting const): (WebCore::ContentSecurityPolicy::reportViolation const): * Source/WebCore/platform/network/ResourceRequestBase.cpp: (WebCore::ResourceRequestBase::setExistingHTTPReferrerToOriginString): * Source/WebKit/WebProcess/Plugins/PluginView.cpp: (WebKit::PluginView::loadMainResource): Canonical link: https://commits.webkit.org/275281@main
b79a10a to
88f5d64
Compare
|
Committed 275281@main (88f5d64): https://commits.webkit.org/275281@main Reviewed commits have been landed. Closing PR #25003 and removing active labels. |
88f5d64
b79a10a