[fuzzers] Fix WGPUStringView in LPM fuzzer gen code.

- Update how we handle LPM fuzzer code generation with the new
  WGPUStringView

Bug: 42241188
Change-Id: I9e7552bbd38e3701ea38a2cb047f748a4a29b51e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/200076
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Loko Kung <lokokung@google.com>
diff --git a/generator/templates/dawn/fuzzers/lpmfuzz/DawnLPMSerializer.cpp b/generator/templates/dawn/fuzzers/lpmfuzz/DawnLPMSerializer.cpp
index 3645c8b..f544e19 100644
--- a/generator/templates/dawn/fuzzers/lpmfuzz/DawnLPMSerializer.cpp
+++ b/generator/templates/dawn/fuzzers/lpmfuzz/DawnLPMSerializer.cpp
@@ -56,9 +56,33 @@
     {{as_cType(member.type.name)}}
 {%- endmacro %}
 
+//* Converts an existing proto string to StringView.
+{% macro convert_string(member) %}
+    {{ assert(member.type.name.get() == "string view" or member.type.name.get() == "nullable string view" ) }}
+    {% set memberName = as_varName(member.name) %}
+    {% set protoMember = as_protobufMemberName(member.name) %}
+    {% if member.type.name.get() == "nullable string view" %}
+        if (!proto_record.has_{{protoMember}}()) {
+            mutable_record->{{ memberName }}.data = nullptr;
+            mutable_record->{{ memberName }}.length = SIZE_MAX;
+        } else
+    {% endif %}
+        {
+            auto memberLength = static_cast<unsigned int>({{member_length(member, "proto_record." + protoMember)}});
+            char* memberBuffer;
+            WIRE_TRY(serializeBuffer->NextN(memberLength, &memberBuffer));
+            memcpy(memberBuffer, proto_record.{{protoMember}}().c_str(), memberLength);
+            mutable_record->{{ memberName }}.data = memberBuffer;
+            mutable_record->{{ memberName }}.length = memberLength;
+        }
+{% endmacro %}
+
 //* Outputs the conversion code to put `in` in `out`
 {% macro convert_member(member, in, out, in_access="") %}
-    {% if member.type.category == "structure" or member.type.category == "callback info" %}
+    {% if member.type.name.get() == "string view" or member.type.name.get() == "nullable string view" %}
+        //* Custom conversion for string view types.
+        {{ convert_string(member) }}
+    {% elif member.type.category == "structure" or member.type.category == "callback info" %}
         {{ convert_structure(member, in, out, in_access) }}
     {% elif member.type in by_category["bitmask"] %}
         {{ convert_bitmask(member, in, out, in_access) }}
@@ -250,9 +274,11 @@
 
 //* Output structure conversion first because it is used by commands.
 {% for type in by_category["callback info"] + by_category["structure"] %}
-    {% set name = as_cType(type.name) %}
-    {% if type.name.CamelCase() not in client_side_structures %}
-        {{ write_record_conversion_helpers(type, name, type.members, False) }}
+    {% if type.name.get() != "string view" and type.name.get() != "nullable string view" %}
+        {% set name = as_cType(type.name) %}
+        {% if type.name.CamelCase() not in client_side_structures %}
+            {{ write_record_conversion_helpers(type, name, type.members, False) }}
+        {% endif %}
     {% endif %}
 {% endfor %}
 
diff --git a/generator/templates/dawn/fuzzers/lpmfuzz/dawn_lpm.proto b/generator/templates/dawn/fuzzers/lpmfuzz/dawn_lpm.proto
index ed62d84..cc21bba 100644
--- a/generator/templates/dawn/fuzzers/lpmfuzz/dawn_lpm.proto
+++ b/generator/templates/dawn/fuzzers/lpmfuzz/dawn_lpm.proto
@@ -127,6 +127,10 @@
     {% elif member.type.name.get() == "ObjectId" %}
         {{ optionality(member) }}  {{ lift_objectid_member(member, count) }} = {{ count.value }};
         {% set count.value = count.value + 1 %}
+    {% elif member.type.name.get() == "string view" %}
+        required string {{ as_protobufNameLPM(member.name) }} = {{ count.value }};
+    {% elif member.type.name.get() == "nullable string view" %}
+        optional string {{ as_protobufNameLPM(member.name) }} = {{ count.value }};
     {% elif member.type in by_category["structure"] or
        member.type in by_category["enum"] %}
         {{ optionality(member) }}  {{ as_protobufTypeLPM(member) }} {{ as_protobufNameLPM(member.name) }} = {{ count.value }};
@@ -174,9 +178,11 @@
 {% endmacro %}
 
 {% for structure in by_category["callback info"] + by_category["structure"] %}
-    message {{structure.name.CamelCase()}} {
-        {{ lift_proto_members_helper(structure, structure.name, structure.members) }}
-    }
+    {% if structure.name.get() != "string view" and structure.name.get() != "nullable string view" %}
+        message {{structure.name.CamelCase()}} {
+            {{ lift_proto_members_helper(structure, structure.name, structure.members) }}
+        }
+    {% endif %}
 {% endfor %}