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 ...@@ -773,8 +773,8 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
} }
@VisibleForTesting(otherwise = VisibleForTesting.PROTECTED) @VisibleForTesting(otherwise = VisibleForTesting.PROTECTED)
public AppBannerManager.InstallStringPair getAddToHomeScreenTitle(Tab currentTab) { public AppBannerManager.InstallStringPair getAddToHomeScreenTitle(@NonNull Tab currentTab) {
return AppBannerManager.getHomescreenLanguageOption(currentTab); return AppBannerManager.getHomescreenLanguageOption(currentTab.getWebContents());
} }
@Override @Override
......
...@@ -35,6 +35,7 @@ public class AddToHomescreenCoordinator { ...@@ -35,6 +35,7 @@ public class AddToHomescreenCoordinator {
@VisibleForTesting @VisibleForTesting
ModalDialogManager mModalDialogManager; ModalDialogManager mModalDialogManager;
private WindowAndroid mWindowAndroid; private WindowAndroid mWindowAndroid;
// May be null during tests.
private Tab mTab; private Tab mTab;
@VisibleForTesting @VisibleForTesting
...@@ -104,7 +105,8 @@ public class AddToHomescreenCoordinator { ...@@ -104,7 +105,8 @@ public class AddToHomescreenCoordinator {
AddToHomescreenMediator addToHomescreenMediator = AddToHomescreenMediator addToHomescreenMediator =
new AddToHomescreenMediator(model, mWindowAndroid); new AddToHomescreenMediator(model, mWindowAndroid);
PropertyModelChangeProcessor.create(model, PropertyModelChangeProcessor.create(model,
initView(AppBannerManager.getHomescreenLanguageOption(mTab), initView(AppBannerManager.getHomescreenLanguageOption(
mTab == null ? null : mTab.getWebContents()),
addToHomescreenMediator), addToHomescreenMediator),
AddToHomescreenViewBinder::bind); AddToHomescreenViewBinder::bind);
return addToHomescreenMediator; return addToHomescreenMediator;
......
...@@ -637,12 +637,13 @@ public class PortalsTest { ...@@ -637,12 +637,13 @@ public class PortalsTest {
CriteriaHelper.pollUiThread(() -> { CriteriaHelper.pollUiThread(() -> {
Criteria.checkThat(tab.getTitle(), Matchers.is("Web app banner test page")); 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()); TouchCommon.singleClickView(tab.getView());
String expectedDialogTitle = ThreadUtils.runOnUiThreadBlocking(() -> { String expectedDialogTitle = ThreadUtils.runOnUiThreadBlocking(() -> {
return mActivityTestRule.getActivity().getString( return mActivityTestRule.getActivity().getString(
AppBannerManager.getHomescreenLanguageOption(tab).titleTextId); AppBannerManager.getHomescreenLanguageOption(tab.getWebContents()).titleTextId);
}); });
UiObject dialogUiObject = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) UiObject dialogUiObject = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
.findObject(new UiSelector().text(expectedDialogTitle)); .findObject(new UiSelector().text(expectedDialogTitle));
......
...@@ -17,14 +17,13 @@ import org.chromium.base.annotations.CalledByNative; ...@@ -17,14 +17,13 @@ import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace; import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods; import org.chromium.base.annotations.NativeMethods;
import org.chromium.chrome.browser.profiles.Profile; 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.FeatureConstants;
import org.chromium.components.feature_engagement.Tracker; import org.chromium.components.feature_engagement.Tracker;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
import org.chromium.ui.base.WindowAndroid; 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 * 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 * banner. The actual observation of the WebContents (which triggers the automatic creation and
...@@ -165,9 +164,10 @@ public class AppBannerManager { ...@@ -165,9 +164,10 @@ public class AppBannerManager {
} }
/** Returns the language option to use for the add to homescreen dialog and menu item. */ /** Returns the language option to use for the add to homescreen dialog and menu item. */
public static InstallStringPair getHomescreenLanguageOption(Tab currentTab) { public static InstallStringPair getHomescreenLanguageOption(WebContents webContents) {
AppBannerManager manager = currentTab != null ? AppBannerManager.forTab(currentTab) : null; AppBannerManager manager =
if (manager != null && manager.getIsPwa(currentTab)) { webContents != null ? AppBannerManager.forWebContents(webContents) : null;
if (manager != null && manager.getIsPwa(webContents)) {
return PWA_PAIR; return PWA_PAIR;
} else { } else {
return NON_PWA_PAIR; return NON_PWA_PAIR;
...@@ -205,19 +205,18 @@ public class AppBannerManager { ...@@ -205,19 +205,18 @@ public class AppBannerManager {
} }
/** Returns the AppBannerManager object. This is owned by the C++ banner manager. */ /** 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(); ThreadUtils.assertOnUiThread();
return AppBannerManagerJni.get().getJavaBannerManagerForWebContents(tab.getWebContents()); return AppBannerManagerJni.get().getJavaBannerManagerForWebContents(contents);
} }
/** /**
* Checks whether the tab has navigated to a PWA. * Checks whether the renderer has navigated to a PWA.
* @param tab The tab to check. * @param contents The web contents to check.
* @return true if the tab has been determined to contain a PWA. * @return true if the site has been determined to contain a PWA.
*/ */
public boolean getIsPwa(Tab tab) { public boolean getIsPwa(WebContents contents) {
return !TextUtils.equals( return !TextUtils.equals("", AppBannerManagerJni.get().getInstallableWebAppName(contents));
"", AppBannerManagerJni.get().getInstallableWebAppName(tab.getWebContents()));
} }
@NativeMethods @NativeMethods
......
...@@ -90,6 +90,7 @@ import org.chromium.components.infobars.InfoBarUiItem; ...@@ -90,6 +90,7 @@ import org.chromium.components.infobars.InfoBarUiItem;
import org.chromium.components.signin.AccountManagerFacadeProvider; import org.chromium.components.signin.AccountManagerFacadeProvider;
import org.chromium.components.signin.test.util.FakeAccountManagerFacade; import org.chromium.components.signin.test.util.FakeAccountManagerFacade;
import org.chromium.content_public.browser.UiThreadTaskTraits; 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.NativeLibraryTestUtils;
import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.content_public.browser.test.util.TestThreadUtils;
import org.chromium.content_public.browser.test.util.TouchCommon; import org.chromium.content_public.browser.test.util.TouchCommon;
...@@ -270,12 +271,13 @@ public class AppBannerManagerTest { ...@@ -270,12 +271,13 @@ public class AppBannerManagerTest {
}); });
} }
private AppBannerManager getAppBannerManager(Tab tab) { private AppBannerManager getAppBannerManager(WebContents webContents) {
return AppBannerManager.forTab(tab); return AppBannerManager.forWebContents(webContents);
} }
private void waitForBannerManager(Tab tab) { private void waitForBannerManager(Tab tab) {
CriteriaHelper.pollUiThread(() -> !getAppBannerManager(tab).isRunningForTesting()); CriteriaHelper.pollUiThread(
() -> !getAppBannerManager(tab.getWebContents()).isRunningForTesting());
} }
private void navigateToUrlAndWaitForBannerManager( private void navigateToUrlAndWaitForBannerManager(
...@@ -288,7 +290,8 @@ public class AppBannerManagerTest { ...@@ -288,7 +290,8 @@ public class AppBannerManagerTest {
private void waitUntilAppDetailsRetrieved( private void waitUntilAppDetailsRetrieved(
ChromeActivityTestRule<? extends ChromeActivity> rule, final int numExpected) { ChromeActivityTestRule<? extends ChromeActivity> rule, final int numExpected) {
CriteriaHelper.pollUiThread(() -> { CriteriaHelper.pollUiThread(() -> {
AppBannerManager manager = getAppBannerManager(rule.getActivity().getActivityTab()); AppBannerManager manager =
getAppBannerManager(rule.getActivity().getActivityTab().getWebContents());
Criteria.checkThat(mDetailsDelegate.mNumRetrieved, Matchers.is(numExpected)); Criteria.checkThat(mDetailsDelegate.mNumRetrieved, Matchers.is(numExpected));
Criteria.checkThat(manager.isRunningForTesting(), Matchers.is(false)); Criteria.checkThat(manager.isRunningForTesting(), Matchers.is(false));
}); });
...@@ -309,7 +312,7 @@ public class AppBannerManagerTest { ...@@ -309,7 +312,7 @@ public class AppBannerManagerTest {
private static String getExpectedDialogTitle(Tab tab) throws Exception { private static String getExpectedDialogTitle(Tab tab) throws Exception {
String title = ThreadUtils.runOnUiThreadBlocking(() -> { String title = ThreadUtils.runOnUiThreadBlocking(() -> {
return TabUtils.getActivity(tab).getString( return TabUtils.getActivity(tab).getString(
AppBannerManager.getHomescreenLanguageOption(tab).titleTextId); AppBannerManager.getHomescreenLanguageOption(tab.getWebContents()).titleTextId);
}); });
return title; 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