Index: url/url_util.h |
=================================================================== |
--- url/url_util.h (revision 0) |
+++ url/url_util.h (revision 0) |
@@ -0,0 +1,228 @@ |
+// Copyright 2007, Google Inc. |
+// All rights reserved. |
+// |
+// Redistribution and use in source and binary forms, with or without |
+// modification, are permitted provided that the following conditions are |
+// met: |
+// |
+// * Redistributions of source code must retain the above copyright |
+// notice, this list of conditions and the following disclaimer. |
+// * Redistributions in binary form must reproduce the above |
+// copyright notice, this list of conditions and the following disclaimer |
+// in the documentation and/or other materials provided with the |
+// distribution. |
+// * Neither the name of Google Inc. nor the names of its |
+// contributors may be used to endorse or promote products derived from |
+// this software without specific prior written permission. |
+// |
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+ |
+#ifndef GOOGLEURL_SRC_URL_UTIL_H__ |
+#define GOOGLEURL_SRC_URL_UTIL_H__ |
+ |
+#include <string> |
+ |
+#include "base/string16.h" |
+#include "googleurl/src/url_common.h" |
+#include "googleurl/src/url_parse.h" |
+#include "googleurl/src/url_canon.h" |
+ |
+namespace url_util { |
+ |
+// Init ------------------------------------------------------------------------ |
+ |
+// Initialization is NOT required, it will be implicitly initialized when first |
+// used. However, this implicit initialization is NOT threadsafe. If you are |
+// using this library in a threaded environment and don't have a consistent |
+// "first call" (an example might be calling "AddStandardScheme" with your |
+// special application-specific schemes) then you will want to call initialize |
+// before spawning any threads. |
+// |
+// It is OK to call this function more than once, subsequent calls will simply |
+// "noop", unless Shutdown() was called in the mean time. This will also be a |
+// "noop" if other calls to the library have forced an initialization |
+// beforehand. |
+GURL_API void Initialize(); |
+ |
+// Cleanup is not required, except some strings may leak. For most user |
+// applications, this is fine. If you're using it in a library that may get |
+// loaded and unloaded, you'll want to unload to properly clean up your |
+// library. |
+GURL_API void Shutdown(); |
+ |
+// Schemes -------------------------------------------------------------------- |
+ |
+// Adds an application-defined scheme to the internal list of "standard" URL |
+// schemes. This function is not threadsafe and can not be called concurrently |
+// with any other url_util function. It will assert if the list of standard |
+// schemes has been locked (see LockStandardSchemes). |
+GURL_API void AddStandardScheme(const char* new_scheme); |
+ |
+// Sets a flag to prevent future calls to AddStandardScheme from succeeding. |
+// |
+// This is designed to help prevent errors for multithreaded applications. |
+// Normal usage would be to call AddStandardScheme for your custom schemes at |
+// the beginning of program initialization, and then LockStandardSchemes. This |
+// prevents future callers from mistakenly calling AddStandardScheme when the |
+// program is running with multiple threads, where such usage would be |
+// dangerous. |
+// |
+// We could have had AddStandardScheme use a lock instead, but that would add |
+// some platform-specific dependencies we don't otherwise have now, and is |
+// overkill considering the normal usage is so simple. |
+GURL_API void LockStandardSchemes(); |
+ |
+// Locates the scheme in the given string and places it into |found_scheme|, |
+// which may be NULL to indicate the caller does not care about the range. |
+// |
+// Returns whether the given |compare| scheme matches the scheme found in the |
+// input (if any). The |compare| scheme must be a valid canonical scheme or |
+// the result of the comparison is undefined. |
+GURL_API bool FindAndCompareScheme(const char* str, |
+ int str_len, |
+ const char* compare, |
+ url_parse::Component* found_scheme); |
+GURL_API bool FindAndCompareScheme(const char16* str, |
+ int str_len, |
+ const char* compare, |
+ url_parse::Component* found_scheme); |
+inline bool FindAndCompareScheme(const std::string& str, |
+ const char* compare, |
+ url_parse::Component* found_scheme) { |
+ return FindAndCompareScheme(str.data(), static_cast<int>(str.size()), |
+ compare, found_scheme); |
+} |
+inline bool FindAndCompareScheme(const string16& str, |
+ const char* compare, |
+ url_parse::Component* found_scheme) { |
+ return FindAndCompareScheme(str.data(), static_cast<int>(str.size()), |
+ compare, found_scheme); |
+} |
+ |
+// Returns true if the given string represents a standard URL. This means that |
+// either the scheme is in the list of known standard schemes. |
+GURL_API bool IsStandard(const char* spec, |
+ const url_parse::Component& scheme); |
+GURL_API bool IsStandard(const char16* spec, |
+ const url_parse::Component& scheme); |
+ |
+// TODO(brettw) remove this. This is a temporary compatibility hack to avoid |
+// breaking the WebKit build when this version is synced via Chrome. |
+inline bool IsStandard(const char* spec, int spec_len, |
+ const url_parse::Component& scheme) { |
+ return IsStandard(spec, scheme); |
+} |
+ |
+// URL library wrappers ------------------------------------------------------- |
+ |
+// Parses the given spec according to the extracted scheme type. Normal users |
+// should use the URL object, although this may be useful if performance is |
+// critical and you don't want to do the heap allocation for the std::string. |
+// |
+// As with the url_canon::Canonicalize* functions, the charset converter can |
+// be NULL to use UTF-8 (it will be faster in this case). |
+// |
+// Returns true if a valid URL was produced, false if not. On failure, the |
+// output and parsed structures will still be filled and will be consistent, |
+// but they will not represent a loadable URL. |
+GURL_API bool Canonicalize(const char* spec, |
+ int spec_len, |
+ url_canon::CharsetConverter* charset_converter, |
+ url_canon::CanonOutput* output, |
+ url_parse::Parsed* output_parsed); |
+GURL_API bool Canonicalize(const char16* spec, |
+ int spec_len, |
+ url_canon::CharsetConverter* charset_converter, |
+ url_canon::CanonOutput* output, |
+ url_parse::Parsed* output_parsed); |
+ |
+// Resolves a potentially relative URL relative to the given parsed base URL. |
+// The base MUST be valid. The resulting canonical URL and parsed information |
+// will be placed in to the given out variables. |
+// |
+// The relative need not be relative. If we discover that it's absolute, this |
+// will produce a canonical version of that URL. See Canonicalize() for more |
+// about the charset_converter. |
+// |
+// Returns true if the output is valid, false if the input could not produce |
+// a valid URL. |
+GURL_API bool ResolveRelative(const char* base_spec, |
+ int base_spec_len, |
+ const url_parse::Parsed& base_parsed, |
+ const char* relative, |
+ int relative_length, |
+ url_canon::CharsetConverter* charset_converter, |
+ url_canon::CanonOutput* output, |
+ url_parse::Parsed* output_parsed); |
+GURL_API bool ResolveRelative(const char* base_spec, |
+ int base_spec_len, |
+ const url_parse::Parsed& base_parsed, |
+ const char16* relative, |
+ int relative_length, |
+ url_canon::CharsetConverter* charset_converter, |
+ url_canon::CanonOutput* output, |
+ url_parse::Parsed* output_parsed); |
+ |
+// Replaces components in the given VALID input url. The new canonical URL info |
+// is written to output and out_parsed. |
+// |
+// Returns true if the resulting URL is valid. |
+GURL_API bool ReplaceComponents( |
+ const char* spec, |
+ int spec_len, |
+ const url_parse::Parsed& parsed, |
+ const url_canon::Replacements<char>& replacements, |
+ url_canon::CharsetConverter* charset_converter, |
+ url_canon::CanonOutput* output, |
+ url_parse::Parsed* out_parsed); |
+GURL_API bool ReplaceComponents( |
+ const char* spec, |
+ int spec_len, |
+ const url_parse::Parsed& parsed, |
+ const url_canon::Replacements<char16>& replacements, |
+ url_canon::CharsetConverter* charset_converter, |
+ url_canon::CanonOutput* output, |
+ url_parse::Parsed* out_parsed); |
+ |
+// String helper functions ---------------------------------------------------- |
+ |
+// Compare the lower-case form of the given string against the given ASCII |
+// string. This is useful for doing checking if an input string matches some |
+// token, and it is optimized to avoid intermediate string copies. |
+// |
+// The versions of this function that don't take a b_end assume that the b |
+// string is NULL terminated. |
+GURL_API bool LowerCaseEqualsASCII(const char* a_begin, |
+ const char* a_end, |
+ const char* b); |
+GURL_API bool LowerCaseEqualsASCII(const char* a_begin, |
+ const char* a_end, |
+ const char* b_begin, |
+ const char* b_end); |
+GURL_API bool LowerCaseEqualsASCII(const char16* a_begin, |
+ const char16* a_end, |
+ const char* b); |
+ |
+// Unescapes the given string using URL escaping rules. |
+GURL_API void DecodeURLEscapeSequences(const char* input, int length, |
+ url_canon::CanonOutputW* output); |
+ |
+// Escapes the given string as defined by the JS method encodeURIComponent. See |
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURIComponent |
+GURL_API void EncodeURIComponent(const char* input, int length, |
+ url_canon::CanonOutput* output); |
+ |
+ |
+} // namespace url_util |
+ |
+#endif // GOOGLEURL_SRC_URL_UTIL_H__ |
Property changes on: url/url_util.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |