module DEBUGGER__::UI_CDP
def setup_chrome addr, uuid
def setup_chrome addr, uuid return if CONFIG[:chrome_path] == '' port, path, pid = run_new_chrome begin s = Socket.tcp '127.0.0.1', port rescue Errno::ECONNREFUSED, Errno::EADDRNOTAVAIL return end ws_client = WebSocketClient.new(s) ws_client.handshake port, path ws_client.send id: 1, method: 'Target.getTargets' loop do res = ws_client.extract_data case res['id'] when 1 target_info = res.dig('result', 'targetInfos') page = target_info.find{|t| t['type'] == 'page'} ws_client.send id: 2, method: 'Target.attachToTarget', params: { targetId: page['targetId'], flatten: true } when 2 s_id = res.dig('result', 'sessionId') # TODO: change id ws_client.send sessionId: s_id, id: 100, method: 'Network.enable' ws_client.send sessionId: s_id, id: 3, method: 'Page.enable' when 3 s_id = res['sessionId'] ws_client.send sessionId: s_id, id: 4, method: 'Page.getFrameTree' when 4 s_id = res['sessionId'] f_id = res.dig('result', 'frameTree', 'frame', 'id') ws_client.send sessionId: s_id, id: 5, method: 'Page.navigate', params: { url: "devtools://devtools/bundled/inspector.html?v8only=true&panel=sources&ws=#{addr}/#{uuid}", frameId: f_id } when 101 break else if res['method'] == 'Network.webSocketWillSendHandshakeRequest' s_id = res['sessionId'] # Display the console by entering ESC key ws_client.send sessionId: s_id, id: 101, # TODO: change id method:"Input.dispatchKeyEvent", params: { type:"keyDown", windowsVirtualKeyCode:27 # ESC key } end end end pid rescue Errno::ENOENT, UnsupportedError, NotFoundChromeEndpointError nil end