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

Side by Side Diff: chrome/test/url_fetch_test/url_fetch_test.cc

Issue 7578004: Move more files from chrome/test to chrome/test/base, part #7 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 4 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/ui/v8_benchmark_uitest.js ('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
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/command_line.h"
6 #include "base/file_path.h"
7 #include "base/file_util.h"
8 #include "base/path_service.h"
9 #include "base/string_number_conversions.h"
10 #include "base/string_util.h"
11 #include "base/test/test_timeouts.h"
12 #include "base/utf_string_conversions.h"
13 #include "chrome/common/chrome_paths.h"
14 #include "chrome/test/automation/tab_proxy.h"
15 #include "chrome/test/ui/ui_perf_test.h"
16
17 namespace {
18
19 // Provides a UI Test that lets us take the browser to a url, and
20 // wait for a cookie value to be set or a JavaScript expression to evaluate
21 // true before closing the page. It is undefined what happens if you specify
22 // both a cookie and a JS expression.
23 class UrlFetchTest : public UIPerfTest {
24 public:
25 UrlFetchTest() {
26 show_window_ = true;
27 dom_automation_enabled_ = true;
28 }
29 struct UrlFetchTestResult {
30 std::string cookie_value;
31 std::string javascript_variable;
32 };
33
34 void SetUp() {
35 const CommandLine* cmd_line = CommandLine::ForCurrentProcess();
36 if (cmd_line->HasSwitch("reference_build")) {
37 UseReferenceBuild();
38 }
39 UITest::SetUp();
40 }
41
42 void RunTest(const GURL& url,
43 const char* wait_cookie_name,
44 const char* wait_cookie_value,
45 const char* var_to_fetch,
46 const std::string& wait_js_expr,
47 const std::string& wait_js_frame_xpath,
48 int wait_js_timeout_ms,
49 UrlFetchTestResult* result) {
50 scoped_refptr<TabProxy> tab(GetActiveTab());
51 ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, tab->NavigateToURL(url));
52
53 if (wait_cookie_name) {
54 if (wait_cookie_value) {
55 bool completed = WaitUntilCookieValue(
56 tab.get(), url, wait_cookie_name,
57 TestTimeouts::huge_test_timeout_ms(),
58 wait_cookie_value);
59 ASSERT_TRUE(completed);
60 } else {
61 result->cookie_value = WaitUntilCookieNonEmpty(
62 tab.get(), url, wait_cookie_name,
63 TestTimeouts::huge_test_timeout_ms());
64 ASSERT_TRUE(result->cookie_value.length());
65 }
66 } else if (!wait_js_expr.empty()) {
67 bool completed = WaitUntilJavaScriptCondition(
68 tab.get(),
69 UTF8ToWide(wait_js_frame_xpath),
70 UTF8ToWide(wait_js_expr),
71 wait_js_timeout_ms);
72 ASSERT_TRUE(completed);
73 }
74 if (var_to_fetch) {
75 std::string script = StringPrintf(
76 "window.domAutomationController.send(%s);", var_to_fetch);
77
78 std::wstring value;
79 bool success = tab->ExecuteAndExtractString(L"", ASCIIToWide(script),
80 &value);
81 ASSERT_TRUE(success);
82 result->javascript_variable = WideToUTF8(value);
83 }
84 }
85 };
86
87 bool WriteValueToFile(std::string value, const FilePath& path) {
88 int retval = file_util::WriteFile(path, value.c_str(), value.length());
89 return retval == static_cast<int>(value.length());
90 }
91
92 // To actually do anything useful, this test should have a url
93 // passed on the command line, eg.
94 //
95 // --url=http://foo.bar.com
96 //
97 // Additional arguments:
98 //
99 // --wait_cookie_name=<name>
100 // Waits for a cookie named <name> to be set before exiting successfully.
101 //
102 // --wait_cookie_value=<value>
103 // In conjunction with --wait_cookie_name, this waits for a specific value
104 // to be set. (Incompatible with --wait_cookie_output)
105 //
106 // --wait_cookie_output=<filepath>
107 // In conjunction with --wait_cookie_name, this saves the cookie value to
108 // a file at the given path. (Incompatible with --wait_cookie_value)
109 //
110 // --wait_js_expr=<jscript_expr>
111 // Waits for a javascript expression to evaluate true before exiting
112 // successfully.
113 //
114 // --wait_js_timeout=<timeout_ms>
115 // In conjunction with --wait_js_condition, this sets the timeout in ms
116 // that we are prepared to wait. If this timeout is exceeded, we will exit
117 // with failure. Note that a timeout greater than the gtest timeout will not
118 // be honored.
119 //
120 // --wait_js_frame_xpath=<xpath>
121 // In conjuction with --wait_js_condition, the JavaScript expression is
122 // executed in the context of the frame that matches the provided xpath.
123 // If this is not specified (or empty string), then the main frame is used.
124 //
125 // --jsvar=<name>
126 // At the end of the test, fetch the named javascript variable from the page.
127 //
128 // --jsvar_output=<filepath>
129 // Write the value of the variable named by '--jsvar' to a file at the given
130 // path.
131 //
132 // --reference_build
133 // Use the reference build of chrome for the test.
134 TEST_F(UrlFetchTest, UrlFetch) {
135 const CommandLine* cmd_line = CommandLine::ForCurrentProcess();
136
137 if (!cmd_line->HasSwitch("url"))
138 return;
139
140 std::string cookie_name =
141 cmd_line->GetSwitchValueASCII("wait_cookie_name");
142 std::string cookie_value =
143 cmd_line->GetSwitchValueASCII("wait_cookie_value");
144 std::string js_expr =
145 cmd_line->GetSwitchValueASCII("wait_js_expr");
146 std::string js_frame_xpath =
147 cmd_line->GetSwitchValueASCII("wait_js_frame_xpath");
148 std::string js_timeout_ms_str =
149 cmd_line->GetSwitchValueASCII("wait_js_timeout");
150
151 std::string jsvar = cmd_line->GetSwitchValueASCII("jsvar");
152 int js_timeout_ms = -1; // no timeout, wait forever
153
154 if (!js_timeout_ms_str.empty())
155 base::StringToInt(js_timeout_ms_str, &js_timeout_ms);
156
157 UrlFetchTestResult result;
158 RunTest(GURL(cmd_line->GetSwitchValueASCII("url")),
159 cookie_name.length() > 0 ? cookie_name.c_str() : NULL,
160 cookie_value.length() > 0 ? cookie_value.c_str() : NULL,
161 jsvar.length() > 0 ? jsvar.c_str() : NULL,
162 js_expr,
163 js_frame_xpath,
164 js_timeout_ms,
165 &result);
166
167 // Write out the cookie if requested
168 FilePath cookie_output_path =
169 cmd_line->GetSwitchValuePath("wait_cookie_output");
170 if (!cookie_output_path.value().empty()) {
171 ASSERT_TRUE(WriteValueToFile(result.cookie_value, cookie_output_path));
172 }
173
174 // Write out the JS Variable if requested
175 FilePath jsvar_output_path = cmd_line->GetSwitchValuePath("jsvar_output");
176 if (!jsvar_output_path.value().empty()) {
177 ASSERT_TRUE(WriteValueToFile(result.javascript_variable,
178 jsvar_output_path));
179 }
180 }
181
182 } // namespace
OLDNEW
« no previous file with comments | « chrome/test/ui/v8_benchmark_uitest.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698