diff options
Diffstat (limited to '')
-rw-r--r-- | netwerk/base/nsURLParsers.h | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/netwerk/base/nsURLParsers.h b/netwerk/base/nsURLParsers.h new file mode 100644 index 0000000000..3143022b90 --- /dev/null +++ b/netwerk/base/nsURLParsers.h @@ -0,0 +1,119 @@ +/* -*- Mode: C++; tab-width: 2; 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 nsURLParsers_h__ +#define nsURLParsers_h__ + +#include "nsIURLParser.h" +#include "mozilla/Attributes.h" + +//---------------------------------------------------------------------------- +// base class for url parsers +//---------------------------------------------------------------------------- + +class nsBaseURLParser : public nsIURLParser { + public: + NS_DECL_NSIURLPARSER + + nsBaseURLParser() = default; + + protected: + // implemented by subclasses + virtual void ParseAfterScheme(const char* spec, int32_t specLen, + uint32_t* authPos, int32_t* authLen, + uint32_t* pathPos, int32_t* pathLen) = 0; +}; + +//---------------------------------------------------------------------------- +// an url parser for urls that do not have an authority section +// +// eg. file:foo/bar.txt +// file:/foo/bar.txt (treated equivalently) +// file:///foo/bar.txt +// +// eg. file:////foo/bar.txt (UNC-filepath = \\foo\bar.txt) +// +// XXX except in this case: +// file://foo/bar.txt (the authority "foo" is ignored) +//---------------------------------------------------------------------------- + +class nsNoAuthURLParser final : public nsBaseURLParser { + ~nsNoAuthURLParser() = default; + + public: + NS_DECL_THREADSAFE_ISUPPORTS + +#if defined(XP_WIN) + NS_IMETHOD ParseFilePath(const char*, int32_t, uint32_t*, int32_t*, uint32_t*, + int32_t*, uint32_t*, int32_t*) override; +#endif + + NS_IMETHOD ParseAuthority(const char* auth, int32_t authLen, + uint32_t* usernamePos, int32_t* usernameLen, + uint32_t* passwordPos, int32_t* passwordLen, + uint32_t* hostnamePos, int32_t* hostnameLen, + int32_t* port) override; + + void ParseAfterScheme(const char* spec, int32_t specLen, uint32_t* authPos, + int32_t* authLen, uint32_t* pathPos, + int32_t* pathLen) override; +}; + +//---------------------------------------------------------------------------- +// an url parser for urls that must have an authority section +// +// eg. http:www.foo.com/bar.html +// http:/www.foo.com/bar.html +// http://www.foo.com/bar.html (treated equivalently) +// http:///www.foo.com/bar.html +//---------------------------------------------------------------------------- + +class nsAuthURLParser : public nsBaseURLParser { + protected: + virtual ~nsAuthURLParser() = default; + + public: + NS_DECL_THREADSAFE_ISUPPORTS + + NS_IMETHOD ParseAuthority(const char* auth, int32_t authLen, + uint32_t* usernamePos, int32_t* usernameLen, + uint32_t* passwordPos, int32_t* passwordLen, + uint32_t* hostnamePos, int32_t* hostnameLen, + int32_t* port) override; + + NS_IMETHOD ParseUserInfo(const char* userinfo, int32_t userinfoLen, + uint32_t* usernamePos, int32_t* usernameLen, + uint32_t* passwordPos, + int32_t* passwordLen) override; + + NS_IMETHOD ParseServerInfo(const char* serverinfo, int32_t serverinfoLen, + uint32_t* hostnamePos, int32_t* hostnameLen, + int32_t* port) override; + + void ParseAfterScheme(const char* spec, int32_t specLen, uint32_t* authPos, + int32_t* authLen, uint32_t* pathPos, + int32_t* pathLen) override; +}; + +//---------------------------------------------------------------------------- +// an url parser for urls that may or may not have an authority section +// +// eg. http:www.foo.com (www.foo.com is authority) +// http:www.foo.com/bar.html (www.foo.com is authority) +// http:/www.foo.com/bar.html (www.foo.com is part of file path) +// http://www.foo.com/bar.html (www.foo.com is authority) +// http:///www.foo.com/bar.html (www.foo.com is part of file path) +//---------------------------------------------------------------------------- + +class nsStdURLParser : public nsAuthURLParser { + virtual ~nsStdURLParser() = default; + + public: + void ParseAfterScheme(const char* spec, int32_t specLen, uint32_t* authPos, + int32_t* authLen, uint32_t* pathPos, + int32_t* pathLen) override; +}; + +#endif // nsURLParsers_h__ |