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()); }