Document* XSLStyleSheet::ownerDocument() { for (XSLStyleSheet* styleSheet = this; styleSheet; styleSheet = styleSheet->parentStyleSheet()) { Node* node = styleSheet->ownerNode(); if (node) return &node->document(); } return 0; }
void XSLImportRule::loadSheet() { CachedResourceLoader* cachedResourceLoader = 0; XSLStyleSheet* rootSheet = parentStyleSheet(); if (rootSheet) { while (XSLStyleSheet* parentSheet = rootSheet->parentStyleSheet()) rootSheet = parentSheet; } if (rootSheet) cachedResourceLoader = rootSheet->cachedResourceLoader(); String absHref = m_strHref; XSLStyleSheet* parentSheet = parentStyleSheet(); if (!parentSheet->baseURL().isNull()) // use parent styleheet's URL as the base URL absHref = KURL(parentSheet->baseURL(), 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. for (XSLStyleSheet* parentSheet = parentStyleSheet(); parentSheet; parentSheet = parentSheet->parentStyleSheet()) { if (absHref == parentSheet->baseURL().string()) return; } CachedResourceRequest request(ResourceRequest(cachedResourceLoader->document()->completeURL(absHref))); if (m_cachedSheet) m_cachedSheet->removeClient(this); m_cachedSheet = cachedResourceLoader->requestXSLStyleSheet(request); if (m_cachedSheet) { m_cachedSheet->addClient(this); // If the imported sheet is in the cache, then setXSLStyleSheet gets called, // and the sheet even gets parsed (via parseString). In this case we have // loaded (even if our subresources haven't), so if we have a stylesheet after // checking the cache, then we've clearly loaded. if (!m_styleSheet) m_loading = true; } }
Document* XSLStyleSheet::ownerDocument() { for (XSLStyleSheet* styleSheet = this; styleSheet; styleSheet = styleSheet->parentStyleSheet()) { if (styleSheet->m_ownerDocument) return styleSheet->m_ownerDocument.get(); Node* node = styleSheet->ownerNode(); if (node) return &node->document(); } return nullptr; }
void XSLImportRule::loadSheet() { Document* ownerDocument = nullptr; XSLStyleSheet* rootSheet = parentStyleSheet(); if (rootSheet) { while (XSLStyleSheet* parentSheet = rootSheet->parentStyleSheet()) rootSheet = parentSheet; } if (rootSheet) ownerDocument = rootSheet->ownerDocument(); String absHref = m_strHref; XSLStyleSheet* parentSheet = parentStyleSheet(); if (!parentSheet->baseURL().isNull()) { // Use parent styleheet's URL as the base URL absHref = KURL(parentSheet->baseURL(), m_strHref).getString(); } // Check for a cycle in our import chain. If we encounter a stylesheet in // our parent chain with the same URL, then just bail. for (XSLStyleSheet* parentSheet = parentStyleSheet(); parentSheet; parentSheet = parentSheet->parentStyleSheet()) { if (absHref == parentSheet->baseURL().getString()) return; } ResourceLoaderOptions fetchOptions(ResourceFetcher::defaultResourceOptions()); FetchRequest request(ResourceRequest(ownerDocument->completeURL(absHref)), FetchInitiatorTypeNames::xml, fetchOptions); request.setOriginRestriction(FetchRequest::RestrictToSameOrigin); RawPtr<XSLStyleSheetResource> resource = XSLStyleSheetResource::fetchSynchronously(request, ownerDocument->fetcher()); if (!resource || !resource->sheet()) return; ASSERT(!m_styleSheet); setXSLStyleSheet(absHref, resource->response().url(), resource->sheet()); }