diff -r 000000000000 -r 6474c204b198 mobile/android/components/build/nsAndroidHistory.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobile/android/components/build/nsAndroidHistory.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,70 @@ +/* -*- Mode: c++; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- + * 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 NS_ANDROIDHISTORY_H +#define NS_ANDROIDHISTORY_H + +#include "IHistory.h" +#include "nsDataHashtable.h" +#include "nsTPriorityQueue.h" +#include "nsIRunnable.h" + +#define NS_ANDROIDHISTORY_CID \ + {0xCCAA4880, 0x44DD, 0x40A7, {0xA1, 0x3F, 0x61, 0x56, 0xFC, 0x88, 0x2C, 0x0B}} + +// Max size of History::mRecentlyVisitedURIs +#define RECENTLY_VISITED_URI_SIZE 8 + +// Max size of History::mEmbedURIs +#define EMBED_URI_SIZE 128 + +class nsAndroidHistory : public mozilla::IHistory, public nsIRunnable +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_IHISTORY + NS_DECL_NSIRUNNABLE + + /** + * Obtains a pointer that has had AddRef called on it. Used by the service + * manager only. + */ + static nsAndroidHistory* GetSingleton(); + + nsAndroidHistory(); + +private: + static nsAndroidHistory* sHistory; + + nsDataHashtable *> mListeners; + nsTPriorityQueue mPendingURIs; + + nsresult CanAddURI(nsIURI* aURI, bool* canAdd); + + /** + * mRecentlyVisitedURIs remembers URIs which are recently added to the DB, + * to avoid saving these locations repeatedly in a short period. + */ + typedef nsAutoTArray, RECENTLY_VISITED_URI_SIZE> + RecentlyVisitedArray; + RecentlyVisitedArray mRecentlyVisitedURIs; + RecentlyVisitedArray::index_type mRecentlyVisitedURIsNextIndex; + + void AppendToRecentlyVisitedURIs(nsIURI* aURI); + bool IsRecentlyVisitedURI(nsIURI* aURI); + + /** + * mEmbedURIs remembers URIs which are explicitly not added to the DB, + * to avoid wasting time on these locations. + */ + typedef nsAutoTArray, EMBED_URI_SIZE> EmbedArray; + EmbedArray::index_type mEmbedURIsNextIndex; + EmbedArray mEmbedURIs; + + void AppendToEmbedURIs(nsIURI* aURI); + bool IsEmbedURI(nsIURI* aURI); +}; + +#endif