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