nsFormFillController::~nsFormFillController() { // Remove ourselves as a focus listener from all cached docShells PRUint32 count; mDocShells->Count(&count); for (PRUint32 i = 0; i < count; ++i) { nsCOMPtr<nsIDocShell> docShell; mDocShells->GetElementAt(i, getter_AddRefs(docShell)); nsCOMPtr<nsIDOMWindow> domWindow = GetWindowForDocShell(docShell); RemoveWindowListeners(domWindow); } }
NS_IMETHODIMP nsFormFillController::DetachFromBrowser(nsIDocShell *aDocShell) { int32_t index = GetIndexOfDocShell(aDocShell); NS_ENSURE_TRUE(index >= 0, NS_ERROR_FAILURE); // Stop listening for focus events on the domWindow of the docShell nsCOMPtr<nsIDOMWindow> domWindow = GetWindowForDocShell(mDocShells.SafeElementAt(index)); RemoveWindowListeners(domWindow); mDocShells.RemoveElementAt(index); mPopups.RemoveElementAt(index); return NS_OK; }
NS_IMETHODIMP nsWidgetUtils::Observe(nsISupports *aSubject, const char *aTopic, const PRUnichar *aData) { nsresult rv; if (!strcmp(aTopic,"domwindowopened")) { nsCOMPtr<nsIDOMWindow> chromeWindow = do_QueryInterface(aSubject); if (chromeWindow) AttachWindowListeners(chromeWindow); return NS_OK; } if (!strcmp(aTopic,"domwindowclosed")) { nsCOMPtr<nsIDOMWindow> chromeWindow = do_QueryInterface(aSubject); RemoveWindowListeners(chromeWindow); return NS_OK; } return NS_OK; }
nsFormFillController::~nsFormFillController() { if (mListNode) { mListNode->RemoveMutationObserver(this); mListNode = nullptr; } if (mFocusedInputNode) { MaybeRemoveMutationObserver(mFocusedInputNode); mFocusedInputNode = nullptr; mFocusedInput = nullptr; } PwmgrInputsEnumData ed(this, nullptr); mPwmgrInputs.Enumerate(RemoveForDocumentEnumerator, &ed); // Remove ourselves as a focus listener from all cached docShells uint32_t count = mDocShells.Length(); for (uint32_t i = 0; i < count; ++i) { nsCOMPtr<nsIDOMWindow> domWindow = GetWindowForDocShell(mDocShells[i]); RemoveWindowListeners(domWindow); } }