Source code

Revision control

Other Tools

1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* This Source Code Form is subject to the terms of the Mozilla Public
3
* License, v. 2.0. If a copy of the MPL was not distributed with this
4
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6
#ifndef nsURLParsers_h__
7
#define nsURLParsers_h__
8
9
#include "nsIURLParser.h"
10
#include "mozilla/Attributes.h"
11
12
//----------------------------------------------------------------------------
13
// base class for url parsers
14
//----------------------------------------------------------------------------
15
16
class nsBaseURLParser : public nsIURLParser {
17
public:
18
NS_DECL_NSIURLPARSER
19
20
nsBaseURLParser() = default;
21
22
protected:
23
// implemented by subclasses
24
virtual void ParseAfterScheme(const char* spec, int32_t specLen,
25
uint32_t* authPos, int32_t* authLen,
26
uint32_t* pathPos, int32_t* pathLen) = 0;
27
};
28
29
//----------------------------------------------------------------------------
30
// an url parser for urls that do not have an authority section
31
//
32
// eg. file:foo/bar.txt
33
// file:/foo/bar.txt (treated equivalently)
35
//
36
// eg. file:////foo/bar.txt (UNC-filepath = \\foo\bar.txt)
37
//
38
// XXX except in this case:
39
// file://foo/bar.txt (the authority "foo" is ignored)
40
//----------------------------------------------------------------------------
41
42
class nsNoAuthURLParser final : public nsBaseURLParser {
43
~nsNoAuthURLParser() = default;
44
45
public:
46
NS_DECL_THREADSAFE_ISUPPORTS
47
48
#if defined(XP_WIN)
49
NS_IMETHOD ParseFilePath(const char*, int32_t, uint32_t*, int32_t*, uint32_t*,
50
int32_t*, uint32_t*, int32_t*) override;
51
#endif
52
53
NS_IMETHOD ParseAuthority(const char* auth, int32_t authLen,
54
uint32_t* usernamePos, int32_t* usernameLen,
55
uint32_t* passwordPos, int32_t* passwordLen,
56
uint32_t* hostnamePos, int32_t* hostnameLen,
57
int32_t* port) override;
58
59
void ParseAfterScheme(const char* spec, int32_t specLen, uint32_t* authPos,
60
int32_t* authLen, uint32_t* pathPos,
61
int32_t* pathLen) override;
62
};
63
64
//----------------------------------------------------------------------------
65
// an url parser for urls that must have an authority section
66
//
67
// eg. http:www.foo.com/bar.html
68
// http:/www.foo.com/bar.html
69
// http://www.foo.com/bar.html (treated equivalently)
71
//----------------------------------------------------------------------------
72
73
class nsAuthURLParser : public nsBaseURLParser {
74
protected:
75
virtual ~nsAuthURLParser() = default;
76
77
public:
78
NS_DECL_THREADSAFE_ISUPPORTS
79
80
NS_IMETHOD ParseAuthority(const char* auth, int32_t authLen,
81
uint32_t* usernamePos, int32_t* usernameLen,
82
uint32_t* passwordPos, int32_t* passwordLen,
83
uint32_t* hostnamePos, int32_t* hostnameLen,
84
int32_t* port) override;
85
86
NS_IMETHOD ParseUserInfo(const char* userinfo, int32_t userinfoLen,
87
uint32_t* usernamePos, int32_t* usernameLen,
88
uint32_t* passwordPos,
89
int32_t* passwordLen) override;
90
91
NS_IMETHOD ParseServerInfo(const char* serverinfo, int32_t serverinfoLen,
92
uint32_t* hostnamePos, int32_t* hostnameLen,
93
int32_t* port) override;
94
95
void ParseAfterScheme(const char* spec, int32_t specLen, uint32_t* authPos,
96
int32_t* authLen, uint32_t* pathPos,
97
int32_t* pathLen) override;
98
};
99
100
//----------------------------------------------------------------------------
101
// an url parser for urls that may or may not have an authority section
102
//
103
// eg. http:www.foo.com (www.foo.com is authority)
104
// http:www.foo.com/bar.html (www.foo.com is authority)
105
// http:/www.foo.com/bar.html (www.foo.com is part of file path)
106
// http://www.foo.com/bar.html (www.foo.com is authority)
107
// http:///www.foo.com/bar.html (www.foo.com is part of file path)
108
//----------------------------------------------------------------------------
109
110
class nsStdURLParser : public nsAuthURLParser {
111
virtual ~nsStdURLParser() = default;
112
113
public:
114
void ParseAfterScheme(const char* spec, int32_t specLen, uint32_t* authPos,
115
int32_t* authLen, uint32_t* pathPos,
116
int32_t* pathLen) override;
117
};
118
119
#endif // nsURLParsers_h__