Class: Browserctl::CommandDispatcher

Inherits:
Object
  • Object
show all
Includes:
Handlers::Cookies, Handlers::DaemonControl, Handlers::DevTools, Handlers::Hitl, Handlers::Interaction, Handlers::Navigation, Handlers::Observation, Handlers::PageLifecycle, Handlers::Session, Handlers::Storage
Defined in:
lib/browserctl/server/handlers/hitl.rb,
lib/browserctl/server/handlers/cookies.rb,
lib/browserctl/server/handlers/session.rb,
lib/browserctl/server/handlers/storage.rb,
lib/browserctl/server/handlers/devtools.rb,
lib/browserctl/server/command_dispatcher.rb,
lib/browserctl/server/handlers/navigation.rb,
lib/browserctl/server/handlers/interaction.rb,
lib/browserctl/server/handlers/observation.rb,
lib/browserctl/server/handlers/daemon_control.rb,
lib/browserctl/server/handlers/page_lifecycle.rb

Defined Under Namespace

Modules: Handlers

Constant Summary collapse

COMMAND_MAP =
{
  "page_open" => :cmd_page_open,
  "page_close" => :cmd_page_close,
  "page_list" => :cmd_page_list,
  "page_focus" => :cmd_page_focus,
  "navigate" => :cmd_navigate,
  "wait" => :cmd_wait,
  "snapshot" => :cmd_snapshot,
  "evaluate" => :cmd_evaluate,
  "fill" => :cmd_fill,
  "click" => :cmd_click,
  "screenshot" => :cmd_screenshot,
  "url" => :cmd_url,
  "ping" => :cmd_ping,
  "shutdown" => :cmd_shutdown,
  "pause" => :cmd_pause,
  "resume" => :cmd_resume,
  "devtools" => :cmd_devtools,
  "cookies" => :cmd_cookies,
  "set_cookie" => :cmd_set_cookie,
  "delete_cookies" => :cmd_delete_cookies,
  "import_cookies" => :cmd_import_cookies,
  "store" => :cmd_store,
  "fetch" => :cmd_fetch,
  "storage_get" => :cmd_storage_get,
  "storage_set" => :cmd_storage_set,
  "storage_export" => :cmd_storage_export,
  "storage_import" => :cmd_storage_import,
  "storage_delete" => :cmd_storage_delete,
  "press" => :cmd_press,
  "hover" => :cmd_hover,
  "upload" => :cmd_upload,
  "select" => :cmd_select,
  "dialog_accept" => :cmd_dialog_accept,
  "dialog_dismiss" => :cmd_dialog_dismiss,
  "session_save" => :cmd_session_save,
  "session_load" => :cmd_session_load,
  "session_list" => :cmd_session_list,
  "session_delete" => :cmd_session_delete
}.freeze
SCREENSHOT_DIR =
File.expand_path("~/.browserctl/screenshots").freeze
SCREENSHOT_ROOTS =
[SCREENSHOT_DIR, File.expand_path(".")].freeze
SCREENSHOT_EXTS =
%w[.png .jpg .jpeg].freeze

Instance Method Summary collapse

Constructor Details

#initialize(pages, browser, snapshot_builder = SnapshotBuilder.new, global_mutex: Mutex.new) ⇒ CommandDispatcher

Returns a new instance of CommandDispatcher.



76
77
78
79
80
81
82
83
# File 'lib/browserctl/server/command_dispatcher.rb', line 76

def initialize(pages, browser, snapshot_builder = SnapshotBuilder.new, global_mutex: Mutex.new)
  @pages            = pages
  @browser          = browser
  @snapshot_builder = snapshot_builder
  @global_mutex     = global_mutex
  @kv_store         = {}
  @kv_mutex         = Mutex.new
end

Instance Method Details

#dispatch(req) ⇒ Hash{Symbol => Object}

Dispatches a parsed request to the appropriate handler. Returns ‘{ error: String, code: String }` for unknown commands.

Parameters:

  • req (Hash{Symbol => Object})

    parsed request; must include ‘:cmd`

Returns:

  • (Hash{Symbol => Object})

    response; always includes ‘:ok` or `:error`



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/browserctl/server/command_dispatcher.rb', line 89

def dispatch(req)
  handler = COMMAND_MAP[req[:cmd]]
  if handler
    Browserctl.logger.debug("#{req[:cmd]} #{req[:name]}")
    return send(handler, req)
  end

  if (plugin = Browserctl.lookup_plugin_command(req[:cmd]))
    Browserctl.logger.debug("plugin:#{req[:cmd]} #{req[:name]}")
    session = req[:name] ? @global_mutex.synchronize { @pages[req[:name]] } : nil
    return plugin.call(session, req)
  end

  { error: "unknown command: #{req[:cmd]}" }
end