diff --git a/mozilla/content/html/document/src/nsHTMLContentSink.cpp b/mozilla/content/html/document/src/nsHTMLContentSink.cpp
index 29f1254daf1..58746db78b1 100644
--- a/mozilla/content/html/document/src/nsHTMLContentSink.cpp
+++ b/mozilla/content/html/document/src/nsHTMLContentSink.cpp
@@ -4606,67 +4606,76 @@ HTMLContentSink::ProcessSTYLETag(const nsIParserNode& aNode)
nsresult rv = NS_OK;
nsIHTMLContent* parent = nsnull;
- if(mCurrentContext!=nsnull) {
- parent=mCurrentContext->mStack[mCurrentContext->mStackPos-1].mContent;
+ if (mCurrentContext) {
+ parent = mCurrentContext->mStack[mCurrentContext->mStackPos - 1].mContent;
}
- if(parent!=nsnull) {
+ if (parent) {
// Create content object
- nsIHTMLContent* element = nsnull;
+ nsCOMPtr element;
+ nsCOMPtr ssle;
nsCOMPtr nodeInfo;
mNodeInfoManager->GetNodeInfo(nsHTMLAtoms::style, nsnull,
kNameSpaceID_None,
*getter_AddRefs(nodeInfo));
- rv = NS_CreateHTMLElement(&element, nodeInfo, PR_FALSE);
+ rv = NS_CreateHTMLElement(getter_AddRefs(element), nodeInfo, PR_FALSE);
if (NS_SUCCEEDED(rv)) {
PRInt32 id;
mDocument->GetAndIncrementContentID(&id);
element->SetContentID(id);
+ ssle = do_QueryInterface(element);
+
+ if (ssle) {
+ // XXX need prefs. check here.
+ if (!mInsideNoXXXTag) {
+ ssle->InitStyleLinkElement(mParser, PR_FALSE);
+ }
+ else {
+ ssle->InitStyleLinkElement(mParser, PR_TRUE);
+ }
+ ssle->SetEnableUpdates(PR_FALSE);
+ }
+
// Add in the attributes and add the style content object to the
// head container.
element->SetDocument(mDocument, PR_FALSE, PR_TRUE);
rv = AddAttributes(aNode, element);
if (NS_FAILED(rv)) {
- NS_RELEASE(element);
return rv;
}
parent->AppendChildTo(element, PR_FALSE, PR_FALSE);
+
+ if (ssle) {
+ ssle->SetEnableUpdates(PR_TRUE);
+ rv = ssle->UpdateStyleSheet(PR_TRUE, mDocument, mStyleSheetCount);
+ if (NS_SUCCEEDED(rv) || (rv == NS_ERROR_HTMLPARSER_BLOCK))
+ mStyleSheetCount++;
+ }
}
- if(!mInsideNoXXXTag && NS_SUCCEEDED(rv)) {
+ nsAutoString src;
+ element->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::src, src);
+ src.StripWhitespace();
+ if (!mInsideNoXXXTag && NS_SUCCEEDED(rv) && src.IsEmpty()) {
PRInt32 i, count = aNode.GetAttributeCount();
- nsAutoString src;
nsAutoString title;
nsAutoString type;
nsAutoString media;
- for (i = 0; i < count; i++) {
- nsAutoString key(aNode.GetKeyAt(i));
- if (key.EqualsIgnoreCase("src")) {
- GetAttributeValueAt(aNode, i, src);
- src.StripWhitespace();
- }
- else if (key.EqualsIgnoreCase("title")) {
- GetAttributeValueAt(aNode, i, title);
- title.CompressWhitespace();
- }
- else if (key.EqualsIgnoreCase("type")) {
- GetAttributeValueAt(aNode, i, type);
- type.StripWhitespace();
- }
- else if (key.EqualsIgnoreCase("media")) {
- GetAttributeValueAt(aNode, i, media);
- media.ToLowerCase(); // HTML4.0 spec is inconsistent, make it case INSENSITIVE
- }
- }
+ element->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::title, title);
+ title.CompressWhitespace();
+ element->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::type, type);
- nsAutoString mimeType;
- nsAutoString params;
+ element->GetAttribute(kNameSpaceID_HTML, nsHTMLAtoms::media, media);
+ media.ToLowerCase(); // HTML4.0 spec is inconsistent, make it case INSENSITIVE
+
+ nsAutoString mimeType;
+ nsAutoString params;
nsStyleLinkElement::SplitMimeType(type, mimeType, params);
PRBool blockParser = kBlockByDefault;
@@ -4684,64 +4693,39 @@ HTMLContentSink::ProcessSTYLETag(const nsIParserNode& aNode)
const nsString& content = aNode.GetSkippedContent();
PRBool doneLoading = PR_FALSE;
- nsIUnicharInputStream* uin = nsnull;
- if (src.IsEmpty()) {
+ nsCOMPtr uin;
- // Create a text node holding the content
- nsIContent* text;
- rv = NS_NewTextNode(&text);
+ // Create a text node holding the content
+ nsCOMPtr text;
+ rv = NS_NewTextNode(getter_AddRefs(text));
+ if (NS_OK == rv) {
+ nsCOMPtr tc = do_QueryInterface(text, &rv);
if (NS_OK == rv) {
- nsIDOMText* tc;
- rv = text->QueryInterface(NS_GET_IID(nsIDOMText), (void**)&tc);
- if (NS_OK == rv) {
- tc->SetData(content);
- NS_RELEASE(tc);
- }
- element->AppendChildTo(text, PR_FALSE, PR_FALSE);
- text->SetDocument(mDocument, PR_FALSE, PR_TRUE);
- NS_RELEASE(text);
+ tc->SetData(content);
}
-
- // Create a string to hold the data and wrap it up in a unicode
- // input stream.
- rv = NS_NewStringUnicharInputStream(&uin, new nsString(content));
- if (NS_OK != rv) {
- return rv;
- }
-
- // Now that we have a url and a unicode input stream, parse the
- // style sheet.
- rv = mCSSLoader->LoadInlineStyle(element, uin, title, media, kNameSpaceID_Unknown,
- mStyleSheetCount++,
- ((blockParser) ? mParser : nsnull),
- doneLoading, this);
- NS_RELEASE(uin);
- }
- else {
- // src with immediate style data doesn't add up
- // XXX what does nav do?
- // Use the SRC attribute value to load the URL
- nsIURI* url = nsnull;
- {
- rv = NS_NewURI(&url, src, mDocumentBaseURL);
- }
- if (NS_OK != rv) {
- return rv;
- }
-
- rv = mCSSLoader->LoadStyleLink(element, url, title, media, kNameSpaceID_Unknown,
- mStyleSheetCount++,
- ((blockParser) ? mParser : nsnull),
- doneLoading, this);
- NS_RELEASE(url);
+ element->AppendChildTo(text, PR_FALSE, PR_FALSE);
+ text->SetDocument(mDocument, PR_FALSE, PR_TRUE);
}
- if (NS_SUCCEEDED(rv) && blockParser && (! doneLoading)) {
+
+ // Create a string to hold the data and wrap it up in a unicode
+ // input stream.
+ rv = NS_NewStringUnicharInputStream(getter_AddRefs(uin), new nsString(content));
+ if (NS_OK != rv) {
+ return rv;
+ }
+
+ // Now that we have a url and a unicode input stream, parse the
+ // style sheet.
+ rv = mCSSLoader->LoadInlineStyle(element, uin, title, media, kNameSpaceID_Unknown,
+ mStyleSheetCount++,
+ ((blockParser) ? mParser : nsnull),
+ doneLoading, this);
+ if (NS_SUCCEEDED(rv) && blockParser && (!doneLoading)) {
rv = NS_ERROR_HTMLPARSER_BLOCK;
}
}//if (mimeType.IsEmpty() || mimeType.Equals(NS_LITERAL_STRING("text/css")))
- }//if(!mInsideNoXXXTag && NS_SUCCEEDED(rv))
- NS_RELEASE(element);
- }//if(parent!=nsnull)
+ }//if (!mInsideNoXXXTag && NS_SUCCEEDED(rv) && src.IsEmpty())
+ }//if (parent)
return rv;
}