PRBool nsEditorHookUtils::DoAllowDropHook(nsIDOMDocument *aDoc, nsIDOMEvent *aEvent, nsIDragSession *aSession) { nsCOMPtr<nsISimpleEnumerator> enumerator; GetHookEnumeratorFromDocument(aDoc, getter_AddRefs(enumerator)); if (!enumerator) return PR_TRUE; PRBool hasMoreHooks = PR_FALSE; while (NS_SUCCEEDED(enumerator->HasMoreElements(&hasMoreHooks)) && hasMoreHooks) { nsCOMPtr<nsISupports> isupp; if (NS_FAILED(enumerator->GetNext(getter_AddRefs(isupp)))) break; nsCOMPtr<nsIClipboardDragDropHooks> override = do_QueryInterface(isupp); if (override) { PRBool allowDrop = PR_TRUE; nsresult hookResult = override->AllowDrop(aEvent, aSession, &allowDrop); NS_ASSERTION(NS_SUCCEEDED(hookResult), "hook failure in AllowDrop"); if (!allowDrop) return PR_FALSE; } } return PR_TRUE; }
bool nsEditorHookUtils::DoInsertionHook(nsIDOMDocument *aDoc, nsIDOMEvent *aDropEvent, nsITransferable *aTrans) { nsCOMPtr<nsISimpleEnumerator> enumerator; GetHookEnumeratorFromDocument(aDoc, getter_AddRefs(enumerator)); NS_ENSURE_TRUE(enumerator, PR_TRUE); bool hasMoreHooks = false; while (NS_SUCCEEDED(enumerator->HasMoreElements(&hasMoreHooks)) && hasMoreHooks) { nsCOMPtr<nsISupports> isupp; if (NS_FAILED(enumerator->GetNext(getter_AddRefs(isupp)))) break; nsCOMPtr<nsIClipboardDragDropHooks> override = do_QueryInterface(isupp); if (override) { bool doInsert = true; #ifdef DEBUG nsresult hookResult = #endif override->OnPasteOrDrop(aDropEvent, aTrans, &doInsert); NS_ASSERTION(NS_SUCCEEDED(hookResult), "hook failure in OnPasteOrDrop"); NS_ENSURE_TRUE(doInsert, PR_FALSE); } } return PR_TRUE; }
PRBool nsEditorHookUtils::DoDragHook(nsIDOMDocument *aDoc, nsIDOMEvent *aEvent, nsITransferable *aTrans) { nsCOMPtr<nsISimpleEnumerator> enumerator; GetHookEnumeratorFromDocument(aDoc, getter_AddRefs(enumerator)); if (!enumerator) return PR_TRUE; PRBool hasMoreHooks = PR_FALSE; while (NS_SUCCEEDED(enumerator->HasMoreElements(&hasMoreHooks)) && hasMoreHooks) { nsCOMPtr<nsISupports> isupp; if (NS_FAILED(enumerator->GetNext(getter_AddRefs(isupp)))) break; nsCOMPtr<nsIClipboardDragDropHooks> override = do_QueryInterface(isupp); if (override) { PRBool canInvokeDrag = PR_TRUE; nsresult hookResult = override->OnCopyOrDrag(aEvent, aTrans, &canInvokeDrag); NS_ASSERTION(NS_SUCCEEDED(hookResult), "hook failure in OnCopyOrDrag"); if (!canInvokeDrag) return PR_FALSE; } } return PR_TRUE; }