Skip to content

Commit 7b6b70d

Browse files
committed
added handling other custom commands (no session)
1 parent a344ed6 commit 7b6b70d

File tree

2 files changed

+35
-18
lines changed

2 files changed

+35
-18
lines changed

inc/webdriver_route_table.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,11 @@ class RouteTable {
138138
bool AddRoute(const std::string& uri_pattern,
139139
const CommandCreatorPtr& creator);
140140

141+
// check custom prefix, should be of the form:
142+
// '-' + vendor prefix + '-' + command name
143+
// return true if prefix correct
144+
bool CheckCustomPrefix(const std::string& prefix);
145+
141146
// return true if pattern1 is bestmatch then pattern2
142147
bool CompareBestMatch(const std::string& uri_pattern1, const std::string& uri_pattern2);
143148

src/webdriver/webdriver_route_table.cc

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -119,28 +119,23 @@ bool RouteTable::AddRoute(const std::string& uri_pattern,
119119
std::vector<std::string> url_segments;
120120
base::SplitString(uri_pattern, '/', &url_segments);
121121

122-
if (url_segments.size() < 4
123-
|| !url_segments[0].empty() || url_segments[1] != "session" || url_segments[2] != "*") {
124-
GlobalLogger::Log(kWarningLogLevel, "Custom commands must begin with \"/session/*/\"");
122+
if (url_segments.size() < 2
123+
|| !url_segments[0].empty()) {
124+
GlobalLogger::Log(kWarningLogLevel, "Custom commands too short");
125125
return false;
126126
}
127-
128-
// check custom prefix, should be of the form:
129-
// '-' + vendor prefix + '-' + command name
130-
std::vector<std::string> prefix_segments;
131-
base::SplitString(url_segments[3], '-', &prefix_segments);
132-
#if defined(OS_WIN)
133-
if (prefix_segments.size() < 3 || !prefix_segments[0].empty() || prefix_segments[2].empty()
134-
|| prefix_segments[1].empty() || !isalpha(prefix_segments[1].at(0))) {
135-
#else //OS_WIN
136-
if (prefix_segments.size() < 3 || !prefix_segments[0].empty() || prefix_segments[2].empty()
137-
|| prefix_segments[1].empty() || !std::isalpha(prefix_segments[1].at(0))) {
138-
#endif //OS_WIN
139-
140-
GlobalLogger::Log(kWarningLogLevel, "Custom prefix invalid");
127+
if (url_segments.size() >= 2
128+
&& url_segments[0].empty() && url_segments[1] != "session") {
129+
if (!CheckCustomPrefix(url_segments[1]))
130+
return false;
131+
} else if (url_segments.size() < 4 || !url_segments[0].empty()
132+
|| url_segments[1] != "session" || url_segments[2] != "*") {
133+
GlobalLogger::Log(kWarningLogLevel, "Invalid custom commands");
141134
return false;
135+
} else {
136+
if (!CheckCustomPrefix(url_segments[3]))
137+
return false;
142138
}
143-
144139
}
145140
std::vector<webdriver::internal::RouteDetails>::iterator route;
146141
for (route = routes_.begin();
@@ -165,6 +160,23 @@ bool RouteTable::AddRoute(const std::string& uri_pattern,
165160
return true;
166161
}
167162

163+
bool RouteTable::CheckCustomPrefix(const std::string& prefix) {
164+
std::vector<std::string> prefix_segments;
165+
base::SplitString(prefix, '-', &prefix_segments);
166+
#if defined(OS_WIN)
167+
if (prefix_segments.size() < 3 || !prefix_segments[0].empty() || prefix_segments[2].empty()
168+
|| prefix_segments[1].empty() || !isalpha(prefix_segments[1].at(0))) {
169+
#else //OS_WIN
170+
if (prefix_segments.size() < 3 || !prefix_segments[0].empty() || prefix_segments[2].empty()
171+
|| prefix_segments[1].empty() || !std::isalpha(prefix_segments[1].at(0))) {
172+
#endif //OS_WIN
173+
174+
GlobalLogger::Log(kWarningLogLevel, "Custom prefix invalid");
175+
return false;
176+
}
177+
return true;
178+
}
179+
168180
bool RouteTable::MatchPattern(const std::string& url, const std::string& pattern) const {
169181
std::vector<std::string> url_segments;
170182
std::vector<std::string> pattern_segments;

0 commit comments

Comments
 (0)