1*6777b538SAndroid Build Coastguard Worker // Copyright 2022 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef NET_BASE_URL_SEARCH_PARAMS_H_ 6*6777b538SAndroid Build Coastguard Worker #define NET_BASE_URL_SEARCH_PARAMS_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <string> 9*6777b538SAndroid Build Coastguard Worker #include <utility> 10*6777b538SAndroid Build Coastguard Worker #include <vector> 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker #include "base/containers/flat_set.h" 13*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h" 14*6777b538SAndroid Build Coastguard Worker #include "url/gurl.h" 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Worker namespace net { 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker // Class that exposes the following functionality to parse a UTF-8, percent 19*6777b538SAndroid Build Coastguard Worker // encoded url's `query` 20*6777b538SAndroid Build Coastguard Worker // - parse `query` parameters into a list of `(key,value)` pairs keeping the 21*6777b538SAndroid Build Coastguard Worker // same order as in `query`. While parsing the url's `query` the class does 22*6777b538SAndroid Build Coastguard Worker // percent decoding of both the `key` and `value`. 23*6777b538SAndroid Build Coastguard Worker // - stable sort of the `(key,value)` entries in the list based on `key` 24*6777b538SAndroid Build Coastguard Worker // - deletion of all `(key,value)` pairs for which `key`is part of a set of 25*6777b538SAndroid Build Coastguard Worker // specified `keys` 26*6777b538SAndroid Build Coastguard Worker // - deletion of all `(key, values)` pairs except pairs for which `key` is part 27*6777b538SAndroid Build Coastguard Worker // of a set of specified `keys` 28*6777b538SAndroid Build Coastguard Worker class NET_EXPORT UrlSearchParams { 29*6777b538SAndroid Build Coastguard Worker public: 30*6777b538SAndroid Build Coastguard Worker explicit UrlSearchParams(const GURL& url); 31*6777b538SAndroid Build Coastguard Worker UrlSearchParams(const UrlSearchParams&) = delete; 32*6777b538SAndroid Build Coastguard Worker ~UrlSearchParams(); 33*6777b538SAndroid Build Coastguard Worker UrlSearchParams& operator=(UrlSearchParams&) = delete; 34*6777b538SAndroid Build Coastguard Worker UrlSearchParams& operator=(const UrlSearchParams&) = delete; 35*6777b538SAndroid Build Coastguard Worker // Runs a stable sort by key of all of the query search params. 36*6777b538SAndroid Build Coastguard Worker // The stable sort will keep the order of query search params with the same 37*6777b538SAndroid Build Coastguard Worker // key the same as in the original url. 38*6777b538SAndroid Build Coastguard Worker void Sort(); 39*6777b538SAndroid Build Coastguard Worker // Deletes all query search params with specified keys. 40*6777b538SAndroid Build Coastguard Worker void DeleteAllWithNames(const base::flat_set<std::string>& names); 41*6777b538SAndroid Build Coastguard Worker // Deletes all query search params except the ones with specified keys. 42*6777b538SAndroid Build Coastguard Worker void DeleteAllExceptWithNames(const base::flat_set<std::string>& names); 43*6777b538SAndroid Build Coastguard Worker // Returns a list of key-value pairs representing all query search params. 44*6777b538SAndroid Build Coastguard Worker const std::vector<std::pair<std::string, std::string>>& params() const; 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Worker private: 47*6777b538SAndroid Build Coastguard Worker // Keeps track of all key-value pairs representing all query search params. 48*6777b538SAndroid Build Coastguard Worker // The order from the original url is important. 49*6777b538SAndroid Build Coastguard Worker std::vector<std::pair<std::string, std::string>> params_; 50*6777b538SAndroid Build Coastguard Worker }; 51*6777b538SAndroid Build Coastguard Worker 52*6777b538SAndroid Build Coastguard Worker } // namespace net 53*6777b538SAndroid Build Coastguard Worker #endif // NET_BASE_URL_SEARCH_PARAMS_H_ 54