@@ -19,38 +19,46 @@ QWebViewVisualizerSourceCommand::QWebViewVisualizerSourceCommand(QWebViewCmdExec
1919void QWebViewVisualizerSourceCommand::Execute (std::string* source, Error** error) {
2020 // Convert DOM tree to valid XML.
2121 const char * kSource =
22- " function() {\n "
23- " var elements = document.getElementsByTagName('*');\n "
24- " for (var elementIndex = 0; elementIndex < elements.length; elementIndex++) {\n "
25- " var element = elements[elementIndex];\n "
26- " if (element.tagName.toLowerCase() == 'script')\n "
27- " element.innerHTML = '';\n "
28- " if (element.hasAttribute('\" '))\n "
29- " element.removeAttribute('\" ');\n "
22+ " var elements = document.getElementsByTagName('*');\n "
23+ " for (var elementIndex = 0; elementIndex < elements.length; elementIndex++) {\n "
24+ " var element = elements[elementIndex];\n "
25+ " if (element.tagName.toLowerCase() == 'script')\n "
26+ " element.innerHTML = '';\n "
27+ " if (element.hasAttribute('\" '))\n "
28+ " element.removeAttribute('\" ');\n "
3029 " \n "
31- " var childNodes = element.childNodes;\n "
32- " for (var childIndex = 0; childIndex < childNodes.length; childIndex++) {\n "
33- " var child = childNodes[childIndex];\n "
34- " if (child.nodeType == Node.TEXT_NODE) {\n "
35- " child.nodeValue = child.nodeValue.replace(/&/g, '&');\n "
36- " }\n "
30+ " var childNodes = element.childNodes;\n "
31+ " for (var childIndex = 0; childIndex < childNodes.length; childIndex++) {\n "
32+ " var child = childNodes[childIndex];\n "
33+ " if (child.nodeType == Node.TEXT_NODE) {\n "
34+ " child.nodeValue = child.nodeValue.replace(/&/g, '&');\n "
3735 " }\n "
3836 " }\n "
37+ " }\n "
3938 " \n "
40- " var xhtml = document.implementation.createDocument();\n "
41- " xhtml = xhtml.importNode(document.documentElement, true);\n "
42- " \n "
43- " return new XMLSerializer().serializeToString(xhtml);\n "
44- " }" ;
39+ " var xhtml = document.implementation.createDocument();\n "
40+ " xhtml = xhtml.importNode(document.documentElement, true);\n "
41+ " return new XMLSerializer().serializeToString(xhtml);" ;
4542
46- // TODO: use executor->webkitProxy->ExecuteScript()
47- /* *error = executor_->ExecuteScriptAndParse(
48- executor_->GetFrame(view_, session_->current_frame()),
43+ Value* unscoped_value = NULL ;
44+ executor_->ExecuteScript (
4945 kSource ,
50- "getSource",
5146 new ListValue (),
52- CreateDirectValueParser(source));
53- */
47+ &unscoped_value,
48+ error);
49+ if (*error) {
50+ (*error)->AddDetails (" getSource execution failed" );
51+ return ;
52+ }
53+
54+ scoped_ptr<Value> value (unscoped_value);
55+ const ValueParser* parser = CreateDirectValueParser (source);
56+ if (!parser->Parse (value.get ())) {
57+ std::string error_msg = base::StringPrintf (" getSource returned invalid value: %s" ,
58+ JsonStringify (value.get ()).c_str ());
59+ *error = new Error (kUnknownError , error_msg);
60+ return ;
61+ }
5462
5563 session_->logger ().Log (kInfoLogLevel , " [QWebViewVisualizerSourceCommand] before transform:" );
5664 session_->logger ().Log (kInfoLogLevel , *source);
0 commit comments