;; -*- geiser-scheme: chicken -*- (import (r7rs)) (import (scheme base)) (import (srfi 180)) (import (srfi 99)) (import coops) (import (chicken process)) (import intarweb) (import http-client) (define-class () (url stdout stdin stderr pid)) (define-method (terminate (browser )) (process-signal (slot-value browser 'pid))) (define-method (initialize-instance (browser )) (call-next-method) (set-finalizer! browser (lambda (obj) (terminate browser)))) (define-method (send (browser ) struct #!key to path using method) (with-input-from-request (make-request method: method uri: (uri-reference (string-append (slot-value browser 'url) path)) headers: (headers `((content-type application/json)))) (lambda () (json-write struct)) json-read)) (define-class ()) (define (firefox #!key ip ip port port) (let-values (((stdout stdin pid stderr) (process* "geckodriver"))) (make url: (string-append "http://" (or ip "127.0.0.1") ":" (or port "4444") "/") stdout: stdout stdin: stdin stderr: stderr pid: pid)))