Skip to content

Commit a5db12b

Browse files
Andrii BoichukAndrii Boichuk
Andrii Boichuk
authored and
Andrii Boichuk
committed
Add raising of InvalidStateException in case element doesn't support player commands
1 parent cf7d9c2 commit a5db12b

File tree

2 files changed

+213
-10
lines changed

2 files changed

+213
-10
lines changed

src/webdriver/extension_qt/quick2_view_executor.cc

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -861,6 +861,16 @@ void Quick2ViewCmdExecutor::GetPlayerState(const ElementId &element, PlayerState
861861
if (NULL == view)
862862
return;
863863

864+
std::string tagName;
865+
GetElementTagName(element, &tagName, error);
866+
if(*error)
867+
return;
868+
869+
if(tagName != "video" && tagName != "Video"){
870+
*error = new Error(kInvalidElementState);
871+
return;
872+
}
873+
864874
QQuickItem* pItem = getElement(element, error);
865875
if (NULL == pItem)
866876
return;
@@ -901,6 +911,15 @@ void Quick2ViewCmdExecutor::SetPlayerState(const ElementId &element, PlayerState
901911
if (NULL == pItem)
902912
return;
903913

914+
std::string tagName;
915+
GetElementTagName(element, &tagName, error);
916+
if(*error)
917+
return;
918+
919+
if(tagName != "video" && tagName != "Video"){
920+
*error = new Error(kInvalidElementState);
921+
return;
922+
}
904923

905924
bool isMethodCalled = false;
906925
switch(state){
@@ -925,6 +944,15 @@ void Quick2ViewCmdExecutor::GetPlayerVolume(const ElementId &element, double *vo
925944
if (NULL == pItem)
926945
return;
927946

947+
std::string tagName;
948+
GetElementTagName(element, &tagName, error);
949+
if(*error)
950+
return;
951+
952+
if(tagName != "video" && tagName != "Video"){
953+
*error = new Error(kInvalidElementState);
954+
return;
955+
}
928956

929957
base::Value* volumeValue = NULL;
930958
GetAttribute(element, "volume", &volumeValue, error);
@@ -946,6 +974,16 @@ void Quick2ViewCmdExecutor::SetPlayerVolume(const ElementId &element, double vol
946974
if (NULL == pItem)
947975
return;
948976

977+
std::string tagName;
978+
GetElementTagName(element, &tagName, error);
979+
if(*error)
980+
return;
981+
982+
if(tagName != "video" && tagName != "Video"){
983+
*error = new Error(kInvalidElementState);
984+
return;
985+
}
986+
949987
QVariant volumeVariant(volume);
950988
bool isPropertyAssigned = pItem->setProperty("volume", volumeVariant);
951989

@@ -965,6 +1003,15 @@ void Quick2ViewCmdExecutor::GetPlayingPosition(const ElementId &element, double
9651003
if (NULL == pItem)
9661004
return;
9671005

1006+
std::string tagName;
1007+
GetElementTagName(element, &tagName, error);
1008+
if(*error)
1009+
return;
1010+
1011+
if(tagName != "video" && tagName != "Video"){
1012+
*error = new Error(kInvalidElementState);
1013+
return;
1014+
}
9681015

9691016
base::Value* positionValue = NULL;
9701017
GetAttribute(element, "position", &positionValue, error);
@@ -989,6 +1036,16 @@ void Quick2ViewCmdExecutor::SetPlayingPosition(const ElementId &element, double
9891036
if (NULL == pItem)
9901037
return;
9911038

1039+
std::string tagName;
1040+
GetElementTagName(element, &tagName, error);
1041+
if(*error)
1042+
return;
1043+
1044+
if(tagName != "video" && tagName != "Video"){
1045+
*error = new Error(kInvalidElementState);
1046+
return;
1047+
}
1048+
9921049
QVariant var((int)((position) * 1000));
9931050
bool isMethodCalled = QMetaObject::invokeMethod(pItem, "seek",
9941051
Q_ARG(QVariant, var));
@@ -1009,6 +1066,16 @@ void Quick2ViewCmdExecutor::SetMute(const ElementId &element, bool mute, Error *
10091066
if (NULL == pItem)
10101067
return;
10111068

1069+
std::string tagName;
1070+
GetElementTagName(element, &tagName, error);
1071+
if(*error)
1072+
return;
1073+
1074+
if(tagName != "video" && tagName != "Video"){
1075+
*error = new Error(kInvalidElementState);
1076+
return;
1077+
}
1078+
10121079
QVariant muteVariant(mute);
10131080
bool isPropertyAssigned = pItem->setProperty("muted", muteVariant);
10141081

@@ -1028,10 +1095,17 @@ void Quick2ViewCmdExecutor::GetMute(const ElementId &element, bool *mute, Error
10281095
if (NULL == pItem)
10291096
return;
10301097

1098+
std::string tagName;
1099+
GetElementTagName(element, &tagName, error);
1100+
if(*error)
1101+
return;
1102+
if(tagName != "video" && tagName != "Video"){
1103+
*error = new Error(kInvalidElementState);
1104+
return;
1105+
}
10311106

10321107
base::Value* muteValue = NULL;
10331108
GetAttribute(element, "muted", &muteValue, error);
1034-
10351109
if( *error){
10361110
return;
10371111
}
@@ -1049,6 +1123,16 @@ void Quick2ViewCmdExecutor::SetPlaybackSpeed(const ElementId &element, double sp
10491123
if (NULL == pItem)
10501124
return;
10511125

1126+
std::string tagName;
1127+
GetElementTagName(element, &tagName, error);
1128+
if(*error)
1129+
return;
1130+
1131+
if(tagName != "video" && tagName != "Video"){
1132+
*error = new Error(kInvalidElementState);
1133+
return;
1134+
}
1135+
10521136
QVariant speedVariant(speed);
10531137
bool isPropertyAssigned = pItem->setProperty("playbackRate", speedVariant);
10541138

@@ -1068,6 +1152,15 @@ void Quick2ViewCmdExecutor::GetPlaybackSpeed(const ElementId &element, double *s
10681152
if (NULL == pItem)
10691153
return;
10701154

1155+
std::string tagName;
1156+
GetElementTagName(element, &tagName, error);
1157+
if(*error)
1158+
return;
1159+
1160+
if(tagName != "video" && tagName != "Video"){
1161+
*error = new Error(kInvalidElementState);
1162+
return;
1163+
}
10711164

10721165
base::Value* positionValue = NULL;
10731166
GetAttribute(element, "playbackRate", &positionValue, error);

src/webdriver/extension_qt/qwebkit_proxy.cc

Lines changed: 119 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -907,8 +907,19 @@ Error* QWebkitProxy::GetBrowserLog(base::ListValue** browserLog) {
907907

908908
Error* QWebkitProxy::GetPlayerState(const ElementId& element, PlayerState *state) {
909909
bool isPaused;
910+
911+
std::string tagName;
912+
Error *error = GetElementTagName(element, &tagName);
913+
if(error)
914+
return error;
915+
916+
if(tagName != "video" && tagName != "audio"){
917+
error = new Error(kInvalidElementState);
918+
return error;
919+
}
920+
910921
base::Value* isPausedValue = NULL;
911-
Error* error = GetAttribute(element, std::string("paused"), &isPausedValue);
922+
error = GetAttribute(element, std::string("paused"), &isPausedValue);
912923
scoped_ptr<base::Value> scoped_isPausedValue(isPausedValue);
913924
if (error)
914925
return error;
@@ -940,6 +951,17 @@ Error* QWebkitProxy::GetPlayerState(const ElementId& element, PlayerState *state
940951
Error* QWebkitProxy::SetPlayerState(const ElementId& element, const PlayerState state) {
941952
Value* value = NULL;
942953
Error* error = NULL;
954+
955+
std::string tagName;
956+
error = GetElementTagName(element, &tagName);
957+
if(error)
958+
return error;
959+
960+
if(tagName != "video" && tagName != "audio"){
961+
error = new Error(kInvalidElementState);
962+
return error;
963+
}
964+
943965
switch(state){
944966
case Playing:
945967
error = ExecuteScriptAndParse(
@@ -969,7 +991,19 @@ Error* QWebkitProxy::SetPlayerState(const ElementId& element, const PlayerState
969991

970992
Error* QWebkitProxy::GetPlayerVolume(const ElementId& element, double *volumeLevel) {
971993
base::Value* volumeValue = NULL;
972-
Error* error = GetAttribute(element, std::string("volume"), &volumeValue);
994+
995+
std::string tagName;
996+
Error* error;
997+
error = GetElementTagName(element, &tagName);
998+
if(error)
999+
return error;
1000+
1001+
if(tagName != "video" && tagName != "audio"){
1002+
error = new Error(kInvalidElementState);
1003+
return error;
1004+
}
1005+
1006+
error = GetAttribute(element, std::string("volume"), &volumeValue);
9731007
scoped_ptr<base::Value> scoped_volume_value(volumeValue);
9741008
if(error)
9751009
return error;
@@ -983,7 +1017,18 @@ Error* QWebkitProxy::GetPlayerVolume(const ElementId& element, double *volumeLev
9831017
Error* QWebkitProxy::SetPlayerVolume(const ElementId& element, const double level) {
9841018
Value* value = NULL;
9851019

986-
Error* error = ExecuteScriptAndParse(
1020+
std::string tagName;
1021+
Error* error;
1022+
error = GetElementTagName(element, &tagName);
1023+
if(error)
1024+
return error;
1025+
1026+
if(tagName != "video" && tagName != "audio"){
1027+
error = new Error(kInvalidElementState);
1028+
return error;
1029+
}
1030+
1031+
error = ExecuteScriptAndParse(
9871032
GetFrame(page_, session_->current_frame()),
9881033
"function(elem, level) { elem.volume = level; }",
9891034
"setVolume",
@@ -995,7 +1040,19 @@ Error* QWebkitProxy::SetPlayerVolume(const ElementId& element, const double leve
9951040

9961041
Error* QWebkitProxy::GetPlayingPosition(const ElementId& element, double* reletivePos) {
9971042
base::Value* positionValue = NULL;
998-
Error* error = GetAttribute(element, std::string("currentTime"), &positionValue);
1043+
1044+
std::string tagName;
1045+
Error* error;
1046+
error = GetElementTagName(element, &tagName);
1047+
if(error)
1048+
return error;
1049+
1050+
if(tagName != "video" && tagName != "audio"){
1051+
error = new Error(kInvalidElementState);
1052+
return error;
1053+
}
1054+
1055+
error = GetAttribute(element, std::string("currentTime"), &positionValue);
9991056
scoped_ptr<base::Value> scoped_position_value(positionValue);
10001057
if(error)
10011058
return error;
@@ -1009,7 +1066,18 @@ Error* QWebkitProxy::GetPlayingPosition(const ElementId& element, double* releti
10091066
Error* QWebkitProxy::SetPlayingPosition(const ElementId& element, const double reletivePos) {
10101067
Value* value = NULL;
10111068

1012-
Error* error = ExecuteScriptAndParse(
1069+
std::string tagName;
1070+
Error* error;
1071+
error = GetElementTagName(element, &tagName);
1072+
if(error)
1073+
return error;
1074+
1075+
if(tagName != "video" && tagName != "audio"){
1076+
error = new Error(kInvalidElementState);
1077+
return error;
1078+
}
1079+
1080+
error = ExecuteScriptAndParse(
10131081
GetFrame(page_, session_->current_frame()),
10141082
"function(elem, time) { elem.currentTime = time; }",
10151083
"setPosition",
@@ -1023,7 +1091,18 @@ Error* QWebkitProxy::SetPlayingPosition(const ElementId& element, const double r
10231091
Error *QWebkitProxy::GetPlaybackSpeed(const ElementId &element, double *speed)
10241092
{
10251093
base::Value* speedValue = NULL;
1026-
Error* error = GetAttribute(element, std::string("playbackRate"), &speedValue);
1094+
std::string tagName;
1095+
Error* error;
1096+
error = GetElementTagName(element, &tagName);
1097+
if(error)
1098+
return error;
1099+
1100+
if(tagName != "video" && tagName != "audio"){
1101+
error = new Error(kInvalidElementState);
1102+
return error;
1103+
}
1104+
1105+
error = GetAttribute(element, std::string("playbackRate"), &speedValue);
10271106
scoped_ptr<base::Value> scoped_position_value(speedValue);
10281107
if(error)
10291108
return error;
@@ -1038,7 +1117,17 @@ Error *QWebkitProxy::SetPlaybackSpeed(const ElementId &element, const double spe
10381117
{
10391118
Value* value = NULL;
10401119

1041-
Error* error = ExecuteScriptAndParse(
1120+
std::string tagName;
1121+
Error *error = GetElementTagName(element, &tagName);
1122+
if(error)
1123+
return error;
1124+
1125+
if(tagName != "video" && tagName != "audio"){
1126+
error = new Error(kInvalidElementState);
1127+
return error;
1128+
}
1129+
1130+
error = ExecuteScriptAndParse(
10421131
GetFrame(page_, session_->current_frame()),
10431132
"function(elem, speed) { elem.playbackRate = speed; }",
10441133
"setPlaybackRate",
@@ -1052,7 +1141,17 @@ Error *QWebkitProxy::SetPlaybackSpeed(const ElementId &element, const double spe
10521141
Error* QWebkitProxy::SetMute(const ElementId& element, bool mute) {
10531142
Value* value = NULL;
10541143

1055-
Error* error = ExecuteScriptAndParse(
1144+
std::string tagName;
1145+
Error *error = GetElementTagName(element, &tagName);
1146+
if(error)
1147+
return error;
1148+
1149+
if(tagName != "video" && tagName != "audio"){
1150+
error = new Error(kInvalidElementState);
1151+
return error;
1152+
}
1153+
1154+
error = ExecuteScriptAndParse(
10561155
GetFrame(page_, session_->current_frame()),
10571156
"function(elem, mute) { elem.muted = mute; }",
10581157
"setVolume",
@@ -1065,7 +1164,18 @@ Error* QWebkitProxy::SetMute(const ElementId& element, bool mute) {
10651164

10661165
Error* QWebkitProxy::GetMute(const ElementId& element, bool* mute) {
10671166
base::Value* isMutedValue = NULL;
1068-
Error* error = GetAttribute(element, std::string("muted"), &isMutedValue);
1167+
1168+
std::string tagName;
1169+
Error *error = GetElementTagName(element, &tagName);
1170+
if(error)
1171+
return error;
1172+
1173+
if(tagName != "video" && tagName != "audio"){
1174+
error = new Error(kInvalidElementState);
1175+
return error;
1176+
}
1177+
1178+
error = GetAttribute(element, std::string("muted"), &isMutedValue);
10691179
scoped_ptr<Value> scoped_value(isMutedValue);
10701180
if(error)
10711181
return error;

0 commit comments

Comments
 (0)