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.h
void DidStopLoading() override;
  void DidGetResourceResponseStart(
      const content::ResourceRequestDetails& details) override;
  void DidGetRedirectForResourceRequest(
      content::RenderFrameHost* render_frame_host,
      const content::ResourceRedirectDetails& details) override;
  void DidNavigateMainFrame(
      const content::LoadCommittedDetails& details,
      const content::FrameNavigateParams& params) override;
  bool OnMessageReceived(const IPC::Message& message) override;
  void WebContentsDestroyed() override;
  void NavigationEntryCommitted(
      const content::LoadCommittedDetails& load_details) override;
  void TitleWasSet(content::NavigationEntry* entry, bool explicit_set) override;
  void DidUpdateFaviconURL(
      const std::vector<content::FaviconURL>& urls) override;
  void PluginCrashed(const base::FilePath& plugin_path,
                     base::ProcessId plugin_pid) override;
  void MediaStartedPlaying(const MediaPlayerId& id) override;
  void MediaStoppedPlaying(const MediaPlayerId& id) override;
  void DidChangeThemeColor(SkColor theme_color) override;
  
  void DevToolsReloadPage() override;
  
  void DevToolsFocused() override;
  void DevToolsOpened() override;
  void DevToolsClosed() override;
 private:
  AtomBrowserContext* GetBrowserContext() const;
  uint32_t GetNextRequestId() {