diff options
author | ofri@google.com <ofri@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-28 14:51:29 +0000 |
---|---|---|
committer | ofri@google.com <ofri@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-28 14:51:29 +0000 |
commit | f815354ec63fa8e5fe21cade4cf16f8e2f074671 (patch) | |
tree | 140f500956748b941e326933429d68a8652dafe8 /content | |
parent | 99eaf75cf14010d67abea9c0fa9e917dd317f81e (diff) | |
download | chromium_src-f815354ec63fa8e5fe21cade4cf16f8e2f074671.zip chromium_src-f815354ec63fa8e5fe21cade4cf16f8e2f074671.tar.gz chromium_src-f815354ec63fa8e5fe21cade4cf16f8e2f074671.tar.bz2 |
Adding the ability to pass arguments to JS tests from the C++ side. This enables us to easily pass suppression lists to the bidi checker (another CL will follow for that).
BUG=NONE
TEST=NONE
Review URL: http://codereview.chromium.org/6854021
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@83333 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/browser/webui/web_ui.cc | 20 | ||||
-rw-r--r-- | content/browser/webui/web_ui.h | 5 | ||||
-rw-r--r-- | content/browser/webui/web_ui_browsertest.cc | 83 | ||||
-rw-r--r-- | content/browser/webui/web_ui_browsertest.h | 23 |
4 files changed, 113 insertions, 18 deletions
diff --git a/content/browser/webui/web_ui.cc b/content/browser/webui/web_ui.cc index 995a229..bc3abc7 100644 --- a/content/browser/webui/web_ui.cc +++ b/content/browser/webui/web_ui.cc @@ -22,10 +22,10 @@ #include "ipc/ipc_message.h" #include "ipc/ipc_message_macros.h" -namespace { - -string16 GetJavascript(const std::string& function_name, - const std::vector<const Value*>& arg_list) { +// static +string16 WebUI::GetJavascriptCall( + const std::string& function_name, + const std::vector<const Value*>& arg_list) { string16 parameters; std::string json; for (size_t i = 0; i < arg_list.size(); ++i) { @@ -39,8 +39,6 @@ string16 GetJavascript(const std::string& function_name, char16('(') + parameters + char16(')') + char16(';'); } -} // namespace - WebUI::WebUI(TabContents* contents) : hide_favicon_(false), force_bookmark_bar_visible_(false), @@ -103,7 +101,7 @@ void WebUI::CallJavascriptFunction(const std::string& function_name, DCHECK(IsStringASCII(function_name)); std::vector<const Value*> args; args.push_back(&arg); - ExecuteJavascript(GetJavascript(function_name, args)); + ExecuteJavascript(WebUI::GetJavascriptCall(function_name, args)); } void WebUI::CallJavascriptFunction( @@ -113,7 +111,7 @@ void WebUI::CallJavascriptFunction( std::vector<const Value*> args; args.push_back(&arg1); args.push_back(&arg2); - ExecuteJavascript(GetJavascript(function_name, args)); + ExecuteJavascript(WebUI::GetJavascriptCall(function_name, args)); } void WebUI::CallJavascriptFunction( @@ -124,7 +122,7 @@ void WebUI::CallJavascriptFunction( args.push_back(&arg1); args.push_back(&arg2); args.push_back(&arg3); - ExecuteJavascript(GetJavascript(function_name, args)); + ExecuteJavascript(WebUI::GetJavascriptCall(function_name, args)); } void WebUI::CallJavascriptFunction( @@ -139,14 +137,14 @@ void WebUI::CallJavascriptFunction( args.push_back(&arg2); args.push_back(&arg3); args.push_back(&arg4); - ExecuteJavascript(GetJavascript(function_name, args)); + ExecuteJavascript(WebUI::GetJavascriptCall(function_name, args)); } void WebUI::CallJavascriptFunction( const std::string& function_name, const std::vector<const Value*>& args) { DCHECK(IsStringASCII(function_name)); - ExecuteJavascript(GetJavascript(function_name, args)); + ExecuteJavascript(WebUI::GetJavascriptCall(function_name, args)); } void WebUI::RegisterMessageCallback(const std::string &message, diff --git a/content/browser/webui/web_ui.h b/content/browser/webui/web_ui.h index e44f1bd..910fc5c 100644 --- a/content/browser/webui/web_ui.h +++ b/content/browser/webui/web_ui.h @@ -157,6 +157,11 @@ class WebUI : public IPC::Channel::Listener { // Web UI system. static const TypeID kNoWebUI; + // Returns JavaScript code that, when executed, calls the function specified + // by |function_name| with the arguments specified in |arg_list|. + static string16 GetJavascriptCall(const std::string& function_name, + const std::vector<const Value*>& arg_list); + protected: void AddMessageHandler(WebUIMessageHandler* handler); diff --git a/content/browser/webui/web_ui_browsertest.cc b/content/browser/webui/web_ui_browsertest.cc index be72c48..23448ee 100644 --- a/content/browser/webui/web_ui_browsertest.cc +++ b/content/browser/webui/web_ui_browsertest.cc @@ -1,18 +1,19 @@ // 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 "content/browser/webui/web_ui_browsertest.h" #include <string> #include <vector> #include "base/path_service.h" +#include "base/values.h" #include "chrome/browser/ui/browser.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/url_constants.h" #include "chrome/test/ui_test_utils.h" #include "content/browser/tab_contents/tab_contents.h" +#include "content/browser/webui/web_ui.h" #include "ui/base/resource/resource_bundle.h" static const FilePath::CharType* kWebUILibraryJS = @@ -34,11 +35,55 @@ bool LogHandler(int severity, WebUIBrowserTest::~WebUIBrowserTest() {} bool WebUIBrowserTest::RunJavascriptFunction(const std::string& function_name) { - return RunJavascriptUsingHandler(function_name, false); + return RunJavascriptFunction(function_name, ConstValueVector()); +} + +bool WebUIBrowserTest::RunJavascriptFunction(const std::string& function_name, + const Value& arg) { + ConstValueVector args; + args.push_back(&arg); + return RunJavascriptFunction(function_name, args); +} + +bool WebUIBrowserTest::RunJavascriptFunction(const std::string& function_name, + const Value& arg1, + const Value& arg2) { + ConstValueVector args; + args.push_back(&arg1); + args.push_back(&arg2); + return RunJavascriptFunction(function_name, args); +} + +bool WebUIBrowserTest::RunJavascriptFunction( + const std::string& function_name, + const ConstValueVector& function_arguments) { + return RunJavascriptUsingHandler(function_name, function_arguments, false); } bool WebUIBrowserTest::RunJavascriptTest(const std::string& test_name) { - return RunJavascriptUsingHandler(test_name, true); + return RunJavascriptTest(test_name, ConstValueVector()); +} + +bool WebUIBrowserTest::RunJavascriptTest(const std::string& test_name, + const Value& arg) { + ConstValueVector args; + args.push_back(&arg); + return RunJavascriptTest(test_name, args); +} + +bool WebUIBrowserTest::RunJavascriptTest(const std::string& test_name, + const Value& arg1, + const Value& arg2) { + ConstValueVector args; + args.push_back(&arg1); + args.push_back(&arg2); + return RunJavascriptTest(test_name, args); +} + +bool WebUIBrowserTest::RunJavascriptTest( + const std::string& test_name, + const ConstValueVector& test_arguments) { + return RunJavascriptUsingHandler(test_name, test_arguments, true); } WebUIBrowserTest::WebUIBrowserTest() @@ -76,15 +121,39 @@ void WebUIBrowserTest::BuildJavascriptLibraries(std::string* content) { } } +string16 WebUIBrowserTest::BuildRunTestJSCall( + const std::string& function_name, + const WebUIBrowserTest::ConstValueVector& test_func_args) { + WebUIBrowserTest::ConstValueVector arguments; + StringValue function_name_arg(function_name); + arguments.push_back(&function_name_arg); + ListValue baked_argument_list; + WebUIBrowserTest::ConstValueVector::const_iterator arguments_iterator; + for (arguments_iterator = test_func_args.begin(); + arguments_iterator != test_func_args.end(); + ++arguments_iterator) { + baked_argument_list.Append((Value *)*arguments_iterator); + } + arguments.push_back(&baked_argument_list); + return WebUI::GetJavascriptCall(std::string("runTest"), arguments); +} + bool WebUIBrowserTest::RunJavascriptUsingHandler( - const std::string& function_name, bool is_test) { + const std::string& function_name, + const ConstValueVector& function_arguments, + bool is_test) { std::string content; BuildJavascriptLibraries(&content); if (!function_name.empty()) { - std::string called_function = is_test ? "runTest(" + function_name + ");" : - function_name + "()"; - content.append(called_function); + string16 called_function; + if (is_test) { + called_function = BuildRunTestJSCall(function_name, function_arguments); + } else { + called_function = WebUI::GetJavascriptCall(function_name, + function_arguments); + } + content.append(UTF16ToUTF8(called_function)); } SetupHandlers(); logging::SetLogMessageHandler(&LogHandler); diff --git a/content/browser/webui/web_ui_browsertest.h b/content/browser/webui/web_ui_browsertest.h index bc1f313..5569cdc 100644 --- a/content/browser/webui/web_ui_browsertest.h +++ b/content/browser/webui/web_ui_browsertest.h @@ -12,6 +12,7 @@ #include "chrome/test/in_process_browser_test.h" #include "content/browser/webui/web_ui_test_handler.h" +class Value; class WebUIMessageHandler; // The runner of WebUI javascript based tests. @@ -22,6 +23,7 @@ class WebUIMessageHandler; // and the lone test within this class. class WebUIBrowserTest : public InProcessBrowserTest { public: + typedef std::vector<const Value*> ConstValueVector; virtual ~WebUIBrowserTest(); // Add a custom helper JS library for your test. @@ -30,9 +32,23 @@ class WebUIBrowserTest : public InProcessBrowserTest { // Runs a javascript function in the context of all libraries. // Note that calls to functions in test_api.js are not supported. bool RunJavascriptFunction(const std::string& function_name); + bool RunJavascriptFunction(const std::string& function_name, + const Value& arg); + bool RunJavascriptFunction(const std::string& function_name, + const Value& arg1, + const Value& arg2); + bool RunJavascriptFunction(const std::string& function_name, + const ConstValueVector& function_arguments); // Runs a test that may include calls to functions in test_api.js. bool RunJavascriptTest(const std::string& test_name); + bool RunJavascriptTest(const std::string& test_name, + const Value& arg); + bool RunJavascriptTest(const std::string& test_name, + const Value& arg1, + const Value& arg2); + bool RunJavascriptTest(const std::string& test_name, + const ConstValueVector& test_arguments); protected: WebUIBrowserTest(); @@ -47,9 +63,16 @@ class WebUIBrowserTest : public InProcessBrowserTest { // Builds a string containing all added javascript libraries. void BuildJavascriptLibraries(std::string* content); + // Builds a string with a call to the runTest JS function, passing the + // given test and its arguments. + string16 BuildRunTestJSCall(const std::string& test_name, + const WebUIBrowserTest::ConstValueVector& args); + // Calls the specified function with all libraries available. If |is_test| // is true, the framework listens for pass fail messages from javascript. + // The provided arguments vector is passed to |function_name|. bool RunJavascriptUsingHandler(const std::string& function_name, + const ConstValueVector& function_arguments, bool is_test); // Attaches mock and test handlers. |