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_
|