SetObserver(nsnull);
nsWebShell::Destroy(){  nsresult rv = NS_OK;  //Fire unload event before we blow anything away.  if (nsnull != mScriptGlobal) {    nsIDocumentViewer* docViewer;    if (nsnull != mContentViewer &&        NS_OK == mContentViewer->QueryInterface(kIDocumentViewerIID, (void**)&docViewer)) {      nsIPresContext *presContext;      if (NS_OK == docViewer->GetPresContext(presContext)) {        nsEventStatus status = nsEventStatus_eIgnore;        nsMouseEvent event;        event.eventStructType = NS_EVENT;        event.message = NS_PAGE_UNLOAD;        rv = mScriptGlobal->HandleDOMEvent(*presContext, &event, nsnull, NS_EVENT_FLAG_INIT, status);        NS_RELEASE(presContext);      }      NS_RELEASE(docViewer);    }  }  // Stop any URLs that are currently being loaded...  Stop();  mDocLoader->Destroy();  SetContainer(nsnull);  SetObserver(nsnull);  SetDocLoaderObserver(nsnull);  SetUrlDispatcher(nsnull);  // Remove this webshell from its parent's child list  if (nsnull != mParent) {    mParent->RemoveChild(this);  }  if (nsnull != mDocLoader) {    mDocLoader->SetContainer(nsnull);  }  NS_IF_RELEASE(mContentViewer);  // Destroy our child web shells and release references to them  DestroyChildren();  return rv;}