nsresult MediaDocument::CreateSyntheticDocument() { // Synthesize an empty html document nsresult rv; nsCOMPtr<nsINodeInfo> nodeInfo; nodeInfo = mNodeInfoManager->GetNodeInfo(nsGkAtoms::html, nsnull, kNameSpaceID_XHTML, nsIDOMNode::ELEMENT_NODE); NS_ENSURE_TRUE(nodeInfo, NS_ERROR_OUT_OF_MEMORY); nsRefPtr<nsGenericHTMLElement> root = NS_NewHTMLHtmlElement(nodeInfo.forget()); NS_ENSURE_TRUE(root, NS_ERROR_OUT_OF_MEMORY); NS_ASSERTION(GetChildCount() == 0, "Shouldn't have any kids"); rv = AppendChildTo(root, false); NS_ENSURE_SUCCESS(rv, rv); nodeInfo = mNodeInfoManager->GetNodeInfo(nsGkAtoms::head, nsnull, kNameSpaceID_XHTML, nsIDOMNode::ELEMENT_NODE); NS_ENSURE_TRUE(nodeInfo, NS_ERROR_OUT_OF_MEMORY); // Create a <head> so our title has somewhere to live nsRefPtr<nsGenericHTMLElement> head = NS_NewHTMLHeadElement(nodeInfo.forget()); NS_ENSURE_TRUE(head, NS_ERROR_OUT_OF_MEMORY); nodeInfo = mNodeInfoManager->GetNodeInfo(nsGkAtoms::meta, nsnull, kNameSpaceID_XHTML, nsIDOMNode::ELEMENT_NODE); NS_ENSURE_TRUE(nodeInfo, NS_ERROR_OUT_OF_MEMORY); nsRefPtr<nsGenericHTMLElement> metaContent = NS_NewHTMLMetaElement(nodeInfo.forget()); NS_ENSURE_TRUE(metaContent, NS_ERROR_OUT_OF_MEMORY); metaContent->SetAttr(kNameSpaceID_None, nsGkAtoms::name, NS_LITERAL_STRING("viewport"), true); metaContent->SetAttr(kNameSpaceID_None, nsGkAtoms::content, NS_LITERAL_STRING("width=device-width; height=device-height;"), true); head->AppendChildTo(metaContent, false); root->AppendChildTo(head, false); nodeInfo = mNodeInfoManager->GetNodeInfo(nsGkAtoms::body, nsnull, kNameSpaceID_XHTML, nsIDOMNode::ELEMENT_NODE); NS_ENSURE_TRUE(nodeInfo, NS_ERROR_OUT_OF_MEMORY); nsRefPtr<nsGenericHTMLElement> body = NS_NewHTMLBodyElement(nodeInfo.forget()); NS_ENSURE_TRUE(body, NS_ERROR_OUT_OF_MEMORY); root->AppendChildTo(body, false); return NS_OK; }
nsresult nsMediaDocument::CreateSyntheticDocument() { // Synthesize an empty html document nsresult rv; nsCOMPtr<nsINodeInfo> nodeInfo; rv = mNodeInfoManager->GetNodeInfo(nsGkAtoms::html, nsnull, kNameSpaceID_None, getter_AddRefs(nodeInfo)); NS_ENSURE_SUCCESS(rv, rv); nsRefPtr<nsGenericHTMLElement> root = NS_NewHTMLHtmlElement(nodeInfo); if (!root) { return NS_ERROR_OUT_OF_MEMORY; } NS_ASSERTION(GetChildCount() == 0, "Shouldn't have any kids"); rv = AppendChildTo(root, PR_FALSE); NS_ENSURE_SUCCESS(rv, rv); rv = mNodeInfoManager->GetNodeInfo(nsGkAtoms::head, nsnull, kNameSpaceID_None, getter_AddRefs(nodeInfo)); NS_ENSURE_SUCCESS(rv, rv); // Create a <head> so our title has somewhere to live nsRefPtr<nsGenericHTMLElement> head = NS_NewHTMLHeadElement(nodeInfo); if (!head) { return NS_ERROR_OUT_OF_MEMORY; } root->AppendChildTo(head, PR_FALSE); rv = mNodeInfoManager->GetNodeInfo(nsGkAtoms::body, nsnull, kNameSpaceID_None, getter_AddRefs(nodeInfo)); NS_ENSURE_SUCCESS(rv, rv); nsRefPtr<nsGenericHTMLElement> body = NS_NewHTMLBodyElement(nodeInfo); if (!body) { return NS_ERROR_OUT_OF_MEMORY; } root->AppendChildTo(body, PR_FALSE); return NS_OK; }
NS_IMETHODIMP nsContentDLF::CreateBlankDocument(nsILoadGroup *aLoadGroup, nsIPrincipal* aPrincipal, nsIDocument **aDocument) { *aDocument = nsnull; nsresult rv = NS_ERROR_FAILURE; // create a new blank HTML document nsCOMPtr<nsIDocument> blankDoc(do_CreateInstance(kHTMLDocumentCID)); if (blankDoc) { // initialize nsCOMPtr<nsIURI> uri; NS_NewURI(getter_AddRefs(uri), NS_LITERAL_CSTRING("about:blank")); if (uri) { blankDoc->ResetToURI(uri, aLoadGroup, aPrincipal); rv = NS_OK; } } // add some simple content structure if (NS_SUCCEEDED(rv)) { rv = NS_ERROR_FAILURE; nsNodeInfoManager *nim = blankDoc->NodeInfoManager(); nsCOMPtr<nsINodeInfo> htmlNodeInfo; // generate an html html element nim->GetNodeInfo(nsGkAtoms::html, 0, kNameSpaceID_None, getter_AddRefs(htmlNodeInfo)); nsCOMPtr<nsIContent> htmlElement = NS_NewHTMLHtmlElement(htmlNodeInfo); // generate an html head element nim->GetNodeInfo(nsGkAtoms::head, 0, kNameSpaceID_None, getter_AddRefs(htmlNodeInfo)); nsCOMPtr<nsIContent> headElement = NS_NewHTMLHeadElement(htmlNodeInfo); // generate an html body element nim->GetNodeInfo(nsGkAtoms::body, 0, kNameSpaceID_None, getter_AddRefs(htmlNodeInfo)); nsCOMPtr<nsIContent> bodyElement = NS_NewHTMLBodyElement(htmlNodeInfo); // blat in the structure if (htmlElement && headElement && bodyElement) { NS_ASSERTION(blankDoc->GetChildCount() == 0, "Shouldn't have children"); rv = blankDoc->AppendChildTo(htmlElement, PR_FALSE); if (NS_SUCCEEDED(rv)) { rv = htmlElement->AppendChildTo(headElement, PR_FALSE); if (NS_SUCCEEDED(rv)) { // XXXbz Why not notifying here? htmlElement->AppendChildTo(bodyElement, PR_FALSE); } } } } // add a nice bow if (NS_SUCCEEDED(rv)) { blankDoc->SetDocumentCharacterSetSource(kCharsetFromDocTypeDefault); blankDoc->SetDocumentCharacterSet(NS_LITERAL_CSTRING("UTF-8")); *aDocument = blankDoc; NS_ADDREF(*aDocument); } return rv; }