FlushText();  SINK_TRACE_NODE(SINK_TRACE_CALLS, "SinkContext::OpenContainer", aNode);  nsresult rv; if (mStackPos + 1 > mStackSize) { rv = GrowStack(); if (NS_OK != rv) { return rv; }
if (eHTMLTag_frameset == aNode.GetNodeType()) { return OpenFrameset(aNode);
SinkContext::OpenContainer(const nsIParserNode& aNode){  FlushText();  SINK_TRACE_NODE(SINK_TRACE_CALLS,                  "SinkContext::OpenContainer", aNode);  nsresult rv;  if (mStackPos + 1 > mStackSize) {    rv = GrowStack();    if (NS_OK != rv) {      return rv;    }  }  // Create new container content object  nsHTMLTag nodeType = nsHTMLTag(aNode.GetNodeType());  nsIHTMLContent* content;  rv = CreateContentObject(aNode, nodeType,                           mSink->mCurrentForm,                           mSink->mFrameset ? mSink->mWebShell : nsnull,                           &content);  if (NS_OK != rv) {    return rv;  }  mStack[mStackPos].mType = nodeType;  mStack[mStackPos].mContent = content;  mStack[mStackPos].mFlags = 0;  content->SetDocument(mSink->mDocument, PR_FALSE);  nsIScriptContextOwner* sco = mSink->mDocument->GetScriptContextOwner();  rv = AddAttributes(aNode, content, sco);  NS_IF_RELEASE(sco);  if (mPreAppend) {    NS_ASSERTION(mStackPos > 0, "container w/o parent");    nsIHTMLContent* parent = mStack[mStackPos-1].mContent;    parent->AppendChildTo(content, PR_FALSE);    mStack[mStackPos].mFlags |= APPENDED;  }  mStackPos++;  if (NS_OK != rv) {    return rv;  }  // Special handling for certain tags  switch (nodeType) {  case eHTMLTag_a:    mSink->ProcessATag(aNode, content);    break;  case eHTMLTag_table:    mSink->mInMonolithicContainer++;    break;  default:    break;  }  return NS_OK;}