diff options
Diffstat (limited to '')
-rw-r--r-- | browser/components/shell/nsGNOMEShellSearchProvider.h | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/browser/components/shell/nsGNOMEShellSearchProvider.h b/browser/components/shell/nsGNOMEShellSearchProvider.h new file mode 100644 index 0000000000..f116fe5797 --- /dev/null +++ b/browser/components/shell/nsGNOMEShellSearchProvider.h @@ -0,0 +1,139 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim:expandtab:shiftwidth=2:tabstop=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 __nsGNOMEShellSearchProvider_h__ +#define __nsGNOMEShellSearchProvider_h__ + +#include "nsINavHistoryService.h" +#include "nsUnixRemoteServer.h" +#include "nsString.h" +#include "nsCOMPtr.h" +#include "mozilla/UniquePtr.h" +#include "nsGNOMEShellDBusHelper.h" + +class nsGNOMEShellSearchProvider; + +class GnomeHistoryIcon { + public: + GnomeHistoryIcon() : mTimeStamp(-1), mWidth(0), mHeight(0){}; + + // From which search is this icon + void Set(int aTimeStamp, mozilla::UniquePtr<uint8_t[]> aData, int aWidth, + int aHeight) { + mTimeStamp = aTimeStamp; + mWidth = aWidth; + mHeight = aHeight; + mData = std::move(aData); + } + + bool IsLoaded() { return mData && mWidth > 0 && mHeight > 0; } + int GetTimeStamp() { return mTimeStamp; } + uint8_t* GetData() { return mData.get(); } + int GetWidth() { return mWidth; } + int GetHeight() { return mHeight; } + + private: + int mTimeStamp; + mozilla::UniquePtr<uint8_t[]> mData; + int mWidth; + int mHeight; +}; + +// nsGNOMEShellHistorySearchResult is a container with contains search results +// which are files asynchronously by nsGNOMEShellHistoryService. +// The search results can be opened by Firefox then. +class nsGNOMEShellHistorySearchResult : public nsUnixRemoteServer { + public: + NS_INLINE_DECL_THREADSAFE_REFCOUNTING(nsGNOMEShellHistorySearchResult) + + nsGNOMEShellHistorySearchResult(nsGNOMEShellSearchProvider* aSearchProvider, + DBusConnection* aConnection, int aTimeStamp) + : mSearchProvider(aSearchProvider), + mReply(nullptr), + mConnection(aConnection), + mTimeStamp(aTimeStamp){}; + + void SetReply(DBusMessage* aReply) { mReply = aReply; } + void SetSearchTerm(const char* aSearchTerm) { + mSearchTerm = nsAutoCString(aSearchTerm); + } + DBusConnection* GetDBusConnection() { return mConnection; } + void SetTimeStamp(int aTimeStamp) { mTimeStamp = aTimeStamp; } + int GetTimeStamp() { return mTimeStamp; } + nsAutoCString& GetSearchTerm() { return mSearchTerm; } + + // Receive (asynchronously) history search results from history service. + // This is called asynchronously by nsGNOMEShellHistoryService + // when we have search results available. + void ReceiveSearchResultContainer( + nsCOMPtr<nsINavHistoryContainerResultNode> aHistResultContainer); + + nsCOMPtr<nsINavHistoryContainerResultNode> GetSearchResultContainer() { + return mHistResultContainer; + } + void HandleCommandLine(const char* aBuffer, uint32_t aTimestamp) { + nsUnixRemoteServer::HandleCommandLine(aBuffer, aTimestamp); + } + + void SetHistoryIcon(int aTimeStamp, mozilla::UniquePtr<uint8_t[]> aData, + int aWidth, int aHeight, int aIconIndex); + GnomeHistoryIcon* GetHistoryIcon(int aIconIndex); + + private: + void HandleSearchResultReply(); + + ~nsGNOMEShellHistorySearchResult() = default; + + private: + nsGNOMEShellSearchProvider* mSearchProvider; + nsCOMPtr<nsINavHistoryContainerResultNode> mHistResultContainer; + nsAutoCString mSearchTerm; + DBusMessage* mReply; + DBusConnection* mConnection; + int mTimeStamp; + GnomeHistoryIcon mHistoryIcons[MAX_SEARCH_RESULTS_NUM]; +}; + +class nsGNOMEShellHistoryService { + public: + nsresult QueryHistory(RefPtr<nsGNOMEShellHistorySearchResult> aSearchResult); + + private: + nsCOMPtr<nsINavHistoryService> mHistoryService; +}; + +class nsGNOMEShellSearchProvider { + public: + nsGNOMEShellSearchProvider() + : mConnection(nullptr), mSearchResultTimeStamp(0) {} + ~nsGNOMEShellSearchProvider() { Shutdown(); } + + nsresult Startup(); + void Shutdown(); + + DBusHandlerResult HandleDBusMessage(DBusConnection* aConnection, + DBusMessage* msg); + void UnregisterDBusInterface(DBusConnection* aConnection); + + bool SetSearchResult(RefPtr<nsGNOMEShellHistorySearchResult> aSearchResult); + + private: + DBusHandlerResult HandleSearchResultSet(DBusMessage* msg, + bool aInitialSearch); + DBusHandlerResult HandleResultMetas(DBusMessage* msg); + DBusHandlerResult ActivateResult(DBusMessage* msg); + DBusHandlerResult LaunchSearch(DBusMessage* msg); + + // The connection is owned by DBus library + RefPtr<DBusConnection> mConnection; + RefPtr<nsGNOMEShellHistorySearchResult> mSearchResult; + int mSearchResultTimeStamp; +}; + +nsGNOMEShellHistoryService* GetGNOMEShellHistoryService(); + +#endif // __nsGNOMEShellSearchProvider_h__ |