diff -up thunderbird-45.0/mozilla/toolkit/system/gnome/moz.build.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/toolkit/system/gnome/moz.build --- thunderbird-45.0/mozilla/toolkit/system/gnome/moz.build.moz-1134537-delete-nsgnomevfsservice 2016-04-07 23:33:34.000000000 +0200 +++ thunderbird-45.0/mozilla/toolkit/system/gnome/moz.build 2016-05-11 13:56:15.863034987 +0200 @@ -15,6 +15,12 @@ if CONFIG['MOZ_ENABLE_GCONF']: 'nsGConfService.cpp', ] +if CONFIG['MOZ_ENABLE_GNOMEVFS']: + SOURCES += [ + 'nsGnomeVFSService.cpp', + ] + + if CONFIG['MOZ_ENABLE_GIO']: SOURCES += [ 'nsGIOService.cpp', @@ -29,6 +35,7 @@ LOCAL_INCLUDES += [ ] CXXFLAGS += CONFIG['MOZ_GCONF_CFLAGS'] +CXXFLAGS += CONFIG['MOZ_GNOMEVFS_CFLAGS'] CXXFLAGS += CONFIG['MOZ_GIO_CFLAGS'] CXXFLAGS += CONFIG['GLIB_CFLAGS'] CXXFLAGS += CONFIG['MOZ_DBUS_GLIB_CFLAGS'] @@ -38,3 +45,5 @@ if CONFIG['MOZ_ENABLE_GTK']: if CONFIG['GNU_CXX']: CXXFLAGS += ['-Wshadow'] + +OS_LIBS += CONFIG['MOZ_GNOMEVFS_LIBS'] \ No newline at end of file diff -up thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeModule.cpp.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeModule.cpp --- thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeModule.cpp.moz-1134537-delete-nsgnomevfsservice 2016-04-07 23:33:34.000000000 +0200 +++ thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeModule.cpp 2016-05-11 13:54:01.306097859 +0200 @@ -12,6 +12,10 @@ #include "nsGConfService.h" NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGConfService, Init) #endif +#ifdef MOZ_ENABLE_GNOMEVFS +#include "nsGnomeVFSService.h" +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGnomeVFSService, Init) +#endif #ifdef MOZ_ENABLE_GIO #include "nsGIOService.h" #include "nsGSettingsService.h" @@ -26,6 +30,9 @@ NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsSy #ifdef MOZ_ENABLE_GCONF NS_DEFINE_NAMED_CID(NS_GCONFSERVICE_CID); #endif +#ifdef MOZ_ENABLE_GNOMEVFS +NS_DEFINE_NAMED_CID(NS_GNOMEVFSSERVICE_CID); +#endif #ifdef MOZ_ENABLE_GIO NS_DEFINE_NAMED_CID(NS_GIOSERVICE_CID); NS_DEFINE_NAMED_CID(NS_GSETTINGSSERVICE_CID); @@ -37,6 +44,9 @@ static const mozilla::Module::CIDEntry k #ifdef MOZ_ENABLE_GCONF { &kNS_GCONFSERVICE_CID, false, nullptr, nsGConfServiceConstructor }, #endif +#ifdef MOZ_ENABLE_GNOMEVFS + { &kNS_GNOMEVFSSERVICE_CID, false, nullptr, nsGnomeVFSServiceConstructor }, +#endif #ifdef MOZ_ENABLE_GIO { &kNS_GIOSERVICE_CID, false, nullptr, nsGIOServiceConstructor }, { &kNS_GSETTINGSSERVICE_CID, false, nullptr, nsGSettingsServiceConstructor }, @@ -50,6 +60,9 @@ static const mozilla::Module::ContractID #ifdef MOZ_ENABLE_GCONF { NS_GCONFSERVICE_CONTRACTID, &kNS_GCONFSERVICE_CID }, #endif +#ifdef MOZ_ENABLE_GNOMEVFS + { NS_GNOMEVFSSERVICE_CONTRACTID, &kNS_GNOMEVFSSERVICE_CID }, +#endif #ifdef MOZ_ENABLE_GIO { NS_GIOSERVICE_CONTRACTID, &kNS_GIOSERVICE_CID }, { NS_GSETTINGSSERVICE_CONTRACTID, &kNS_GSETTINGSSERVICE_CID }, diff -up thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.cpp.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.cpp --- thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.cpp.moz-1134537-delete-nsgnomevfsservice 2016-05-11 13:54:01.306097859 +0200 +++ thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.cpp 2016-05-11 13:54:01.306097859 +0200 @@ -0,0 +1,225 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "nsGnomeVFSService.h" +#include "nsStringGlue.h" +#include "nsIURI.h" +#include "nsTArray.h" +#include "nsIStringEnumerator.h" +#include "nsAutoPtr.h" + +extern "C" { +#include +#include +#include +} + +class nsGnomeVFSMimeApp : public nsIGnomeVFSMimeApp +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_NSIGNOMEVFSMIMEAPP + + nsGnomeVFSMimeApp(GnomeVFSMimeApplication* aApp) : mApp(aApp) {} + +private: + ~nsGnomeVFSMimeApp() { gnome_vfs_mime_application_free(mApp); } + GnomeVFSMimeApplication *mApp; +}; + +NS_IMPL_ISUPPORTS(nsGnomeVFSMimeApp, nsIGnomeVFSMimeApp) + +NS_IMETHODIMP +nsGnomeVFSMimeApp::GetId(nsACString& aId) +{ + aId.Assign(mApp->id); + return NS_OK; +} + +NS_IMETHODIMP +nsGnomeVFSMimeApp::GetName(nsACString& aName) +{ + aName.Assign(mApp->name); + return NS_OK; +} + +NS_IMETHODIMP +nsGnomeVFSMimeApp::GetCommand(nsACString& aCommand) +{ + aCommand.Assign(mApp->command); + return NS_OK; +} + +NS_IMETHODIMP +nsGnomeVFSMimeApp::GetCanOpenMultipleFiles(bool* aCanOpen) +{ + *aCanOpen = mApp->can_open_multiple_files; + return NS_OK; +} + +NS_IMETHODIMP +nsGnomeVFSMimeApp::GetExpectsURIs(int32_t* aExpects) +{ + *aExpects = mApp->expects_uris; + return NS_OK; +} + +NS_IMETHODIMP +nsGnomeVFSMimeApp::Launch(const nsACString &aUri) +{ + char *uri = gnome_vfs_make_uri_from_input(PromiseFlatCString(aUri).get()); + + if (! uri) + return NS_ERROR_FAILURE; + + GList uris = { 0 }; + uris.data = uri; + + GnomeVFSResult result = gnome_vfs_mime_application_launch(mApp, &uris); + g_free(uri); + + if (result != GNOME_VFS_OK) + return NS_ERROR_FAILURE; + + return NS_OK; +} + +class UTF8StringEnumerator : public nsIUTF8StringEnumerator +{ +public: + UTF8StringEnumerator() : mIndex(0) { } +private: + ~UTF8StringEnumerator() { } + + NS_DECL_ISUPPORTS + NS_DECL_NSIUTF8STRINGENUMERATOR +public: + nsTArray mStrings; + uint32_t mIndex; +}; + +NS_IMPL_ISUPPORTS(UTF8StringEnumerator, nsIUTF8StringEnumerator) + +NS_IMETHODIMP +UTF8StringEnumerator::HasMore(bool *aResult) +{ + *aResult = mIndex < mStrings.Length(); + return NS_OK; +} + +NS_IMETHODIMP +UTF8StringEnumerator::GetNext(nsACString& aResult) +{ + if (mIndex >= mStrings.Length()) + return NS_ERROR_UNEXPECTED; + + aResult.Assign(mStrings[mIndex]); + ++mIndex; + return NS_OK; +} + +NS_IMETHODIMP +nsGnomeVFSMimeApp::GetSupportedURISchemes(nsIUTF8StringEnumerator** aSchemes) +{ + *aSchemes = nullptr; + + RefPtr array = new UTF8StringEnumerator(); + NS_ENSURE_TRUE(array, NS_ERROR_OUT_OF_MEMORY); + + for (GList *list = mApp->supported_uri_schemes; list; list = list->next) { + if (!array->mStrings.AppendElement((char*) list->data)) { + return NS_ERROR_OUT_OF_MEMORY; + } + } + + NS_ADDREF(*aSchemes = array); + return NS_OK; +} + +NS_IMETHODIMP +nsGnomeVFSMimeApp::GetRequiresTerminal(bool* aRequires) +{ + *aRequires = mApp->requires_terminal; + return NS_OK; +} + +nsresult +nsGnomeVFSService::Init() +{ + return gnome_vfs_init() ? NS_OK : NS_ERROR_FAILURE; +} + +NS_IMPL_ISUPPORTS(nsGnomeVFSService, nsIGnomeVFSService) + +NS_IMETHODIMP +nsGnomeVFSService::GetMimeTypeFromExtension(const nsACString &aExtension, + nsACString& aMimeType) +{ + nsAutoCString fileExtToUse("."); + fileExtToUse.Append(aExtension); + + const char *mimeType = gnome_vfs_mime_type_from_name(fileExtToUse.get()); + aMimeType.Assign(mimeType); + + // |mimeType| points to internal gnome-vfs data, so don't free it. + + return NS_OK; +} + +NS_IMETHODIMP +nsGnomeVFSService::GetAppForMimeType(const nsACString &aMimeType, + nsIGnomeVFSMimeApp** aApp) +{ + *aApp = nullptr; + GnomeVFSMimeApplication *app = + gnome_vfs_mime_get_default_application(PromiseFlatCString(aMimeType).get()); + + if (app) { + nsGnomeVFSMimeApp *mozApp = new nsGnomeVFSMimeApp(app); + NS_ENSURE_TRUE(mozApp, NS_ERROR_OUT_OF_MEMORY); + + NS_ADDREF(*aApp = mozApp); + } + + return NS_OK; +} + +NS_IMETHODIMP +nsGnomeVFSService::GetDescriptionForMimeType(const nsACString &aMimeType, + nsACString& aDescription) +{ + const char *desc = + gnome_vfs_mime_get_description(PromiseFlatCString(aMimeType).get()); + aDescription.Assign(desc); + + // |desc| points to internal gnome-vfs data, so don't free it. + + return NS_OK; +} + +NS_IMETHODIMP +nsGnomeVFSService::ShowURI(nsIURI *aURI) +{ + nsAutoCString spec; + aURI->GetSpec(spec); + + if (gnome_vfs_url_show_with_env(spec.get(), nullptr) == GNOME_VFS_OK) + return NS_OK; + + return NS_ERROR_FAILURE; +} + +NS_IMETHODIMP +nsGnomeVFSService::ShowURIForInput(const nsACString &aUri) +{ + char* spec = gnome_vfs_make_uri_from_input(PromiseFlatCString(aUri).get()); + nsresult rv = NS_ERROR_FAILURE; + + if (gnome_vfs_url_show_with_env(spec, nullptr) == GNOME_VFS_OK) + rv = NS_OK; + + g_free(spec); + return rv; +} diff -up thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.h.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.h --- thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.h.moz-1134537-delete-nsgnomevfsservice 2016-05-11 13:54:01.307097859 +0200 +++ thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.h 2016-05-11 13:54:01.307097859 +0200 @@ -0,0 +1,26 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef nsGnomeVFSService_h_ +#define nsGnomeVFSService_h_ + +#include "nsIGnomeVFSService.h" +#include "mozilla/Attributes.h" + +#define NS_GNOMEVFSSERVICE_CID \ +{0x5f43022c, 0x6194, 0x4b37, {0xb2, 0x6d, 0xe4, 0x10, 0x24, 0x62, 0x52, 0x64}} + +class nsGnomeVFSService : public nsIGnomeVFSService +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_NSIGNOMEVFSSERVICE + + nsresult Init(); +private: + ~nsGnomeVFSService() { }; +}; + +#endif diff -up thunderbird-45.0/mozilla/xpcom/system/moz.build.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/xpcom/system/moz.build --- thunderbird-45.0/mozilla/xpcom/system/moz.build.moz-1134537-delete-nsgnomevfsservice 2016-04-07 23:33:35.000000000 +0200 +++ thunderbird-45.0/mozilla/xpcom/system/moz.build 2016-05-11 13:54:01.307097859 +0200 @@ -11,6 +11,7 @@ XPIDL_SOURCES += [ 'nsIGConfService.idl', 'nsIGeolocationProvider.idl', 'nsIGIOService.idl', + 'nsIGnomeVFSService.idl', 'nsIGSettingsService.idl', 'nsIHapticFeedback.idl', 'nsIPackageKitService.idl', diff -up thunderbird-45.0/mozilla/xpcom/system/nsIGnomeVFSService.idl.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/xpcom/system/nsIGnomeVFSService.idl --- thunderbird-45.0/mozilla/xpcom/system/nsIGnomeVFSService.idl.moz-1134537-delete-nsgnomevfsservice 2016-05-11 13:54:01.307097859 +0200 +++ thunderbird-45.0/mozilla/xpcom/system/nsIGnomeVFSService.idl 2016-05-11 13:54:01.307097859 +0200 @@ -0,0 +1,64 @@ +/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "nsISupports.idl" + +interface nsIUTF8StringEnumerator; +interface nsIURI; + +/* nsIGnomeVFSMimeApp holds information about an application that is looked up + with nsIGnomeVFSService::GetAppForMimeType. */ + +[scriptable, uuid(66009894-9877-405b-9321-bf30420e34e6)] +interface nsIGnomeVFSMimeApp : nsISupports +{ + const long EXPECTS_URIS = 0; + const long EXPECTS_PATHS = 1; + const long EXPECTS_URIS_FOR_NON_FILES = 2; + + readonly attribute AUTF8String id; + readonly attribute AUTF8String name; + readonly attribute AUTF8String command; + readonly attribute boolean canOpenMultipleFiles; + readonly attribute long expectsURIs; // see constants above + readonly attribute nsIUTF8StringEnumerator supportedURISchemes; + readonly attribute boolean requiresTerminal; + + void launch(in AUTF8String uri); +}; + +/* + * The VFS service makes use of a registry for information. + * + * The MIME registry holds information about MIME types, such as which + * extensions map to a given MIME type. The MIME registry also stores the + * id of the application selected to handle each MIME type. + */ + +[scriptable, uuid(d1ac73a6-2ceb-4164-8142-215afe7fe8a6)] +interface nsIGnomeVFSService : nsISupports +{ + /*** MIME registry methods ***/ + + /* Obtain the MIME type registered for an extension. The extension + should not include a leading dot. */ + AUTF8String getMimeTypeFromExtension(in AUTF8String extension); + + /* Obtain the preferred application for opening a given MIME type */ + nsIGnomeVFSMimeApp getAppForMimeType(in AUTF8String mimeType); + + /* Obtain a description for the given MIME type */ + AUTF8String getDescriptionForMimeType(in AUTF8String mimeType); + + /*** Misc. methods ***/ + + /* Open the given URI in the default application */ + void showURI(in nsIURI uri); + [noscript] void showURIForInput(in ACString uri); +}; + +%{C++ +#define NS_GNOMEVFSSERVICE_CONTRACTID "@mozilla.org/gnome-vfs-service;1" +%}