/* -*- 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__