void nsHtml5DocumentBuilder::UpdateStyleSheet(nsIContent* aElement) { nsCOMPtr<nsIStyleSheetLinkingElement> ssle(do_QueryInterface(aElement)); if (!ssle) { MOZ_ASSERT(nsNameSpaceManager::GetInstance()->mSVGDisabled, "Node didn't QI to style, but SVG wasn't disabled."); return; } // Break out of the doc update created by Flush() to zap a runnable // waiting to call UpdateStyleSheet without the right observer EndDocUpdate(); if (MOZ_UNLIKELY(!mParser)) { // EndDocUpdate ran stuff that called nsIParser::Terminate() return; } ssle->SetEnableUpdates(true); bool willNotify; bool isAlternate; nsresult rv = ssle->UpdateStyleSheet(mRunsToCompletion ? nullptr : this, &willNotify, &isAlternate); if (NS_SUCCEEDED(rv) && willNotify && !isAlternate && !mRunsToCompletion) { ++mPendingSheetCount; mScriptLoader->AddParserBlockingScriptExecutionBlocker(); } // Re-open update BeginDocUpdate(); }
void nsHtml5DocumentBuilder::UpdateStyleSheet(nsIContent* aElement) { // Break out of the doc update created by Flush() to zap a runnable // waiting to call UpdateStyleSheet without the right observer EndDocUpdate(); if (MOZ_UNLIKELY(!mParser)) { // EndDocUpdate ran stuff that called nsIParser::Terminate() return; } nsCOMPtr<nsIStyleSheetLinkingElement> ssle(do_QueryInterface(aElement)); NS_ASSERTION(ssle, "Node didn't QI to style."); ssle->SetEnableUpdates(true); bool willNotify; bool isAlternate; nsresult rv = ssle->UpdateStyleSheet(mRunsToCompletion ? nullptr : this, &willNotify, &isAlternate); if (NS_SUCCEEDED(rv) && willNotify && !isAlternate && !mRunsToCompletion) { ++mPendingSheetCount; mScriptLoader->AddExecuteBlocker(); } if (aElement->IsHTML(nsGkAtoms::link)) { // look for <link rel="next" href="url"> nsAutoString relVal; aElement->GetAttr(kNameSpaceID_None, nsGkAtoms::rel, relVal); if (!relVal.IsEmpty()) { uint32_t linkTypes = nsStyleLinkElement::ParseLinkTypes(relVal, aElement->NodePrincipal()); bool hasPrefetch = linkTypes & nsStyleLinkElement::ePREFETCH; if (hasPrefetch || (linkTypes & nsStyleLinkElement::eNEXT)) { nsAutoString hrefVal; aElement->GetAttr(kNameSpaceID_None, nsGkAtoms::href, hrefVal); if (!hrefVal.IsEmpty()) { PrefetchHref(hrefVal, aElement, hasPrefetch); } } if (linkTypes & nsStyleLinkElement::eDNS_PREFETCH) { nsAutoString hrefVal; aElement->GetAttr(kNameSpaceID_None, nsGkAtoms::href, hrefVal); if (!hrefVal.IsEmpty()) { PrefetchDNS(hrefVal); } } } } // Re-open update BeginDocUpdate(); }