Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(52)

Side by Side Diff: chrome/test/webdriver/commands/execute_command.cc

Issue 6544003: The command handler for /session/:sessionId/execute (execute_script) was... (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/test/webdriver/commands/execute_command.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/test/webdriver/commands/execute_command.h"
6
5 #include <string> 7 #include <string>
6 8
7 #include "base/json/json_reader.h" 9 #include "base/values.h"
kkania 2011/02/17 23:37:47 since you're fixing up headers, how about add one
Jason Leyba 2011/02/18 00:08:00 Done.
8
9 #include "chrome/test/webdriver/commands/execute_command.h"
10 10
11 namespace webdriver { 11 namespace webdriver {
12 12
13 const char kArgs[] = "args"; 13 const char kArgs[] = "args";
14 const char kScript[] = "script"; 14 const char kScript[] = "script";
15 15
16 ExecuteCommand::ExecuteCommand(const std::vector<std::string>& path_segments, 16 ExecuteCommand::ExecuteCommand(const std::vector<std::string>& path_segments,
17 const DictionaryValue* const parameters) 17 const DictionaryValue* const parameters)
18 : WebDriverCommand(path_segments, parameters) {} 18 : WebDriverCommand(path_segments, parameters) {}
19 19
20 ExecuteCommand::~ExecuteCommand() {} 20 ExecuteCommand::~ExecuteCommand() {}
21 21
22
23 bool ExecuteCommand::Init(Response* const response) { 22 bool ExecuteCommand::Init(Response* const response) {
24 if (!WebDriverCommand::Init(response)) { 23 if (!WebDriverCommand::Init(response)) {
25 SET_WEBDRIVER_ERROR(response, "Failure on Init for execute command", 24 SET_WEBDRIVER_ERROR(response, "Failure on Init for execute command",
26 kInternalServerError); 25 kInternalServerError);
27 return false; 26 return false;
28 } 27 }
29 28
30 if (!GetStringParameter(kScript, &script_)) { 29 if (!GetStringParameter(kScript, &script_)) {
kkania 2011/02/17 23:37:47 Can you move the parsing of the JSON params out of
Jason Leyba 2011/02/18 00:08:00 Done.
31 SET_WEBDRIVER_ERROR(response, "No script to execute specified", 30 SET_WEBDRIVER_ERROR(response, "No script to execute specified",
32 kBadRequest); 31 kBadRequest);
33 return false; 32 return false;
34 } 33 }
35 34
36 has_args_= GetStringASCIIParameter(kArgs, &args_); 35 if (!GetListParameter(kArgs, &args_)) {
36 SET_WEBDRIVER_ERROR(response, "No script arguments specified",
37 kBadRequest);
38 return false;
39 }
40
37 return true; 41 return true;
38 } 42 }
39 43
40 bool ExecuteCommand::DoesPost() { 44 bool ExecuteCommand::DoesPost() {
41 return true; 45 return true;
42 } 46 }
43 47
44 void ExecuteCommand::ExecutePost(Response* const response) { 48 void ExecuteCommand::ExecutePost(Response* const response) {
45 int error_code = 0;
46 std::string error_msg;
47 Value* params = NULL;
48 Value* result = NULL; 49 Value* result = NULL;
49 50 ErrorCode status = session_->ExecuteScript(script_, args_, &result);
50 if (has_args_) { 51 response->set_status(status);
51 params = base::JSONReader::ReadAndReturnError(args_, true,
52 &error_code, &error_msg);
53 if (error_code != 0) {
54 LOG(INFO) << "Could not parse the JSON arguments passed in "
55 << "got error code: " << error_code << ", " << error_msg;
56 SET_WEBDRIVER_ERROR(response, "Arguments are not valid json objects",
57 kBadRequest);
58 return;
59 }
60 } else {
61 LOG(INFO) << "No args for this script";
62 // If there are no args required just use an empty list.
63 params = new ListValue();
64 }
65
66 if (params->GetType() != Value::TYPE_LIST) {
67 LOG(INFO) << "Data passed in to script must be a json list";
68 SET_WEBDRIVER_ERROR(response, "Arguments are not in list format",
69 kBadRequest);
70 return;
71 }
72
73 ListValue* script_args = static_cast<ListValue*>(params);
74 ErrorCode error = session_->ExecuteScript(script_,
75 script_args, &result);
76
77 if (error != kSuccess) {
78 SET_WEBDRIVER_ERROR(response, "Failed to execute script",
79 kInternalServerError);
80 return;
81 }
82
83 response->set_value(result); 52 response->set_value(result);
84 response->set_status(kSuccess);
85 } 53 }
86 54
87 bool ExecuteCommand::RequiresValidTab() { 55 bool ExecuteCommand::RequiresValidTab() {
88 return true; 56 return true;
89 } 57 }
90 58
91 } // namspace webdriver 59 } // namspace webdriver
92 60
OLDNEW
« no previous file with comments | « chrome/test/webdriver/commands/execute_command.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698