Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Blob and File serialization steps drop the type attribute (all engines keep it; WPT asserts it)

オープン
#226 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
74/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
html, javascript
領域
web-dev

調査の方向性

Read the Blob and File serialization and deserialization sections in the File API specification, then inspect WPT's compare_Blob in html/webappapis/structured-clone/structured-clone-battery-of-tests.js. Update the four algorithms to preserve type and verify the structured-clone, postMessage, and IndexedDB cases pass.

索引モデルが issue の本文から書いたものです。

説明

The serialization and deserialization steps for Blob and File don't carry the type attribute, but every engine keeps it and WPT asserts it.

What the spec says

Blob's serialization steps set serialized.[[SnapshotState]] and serialized.[[ByteSequence]], and the deserialization steps restore only those two. File's steps add [[Name]] and [[LastModified]]. None of the four algorithms mentions type, so read literally:

structuredClone(new Blob(["x"], { type: "text/plain" })).type   // "" by the spec text
structuredClone(new File(["x"], "a.txt", { type: "text/plain" })).type   // "" by the spec text

The same holds for postMessage, history.pushState, and IndexedDB's StructuredSerializeForStorage.

What engines do

All three keep the type ("text/plain" above):

  • Blink: V8ScriptValueSerializer::WriteDOMObject writes the blob's uuid, type and size (kBlobTag), and File's type with its other fields.
  • WebKit: SerializedScriptValue.cpp: CloneSerializer writes blob->type() after the URL (BlobTag) and file.type() (FileTag), and readFile passes the type to File::deserialize.
  • Gecko: StructuredCloneHolder.cpp: WriteBlob keeps a reference to the BlobImpl (which holds the content type), and ReadBlob wraps the same impl, so the type carries over.
Tests

WPT's compare_Blob (html/webappapis/structured-clone/structured-clone-battery-of-tests.js) asserts actual.type === input.type for every cloned Blob and File, across the structured-clone, postMessage and IndexedDB variants.

Proposal
  • Blob serialization steps: add "Set serialized.[[Type]] to the value of value's type attribute."
  • Blob deserialization steps: add "Initialize the value of value's type attribute to serialized.[[Type]]."
  • File serialization and deserialization steps: the same two steps.

Possibly related: #98 (whether a clone copies or references the data), which doesn't cover type.

Found while implementing structured serialization for Blob and File in Crane, a web platform engine, which keeps the type as the engines do.

主要言語
HTML
スター
118
フォーク
52
PR マージ指標
30日以内にマージされた PR はありません

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

w3c/FileAPI のほかの issue

w3c/FileAPI の issue をすべて見る

似ている issue

Web Dev の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。