diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | firefox.spec | 12 | ||||
-rw-r--r-- | mozilla-gnome-shell-search-provider-icons.patch | 453 | ||||
-rw-r--r-- | mozilla-gnome-shell-search-provider.patch | 155 | ||||
-rw-r--r-- | sources | 4 |
5 files changed, 587 insertions, 38 deletions
@@ -373,3 +373,4 @@ firefox-3.6.4.source.tar.bz2 /firefox-71.0b12.source.tar.xz /firefox-71.0.source.tar.xz /firefox-langpacks-71.0-20191126.tar.xz +/firefox-langpacks-71.0-20191202.tar.xz diff --git a/firefox.spec b/firefox.spec index 9c2ac66..7ab6f15 100644 --- a/firefox.spec +++ b/firefox.spec @@ -1,5 +1,5 @@ # Set to true if it's going to be submitted as update. -%global release_build 0 +%global release_build 1 # Disabled arm due to rhbz#1658940 ExcludeArch: armv7hl @@ -94,12 +94,12 @@ ExcludeArch: ppc64le Summary: Mozilla Firefox Web browser Name: firefox Version: 71.0 -Release: 6%{?pre_tag}%{?dist} +Release: 7%{?pre_tag}%{?dist} URL: https://www.mozilla.org/firefox/ License: MPLv1.1 or GPLv2+ or LGPLv2+ Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.xz %if %{with langpacks} -Source1: firefox-langpacks-%{version}%{?pre_version}-20191126.tar.xz +Source1: firefox-langpacks-%{version}%{?pre_version}-20191202.tar.xz %endif Source2: cbindgen-vendor.tar.xz Source10: firefox-mozconfig @@ -146,6 +146,7 @@ Patch226: rhbz-1354671.patch Patch227: firefox-locale-debug.patch Patch228: mozilla-1583466.patch Patch239: mozilla-gnome-shell-search-provider.patch +Patch240: mozilla-gnome-shell-search-provider-icons.patch # Upstream patches Patch402: mozilla-1196777.patch @@ -358,6 +359,7 @@ This package contains results of tests executed during build. %patch227 -p1 -b .locale-debug %patch228 -p1 -b .mozilla-1583466 %patch239 -p1 -b .gnome-shell-search-provider +%patch240 -p1 -b .gnome-shell-search-provider-icons %patch402 -p1 -b .1196777 %ifarch %{arm} @@ -963,6 +965,10 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : #--------------------------------------------------------------------- %changelog +* Mon Dec 2 2019 Martin Stransky <stransky@redhat.com> - 71.0-7 +- Updated to 71.0 Build 5 +- Updated Gnome search provider + * Wed Nov 27 2019 Martin Stransky <stransky@redhat.com> - 71.0-6 - Enable Gnome search provider diff --git a/mozilla-gnome-shell-search-provider-icons.patch b/mozilla-gnome-shell-search-provider-icons.patch new file mode 100644 index 0000000..fd9dbe8 --- /dev/null +++ b/mozilla-gnome-shell-search-provider-icons.patch @@ -0,0 +1,453 @@ +changeset: 504680:441b26f2d4f4 +parent: 504674:5a55ac856fc4 +user: Martin Stransky <stransky@redhat.com> +date: Mon Dec 02 12:21:08 2019 +0100 +files: browser/components/shell/nsGNOMEShellSearchProvider.cpp browser/components/shell/nsGNOMEShellSearchProvider.h +description: +Bug 1239694 Use history icons with Gnome shell search provider, r?jhorak + +Differential Revision: https://phabricator.services.mozilla.com/D55434 + + +diff --git a/browser/components/shell/nsGNOMEShellSearchProvider.cpp b/browser/components/shell/nsGNOMEShellSearchProvider.cpp +--- a/browser/components/shell/nsGNOMEShellSearchProvider.cpp ++++ b/browser/components/shell/nsGNOMEShellSearchProvider.cpp +@@ -19,21 +19,27 @@ + #include "nsPrintfCString.h" + #include "nsCOMPtr.h" + #include "nsGTKToolkit.h" + #include "nsINavHistoryService.h" + #include "nsToolkitCompsCID.h" + #include "nsIFaviconService.h" + #include "RemoteUtils.h" + #include "nsIStringBundle.h" ++#include "imgIContainer.h" ++#include "imgITools.h" ++ ++#include "mozilla/gfx/DataSurfaceHelpers.h" + + #include <dbus/dbus.h> + #include <dbus/dbus-glib-lowlevel.h> + +-#define MAX_SEARCH_RESULTS_NUM 9 ++using namespace mozilla; ++using namespace mozilla::gfx; ++ + #define KEYWORD_SEARCH_STRING "special:search" + #define KEYWORD_SEARCH_STRING_LEN 14 + + #define DBUS_BUS_NAME "org.mozilla.Firefox.SearchProvider" + #define DBUS_OBJECT_PATH "/org/mozilla/Firefox/SearchProvider" + + static const char* introspect_template = + "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection " +@@ -81,17 +87,35 @@ DBusHandlerResult nsGNOMEShellSearchProv + DBUS_TYPE_INVALID); + + dbus_connection_send(mConnection, reply, nullptr); + dbus_message_unref(reply); + + return DBUS_HANDLER_RESULT_HANDLED; + } + +-nsresult nsGNOMEShellSearchProvider::QueryHistory(const char* aSearchTerm) { ++nsGNOMEShellSearchProvider::nsGNOMEShellSearchProvider() ++ : mConnection(nullptr), mSearchSerial(0) { ++ memset(mHistoryIcons, 0, sizeof(mHistoryIcons)); ++} ++ ++void nsGNOMEShellSearchProvider::SetHistoryIcon(int aSearchSerial, ++ UniquePtr<uint8_t[]> aData, ++ int aWidth, int aHeight, ++ int aIconIndex) { ++ MOZ_ASSERT(mSearchSerial == aSearchSerial); ++ MOZ_ASSERT(aIconIndex < MAX_SEARCH_RESULTS_NUM); ++ mHistoryIcons[aIconIndex].Set(aSearchSerial, std::move(aData), aWidth, ++ aHeight); ++} ++ ++nsresult nsGNOMEShellSearchProvider::NewHistorySearch(const char* aSearchTerm) { ++ // Initialize new search which invalidates all preview ones ++ mSearchSerial++; ++ + nsresult rv; + nsCOMPtr<nsINavHistoryQuery> histQuery; + rv = mHistoryService->GetNewQuery(getter_AddRefs(histQuery)); + NS_ENSURE_SUCCESS(rv, rv); + + nsAutoCString searchTerm(aSearchTerm); + rv = histQuery->SetSearchTerms(NS_ConvertUTF8toUTF16(searchTerm)); + NS_ENSURE_SUCCESS(rv, rv); +@@ -165,24 +189,123 @@ void nsGNOMEShellSearchProvider::GetIDKe + + int nsGNOMEShellSearchProvider::GetIndexFromIDKey(const char* aIDKey) { + // ID is NN:URL where NN is index to our current history + // result container. + char tmp[] = {aIDKey[0], aIDKey[1], '\0'}; + return atoi(tmp); + } + ++class AsyncFaviconDataReady final : public nsIFaviconDataCallback { ++ public: ++ NS_DECL_ISUPPORTS ++ NS_DECL_NSIFAVICONDATACALLBACK ++ ++ AsyncFaviconDataReady(nsGNOMEShellSearchProvider* aSearchProvider, ++ int aIconIndex, int aSearchSerial) ++ : mSearchProvider(aSearchProvider), ++ mIconIndex(aIconIndex), ++ mSearchSerial(aSearchSerial){}; ++ ++ private: ++ ~AsyncFaviconDataReady() {} ++ ++ nsGNOMEShellSearchProvider* mSearchProvider; ++ int mIconIndex; ++ int mSearchSerial; ++}; ++ ++NS_IMPL_ISUPPORTS(AsyncFaviconDataReady, nsIFaviconDataCallback) ++ ++// Inspired by SurfaceToPackedBGRA ++static UniquePtr<uint8_t[]> SurfaceToPackedRGBA(DataSourceSurface* aSurface) { ++ IntSize size = aSurface->GetSize(); ++ CheckedInt<size_t> bufferSize = ++ CheckedInt<size_t>(size.width * 4) * CheckedInt<size_t>(size.height); ++ if (!bufferSize.isValid()) { ++ return nullptr; ++ } ++ UniquePtr<uint8_t[]> imageBuffer(new (std::nothrow) ++ uint8_t[bufferSize.value()]); ++ if (!imageBuffer) { ++ return nullptr; ++ } ++ ++ DataSourceSurface::MappedSurface map; ++ if (!aSurface->Map(DataSourceSurface::MapType::READ, &map)) { ++ return nullptr; ++ } ++ ++ // Convert BGRA to RGBA ++ uint32_t* aSrc = (uint32_t*)map.mData; ++ uint32_t* aDst = (uint32_t*)imageBuffer.get(); ++ for (int i = 0; i < size.width * size.height; i++, aDst++, aSrc++) { ++ *aDst = *aSrc & 0xff00ff00; ++ *aDst |= (*aSrc & 0xff) << 16; ++ *aDst |= (*aSrc & 0xff0000) >> 16; ++ } ++ ++ aSurface->Unmap(); ++ ++ return imageBuffer; ++} ++ ++NS_IMETHODIMP ++AsyncFaviconDataReady::OnComplete(nsIURI* aFaviconURI, uint32_t aDataLen, ++ const uint8_t* aData, ++ const nsACString& aMimeType, ++ uint16_t aWidth) { ++ // This is a callback from some previous search so we don't want it ++ if (mSearchSerial != mSearchProvider->GetSearchSerial() || !aData || ++ !aDataLen) { ++ return NS_ERROR_FAILURE; ++ } ++ ++ // Decode the image from the format it was returned to us in (probably PNG) ++ nsCOMPtr<imgIContainer> container; ++ nsCOMPtr<imgITools> imgtool = do_CreateInstance("@mozilla.org/image/tools;1"); ++ nsresult rv = imgtool->DecodeImageFromBuffer( ++ reinterpret_cast<const char*>(aData), aDataLen, aMimeType, ++ getter_AddRefs(container)); ++ NS_ENSURE_SUCCESS(rv, rv); ++ ++ RefPtr<SourceSurface> surface = container->GetFrame( ++ imgIContainer::FRAME_FIRST, ++ imgIContainer::FLAG_SYNC_DECODE | imgIContainer::FLAG_ASYNC_NOTIFY); ++ ++ if (!surface || surface->GetFormat() != SurfaceFormat::B8G8R8A8) { ++ return NS_ERROR_FAILURE; ++ } ++ ++ // Allocate a new buffer that we own. ++ RefPtr<DataSourceSurface> dataSurface = surface->GetDataSurface(); ++ UniquePtr<uint8_t[]> data = SurfaceToPackedRGBA(dataSurface); ++ if (!data) { ++ return NS_ERROR_OUT_OF_MEMORY; ++ } ++ ++ mSearchProvider->SetHistoryIcon(mSearchSerial, std::move(data), ++ surface->GetSize().width, ++ surface->GetSize().height, mIconIndex); ++ return NS_OK; ++} ++ + void nsGNOMEShellSearchProvider::ComposeSearchResultReply( + DBusMessage* reply, const char* aSearchTerm) { + uint32_t childCount = 0; + nsresult rv = mHistResultContainer->GetChildCount(&childCount); + if (NS_FAILED(rv) || childCount == 0) { + return; + } + ++ // Obtain the favicon service and get the favicon for the specified page ++ nsCOMPtr<nsIFaviconService> favIconSvc( ++ do_GetService("@mozilla.org/browser/favicon-service;1")); ++ nsCOMPtr<nsIIOService> ios(do_GetService(NS_IOSERVICE_CONTRACTID)); ++ + if (childCount > MAX_SEARCH_RESULTS_NUM) { + childCount = MAX_SEARCH_RESULTS_NUM; + } + + DBusMessageIter iter; + dbus_message_iter_init_append(reply, &iter); + DBusMessageIter iterArray; + dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "s", &iterArray); +@@ -195,16 +318,22 @@ void nsGNOMEShellSearchProvider::Compose + } + if (!IsHistoryResultNodeURI(child)) { + continue; + } + + nsAutoCString uri; + child->GetUri(uri); + ++ nsCOMPtr<nsIURI> iconIri; ++ ios->NewURI(uri, nullptr, nullptr, getter_AddRefs(iconIri)); ++ nsCOMPtr<nsIFaviconDataCallback> callback = ++ new AsyncFaviconDataReady(this, i, mSearchSerial); ++ favIconSvc->GetFaviconDataForPage(iconIri, callback, 0); ++ + nsAutoCString idKey; + GetIDKeyForURI(i, uri, idKey); + + const char* id = idKey.get(); + dbus_message_iter_append_basic(&iterArray, DBUS_TYPE_STRING, &id); + } + + nsPrintfCString searchString("%s:%s", KEYWORD_SEARCH_STRING, aSearchTerm); +@@ -221,17 +350,17 @@ DBusHandlerResult nsGNOMEShellSearchProv + int elements; + + if (!dbus_message_get_args(aMsg, nullptr, DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, + &stringArray, &elements, DBUS_TYPE_INVALID) || + elements == 0) { + reply = dbus_message_new_error(aMsg, DBUS_BUS_NAME, "Wrong argument"); + } else { + reply = dbus_message_new_method_return(aMsg); +- nsresult rv = QueryHistory(stringArray[0]); ++ nsresult rv = NewHistorySearch(stringArray[0]); + if (NS_SUCCEEDED(rv)) { + ComposeSearchResultReply(reply, stringArray[0]); + } + dbus_free_string_array(stringArray); + } + + dbus_connection_send(mConnection, reply, nullptr); + dbus_message_unref(reply); +@@ -249,17 +378,17 @@ DBusHandlerResult nsGNOMEShellSearchProv + if (!dbus_message_get_args(aMsg, nullptr, DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, + &unusedArray, &unusedNum, DBUS_TYPE_ARRAY, + DBUS_TYPE_STRING, &stringArray, &elements, + DBUS_TYPE_INVALID) || + elements == 0) { + reply = dbus_message_new_error(aMsg, DBUS_BUS_NAME, "Wrong argument"); + } else { + reply = dbus_message_new_method_return(aMsg); +- nsresult rv = QueryHistory(stringArray[0]); ++ nsresult rv = NewHistorySearch(stringArray[0]); + if (NS_SUCCEEDED(rv)) { + ComposeSearchResultReply(reply, stringArray[0]); + } + } + + if (unusedArray) { + dbus_free_string_array(unusedArray); + } +@@ -280,45 +409,88 @@ static void appendStringDictionary(DBusM + &iterDict); + dbus_message_iter_append_basic(&iterDict, DBUS_TYPE_STRING, &aKey); + dbus_message_iter_open_container(&iterDict, DBUS_TYPE_VARIANT, "s", &iterVar); + dbus_message_iter_append_basic(&iterVar, DBUS_TYPE_STRING, &aValue); + dbus_message_iter_close_container(&iterDict, &iterVar); + dbus_message_iter_close_container(aIter, &iterDict); + } + ++/* ++ "icon-data": a tuple of type (iiibiiay) describing a pixbuf with width, ++ height, rowstride, has-alpha, ++ bits-per-sample, channels, ++ image data ++*/ ++void GnomeHistoryIcon::AppendIcon(DBusMessageIter* aIter) { ++ DBusMessageIter iterDict, iterVar, iterStruct; ++ dbus_message_iter_open_container(aIter, DBUS_TYPE_DICT_ENTRY, nullptr, ++ &iterDict); ++ const char* key = "icon-data"; ++ dbus_message_iter_append_basic(&iterDict, DBUS_TYPE_STRING, &key); ++ dbus_message_iter_open_container(&iterDict, DBUS_TYPE_VARIANT, "(iiibiiay)", ++ &iterVar); ++ dbus_message_iter_open_container(&iterVar, DBUS_TYPE_STRUCT, nullptr, ++ &iterStruct); ++ ++ dbus_message_iter_append_basic(&iterStruct, DBUS_TYPE_INT32, &mWidth); ++ dbus_message_iter_append_basic(&iterStruct, DBUS_TYPE_INT32, &mHeight); ++ int rowstride = mWidth * 4; ++ dbus_message_iter_append_basic(&iterStruct, DBUS_TYPE_INT32, &rowstride); ++ int hasAlpha = true; ++ dbus_message_iter_append_basic(&iterStruct, DBUS_TYPE_BOOLEAN, &hasAlpha); ++ int bitsPerSample = 8; ++ dbus_message_iter_append_basic(&iterStruct, DBUS_TYPE_INT32, &bitsPerSample); ++ int channels = 4; ++ dbus_message_iter_append_basic(&iterStruct, DBUS_TYPE_INT32, &channels); ++ ++ DBusMessageIter iterArray; ++ dbus_message_iter_open_container(&iterStruct, DBUS_TYPE_ARRAY, "y", ++ &iterArray); ++ unsigned char* array = mData.get(); ++ dbus_message_iter_append_fixed_array(&iterArray, DBUS_TYPE_BYTE, &array, ++ mWidth * mHeight * 4); ++ dbus_message_iter_close_container(&iterStruct, &iterArray); ++ ++ dbus_message_iter_close_container(&iterVar, &iterStruct); ++ dbus_message_iter_close_container(&iterDict, &iterVar); ++ dbus_message_iter_close_container(aIter, &iterDict); ++} ++ + /* We can return those fields at GetResultMetas: + "id": the result ID + "name": the display name for the result + "icon": a serialized GIcon (see g_icon_serialize()), or alternatively, + "gicon": a textual representation of a GIcon (see g_icon_to_string()), + or alternativly, + "icon-data": a tuple of type (iiibiiay) describing a pixbuf with width, + height, rowstride, has-alpha, bits-per-sample, and image data + "description": an optional short description (1-2 lines) + */ + void nsGNOMEShellSearchProvider::AppendResultID(DBusMessageIter* aIter, + const char* aID) { ++ int index = GetIndexFromIDKey(aID); + nsCOMPtr<nsINavHistoryResultNode> child; +- mHistResultContainer->GetChild(GetIndexFromIDKey(aID), getter_AddRefs(child)); ++ mHistResultContainer->GetChild(index, getter_AddRefs(child)); + nsAutoCString title; +- if (NS_FAILED(child->GetTitle(title))) { +- return; +- } ++ nsAutoCString uri; ++ child->GetTitle(title); ++ child->GetUri(uri); + +- if (title.IsEmpty()) { +- if (NS_FAILED(child->GetUri(title)) || title.IsEmpty()) { +- return; +- } +- } ++ const char* titleStr = !(title.IsEmpty()) ? title.get() : uri.get(); ++ const char* descStr = uri.get(); + +- const char* titleStr = title.get(); + appendStringDictionary(aIter, "id", aID); + appendStringDictionary(aIter, "name", titleStr); +- appendStringDictionary(aIter, "gicon", "text-html"); ++ appendStringDictionary(aIter, "description", descStr); ++ if (mHistoryIcons[index].GetSearchSerial() == mSearchSerial) { ++ mHistoryIcons[index].AppendIcon(aIter); ++ } else { ++ appendStringDictionary(aIter, "gicon", "text-html"); ++ } + } + + void nsGNOMEShellSearchProvider::AppendSearchID(DBusMessageIter* aIter, + const char* aID) { + if (strlen(aID) < KEYWORD_SEARCH_STRING_LEN + 2) { + return; + } + appendStringDictionary(aIter, "id", KEYWORD_SEARCH_STRING); +diff --git a/browser/components/shell/nsGNOMEShellSearchProvider.h b/browser/components/shell/nsGNOMEShellSearchProvider.h +--- a/browser/components/shell/nsGNOMEShellSearchProvider.h ++++ b/browser/components/shell/nsGNOMEShellSearchProvider.h +@@ -7,49 +7,81 @@ + + #ifndef __nsGNOMEShellSearchProvider_h__ + #define __nsGNOMEShellSearchProvider_h__ + + #include "mozilla/DBusHelpers.h" + #include "nsINavHistoryService.h" + #include "nsUnixRemoteServer.h" + #include "nsCOMPtr.h" ++#include "mozilla/UniquePtr.h" ++ ++#define MAX_SEARCH_RESULTS_NUM 9 ++ ++class GnomeHistoryIcon { ++ public: ++ GnomeHistoryIcon() : mSearchSerial(-1), mWidth(0), mHeight(0){}; ++ ++ // From which search is this icon ++ void Set(int aSearchSerial, mozilla::UniquePtr<uint8_t[]> aData, int aWidth, ++ int aHeight) { ++ mSearchSerial = aSearchSerial; ++ mWidth = aWidth; ++ mHeight = aHeight; ++ mData = std::move(aData); ++ } ++ ++ int GetSearchSerial() { return mSearchSerial; } ++ void AppendIcon(DBusMessageIter* aIter); ++ ++ private: ++ int mSearchSerial; ++ mozilla::UniquePtr<uint8_t[]> mData; ++ int mWidth; ++ int mHeight; ++}; + + class nsGNOMEShellSearchProvider : public nsUnixRemoteServer { + public: +- nsGNOMEShellSearchProvider() : mConnection(nullptr) {} ++ nsGNOMEShellSearchProvider(); + ~nsGNOMEShellSearchProvider() { Shutdown(); } + + nsresult Startup(); + void Shutdown(); + + DBusHandlerResult HandleDBusMessage(DBusConnection* aConnection, + DBusMessage* msg); + void UnregisterDBusInterface(DBusConnection* aConnection); + ++ int GetSearchSerial() { return mSearchSerial; } ++ void SetHistoryIcon(int aSearchSerial, mozilla::UniquePtr<uint8_t[]> aData, ++ int aWidth, int aHeight, int aIconIndex); ++ + private: + DBusHandlerResult Introspect(DBusMessage* msg); + + DBusHandlerResult GetInitialResultSet(DBusMessage* msg); + DBusHandlerResult GetSubsearchResultSet(DBusMessage* msg); + DBusHandlerResult GetResultMetas(DBusMessage* msg); + DBusHandlerResult ActivateResult(DBusMessage* msg); + DBusHandlerResult LaunchSearch(DBusMessage* msg); + +- nsresult QueryHistory(const char* aSearchTerm); ++ nsresult NewHistorySearch(const char* aSearchTerm); + void GetIDKeyForURI(int aIndex, nsAutoCString& aUri, nsAutoCString& aIDKey); + int GetIndexFromIDKey(const char* aIDKey); + bool IsHistoryResultNodeURI(nsINavHistoryResultNode* aHistoryNode); + void AppendResultID(DBusMessageIter* aIter, const char* aID); + void AppendSearchID(DBusMessageIter* aIter, const char* aID); + void ComposeSearchResultReply(DBusMessage* aReply, const char* aSearchTerm); + void LaunchWithID(const char* aID, uint32_t aTimeStamp); + void LaunchWithAllResults(uint32_t aTimeStamp); + + // The connection is owned by DBus library + RefPtr<DBusConnection> mConnection; + nsCOMPtr<nsINavHistoryContainerResultNode> mHistResultContainer; + nsCOMPtr<nsINavHistoryService> mHistoryService; + nsAutoCStringN<32> mSearchTerm; + nsAutoCString mGnomeSearchTitle; ++ int mSearchSerial; ++ GnomeHistoryIcon mHistoryIcons[MAX_SEARCH_RESULTS_NUM]; + }; + + #endif // __nsGNOMEShellSearchProvider_h__ + diff --git a/mozilla-gnome-shell-search-provider.patch b/mozilla-gnome-shell-search-provider.patch index 36a1eda..2ca270e 100644 --- a/mozilla-gnome-shell-search-provider.patch +++ b/mozilla-gnome-shell-search-provider.patch @@ -1,7 +1,27 @@ -diff -up firefox-71.0/browser/components/shell/moz.build.gnome-shell-search-provider firefox-71.0/browser/components/shell/moz.build ---- firefox-71.0/browser/components/shell/moz.build.gnome-shell-search-provider 2019-11-26 01:02:19.000000000 +0100 -+++ firefox-71.0/browser/components/shell/moz.build 2019-11-27 21:37:02.754148375 +0100 -@@ -34,6 +34,11 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gt +changeset: 504674:5a55ac856fc4 +parent: 504609:66531295716a +user: Martin Stransky <stransky@redhat.com> +date: Thu Nov 21 10:32:29 2019 +0100 +files: browser/components/shell/moz.build browser/components/shell/nsGNOMEShellSearchProvider.cpp browser/components/shell/nsGNOMEShellSearchProvider.h browser/components/shell/nsGNOMEShellService.cpp browser/components/shell/nsGNOMEShellService.h browser/locales/en-US/chrome/browser/browser.properties toolkit/components/remote/moz.build toolkit/components/remote/nsDBusRemoteServer.cpp +description: +Bug 1239694 Implemenet Gnome search provider, r?jhorak + +Implement org.gnome.Shell.SearchProvider2 D-Bus interface and enable it when +widget.gnome-search-provider.enabled pref is set, so this feature is disabled +by default. + +Differential Revision: https://phabricator.services.mozilla.com/D54334 + + +diff --git a/browser/components/shell/moz.build b/browser/components/shell/moz.build +--- a/browser/components/shell/moz.build ++++ b/browser/components/shell/moz.build +@@ -29,16 +29,21 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'coco + elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk': + XPIDL_SOURCES += [ + 'nsIGNOMEShellService.idl', + ] + SOURCES += [ 'nsGNOMEShellService.cpp', ] @@ -13,7 +33,17 @@ diff -up firefox-71.0/browser/components/shell/moz.build.gnome-shell-search-prov elif CONFIG['OS_ARCH'] == 'WINNT': SOURCES += [ 'nsWindowsShellService.cpp', -@@ -57,6 +62,8 @@ for var in ('MOZ_APP_NAME', 'MOZ_APP_VER + ] + LOCAL_INCLUDES += [ + '../../../other-licenses/nsis/Contrib/CityHash/cityhash', + ] + +@@ -52,11 +57,13 @@ EXTRA_JS_MODULES += [ + 'ScreenshotChild.jsm', + 'ShellService.jsm', + ] + + for var in ('MOZ_APP_NAME', 'MOZ_APP_VERSION'): DEFINES[var] = '"%s"' % CONFIG[var] CXXFLAGS += CONFIG['TK_CFLAGS'] @@ -22,9 +52,10 @@ diff -up firefox-71.0/browser/components/shell/moz.build.gnome-shell-search-prov with Files('**'): BUG_COMPONENT = ('Firefox', 'Shell Integration') -diff -up firefox-71.0/browser/components/shell/nsGNOMEShellSearchProvider.cpp.gnome-shell-search-provider firefox-71.0/browser/components/shell/nsGNOMEShellSearchProvider.cpp ---- firefox-71.0/browser/components/shell/nsGNOMEShellSearchProvider.cpp.gnome-shell-search-provider 2019-11-27 21:37:02.754148375 +0100 -+++ firefox-71.0/browser/components/shell/nsGNOMEShellSearchProvider.cpp 2019-11-27 21:37:02.754148375 +0100 +diff --git a/browser/components/shell/nsGNOMEShellSearchProvider.cpp b/browser/components/shell/nsGNOMEShellSearchProvider.cpp +new file mode 100644 +--- /dev/null ++++ b/browser/components/shell/nsGNOMEShellSearchProvider.cpp @@ -0,0 +1,621 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:expandtab:shiftwidth=2:tabstop=2: @@ -647,9 +678,10 @@ diff -up firefox-71.0/browser/components/shell/nsGNOMEShellSearchProvider.cpp.gn + // dbus_connection_unref() will be called by RefPtr here. + mConnection = nullptr; +} -diff -up firefox-71.0/browser/components/shell/nsGNOMEShellSearchProvider.h.gnome-shell-search-provider firefox-71.0/browser/components/shell/nsGNOMEShellSearchProvider.h ---- firefox-71.0/browser/components/shell/nsGNOMEShellSearchProvider.h.gnome-shell-search-provider 2019-11-27 21:37:02.754148375 +0100 -+++ firefox-71.0/browser/components/shell/nsGNOMEShellSearchProvider.h 2019-11-27 21:37:02.754148375 +0100 +diff --git a/browser/components/shell/nsGNOMEShellSearchProvider.h b/browser/components/shell/nsGNOMEShellSearchProvider.h +new file mode 100644 +--- /dev/null ++++ b/browser/components/shell/nsGNOMEShellSearchProvider.h @@ -0,0 +1,55 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:expandtab:shiftwidth=2:tabstop=2: @@ -706,15 +738,22 @@ diff -up firefox-71.0/browser/components/shell/nsGNOMEShellSearchProvider.h.gnom +}; + +#endif // __nsGNOMEShellSearchProvider_h__ -diff -up firefox-71.0/browser/components/shell/nsGNOMEShellService.cpp.gnome-shell-search-provider firefox-71.0/browser/components/shell/nsGNOMEShellService.cpp ---- firefox-71.0/browser/components/shell/nsGNOMEShellService.cpp.gnome-shell-search-provider 2019-11-26 01:02:19.000000000 +0100 -+++ firefox-71.0/browser/components/shell/nsGNOMEShellService.cpp 2019-11-27 21:37:02.754148375 +0100 -@@ -92,6 +92,12 @@ nsresult nsGNOMEShellService::Init() { +diff --git a/browser/components/shell/nsGNOMEShellService.cpp b/browser/components/shell/nsGNOMEShellService.cpp +--- a/browser/components/shell/nsGNOMEShellService.cpp ++++ b/browser/components/shell/nsGNOMEShellService.cpp +@@ -87,16 +87,24 @@ nsresult nsGNOMEShellService::Init() { + // CreateInstance to succeed. + + nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID); + nsCOMPtr<nsIGSettingsService> gsettings = + do_GetService(NS_GSETTINGSSERVICE_CONTRACTID); if (!giovfs && !gsettings) return NS_ERROR_NOT_AVAILABLE; +#ifdef MOZ_ENABLE_DBUS -+ if (Preferences::GetBool("browser.gnome-search-provider.enabled", false)) { ++ const char* currentDesktop = getenv("XDG_CURRENT_DESKTOP"); ++ if (currentDesktop && strstr(currentDesktop, "GNOME") != nullptr && ++ Preferences::GetBool("browser.gnome-search-provider.enabled", false)) { + mSearchProvider.Startup(); + } +#endif @@ -722,10 +761,20 @@ diff -up firefox-71.0/browser/components/shell/nsGNOMEShellService.cpp.gnome-she // Check G_BROKEN_FILENAMES. If it's set, then filenames in glib use // the locale encoding. If it's not set, they use UTF-8. mUseLocaleFilenames = PR_GetEnv("G_BROKEN_FILENAMES") != nullptr; -diff -up firefox-71.0/browser/components/shell/nsGNOMEShellService.h.gnome-shell-search-provider firefox-71.0/browser/components/shell/nsGNOMEShellService.h ---- firefox-71.0/browser/components/shell/nsGNOMEShellService.h.gnome-shell-search-provider 2019-11-26 01:02:19.000000000 +0100 -+++ firefox-71.0/browser/components/shell/nsGNOMEShellService.h 2019-11-27 21:37:02.754148375 +0100 -@@ -10,6 +10,9 @@ + + if (GetAppPathFromLauncher()) return NS_OK; + + nsCOMPtr<nsIProperties> dirSvc( + do_GetService("@mozilla.org/file/directory_service;1")); +diff --git a/browser/components/shell/nsGNOMEShellService.h b/browser/components/shell/nsGNOMEShellService.h +--- a/browser/components/shell/nsGNOMEShellService.h ++++ b/browser/components/shell/nsGNOMEShellService.h +@@ -5,16 +5,19 @@ + + #ifndef nsgnomeshellservice_h____ + #define nsgnomeshellservice_h____ + + #include "nsIGNOMEShellService.h" #include "nsToolkitShellService.h" #include "nsString.h" #include "mozilla/Attributes.h" @@ -735,7 +784,17 @@ diff -up firefox-71.0/browser/components/shell/nsGNOMEShellService.h.gnome-shell class nsGNOMEShellService final : public nsIGNOMEShellService, public nsToolkitShellService { -@@ -28,6 +31,9 @@ class nsGNOMEShellService final : public + public: + nsGNOMEShellService() : mAppIsInPath(false) {} + + NS_DECL_ISUPPORTS + NS_DECL_NSISHELLSERVICE +@@ -23,15 +26,18 @@ class nsGNOMEShellService final : public + nsresult Init(); + + private: + ~nsGNOMEShellService() {} + bool KeyMatchesAppName(const char* aKeyValue) const; bool CheckHandlerMatchesAppName(const nsACString& handler) const; @@ -745,10 +804,19 @@ diff -up firefox-71.0/browser/components/shell/nsGNOMEShellService.h.gnome-shell bool GetAppPathFromLauncher(); bool mUseLocaleFilenames; nsCString mAppPath; -diff -up firefox-71.0/browser/locales/en-US/chrome/browser/browser.properties.gnome-shell-search-provider firefox-71.0/browser/locales/en-US/chrome/browser/browser.properties ---- firefox-71.0/browser/locales/en-US/chrome/browser/browser.properties.gnome-shell-search-provider 2019-11-27 21:37:02.755148375 +0100 -+++ firefox-71.0/browser/locales/en-US/chrome/browser/browser.properties 2019-11-27 21:39:11.796094294 +0100 -@@ -1025,3 +1025,7 @@ confirmationHint.passwordSaved.label = P + bool mAppIsInPath; + }; + + #endif // nsgnomeshellservice_h____ +diff --git a/browser/locales/en-US/chrome/browser/browser.properties b/browser/locales/en-US/chrome/browser/browser.properties +--- a/browser/locales/en-US/chrome/browser/browser.properties ++++ b/browser/locales/en-US/chrome/browser/browser.properties +@@ -1021,8 +1021,12 @@ confirmationHint.pinTab.label = Pinned! + confirmationHint.pinTab.description = Right-click the tab to unpin it. + confirmationHint.passwordSaved.label = Password saved! + confirmationHint.breakageReport.label = Report sent. Thank you! + + # LOCALIZATION NOTE (livebookmarkMigration.title): # Used by the export of user's live bookmarks to an OPML file as a title for the file. # %S will be replaced with brandShortName livebookmarkMigration.title = %S Live Bookmarks @@ -756,10 +824,15 @@ diff -up firefox-71.0/browser/locales/en-US/chrome/browser/browser.properties.gn +# LOCALIZATION NOTE (gnomeSearchProviderSearch): +# Used for search by Gnome Shell activity screen, %s is a searched string. +gnomeSearchProviderSearch=Search the web for ā%sā -diff -up firefox-71.0/toolkit/components/remote/moz.build.gnome-shell-search-provider firefox-71.0/toolkit/components/remote/moz.build ---- firefox-71.0/toolkit/components/remote/moz.build.gnome-shell-search-provider 2019-11-26 01:02:29.000000000 +0100 -+++ firefox-71.0/toolkit/components/remote/moz.build 2019-11-27 21:37:02.755148375 +0100 -@@ -25,6 +25,10 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk' +diff --git a/toolkit/components/remote/moz.build b/toolkit/components/remote/moz.build +--- a/toolkit/components/remote/moz.build ++++ b/toolkit/components/remote/moz.build +@@ -20,16 +20,20 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gtk' + 'RemoteUtils.cpp', + ] + if CONFIG['MOZ_ENABLE_DBUS']: + SOURCES += [ + 'nsDBusRemoteClient.cpp', 'nsDBusRemoteServer.cpp', ] CXXFLAGS += CONFIG['MOZ_DBUS_GLIB_CFLAGS'] @@ -770,10 +843,20 @@ diff -up firefox-71.0/toolkit/components/remote/moz.build.gnome-shell-search-pro CXXFLAGS += CONFIG['TK_CFLAGS'] if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows': -diff -up firefox-71.0/toolkit/components/remote/nsDBusRemoteServer.cpp.gnome-shell-search-provider firefox-71.0/toolkit/components/remote/nsDBusRemoteServer.cpp ---- firefox-71.0/toolkit/components/remote/nsDBusRemoteServer.cpp.gnome-shell-search-provider 2019-11-26 01:02:29.000000000 +0100 -+++ firefox-71.0/toolkit/components/remote/nsDBusRemoteServer.cpp 2019-11-27 21:37:02.755148375 +0100 -@@ -27,7 +27,7 @@ + SOURCES += [ + 'nsWinRemoteClient.cpp', + 'nsWinRemoteServer.cpp', + ] + +diff --git a/toolkit/components/remote/nsDBusRemoteServer.cpp b/toolkit/components/remote/nsDBusRemoteServer.cpp +--- a/toolkit/components/remote/nsDBusRemoteServer.cpp ++++ b/toolkit/components/remote/nsDBusRemoteServer.cpp +@@ -22,17 +22,17 @@ + + #include "nsGTKToolkit.h" + + #include <dbus/dbus.h> + #include <dbus/dbus-glib-lowlevel.h> #include <dlfcn.h> @@ -782,3 +865,9 @@ diff -up firefox-71.0/toolkit/components/remote/nsDBusRemoteServer.cpp.gnome-she "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection " "1.0//EN\"\n" "\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\";>\n" + "<node>\n" + " <interface name=\"org.freedesktop.DBus.Introspectable\">\n" + " <method name=\"Introspect\">\n" + " <arg name=\"data\" direction=\"out\" type=\"s\"/>\n" + " </method>\n" + @@ -1,3 +1,3 @@ SHA512 (cbindgen-vendor.tar.xz) = 88afa0bc6af525cbb46bc75578b90419b28b95b396d5002fbf299a78a173681b840096ff83ef6e48553d1a5e0aa04e79383ab4d09bf431f3b864fcbacc7de46d -SHA512 (firefox-71.0.source.tar.xz) = 2559bf4703a79a258c6c257d8a2c6b1bc05bb062c13004dc5d5352020fbdd68448bc1d7a2fae34e51f9a9bda576ae2f3118fd99cdad910dd29ef56739c1b8244 -SHA512 (firefox-langpacks-71.0-20191126.tar.xz) = d3f465a988951dcf8b80766934f140b4e8f12c168702d2badea1fdaab36a7d67fcddb2b9d413ce50d28b25ec8fce7b237e308d5f675cd4254766e628f988460c +SHA512 (firefox-71.0.source.tar.xz) = 2f60bb7513dc2e730d8d558faad30367e12d27cb24b630aaebeb0473d0a202a3d4838b253d631722d57fb26f54145e296a710ec1714d3ba27dd71c6c1c52e920 +SHA512 (firefox-langpacks-71.0-20191202.tar.xz) = 9b632263539c65bfb31c51704b8e8c87cc8e9cfb33a5f0764ad2d55206069ec272df009b13c5242633f62808a5cddc34a7a9c1ecdbd2c03fbe473adc83e12c79 |