Save Data API は、データ節約に関するユーザーの設定についての情報に Web アプリケーションが アクセスできるようにします。
## 要件とユースケース この文書は、特定の要件に対応する API を記述します。その要件とは、JS API と Client Hint の両方を通じて、 データ節約に関するユーザーの設定を伝達することです。 **ユースケースの例:** * 主な目的がメディアのストリーミングである Web アプリケーションは、ユーザーがデータ通信費の削減に 関心を持っている場合、高度に圧縮されたメディアコンテンツを提供できます。 * 背景動画をユーザーに提示する Web アプリケーションは、ユーザーの設定に基づいて、代わりに背景画像を 使用することを選択できます。 ## NavigatorNetworkInformation インターフェイス NetworkInformation インターフェイスは、 NetworkInformationSaveData をミックスインすることで saveData へのアクセスを公開します。
  interface mixin NetworkInformationSaveData {
    [SameObject] readonly attribute boolean saveData;
  };

  NetworkInformation includes NetworkInformationSaveData;
### saveData 属性 saveData 属性は、取得時に、ユーザーがユーザーエージェントに対してデータ使用量を削減するモードを 要求している場合は `true` を返し、それ以外の場合は `false` を返します。

ユーザーエージェントによって利用可能にされている場合、ユーザーは、高いデータ転送コスト、 低速な接続速度、またはその他の理由により、そのような設定を有効にすることがあります。

#### Save-Data リクエストヘッダーフィールド SaveData リクエストヘッダーは Client Hint [[CLIENT-HINTS]] です。このヘッダーの値は、 ユーザーエージェントがデータ使用量の削減を優先することを示す `token` を含む `sh-list` [[STRUCTURED-HEADERS]] です。
    Save-Data = sh-list
  
この仕様は "`on`" `token` 値を定義します。これは、データ使用量削減モードへの明示的なユーザーの オプトインを示すシグナルとして使用されます(すなわち saveData の値が `true` の場合)。また、 オリジンに伝達されると、その設定を尊重した代替コンテンツ、たとえばより小さな画像および動画リソース、 代替マークアップなどを配信できるようにします。 リスト内に複数の競合するトークンがある場合、最後のトークンが優先されます。
TODO: Fetch#fetching アルゴリズムを更新し、 Save-Data ヘッダーを追加するシグナルとして `connection.saveData` を使用するようにする。
### ユーザー設定の変更の処理 ユーザーの saveData 設定が変更された場合、ユーザーエージェントは ユーザー設定を更新する 手順を実行しなければなりません(MUST)。 1. new-saveData を現在の saveData 設定とする。 1. new-saveData が `connection.saveData` の値と等しくない場合: 1. ネットワーキングタスクソースを使用して、次を実行するためのタスクをキューに入れる: 1. `connection.saveData` を new-saveData に設定する。 1. `NetworkInformation` オブジェクトで `change` という名前のイベントを発火する
## プライバシーに関する考慮事項 この仕様は、ユーザーの設定に関する情報を公開します。これはユーザーについての少量の情報であり、 アクティブなフィンガープリンティングのベクトルとして使用される可能性があります。 この仕様を実装するユーザーエージェントは、そのことを認識し、特定の状況でこの機能を有効にするかどうかを 判断する際に、それを考慮する必要があります。 たとえば、ユーザーがプライベートブラウジングモードにいる場合、ユーザーエージェントはユーザーの設定を 省略したり、偽ったりすることを決定することがあります。
## IANA に関する考慮事項 次の 3 つの HTTP リクエストヘッダーフィールドは、HTTP/1.1 [[RFC7231]] によって示されるガイドラインを 考慮に入れたうえで、メッセージヘッダーフィールドの恒久的レジストリに追加されるべきです ([[RFC3864]] を参照)。
### `Save-Data` リクエストヘッダーフィールド登録 * ヘッダーフィールド名: Save-Data * 適用可能なプロトコル: Hypertext Transfer Protocol (HTTP) * ステータス: 標準 * 著者/変更管理者: W3C * 仕様文書: W3C TR https://www.w3.org/TR/netinfo/
## ポリシー制御機能 この文書は、[=policy-controlled client hints features=] を次の [=policy-controlled features=] で拡張します: * `ch-save-data`。これはデフォルトの許可リストとして `*` を持ちます
この仕様への適合を主張できる製品クラスは 1 つだけです。それは ユーザーエージェントです。
## 謝辞 この文書は、[[HTML]] 仕様のライセンスで許可されるとおり、 その仕様からのテキストを再利用しています。