[1] [DFN[[RUBYB[セッション履歴イベントループ]@en[session history event loop]]]]は、
[[セッション履歴]]を扱う特別な[[イベントループ]]です。

* 仕様書

[REFS[
- [127] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2013-09-25 20:51:31 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#session-history-traversal-queue>
]REFS]

* セッション履歴探索キュー

[129] [[最上位閲覧文脈]]はそれぞれ[DFN[[RUBYB[[[セッション履歴探索キュー]]]@en[session history traversal queue]]]]を持ちます
[SRC[>>127]]。これは通常の[[イベントループ]]における[[タスクキュー]]の役割を果たしますが、
ここに追加され得る[[タスク]]は [[traverse the history by a delta]] のもの (つまり履歴移動が発生した時のもの)
だけです。

[130] [[最上位閲覧文脈]]が作られた時点では[[セッション履歴探索キュー]]は空です [SRC[>>127]]。

* セッション履歴イベントループ

[2] [[最上位閲覧文脈]]が作成されたら、[[並列]]に[[セッション履歴イベントループ]]を実行しなければ[['''なりません''']] [SRC[>>127]]。

[3] [[セッション履歴イベントループ]]は、[[セッション履歴探索キュー]]が空で無くなると、
先頭の[[タスク]]を取り出して実行する、という処理を繰り返さなければ[['''なりません''']] [SRC[>>127]]。

[4] [[セッション履歴イベントループ]]は、[[最上位閲覧文脈]]が破棄された時停止します。

;; [134] [[イベントループ]]は複数存在することがあり、その場合履歴の操作が発生すると[[イベントループ]]間で同期操作が必要になってしまいます。
[[セッション履歴イベントループ]]はこれを避けるために導入されました [SRC[>>137]]。
[[イベントループ]]が全体で1つしかない実装では、[[セッション履歴イベントループ]]も必要なく単一の[[イベントループ]]で処理できます。

* 歴史

[137] [[セッション履歴イベントループ]]は[[イベントループ]]が複数ある環境での履歴操作を記述するために2013年9月に導入されました。

[REFS[
-[125] [CITE[IRC logs: freenode / #whatwg / 20130923]]
( ([TIME[2013-09-24 20:37:19 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20130923>
-[135] [CITE[IRC logs: freenode / #whatwg / 20130924]] ([TIME[2013-09-26 00:00:06 +09:00]] 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20130924#l-748>
-[136] [CITE@en[Web Applications 1.0 r8199     Session history traversal in a multi-process world. I have no idea what I'm doing.]] ([TIME[2013-09-26 05:51:00 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=8198&to=8199>
- [138] [CITE['''['''whatwg''']''' Navigation and history traversal issues]] ([TIME[2013-09-25 23:23:38 +09:00]] 版) <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-September/040888.html>
]REFS]
