func ProviderFunc()

in go/wtl/proxy/driverhub/scripttimeout/script_timeout.go [30:109]


func ProviderFunc(session *driverhub.WebDriverSession, _ *capabilities.Capabilities, base driverhub.HandlerFunc) (driverhub.HandlerFunc, bool) {
	return func(ctx context.Context, rq driverhub.Request) (driverhub.Response, error) {

		if rq.Method == http.MethodPost && len(rq.Path) == 1 && rq.Path[0] == "timeouts" {
			var request map[string]interface{}

			if err := json.Unmarshal(rq.Body, &request); err != nil {
				return base(ctx, rq)
			}

			if timeout, ok := request["script"].(int); ok {
				if err := session.WebDriver.SetScriptTimeout(ctx, time.Duration(timeout)*time.Millisecond); err == nil {
					delete(request, "script")
				}
			}

			if timeout, ok := request["script"].(float64); ok {
				if err := session.WebDriver.SetScriptTimeout(ctx, time.Duration(timeout)*time.Millisecond); err == nil {
					delete(request, "script")
				}
			}

			if t, ok := request["type"].(string); ok && t == "script" {
				if timeout, ok := request["ms"].(int); ok {
					if err := session.WebDriver.SetScriptTimeout(ctx, time.Duration(timeout)*time.Millisecond); err == nil {
						delete(request, "ms")
						delete(request, "type")
					}
				}

				if timeout, ok := request["ms"].(float64); ok {
					if err := session.WebDriver.SetScriptTimeout(ctx, time.Duration(timeout)*time.Millisecond); err == nil {
						delete(request, "ms")
						delete(request, "type")
					}
				}
			}

			if len(request) == 0 {
				return driverhub.Response{
					Status: http.StatusOK,
					Body:   []byte(`{"status": 0}`),
				}, nil
			}

			body, err := json.Marshal(request)
			if err == nil {
				rq.Body = body
			}
		}

		if rq.Method == http.MethodPost && len(rq.Path) == 2 && rq.Path[0] == "timeouts" && rq.Path[1] == "async_script" {
			var request map[string]interface{}

			if err := json.Unmarshal(rq.Body, &request); err != nil {
				return base(ctx, rq)
			}

			if timeout, ok := request["ms"].(int); ok {
				if err := session.WebDriver.SetScriptTimeout(ctx, time.Duration(timeout)*time.Millisecond); err == nil {
					return driverhub.Response{
						Status: http.StatusOK,
						Body:   []byte(`{"status": 0}`),
					}, nil
				}
			}

			if timeout, ok := request["ms"].(float64); ok {
				if err := session.WebDriver.SetScriptTimeout(ctx, time.Duration(timeout)*time.Millisecond); err == nil {
					return driverhub.Response{
						Status: http.StatusOK,
						Body:   []byte(`{"status": 0}`),
					}, nil
				}
			}
		}

		return base(ctx, rq)
	}, true
}