Expand description
HTML パーサ・レイアウトエンジン・レンダラ(ブラウザエンジン本体)。
WebEngine が HTML 文字列を受け取り、パース → CSS カスケード → レイアウト →
描画までの一連のパイプラインを提供する。JavaScript 実行は crate::os_lib::js へ、
ネットワーク取得は crate::kernel::net_stack へ委譲する。
アーキテクチャ詳細(コンポーネント構成・タブモデル・座標規約・テーブルレイアウト等)は
spec/DESIGN.md §3「ブラウザエンジン アーキテクチャ」を参照。
暴走ページ対策として MAX_RENDER_ELEMENTS(要素数上限)と MAX_HTML_BYTES
(HTML サイズ上限)で打ち切る。
Modules§
- alpha_
blend 🔒 - アルファ合成(Simple alpha compositing / source-over)。
- anim_
budget 🔒 - アニメーション由来の再レイアウトを、実測コストに応じて間引くための予算判定。
- backdrop 🔒
- 文字の下地色(グリフのアンチエイリアスの縁を合成する色)の決定(純粋ロジック)。
- bilinear 🔒
- バイリニア画像サンプリング(描画パイプラインの純粋補間計算)。
- blur_
box 🔒 - ボックスブラーの高速実装(累積和による厳密な等価変換)。
- box_
shadow 🔒 box-shadowの解析と、ぼかしの濃度(純粋モジュール)。- cache 🔒
- cache_
path 🔒 - キャッシュのファイル名を組み立てる(純粋モジュール)。
- clip_
path 🔒 - CSS
clip-path解析および内外判定・幾何計算モジュール。 - css_
filters 🔒 - CSS
filterプロパティの解析およびピクセル色変換ロジック。 W3C CSS Filter Effects Module Level 1 準拠。 - css_
units 🔒 - doc_
title 🔒 - 文書タイトル(
<title>)の抽出(純粋ロジック)。 - draw_
helpers 🔒 - duckduckgo
- fetch_
limit 🔒 - リソース取得の同時実行を種別横断で制御する。
- font_
budget 🔒 - Web フォント取得の可否判定(描画をブロックしないための予算)。
- font_
gamma - グリフ被覆率(アルファ)のガンマ・コントラスト補正。
- font_
queue 🔒 - フォント取得の非同期キュー(レンダリングをブロックしない)。
- frames 🔒
- iframe の入れ子の文書(子フレーム)。
- gradient_
lut 🔒 linear-gradientのラスタライズ補助(LUT の段数決定と軸判定)。- helpers 🔒
- iframe_
preview 🔒 <iframe>の代替表示(純粋モジュール): 埋め込み先 HTML の OGP からタイトル・説明・画像を読む。- image 🔒
- image_
budget 🔒 - 画像取得・デコードの予算判定(描画をブロックしないため)。
- layout 🔒
- media_
controls - 音声・動画メディア要素(
- omnibox
- osm_
embed 🔒 - OpenStreetMap 埋め込み(
<iframe src="https://www.openstreetmap.org/export/embed.html?bbox=..&marker=..">) を、タイル画像を並べて描くための計算(純粋モジュール)。 - paint_
cull 🔒 - 要素がフレームのどこへ描かれるか、そして描かれるかどうかの判定(純粋関数)。
- paint_
order 🔒 - 描画順(スタッキング順)の算出。
- paint_
update 🔒 - DOM インラインスタイル変更の軽量再ペイント(PaintOnly)判定。
- perf 🔒
- ページ読み込み経路の軽量プロファイラ。
- queue_
batch 🔒 - 取得待ち行列から「まとめ取得する分」を選ぶ判定(純粋モジュール)。
- referrer 🔒
- 参照元(
Refererヘッダ・document.referrer)の値を決める。 - rel_
path 🔒 - HTML 属性の相対パス解決(純粋モジュール)。
- render 🔒
- repaint_
scope 🔒 - アニメーション/トランジションで変化したプロパティが、 再レイアウトを要するか / 再ペイントだけで足りるかの判定。
- scrollbar 🔒
- W3C CSS Scrollbars Module Level 1
- selection
- selection_
style - CSS
::selection疑似要素のスタイル解決モジュール。 - sticky 🔒
position: stickyの描画 Y 座標計算(純粋モジュール)。- text_
align 🔒 - 折り返した段落の行揃え(
text-align)の計算(純粋ロジック)。 - text_
ellipsis 🔒 - W3C CSS text-overflow: ellipsis 純粋計算モジュール
- url_
resolve 🔒 - video 🔒
- video_
fit 🔒 <video>のフレームを要素の箱へ収める計算(object-fit: contain。純粋関数)。- youtube
Structs§
- Async
Load 🔒Request - Async
Load 🔒State - 全タブ共有の非同期ロードキュー。owner ID で各タブの結果を分離する。
- Decoded
Image - Gradient
Stop - Hyperlink
Area - Linear
Gradient - Radial
Gradient - Render
Element - Scrollbar
Color - CSS
scrollbar-colorの色ペア (thumb, track) - WebEngine
Enums§
- BgRepeat
Mode - CSS
background-repeatの1軸ぶんのモード。 - BgSize
Mode - CSS
background-sizeのモード。 - BgSize
Val - CSS
background-sizeの1軸ぶんの値。 - Border
Style - CSS
border-styleの値。RenderElement は要素あたり最大 5 個(全体 + 4辺)保持するため、 String(24バイト)ではなく 1 バイトの enum にしてメモリを節約する。 - Clip
Shape - CssFilter
- List
Style Type - CSS
list-style-typeの値。同じ理由で String の代わりに enum を使う。 - Object
Fit - CSS
object-fit(要素の内容フィッティング)。
- Radial
Shape - Scrollbar
Color Mode - Scrollbar
Width - CSS
scrollbar-widthの設定値
Constants§
- DEFAULT_
ELLIPSIS - 既定の省略記号(HORIZONTAL ELLIPSIS: U+2026)
- HOME_
HTML - ブラウザ内蔵のホームページ(OS 同梱 of 静的ページ)。 YouTubeへのリンクは、DNS解決フォールバックやYouTubeモック解除の修正に伴い、 ダミーURLではなく公式のYouTubeアドレスに設定されています。
- MAX_
HTML_ 🔒BYTES - パース対象 HTML の上限バイト数。これを超える分は切り捨てる。
- MAX_
RENDER_ 🔒ELEMENTS - flatten 時に生成する RenderElement の上限。病的なページでのヒープ枯渇を防ぐ。 1 要素あたり数百バイト程度なので、2 万要素でも十数 MB に収まる。
Statics§
- ASYNC_
LOAD 🔒 - NEXT_
ENGINE_ 🔒ID - SVG_
BACK 🔒 - SVG_
HOME 🔒 - SVG_
LOAD 🔒 - SVG_
SAVE 🔒 - SVG_
SHIELD_ 🔒SECURE - SVG_
SHIELD_ 🔒WARN - SVG_
WRAP 🔒
Functions§
- apply_
css_ filters - grayscale/brightness/invert/sepia/contrast/saturate/hue-rotate を順に適用する。
- apply_
css_ filters_ argb - 0xAARRGGBB 形式の色に
apply_css_filtersを適用する(アルファは不変)。 - async_
load_ 🔒thread_ entry - clear_
browser_ cache - /cache/browser/ 以下の全キャッシュを削除する
- clip_
inside - Returns
trueif point(ox, oy)in element-local pixels is inside the clip shape. 計算量: O(V) — V は多角形の頂点数(polygon()の場合)。 円・楕円・矩形は O(1)。 - clip_
len - clip_
len_ with_ font - clip_
pos - clip_
pos_ with_ font - draw_
border - draw_
gradation - font_
pending - 取得待ちのフォント件数。再描画の判定から使う。
- hash_
str - image_
results_ ready - デコード完了した画像が「取り込み待ち」で存在するか(エッジトリガ再描画用)。 旧実装は pending/thread_active も見ていたため、画像のロード待ちの間ずっと 全画面再描画が走り続け(画面が波打つ)原因になっていた。 完了結果がある時だけ true を返すことで、完了ごとに1回だけ再描画する。
- key_
name_ 🔒for - 非印字キーの keycode を DOM の
KeyboardEvent.key風の名前に変換する。 - number_
to_ alpha - 1始まりの序数を A, B, … Z, AA, AB, … の26進表記に変換する(
upper-alpha/lower-alpha)。 - number_
to_ roman - 1〜3999 の序数をローマ数字表記に変換する(
upper-roman/lower-roman)。範囲外は十進数にフォールバック。 - parse_
blur_ radius filter文字列からblur(Npx)の半径を px 単位で抽出する(無ければ 0)。 パフォーマンス上の理由で半径は 1〜8px にクランプする簡略実装。- parse_
clip_ shape - Parse CSS
clip-pathvalue into pixel coordinates relative to the element.wandhare the element’s rendered width and height in pixels. - parse_
clip_ shape_ with_ font - Parse CSS
clip-pathvalue with element font size for resolvingemunits. - parse_
filter_ tokens - CSS
filterの1関数トークン(例 “grayscale(1)”)を (種別文字列, 引数) にパースする。 引数省略時は 1.0(各フィルタの完全適用値)とする。%サフィックスは 0-1 に正規化。 - parse_
scrollbar_ color - CSS
scrollbar-colorプロパティをパースする。autoまたは<thumb-color> <track-color>。不正値は None を返す。 - parse_
url 🔒 - parse_
url_ 🔒scheme - point_
in_ rounded_ rect - set_
draw_ stage - shared_
image srcからデコード済み画像を引く。無ければNone。- split_
scrollbar_ color_ tokens - 括弧ネスト(
rgb(...),rgba(...),hsl(...)等)を考慮して空白区切りで2つのカラートークンに分割する。 仕様上<thumb-color> <track-color>の2トークンちょうどでなければならない。 - truncate_
text_ ellipsis - テキストを与えられた利用可能幅に収まるよう、ellipsis(…)を付加して切り詰める(純粋関数)。
- url_
encode