in go/wtl/proxy/driverhub/driver_session.go [219:285]
func (s *WebDriverSession) defaultHandler(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
vars := mux.Vars(r)
pathTokens := s.commandPathTokens(r.URL.Path)
s.mu.Lock()
stopped := s.stopped
s.mu.Unlock()
if stopped {
invalidSessionID(w, vars["sessionID"])
return
}
body, err := ioutil.ReadAll(r.Body)
if err != nil {
unknownError(w, err)
return
}
req := Request{
Method: r.Method,
Path: pathTokens,
Header: r.Header,
Body: body,
}
resp, err := s.handler(ctx, req)
if err != nil {
if ctx.Err() == context.Canceled {
log.Printf("[%s] request %+v was canceled.", s.Name(), req)
return
}
if ctx.Err() == context.DeadlineExceeded {
s.Warning(errors.New(s.Name(), fmt.Errorf("request %+v exceeded deadline", req)))
timeout(w, r.URL.Path)
return
}
s.Severe(errors.New(s.Name(), err))
unknownError(w, err)
return
}
if len(resp.Body) != 0 {
w.Header().Set("Content-Type", contentType)
}
if resp.Header != nil {
// Copy response headers from resp to w
for k, vs := range resp.Header {
w.Header().Del(k)
for _, v := range vs {
w.Header().Add(k, v)
}
}
}
// TODO(fisherii): needed to play nice with Dart Sync WebDriver. Delete when Dart Sync WebDriver is deleted.
w.Header().Set("Transfer-Encoding", "identity")
w.Header().Set("Content-Length", strconv.Itoa(len(resp.Body)))
httphelper.SetDefaultResponseHeaders(w.Header())
// Copy status code from resp to w
w.WriteHeader(resp.Status)
// Write body from resp to w
w.Write(resp.Body)
}