//---------------------------------------- nsCOMPtr<nsIDOMDocument> nsWebShellWindow::GetNamedDOMDoc(const nsAString & aDocShellName) { nsCOMPtr<nsIDOMDocument> domDoc; // result == nsnull; // first get the toolbar child docShell nsCOMPtr<nsIDocShell> childDocShell; if (aDocShellName.EqualsLiteral("this")) { // XXX small kludge for code reused childDocShell = mDocShell; } else { nsCOMPtr<nsIDocShellTreeItem> docShellAsItem; nsCOMPtr<nsIDocShellTreeNode> docShellAsNode(do_QueryInterface(mDocShell)); docShellAsNode->FindChildWithName(PromiseFlatString(aDocShellName).get(), PR_TRUE, PR_FALSE, nsnull, nsnull, getter_AddRefs(docShellAsItem)); childDocShell = do_QueryInterface(docShellAsItem); if (!childDocShell) return domDoc; } nsCOMPtr<nsIContentViewer> cv; childDocShell->GetContentViewer(getter_AddRefs(cv)); if (!cv) return domDoc; nsIDocument* doc = cv->GetDocument(); if (doc) return nsCOMPtr<nsIDOMDocument>(do_QueryInterface(doc)); return domDoc; } // nsWebShellWindow::GetNamedDOMDoc
static void DumpContentRecur(nsIDocShell* aDocShell, FILE* out) { #ifdef DEBUG if (nsnull != aDocShell) { fprintf(out, "docshell=%p \n", NS_STATIC_CAST(void*, aDocShell)); nsCOMPtr<nsIDocument> doc(document(aDocShell)); if (doc) { nsIContent *root = doc->GetRootContent(); if (root) { root->List(out); } } else { fputs("no document\n", out); } // dump the frames of the sub documents PRInt32 i, n; nsCOMPtr<nsIDocShellTreeNode> docShellAsNode(do_QueryInterface(aDocShell)); docShellAsNode->GetChildCount(&n); for (i = 0; i < n; ++i) { nsCOMPtr<nsIDocShellTreeItem> child; docShellAsNode->GetChildAt(i, getter_AddRefs(child)); nsCOMPtr<nsIDocShell> childAsShell(do_QueryInterface(child)); if (child) { DumpContentRecur(childAsShell, out); } } }
NS_INTERFACE_MAP_END NS_IMETHODIMP nsDOMWindowList::SetDocShell(nsIDocShell* aDocShell) { nsCOMPtr<nsIDocShellTreeNode> docShellAsNode(do_QueryInterface(aDocShell)); mDocShellNode = docShellAsNode; // Weak Reference return NS_OK; }