1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
/* 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 nsUrlClassifierUtils_h_
#define nsUrlClassifierUtils_h_
#include "mozilla/Mutex.h"
#include "mozilla/Base64.h"
#include "nsIUrlClassifierUtils.h"
#include "nsClassHashtable.h"
#include "nsIObserver.h"
#define TESTING_TABLE_PROVIDER_NAME "test"
class nsUrlClassifierUtils final : public nsIUrlClassifierUtils,
public nsIObserver {
public:
typedef nsClassHashtable<nsCStringHashKey, nsCString> ProviderDictType;
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSIURLCLASSIFIERUTILS
NS_DECL_NSIOBSERVER
static already_AddRefed<nsUrlClassifierUtils> GetXPCOMSingleton();
static nsUrlClassifierUtils* GetInstance();
nsresult CanonicalizeHostname(const nsACString& hostname,
nsACString& _retval);
nsresult CanonicalizePath(const nsACString& url, nsACString& _retval);
nsresult CanonicalizeQuery(const nsACString& query, nsACString& _retval);
// This function will encode all "special" characters in typical url encoding,
// that is %hh where h is a valid hex digit. The characters which are encoded
// by this function are any ascii characters under 32(control characters and
// space), 37(%), and anything 127 or above (special characters). Url is the
// string to encode, ret is the encoded string. Function returns true if
// ret != url.
bool SpecialEncode(const nsACString& url, bool foldSlashes,
nsACString& _retval);
void ParseIPAddress(const nsACString& host, nsACString& _retval);
void CanonicalNum(const nsACString& num, uint32_t bytes, bool allowOctal,
nsACString& _retval);
static bool IsMozTestTable(const nsACString& aTableName);
static bool IsTestTable(const nsACString& aTableName);
static bool IsInSafeMode();
private:
nsUrlClassifierUtils();
~nsUrlClassifierUtils();
nsresult Init();
// Disallow copy constructor
nsUrlClassifierUtils(const nsUrlClassifierUtils&);
// Function to tell if we should encode a character.
bool ShouldURLEscape(const unsigned char c) const;
void CleanupHostname(const nsACString& host, nsACString& _retval);
nsresult ReadProvidersFromPrefs(ProviderDictType& aDict);
// The provider lookup table and its mutex.
ProviderDictType mProviderDict;
mozilla::Mutex mProviderDictLock MOZ_UNANNOTATED;
};
#endif // nsUrlClassifierUtils_h_
|