@SmallTest
 @Feature({"Android-AppBase"})
 public void testAddTimestampToIntent() {
   Intent intent = new Intent();
   assertEquals(-1, IntentHandler.getTimestampFromIntent(intent));
   // Check both before and after to make sure that the returned value is
   // really from {@link SystemClock#elapsedRealtime()}.
   long before = SystemClock.elapsedRealtime();
   IntentHandler.addTimestampToIntent(intent);
   long after = SystemClock.elapsedRealtime();
   assertTrue("Time should be increasing", before <= IntentHandler.getTimestampFromIntent(intent));
   assertTrue("Time should be increasing", IntentHandler.getTimestampFromIntent(intent) <= after);
 }
 @UiThreadTest
 @SmallTest
 @Feature({"Android-AppBase"})
 public void testRefererUrl_extraHeadersValidReferrer() {
   Context context = getInstrumentation().getTargetContext();
   String validReferer = "android-app://package/http/url";
   Bundle bundle = new Bundle();
   bundle.putString("Referer", validReferer);
   Intent headersIntent = new Intent(Intent.ACTION_VIEW);
   headersIntent.putExtra(Browser.EXTRA_HEADERS, bundle);
   assertNull(IntentHandler.getReferrerUrl(headersIntent, context));
   assertEquals(
       "Referer: " + validReferer, IntentHandler.getExtraHeadersFromIntent(headersIntent, false));
 }
 @UiThreadTest
 @SmallTest
 @Feature({"Android-AppBase"})
 public void testRefererUrl_extraHeadersInclReferer() {
   // Check that invalid header specified in EXTRA_HEADERS isn't used.
   Context context = getInstrumentation().getTargetContext();
   Bundle bundle = new Bundle();
   bundle.putString("X-custom-header", "X-custom-value");
   bundle.putString("Referer", GOOGLE_URL);
   Intent headersIntent = new Intent(Intent.ACTION_VIEW);
   headersIntent.putExtra(Browser.EXTRA_HEADERS, bundle);
   assertEquals(
       "X-custom-header: X-custom-value", IntentHandler.getExtraHeadersFromIntent(headersIntent));
   assertNull(IntentHandler.getReferrerUrlIncludingExtraHeaders(headersIntent, context));
 }
 @SmallTest
 @Feature({"Android-AppBase"})
 public void testGeneratedReferrer() {
   Context context = getInstrumentation().getTargetContext();
   String packageName = context.getPackageName();
   String referrer = IntentHandler.constructValidReferrerForAuthority(packageName).getUrl();
   assertEquals("android-app://" + packageName, referrer);
 }
  @Override
  public void setUp() throws Exception {
    super.setUp();

    CommandLine.init(null);
    loadNativeLibraryAndInitBrowserProcess();
    IntentHandler.setTestIntentsEnabled(false);
    mIntentHandler = new IntentHandler(null, null);
    mIntent = new Intent();
  }
 @UiThreadTest
 @SmallTest
 @Feature({"Android-AppBase"})
 public void testRefererUrl_extraHeadersOnlyReferer() {
   // Check that invalid header specified in EXTRA_HEADERS isn't used.
   Bundle bundle = new Bundle();
   bundle.putString("Referer", GOOGLE_URL);
   Intent headersIntent = new Intent(Intent.ACTION_VIEW);
   headersIntent.putExtra(Browser.EXTRA_HEADERS, bundle);
   assertNull(IntentHandler.getExtraHeadersFromIntent(headersIntent, false));
 }
  private void processUrls(String[] urls, boolean isValid) {
    Vector<String> failedTests = new Vector<String>();

    for (String url : urls) {
      mIntent.setData(Uri.parse(url));
      if (mIntentHandler.intentHasValidUrl(mIntent) != isValid) {
        failedTests.add(url);
      }
    }
    assertTrue(failedTests.toString(), failedTests.isEmpty());
  }
  @UiThreadTest
  @SmallTest
  @Feature({"Android-AppBase"})
  public void testRefererUrl_extraReferrer() {
    // Check that EXTRA_REFERRER is not accepted with a random URL.
    Context context = getInstrumentation().getTargetContext();
    Intent foreignIntent = new Intent(Intent.ACTION_VIEW);
    foreignIntent.putExtra(Intent.EXTRA_REFERRER, GOOGLE_URL);
    assertNull(IntentHandler.getReferrerUrlIncludingExtraHeaders(foreignIntent, context));

    // Check that EXTRA_REFERRER with android-app URL works.
    final String appUrl = "android-app://com.application/http/www.application.com";
    Intent appIntent = new Intent(Intent.ACTION_VIEW);
    appIntent.putExtra(Intent.EXTRA_REFERRER, Uri.parse(appUrl));
    assertEquals(appUrl, IntentHandler.getReferrerUrlIncludingExtraHeaders(appIntent, context));

    // Check that EXTRA_REFERRER_NAME with android-app works.
    Intent nameIntent = new Intent(Intent.ACTION_VIEW);
    nameIntent.putExtra(Intent.EXTRA_REFERRER_NAME, appUrl);
    assertEquals(appUrl, IntentHandler.getReferrerUrlIncludingExtraHeaders(nameIntent, context));
  }
  @SmallTest
  @Feature({"Android-AppBase"})
  public void testRejectedGoogleChromeSchemeUrls() {
    Vector<String> failedTests = new Vector<String>();

    for (String url : REJECTED_GOOGLECHROME_URLS) {
      mIntent.setData(Uri.parse(url));
      if (IntentHandler.getUrlFromIntent(mIntent) != null) {
        failedTests.add(url);
      }
    }
    assertTrue(failedTests.toString(), failedTests.isEmpty());
  }
 @UiThreadTest
 @MediumTest
 @Feature({"Android-AppBase"})
 public void testGetQueryFromVoiceSearchResultIntent_validVoiceQuery() {
   Intent intent = new Intent(RecognizerResultsIntent.ACTION_VOICE_SEARCH_RESULTS);
   intent.putStringArrayListExtra(
       RecognizerResultsIntent.EXTRA_VOICE_SEARCH_RESULT_STRINGS,
       CollectionUtil.newArrayList(VOICE_SEARCH_QUERY));
   intent.putStringArrayListExtra(
       RecognizerResultsIntent.EXTRA_VOICE_SEARCH_RESULT_URLS,
       CollectionUtil.newArrayList(VOICE_SEARCH_QUERY_URL));
   String query = IntentHandler.getUrlFromVoiceSearchResult(intent);
   assertEquals(VOICE_SEARCH_QUERY_URL, query);
 }
 @UiThreadTest
 @SmallTest
 @Feature({"Android-AppBase"})
 public void testRefererUrl_extraHeadersInclRefererMultiple() {
   // Check that invalid header specified in EXTRA_HEADERS isn't used.
   Bundle bundle = new Bundle();
   bundle.putString("X-custom-header", "X-custom-value");
   bundle.putString("X-custom-header-2", "X-custom-value-2");
   bundle.putString("Referer", GOOGLE_URL);
   Intent headersIntent = new Intent(Intent.ACTION_VIEW);
   headersIntent.putExtra(Browser.EXTRA_HEADERS, bundle);
   assertEquals(
       "X-custom-header-2: X-custom-value-2\nX-custom-header: X-custom-value",
       IntentHandler.getExtraHeadersFromIntent(headersIntent, false));
 }
 @UiThreadTest
 @MediumTest
 @Feature({"Android-AppBase"})
 public void testGetQueryFromVoiceSearchResultIntent_validUrlQuery() {
   Intent intent = new Intent(RecognizerResultsIntent.ACTION_VOICE_SEARCH_RESULTS);
   intent.putStringArrayListExtra(
       RecognizerResultsIntent.EXTRA_VOICE_SEARCH_RESULT_STRINGS,
       CollectionUtil.newArrayList(VOICE_URL_QUERY));
   intent.putStringArrayListExtra(
       RecognizerResultsIntent.EXTRA_VOICE_SEARCH_RESULT_URLS,
       CollectionUtil.newArrayList(VOICE_URL_QUERY_URL));
   String query = IntentHandler.getUrlFromVoiceSearchResult(intent);
   assertTrue(
       String.format(
           "Expected qualified URL: %s, to start " + "with http://www.google.com", query),
       query.indexOf("http://www.google.com") == 0);
 }
 @SmallTest
 @Feature({"Android-AppBase"})
 public void testNullUrlIntent() {
   mIntent.setData(null);
   assertTrue("Intent with null data should be valid", mIntentHandler.intentHasValidUrl(mIntent));
 }