| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.customtabs; | 5 package org.chromium.chrome.browser.customtabs; |
| 6 | 6 |
| 7 import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_NON_LOW_E
ND_DEVICE; | 7 import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_NON_LOW_E
ND_DEVICE; |
| 8 | 8 |
| 9 import android.app.Activity; | 9 import android.app.Activity; |
| 10 import android.app.Application; | 10 import android.app.Application; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 import android.widget.ImageButton; | 42 import android.widget.ImageButton; |
| 43 | 43 |
| 44 import org.chromium.base.PathUtils; | 44 import org.chromium.base.PathUtils; |
| 45 import org.chromium.base.ThreadUtils; | 45 import org.chromium.base.ThreadUtils; |
| 46 import org.chromium.base.library_loader.LibraryLoader; | 46 import org.chromium.base.library_loader.LibraryLoader; |
| 47 import org.chromium.base.library_loader.LibraryProcessType; | 47 import org.chromium.base.library_loader.LibraryProcessType; |
| 48 import org.chromium.base.test.util.CommandLineFlags; | 48 import org.chromium.base.test.util.CommandLineFlags; |
| 49 import org.chromium.base.test.util.Restriction; | 49 import org.chromium.base.test.util.Restriction; |
| 50 import org.chromium.chrome.R; | 50 import org.chromium.chrome.R; |
| 51 import org.chromium.chrome.browser.ChromeActivity; | 51 import org.chromium.chrome.browser.ChromeActivity; |
| 52 import org.chromium.chrome.browser.ChromeFeatureList; |
| 52 import org.chromium.chrome.browser.ChromeSwitches; | 53 import org.chromium.chrome.browser.ChromeSwitches; |
| 53 import org.chromium.chrome.browser.ChromeTabbedActivity; | 54 import org.chromium.chrome.browser.ChromeTabbedActivity; |
| 54 import org.chromium.chrome.browser.IntentHandler; | 55 import org.chromium.chrome.browser.IntentHandler; |
| 55 import org.chromium.chrome.browser.TabsOpenedFromExternalAppTest; | 56 import org.chromium.chrome.browser.TabsOpenedFromExternalAppTest; |
| 56 import org.chromium.chrome.browser.appmenu.AppMenuHandler; | 57 import org.chromium.chrome.browser.appmenu.AppMenuHandler; |
| 57 import org.chromium.chrome.browser.document.ChromeLauncherActivity; | 58 import org.chromium.chrome.browser.document.ChromeLauncherActivity; |
| 58 import org.chromium.chrome.browser.prerender.ExternalPrerenderHandler; | 59 import org.chromium.chrome.browser.prerender.ExternalPrerenderHandler; |
| 59 import org.chromium.chrome.browser.profiles.Profile; | 60 import org.chromium.chrome.browser.profiles.Profile; |
| 60 import org.chromium.chrome.browser.tab.EmptyTabObserver; | 61 import org.chromium.chrome.browser.tab.EmptyTabObserver; |
| 61 import org.chromium.chrome.browser.tab.Tab; | 62 import org.chromium.chrome.browser.tab.Tab; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 private static final String TEST_PAGE_COPY = "/chrome/test/data/android/
google.html"; | 101 private static final String TEST_PAGE_COPY = "/chrome/test/data/android/
google.html"; |
| 101 | 102 |
| 102 @Override | 103 @Override |
| 103 public void onReceive(Context context, Intent intent) { | 104 public void onReceive(Context context, Intent intent) { |
| 104 // Note: even if this assertion fails, the test might still pass, be
cause | 105 // Note: even if this assertion fails, the test might still pass, be
cause |
| 105 // BroadcastReceiver is not treated as part of the instrumentation t
est. | 106 // BroadcastReceiver is not treated as part of the instrumentation t
est. |
| 106 assertEquals(mTestServer.getURL(TEST_PAGE_COPY), intent.getDataStrin
g()); | 107 assertEquals(mTestServer.getURL(TEST_PAGE_COPY), intent.getDataStrin
g()); |
| 107 } | 108 } |
| 108 } | 109 } |
| 109 | 110 |
| 111 private static final String READ_IT_LATER_FEATURE = "ReadItLaterInMenu"; |
| 110 private static final int MAX_MENU_CUSTOM_ITEMS = 5; | 112 private static final int MAX_MENU_CUSTOM_ITEMS = 5; |
| 111 private static final int NUM_CHROME_MENU_ITEMS = 3; | 113 private static final int NUM_CHROME_MENU_ITEMS = 3; |
| 112 private static final String | 114 private static final String |
| 113 TEST_ACTION = "org.chromium.chrome.browser.customtabs.TEST_PENDING_I
NTENT_SENT"; | 115 TEST_ACTION = "org.chromium.chrome.browser.customtabs.TEST_PENDING_I
NTENT_SENT"; |
| 114 private static final String TEST_PAGE = "/chrome/test/data/android/google.ht
ml"; | 116 private static final String TEST_PAGE = "/chrome/test/data/android/google.ht
ml"; |
| 115 private static final String TEST_PAGE_2 = "/chrome/test/data/android/test.ht
ml"; | 117 private static final String TEST_PAGE_2 = "/chrome/test/data/android/test.ht
ml"; |
| 116 private static final String GEOLOCATION_PAGE = | 118 private static final String GEOLOCATION_PAGE = |
| 117 "/chrome/test/data/geolocation/geolocation_on_load.html"; | 119 "/chrome/test/data/geolocation/geolocation_on_load.html"; |
| 118 private static final String SELECT_POPUP_PAGE = "/chrome/test/data/android/s
elect.html"; | 120 private static final String SELECT_POPUP_PAGE = "/chrome/test/data/android/s
elect.html"; |
| 119 private static final String FRAGMENT_TEST_PAGE = "/chrome/test/data/android/
fragment.html"; | 121 private static final String FRAGMENT_TEST_PAGE = "/chrome/test/data/android/
fragment.html"; |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 */ | 341 */ |
| 340 @SmallTest | 342 @SmallTest |
| 341 public void testAppMenu() throws InterruptedException { | 343 public void testAppMenu() throws InterruptedException { |
| 342 Intent intent = createMinimalCustomTabIntent(); | 344 Intent intent = createMinimalCustomTabIntent(); |
| 343 int numMenuEntries = 1; | 345 int numMenuEntries = 1; |
| 344 addMenuEntriesToIntent(intent, numMenuEntries); | 346 addMenuEntriesToIntent(intent, numMenuEntries); |
| 345 startCustomTabActivityWithIntent(intent); | 347 startCustomTabActivityWithIntent(intent); |
| 346 | 348 |
| 347 openAppMenuAndAssertMenuShown(); | 349 openAppMenuAndAssertMenuShown(); |
| 348 Menu menu = getActivity().getAppMenuHandler().getAppMenu().getMenu(); | 350 Menu menu = getActivity().getAppMenuHandler().getAppMenu().getMenu(); |
| 349 final int expectedMenuSize = numMenuEntries + NUM_CHROME_MENU_ITEMS; | 351 final int expectedMenuSize = numMenuEntries + NUM_CHROME_MENU_ITEMS |
| 352 + (ChromeFeatureList.isEnabled(READ_IT_LATER_FEATURE) ? 1 : 0); |
| 350 final int actualMenuSize = getActualMenuSize(menu); | 353 final int actualMenuSize = getActualMenuSize(menu); |
| 351 | 354 |
| 352 assertNotNull("App menu is not initialized: ", menu); | 355 assertNotNull("App menu is not initialized: ", menu); |
| 353 assertEquals(expectedMenuSize, actualMenuSize); | 356 assertEquals(expectedMenuSize, actualMenuSize); |
| 354 assertNotNull(menu.findItem(R.id.forward_menu_id)); | 357 assertNotNull(menu.findItem(R.id.forward_menu_id)); |
| 355 assertNotNull(menu.findItem(R.id.info_menu_id)); | 358 assertNotNull(menu.findItem(R.id.info_menu_id)); |
| 356 assertNotNull(menu.findItem(R.id.reload_menu_id)); | 359 assertNotNull(menu.findItem(R.id.reload_menu_id)); |
| 357 assertNotNull(menu.findItem(R.id.find_in_page_id)); | 360 assertNotNull(menu.findItem(R.id.find_in_page_id)); |
| 358 assertNotNull(menu.findItem(R.id.open_in_browser_id)); | 361 assertNotNull(menu.findItem(R.id.open_in_browser_id)); |
| 359 assertFalse(menu.findItem(R.id.share_row_menu_id).isVisible()); | 362 assertFalse(menu.findItem(R.id.share_row_menu_id).isVisible()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 382 */ | 385 */ |
| 383 @SmallTest | 386 @SmallTest |
| 384 public void testMaxMenuItems() throws InterruptedException { | 387 public void testMaxMenuItems() throws InterruptedException { |
| 385 Intent intent = createMinimalCustomTabIntent(); | 388 Intent intent = createMinimalCustomTabIntent(); |
| 386 int numMenuEntries = 7; | 389 int numMenuEntries = 7; |
| 387 addMenuEntriesToIntent(intent, numMenuEntries); | 390 addMenuEntriesToIntent(intent, numMenuEntries); |
| 388 startCustomTabActivityWithIntent(intent); | 391 startCustomTabActivityWithIntent(intent); |
| 389 | 392 |
| 390 openAppMenuAndAssertMenuShown(); | 393 openAppMenuAndAssertMenuShown(); |
| 391 Menu menu = getActivity().getAppMenuHandler().getAppMenu().getMenu(); | 394 Menu menu = getActivity().getAppMenuHandler().getAppMenu().getMenu(); |
| 392 final int expectedMenuSize = MAX_MENU_CUSTOM_ITEMS + NUM_CHROME_MENU_ITE
MS; | 395 final int expectedMenuSize = MAX_MENU_CUSTOM_ITEMS + NUM_CHROME_MENU_ITE
MS |
| 396 + (ChromeFeatureList.isEnabled(READ_IT_LATER_FEATURE) ? 1 : 0); |
| 393 final int actualMenuSize = getActualMenuSize(menu); | 397 final int actualMenuSize = getActualMenuSize(menu); |
| 394 assertNotNull("App menu is not initialized: ", menu); | 398 assertNotNull("App menu is not initialized: ", menu); |
| 395 assertEquals(expectedMenuSize, actualMenuSize); | 399 assertEquals(expectedMenuSize, actualMenuSize); |
| 396 } | 400 } |
| 397 | 401 |
| 398 /** | 402 /** |
| 399 * Test whether the custom menu is correctly shown and clicking it sends the
right | 403 * Test whether the custom menu is correctly shown and clicking it sends the
right |
| 400 * {@link PendingIntent}. | 404 * {@link PendingIntent}. |
| 401 */ | 405 */ |
| 402 @SmallTest | 406 @SmallTest |
| (...skipping 23 matching lines...) Expand all Loading... |
| 426 } | 430 } |
| 427 }); | 431 }); |
| 428 } | 432 } |
| 429 | 433 |
| 430 /** | 434 /** |
| 431 * Test whether clicking "Open in Chrome" takes us to a chrome normal tab, l
oading the same url. | 435 * Test whether clicking "Open in Chrome" takes us to a chrome normal tab, l
oading the same url. |
| 432 */ | 436 */ |
| 433 @SmallTest | 437 @SmallTest |
| 434 public void testOpenInBrowser() throws InterruptedException { | 438 public void testOpenInBrowser() throws InterruptedException { |
| 435 startCustomTabActivityWithIntent(createMinimalCustomTabIntent()); | 439 startCustomTabActivityWithIntent(createMinimalCustomTabIntent()); |
| 436 IntentFilter filter = new IntentFilter(Intent.ACTION_VIEW); | |
| 437 filter.addDataScheme(Uri.parse(mTestServer.getURL("/")).getScheme()); | |
| 438 final ActivityMonitor monitor = getInstrumentation().addMonitor(filter,
null, false); | |
| 439 openAppMenuAndAssertMenuShown(); | 440 openAppMenuAndAssertMenuShown(); |
| 440 final String menuItemTitle = mActivity.getString(R.string.menu_open_in_p
roduct_default); | 441 if (ChromeFeatureList.isEnabled(READ_IT_LATER_FEATURE)) { |
| 441 ThreadUtils.runOnUiThread(new Runnable() { | 442 // TODO(ianwen): implement this test after read it later becomes a s
ettled feature. |
| 442 @Override | 443 } else { |
| 443 public void run() { | 444 IntentFilter filter = new IntentFilter(Intent.ACTION_VIEW); |
| 444 MenuItem item = mActivity.getAppMenuHandler() | 445 filter.addDataScheme(Uri.parse(mTestServer.getURL("/")).getScheme())
; |
| 445 .getAppMenu().getMenu().findItem(R.id.open_in_browser_id
); | 446 final ActivityMonitor monitor = getInstrumentation().addMonitor(filt
er, null, false); |
| 446 assertNotNull(item); | 447 final String menuItemTitle = mActivity.getString(R.string.menu_open_
in_product_default); |
| 447 assertEquals(menuItemTitle, item.getTitle().toString()); | 448 ThreadUtils.runOnUiThread(new Runnable() { |
| 448 mActivity.onMenuOrKeyboardAction(R.id.open_in_browser_id, false)
; | 449 @Override |
| 449 } | 450 public void run() { |
| 450 }); | 451 MenuItem item = mActivity.getAppMenuHandler() |
| 451 CriteriaHelper.pollInstrumentationThread(new Criteria() { | 452 .getAppMenu().getMenu().findItem(R.id.open_in_browse
r_id); |
| 452 @Override | 453 assertNotNull(item); |
| 453 public boolean isSatisfied() { | 454 assertEquals(menuItemTitle, item.getTitle().toString()); |
| 454 return getInstrumentation().checkMonitorHit(monitor, 1); | 455 mActivity.onMenuOrKeyboardAction(R.id.open_in_browser_id, fa
lse); |
| 455 } | 456 } |
| 456 }); | 457 }); |
| 458 CriteriaHelper.pollInstrumentationThread(new Criteria() { |
| 459 @Override |
| 460 public boolean isSatisfied() { |
| 461 return getInstrumentation().checkMonitorHit(monitor, 1); |
| 462 } |
| 463 }); |
| 464 } |
| 457 } | 465 } |
| 458 | 466 |
| 459 /** | 467 /** |
| 460 * Test whether a custom tab can be reparented to a new activity. | 468 * Test whether a custom tab can be reparented to a new activity. |
| 461 */ | 469 */ |
| 462 @SmallTest | 470 @SmallTest |
| 463 public void testTabReparentingBasic() throws InterruptedException { | 471 public void testTabReparentingBasic() throws InterruptedException { |
| 464 startCustomTabActivityWithIntent(createMinimalCustomTabIntent()); | 472 startCustomTabActivityWithIntent(createMinimalCustomTabIntent()); |
| 465 reparentAndVerifyTab(); | 473 reparentAndVerifyTab(); |
| 466 } | 474 } |
| (...skipping 813 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1280 TabObserver observer = new EmptyTabObserver() { | 1288 TabObserver observer = new EmptyTabObserver() { |
| 1281 @Override | 1289 @Override |
| 1282 public void onHidden(Tab tab) { | 1290 public void onHidden(Tab tab) { |
| 1283 tabHiddenHelper.notifyCalled(); | 1291 tabHiddenHelper.notifyCalled(); |
| 1284 } | 1292 } |
| 1285 }; | 1293 }; |
| 1286 tabToBeReparented.addObserver(observer); | 1294 tabToBeReparented.addObserver(observer); |
| 1287 ThreadUtils.postOnUiThread(new Runnable() { | 1295 ThreadUtils.postOnUiThread(new Runnable() { |
| 1288 @Override | 1296 @Override |
| 1289 public void run() { | 1297 public void run() { |
| 1290 mActivity.openCurrentUrlInBrowser(true); | 1298 mActivity.openCurrentUrlInBrowser(true, true); |
| 1291 assertNull(mActivity.getActivityTab()); | 1299 assertNull(mActivity.getActivityTab()); |
| 1292 } | 1300 } |
| 1293 }); | 1301 }); |
| 1294 // Use the extended CriteriaHelper timeout to make sure we get an activi
ty | 1302 // Use the extended CriteriaHelper timeout to make sure we get an activi
ty |
| 1295 final Activity lastActivity = | 1303 final Activity lastActivity = |
| 1296 monitor.waitForActivityWithTimeout(CriteriaHelper.DEFAULT_MAX_TI
ME_TO_POLL); | 1304 monitor.waitForActivityWithTimeout(CriteriaHelper.DEFAULT_MAX_TI
ME_TO_POLL); |
| 1297 assertNotNull("Monitor did not get an activity before hitting the timeou
t", lastActivity); | 1305 assertNotNull("Monitor did not get an activity before hitting the timeou
t", lastActivity); |
| 1298 assertTrue("Expected lastActivity to be a ChromeActivity, was " | 1306 assertTrue("Expected lastActivity to be a ChromeActivity, was " |
| 1299 + lastActivity.getClass().getName(), | 1307 + lastActivity.getClass().getName(), |
| 1300 lastActivity instanceof ChromeActivity); | 1308 lastActivity instanceof ChromeActivity); |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1408 if (jsonText.equalsIgnoreCase("null")) jsonText = ""; | 1416 if (jsonText.equalsIgnoreCase("null")) jsonText = ""; |
| 1409 value = jsonText; | 1417 value = jsonText; |
| 1410 } catch (InterruptedException | TimeoutException e) { | 1418 } catch (InterruptedException | TimeoutException e) { |
| 1411 e.printStackTrace(); | 1419 e.printStackTrace(); |
| 1412 return false; | 1420 return false; |
| 1413 } | 1421 } |
| 1414 return TextUtils.equals(mExpected, value); | 1422 return TextUtils.equals(mExpected, value); |
| 1415 } | 1423 } |
| 1416 } | 1424 } |
| 1417 } | 1425 } |
| OLD | NEW |