As mentioned in https://bugs.chromium.org/p/chromium/issues/detail?id=809190#c16, both sequence<DOMString> and sequence<DOMString?> (as well as ByteString and USVString) are represented as Vector<String> in C++. Similarly, record<..., DOMString> and record<..., DOMString?> are both represented as Vector<std::pair<String, String>>.
This is problematic in the sequence<DOMString?> (and record<..., DOMString?>) case, as we want an empty WTF::String() in the vector to turn into null, not '' when ToV8() converts the Vector into JavaScript.
git-grepping for 'sequence<\(DOM\|Byte\|USV\)String?>' only returns a couple of matches in our test IDL files, so no actual spec implementation seems to be affected at the moment.
Comment 1 by yukishiino@chromium.org
, Feb 13 2018