79 lines
1.9 KiB
Go
79 lines
1.9 KiB
Go
package playwright
|
|
|
|
type workerImpl struct {
|
|
channelOwner
|
|
page *pageImpl
|
|
context *browserContextImpl
|
|
}
|
|
|
|
func (w *workerImpl) URL() string {
|
|
return w.initializer["url"].(string)
|
|
}
|
|
|
|
func (w *workerImpl) Evaluate(expression string, options ...interface{}) (interface{}, error) {
|
|
var arg interface{}
|
|
if len(options) == 1 {
|
|
arg = options[0]
|
|
}
|
|
result, err := w.channel.Send("evaluateExpression", map[string]interface{}{
|
|
"expression": expression,
|
|
"arg": serializeArgument(arg),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return parseResult(result), nil
|
|
}
|
|
|
|
func (w *workerImpl) EvaluateHandle(expression string, options ...interface{}) (JSHandle, error) {
|
|
var arg interface{}
|
|
if len(options) == 1 {
|
|
arg = options[0]
|
|
}
|
|
result, err := w.channel.Send("evaluateExpressionHandle", map[string]interface{}{
|
|
"expression": expression,
|
|
"arg": serializeArgument(arg),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return fromChannel(result).(*jsHandleImpl), nil
|
|
}
|
|
|
|
func (w *workerImpl) onClose() {
|
|
if w.page != nil {
|
|
w.page.Lock()
|
|
workers := make([]Worker, 0)
|
|
for i := 0; i < len(w.page.workers); i++ {
|
|
if w.page.workers[i] != w {
|
|
workers = append(workers, w.page.workers[i])
|
|
}
|
|
}
|
|
w.page.workers = workers
|
|
w.page.Unlock()
|
|
}
|
|
if w.context != nil {
|
|
w.context.Lock()
|
|
workers := make([]Worker, 0)
|
|
for i := 0; i < len(w.context.serviceWorkers); i++ {
|
|
if w.context.serviceWorkers[i] != w {
|
|
workers = append(workers, w.context.serviceWorkers[i])
|
|
}
|
|
}
|
|
w.context.serviceWorkers = workers
|
|
w.context.Unlock()
|
|
}
|
|
w.Emit("close", w)
|
|
}
|
|
|
|
func (w *workerImpl) OnClose(fn func(Worker)) {
|
|
w.On("close", fn)
|
|
}
|
|
|
|
func newWorker(parent *channelOwner, objectType string, guid string, initializer map[string]interface{}) *workerImpl {
|
|
bt := &workerImpl{}
|
|
bt.createChannelOwner(bt, parent, objectType, guid, initializer)
|
|
bt.channel.On("close", bt.onClose)
|
|
return bt
|
|
}
|