let handle_network_response_event
(Net_connection(d, n): net_connection) (resp: resp) (b: b)
: state * output_event list =
begin match net_connection_domain_nth d n b with
| None ->
(Waiting({ waiting_state = b }), [])
| Some((uri, dst)) ->
let b' = net_connection_domain_remove_nth d n b in
let b'1 = upd_cookies d uri resp b' in
begin match (dst, resp.resp_body) with
| (Xhr_dst(pr, v), Script_file(e)) when page_win pr b'1 <> None ->
let wr =
begin match page_win pr b'1 with
| Some(wr) -> wr
| None -> assert false
end
in
let t = {
task_win = wr;
task_expr = Apply(X(R(v)), X(R(Code_value(e))));
} in
let r = {
running_state = b'1;
running_task_queue = [ t ];
} in
(Running(r), [])
| (Doc_dst(wr), Html_file(docs)) when win_valid wr b'1 ->
let uw = win_to_user_window wr b'1 in
let w = win_assoc_valid wr b'1 in
let b'2 = page_remove w.win_page b'1 in
let (dr, node_ext) = build_node_tree (Div(None, docs)) in
let b'3 = {
b'2 with
browser_nodes = b'2.browser_nodes @ node_ext
} in
let (w', b'4) =
build_win
w.win_name (Http_url(d, uri)) w.win_opener (Some(dr)) b'3
in
let b'5 = win_update wr w' b'4 in
let rd_opt = render_page w'.win_page b'4 in
let oe = UI_page_loaded_event(uw, Http_url(d, uri), rd_opt) in
let (b'6, oes1, ts) = process_node_scripts w'.win_page dr b'5 in
let r = {
running_state = b'6;
running_task_queue = ts;
} in
(Running(r), [ oe ] @ oes1)
| (Doc_dst(wr), _) when win_valid wr b'1 ->
let uw = win_to_user_window wr b'1 in
let w = win_assoc_valid wr b'1 in
let b'3 = page_remove w.win_page b'1 in
let (w', b'4) =
build_win w.win_name (Http_url(d, uri)) w.win_opener None b'3
in
let b'5 = win_update wr w' b'4 in
let rd_opt = render_page w'.win_page b'5 in
let oe = UI_page_loaded_event(uw, Http_url(d, uri), rd_opt) in
(Waiting({ waiting_state = b'5 }), [ oe ])
| (Script_dst(pr, dr), Script_file(e)) when page_win pr b'1 <> None ->
let wr =
begin match page_win pr b'1 with
| Some(wr) -> wr
| None -> assert false
end
in
let p = page_assoc_valid pr b'1 in
let q = p.page_script_queue in
let q' =
let upd p =
begin match p with
| Unknown_expr(dr1) when dr1 = dr -> Known_expr(to_inner_expr e)
| _ -> p
end
in
List.map upd q
in
let p' = { p with page_script_queue = q' } in
let b'2 = page_update pr p' b'1 in
let (ts, b'3) = get_ready_exprs wr b'2 in
let r = {
running_state = b'3;
running_task_queue = ts;
} in
(Running(r), [])
| _ ->
(Waiting({ waiting_state = b'1 }), [])
end
end