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

Side by Side Diff: chrome/test/automation/tab_proxy.cc

Issue 21039: Revert my change to get the tree green. Not sure why the tests became flaky.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 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/automation/automation_proxy.cc ('k') | chrome/test/unit/unit_tests.scons » ('j') | 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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/automation/tab_proxy.h" 5 #include "chrome/test/automation/tab_proxy.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "chrome/common/json_value_serializer.h" 10 #include "chrome/common/json_value_serializer.h"
11 #include "chrome/test/automation/automation_constants.h" 11 #include "chrome/test/automation/automation_constants.h"
12 #include "chrome/test/automation/automation_messages.h" 12 #include "chrome/test/automation/automation_messages.h"
13 #include "chrome/test/automation/automation_proxy.h" 13 #include "chrome/test/automation/automation_proxy.h"
14 #include "chrome/test/automation/constrained_window_proxy.h" 14 #include "chrome/test/automation/constrained_window_proxy.h"
15 #include "googleurl/src/gurl.h" 15 #include "googleurl/src/gurl.h"
16 16
17 bool TabProxy::GetTabTitle(std::wstring* title) const { 17 bool TabProxy::GetTabTitle(std::wstring* title) const {
18 if (!is_valid()) 18 if (!is_valid())
19 return false; 19 return false;
20 20
21 if (!title) { 21 if (!title) {
22 NOTREACHED(); 22 NOTREACHED();
23 return false; 23 return false;
24 } 24 }
25 25
26 IPC::Message* response = NULL; 26 IPC::Message* response = NULL;
27 int tab_title_size_response; 27 bool succeeded = sender_->SendAndWaitForResponse(
28 new AutomationMsg_TabTitleRequest(0, handle_), &response,
29 AutomationMsg_TabTitleResponse::ID);
28 30
29 bool succeeded = sender_->SendAndWaitForResponse( 31 if (!succeeded)
30 new AutomationMsg_TabTitleRequest(0, handle_), &response, 32 return false;
31 AutomationMsg_TabTitleResponse::ID) &&
32 AutomationMsg_TabTitleResponse::Read(response, &tab_title_size_response, t itle) &&
33 tab_title_size_response >= 0;
34 scoped_ptr<IPC::Message> auto_deleter(response);
35 33
34 void* iter = NULL;
35 int tab_title_size_response = -1;
36 if (response->ReadInt(&iter, &tab_title_size_response) &&
37 (tab_title_size_response >= 0)) {
38 response->ReadWString(&iter, title);
39 } else {
40 succeeded = false;
41 }
42
43 delete response;
36 return succeeded; 44 return succeeded;
37 } 45 }
38 46
39 bool TabProxy::IsShelfVisible(bool* is_visible) { 47 bool TabProxy::IsShelfVisible(bool* is_visible) {
40 if (!is_valid()) 48 if (!is_valid())
41 return false; 49 return false;
42 50
43 if (!is_visible) { 51 if (!is_visible) {
44 NOTREACHED(); 52 NOTREACHED();
45 return false; 53 return false;
46 } 54 }
47 55
48 IPC::Message* response = NULL; 56 IPC::Message* response = NULL;
49 bool succeeded = sender_->SendAndWaitForResponse( 57 bool succeeded = sender_->SendAndWaitForResponse(
50 new AutomationMsg_ShelfVisibilityRequest(0, handle_), 58 new AutomationMsg_ShelfVisibilityRequest(0, handle_),
51 &response, AutomationMsg_ShelfVisibilityResponse::ID) && 59 &response,
52 AutomationMsg_ShelfVisibilityResponse::Read(response, is_visible); 60 AutomationMsg_ShelfVisibilityResponse::ID);
53 scoped_ptr<IPC::Message> auto_deleter(response); 61 if (!succeeded)
54 return succeeded; 62 return false;
63
64 void* iter = NULL;
65 response->ReadBool(&iter, is_visible);
66 delete response;
67 return true;
55 } 68 }
56 69
57 bool TabProxy::OpenFindInPage() { 70 bool TabProxy::OpenFindInPage() {
58 if (!is_valid()) 71 if (!is_valid())
59 return false; 72 return false;
60 73
61 return sender_->Send(new AutomationMsg_OpenFindInPageRequest(0, handle_)); 74 return sender_->Send(
75 new AutomationMsg_OpenFindInPageRequest(0, handle_));
62 // This message expects no response. 76 // This message expects no response.
63 } 77 }
64 78
65 bool TabProxy::IsFindWindowFullyVisible(bool* is_visible) { 79 bool TabProxy::IsFindWindowFullyVisible(bool* is_visible) {
66 if (!is_valid()) 80 if (!is_valid())
67 return false; 81 return false;
68 82
69 if (!is_visible) { 83 if (!is_visible) {
70 NOTREACHED(); 84 NOTREACHED();
71 return false; 85 return false;
72 } 86 }
73 87
74 IPC::Message* response = NULL; 88 IPC::Message* response = NULL;
75 bool succeeded = sender_->SendAndWaitForResponse( 89 bool succeeded = sender_->SendAndWaitForResponse(
76 new AutomationMsg_FindWindowVisibilityRequest(0, handle_), 90 new AutomationMsg_FindWindowVisibilityRequest(0, handle_),
77 &response, AutomationMsg_FindWindowVisibilityResponse::ID) && 91 &response,
78 AutomationMsg_FindWindowVisibilityResponse::Read(response, is_visible); 92 AutomationMsg_FindWindowVisibilityResponse::ID);
79 scoped_ptr<IPC::Message> auto_deleter(response); 93 if (!succeeded)
80 return succeeded; 94 return false;
95
96 void* iter = NULL;
97 response->ReadBool(&iter, is_visible);
98 delete response;
99 return true;
81 } 100 }
82 101
83 bool TabProxy::GetFindWindowLocation(int* x, int* y) { 102 bool TabProxy::GetFindWindowLocation(int* x, int* y) {
84 if (!is_valid() || !x || !y) 103 if (!is_valid() || !x || !y)
85 return false; 104 return false;
86 105
87 IPC::Message* response = NULL; 106 IPC::Message* response = NULL;
88 bool succeeded = sender_->SendAndWaitForResponse( 107 bool succeeded = sender_->SendAndWaitForResponse(
89 new AutomationMsg_FindWindowLocationRequest(0, handle_), 108 new AutomationMsg_FindWindowLocationRequest(0, handle_),
90 &response, AutomationMsg_FindWindowLocationResponse::ID) && 109 &response,
91 AutomationMsg_FindWindowLocationResponse::Read(response, x, y); 110 AutomationMsg_FindWindowLocationResponse::ID);
92 scoped_ptr<IPC::Message> auto_deleter(response); 111 if (!succeeded)
93 return succeeded; 112 return false;
113
114 void* iter = NULL;
115 response->ReadInt(&iter, x);
116 response->ReadInt(&iter, y);
117 delete response;
118 return true;
94 } 119 }
95 120
96 int TabProxy::FindInPage(const std::wstring& search_string, 121 int TabProxy::FindInPage(const std::wstring& search_string,
97 FindInPageDirection forward, 122 FindInPageDirection forward,
98 FindInPageCase match_case, 123 FindInPageCase match_case,
99 bool find_next, 124 bool find_next,
100 int* ordinal) { 125 int* active_ordinal) {
101 if (!is_valid()) 126 if (!is_valid())
102 return -1; 127 return -1;
103 128
104 FindInPageRequest request = {0}; 129 FindInPageRequest request = {0};
105 request.search_string = search_string; 130 request.search_string = search_string;
106 request.find_next = find_next; 131 request.find_next = find_next;
107 // The explicit comparison to TRUE avoids a warning (C4800). 132 // The explicit comparison to TRUE avoids a warning (C4800).
108 request.match_case = match_case == TRUE; 133 request.match_case = match_case == TRUE;
109 request.forward = forward == TRUE; 134 request.forward = forward == TRUE;
110 135
111 IPC::Message* response = NULL; 136 IPC::Message* response = NULL;
112 int matches;
113 bool succeeded = sender_->SendAndWaitForResponse( 137 bool succeeded = sender_->SendAndWaitForResponse(
114 new AutomationMsg_FindRequest(0, handle_, request), 138 new AutomationMsg_FindRequest(0, handle_, request),
115 &response, AutomationMsg_FindInPageResponse2::ID) && 139 &response,
116 AutomationMsg_FindInPageResponse2::Read(response, ordinal, &matches); 140 AutomationMsg_FindInPageResponse2::ID);
117 scoped_ptr<IPC::Message> auto_deleter(response);
118 if (!succeeded) 141 if (!succeeded)
119 return -1; 142 return -1;
120 return matches; 143
144 void* iter = NULL;
145 int ordinal;
146 int matches_found;
147 response->ReadInt(&iter, &ordinal);
148 response->ReadInt(&iter, &matches_found);
149 if (active_ordinal)
150 *active_ordinal = ordinal;
151 delete response;
152 return matches_found;
121 } 153 }
122 154
123 int TabProxy::NavigateToURL(const GURL& url) { 155 int TabProxy::NavigateToURL(const GURL& url) {
124 return NavigateToURLWithTimeout(url, INFINITE, NULL); 156 return NavigateToURLWithTimeout(url, INFINITE, NULL);
125 } 157 }
126 158
127 int TabProxy::NavigateToURLWithTimeout(const GURL& url, 159 int TabProxy::NavigateToURLWithTimeout(const GURL& url,
128 uint32 timeout_ms, 160 uint32 timeout_ms,
129 bool* is_timeout) { 161 bool* is_timeout) {
130 if (!is_valid()) 162 if (!is_valid())
131 return AUTOMATION_MSG_NAVIGATION_ERROR; 163 return AUTOMATION_MSG_NAVIGATION_ERROR;
132 164
133 IPC::Message* response = NULL; 165 IPC::Message* response = NULL;
166 bool succeeded = sender_->SendAndWaitForResponseWithTimeout(
167 new AutomationMsg_NavigateToURLRequest(0, handle_, url), &response,
168 AutomationMsg_NavigateToURLResponse::ID, timeout_ms, is_timeout);
169
170 if (!succeeded)
171 return AUTOMATION_MSG_NAVIGATION_ERROR;
172
173 void* iter = NULL;
134 int navigate_response = AUTOMATION_MSG_NAVIGATION_ERROR; 174 int navigate_response = AUTOMATION_MSG_NAVIGATION_ERROR;
135 if (sender_->SendAndWaitForResponseWithTimeout( 175 response->ReadInt(&iter, &navigate_response);
136 new AutomationMsg_NavigateToURLRequest(0, handle_, url), &response, 176
137 AutomationMsg_NavigateToURLResponse::ID, timeout_ms, is_timeout)) { 177 delete response;
138 AutomationMsg_NavigateToURLResponse::Read(response, &navigate_response);
139 }
140 scoped_ptr<IPC::Message> auto_deleter(response);
141 return navigate_response; 178 return navigate_response;
142 } 179 }
143 180
144 int TabProxy::NavigateInExternalTab(const GURL& url) { 181 int TabProxy::NavigateInExternalTab(const GURL& url) {
145 if (!is_valid()) 182 if (!is_valid())
146 return AUTOMATION_MSG_NAVIGATION_ERROR; 183 return AUTOMATION_MSG_NAVIGATION_ERROR;
147 184
148 IPC::Message* response = NULL; 185 IPC::Message* response = NULL;
149 bool is_timeout = false; 186 bool is_timeout = false;
150 int rv = AUTOMATION_MSG_NAVIGATION_ERROR; 187 bool succeeded = sender_->SendAndWaitForResponseWithTimeout(
151 if (sender_->SendAndWaitForResponseWithTimeout( 188 new AutomationMsg_NavigateInExternalTabRequest(0, handle_, url), &response,
152 new AutomationMsg_NavigateInExternalTabRequest(0, handle_, url), 189 AutomationMsg_NavigateInExternalTabResponse::ID, INFINITE, &is_timeout);
153 &response, AutomationMsg_NavigateInExternalTabResponse::ID, INFINITE, 190
154 &is_timeout)) { 191 if (!succeeded)
155 AutomationMsg_NavigateInExternalTabResponse::Read(response, &rv); 192 return AUTOMATION_MSG_NAVIGATION_ERROR;
156 } 193
157 scoped_ptr<IPC::Message> auto_deleter(response); 194 void* iter = NULL;
158 return rv; 195 int navigate_response = AUTOMATION_MSG_NAVIGATION_ERROR;
196 response->ReadInt(&iter, &navigate_response);
197
198 delete response;
199 return navigate_response;
159 } 200 }
160 201
161 bool TabProxy::SetAuth(const std::wstring& username, 202 bool TabProxy::SetAuth(const std::wstring& username,
162 const std::wstring& password) { 203 const std::wstring& password) {
163 if (!is_valid()) 204 if (!is_valid())
164 return false; 205 return false;
165 206
166 IPC::Message* response = NULL; 207 IPC::Message* response = NULL;
208 bool succeeded = sender_->SendAndWaitForResponse(
209 new AutomationMsg_SetAuthRequest(0, handle_, username, password), &response,
210 AutomationMsg_SetAuthResponse::ID);
211
212 if (!succeeded)
213 return false;
214
215 void* iter = NULL;
167 int navigate_response = -1; 216 int navigate_response = -1;
168 bool succeeded = sender_->SendAndWaitForResponse( 217 succeeded = (response->ReadInt(&iter, &navigate_response) &&
169 new AutomationMsg_SetAuthRequest(0, handle_, username, password), 218 navigate_response >= 0);
170 &response, AutomationMsg_SetAuthResponse::ID) && 219
171 AutomationMsg_SetAuthResponse::Read(response, &navigate_response) && 220 delete response;
172 navigate_response >= 0;
173 scoped_ptr<IPC::Message> auto_deleter(response);
174 return succeeded; 221 return succeeded;
175 } 222 }
176 223
177 bool TabProxy::CancelAuth() { 224 bool TabProxy::CancelAuth() {
178 if (!is_valid()) 225 if (!is_valid())
179 return false; 226 return false;
180 227
181 IPC::Message* response = NULL; 228 IPC::Message* response = NULL;
229 bool succeeded = sender_->SendAndWaitForResponse(
230 new AutomationMsg_CancelAuthRequest(0, handle_), &response,
231 AutomationMsg_CancelAuthResponse::ID);
232
233 if (!succeeded)
234 return false;
235
236 void* iter = NULL;
182 int navigate_response = -1; 237 int navigate_response = -1;
183 bool succeeded = sender_->SendAndWaitForResponse( 238 succeeded = (response->ReadInt(&iter, &navigate_response) &&
184 new AutomationMsg_CancelAuthRequest(0, handle_), &response, 239 navigate_response >= 0);
185 AutomationMsg_CancelAuthResponse::ID) && 240
186 AutomationMsg_CancelAuthResponse::Read(response, &navigate_response) && 241 delete response;
187 navigate_response >= 0;
188 scoped_ptr<IPC::Message> auto_deleter(response);
189 return succeeded; 242 return succeeded;
190 } 243 }
191 244
192 bool TabProxy::NeedsAuth() const { 245 bool TabProxy::NeedsAuth() const {
193 if (!is_valid()) 246 if (!is_valid())
194 return false; 247 return false;
195 248
196 IPC::Message* response = NULL; 249 IPC::Message* response = NULL;
250 bool succeeded = sender_->SendAndWaitForResponse(
251 new AutomationMsg_NeedsAuthRequest(0, handle_), &response,
252 AutomationMsg_NeedsAuthResponse::ID);
253
254 if (!succeeded)
255 return false;
256
257 void* iter = NULL;
197 bool needs_auth = false; 258 bool needs_auth = false;
198 bool succeeded = sender_->SendAndWaitForResponse( 259 response->ReadBool(&iter, &needs_auth);
199 new AutomationMsg_NeedsAuthRequest(0, handle_), &response, 260
200 AutomationMsg_NeedsAuthResponse::ID) && 261 delete response;
201 AutomationMsg_NeedsAuthResponse::Read(response, &needs_auth);
202 scoped_ptr<IPC::Message> auto_deleter(response);
203 return needs_auth; 262 return needs_auth;
204 } 263 }
205 264
206 int TabProxy::GoBack() { 265 int TabProxy::GoBack() {
207 if (!is_valid()) 266 if (!is_valid())
208 return AUTOMATION_MSG_NAVIGATION_ERROR; 267 return AUTOMATION_MSG_NAVIGATION_ERROR;
209 268
210 IPC::Message* response = NULL; 269 IPC::Message* response = NULL;
270 bool succeeded = sender_->SendAndWaitForResponse(
271 new AutomationMsg_GoBackRequest(0, handle_), &response,
272 AutomationMsg_GoBackResponse::ID);
273
274 if (!succeeded)
275 return AUTOMATION_MSG_NAVIGATION_ERROR;
276
277 void* iter = NULL;
211 int navigate_response = AUTOMATION_MSG_NAVIGATION_ERROR; 278 int navigate_response = AUTOMATION_MSG_NAVIGATION_ERROR;
212 if (sender_->SendAndWaitForResponse( 279 response->ReadInt(&iter, &navigate_response);
213 new AutomationMsg_GoBackRequest(0, handle_), &response, 280
214 AutomationMsg_GoBackResponse::ID)) { 281 delete response;
215 AutomationMsg_GoBackResponse::Read(response, &navigate_response);
216 }
217 scoped_ptr<IPC::Message> auto_deleter(response);
218 return navigate_response; 282 return navigate_response;
219 } 283 }
220 284
221 int TabProxy::GoForward() { 285 int TabProxy::GoForward() {
222 if (!is_valid()) 286 if (!is_valid())
223 return AUTOMATION_MSG_NAVIGATION_ERROR; 287 return AUTOMATION_MSG_NAVIGATION_ERROR;
224 288
225 IPC::Message* response = NULL; 289 IPC::Message* response = NULL;
290 bool succeeded = sender_->SendAndWaitForResponse(
291 new AutomationMsg_GoForwardRequest(0, handle_), &response,
292 AutomationMsg_GoForwardResponse::ID);
293
294 if (!succeeded)
295 return AUTOMATION_MSG_NAVIGATION_ERROR;
296
297 void* iter = NULL;
226 int navigate_response = AUTOMATION_MSG_NAVIGATION_ERROR; 298 int navigate_response = AUTOMATION_MSG_NAVIGATION_ERROR;
227 if (sender_->SendAndWaitForResponse( 299 response->ReadInt(&iter, &navigate_response);
228 new AutomationMsg_GoForwardRequest(0, handle_), &response, 300
229 AutomationMsg_GoForwardResponse::ID)) { 301 delete response;
230 AutomationMsg_GoForwardResponse::Read(response, &navigate_response);
231 }
232 scoped_ptr<IPC::Message> auto_deleter(response);
233 return navigate_response; 302 return navigate_response;
234 } 303 }
235 304
236 int TabProxy::Reload() { 305 int TabProxy::Reload() {
237 if (!is_valid()) 306 if (!is_valid())
238 return AUTOMATION_MSG_NAVIGATION_ERROR; 307 return AUTOMATION_MSG_NAVIGATION_ERROR;
239 308
240 IPC::Message* response = NULL; 309 IPC::Message* response = NULL;
310 bool succeeded = sender_->SendAndWaitForResponse(
311 new AutomationMsg_ReloadRequest(0, handle_), &response,
312 AutomationMsg_ReloadResponse::ID);
313
314 if (!succeeded)
315 return AUTOMATION_MSG_NAVIGATION_ERROR;
316
317 void* iter = NULL;
241 int navigate_response = AUTOMATION_MSG_NAVIGATION_ERROR; 318 int navigate_response = AUTOMATION_MSG_NAVIGATION_ERROR;
242 if (sender_->SendAndWaitForResponse( 319 response->ReadInt(&iter, &navigate_response);
243 new AutomationMsg_ReloadRequest(0, handle_), &response, 320
244 AutomationMsg_ReloadResponse::ID)) { 321 delete response;
245 AutomationMsg_ReloadResponse::Read(response, &navigate_response);
246 }
247 scoped_ptr<IPC::Message> auto_deleter(response);
248 return navigate_response; 322 return navigate_response;
249 } 323 }
250 324
251 bool TabProxy::GetRedirectsFrom(const GURL& source_url, 325 bool TabProxy::GetRedirectsFrom(const GURL& source_url,
252 std::vector<GURL>* redirects) { 326 std::vector<GURL>* redirects) {
327 std::vector<GURL> output;
328
253 IPC::Message* response = NULL; 329 IPC::Message* response = NULL;
254 bool succeeded = sender_->SendAndWaitForResponse( 330 bool succeeded = sender_->SendAndWaitForResponse(
255 new AutomationMsg_RedirectsFromRequest(0, handle_, source_url), &response, 331 new AutomationMsg_RedirectsFromRequest(0, handle_, source_url), &response,
256 AutomationMsg_RedirectsFromResponse::ID); 332 AutomationMsg_RedirectsFromResponse::ID);
333 if (!succeeded)
334 return false;
257 scoped_ptr<IPC::Message> auto_deleter(response); 335 scoped_ptr<IPC::Message> auto_deleter(response);
258 if (succeeded) { 336
259 succeeded = AutomationMsg_RedirectsFromResponse::Read( 337 void* iter = NULL;
260 response, &succeeded, redirects) && 338 int num_redirects;
261 succeeded; 339 if (!response->ReadInt(&iter, &num_redirects))
340 return false;
341 if (num_redirects < 0)
342 return false; // Negative redirect counts indicate failure.
343
344 for (int i = 0; i < num_redirects; i++) {
345 GURL cur;
346 if (!IPC::ParamTraits<GURL>::Read(response, &iter, &cur))
347 return false;
348 output.push_back(cur);
262 } 349 }
263 350 redirects->swap(output);
264 return succeeded; 351 return true;
265 } 352 }
266 353
267 bool TabProxy::GetCurrentURL(GURL* url) const { 354 bool TabProxy::GetCurrentURL(GURL* url) const {
268 if (!is_valid()) 355 if (!is_valid())
269 return false; 356 return false;
270 357
271 if (!url) { 358 if (!url) {
272 NOTREACHED(); 359 NOTREACHED();
273 return false; 360 return false;
274 } 361 }
275 362
276 IPC::Message* response = NULL; 363 IPC::Message* response = NULL;
277 bool succeeded; 364 bool succeeded = sender_->SendAndWaitForResponse(
278 succeeded = sender_->SendAndWaitForResponse( 365 new AutomationMsg_TabURLRequest(0, handle_), &response,
279 new AutomationMsg_TabURLRequest(0, handle_), &response, 366 AutomationMsg_TabURLResponse::ID);
280 AutomationMsg_TabURLResponse::ID) && 367
281 AutomationMsg_TabURLResponse::Read(response, &succeeded, url); 368 if (!succeeded)
282 scoped_ptr<IPC::Message> auto_deleter(response); 369 return false;
370
371 void* iter = NULL;
372 bool tab_url_success = false;
373 if (response->ReadBool(&iter, &tab_url_success) && tab_url_success) {
374 if (!IPC::ParamTraits<GURL>::Read(response, &iter, url))
375 succeeded = false;
376 } else {
377 succeeded = false;
378 }
379
380 delete response;
283 return succeeded; 381 return succeeded;
284 } 382 }
285 383
286 bool TabProxy::NavigateToURLAsync(const GURL& url) { 384 bool TabProxy::NavigateToURLAsync(const GURL& url) {
287 if (!is_valid()) 385 if (!is_valid())
288 return false; 386 return false;
289 387
290 IPC::Message* response = NULL; 388 IPC::Message* response = NULL;
291 bool status = false; 389 bool succeeded = sender_->SendAndWaitForResponse(
292 if (sender_->SendAndWaitForResponse( 390 new AutomationMsg_NavigationAsyncRequest(0, handle_, url), &response,
293 new AutomationMsg_NavigationAsyncRequest(0, handle_, url), &response, 391 AutomationMsg_NavigationAsyncResponse::ID);
294 AutomationMsg_NavigationAsyncResponse::ID)) { 392
295 AutomationMsg_NavigationAsyncResponse::Read(response, &status); 393 if (!succeeded)
394 return false;
395
396 bool status;
397 if (AutomationMsg_NavigationAsyncResponse::Read(response, &status) &&
398 status) {
399 succeeded = true;
296 } 400 }
297 scoped_ptr<IPC::Message> auto_deleter(response); 401
298 return status; 402 delete response;
403 return succeeded;
299 } 404 }
300 405
301 bool TabProxy::GetHWND(HWND* hwnd) const { 406 bool TabProxy::GetHWND(HWND* hwnd) const {
302 if (!is_valid()) 407 if (!is_valid())
303 return false; 408 return false;
304 if (!hwnd) { 409 if (!hwnd) {
305 NOTREACHED(); 410 NOTREACHED();
306 return false; 411 return false;
307 } 412 }
308 IPC::Message* response = NULL; 413 IPC::Message* response = NULL;
309 bool succeeded = false; 414 bool succeeded = sender_->SendAndWaitForResponse(
310 if (sender_->SendAndWaitForResponse( 415 » new AutomationMsg_TabHWNDRequest(0, handle_), &response,
311 new AutomationMsg_TabHWNDRequest(0, handle_), &response, 416 AutomationMsg_TabHWNDResponse::ID);
312 AutomationMsg_TabHWNDResponse::ID)) { 417 if (!succeeded)
313 succeeded = AutomationMsg_TabHWNDResponse::Read(response, hwnd); 418 return false;
419 void* iter = NULL;
420 HWND tab_hwnd = NULL;
421 if (AutomationMsg_TabHWNDResponse::Read(response, &tab_hwnd) && tab_hwnd) {
422 *hwnd = tab_hwnd;
423 } else {
424 succeeded = false;
314 } 425 }
315 scoped_ptr<IPC::Message> auto_deleter(response); 426
427 delete response;
316 return succeeded; 428 return succeeded;
317 } 429 }
318 430
319 bool TabProxy::GetProcessID(int* process_id) const { 431 bool TabProxy::GetProcessID(int* process_id) const {
320 if (!is_valid()) 432 if (!is_valid())
321 return false; 433 return false;
322 434
323 if (!process_id) { 435 if (!process_id) {
324 NOTREACHED(); 436 NOTREACHED();
325 return false; 437 return false;
326 } 438 }
327 439
328 IPC::Message* response = NULL; 440 IPC::Message* response = NULL;
329 bool succeeded = false; 441 bool succeeded = sender_->SendAndWaitForResponse(
330 if (sender_->SendAndWaitForResponse( 442 new AutomationMsg_TabProcessIDRequest(0, handle_), &response,
331 new AutomationMsg_TabProcessIDRequest(0, handle_), &response, 443 AutomationMsg_TabProcessIDResponse::ID);
332 AutomationMsg_TabProcessIDResponse::ID)) { 444
333 succeeded = AutomationMsg_TabProcessIDResponse::Read(response, process_id); 445 if (!succeeded)
446 return false;
447
448 void* iter = NULL;
449 int pid;
450 if (AutomationMsg_TabProcessIDResponse::Read(response, &pid) && (pid >= 0)) {
451 *process_id = pid;
452 } else {
453 succeeded = false;
334 } 454 }
335 scoped_ptr<IPC::Message> auto_deleter(response); 455
456 delete response;
336 return succeeded; 457 return succeeded;
337 } 458 }
338 459
339 bool TabProxy::ExecuteAndExtractString(const std::wstring& frame_xpath, 460 bool TabProxy::ExecuteAndExtractString(const std::wstring& frame_xpath,
340 const std::wstring& jscript, 461 const std::wstring& jscript,
341 std::wstring* string_value) { 462 std::wstring* string_value) {
342 Value* root = NULL; 463 Value* root = NULL;
343 bool succeeded = ExecuteAndExtractValue(frame_xpath, jscript, &root); 464 bool succeeded = ExecuteAndExtractValue(frame_xpath, jscript, &root);
344 if (!succeeded) 465 if (!succeeded)
345 return false; 466 return false;
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 534
414 if (!value) { 535 if (!value) {
415 NOTREACHED(); 536 NOTREACHED();
416 return false; 537 return false;
417 } 538 }
418 539
419 IPC::Message* response = NULL; 540 IPC::Message* response = NULL;
420 bool succeeded = sender_->SendAndWaitForResponse( 541 bool succeeded = sender_->SendAndWaitForResponse(
421 new AutomationMsg_DomOperationRequest(0, handle_, frame_xpath, jscript), 542 new AutomationMsg_DomOperationRequest(0, handle_, frame_xpath, jscript),
422 &response, AutomationMsg_DomOperationResponse::ID); 543 &response, AutomationMsg_DomOperationResponse::ID);
544
545 void* iter = NULL;
423 std::string json; 546 std::string json;
424 if (succeeded) 547 succeeded = response->ReadString(&iter, &json);
425 succeeded = AutomationMsg_DomOperationResponse::Read(response, &json); 548 if (!succeeded) {
426 scoped_ptr<IPC::Message> auto_deleter(response); 549 delete response;
427 if (!succeeded)
428 return false; 550 return false;
551 }
429 // Wrap |json| in an array before deserializing because valid JSON has an 552 // Wrap |json| in an array before deserializing because valid JSON has an
430 // array or an object as the root. 553 // array or an object as the root.
431 json.insert(0, "["); 554 json.insert(0, "[");
432 json.append("]"); 555 json.append("]");
433 556
434 JSONStringValueSerializer deserializer(json); 557 JSONStringValueSerializer deserializer(json);
435 *value = deserializer.Deserialize(NULL); 558 *value = deserializer.Deserialize(NULL);
559
560 delete response;
436 return *value != NULL; 561 return *value != NULL;
437 } 562 }
438 563
439 bool TabProxy::GetConstrainedWindowCount(int* count) const { 564 bool TabProxy::GetConstrainedWindowCount(int* count) const {
440 if (!is_valid()) 565 if (!is_valid())
441 return false; 566 return false;
442 567
443 if (!count) { 568 if (!count) {
444 NOTREACHED(); 569 NOTREACHED();
445 return false; 570 return false;
446 } 571 }
447 572
448 IPC::Message* response = NULL; 573 IPC::Message* response = NULL;
449 bool succeeded = sender_->SendAndWaitForResponse( 574 bool succeeded = sender_->SendAndWaitForResponse(
450 new AutomationMsg_ConstrainedWindowCountRequest(0, handle_), 575 new AutomationMsg_ConstrainedWindowCountRequest(0, handle_),
451 &response, AutomationMsg_ConstrainedWindowCountResponse::ID) && 576 &response, AutomationMsg_ConstrainedWindowCountResponse::ID);
452 AutomationMsg_ConstrainedWindowCountResponse::Read(response, count); 577
453 scoped_ptr<IPC::Message> auto_deleter(response); 578 void* iter = NULL;
579 int count_response = -1;
580 if (response->ReadInt(&iter, &count_response) &&
581 (count_response >= 0)) {
582 *count = count_response;
583 } else {
584 succeeded = false;
585 }
586
587 delete response;
454 return succeeded; 588 return succeeded;
455 } 589 }
456 590
457 ConstrainedWindowProxy* TabProxy::GetConstrainedWindow( 591 ConstrainedWindowProxy* TabProxy::GetConstrainedWindow(
458 int window_index) const { 592 int window_index) const {
459 if (!is_valid()) 593 if (!is_valid())
460 return NULL; 594 return NULL;
461 595
462 IPC::Message* response = NULL; 596 IPC::Message* response = NULL;
597 bool succeeded = sender_->SendAndWaitForResponse(
598 new AutomationMsg_ConstrainedWindowRequest(0, handle_, window_index),
599 &response, AutomationMsg_ConstrainedWindowResponse::ID);
600 if (!succeeded)
601 return NULL;
602
603 void* iter = NULL;
463 int handle; 604 int handle;
464 if (sender_->SendAndWaitForResponse( 605
465 new AutomationMsg_ConstrainedWindowRequest(0, handle_, window_index), 606 scoped_ptr<IPC::Message> response_deleter(response); // Ensure deleted.
466 &response, AutomationMsg_ConstrainedWindowResponse::ID)) { 607 if (response->ReadInt(&iter, &handle) && (handle != 0))
467 scoped_ptr<IPC::Message> response_deleter(response); 608 return new ConstrainedWindowProxy(sender_, tracker_, handle);
468 if (AutomationMsg_ConstrainedWindowResponse::Read(response, &handle))
469 return new ConstrainedWindowProxy(sender_, tracker_, handle);
470 }
471 return NULL; 609 return NULL;
472 } 610 }
473 611
474 bool TabProxy::WaitForChildWindowCountToChange(int count, int* new_count, 612 bool TabProxy::WaitForChildWindowCountToChange(int count, int* new_count,
475 int wait_timeout) { 613 int wait_timeout) {
476 int intervals = std::min(wait_timeout/automation::kSleepTime, 1); 614 int intervals = std::min(wait_timeout/automation::kSleepTime, 1);
477 for (int i = 0; i < intervals; ++i) { 615 for (int i = 0; i < intervals; ++i) {
478 Sleep(automation::kSleepTime); 616 Sleep(automation::kSleepTime);
479 bool succeeded = GetConstrainedWindowCount(new_count); 617 bool succeeded = GetConstrainedWindowCount(new_count);
480 if (!succeeded) return false; 618 if (!succeeded) return false;
481 if (count != *new_count) return true; 619 if (count != *new_count) return true;
482 } 620 }
483 // Constrained Window count did not change, return false. 621 // Constrained Window count did not change, return false.
484 return false; 622 return false;
485 } 623 }
486 624
487 bool TabProxy::GetCookies(const GURL& url, std::string* cookies) { 625 bool TabProxy::GetCookies(const GURL& url, std::string* cookies) {
488 if (!is_valid()) 626 if (!is_valid())
489 return false; 627 return false;
490 628
491 IPC::Message* response = NULL; 629 IPC::Message* response = NULL;
492 int size;
493 bool succeeded = sender_->SendAndWaitForResponse( 630 bool succeeded = sender_->SendAndWaitForResponse(
494 new AutomationMsg_GetCookiesRequest(0, url, handle_), &response, 631 new AutomationMsg_GetCookiesRequest(0, url, handle_), &response,
495 AutomationMsg_GetCookiesResponse::ID) && 632 AutomationMsg_GetCookiesResponse::ID);
496 AutomationMsg_GetCookiesResponse::Read(response, &size, cookies) && 633
497 size >= 0; 634 if (succeeded) {
498 scoped_ptr<IPC::Message> response_deleter(response); 635 void* iter = NULL;
636 int size;
637 std::string local_value;
638
639 if (response->ReadInt(&iter, &size) && size >=0) {
640 if (!response->ReadString(&iter, cookies)) {
641 succeeded = false;
642 }
643 } else {
644 succeeded = false;
645 }
646 }
647
648 delete response;
499 return succeeded; 649 return succeeded;
500 } 650 }
501 651
502 bool TabProxy::GetCookieByName(const GURL& url, 652 bool TabProxy::GetCookieByName(const GURL& url,
503 const std::string& name, 653 const std::string& name,
504 std::string* cookie) { 654 std::string* cookie) {
505 std::string cookies; 655 std::string cookies;
506 if (!GetCookies(url, &cookies)) 656 if (!GetCookies(url, &cookies))
507 return false; 657 return false;
508 658
509 std::string namestr = name + "="; 659 std::string namestr = name + "=";
510 std::string::size_type idx = cookies.find(namestr); 660 std::string::size_type idx = cookies.find(namestr);
511 if (idx != std::string::npos) { 661 if (idx != std::string::npos) {
512 cookies.erase(0, idx + namestr.length()); 662 cookies.erase(0, idx + namestr.length());
513 *cookie = cookies.substr(0, cookies.find(";")); 663 *cookie = cookies.substr(0, cookies.find(";"));
514 } else { 664 } else {
515 cookie->clear(); 665 cookie->clear();
516 } 666 }
517 667
518 return true; 668 return true;
519 } 669 }
520 670
521 bool TabProxy::SetCookie(const GURL& url, const std::string& value) { 671 bool TabProxy::SetCookie(const GURL& url, const std::string& value) {
522 IPC::Message* response = NULL; 672 IPC::Message* response = NULL;
673 bool succeeded = sender_->SendAndWaitForResponse(
674 new AutomationMsg_SetCookieRequest(0, url, value, handle_), &response,
675 AutomationMsg_SetCookieResponse::ID);
676 if (!succeeded)
677 return false;
678
679 void* iter = NULL;
523 int response_value; 680 int response_value;
524 bool succeeded = sender_->SendAndWaitForResponse( 681
525 new AutomationMsg_SetCookieRequest(0, url, value, handle_), &response, 682 if (!response->ReadInt(&iter, &response_value) || response_value < 0) {
526 AutomationMsg_SetCookieResponse::ID) && 683 succeeded = false;
527 AutomationMsg_SetCookieResponse::Read(response, &response_value) && 684 }
528 response_value >= 0; 685
529 scoped_ptr<IPC::Message> response_deleter(response); 686 delete response;
530 return succeeded; 687 return succeeded;
531 } 688 }
532 689
533 int TabProxy::InspectElement(int x, int y) { 690 int TabProxy::InspectElement(int x, int y) {
534 if (!is_valid()) 691 if (!is_valid())
535 return -1; 692 return -1;
536 693
537 IPC::Message* response = NULL; 694 IPC::Message* response = NULL;
538 int ret = -1; 695 bool succeeded = sender_->SendAndWaitForResponse(
539 if (sender_->SendAndWaitForResponse(
540 new AutomationMsg_InspectElementRequest(0, handle_, x, y), 696 new AutomationMsg_InspectElementRequest(0, handle_, x, y),
541 &response, AutomationMsg_InspectElementResponse::ID)) { 697 &response, AutomationMsg_InspectElementResponse::ID);
542 AutomationMsg_InspectElementResponse::Read(response, &ret); 698 if (!succeeded)
543 } 699 return -1;
544 scoped_ptr<IPC::Message> response_deleter(response); 700
701 int ret;
702 AutomationMsg_InspectElementResponse::Read(response, &ret);
545 return ret; 703 return ret;
546 } 704 }
547 705
548 bool TabProxy::GetDownloadDirectory(std::wstring* directory) { 706 bool TabProxy::GetDownloadDirectory(std::wstring* download_directory) {
549 DCHECK(directory); 707 DCHECK(download_directory);
550 if (!is_valid()) 708 if (!is_valid())
551 return false; 709 return false;
552 710
553 IPC::Message* response = NULL; 711 IPC::Message* response = NULL;
554 bool succeeded = sender_->SendAndWaitForResponse( 712 bool succeeded =
555 new AutomationMsg_DownloadDirectoryRequest(0, handle_), &response, 713 sender_->SendAndWaitForResponse(
556 AutomationMsg_DownloadDirectoryResponse::ID) && 714 new AutomationMsg_DownloadDirectoryRequest(0, handle_),
557 AutomationMsg_DownloadDirectoryResponse::Read(response, directory); 715 &response,
558 scoped_ptr<IPC::Message> response_deleter(response); 716 AutomationMsg_DownloadDirectoryResponse::ID);
559 return succeeded; 717 if (!succeeded)
718 return false;
719
720 void* iter = NULL;
721 response->ReadWString(&iter, download_directory);
722 delete response;
723 return true;
560 } 724 }
561 725
562 bool TabProxy::ShowInterstitialPage(const std::string& html_text, 726 bool TabProxy::ShowInterstitialPage(const std::string& html_text,
563 int timeout_ms) { 727 int timeout_ms) {
564 if (!is_valid()) 728 if (!is_valid())
565 return false; 729 return false;
566 730
567 bool is_timeout = false; 731 bool is_timeout = false;
568 IPC::Message* response = NULL; 732 IPC::Message* response = NULL;
569 bool succeeded = sender_->SendAndWaitForResponseWithTimeout( 733 bool succeeded = sender_->SendAndWaitForResponseWithTimeout(
570 new AutomationMsg_ShowInterstitialPageRequest(0, handle_, html_text), 734 new AutomationMsg_ShowInterstitialPageRequest(0, handle_, html_text),
571 &response, AutomationMsg_ShowInterstitialPageResponse::ID, timeout_ms, 735 &response,
572 &is_timeout) && 736 AutomationMsg_ShowInterstitialPageResponse::ID, timeout_ms, &is_timeout);
573 AutomationMsg_ShowInterstitialPageResponse::Read(response, &succeeded) && 737
574 succeeded; 738 if (!succeeded || !is_timeout)
575 scoped_ptr<IPC::Message> response_deleter(response); 739 return false;
576 return succeeded; 740
741 void* iter = NULL;
742 bool result = true;
743 response->ReadBool(&iter, &result);
744
745 delete response;
746 return result;
577 } 747 }
578 748
579 bool TabProxy::HideInterstitialPage() { 749 bool TabProxy::HideInterstitialPage() {
580 if (!is_valid()) 750 if (!is_valid())
581 return false; 751 return false;
582 752
583 IPC::Message* response = NULL; 753 IPC::Message* response = NULL;
584 bool result; 754 bool succeeded =
585 bool succeeded = sender_->SendAndWaitForResponse( 755 sender_->SendAndWaitForResponse(
586 new AutomationMsg_HideInterstitialPageRequest(0, handle_), 756 new AutomationMsg_HideInterstitialPageRequest(0, handle_),
587 &response, AutomationMsg_HideInterstitialPageResponse::ID) && 757 &response,
588 AutomationMsg_HideInterstitialPageResponse::Read(response, &result) && 758 AutomationMsg_HideInterstitialPageResponse::ID);
589 result; 759
590 scoped_ptr<IPC::Message> response_deleter(response); 760 if (!succeeded)
591 return succeeded; 761 return false;
762
763 void* iter = NULL;
764 bool result = true;
765 response->ReadBool(&iter, &result);
766
767 delete response;
768 return result;
592 } 769 }
593 770
594 bool TabProxy::Close() { 771 bool TabProxy::Close() {
595 return Close(false); 772 return Close(false);
596 } 773 }
597 774
598 bool TabProxy::Close(bool wait_until_closed) { 775 bool TabProxy::Close(bool wait_until_closed) {
599 if (!is_valid()) 776 if (!is_valid())
600 return false; 777 return false;
601 778
602 IPC::Message* response = NULL; 779 IPC::Message* response = NULL;
603 bool succeeded = sender_->SendAndWaitForResponse( 780 bool succeeded =
604 new AutomationMsg_CloseTabRequest(0, handle_, wait_until_closed), 781 sender_->SendAndWaitForResponse(
605 &response, AutomationMsg_CloseTabResponse::ID) && 782 new AutomationMsg_CloseTabRequest(0, handle_, wait_until_closed),
606 AutomationMsg_CloseTabResponse::Read(response, &succeeded) && 783 &response,
607 succeeded; 784 AutomationMsg_CloseTabResponse::ID);
608 scoped_ptr<IPC::Message> response_deleter(response); 785
609 return succeeded; 786 if (!succeeded)
787 return false;
788
789 void* iter = NULL;
790 bool result = true;
791 response->ReadBool(&iter, &result);
792
793 delete response;
794 return result;
610 } 795 }
611 796
612 bool TabProxy::SetAccelerators(HACCEL accel_table, 797 bool TabProxy::SetAccelerators(HACCEL accel_table,
613 int accel_table_entry_count) { 798 int accel_table_entry_count) {
614 if (!is_valid()) 799 if (!is_valid())
615 return false; 800 return false;
616 801
617 IPC::Message* response = NULL; 802 IPC::Message* response = NULL;
618 bool is_timeout = false; 803 bool is_timeout = false;
619 bool succeeded = sender_->SendAndWaitForResponseWithTimeout( 804 bool succeeded = sender_->SendAndWaitForResponseWithTimeout(
620 new AutomationMsg_SetAcceleratorsForTab( 805 new AutomationMsg_SetAcceleratorsForTab(0, handle_, accel_table,
621 0, handle_, accel_table, accel_table_entry_count), 806 accel_table_entry_count),
622 &response, AutomationMsg_SetAcceleratorsForTabResponse::ID, INFINITE, 807 &response,
623 &is_timeout) && 808 AutomationMsg_SetAcceleratorsForTabResponse::ID, INFINITE, &is_timeout);
624 AutomationMsg_SetAcceleratorsForTabResponse::Read(response, &succeeded) && 809
625 succeeded; 810 if (!succeeded)
626 scoped_ptr<IPC::Message> response_deleter(response); 811 return AUTOMATION_MSG_NAVIGATION_ERROR;
627 return succeeded; 812
813 void* iter = NULL;
814 bool set_accel_response = false;
815 response->ReadBool(&iter, &set_accel_response);
816
817 delete response;
818 return set_accel_response;
628 } 819 }
629 820
630 bool TabProxy::ProcessUnhandledAccelerator(const MSG& msg) { 821 bool TabProxy::ProcessUnhandledAccelerator(const MSG& msg) {
631 if (!is_valid()) 822 if (!is_valid())
632 return false; 823 return false;
633 return sender_->Send( 824 return sender_->Send(
634 new AutomationMsg_ProcessUnhandledAccelerator(0, handle_, msg)); 825 new AutomationMsg_ProcessUnhandledAccelerator(0, handle_, msg));
635 // This message expects no response 826 // This message expects no response
636 } 827 }
637 828
638 bool TabProxy::WaitForTabToBeRestored(uint32 timeout_ms) { 829 bool TabProxy::WaitForTabToBeRestored(uint32 timeout_ms) {
639 if (!is_valid()) 830 if (!is_valid())
640 return false; 831 return false;
641 IPC::Message* response = NULL; 832 IPC::Message* response = NULL;
642 bool is_timeout; 833 bool is_timeout;
643 bool succeeded = sender_->SendAndWaitForResponseWithTimeout( 834 return sender_->SendAndWaitForResponseWithTimeout(
644 new AutomationMsg_WaitForTabToBeRestored(0, handle_), &response, 835 new AutomationMsg_WaitForTabToBeRestored(0, handle_), &response,
645 AutomationMsg_TabFinishedRestoring::ID, timeout_ms, &is_timeout); 836 AutomationMsg_TabFinishedRestoring::ID, timeout_ms, &is_timeout);
646 scoped_ptr<IPC::Message> response_deleter(response);
647 return succeeded;
648 } 837 }
649 838
650 bool TabProxy::GetSecurityState(SecurityStyle* security_style, 839 bool TabProxy::GetSecurityState(SecurityStyle* security_style,
651 int* ssl_cert_status, 840 int* ssl_cert_status,
652 int* mixed_content_state) { 841 int* mixed_content_state) {
653 DCHECK(security_style && ssl_cert_status && mixed_content_state); 842 DCHECK(security_style && ssl_cert_status && mixed_content_state);
654 843
655 if (!is_valid()) 844 if (!is_valid())
656 return false; 845 return false;
657 846
658 IPC::Message* response = NULL; 847 IPC::Message* response = NULL;
659 bool is_timeout = false; 848 bool is_timeout = false;
660 int value; 849 bool succeeded = sender_->SendAndWaitForResponseWithTimeout(
661 bool succeeded;
662 succeeded = sender_->SendAndWaitForResponseWithTimeout(
663 new AutomationMsg_GetSecurityState(0, handle_), 850 new AutomationMsg_GetSecurityState(0, handle_),
664 &response, 851 &response,
665 AutomationMsg_GetSecurityStateResponse::ID, INFINITE, &is_timeout) && 852 AutomationMsg_GetSecurityStateResponse::ID, INFINITE, &is_timeout);
666 AutomationMsg_GetSecurityStateResponse::Read(
667 response, &succeeded, &value, ssl_cert_status, mixed_content_state);
668 if (succeeded)
669 *security_style = static_cast<SecurityStyle>(value);
670 scoped_ptr<IPC::Message> auto_deleter(response); 853 scoped_ptr<IPC::Message> auto_deleter(response);
671 return succeeded; 854
855 if (!succeeded)
856 return false;
857
858 void* iter = NULL;
859 int value;
860
861 response->ReadBool(&iter, &succeeded);
862 if (!succeeded)
863 return false;
864 response->ReadInt(&iter, &value);
865 *security_style = static_cast<SecurityStyle>(value);
866 response->ReadInt(&iter, ssl_cert_status);
867 response->ReadInt(&iter, mixed_content_state);
868
869 return true;
672 } 870 }
673 871
674 bool TabProxy::GetPageType(NavigationEntry::PageType* page_type) { 872 bool TabProxy::GetPageType(NavigationEntry::PageType* page_type) {
675 DCHECK(page_type); 873 DCHECK(page_type);
676 874
677 if (!is_valid()) 875 if (!is_valid())
678 return false; 876 return false;
679 877
680 IPC::Message* response = NULL; 878 IPC::Message* response = NULL;
681 bool is_timeout = false; 879 bool is_timeout = false;
682 int value; 880 bool succeeded = sender_->SendAndWaitForResponseWithTimeout(
683 bool succeeded;
684 succeeded = sender_->SendAndWaitForResponseWithTimeout(
685 new AutomationMsg_GetPageType(0, handle_), 881 new AutomationMsg_GetPageType(0, handle_),
686 &response, 882 &response,
687 AutomationMsg_GetPageTypeResponse::ID, INFINITE, &is_timeout) && 883 AutomationMsg_GetPageTypeResponse::ID, INFINITE, &is_timeout);
688 AutomationMsg_GetPageTypeResponse::Read(response, &succeeded, &value);
689 scoped_ptr<IPC::Message> auto_deleter(response); 884 scoped_ptr<IPC::Message> auto_deleter(response);
690 if (succeeded) 885
691 *page_type = static_cast<NavigationEntry::PageType>(value); 886 if (!succeeded)
692 return succeeded; 887 return false;
888
889 void* iter = NULL;
890 int value;
891 response->ReadBool(&iter, &succeeded);
892 if (!succeeded)
893 return false;
894 response->ReadInt(&iter, &value);
895 *page_type = static_cast<NavigationEntry::PageType>(value);
896 return true;
693 } 897 }
694 898
695 bool TabProxy::TakeActionOnSSLBlockingPage(bool proceed) { 899 bool TabProxy::TakeActionOnSSLBlockingPage(bool proceed) {
696 if (!is_valid()) 900 if (!is_valid())
697 return false; 901 return false;
698 902
699 IPC::Message* response = NULL; 903 IPC::Message* response = NULL;
700 bool timeout = false; 904 bool is_timeout = false;
701 bool success = sender_->SendAndWaitForResponseWithTimeout( 905 bool succeeded = sender_->SendAndWaitForResponseWithTimeout(
702 new AutomationMsg_ActionOnSSLBlockingPage(0, handle_, proceed), 906 new AutomationMsg_ActionOnSSLBlockingPage(0, handle_, proceed),
703 &response, 907 &response,
704 AutomationMsg_ActionOnSSLBlockingPageResponse::ID, INFINITE, &timeout) && 908 AutomationMsg_ActionOnSSLBlockingPageResponse::ID, INFINITE, &is_timeout);
705 AutomationMsg_ActionOnSSLBlockingPageResponse::Read(response, &success) &&
706 success;
707 scoped_ptr<IPC::Message> auto_deleter(response); 909 scoped_ptr<IPC::Message> auto_deleter(response);
708 return success; 910
911 if (!succeeded)
912 return false;
913
914 void* iter = NULL;
915 bool status = false;
916 response->ReadBool(&iter, &status);
917
918 return status;
709 } 919 }
710 920
711 bool TabProxy::PrintNow() { 921 bool TabProxy::PrintNow() {
712 if (!is_valid()) 922 if (!is_valid())
713 return false; 923 return false;
714 924
715 IPC::Message* response = NULL; 925 IPC::Message* response = NULL;
716 bool succeeded = sender_->SendAndWaitForResponse( 926 bool succeeded = sender_->SendAndWaitForResponse(
717 new AutomationMsg_PrintNowRequest(0, handle_), &response, 927 new AutomationMsg_PrintNowRequest(0, handle_), &response,
718 AutomationMsg_PrintNowResponse::ID) && 928 AutomationMsg_PrintNowResponse::ID);
719 AutomationMsg_PrintNowResponse::Read(response, &succeeded) &&
720 succeeded;
721 scoped_ptr<IPC::Message> auto_deleter(response); 929 scoped_ptr<IPC::Message> auto_deleter(response);
722 return succeeded; 930 if (!succeeded)
931 return false;
932
933 void* iter = NULL;
934 succeeded = false;
935 return response->ReadBool(&iter, &succeeded) && succeeded;
723 } 936 }
724 937
725 bool TabProxy::SavePage(const std::wstring& file_name, 938 bool TabProxy::SavePage(const std::wstring& file_name,
726 const std::wstring& dir_path, 939 const std::wstring& dir_path,
727 SavePackage::SavePackageType type) { 940 SavePackage::SavePackageType type) {
728 if (!is_valid()) 941 if (!is_valid())
729 return false; 942 return false;
730 943
731 IPC::Message* response = NULL; 944 IPC::Message* response = NULL;
732 bool succeeded = sender_->SendAndWaitForResponse( 945 bool succeeded = sender_->SendAndWaitForResponse(
733 new AutomationMsg_SavePageRequest( 946 new AutomationMsg_SavePageRequest(0, handle_, file_name,
734 0, handle_, file_name, dir_path, static_cast<int>(type)), 947 dir_path, static_cast<int>(type)),
735 &response, AutomationMsg_SavePageResponse::ID) && 948 &response,
736 AutomationMsg_SavePageResponse::Read(response, &succeeded) && 949 AutomationMsg_SavePageResponse::ID);
737 succeeded; 950
738 scoped_ptr<IPC::Message> auto_deleter(response); 951 if (!succeeded)
952 return false;
953
954 void* iter = NULL;
955 response->ReadBool(&iter, &succeeded);
956 delete response;
957
739 return succeeded; 958 return succeeded;
740 } 959 }
741 960
742 void TabProxy::HandleMessageFromExternalHost(AutomationHandle handle, 961 void TabProxy::HandleMessageFromExternalHost(AutomationHandle handle,
743 const std::string& target, 962 const std::string& target,
744 const std::string& message) { 963 const std::string& message) {
745 if (!is_valid()) 964 if (!is_valid())
746 return; 965 return;
747 966
748 bool succeeded = 967 bool succeeded =
749 sender_->Send(new AutomationMsg_HandleMessageFromExternalHost(0, handle, 968 sender_->Send(new AutomationMsg_HandleMessageFromExternalHost(0, handle,
750 target, 969 target,
751 message)); 970 message));
752 DCHECK(succeeded); 971 DCHECK(succeeded);
753 } 972 }
754 973
755 bool TabProxy::GetSSLInfoBarCount(int* count) { 974 bool TabProxy::GetSSLInfoBarCount(int* count) {
756 if (!is_valid()) 975 if (!is_valid())
757 return false; 976 return false;
758 977
759 IPC::Message* response = NULL; 978 IPC::Message* response = NULL;
760 bool success = sender_->SendAndWaitForResponse( 979 bool success = sender_->SendAndWaitForResponse(
761 new AutomationMsg_GetSSLInfoBarCountRequest(0, handle_), 980 new AutomationMsg_GetSSLInfoBarCountRequest(0, handle_),
762 &response, AutomationMsg_GetSSLInfoBarCountResponse::ID) && 981 &response,
763 AutomationMsg_GetSSLInfoBarCountResponse::Read(response, count) && 982 AutomationMsg_GetSSLInfoBarCountResponse::ID);
764 count >= 0;
765 scoped_ptr<IPC::Message> auto_deleter(response); 983 scoped_ptr<IPC::Message> auto_deleter(response);
766 return success; 984 if (!success)
985 return false;
986
987 void* iter = NULL;
988 response->ReadInt(&iter, count);
989 return true;
767 } 990 }
768 991
769 bool TabProxy::ClickSSLInfoBarLink(int info_bar_index, 992 bool TabProxy::ClickSSLInfoBarLink(int info_bar_index,
770 bool wait_for_navigation) { 993 bool wait_for_navigation) {
771 if (!is_valid()) 994 if (!is_valid())
772 return false; 995 return false;
773 996
774 IPC::Message* response = NULL; 997 IPC::Message* response = NULL;
775 bool success = sender_->SendAndWaitForResponse( 998 bool success = sender_->SendAndWaitForResponse(
776 new AutomationMsg_ClickSSLInfoBarLinkRequest( 999 new AutomationMsg_ClickSSLInfoBarLinkRequest(0, handle_,
777 0, handle_, info_bar_index, wait_for_navigation), 1000 info_bar_index,
778 &response, AutomationMsg_ClickSSLInfoBarLinkResponse::ID) && 1001 wait_for_navigation),
779 AutomationMsg_ClickSSLInfoBarLinkResponse::Read(response, &success) && 1002 &response,
780 success; 1003 AutomationMsg_ClickSSLInfoBarLinkResponse::ID);
781 scoped_ptr<IPC::Message> auto_deleter(response); 1004 scoped_ptr<IPC::Message> auto_deleter(response);
1005 if (!success)
1006 return false;
1007
1008 void* iter = NULL;
1009 response->ReadBool(&iter, &success);
782 return success; 1010 return success;
783 } 1011 }
784 1012
785 bool TabProxy::GetLastNavigationTime(int64* nav_time) { 1013 bool TabProxy::GetLastNavigationTime(int64* last_navigation_time) {
786 if (!is_valid()) 1014 if (!is_valid())
787 return false; 1015 return false;
788 1016
789 IPC::Message* response = NULL; 1017 IPC::Message* response = NULL;
790 bool success = sender_->SendAndWaitForResponse( 1018 bool success = sender_->SendAndWaitForResponse(
791 new AutomationMsg_GetLastNavigationTimeRequest(0, handle_), 1019 new AutomationMsg_GetLastNavigationTimeRequest(0, handle_),
792 &response, AutomationMsg_GetLastNavigationTimeResponse::ID) && 1020 &response,
793 AutomationMsg_GetLastNavigationTimeResponse::Read(response, nav_time); 1021 AutomationMsg_GetLastNavigationTimeResponse::ID);
794 scoped_ptr<IPC::Message> auto_deleter(response); 1022 scoped_ptr<IPC::Message> auto_deleter(response);
795 return success; 1023 if (!success)
1024 return false;
1025
1026 void* iter = NULL;
1027 response->ReadInt64(&iter, last_navigation_time);
1028 return true;
796 } 1029 }
797 1030
798 bool TabProxy::WaitForNavigation(int64 last_navigation_time) { 1031 bool TabProxy::WaitForNavigation(int64 last_navigation_time) {
799 if (!is_valid()) 1032 if (!is_valid())
800 return false; 1033 return false;
801 1034
802 IPC::Message* response = NULL; 1035 IPC::Message* response = NULL;
803 bool success = sender_->SendAndWaitForResponse( 1036 bool success = sender_->SendAndWaitForResponse(
804 new AutomationMsg_WaitForNavigationRequest( 1037 new AutomationMsg_WaitForNavigationRequest(0,
805 0, handle_, last_navigation_time), 1038 handle_,
806 &response, AutomationMsg_WaitForNavigationResponse::ID) && 1039 last_navigation_time),
807 AutomationMsg_WaitForNavigationResponse::Read(response, &success) && 1040 &response,
808 success; 1041 AutomationMsg_WaitForNavigationResponse::ID);
809 scoped_ptr<IPC::Message> auto_deleter(response); 1042 scoped_ptr<IPC::Message> auto_deleter(response);
1043 if (!success)
1044 return false;
1045
1046 void* iter = NULL;
1047 response->ReadBool(&iter, &success);
810 return success; 1048 return success;
811 } 1049 }
812 1050
813 bool TabProxy::GetPageCurrentEncoding(std::wstring* encoding) { 1051 bool TabProxy::GetPageCurrentEncoding(std::wstring* encoding) {
814 if (!is_valid()) 1052 if (!is_valid())
815 return false; 1053 return false;
816 1054
817 IPC::Message* response; 1055 IPC::Message* response;
818 bool succeeded = sender_->SendAndWaitForResponse( 1056 bool succeeded = sender_->SendAndWaitForResponse(
819 new AutomationMsg_GetPageCurrentEncodingRequest(0, handle_), 1057 new AutomationMsg_GetPageCurrentEncodingRequest(0, handle_),
820 &response, AutomationMsg_GetPageCurrentEncodingResponse::ID) && 1058 &response,
821 AutomationMsg_GetPageCurrentEncodingResponse::Read(response, encoding); 1059 AutomationMsg_GetPageCurrentEncodingResponse::ID);
822 scoped_ptr<IPC::Message> response_deleter(response); 1060
1061 scoped_ptr<IPC::Message> response_deleter(response); // Delete on return.
1062 if (!succeeded)
1063 return false;
1064
1065 void* iter = NULL;
1066 succeeded = response->ReadWString(&iter, encoding);
823 return succeeded; 1067 return succeeded;
824 } 1068 }
825 1069
826 bool TabProxy::OverrideEncoding(const std::wstring& encoding) { 1070 bool TabProxy::OverrideEncoding(const std::wstring& encoding) {
827 if (!is_valid()) 1071 if (!is_valid())
828 return false; 1072 return false;
829 1073
830 IPC::Message* response; 1074 IPC::Message* response;
831 bool succeeded = sender_->SendAndWaitForResponse( 1075 bool succeeded = sender_->SendAndWaitForResponse(
832 new AutomationMsg_OverrideEncodingRequest(0, handle_, encoding), 1076 new AutomationMsg_OverrideEncodingRequest(0, handle_, encoding),
833 &response, AutomationMsg_OverrideEncodingResponse::ID) && 1077 &response,
834 AutomationMsg_OverrideEncodingResponse::Read(response, &succeeded) && 1078 AutomationMsg_OverrideEncodingResponse::ID);
835 succeeded; 1079
836 scoped_ptr<IPC::Message> response_deleter(response); 1080 scoped_ptr<IPC::Message> response_deleter(response); // Delete on return.
837 return succeeded; 1081 if (!succeeded)
1082 return false;
1083
1084 void* iter = NULL;
1085 bool successed_set_value = false;
1086 succeeded = response->ReadBool(&iter, &successed_set_value);
1087 return succeeded && successed_set_value;
838 } 1088 }
OLDNEW
« no previous file with comments | « chrome/test/automation/automation_proxy.cc ('k') | chrome/test/unit/unit_tests.scons » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698