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