 +        nsCOMPtr<nsIDOMDataTransfer> dataTransfer;
 +        dragSession->GetDataTransfer(getter_AddRefs(dataTransfer));
 +        if (dataTransfer) {
-+          dataTransfer->SetDropEffectInt(nsIDragService::DRAGDROP_ACTION_NONE);
++          nsCOMPtr<nsIDOMNSDataTransfer> dataTransferNS =
++                do_QueryInterface(dataTransfer);
++          if (dataTransferNS) {
++            dataTransferNS->SetDropEffectInt(nsIDragService::DRAGDROP_ACTION_NONE);
++          }
 +        }
 +      }
      }

 widget/windows/nsPIDragServiceWindows.idl |   46 +++++++++++++++++++++++++++
 widget/xpwidgets/nsBaseDragService.cpp    |   16 +++++++++-
 widget/xpwidgets/nsBaseDragService.h      |    9 ++---
 15 files changed, 176 insertions(+), 49 deletions(-)
 create mode 100644 widget/nsPIDragService.idl
 create mode 100644 widget/windows/nsPIDragServiceWindows.idl


 
     // XXX: dropEffect should be updated per |operation|. 
     // As things stand though, |operation| isn't well handled within "our"
@@ -4606,13 +4609,19 @@ NSEvent* gLastDragMouseDownEvent = nil;
     // value for NSDragOperationGeneric that is passed by other applications.
     // All that said, NSDragOperationNone is still reliable.
     if (operation == NSDragOperationNone) {
