diff -r 000000000000 -r 6474c204b198 toolkit/components/url-classifier/Classifier.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolkit/components/url-classifier/Classifier.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,111 @@ +//* -*- Mode: C++; tab-width: 8; 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 Classifier_h__ +#define Classifier_h__ + +#include "Entries.h" +#include "HashStore.h" +#include "ProtocolParser.h" +#include "LookupCache.h" +#include "nsCOMPtr.h" +#include "nsString.h" +#include "nsIFile.h" +#include "nsICryptoHash.h" +#include "nsDataHashtable.h" + +namespace mozilla { +namespace safebrowsing { + +/** + * Maintains the stores and LookupCaches for the url classifier. + */ +class Classifier { +public: + Classifier(); + ~Classifier(); + + nsresult Open(nsIFile& aCacheDirectory); + void Close(); + void Reset(); + + /** + * Get the list of active tables and their chunks in a format + * suitable for an update request. + */ + void TableRequest(nsACString& aResult); + + /* + * Get all tables that we know about. + */ + nsresult ActiveTables(nsTArray& aTables); + + /** + * Check a URL against the specified tables. + */ + nsresult Check(const nsACString& aSpec, + const nsACString& tables, + LookupResultArray& aResults); + + /** + * Apply the table updates in the array. Takes ownership of + * the updates in the array and clears it. Wacky! + */ + nsresult ApplyUpdates(nsTArray* aUpdates); + /** + * Failed update. Spoil the entries so we don't block hosts + * unnecessarily + */ + nsresult MarkSpoiled(nsTArray& aTables); + nsresult CacheCompletions(const CacheResultArray& aResults); + uint32_t GetHashKey(void) { return mHashKey; } + void SetFreshTime(uint32_t aTime) { mFreshTime = aTime; } + /* + * Get a bunch of extra prefixes to query for completion + * and mask the real entry being requested + */ + nsresult ReadNoiseEntries(const Prefix& aPrefix, + const nsACString& aTableName, + uint32_t aCount, + PrefixArray* aNoiseEntries); + static void SplitTables(const nsACString& str, nsTArray& tables); + +private: + void DropStores(); + nsresult CreateStoreDirectory(); + nsresult SetupPathNames(); + nsresult RecoverBackups(); + nsresult CleanToDelete(); + nsresult BackupTables(); + nsresult RemoveBackupTables(); + nsresult RegenActiveTables(); + nsresult ScanStoreDir(nsTArray& aTables); + + nsresult ApplyTableUpdates(nsTArray* aUpdates, + const nsACString& aTable); + + LookupCache *GetLookupCache(const nsACString& aTable); + + // Root dir of the Local profile. + nsCOMPtr mCacheDirectory; + // Main directory where to store the databases. + nsCOMPtr mStoreDirectory; + // Used for atomically updating the other dirs. + nsCOMPtr mBackupDirectory; + nsCOMPtr mToDeleteDirectory; + nsCOMPtr mCryptoHash; + nsTArray mHashStores; + nsTArray mLookupCaches; + nsTArray mActiveTablesCache; + uint32_t mHashKey; + // Stores the last time a given table was updated (seconds). + nsDataHashtable mTableFreshness; + uint32_t mFreshTime; +}; + +} +} + +#endif