The best way to start a File-Drag for now, is the downloadURL as i know.

Like here in Nylas N1:
https://github.com/nylas/N1/blob/master/internal_packages/attachments/lib/attachment-component.cjsx#L67

But only Images and PDFs are able to Drop direct on an Application (MAC). Other file formats just can be copied to Folders.
I think I'm not the only one who is looking for a full native file drop and I think chromium offers that already.

On chrome://downloads/ its possible to Drag any File on an Application (Mac).

Is there maybe a way to access this Drag Function in electron or can it become a part of?
Multi File Drag would be very nice too! :)

[chrome://downloads/ > js dragstart > chrome.send('drag', id)](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/resources/md_downloads/crisper.js&q=crisper.js&sq=package:chromium&type=cs&l=15751)

I have no knowledge, about cc++ but it found that... :D
[drag_download_item_views.cc](https://code.google.com/p/chromium/codesearch#chromium/src/chrome/browser/download/drag_download_item_views.cc&q=DragDownloadItem&sq=package:chromium&dr=CSs&l=31)
[md_downloads_dom_handler.cc](https://chromium.googlesource.com/chromium/src.git/+/master/chrome/browser/ui/webui/md_downloads/md_downloads_dom_handler.cc)

atom/browser/api/atom_api_web_contents.cc
type_ = WEB_VIEW;
  else if (options.Get("isBackgroundPage", &b) && b)
    type_ = BACKGROUND_PAGE;
  
  std::string partition;
  mate::Handle<api::Session> session;
  if (options.Get("session", &session)) {
  } else if (options.Get("partition", &partition) && !partition.empty()) {
    bool in_memory = true;
    if (base::StartsWith(partition, "persist:", base::CompareCase::SENSITIVE)) {
      in_memory = false;
      partition = partition.substr(8);
    }
    session = Session::FromPartition(isolate, partition, in_memory);
  } else {
    
    session = Session::FromPartition(isolate, "", false);
  }
  session_.Reset(isolate, session.ToV8());
  content::WebContents* web_contents;
  if (IsGuest()) {
    scoped_refptr<content::SiteInstance> site_instance =
        content::SiteInstance::CreateForURL(
            session->browser_context(), GURL("chrome-guest://fake-host"));
    content::WebContents::CreateParams params(
        session->browser_context(), site_instance);
    guest_delegate_.reset(new WebViewGuestDelegate);
    params.guest_delegate = guest_delegate_.get();
    web_contents = content::WebContents::Create(params);
  } else {