Skip to main content

Module web_engine

Module web_engine 

Source
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§

AsyncLoadRequest 🔒
AsyncLoadState 🔒
全タブ共有の非同期ロードキュー。owner ID で各タブの結果を分離する。
DecodedImage
GradientStop
HyperlinkArea
LinearGradient
RadialGradient
RenderElement
ScrollbarColor
CSS scrollbar-color の色ペア (thumb, track)
WebEngine

Enums§

BgRepeatMode
CSS background-repeat の1軸ぶんのモード。
BgSizeMode
CSS background-size のモード。
BgSizeVal
CSS background-size の1軸ぶんの値。
BorderStyle
CSS border-style の値。RenderElement は要素あたり最大 5 個(全体 + 4辺)保持するため、 String(24バイト)ではなく 1 バイトの enum にしてメモリを節約する。
ClipShape
CssFilter
ListStyleType
CSS list-style-type の値。同じ理由で String の代わりに enum を使う。
ObjectFit
CSS object-fit( 要素の内容フィッティング)。
RadialShape
ScrollbarColorMode
ScrollbarWidth
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 true if 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-path value into pixel coordinates relative to the element. w and h are the element’s rendered width and height in pixels.
parse_clip_shape_with_font
Parse CSS clip-path value with element font size for resolving em units.
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