Commit b666ef16 authored by Mei Liang's avatar Mei Liang Committed by Commit Bot

[svelte] Show the domain of the tab

This CL modifies the list tab card item to show the domain of the tab's
URL, and falls back to show the full URL if no domain associated with
the URL of the tab.

Change-Id: Idd508f46e62a53ae47a8ce90ec4e2ef424a58664
Bug: 1042890
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2133428Reviewed-by: default avatarWei-Yin Chen (陳威尹) <wychen@chromium.org>
Commit-Queue: Mei Liang <meiliang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#756953}
parent d76ad2d6
......@@ -392,7 +392,7 @@ class TabListMediator {
}
if (index == TabModel.INVALID_TAB_INDEX) return;
mModel.get(index).model.set(TabProperties.URL, getUrlForTab(tab));
mModel.get(index).model.set(TabProperties.URL_DOMAIN, getDomainForTab(tab));
}
};
......@@ -1000,7 +1000,7 @@ class TabListMediator {
mModel.get(index).model.set(TabProperties.TAB_SELECTED_LISTENER, tabSelectedListener);
mModel.get(index).model.set(TabProperties.IS_SELECTED, isSelected);
mModel.get(index).model.set(TabProperties.TITLE, getLatestTitleForTab(tab));
mModel.get(index).model.set(TabProperties.URL, getUrlForTab(tab));
mModel.get(index).model.set(TabProperties.URL_DOMAIN, getDomainForTab(tab));
if (TabUiFeatureUtilities.ENABLE_SEARCH_CHIP.getValue() && mUiType == UiType.CLOSABLE) {
mModel.get(index).model.set(TabProperties.SEARCH_QUERY, getLastSearchTerm(tab));
......@@ -1182,7 +1182,7 @@ class TabListMediator {
new PropertyModel.Builder(TabProperties.ALL_KEYS_TAB_GRID)
.with(TabProperties.TAB_ID, tab.getId())
.with(TabProperties.TITLE, getLatestTitleForTab(tab))
.with(TabProperties.URL, getUrlForTab(tab))
.with(TabProperties.URL_DOMAIN, getDomainForTab(tab))
.with(TabProperties.FAVICON,
mTabListFaviconProvider.getDefaultFaviconDrawable(
tab.isIncognito()))
......@@ -1275,26 +1275,27 @@ class TabListMediator {
return iconDrawableId;
}
private String getUrlForTab(Tab tab) {
private String getDomainForTab(Tab tab) {
if (!TabUiFeatureUtilities.isTabGroupsAndroidContinuationEnabled()) return "";
if (!mActionsOnAllRelatedTabs) return tab.getUrlString();
if (!mActionsOnAllRelatedTabs) return getDomain(tab);
List<Tab> relatedTabs = getRelatedTabsForId(tab.getId());
if (relatedTabs.size() == 1) return tab.getUrlString();
StringBuilder builder = new StringBuilder();
// TODO(1024925): Address i18n issue for the list separator.
String separator = ", ";
for (int i = 0; i < relatedTabs.size(); i++) {
String domain =
UrlUtilities.getDomainAndRegistry(relatedTabs.get(i).getUrlString(), false);
if (!domain.isEmpty()) {
builder.append(domain);
List<String> domainNames = new ArrayList<>();
if (i < relatedTabs.size() - 1) builder.append(separator);
}
for (int i = 0; i < relatedTabs.size(); i++) {
String domain = getDomain(relatedTabs.get(i));
domainNames.add(domain);
}
return builder.toString();
// TODO(1024925): Address i18n issue for the list delimiter.
return TextUtils.join(", ", domainNames);
}
private String getDomain(Tab tab) {
String domain = UrlUtilities.getDomainAndRegistry(tab.getUrlString(), false);
if (domain.isEmpty()) return tab.getUrlString();
return domain;
}
@Nullable
......
......@@ -71,9 +71,9 @@ class TabListViewBinder {
int tabId = model.get(TabProperties.TAB_ID);
model.get(TabProperties.TAB_SELECTED_LISTENER).run(tabId);
});
} else if (TabProperties.URL == propertyKey) {
String title = model.get(TabProperties.URL);
((TextView) fastView.findViewById(R.id.description)).setText(title);
} else if (TabProperties.URL_DOMAIN == propertyKey) {
String domain = model.get(TabProperties.URL_DOMAIN);
((TextView) fastView.findViewById(R.id.description)).setText(domain);
}
}
......
......@@ -93,7 +93,8 @@ public class TabProperties {
SELECTABLE_TAB_ACTION_BUTTON_SELECTED_BACKGROUND =
new PropertyModel.WritableObjectPropertyKey<>();
public static final WritableObjectPropertyKey<String> URL = new WritableObjectPropertyKey<>();
public static final WritableObjectPropertyKey<String> URL_DOMAIN =
new WritableObjectPropertyKey<>();
public static final PropertyModel
.WritableObjectPropertyKey<AccessibilityDelegate> ACCESSIBILITY_DELEGATE =
......@@ -114,7 +115,7 @@ public class TabProperties {
CARD_ANIMATION_STATUS, SELECTABLE_TAB_CLICKED_LISTENER, TAB_SELECTION_DELEGATE,
IS_INCOGNITO, SELECTED_TAB_BACKGROUND_DRAWABLE_ID, TABSTRIP_FAVICON_BACKGROUND_COLOR_ID,
SELECTABLE_TAB_ACTION_BUTTON_BACKGROUND,
SELECTABLE_TAB_ACTION_BUTTON_SELECTED_BACKGROUND, URL, ACCESSIBILITY_DELEGATE,
SELECTABLE_TAB_ACTION_BUTTON_SELECTED_BACKGROUND, URL_DOMAIN, ACCESSIBILITY_DELEGATE,
SEARCH_QUERY, SEARCH_LISTENER, SEARCH_CHIP_ICON_DRAWABLE_ID, CARD_TYPE};
public static final PropertyKey[] ALL_KEYS_TAB_STRIP =
......
......@@ -1409,27 +1409,31 @@ public class TabListMediatorUnitTest {
@Features.DisableFeatures({TAB_GROUPS_ANDROID})
public void testUrlUpdated_forSingleTab_GTS_GroupNotEnabled() {
initAndAssertAllProperties();
assertNotEquals(NEW_URL, mModel.get(POSITION1).model.get(TabProperties.URL));
assertNotEquals(NEW_DOMAIN, mModel.get(POSITION1).model.get(TabProperties.URL_DOMAIN));
doReturn(NEW_URL).when(mTab1).getUrlString();
mTabObserverCaptor.getValue().onUrlUpdated(mTab1);
// TabProperties.URL is empty string if TabGroupsAndroidContinuationEnabled is false.
assertEquals("", mModel.get(POSITION1).model.get(TabProperties.URL));
assertEquals("", mModel.get(POSITION2).model.get(TabProperties.URL));
// TabProperties.URL_DOMAIN is empty string if TabGroupsAndroidContinuationEnabled is false.
assertEquals("", mModel.get(POSITION1).model.get(TabProperties.URL_DOMAIN));
assertEquals("", mModel.get(POSITION2).model.get(TabProperties.URL_DOMAIN));
}
@Test
@Features.EnableFeatures({TAB_GROUPS_CONTINUATION_ANDROID})
public void testUrlUpdated_forSingleTab_GTS() {
setUpForTabGroupOperation(TabListMediatorType.TAB_SWITCHER);
assertNotEquals(NEW_URL, mModel.get(POSITION1).model.get(TabProperties.URL));
assertNotEquals(NEW_DOMAIN, mModel.get(POSITION1).model.get(TabProperties.URL_DOMAIN));
doReturn(NEW_DOMAIN)
.when(mUrlUtilitiesJniMock)
.getDomainAndRegistry(eq(NEW_URL), anyBoolean());
doReturn(NEW_URL).when(mTab1).getUrlString();
mTabObserverCaptor.getValue().onUrlUpdated(mTab1);
assertEquals(NEW_URL, mModel.get(POSITION1).model.get(TabProperties.URL));
assertEquals(TAB2_URL, mModel.get(POSITION2).model.get(TabProperties.URL));
assertEquals(NEW_DOMAIN, mModel.get(POSITION1).model.get(TabProperties.URL_DOMAIN));
assertEquals(TAB2_DOMAIN, mModel.get(POSITION2).model.get(TabProperties.URL_DOMAIN));
}
@Test
......@@ -1443,25 +1447,25 @@ public class TabListMediatorUnitTest {
mMediatorTabGroupModelFilterObserver.didMergeTabToGroup(mTab2, TAB1_ID);
assertEquals(TAB1_DOMAIN + ", " + TAB2_DOMAIN,
mModel.get(POSITION1).model.get(TabProperties.URL));
mModel.get(POSITION1).model.get(TabProperties.URL_DOMAIN));
doReturn(NEW_DOMAIN)
.when(mUrlUtilitiesJniMock)
.getDomainAndRegistry(eq(NEW_URL), anyBoolean());
// Update URL for mTab1.
// Update URL_DOMAIN for mTab1.
doReturn(NEW_URL).when(mTab1).getUrlString();
mTabObserverCaptor.getValue().onUrlUpdated(mTab1);
assertEquals(NEW_DOMAIN + ", " + TAB2_DOMAIN,
mModel.get(POSITION1).model.get(TabProperties.URL));
mModel.get(POSITION1).model.get(TabProperties.URL_DOMAIN));
// Update URL for mTab2.
// Update URL_DOMAIN for mTab2.
doReturn(NEW_URL).when(mTab2).getUrlString();
mTabObserverCaptor.getValue().onUrlUpdated(mTab2);
assertEquals(
NEW_DOMAIN + ", " + NEW_DOMAIN, mModel.get(POSITION1).model.get(TabProperties.URL));
assertEquals(NEW_DOMAIN + ", " + NEW_DOMAIN,
mModel.get(POSITION1).model.get(TabProperties.URL_DOMAIN));
}
@Test
......@@ -1474,26 +1478,26 @@ public class TabListMediatorUnitTest {
doReturn(POSITION1).when(mTabGroupModelFilter).indexOf(mTab2);
mMediatorTabGroupModelFilterObserver.didMergeTabToGroup(mTab2, TAB1_ID);
assertEquals(TAB1_URL, mModel.get(POSITION1).model.get(TabProperties.URL));
assertEquals(TAB2_URL, mModel.get(POSITION2).model.get(TabProperties.URL));
assertEquals(TAB1_DOMAIN, mModel.get(POSITION1).model.get(TabProperties.URL_DOMAIN));
assertEquals(TAB2_DOMAIN, mModel.get(POSITION2).model.get(TabProperties.URL_DOMAIN));
doReturn(NEW_DOMAIN)
.when(mUrlUtilitiesJniMock)
.getDomainAndRegistry(eq(NEW_URL), anyBoolean());
// Update URL for mTab1.
// Update URL_DOMAIN for mTab1.
doReturn(NEW_URL).when(mTab1).getUrlString();
mTabObserverCaptor.getValue().onUrlUpdated(mTab1);
assertEquals(NEW_URL, mModel.get(POSITION1).model.get(TabProperties.URL));
assertEquals(TAB2_URL, mModel.get(POSITION2).model.get(TabProperties.URL));
assertEquals(NEW_DOMAIN, mModel.get(POSITION1).model.get(TabProperties.URL_DOMAIN));
assertEquals(TAB2_DOMAIN, mModel.get(POSITION2).model.get(TabProperties.URL_DOMAIN));
// Update URL for mTab2.
// Update URL_DOMAIN for mTab2.
doReturn(NEW_URL).when(mTab2).getUrlString();
mTabObserverCaptor.getValue().onUrlUpdated(mTab2);
assertEquals(NEW_URL, mModel.get(POSITION1).model.get(TabProperties.URL));
assertEquals(NEW_URL, mModel.get(POSITION2).model.get(TabProperties.URL));
assertEquals(NEW_DOMAIN, mModel.get(POSITION1).model.get(TabProperties.URL_DOMAIN));
assertEquals(NEW_DOMAIN, mModel.get(POSITION2).model.get(TabProperties.URL_DOMAIN));
}
@Test
......@@ -1505,7 +1509,7 @@ public class TabListMediatorUnitTest {
mMediatorTabGroupModelFilterObserver.didMergeTabToGroup(mTab2, TAB1_ID);
assertEquals(TAB1_DOMAIN + ", " + TAB2_DOMAIN,
mModel.get(POSITION1).model.get(TabProperties.URL));
mModel.get(POSITION1).model.get(TabProperties.URL_DOMAIN));
// Assume that TabGroupModelFilter is already updated.
when(mTabGroupModelFilter.getRelatedTabList(TAB1_ID)).thenReturn(Arrays.asList(mTab1));
......@@ -1515,8 +1519,8 @@ public class TabListMediatorUnitTest {
doReturn(2).when(mTabGroupModelFilter).getCount();
mMediatorTabGroupModelFilterObserver.didMoveTabOutOfGroup(mTab2, POSITION1);
assertEquals(TAB1_URL, mModel.get(POSITION1).model.get(TabProperties.URL));
assertEquals(TAB2_URL, mModel.get(POSITION2).model.get(TabProperties.URL));
assertEquals(TAB1_DOMAIN, mModel.get(POSITION1).model.get(TabProperties.URL_DOMAIN));
assertEquals(TAB2_DOMAIN, mModel.get(POSITION2).model.get(TabProperties.URL_DOMAIN));
}
@Test
......
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