[Libreoffice-commits] core.git: sfx2/Library_sfx.mk sfx2/source

Christian Lohmaier (via logerrit) logerrit at kemper.freedesktop.org
Fri May 31 09:42:06 UTC 2019


 sfx2/Library_sfx.mk          |    3 ++
 sfx2/source/appl/sfxhelp.cxx |   47 ++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 47 insertions(+), 3 deletions(-)

New commits:
commit 44893662d510c4173e55ba27af02d0258a697a5d
Author:     Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>
AuthorDate: Wed May 29 15:16:23 2019 +0200
Commit:     Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>
CommitDate: Fri May 31 11:41:28 2019 +0200

    tdf#125578 force webhelp as workaround for Safari sandboxing w/ macOS 10.14
    
    Sandboxing prevents access to files in user profile as well as to
    contents of the LibreOffice.app unless it is manually triggered by the
    user. Even a clicking a link pointing to the files on an automatically
    opened file is not enough, the user would have to copy'n'paste the
    target.
    As a workaround force online help when default browser is Safari and
    running on 10.14 or later. (other browsers don't seem to enforce
    sandboxing yet and continue to work)
    
    also fix error in the meta tag for the intermediate page (delay and URL
    are both part of the content attribute and not separate)
    
    Change-Id: I6cc50ec1b1928c2416fdfef4cf50e2196a8594ae
    Reviewed-on: https://gerrit.libreoffice.org/73163
    Tested-by: Xisco FaulĂ­ <xiscofauli at libreoffice.org>
    Tested-by: Jenkins
    Reviewed-by: Olivier Hallot <olivier.hallot at libreoffice.org>
    Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>

diff --git a/sfx2/Library_sfx.mk b/sfx2/Library_sfx.mk
index fe6f24c6dd98..3f911e6b088d 100644
--- a/sfx2/Library_sfx.mk
+++ b/sfx2/Library_sfx.mk
@@ -324,6 +324,9 @@ $(eval $(call gb_Library_add_defs,sfx,\
 endif
 
 ifeq ($(OS),MACOSX)
+$(eval $(call gb_Library_add_cxxflags,sfx,\
+    $(gb_OBJCXXFLAGS) \
+))
 $(eval $(call gb_Library_add_objcxxobjects,sfx,\
     sfx2/source/appl/shutdowniconaqua \
 ))
diff --git a/sfx2/source/appl/sfxhelp.cxx b/sfx2/source/appl/sfxhelp.cxx
index daeaeddb2b40..275b55172630 100644
--- a/sfx2/source/appl/sfxhelp.cxx
+++ b/sfx2/source/appl/sfxhelp.cxx
@@ -24,6 +24,13 @@
 #include <string_view>
 #include <algorithm>
 #include <cassert>
+#ifdef MACOSX
+#include <premac.h>
+#include <Foundation/NSString.h>
+#include <CoreFoundation/CFURL.h>
+#include <CoreServices/CoreServices.h>
+#include <postmac.h>
+#endif
 
 #include <sal/log.hxx>
 #include <com/sun/star/uno/Reference.h>
@@ -713,7 +720,16 @@ static bool impl_showOnlineHelp( const OUString& rURL )
 
     try
     {
+#ifdef MACOSX
+        LSOpenCFURLRef(CFURLCreateWithString(kCFAllocatorDefault,
+                           CFStringCreateWithCString(kCFAllocatorDefault,
+                               aHelpLink.toUtf8().getStr(),
+                               kCFStringEncodingUTF8),
+                           NULL),
+            NULL);
+#else
         sfx2::openUriExternally(aHelpLink, false);
+#endif
         return true;
     }
     catch (const Exception&)
@@ -892,10 +908,11 @@ bool rewriteFlatpakHelpRootUrl(OUString * helpRootUrl) {
 }
 
 #define SHTML1 "<!DOCTYPE HTML><html lang=\"en-US\"><head><meta charset=\"UTF-8\">"
-#define SHTML2 "<meta http-equiv=\"refresh\" content=\"1\" url=\""
-#define SHTML3 "\"><script type=\"text/javascript\"> window.location.href = \""
+#define SHTML2 "<meta http-equiv=\"refresh\" content=\"1; url='"
+#define SHTML3 "'\"><script type=\"text/javascript\"> window.location.href = \""
 #define SHTML4 "\";</script><title>Help Page Redirection</title></head><body></body></html>"
 
+// use a tempfile since e.g. xdg-open doesn't support URL-parameters with file:// URLs
 static bool impl_showOfflineHelp( const OUString& rURL )
 {
     OUString aBaseInstallPath = getHelpRootURL();
@@ -929,10 +946,18 @@ static bool impl_showOfflineHelp( const OUString& rURL )
     pStream->WriteUnicodeOrByteText(aTempStr);
 
     aTempFile.CloseStream();
-
     try
     {
+#ifdef MACOSX
+        LSOpenCFURLRef(CFURLCreateWithString(kCFAllocatorDefault,
+                           CFStringCreateWithCString(kCFAllocatorDefault,
+                               aTempFile.GetURL().toUtf8().getStr(),
+                               kCFStringEncodingUTF8),
+                           NULL),
+            NULL);
+#else
         sfx2::openUriExternally(aTempFile.GetURL(), false);
+#endif
         return true;
     }
     catch (const Exception&)
@@ -1044,6 +1069,22 @@ bool SfxHelp::Start_Impl(const OUString& rURL, const vcl::Window* pWindow, const
         impl_showOnlineHelp( aHelpURL );
         return true;
     }
+#ifdef MACOSX
+    if (@available(macOS 10.14, *)) {
+        // Workaround: Safari sandboxing prevents it from accessing files in the LibreOffice.app folder
+        // force online-help instead if Safari is default browser.
+        CFURLRef pBrowser = LSCopyDefaultApplicationURLForURL(
+                                CFURLCreateWithString(
+                                    kCFAllocatorDefault,
+                                    (CFStringRef)@"https://www.libreoffice.org",
+                                    NULL),
+                                kLSRolesAll, NULL);
+        if([(NSString*)CFURLGetString(pBrowser) isEqualToString:@"file:///Applications/Safari.app/"]) {
+            impl_showOnlineHelp( aHelpURL );
+            return true;
+        }
+    }
+#endif
 
     // If the HTML or no help is installed, but aHelpURL nevertheless references valid help content,
     // that implies that this help content belongs to an extension (and thus would not be available


More information about the Libreoffice-commits mailing list