Index: content/public/android/java/src/org/chromium/content/third_party/WebAddress.java |
diff --git a/content/public/android/java/src/org/chromium/content/third_party/WebAddress.java b/content/public/android/java/src/org/chromium/content/third_party/WebAddress.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0e8bed35f235bd23078be61bb10a1cda30268134 |
--- /dev/null |
+++ b/content/public/android/java/src/org/chromium/content/third_party/WebAddress.java |
@@ -0,0 +1,181 @@ |
+/* |
+ * Copyright (C) 2006 The Android Open Source Project |
+ * |
+ * Licensed under the Apache License, Version 2.0 (the "License"); |
+ * you may not use this file except in compliance with the License. |
+ * You may obtain a copy of the License at |
+ * |
+ * http://www.apache.org/licenses/LICENSE-2.0 |
+ * |
+ * Unless required by applicable law or agreed to in writing, software |
+ * distributed under the License is distributed on an "AS IS" BASIS, |
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+ * See the License for the specific language governing permissions and |
+ * limitations under the License. |
+ */ |
+ |
+/* |
+ * NOTE: This class is taken from the AOSP frameworks/base/core/java/android/net/WebAddress.java. |
Yaron
2012/09/05 06:10:43
Remove here too.
|
+ * The package name is modified and the imports were modified as needed. |
+ */ |
+package org.chromium.content.browser.third_party; |
+ |
+import static android.util.Patterns.GOOD_IRI_CHAR; |
+ |
+import java.util.regex.Matcher; |
+import java.util.regex.Pattern; |
+ |
+/** |
+ * {@hide} |
+ * |
+ * Web Address Parser |
+ * |
+ * This is called WebAddress, rather than URL or URI, because it |
+ * attempts to parse the stuff that a user will actually type into a |
+ * browser address widget. |
+ * |
+ * Unlike java.net.uri, this parser will not choke on URIs missing |
+ * schemes. It will only throw a ParseException if the input is |
+ * really hosed. |
+ * |
+ * If given an https scheme but no port, fills in port |
+ * |
+ */ |
+public class WebAddress { |
+ |
+ private String mScheme; |
+ private String mHost; |
+ private int mPort; |
+ private String mPath; |
+ private String mAuthInfo; |
+ |
+ static final int MATCH_GROUP_SCHEME = 1; |
+ static final int MATCH_GROUP_AUTHORITY = 2; |
+ static final int MATCH_GROUP_HOST = 3; |
+ static final int MATCH_GROUP_PORT = 4; |
+ static final int MATCH_GROUP_PATH = 5; |
+ |
+ static Pattern sAddressPattern = Pattern.compile( |
+ /* scheme */ "(?:(http|https|file)\\:\\/\\/)?" + |
+ /* authority */ "(?:([-A-Za-z0-9$_.+!*'(),;?&=]+(?:\\:[-A-Za-z0-9$_.+!*'(),;?&=]+)?)@)?" + |
+ /* host */ "([" + GOOD_IRI_CHAR + "%_-][" + GOOD_IRI_CHAR + "%_\\.-]*|\\[[0-9a-fA-F:\\.]+\\])?" + |
+ /* port */ "(?:\\:([0-9]*))?" + |
+ /* path */ "(\\/?[^#]*)?" + |
+ /* anchor */ ".*", Pattern.CASE_INSENSITIVE); |
+ |
+ /** parses given uriString. */ |
+ public WebAddress(String address) throws ParseException { |
+ if (address == null) { |
+ throw new NullPointerException(); |
+ } |
+ |
+ // android.util.Log.d(LOGTAG, "WebAddress: " + address); |
+ |
+ mScheme = ""; |
+ mHost = ""; |
+ mPort = -1; |
+ mPath = "/"; |
+ mAuthInfo = ""; |
+ |
+ Matcher m = sAddressPattern.matcher(address); |
+ String t; |
+ if (m.matches()) { |
+ t = m.group(MATCH_GROUP_SCHEME); |
+ if (t != null) mScheme = t.toLowerCase(); |
+ t = m.group(MATCH_GROUP_AUTHORITY); |
+ if (t != null) mAuthInfo = t; |
+ t = m.group(MATCH_GROUP_HOST); |
+ if (t != null) mHost = t; |
+ t = m.group(MATCH_GROUP_PORT); |
+ if (t != null && t.length() > 0) { |
+ // The ':' character is not returned by the regex. |
+ try { |
+ mPort = Integer.parseInt(t); |
+ } catch (NumberFormatException ex) { |
+ throw new ParseException("Bad port"); |
+ } |
+ } |
+ t = m.group(MATCH_GROUP_PATH); |
+ if (t != null && t.length() > 0) { |
+ /* handle busted myspace frontpage redirect with |
+ missing initial "/" */ |
+ if (t.charAt(0) == '/') { |
+ mPath = t; |
+ } else { |
+ mPath = "/" + t; |
+ } |
+ } |
+ |
+ } else { |
+ // nothing found... outa here |
+ throw new ParseException("Bad address"); |
+ } |
+ |
+ /* Get port from scheme or scheme from port, if necessary and |
+ possible */ |
+ if (mPort == 443 && mScheme.equals("")) { |
+ mScheme = "https"; |
+ } else if (mPort == -1) { |
+ if (mScheme.equals("https")) |
+ mPort = 443; |
+ else |
+ mPort = 80; // default |
+ } |
+ if (mScheme.equals("")) mScheme = "http"; |
+ } |
+ |
+ @Override |
+ public String toString() { |
+ String port = ""; |
+ if ((mPort != 443 && mScheme.equals("https")) || |
+ (mPort != 80 && mScheme.equals("http"))) { |
+ port = ":" + Integer.toString(mPort); |
+ } |
+ String authInfo = ""; |
+ if (mAuthInfo.length() > 0) { |
+ authInfo = mAuthInfo + "@"; |
+ } |
+ |
+ return mScheme + "://" + authInfo + mHost + port + mPath; |
+ } |
+ |
+ public void setScheme(String scheme) { |
+ mScheme = scheme; |
+ } |
+ |
+ public String getScheme() { |
+ return mScheme; |
+ } |
+ |
+ public void setHost(String host) { |
+ mHost = host; |
+ } |
+ |
+ public String getHost() { |
+ return mHost; |
+ } |
+ |
+ public void setPort(int port) { |
+ mPort = port; |
+ } |
+ |
+ public int getPort() { |
+ return mPort; |
+ } |
+ |
+ public void setPath(String path) { |
+ mPath = path; |
+ } |
+ |
+ public String getPath() { |
+ return mPath; |
+ } |
+ |
+ public void setAuthInfo(String authInfo) { |
+ mAuthInfo = authInfo; |
+ } |
+ |
+ public String getAuthInfo() { |
+ return mAuthInfo; |
+ } |
+} |