Home | History | Annotate | Download | only in chrome
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/test/chromedriver/chrome/status.h"
      6 
      7 #include "base/strings/stringprintf.h"
      8 
      9 namespace {
     10 
     11 // Returns the string equivalent of the given |ErrorCode|.
     12 const char* DefaultMessageForStatusCode(StatusCode code) {
     13   switch (code) {
     14     case kOk:
     15       return "ok";
     16     case kNoSuchSession:
     17       return "no such session";
     18     case kNoSuchElement:
     19       return "no such element";
     20     case kNoSuchFrame:
     21       return "no such frame";
     22     case kUnknownCommand:
     23       return "unknown command";
     24     case kStaleElementReference:
     25       return "stale element reference";
     26     case kElementNotVisible:
     27       return "element not visible";
     28     case kInvalidElementState:
     29       return "invalid element state";
     30     case kUnknownError:
     31       return "unknown error";
     32     case kJavaScriptError:
     33       return "javascript error";
     34     case kXPathLookupError:
     35       return "xpath lookup error";
     36     case kTimeout:
     37       return "timeout";
     38     case kNoSuchWindow:
     39       return "no such window";
     40     case kInvalidCookieDomain:
     41       return "invalid cookie domain";
     42     case kUnexpectedAlertOpen:
     43       return "unexpected alert open";
     44     case kNoAlertOpen:
     45       return "no alert open";
     46     case kScriptTimeout:
     47       return "asynchronous script timeout";
     48     case kInvalidSelector:
     49       return "invalid selector";
     50     case kSessionNotCreatedException:
     51       return "session not created exception";
     52     case kNoSuchExecutionContext:
     53       return "no such execution context";
     54     case kChromeNotReachable:
     55       return "chrome not reachable";
     56     case kDisconnected:
     57       return "disconnected";
     58     case kForbidden:
     59       return "forbidden";
     60     case kTabCrashed:
     61       return "tab crashed";
     62     default:
     63       return "<unknown>";
     64   }
     65 }
     66 
     67 }  // namespace
     68 
     69 Status::Status(StatusCode code)
     70     : code_(code), msg_(DefaultMessageForStatusCode(code)) {}
     71 
     72 Status::Status(StatusCode code, const std::string& details)
     73     : code_(code),
     74       msg_(DefaultMessageForStatusCode(code) + std::string(": ") + details) {
     75 }
     76 
     77 Status::Status(StatusCode code, const Status& cause)
     78     : code_(code),
     79       msg_(DefaultMessageForStatusCode(code) + std::string("\nfrom ") +
     80            cause.message()) {}
     81 
     82 Status::Status(StatusCode code,
     83                const std::string& details,
     84                const Status& cause)
     85     : code_(code),
     86       msg_(DefaultMessageForStatusCode(code) + std::string(": ") + details +
     87            "\nfrom " + cause.message()) {
     88 }
     89 
     90 Status::~Status() {}
     91 
     92 void Status::AddDetails(const std::string& details) {
     93   msg_ += base::StringPrintf("\n  (%s)", details.c_str());
     94 }
     95 
     96 bool Status::IsOk() const {
     97   return code_ == kOk;
     98 }
     99 
    100 bool Status::IsError() const {
    101   return code_ != kOk;
    102 }
    103 
    104 StatusCode Status::code() const {
    105   return code_;
    106 }
    107 
    108 const std::string& Status::message() const {
    109   return msg_;
    110 }
    111