Class: Browserctl::CommandDispatcher

Inherits:
Object
  • Object
show all
Includes:
Handlers::Cookies, Handlers::DaemonControl, Handlers::Data, Handlers::DevTools, Handlers::ErrorPayload, Handlers::Hitl, Handlers::Interaction, Handlers::Navigation, Handlers::Observation, Handlers::PageLifecycle, Handlers::StateRpc, Handlers::Storage
Defined in:
lib/browserctl/server/handlers/data.rb,
lib/browserctl/server/handlers/hitl.rb,
lib/browserctl/server/handlers/state.rb,
lib/browserctl/server/handlers/cookies.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/error_payload.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,
  "auth_check" => :cmd_auth_check,
  "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,
  "data_get" => :cmd_data_get,
  "data_set" => :cmd_data_set,
  "data_delete" => :cmd_data_delete,
  "data_list" => :cmd_data_list,
  "press" => :cmd_press,
  "hover" => :cmd_hover,
  "upload" => :cmd_upload,
  "select" => :cmd_select,
  "dialog_accept" => :cmd_dialog_accept,
  "dialog_dismiss" => :cmd_dialog_dismiss,
  "state_save" => :cmd_state_save,
  "state_load" => :cmd_state_load,
  "state_list" => :cmd_state_list,
  "state_info" => :cmd_state_info,
  "state_delete" => :cmd_state_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

Constants included from Handlers::Data

Handlers::Data::VALID_SCOPES

Instance Method Summary collapse

Methods included from Handlers::ErrorPayload

#error_payload

Constructor Details

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

Returns a new instance of CommandDispatcher.



90
91
92
93
94
95
96
97
98
# File 'lib/browserctl/server/command_dispatcher.rb', line 90

def initialize(pages, driver, snapshot_builder = SnapshotBuilder.new, global_mutex: Mutex.new)
  @pages             = pages
  @driver            = driver
  @snapshot_builder  = snapshot_builder
  @global_mutex      = global_mutex
  @kv_store          = {}
  @kv_mutex          = Mutex.new
  @plugin_dispatcher = PluginDispatcher.new(@pages, global_mutex: @global_mutex)
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`



104
105
106
107
108
109
110
111
112
113
114
# File 'lib/browserctl/server/command_dispatcher.rb', line 104

def dispatch(req)
  Tracing.in_span("command.#{req[:cmd]}", attributes: { command: req[:cmd], page: req[:name] }) do
    builtin = dispatch_builtin(req)
    next builtin if builtin

    plugin = dispatch_plugin(req)
    next plugin if plugin

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