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