12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_TEST_CHROMEDRIVER_CHROME_STATUS_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_TEST_CHROMEDRIVER_CHROME_STATUS_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// WebDriver standard status codes.
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)enum StatusCode {
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kOk = 0,
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  kNoSuchSession = 6,
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kNoSuchElement = 7,
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  kNoSuchFrame = 8,
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kUnknownCommand = 9,
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kStaleElementReference = 10,
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kElementNotVisible = 11,
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kInvalidElementState = 12,
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kUnknownError = 13,
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kJavaScriptError = 17,
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kXPathLookupError = 19,
23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  kTimeout = 21,
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kNoSuchWindow = 23,
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kInvalidCookieDomain = 24,
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kUnexpectedAlertOpen = 26,
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kNoAlertOpen = 27,
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kScriptTimeout = 28,
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kInvalidSelector = 32,
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kSessionNotCreatedException = 33,
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Chrome-specific status codes.
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  kChromeNotReachable = 100,
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  kNoSuchExecutionContext,
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  kDisconnected,
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  kForbidden = 103,
3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  kTabCrashed,
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Represents a WebDriver status, which may be an error or ok.
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Status {
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit Status(StatusCode code);
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Status(StatusCode code, const std::string& details);
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Status(StatusCode code, const Status& cause);
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Status(StatusCode code, const std::string& details, const Status& cause);
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ~Status();
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddDetails(const std::string& details);
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool IsOk() const;
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool IsError() const;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StatusCode code() const;
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const std::string& message() const;
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StatusCode code_;
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string msg_;
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CHROME_TEST_CHROMEDRIVER_CHROME_STATUS_H_
63