1/*
2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * Copyright (C) 2012 Motorola Mobility Inc.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1.  Redistributions of source code must retain the above copyright
10 *     notice, this list of conditions and the following disclaimer.
11 * 2.  Redistributions in binary form must reproduce the above copyright
12 *     notice, this list of conditions and the following disclaimer in the
13 *     documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
19 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#include "config.h"
28#include "core/dom/DOMURLUtilsReadOnly.h"
29
30#include "platform/weborigin/KnownPorts.h"
31#include "platform/weborigin/SecurityOrigin.h"
32
33namespace blink {
34
35String DOMURLUtilsReadOnly::href()
36{
37    const KURL& kurl = url();
38    if (kurl.isNull())
39        return input();
40    return kurl.string();
41}
42
43String DOMURLUtilsReadOnly::origin(const KURL& kurl)
44{
45    if (kurl.isNull())
46        return "";
47    return SecurityOrigin::create(kurl)->toString();
48}
49
50String DOMURLUtilsReadOnly::host(const KURL& kurl)
51{
52    if (kurl.hostEnd() == kurl.pathStart())
53        return kurl.host();
54    if (isDefaultPortForProtocol(kurl.port(), kurl.protocol()))
55        return kurl.host();
56    return kurl.host() + ":" + String::number(kurl.port());
57}
58
59String DOMURLUtilsReadOnly::port(const KURL& kurl)
60{
61    if (kurl.hasPort())
62        return String::number(kurl.port());
63
64    return emptyString();
65}
66
67String DOMURLUtilsReadOnly::search(const KURL& kurl)
68{
69    String query = kurl.query();
70    return query.isEmpty() ? emptyString() : "?" + query;
71}
72
73String DOMURLUtilsReadOnly::hash(const KURL& kurl)
74{
75    String fragmentIdentifier = kurl.fragmentIdentifier();
76    if (fragmentIdentifier.isEmpty())
77        return emptyString();
78    return AtomicString(String("#" + fragmentIdentifier));
79}
80
81} // namespace blink
82