[Messaging] Hide favicon for non-tab messages

This CL hides the favicon view for messages that aren't tab related.
This ensures that there isn't any leftover from recycling a view.

Bug: 397505413
Change-Id: I4a41c065c3dff1efdd960e05fd8ed72de3616447
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6282448
Reviewed-by: Calder Kitagawa <ckitagawa@chromium.org>
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1422544}
diff --git a/chrome/browser/data_sharing/android/java/src/org/chromium/chrome/browser/data_sharing/ui/recent_activity/RecentActivityListMediator.java b/chrome/browser/data_sharing/android/java/src/org/chromium/chrome/browser/data_sharing/ui/recent_activity/RecentActivityListMediator.java
index 7b1eff6..989feab5 100644
--- a/chrome/browser/data_sharing/android/java/src/org/chromium/chrome/browser/data_sharing/ui/recent_activity/RecentActivityListMediator.java
+++ b/chrome/browser/data_sharing/android/java/src/org/chromium/chrome/browser/data_sharing/ui/recent_activity/RecentActivityListMediator.java
@@ -124,14 +124,15 @@
                     descriptionAndTimestamp);
 
             // Set favicon provider if favicon should be shown.
+            Callback<ImageView> faviconCallback = null;
             if (logItem.showFavicon) {
                 GURL tabUrl = new GURL(getTabLastKnownUrl(logItem));
-                Callback<ImageView> faviconCallback =
+                faviconCallback =
                         faviconView -> {
                             mFaviconProvider.fetchFavicon(tabUrl, faviconView::setImageDrawable);
                         };
-                propertyModel.set(RecentActivityListProperties.FAVICON_PROVIDER, faviconCallback);
             }
+            propertyModel.set(RecentActivityListProperties.FAVICON_PROVIDER, faviconCallback);
 
             // Set avatar provider.
             Callback<ImageView> avatarCallback =
diff --git a/chrome/browser/data_sharing/android/java/src/org/chromium/chrome/browser/data_sharing/ui/recent_activity/RecentActivityListViewBinder.java b/chrome/browser/data_sharing/android/java/src/org/chromium/chrome/browser/data_sharing/ui/recent_activity/RecentActivityListViewBinder.java
index de5fd8a..9328224 100644
--- a/chrome/browser/data_sharing/android/java/src/org/chromium/chrome/browser/data_sharing/ui/recent_activity/RecentActivityListViewBinder.java
+++ b/chrome/browser/data_sharing/android/java/src/org/chromium/chrome/browser/data_sharing/ui/recent_activity/RecentActivityListViewBinder.java
@@ -16,6 +16,7 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import org.chromium.base.Callback;
 import org.chromium.ui.modelutil.PropertyKey;
 import org.chromium.ui.modelutil.PropertyModel;
 
@@ -38,9 +39,14 @@
         } else if (ON_CLICK_LISTENER == propertyKey) {
             view.setOnClickListener(model.get(ON_CLICK_LISTENER));
         } else if (FAVICON_PROVIDER == propertyKey) {
+            Callback faviconProvider = model.get(FAVICON_PROVIDER);
             ImageView faviconView = view.findViewById(R.id.favicon);
-            faviconView.setImageDrawable(null);
-            model.get(FAVICON_PROVIDER).onResult(faviconView);
+            if (faviconProvider == null) {
+                faviconView.setVisibility(View.GONE);
+            } else {
+                faviconView.setImageDrawable(null);
+                faviconProvider.onResult(faviconView);
+            }
         } else if (AVATAR_PROVIDER == propertyKey) {
             ImageView avatarView = view.findViewById(R.id.avatar);
             avatarView.setImageDrawable(null);
diff --git a/chrome/browser/data_sharing/android/java/src/org/chromium/chrome/browser/data_sharing/ui/recent_activity/RecentActivityListViewBinderUnitTest.java b/chrome/browser/data_sharing/android/java/src/org/chromium/chrome/browser/data_sharing/ui/recent_activity/RecentActivityListViewBinderUnitTest.java
index a6e63b82a2e..83d6cbf 100644
--- a/chrome/browser/data_sharing/android/java/src/org/chromium/chrome/browser/data_sharing/ui/recent_activity/RecentActivityListViewBinderUnitTest.java
+++ b/chrome/browser/data_sharing/android/java/src/org/chromium/chrome/browser/data_sharing/ui/recent_activity/RecentActivityListViewBinderUnitTest.java
@@ -15,6 +15,7 @@
 import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.text.TextPaint;
+import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.widget.ImageView;
@@ -119,6 +120,13 @@
     }
 
     @Test
+    public void testFavicon_nullProvider() {
+        mPropertyModel.set(RecentActivityListProperties.FAVICON_PROVIDER, null);
+        InOrder inOrder = Mockito.inOrder(mFaviconView);
+        inOrder.verify(mFaviconView).setVisibility(eq(View.GONE));
+    }
+
+    @Test
     public void testAvatar() {
         mPropertyModel.set(
                 RecentActivityListProperties.AVATAR_PROVIDER,