url_utils.h revision d0247b1b59f9c528cb6df88b4f2b9afaf80d181e
1// Copyright 2013 The Chromium 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 CHROME_BROWSER_HISTORY_URL_UTILS_H_ 6#define CHROME_BROWSER_HISTORY_URL_UTILS_H_ 7 8#include <string> 9 10#include "chrome/browser/history/history_types.h" 11 12namespace history { 13 14// CanonicalURLStringCompare performs lexicographical comparison of two strings 15// that represent valid URLs, so that if the pre-path (scheme, host, and port) 16// parts are equal, then the path parts are compared by treating path components 17// (delimited by "/") as separate tokens that form units of comparison. 18// For example, let us compare |s1| and |s2|, with 19// |s1| = "http://www.google.com:80/base/test/ab/cd?query/stuff" 20// |s2| = "http://www.google.com:80/base/test-case/yz#ref/stuff" 21// The pre-path parts "http://www.google.com:80/" match. We treat the paths as 22// |s1| => ["base", "test", "ab", "cd"] 23// |s2| => ["base", "test-case", "yz"] 24// Components 1 "base" are identical. Components 2 yield "test" < "test-case", 25// so we consider |s1| < |s2|, and return true. Note that naive string 26// comparison would yield the opposite (|s1| > |s2|), since '/' > '-' in ASCII. 27// Note that path can be terminated by "?query" or "#ref". The post-path parts 28// are compared in an arbitrary (but consistent) way. 29bool CanonicalURLStringCompare(const std::string& s1, const std::string& s2); 30 31// Returns whether or not |url1| is a "URL prefix" of |url2|. Criteria: 32// - Scheme, host, port: exact match required. 33// - Path: treated as a list of path components (e.g., ["a", "bb"] for "/a/bb"), 34// and |url1|'s list must be a prefix of |url2|'s list. 35// - Query and ref: ignored. 36// Note that "http://www.google.com/test" is NOT a prefix of 37// "http://www.google.com/testing", although "test" is a prefix of "testing". 38bool UrlIsPrefix(const GURL& url1, const GURL& url2); 39 40} // namespace history 41 42#endif // CHROME_BROWSER_HISTORY_URL_UTILS_H_ 43