Commit cc244f13 authored by Evan Stade's avatar Evan Stade Committed by Commit Bot

Replace Tab with WebContents in AppBannerManager

This removes a dependency on Chrome code and makes AppBannerManager one
step closer to componentization.

No behavioral change is expected.

Bug: 1147268
Change-Id: Ibee4bc572cba7089591ec217abce8e6446f56aa2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2538040Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Commit-Queue: Evan Stade <estade@chromium.org>
Cr-Commit-Position: refs/heads/master@{#827835}
parent d7a3daa1
......@@ -773,8 +773,8 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
}
@VisibleForTesting(otherwise = VisibleForTesting.PROTECTED)
public AppBannerManager.InstallStringPair getAddToHomeScreenTitle(Tab currentTab) {
return AppBannerManager.getHomescreenLanguageOption(currentTab);
public AppBannerManager.InstallStringPair getAddToHomeScreenTitle(@NonNull Tab currentTab) {
return AppBannerManager.getHomescreenLanguageOption(currentTab.getWebContents());
}
@Override
......
......@@ -35,6 +35,7 @@ public class AddToHomescreenCoordinator {
@VisibleForTesting
ModalDialogManager mModalDialogManager;
private WindowAndroid mWindowAndroid;
// May be null during tests.
private Tab mTab;
@VisibleForTesting
......@@ -104,7 +105,8 @@ public class AddToHomescreenCoordinator {
AddToHomescreenMediator addToHomescreenMediator =
new AddToHomescreenMediator(model, mWindowAndroid);
PropertyModelChangeProcessor.create(model,
initView(AppBannerManager.getHomescreenLanguageOption(mTab),
initView(AppBannerManager.getHomescreenLanguageOption(
mTab == null ? null : mTab.getWebContents()),
addToHomescreenMediator),
AddToHomescreenViewBinder::bind);
return addToHomescreenMediator;
......
......@@ -637,12 +637,13 @@ public class PortalsTest {
CriteriaHelper.pollUiThread(() -> {
Criteria.checkThat(tab.getTitle(), Matchers.is("Web app banner test page"));
});
CriteriaHelper.pollUiThread(() -> !AppBannerManager.forTab(tab).isRunningForTesting());
CriteriaHelper.pollUiThread(
() -> !AppBannerManager.forWebContents(tab.getWebContents()).isRunningForTesting());
TouchCommon.singleClickView(tab.getView());
String expectedDialogTitle = ThreadUtils.runOnUiThreadBlocking(() -> {
return mActivityTestRule.getActivity().getString(
AppBannerManager.getHomescreenLanguageOption(tab).titleTextId);
AppBannerManager.getHomescreenLanguageOption(tab.getWebContents()).titleTextId);
});
UiObject dialogUiObject = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
.findObject(new UiSelector().text(expectedDialogTitle));
......
......@@ -17,14 +17,13 @@ import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.components.feature_engagement.FeatureConstants;
import org.chromium.components.feature_engagement.Tracker;
import org.chromium.content_public.browser.WebContents;
import org.chromium.ui.base.WindowAndroid;
/**
* Manages an AppBannerInfoBar for a Tab.
* Manages an AppBannerInfoBar for a WebContents.
*
* The AppBannerManager is responsible for fetching details about native apps to display in the
* banner. The actual observation of the WebContents (which triggers the automatic creation and
......@@ -165,9 +164,10 @@ public class AppBannerManager {
}
/** Returns the language option to use for the add to homescreen dialog and menu item. */
public static InstallStringPair getHomescreenLanguageOption(Tab currentTab) {
AppBannerManager manager = currentTab != null ? AppBannerManager.forTab(currentTab) : null;
if (manager != null && manager.getIsPwa(currentTab)) {
public static InstallStringPair getHomescreenLanguageOption(WebContents webContents) {
AppBannerManager manager =
webContents != null ? AppBannerManager.forWebContents(webContents) : null;
if (manager != null && manager.getIsPwa(webContents)) {
return PWA_PAIR;
} else {
return NON_PWA_PAIR;
......@@ -205,19 +205,18 @@ public class AppBannerManager {
}
/** Returns the AppBannerManager object. This is owned by the C++ banner manager. */
public static AppBannerManager forTab(Tab tab) {
public static AppBannerManager forWebContents(WebContents contents) {
ThreadUtils.assertOnUiThread();
return AppBannerManagerJni.get().getJavaBannerManagerForWebContents(tab.getWebContents());
return AppBannerManagerJni.get().getJavaBannerManagerForWebContents(contents);
}
/**
* Checks whether the tab has navigated to a PWA.
* @param tab The tab to check.
* @return true if the tab has been determined to contain a PWA.
* Checks whether the renderer has navigated to a PWA.
* @param contents The web contents to check.
* @return true if the site has been determined to contain a PWA.
*/
public boolean getIsPwa(Tab tab) {
return !TextUtils.equals(
"", AppBannerManagerJni.get().getInstallableWebAppName(tab.getWebContents()));
public boolean getIsPwa(WebContents contents) {
return !TextUtils.equals("", AppBannerManagerJni.get().getInstallableWebAppName(contents));
}
@NativeMethods
......
......@@ -90,6 +90,7 @@ import org.chromium.components.infobars.InfoBarUiItem;
import org.chromium.components.signin.AccountManagerFacadeProvider;
import org.chromium.components.signin.test.util.FakeAccountManagerFacade;
import org.chromium.content_public.browser.UiThreadTaskTraits;
import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.browser.test.NativeLibraryTestUtils;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
import org.chromium.content_public.browser.test.util.TouchCommon;
......@@ -270,12 +271,13 @@ public class AppBannerManagerTest {
});
}
private AppBannerManager getAppBannerManager(Tab tab) {
return AppBannerManager.forTab(tab);
private AppBannerManager getAppBannerManager(WebContents webContents) {
return AppBannerManager.forWebContents(webContents);
}
private void waitForBannerManager(Tab tab) {
CriteriaHelper.pollUiThread(() -> !getAppBannerManager(tab).isRunningForTesting());
CriteriaHelper.pollUiThread(
() -> !getAppBannerManager(tab.getWebContents()).isRunningForTesting());
}
private void navigateToUrlAndWaitForBannerManager(
......@@ -288,7 +290,8 @@ public class AppBannerManagerTest {
private void waitUntilAppDetailsRetrieved(
ChromeActivityTestRule<? extends ChromeActivity> rule, final int numExpected) {
CriteriaHelper.pollUiThread(() -> {
AppBannerManager manager = getAppBannerManager(rule.getActivity().getActivityTab());
AppBannerManager manager =
getAppBannerManager(rule.getActivity().getActivityTab().getWebContents());
Criteria.checkThat(mDetailsDelegate.mNumRetrieved, Matchers.is(numExpected));
Criteria.checkThat(manager.isRunningForTesting(), Matchers.is(false));
});
......@@ -309,7 +312,7 @@ public class AppBannerManagerTest {
private static String getExpectedDialogTitle(Tab tab) throws Exception {
String title = ThreadUtils.runOnUiThreadBlocking(() -> {
return TabUtils.getActivity(tab).getString(
AppBannerManager.getHomescreenLanguageOption(tab).titleTextId);
AppBannerManager.getHomescreenLanguageOption(tab.getWebContents()).titleTextId);
});
return title;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment