Remove error when a transcluding binding is not found.

The child's binding may be optional, in which case it's fine if the parent doesn't have it defined either. We can't actually determine whether the child's binding is optional here, so don't always report an error. We'll get a missing binding error at the child's bind time if a transcluding binding is missing.

PiperOrigin-RevId: 270117819
Change-Id: I8ae4b19287af72e6aaee96a4ce930bb1ebd8e234
diff --git a/src/main/java/com/google/android/libraries/feed/piet/FrameContext.java b/src/main/java/com/google/android/libraries/feed/piet/FrameContext.java
index fb66ea3..2ff8f9f 100644
--- a/src/main/java/com/google/android/libraries/feed/piet/FrameContext.java
+++ b/src/main/java/com/google/android/libraries/feed/piet/FrameContext.java
@@ -580,14 +580,7 @@
       if (bindingValue.hasBindingIdFromTranscludingTemplate()) {
         BindingValue parentBindingValue =
             bindingValues.get(bindingValue.getBindingIdFromTranscludingTemplate());
-        if (parentBindingValue == null) {
-          reportMessage(
-              MessageType.ERROR,
-              ERR_MISSING_BINDING_VALUE,
-              String.format(
-                  "Parent binding value '%s' not found",
-                  bindingValue.getBindingIdFromTranscludingTemplate()));
-        } else {
+        if (parentBindingValue != null) {
           BindingValue bindingValueForChild =
               parentBindingValue.toBuilder().setBindingId(bindingValue.getBindingId()).build();
           bindingValueMap.put(bindingValue.getBindingId(), bindingValueForChild);
diff --git a/src/test/java/com/google/android/libraries/feed/piet/BUILD b/src/test/java/com/google/android/libraries/feed/piet/BUILD
index 8286476..0216b48 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/BUILD
+++ b/src/test/java/com/google/android/libraries/feed/piet/BUILD
@@ -202,7 +202,6 @@
         "//src/main/java/com/google/android/libraries/feed/common/ui",
         "//src/main/java/com/google/android/libraries/feed/piet",
         "//src/main/java/com/google/android/libraries/feed/piet/host",
-        "//src/main/proto/search/now/ui/piet:piet_errors_java_proto_lite",
         "//src/main/proto/search/now/ui/piet:piet_java_proto_lite",
         "//third_party:robolectric",
         "@com_google_protobuf_javalite//:protobuf_java_lite",
diff --git a/src/test/java/com/google/android/libraries/feed/piet/FrameContextTest.java b/src/test/java/com/google/android/libraries/feed/piet/FrameContextTest.java
index 2a3dca5..fad47ab 100644
--- a/src/test/java/com/google/android/libraries/feed/piet/FrameContextTest.java
+++ b/src/test/java/com/google/android/libraries/feed/piet/FrameContextTest.java
@@ -25,7 +25,6 @@
 import android.widget.FrameLayout;
 import com.google.android.libraries.feed.api.host.config.DebugBehavior;
 import com.google.android.libraries.feed.common.ui.LayoutUtils;
-import com.google.android.libraries.feed.piet.DebugLogger.ErrorCodeAndMessage;
 import com.google.android.libraries.feed.piet.DebugLogger.MessageType;
 import com.google.android.libraries.feed.piet.PietStylesHelper.PietStylesHelperFactory;
 import com.google.android.libraries.feed.piet.host.ActionHandler;
@@ -53,7 +52,6 @@
 import com.google.search.now.ui.piet.ElementsProto.TemplateInvocation;
 import com.google.search.now.ui.piet.ElementsProto.TextElement;
 import com.google.search.now.ui.piet.ElementsProto.Visibility;
-import com.google.search.now.ui.piet.ErrorsProto.ErrorCode;
 import com.google.search.now.ui.piet.GradientsProto.ColorStop;
 import com.google.search.now.ui.piet.GradientsProto.Fill;
 import com.google.search.now.ui.piet.GradientsProto.LinearGradient;
@@ -375,11 +373,7 @@
                         .setBindingIdFromTranscludingTemplate(invalidParentBindingId))
                 .build());
 
-    assertThat(debugLogger.getMessages(MessageType.ERROR))
-        .containsExactly(
-            new ErrorCodeAndMessage(
-                ErrorCode.ERR_MISSING_BINDING_VALUE,
-                "[] Parent binding value 'NOT_FOUND' not found"));
+    assertThat(debugLogger.getMessages(MessageType.ERROR)).isEmpty();
     assertThatRunnable(() -> childContext.getParameterizedTextBindingValue(childTextBindingRef))
         .throwsAnExceptionOfType(PietFatalException.class)
         .that()
@@ -388,6 +382,37 @@
   }
 
   @Test
+  public void testCreateTemplateContext_optionalTranscludingBindingNotFound() {
+    String invalidParentBindingId = "NOT_FOUND";
+    String childBindingId = "CHILD";
+    ParameterizedTextBindingRef childTextBindingRef =
+        ParameterizedTextBindingRef.newBuilder()
+            .setBindingId(childBindingId)
+            .setIsOptional(true)
+            .build();
+    frameContext = makeFrameContextWithNoBindings();
+    FrameContext childContext =
+        frameContext.createTemplateContext(
+            Template.newBuilder()
+                .setElement(
+                    Element.newBuilder()
+                        .setTextElement(
+                            TextElement.newBuilder()
+                                .setParameterizedTextBinding(childTextBindingRef)))
+                .build(),
+            BindingContext.newBuilder()
+                .addBindingValues(
+                    BindingValue.newBuilder()
+                        .setBindingId(childBindingId)
+                        .setBindingIdFromTranscludingTemplate(invalidParentBindingId))
+                .build());
+
+    assertThat(debugLogger.getMessages(MessageType.ERROR)).isEmpty();
+    assertThat(childContext.getParameterizedTextBindingValue(childTextBindingRef))
+        .isEqualTo(BindingValue.getDefaultInstance());
+  }
+
+  @Test
   public void testMakeStyleFor() {
     frameContext = defaultFrameContext();