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