diff --git a/dom/base/nsImageLoadingContent.cpp b/dom/base/nsImageLoadingContent.cpp index 73731c4dee5b..25a1b220ef56 100644 --- a/dom/base/nsImageLoadingContent.cpp +++ b/dom/base/nsImageLoadingContent.cpp @@ -1152,6 +1152,12 @@ nsresult nsImageLoadingContent::LoadImage(nsIURI* aNewURI, bool aForce, nsLoadFlags loadFlags = aLoadFlags | nsContentUtils::CORSModeToLoadImageFlags(GetCORSMode()); + Document* loadingDoc = aDocument->GetOriginalDocument(); + const bool isPrint = !!loadingDoc; + if (!loadingDoc) { + loadingDoc = aDocument; + } + RefPtr& req = PrepareNextRequest(aImageLoadType); nsCOMPtr triggeringPrincipal; bool result = nsContentUtils::QueryTriggeringPrincipal( @@ -1166,7 +1172,7 @@ nsresult nsImageLoadingContent::LoadImage(nsIURI* aNewURI, bool aForce, auto referrerInfo = MakeRefPtr(*element); nsresult rv = nsContentUtils::LoadImage( - aNewURI, element, aDocument, triggeringPrincipal, 0, referrerInfo, this, + aNewURI, element, loadingDoc, triggeringPrincipal, 0, referrerInfo, this, loadFlags, element->LocalName(), getter_AddRefs(req), policyType, mUseUrgentStartForChannel); @@ -1180,6 +1186,10 @@ nsresult nsImageLoadingContent::LoadImage(nsIURI* aNewURI, bool aForce, aDocument->ForgetImagePreload(aNewURI); if (NS_SUCCEEDED(rv)) { + if (isPrint) { + req = nsContentUtils::GetStaticRequest(aDocument, req); + } + CloneScriptedRequests(req); TrackImage(req); ResetAnimationIfNeeded(); diff --git a/dom/html/HTMLImageElement.cpp b/dom/html/HTMLImageElement.cpp index 870145e3d0d6..63702ae312a4 100644 --- a/dom/html/HTMLImageElement.cpp +++ b/dom/html/HTMLImageElement.cpp @@ -735,32 +735,25 @@ uint32_t HTMLImageElement::NaturalWidth() { } nsresult HTMLImageElement::CopyInnerTo(HTMLImageElement* aDest) { - bool destIsStatic = aDest->OwnerDoc()->IsStaticDocument(); - if (destIsStatic) { - CreateStaticImageClone(aDest); - } - nsresult rv = nsGenericHTMLElement::CopyInnerTo(aDest); if (NS_FAILED(rv)) { return rv; } - if (!destIsStatic) { - // In SetAttr (called from nsGenericHTMLElement::CopyInnerTo), aDest skipped - // doing the image load because we passed in false for aNotify. But we - // really do want it to do the load, so set it up to happen once the cloning - // reaches a stable state. - if (!aDest->InResponsiveMode() && - aDest->HasAttr(kNameSpaceID_None, nsGkAtoms::src) && - aDest->ShouldLoadImage()) { - // Mark channel as urgent-start before load image if the image load is - // initaiated by a user interaction. - mUseUrgentStartForChannel = UserActivation::IsHandlingUserInput(); - - nsContentUtils::AddScriptRunner(NewRunnableMethod( - "dom::HTMLImageElement::MaybeLoadImage", aDest, - &HTMLImageElement::MaybeLoadImage, false)); - } + // In SetAttr (called from nsGenericHTMLElement::CopyInnerTo), aDest skipped + // doing the image load because we passed in false for aNotify. But we + // really do want it to do the load, so set it up to happen once the cloning + // reaches a stable state. + if (!aDest->InResponsiveMode() && + aDest->HasAttr(kNameSpaceID_None, nsGkAtoms::src) && + aDest->ShouldLoadImage()) { + // Mark channel as urgent-start before load image if the image load is + // initaiated by a user interaction. + mUseUrgentStartForChannel = UserActivation::IsHandlingUserInput(); + + nsContentUtils::AddScriptRunner(NewRunnableMethod( + "dom::HTMLImageElement::MaybeLoadImage", aDest, + &HTMLImageElement::MaybeLoadImage, false)); } return NS_OK; @@ -1262,7 +1255,10 @@ void HTMLImageElement::SetLazyLoading() { // If scripting is disabled don't do lazy load. // https://whatpr.org/html/3752/images.html#updating-the-image-data - if (!OwnerDoc()->IsScriptEnabled()) { + // + // Same for printing. + Document* doc = OwnerDoc(); + if (!doc->IsScriptEnabled() || doc->IsStaticDocument()) { return; } diff --git a/layout/printing/nsPrintJob.cpp b/layout/printing/nsPrintJob.cpp index 356b74035140..5138bd24abeb 100644 --- a/layout/printing/nsPrintJob.cpp +++ b/layout/printing/nsPrintJob.cpp @@ -1695,9 +1695,8 @@ nsPrintJob::OnStateChange(nsIWebProgress* aWebProgress, nsIRequest* aRequest, uint32_t aStateFlags, nsresult aStatus) { nsAutoCString name; aRequest->GetName(name); - if (name.EqualsLiteral("about:document-onload-blocker")) { - return NS_OK; - } + PR_PL(("nsPrintJob::OnStateChange(%s, %u)\n", name.get(), aStateFlags)); + if (aStateFlags & STATE_START) { ++mLoadCounter; } else if (aStateFlags & STATE_STOP) {