158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)package org.chromium.chrome.browser;
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)import android.test.InstrumentationTestCase;
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)import android.test.suitebuilder.annotation.SmallTest;
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)import org.chromium.base.test.util.Feature;
11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import java.net.URI;
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import java.net.URISyntaxException;
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)public class UrlUtilitiesTest extends InstrumentationTestCase {
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    @SmallTest
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    public void testIsAcceptedScheme() {
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertTrue(UrlUtilities.isAcceptedScheme("about:awesome"));
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertTrue(UrlUtilities.isAcceptedScheme("data:data"));
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertTrue(UrlUtilities.isAcceptedScheme(
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                "https://user:pass@:awesome.com:9000/bad-scheme:#fake:"));
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertTrue(UrlUtilities.isAcceptedScheme("http://awesome.example.com/"));
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertTrue(UrlUtilities.isAcceptedScheme("file://awesome.example.com/"));
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertTrue(UrlUtilities.isAcceptedScheme("inline:skates.co.uk"));
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertTrue(UrlUtilities.isAcceptedScheme("javascript:alert(1)"));
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isAcceptedScheme("super:awesome"));
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isAcceptedScheme(
2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                "ftp://https:password@example.com/"));
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isAcceptedScheme(
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                "ftp://https:password@example.com/?http:#http:"));
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isAcceptedScheme(
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                 "google-search://https:password@example.com/?http:#http:"));
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isAcceptedScheme("chrome://http://version"));
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isAcceptedScheme(""));
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isAcceptedScheme("  http://awesome.example.com/"));
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isAcceptedScheme("ht\ntp://awesome.example.com/"));
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    }
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    @SmallTest
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    public void testIsDownloadableScheme() {
4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertTrue(UrlUtilities.isDownloadableScheme("data:data"));
4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertTrue(UrlUtilities.isDownloadableScheme(
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                "https://user:pass@:awesome.com:9000/bad-scheme:#fake:"));
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertTrue(UrlUtilities.isDownloadableScheme("http://awesome.example.com/"));
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertTrue(UrlUtilities.isDownloadableScheme("filesystem://awesome.example.com/"));
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isDownloadableScheme("inline:skates.co.uk"));
4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isDownloadableScheme("javascript:alert(1)"));
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isDownloadableScheme("file://awesome.example.com/"));
5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isDownloadableScheme("about:awesome"));
5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isDownloadableScheme("super:awesome"));
5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isDownloadableScheme("ftp://https:password@example.com/"));
5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isDownloadableScheme(
5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                "ftp://https:password@example.com/?http:#http:"));
5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isDownloadableScheme(
5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                "google-search://https:password@example.com/?http:#http:"));
5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isDownloadableScheme("chrome://http://version"));
5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isDownloadableScheme(""));
6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isDownloadableScheme("  http://awesome.example.com/"));
6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        assertFalse(UrlUtilities.isDownloadableScheme("ht\ntp://awesome.example.com/"));
6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    }
6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    @SmallTest
6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    public void testFixUrl() throws URISyntaxException {
6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        try {
6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            URI uri;
6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            uri = new URI(UrlUtilities.fixUrl("google.com"));
6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            assertTrue("http".equals(uri.getScheme()));
7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            uri = new URI(UrlUtilities.fixUrl("\n://user:pass@example.com:80/"));
7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            assertTrue("http".equals(uri.getScheme()));
7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            uri = new URI(UrlUtilities.fixUrl("inline:google.com"));
7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            assertTrue("inline".equals(uri.getScheme()));
7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            uri = new URI(UrlUtilities.fixUrl("chrome:user:pass@google:443/leg:foot"));
7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            assertTrue("chrome".equals(uri.getScheme()));
7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            uri = new URI(UrlUtilities.fixUrl("https://mail.google.com:/"));
7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            assertTrue("https".equals(uri.getScheme()));
7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            uri = new URI(UrlUtilities.fixUrl("://mail.google.com:/"));
7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            assertTrue("http".equals(uri.getScheme()));
8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            uri = new URI(UrlUtilities.fixUrl("//mail.google.com:/"));
8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            assertTrue("http".equals(uri.getScheme()));
8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        } catch (URISyntaxException e) {
8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            assertFalse(true);
8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        }
8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    }
8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    @SmallTest
8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    @Feature({"Webapps"})
8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    public void testGetOriginForDisplay() {
9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        URI uri;
9168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        uri = URI.create("http://chopped.com/is/awesome");
9368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        assertEquals("http://chopped.com", UrlUtilities.getOriginForDisplay(uri, true));
9468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        assertEquals("chopped.com", UrlUtilities.getOriginForDisplay(uri, false));
9568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        uri = URI.create("http://lopped.com");
9768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        assertEquals("http://lopped.com", UrlUtilities.getOriginForDisplay(uri, true));
9868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        assertEquals("lopped.com", UrlUtilities.getOriginForDisplay(uri, false));
9968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        uri = URI.create("http://dropped.com?things");
10168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        assertEquals("http://dropped.com", UrlUtilities.getOriginForDisplay(uri, true));
10268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        assertEquals("dropped.com", UrlUtilities.getOriginForDisplay(uri, false));
10368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        uri = URI.create("http://dfalcant@stopped.com:1234");
10568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        assertEquals("http://stopped.com:1234", UrlUtilities.getOriginForDisplay(uri, true));
10668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        assertEquals("stopped.com:1234", UrlUtilities.getOriginForDisplay(uri, false));
10768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        uri = URI.create("http://dfalcant:secret@stopped.com:9999");
10968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        assertEquals("http://stopped.com:9999", UrlUtilities.getOriginForDisplay(uri, true));
11068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        assertEquals("stopped.com:9999", UrlUtilities.getOriginForDisplay(uri, false));
11168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        uri = URI.create("chrome://settings:443");
11368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        assertEquals("chrome://settings:443", UrlUtilities.getOriginForDisplay(uri, true));
11468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        assertEquals("settings:443", UrlUtilities.getOriginForDisplay(uri, false));
11568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        uri = URI.create("about:blank");
11768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        assertEquals("about:blank", UrlUtilities.getOriginForDisplay(uri, true));
11868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        assertEquals("about:blank", UrlUtilities.getOriginForDisplay(uri, false));
11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    }
12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
122