void HTMLLinkElement::setDisabledState(bool disabled) { DisabledState oldDisabledState = m_disabledState; m_disabledState = disabled ? Disabled : EnabledViaScript; if (oldDisabledState != m_disabledState) { // If we change the disabled state while the sheet is still loading, then we have to // perform three checks: if (styleSheetIsLoading()) { // Check #1: The sheet becomes disabled while loading. if (m_disabledState == Disabled) removePendingSheet(); // Check #2: An alternate sheet becomes enabled while it is still loading. if (m_relAttribute.m_isAlternate && m_disabledState == EnabledViaScript) addPendingSheet(Blocking); // Check #3: A main sheet becomes enabled while it was still loading and // after it was disabled via script. It takes really terrible code to make this // happen (a double toggle for no reason essentially). This happens on // virtualplastic.net, which manages to do about 12 enable/disables on only 3 // sheets. :) if (!m_relAttribute.m_isAlternate && m_disabledState == EnabledViaScript && oldDisabledState == Disabled) addPendingSheet(Blocking); // If the sheet is already loading just bail. return; } // Load the sheet, since it's never been loaded before. if (!m_sheet && m_disabledState == EnabledViaScript) process(); else document()->styleSelectorChanged(DeferRecalcStyle); // Update the style selector. } }
void HTMLLinkElement::removedFromDocument() { HTMLElement::removedFromDocument(); if (m_isInShadowTree) { ASSERT(!m_sheet); return; } document()->removeStyleSheetCandidateNode(this); if (m_sheet) clearSheet(); if (styleSheetIsLoading()) removePendingSheet(); if (document()->renderer()) document()->styleSelectorChanged(DeferRecalcStyle); }