1// Copyright 2014 The Chromium OS Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef LIBBRILLO_BRILLO_URL_UTILS_H_ 6#define LIBBRILLO_BRILLO_URL_UTILS_H_ 7 8#include <string> 9#include <vector> 10 11#include <base/compiler_specific.h> 12#include <base/macros.h> 13#include <brillo/brillo_export.h> 14#include <brillo/data_encoding.h> 15 16namespace brillo { 17 18namespace url { 19 20// Appends a subpath to url and delimiting then with '/' if the path doesn't 21// end with it already. Also handles URLs with query parameters/fragment. 22BRILLO_EXPORT std::string Combine( 23 const std::string& url, 24 const std::string& subpath) WARN_UNUSED_RESULT; 25BRILLO_EXPORT std::string CombineMultiple( 26 const std::string& url, 27 const std::vector<std::string>& parts) WARN_UNUSED_RESULT; 28 29// Removes the query string/fragment from |url| and returns the query string. 30// This method actually modifies |url|. So, if you call it on this: 31// http://www.test.org/?foo=bar 32// it will modify |url| to "http://www.test.org/" and return "?foo=bar" 33BRILLO_EXPORT std::string TrimOffQueryString(std::string* url); 34 35// Returns the query string, if available. 36// For example, for the following URL: 37// http://server.com/path/to/object?k=v&foo=bar#fragment 38// Here: 39// http://server.com/path/to/object - is the URL of the object, 40// ?k=v&foo=bar - URL query string 41// #fragment - URL fragment string 42// If |remove_fragment| is true, the function returns the query string without 43// the fragment. Otherwise the fragment is included as part of the result. 44BRILLO_EXPORT std::string GetQueryString(const std::string& url, 45 bool remove_fragment); 46 47// Parses the query string into a set of key-value pairs. 48BRILLO_EXPORT data_encoding::WebParamList GetQueryStringParameters( 49 const std::string& url); 50 51// Returns a value of the specified query parameter, or empty string if missing. 52BRILLO_EXPORT std::string GetQueryStringValue( 53 const std::string& url, 54 const std::string& name); 55BRILLO_EXPORT std::string GetQueryStringValue( 56 const data_encoding::WebParamList& params, 57 const std::string& name); 58 59// Removes the query string and/or a fragment part from URL. 60// If |remove_fragment| is specified, the fragment is also removed. 61// For example: 62// http://server.com/path/to/object?k=v&foo=bar#fragment 63// true -> http://server.com/path/to/object 64// false -> http://server.com/path/to/object#fragment 65BRILLO_EXPORT std::string RemoveQueryString( 66 const std::string& url, 67 bool remove_fragment) WARN_UNUSED_RESULT; 68 69// Appends a single query parameter to the URL. 70BRILLO_EXPORT std::string AppendQueryParam( 71 const std::string& url, 72 const std::string& name, 73 const std::string& value) WARN_UNUSED_RESULT; 74// Appends a list of query parameters to the URL. 75BRILLO_EXPORT std::string AppendQueryParams( 76 const std::string& url, 77 const data_encoding::WebParamList& params) WARN_UNUSED_RESULT; 78 79// Checks if the URL has query parameters. 80BRILLO_EXPORT bool HasQueryString(const std::string& url); 81 82} // namespace url 83} // namespace brillo 84 85#endif // LIBBRILLO_BRILLO_URL_UTILS_H_ 86