Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/netwerk/base/nsURLParsers.h
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
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
{
18
public:
19
    NS_DECL_NSIURLPARSER
20
21
9
    nsBaseURLParser() = default;
22
23
protected:
24
    // implemented by subclasses
25
    virtual void ParseAfterScheme(const char *spec, int32_t specLen,
26
                                  uint32_t *authPos, int32_t *authLen,
27
                                  uint32_t *pathPos, int32_t *pathLen) = 0;
28
};
29
30
//----------------------------------------------------------------------------
31
// an url parser for urls that do not have an authority section
32
//
33
// eg. file:foo/bar.txt
34
//     file:/foo/bar.txt      (treated equivalently)
35
//     file:///foo/bar.txt
36
//
37
// eg. file:////foo/bar.txt   (UNC-filepath = \\foo\bar.txt)
38
//
39
// XXX except in this case:
40
//     file://foo/bar.txt     (the authority "foo"  is ignored)
41
//----------------------------------------------------------------------------
42
43
class nsNoAuthURLParser final : public nsBaseURLParser
44
{
45
    ~nsNoAuthURLParser() = default;
46
47
public:
48
    NS_DECL_THREADSAFE_ISUPPORTS
49
50
#if defined(XP_WIN)
51
    NS_IMETHOD ParseFilePath(const char *, int32_t,
52
                             uint32_t *, int32_t *,
53
                             uint32_t *, int32_t *,
54
                             uint32_t *, int32_t *) override;
55
#endif
56
57
    NS_IMETHOD ParseAuthority(const char *auth, int32_t authLen,
58
                              uint32_t *usernamePos, int32_t *usernameLen,
59
                              uint32_t *passwordPos, int32_t *passwordLen,
60
                              uint32_t *hostnamePos, int32_t *hostnameLen,
61
                              int32_t *port) override;
62
63
    void ParseAfterScheme(const char *spec, int32_t specLen,
64
                          uint32_t *authPos, int32_t *authLen,
65
                          uint32_t *pathPos, int32_t *pathLen) override;
66
};
67
68
//----------------------------------------------------------------------------
69
// an url parser for urls that must have an authority section
70
//
71
// eg. http:www.foo.com/bar.html
72
//     http:/www.foo.com/bar.html
73
//     http://www.foo.com/bar.html    (treated equivalently)
74
//     http:///www.foo.com/bar.html
75
//----------------------------------------------------------------------------
76
77
class nsAuthURLParser : public nsBaseURLParser
78
{
79
protected:
80
0
    virtual ~nsAuthURLParser() = default;
81
82
public:
83
    NS_DECL_THREADSAFE_ISUPPORTS
84
85
    NS_IMETHOD ParseAuthority(const char *auth, int32_t authLen,
86
                              uint32_t *usernamePos, int32_t *usernameLen,
87
                              uint32_t *passwordPos, int32_t *passwordLen,
88
                              uint32_t *hostnamePos, int32_t *hostnameLen,
89
                              int32_t *port) override;
90
91
    NS_IMETHOD ParseUserInfo(const char *userinfo, int32_t userinfoLen,
92
                             uint32_t *usernamePos, int32_t *usernameLen,
93
                             uint32_t *passwordPos, int32_t *passwordLen) override;
94
95
    NS_IMETHOD ParseServerInfo(const char *serverinfo, int32_t serverinfoLen,
96
                               uint32_t *hostnamePos, int32_t *hostnameLen,
97
                               int32_t *port) override;
98
99
    void ParseAfterScheme(const char *spec, int32_t specLen,
100
                          uint32_t *authPos, int32_t *authLen,
101
                          uint32_t *pathPos, int32_t *pathLen) override;
102
};
103
104
//----------------------------------------------------------------------------
105
// an url parser for urls that may or may not have an authority section
106
//
107
// eg. http:www.foo.com              (www.foo.com is authority)
108
//     http:www.foo.com/bar.html     (www.foo.com is authority)
109
//     http:/www.foo.com/bar.html    (www.foo.com is part of file path)
110
//     http://www.foo.com/bar.html   (www.foo.com is authority)
111
//     http:///www.foo.com/bar.html  (www.foo.com is part of file path)
112
//----------------------------------------------------------------------------
113
114
class nsStdURLParser : public nsAuthURLParser
115
{
116
    virtual ~nsStdURLParser() = default;
117
118
public:
119
    void ParseAfterScheme(const char *spec, int32_t specLen,
120
                          uint32_t *authPos, int32_t *authLen,
121
                          uint32_t *pathPos, int32_t *pathLen) override;
122
};
123
124
#endif // nsURLParsers_h__