335d22d376
There's no need to put the error variables in a larger scope, nor define them earlier than necessary. If anything, it makes the code harder to follow, such as figuring out when nil errors are returned.
59 lines
1.6 KiB
Go
59 lines
1.6 KiB
Go
package chromedp
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/knq/chromedp/cdp"
|
|
)
|
|
|
|
// Action is the common interface for an action that will be executed against a
|
|
// context and frame handler.
|
|
type Action interface {
|
|
// Do executes the action using the provided context and frame handler.
|
|
Do(context.Context, cdp.Handler) error
|
|
}
|
|
|
|
// ActionFunc is a adapter to allow the use of ordinary func's as an Action.
|
|
type ActionFunc func(context.Context, cdp.Handler) error
|
|
|
|
// Do executes the func f using the provided context and frame handler.
|
|
func (f ActionFunc) Do(ctxt context.Context, h cdp.Handler) error {
|
|
return f(ctxt, h)
|
|
}
|
|
|
|
// Tasks is a sequential list of Actions that can be used as a single Action.
|
|
type Tasks []Action
|
|
|
|
// Do executes the list of Actions sequentially, using the provided context and
|
|
// frame handler.
|
|
func (t Tasks) Do(ctxt context.Context, h cdp.Handler) error {
|
|
// TODO: put individual task timeouts from context here
|
|
for _, a := range t {
|
|
// ctxt, cancel = context.WithTimeout(ctxt, timeout)
|
|
// defer cancel()
|
|
if err := a.Do(ctxt, h); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Sleep is an empty action that calls time.Sleep with the specified duration.
|
|
//
|
|
// Note: this is a temporary action definition for convenience, and will likely
|
|
// be marked for deprecation in the future, after the remaining Actions have
|
|
// been able to be written/tested.
|
|
func Sleep(d time.Duration) Action {
|
|
return ActionFunc(func(ctxt context.Context, h cdp.Handler) error {
|
|
select {
|
|
case <-time.After(d):
|
|
|
|
case <-ctxt.Done():
|
|
return ctxt.Err()
|
|
}
|
|
return nil
|
|
})
|
|
}
|