blob: f1831bda09403e311a028dd0481cdb60944555a6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/test/webdriver/webdriver_error.h"
#include <sstream>
namespace webdriver {
namespace {
// Returns the string equivalent of the given |ErrorCode|.
const char* DefaultMessageForErrorCode(ErrorCode code) {
switch (code) {
case kSuccess:
return "Success";
case kNoSuchElement:
return "The element could not be found";
case kNoSuchFrame:
return "The frame could not be found";
case kUnknownCommand:
return "Unknown command";
case kStaleElementReference:
return "Element reference is invalid";
case kElementNotVisible:
return "Element is not visible";
case kInvalidElementState:
return "Element is in an invalid state";
case kUnknownError:
return "Unknown error";
case kElementNotSelectable:
return "Element is not selectable";
case kXPathLookupError:
return "XPath lookup error";
case kNoSuchWindow:
return "The window could not be found";
case kInvalidCookieDomain:
return "The cookie domain is invalid";
case kUnableToSetCookie:
return "Unable to set cookie";
default:
return "<unknown>";
}
}
} // namespace
Error::Error(ErrorCode code): code_(code) {
}
Error::Error(ErrorCode code, const std::string& details)
: code_(code), details_(details) {
}
Error::~Error() {
}
void Error::AddDetails(const std::string& details) {
if (details_.empty())
details_ = details;
else
details_ = details + ";\n " + details_;
}
std::string Error::GetErrorMessage() const {
std::string msg;
if (details_.length())
msg = details_;
else
msg = DefaultMessageForErrorCode(code_);
// Only include a stacktrace on Linux. Windows and Mac have all symbols
// stripped in release builds.
#if defined(OS_LINUX)
size_t count = 0;
trace_.Addresses(&count);
if (count > 0) {
std::ostringstream ostream;
trace_.OutputToStream(&ostream);
msg += "\n";
msg += ostream.str();
}
#endif
return msg;
}
ErrorCode Error::code() const {
return code_;
}
const std::string& Error::details() const {
return details_;
}
const base::debug::StackTrace& Error::trace() const {
return trace_;
}
} // namespace webdriver
|