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)#include "chrome/test/chromedriver/chrome/status.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Returns the string equivalent of the given |ErrorCode|. 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* DefaultMessageForStatusCode(StatusCode code) { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switch (code) { 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kOk: 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "ok"; 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case kNoSuchSession: 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return "no such session"; 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kNoSuchElement: 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "no such element"; 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case kNoSuchFrame: 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return "no such frame"; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kUnknownCommand: 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "unknown command"; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kStaleElementReference: 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "stale element reference"; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kElementNotVisible: 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "element not visible"; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kInvalidElementState: 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "invalid element state"; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kUnknownError: 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "unknown error"; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kJavaScriptError: 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "javascript error"; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kXPathLookupError: 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "xpath lookup error"; 36868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) case kTimeout: 37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return "timeout"; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kNoSuchWindow: 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "no such window"; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kInvalidCookieDomain: 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "invalid cookie domain"; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kUnexpectedAlertOpen: 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "unexpected alert open"; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kNoAlertOpen: 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "no alert open"; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kScriptTimeout: 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "asynchronous script timeout"; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kInvalidSelector: 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "invalid selector"; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kSessionNotCreatedException: 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "session not created exception"; 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case kNoSuchExecutionContext: 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return "no such execution context"; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kChromeNotReachable: 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "chrome not reachable"; 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case kDisconnected: 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "disconnected"; 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) case kForbidden: 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return "forbidden"; 6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) case kTabCrashed: 6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return "tab crashed"; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default: 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "<unknown>"; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Status::Status(StatusCode code) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : code_(code), msg_(DefaultMessageForStatusCode(code)) {} 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Status::Status(StatusCode code, const std::string& details) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : code_(code), 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) msg_(DefaultMessageForStatusCode(code) + std::string(": ") + details) { 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Status::Status(StatusCode code, const Status& cause) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : code_(code), 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) msg_(DefaultMessageForStatusCode(code) + std::string("\nfrom ") + 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cause.message()) {} 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Status::Status(StatusCode code, 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& details, 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Status& cause) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : code_(code), 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) msg_(DefaultMessageForStatusCode(code) + std::string(": ") + details + 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\nfrom " + cause.message()) { 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Status::~Status() {} 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void Status::AddDetails(const std::string& details) { 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) msg_ += base::StringPrintf("\n (%s)", details.c_str()); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool Status::IsOk() const { 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return code_ == kOk; 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool Status::IsError() const { 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return code_ != kOk; 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)StatusCode Status::code() const { 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return code_; 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const std::string& Status::message() const { 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return msg_; 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 111