unsigned CSSStyleSheet::insertRule(const String& rule, unsigned index, ExceptionCode& ec) { ec = 0; if (index > length()) { ec = INDEX_SIZE_ERR; return 0; } CSSParser p(useStrictParsing()); RefPtr<CSSRule> r = p.parseRule(this, rule); if (!r) { ec = SYNTAX_ERR; return 0; } // Throw a HIERARCHY_REQUEST_ERR exception if the rule cannot be inserted at the specified index. The best // example of this is an @import rule inserted after regular rules. if (index > 0) { if (r->isImportRule()) { // Check all the rules that come before this one to make sure they are only @charset and @import rules. for (unsigned i = 0; i < index; ++i) { if (!item(i)->isCharsetRule() && !item(i)->isImportRule()) { ec = HIERARCHY_REQUEST_ERR; return 0; } } } else if (r->isCharsetRule()) { // The @charset rule has to come first and there can be only one. ec = HIERARCHY_REQUEST_ERR; return 0; } } CSSRule* c = r.get(); m_children.insert(index, r.release()); c->insertedIntoParent(); styleSheetChanged(); return index; }
void CSSStyleSheet::append(PassRefPtr<CSSRule> child) { CSSRule* c = child.get(); m_children.append(child); c->insertedIntoParent(); }