///|
fn Browser::apply_html_source(
self : Browser,
html : String,
parse_fallback : Bool,
) -> Unit {
self.source_html = html
let has_declarative_shadow_dom = html_source_has_declarative_shadow_dom(html)
match
normalize_declarative_shadow_source_html_with_hint(
html, has_declarative_shadow_dom,
) {
Some(normalized) => {
self.html_content = normalized.render_html
self.dom_snapshot_html = normalized.snapshot_html
self.parsed_doc = Some(normalized.parsed_doc)
self.html_has_declarative_shadow_dom = false
}
None => {
self.html_content = html
self.dom_snapshot_html = html
self.parsed_doc = if parse_fallback {
Some(
@html.assign_synthetic_ids(@html.parse_document(self.html_content)),
)
} else {
None
}
self.html_has_declarative_shadow_dom = has_declarative_shadow_dom
}
}
}
///|
fn Browser::ensure_parsed_content_document(self : Browser) -> Unit {
match self.parsed_doc {
Some(_) => ()
None => {
let doc = @html.assign_synthetic_ids(
@html.parse_document(self.html_content),
)
self.parsed_doc = Some(doc)
}
}
}
///|
fn Browser::reset_content_view_position(self : Browser) -> Unit {
self.focused_link = 0
self.scroll_y = 0
self.clear_element_scroll_states()
}
///|
fn Browser::reset_content_derived_state(self : Browser) -> Unit {
self.clear_render_cache()
self.reset_content_measurement_state()
}
///|
fn Browser::reset_content_measurement_state(self : Browser) -> Unit {
self.content_height = 0
self.a11y_tree = None
self.focus_manager = None
}
///|
/// Set HTML content directly (for testing or headless rendering).
pub fn Browser::set_html_content(self : Browser, html : String) -> Unit {
self.apply_html_source(html, true)
self.refresh_links_from_render_source()
self.reset_content_view_position()
self.reset_content_derived_state()
self.dom_tree = None
self.script_executor = None
}