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/DOMURLUtils.h" 29 30#include "platform/weborigin/KnownPorts.h" 31 32namespace blink { 33 34void DOMURLUtils::setHref(const String& value) 35{ 36 setInput(value); 37} 38 39void DOMURLUtils::setProtocol(const String& value) 40{ 41 KURL kurl = url(); 42 if (kurl.isNull()) 43 return; 44 kurl.setProtocol(value); 45 setURL(kurl); 46} 47 48void DOMURLUtils::setUsername(const String& value) 49{ 50 KURL kurl = url(); 51 if (kurl.isNull()) 52 return; 53 kurl.setUser(value); 54 setURL(kurl); 55} 56 57void DOMURLUtils::setPassword(const String& value) 58{ 59 KURL kurl = url(); 60 if (kurl.isNull()) 61 return; 62 kurl.setPass(value); 63 setURL(kurl); 64} 65 66void DOMURLUtils::setHost(const String& value) 67{ 68 if (value.isEmpty()) 69 return; 70 71 KURL kurl = url(); 72 if (!kurl.canSetHostOrPort()) 73 return; 74 75 kurl.setHostAndPort(value); 76 setURL(kurl); 77} 78 79void DOMURLUtils::setHostname(const String& value) 80{ 81 KURL kurl = url(); 82 if (!kurl.canSetHostOrPort()) 83 return; 84 85 // Before setting new value: 86 // Remove all leading U+002F SOLIDUS ("/") characters. 87 unsigned i = 0; 88 unsigned hostLength = value.length(); 89 while (value[i] == '/') 90 i++; 91 92 if (i == hostLength) 93 return; 94 95 kurl.setHost(value.substring(i)); 96 97 setURL(kurl); 98} 99 100void DOMURLUtils::setPort(const String& value) 101{ 102 KURL kurl = url(); 103 if (!kurl.canSetHostOrPort()) 104 return; 105 106 kurl.setPort(value); 107 setURL(kurl); 108} 109 110void DOMURLUtils::setPathname(const String& value) 111{ 112 KURL kurl = url(); 113 if (!kurl.canSetPathname()) 114 return; 115 kurl.setPath(value); 116 setURL(kurl); 117} 118 119void DOMURLUtils::setSearch(const String& value) 120{ 121 KURL kurl = url(); 122 if (!kurl.isValid()) 123 return; 124 125 // FIXME: have KURL do this clearing of the query component 126 // instead, if practical. Will require addressing 127 // http://crbug.com/108690, for one. 128 if (value[0] == '?') 129 kurl.setQuery(value.length() == 1 ? String() : value.substring(1)); 130 else 131 kurl.setQuery(value.isEmpty() ? String() : value); 132 133 setURL(kurl); 134} 135 136void DOMURLUtils::setHash(const String& value) 137{ 138 KURL kurl = url(); 139 if (kurl.isNull()) 140 return; 141 142 // FIXME: have KURL handle the clearing of the fragment component 143 // on the same input. 144 if (value[0] == '#') 145 kurl.setFragmentIdentifier(value.length() == 1 ? String() : value.substring(1)); 146 else 147 kurl.setFragmentIdentifier(value.isEmpty() ? String() : value); 148 149 setURL(kurl); 150} 151 152} // namespace blink 153