⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cssimportrule.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
字号:
/* * (C) 1999-2003 Lars Knoll (knoll@kde.org) * (C) 2002-2003 Dirk Mueller (mueller@kde.org) * Copyright (C) 2002, 2005, 2006, 2008 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB.  If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */#include "config.h"#include "CSSImportRule.h"#include "CachedCSSStyleSheet.h"#include "DocLoader.h"#include "Document.h"#include "MediaList.h"namespace WebCore {CSSImportRule::CSSImportRule(CSSStyleSheet* parent, const String& href, PassRefPtr<MediaList> media)    : CSSRule(parent)    , m_strHref(href)    , m_lstMedia(media)    , m_cachedSheet(0)    , m_loading(false){    if (m_lstMedia)        m_lstMedia->setParent(this);    else        m_lstMedia = MediaList::create(this, String());}CSSImportRule::~CSSImportRule(){    if (m_lstMedia)        m_lstMedia->setParent(0);    if (m_styleSheet)        m_styleSheet->setParent(0);    if (m_cachedSheet)        m_cachedSheet->removeClient(this);}void CSSImportRule::setCSSStyleSheet(const String& url, const String& charset, const CachedCSSStyleSheet* sheet){    if (m_styleSheet)        m_styleSheet->setParent(0);    m_styleSheet = CSSStyleSheet::create(this, url, charset);    CSSStyleSheet* parent = parentStyleSheet();    bool strict = !parent || parent->useStrictParsing();    m_styleSheet->parseString(sheet->sheetText(strict), strict);    m_loading = false;    if (parent)        parent->checkLoaded();}bool CSSImportRule::isLoading() const{    return m_loading || (m_styleSheet && m_styleSheet->isLoading());}void CSSImportRule::insertedIntoParent(){    CSSStyleSheet* parentSheet = parentStyleSheet();    if (!parentSheet)        return;    DocLoader* docLoader = parentSheet->doc()->docLoader();    if (!docLoader)        return;    String absHref = m_strHref;    if (!parentSheet->href().isNull())        // use parent styleheet's URL as the base URL        absHref = KURL(KURL(parentSheet->href()), 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()) {        if (curr->isCSSStyleSheet() && absHref == static_cast<CSSStyleSheet*>(curr)->href())            return;        root = curr;    }    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);    }}String CSSImportRule::cssText() const{    String result = "@import url(\"";    result += m_strHref;    result += "\")";    if (m_lstMedia) {        result += " ";        result += m_lstMedia->mediaText();    }    result += ";";    return result;}void CSSImportRule::addSubresourceStyleURLs(ListHashSet<KURL>& urls){    if (m_styleSheet)        addSubresourceURL(urls, m_styleSheet->baseURL());}} // namespace WebCore

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -