void CSSImportRule::requestStyleSheet() { CSSStyleSheet* parentSheet = parentStyleSheet(); if (!parentSheet) return; Document* document = parentSheet->findDocument(); if (!document) return; CachedResourceLoader* cachedResourceLoader = document->cachedResourceLoader(); if (!cachedResourceLoader) return; String absHref = m_strHref; if (!parentSheet->finalURL().isNull()) // use parent styleheet's URL as the base URL absHref = KURL(parentSheet->finalURL(), m_strHref).string(); // Check for a cycle in our import chain. If we encounter a stylesheet // in our parent chain with the same URL, then just bail. CSSStyleSheet* rootSheet = parentSheet; for (CSSStyleSheet* sheet = parentSheet; sheet; sheet = sheet->parentStyleSheet()) { // FIXME: This is wrong if the finalURL was updated via document::updateBaseURL. if (absHref == sheet->finalURL().string()) return; rootSheet = sheet; } ResourceRequest request(document->completeURL(absHref)); if (parentSheet->isUserStyleSheet()) m_cachedSheet = cachedResourceLoader->requestUserCSSStyleSheet(request, parentSheet->charset()); else m_cachedSheet = cachedResourceLoader->requestCSSStyleSheet(request, parentSheet->charset()); if (m_cachedSheet) { // if the import rule is issued dynamically, the sheet may be // removed from the pending sheet count, so let the doc know // the sheet being imported is pending. if (parentSheet && parentSheet->loadCompleted() && rootSheet == parentSheet) parentSheet->startLoadingDynamicSheet(); m_loading = true; m_cachedSheet->addClient(&m_styleSheetClient); } }
void CSSImportRule::insertedIntoParent() { CSSStyleSheet* parentSheet = parentStyleSheet(); if (!parentSheet) return; DocLoader* docLoader = parentSheet->doc()->docLoader(); if (!docLoader) return; String absHref = m_strHref; if (!parentSheet->finalURL().isNull()) // use parent styleheet's URL as the base URL absHref = KURL(parentSheet->finalURL(), m_strHref).string(); // Check for a cycle in our import chain. If we encounter a stylesheet // in our parent chain with the same URL, then just bail. StyleBase* root = this; for (StyleBase* curr = parent(); curr; curr = curr->parent()) { // FIXME: This is wrong if the finalURL was updated via document::updateBaseURL. if (curr->isCSSStyleSheet() && absHref == static_cast<CSSStyleSheet*>(curr)->finalURL().string()) return; root = curr; } if (parentSheet->isUserStyleSheet()) m_cachedSheet = docLoader->requestUserCSSStyleSheet(absHref, parentSheet->charset()); else m_cachedSheet = docLoader->requestCSSStyleSheet(absHref, parentSheet->charset()); if (m_cachedSheet) { // if the import rule is issued dynamically, the sheet may be // removed from the pending sheet count, so let the doc know // the sheet being imported is pending. if (parentSheet && parentSheet->loadCompleted() && root == parentSheet) parentSheet->doc()->addPendingSheet(); m_loading = true; m_cachedSheet->addClient(this); } }