diff options
Diffstat (limited to 'widget/windows/nsFilePicker.cpp')
-rw-r--r-- | widget/windows/nsFilePicker.cpp | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/widget/windows/nsFilePicker.cpp b/widget/windows/nsFilePicker.cpp index 78656165d9..59ae152ec6 100644 --- a/widget/windows/nsFilePicker.cpp +++ b/widget/windows/nsFilePicker.cpp @@ -29,6 +29,7 @@ #include "GeckoProfiler.h" using mozilla::IsWin8OrLater; +using mozilla::IsWin10OrLater; using mozilla::MakeUnique; using mozilla::mscom::EnsureMTA; using mozilla::UniquePtr; @@ -193,11 +194,13 @@ nsFilePicker::~nsFilePicker() NS_IMPL_ISUPPORTS(nsFilePicker, nsIFilePicker) -NS_IMETHODIMP nsFilePicker::Init(mozIDOMWindowProxy *aParent, const nsAString& aTitle, int16_t aMode) +NS_IMETHODIMP nsFilePicker::Init(mozIDOMWindowProxy *aParent, const nsAString& aTitle, int16_t aMode, + bool aRequireInteraction) { nsCOMPtr<nsPIDOMWindowOuter> window = do_QueryInterface(aParent); nsIDocShell* docShell = window ? window->GetDocShell() : nullptr; mLoadContext = do_QueryInterface(docShell); + mRequireInteraction = aRequireInteraction; return nsBaseFilePicker::Init(aParent, aTitle, aMode); } @@ -360,7 +363,14 @@ nsFilePicker::ShowFolderPicker(const nsString& aInitialDir) dialog->Advise(this, &mFDECookie); // options - FILEOPENDIALOGOPTIONS fos = FOS_PICKFOLDERS | FOS_OKBUTTONNEEDSINTERACTION; + FILEOPENDIALOGOPTIONS fos = FOS_PICKFOLDERS; + // Require interaction if the folder picker is triggered by an element that + // is potentially unsafe to use the default value in. + // Win 10+ only, because this dialog flag is broken in earlier versions. + if (IsWin10OrLater() && mRequireInteraction) { + fos |= FOS_OKBUTTONNEEDSINTERACTION; + } + dialog->SetOptions(fos); // initial strings @@ -459,7 +469,14 @@ nsFilePicker::ShowFilePicker(const nsString& aInitialDir) FILEOPENDIALOGOPTIONS fos = 0; fos |= FOS_SHAREAWARE | FOS_OVERWRITEPROMPT | - FOS_FORCEFILESYSTEM | FOS_OKBUTTONNEEDSINTERACTION; + FOS_FORCEFILESYSTEM; + + // Require interaction if the file picker is triggered by an element that + // is potentially unsafe to use the default value in. + // Win 10+ only, because this dialog flag is broken in earlier versions. + if (IsWin10OrLater() && mRequireInteraction) { + fos |= FOS_OKBUTTONNEEDSINTERACTION; + } // Handle add to recent docs settings if (IsPrivacyModeEnabled() || !mAddToRecentDocs) { |