Kaydet (Commit) 349b02b7 authored tarafından Christian Lohmaier's avatar Christian Lohmaier Kaydeden (comit) Adolfo Jayme Barrientos

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/73163Tested-by: 's avatarXisco Faulí <xiscofauli@libreoffice.org>
Tested-by: Jenkins
Reviewed-by: 's avatarOlivier Hallot <olivier.hallot@libreoffice.org>
Reviewed-by: 's avatarChristian Lohmaier <lohmaier+LibreOffice@googlemail.com>
(cherry picked from commit 44893662)
Reviewed-on: https://gerrit.libreoffice.org/73245Reviewed-by: 's avatarAdolfo Jayme Barrientos <fitojb@ubuntu.com>
üst 7e5554ca
...@@ -324,6 +324,9 @@ $(eval $(call gb_Library_add_defs,sfx,\ ...@@ -324,6 +324,9 @@ $(eval $(call gb_Library_add_defs,sfx,\
endif endif
ifeq ($(OS),MACOSX) ifeq ($(OS),MACOSX)
$(eval $(call gb_Library_add_cxxflags,sfx,\
$(gb_OBJCXXFLAGS) \
))
$(eval $(call gb_Library_add_objcxxobjects,sfx,\ $(eval $(call gb_Library_add_objcxxobjects,sfx,\
sfx2/source/appl/shutdowniconaqua \ sfx2/source/appl/shutdowniconaqua \
)) ))
......
...@@ -23,6 +23,13 @@ ...@@ -23,6 +23,13 @@
#include <set> #include <set>
#include <algorithm> #include <algorithm>
#include <cassert> #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 <sal/log.hxx>
#include <com/sun/star/uno/Reference.h> #include <com/sun/star/uno/Reference.h>
...@@ -723,7 +730,16 @@ static bool impl_showOnlineHelp( const OUString& rURL ) ...@@ -723,7 +730,16 @@ static bool impl_showOnlineHelp( const OUString& rURL )
try try
{ {
#ifdef MACOSX
LSOpenCFURLRef(CFURLCreateWithString(kCFAllocatorDefault,
CFStringCreateWithCString(kCFAllocatorDefault,
aHelpLink.toUtf8().getStr(),
kCFStringEncodingUTF8),
NULL),
NULL);
#else
sfx2::openUriExternally(aHelpLink, false); sfx2::openUriExternally(aHelpLink, false);
#endif
return true; return true;
} }
catch (const Exception&) catch (const Exception&)
...@@ -903,10 +919,11 @@ bool rewriteFlatpakHelpRootUrl(OUString * helpRootUrl) { ...@@ -903,10 +919,11 @@ bool rewriteFlatpakHelpRootUrl(OUString * helpRootUrl) {
} }
#define SHTML1 "<!DOCTYPE HTML><html lang=\"en-US\"><head><meta charset=\"UTF-8\">" #define SHTML1 "<!DOCTYPE HTML><html lang=\"en-US\"><head><meta charset=\"UTF-8\">"
#define SHTML2 "<meta http-equiv=\"refresh\" content=\"1\" url=\"" #define SHTML2 "<meta http-equiv=\"refresh\" content=\"1; url='"
#define SHTML3 "\"><script type=\"text/javascript\"> window.location.href = \"" #define SHTML3 "'\"><script type=\"text/javascript\"> window.location.href = \""
#define SHTML4 "\";</script><title>Help Page Redirection</title></head><body></body></html>" #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 ) static bool impl_showOfflineHelp( const OUString& rURL )
{ {
OUString aBaseInstallPath = getHelpRootURL(); OUString aBaseInstallPath = getHelpRootURL();
...@@ -940,10 +957,18 @@ static bool impl_showOfflineHelp( const OUString& rURL ) ...@@ -940,10 +957,18 @@ static bool impl_showOfflineHelp( const OUString& rURL )
pStream->WriteUnicodeOrByteText(aTempStr); pStream->WriteUnicodeOrByteText(aTempStr);
aTempFile.CloseStream(); aTempFile.CloseStream();
try try
{ {
#ifdef MACOSX
LSOpenCFURLRef(CFURLCreateWithString(kCFAllocatorDefault,
CFStringCreateWithCString(kCFAllocatorDefault,
aTempFile.GetURL().toUtf8().getStr(),
kCFStringEncodingUTF8),
NULL),
NULL);
#else
sfx2::openUriExternally(aTempFile.GetURL(), false); sfx2::openUriExternally(aTempFile.GetURL(), false);
#endif
return true; return true;
} }
catch (const Exception&) catch (const Exception&)
...@@ -1055,6 +1080,22 @@ bool SfxHelp::Start_Impl(const OUString& rURL, const vcl::Window* pWindow, const ...@@ -1055,6 +1080,22 @@ bool SfxHelp::Start_Impl(const OUString& rURL, const vcl::Window* pWindow, const
impl_showOnlineHelp( aHelpURL ); impl_showOnlineHelp( aHelpURL );
return true; 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, // 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 // that implies that this help content belongs to an extension (and thus would not be available
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment