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

Side by Side Diff: chrome/test/webdriver/webdriver_session.cc

Issue 8890026: Allow chromedriver to set local state preferences. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ... Created 9 years 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/webdriver_session.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) 2011 The Chromium Authors. All rights reserved. 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 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/webdriver_session.h" 5 #include "chrome/test/webdriver/webdriver_session.h"
6 6
7 #include <sstream> 7 #include <sstream>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 45
46 FrameId::FrameId() {} 46 FrameId::FrameId() {}
47 47
48 FrameId::FrameId(const WebViewId& view_id, const FramePath& frame_path) 48 FrameId::FrameId(const WebViewId& view_id, const FramePath& frame_path)
49 : view_id(view_id), 49 : view_id(view_id),
50 frame_path(frame_path) { 50 frame_path(frame_path) {
51 } 51 }
52 52
53 Session::Options::Options() 53 Session::Options::Options()
54 : use_native_events(false), 54 : use_native_events(false),
55 load_async(false) { 55 load_async(false),
56 no_website_testing_defaults(false) {
56 } 57 }
57 58
58 Session::Options::~Options() { 59 Session::Options::~Options() {
59 } 60 }
60 61
61 Session::Session(const Options& options) 62 Session::Session(const Options& options)
62 : id_(GenerateRandomID()), 63 : id_(GenerateRandomID()),
63 current_target_(FrameId(WebViewId(), FramePath())), 64 current_target_(FrameId(WebViewId(), FramePath())),
64 thread_(id_.c_str()), 65 thread_(id_.c_str()),
65 async_script_timeout_(0), 66 async_script_timeout_(0),
66 implicit_wait_(0), 67 implicit_wait_(0),
67 has_alert_prompt_text_(false), 68 has_alert_prompt_text_(false),
68 options_(options) { 69 options_(options) {
69 SessionManager::GetInstance()->Add(this); 70 SessionManager::GetInstance()->Add(this);
70 } 71 }
71 72
72 Session::~Session() { 73 Session::~Session() {
73 SessionManager::GetInstance()->Remove(id_); 74 SessionManager::GetInstance()->Remove(id_);
74 } 75 }
75 76
76 Error* Session::Init(const Automation::BrowserOptions& options) { 77 Error* Session::Init(const Automation::BrowserOptions& options) {
77 if (!thread_.Start()) { 78 if (!thread_.Start()) {
78 delete this; 79 delete this;
79 return new Error(kUnknownError, "Cannot start session thread"); 80 return new Error(kUnknownError, "Cannot start session thread");
80 } 81 }
81 82
82 Error* error = NULL; 83 Error* error = NULL;
83 RunSessionTask(NewRunnableMethod( 84 RunSessionTask(base::Bind(
84 this,
85 &Session::InitOnSessionThread, 85 &Session::InitOnSessionThread,
86 base::Unretained(this),
86 options, 87 options,
87 &error)); 88 &error));
89
90 if (!error)
91 error = PostBrowserStartInit();
92
88 if (error) 93 if (error)
89 Terminate(); 94 Terminate();
90 return error; 95 return error;
91 } 96 }
92 97
93 Error* Session::BeforeExecuteCommand() { 98 Error* Session::BeforeExecuteCommand() {
94 Error* error = AfterExecuteCommand(); 99 Error* error = AfterExecuteCommand();
95 if (!error) { 100 if (!error) {
96 scoped_ptr<Error> switch_error(SwitchToTopFrameIfCurrentFrameInvalid()); 101 scoped_ptr<Error> switch_error(SwitchToTopFrameIfCurrentFrameInvalid());
97 if (switch_error.get()) { 102 if (switch_error.get()) {
(...skipping 13 matching lines...) Expand all
111 Error* error = NULL; 116 Error* error = NULL;
112 if (!options_.load_async) { 117 if (!options_.load_async) {
113 LOG(INFO) << "Waiting for the page to stop loading"; 118 LOG(INFO) << "Waiting for the page to stop loading";
114 error = WaitForAllViewsToStopLoading(); 119 error = WaitForAllViewsToStopLoading();
115 LOG(INFO) << "Done waiting for the page to stop loading"; 120 LOG(INFO) << "Done waiting for the page to stop loading";
116 } 121 }
117 return error; 122 return error;
118 } 123 }
119 124
120 void Session::Terminate() { 125 void Session::Terminate() {
121 RunSessionTask(NewRunnableMethod( 126 RunSessionTask(base::Bind(
122 this, 127 &Session::TerminateOnSessionThread,
123 &Session::TerminateOnSessionThread)); 128 base::Unretained(this)));
124 delete this; 129 delete this;
125 } 130 }
126 131
127 Error* Session::ExecuteScript(const FrameId& frame_id, 132 Error* Session::ExecuteScript(const FrameId& frame_id,
128 const std::string& script, 133 const std::string& script,
129 const ListValue* const args, 134 const ListValue* const args,
130 Value** value) { 135 Value** value) {
131 std::string args_as_json; 136 std::string args_as_json;
132 base::JSONWriter::Write(static_cast<const Value* const>(args), 137 base::JSONWriter::Write(static_cast<const Value* const>(args),
133 /*pretty_print=*/false, 138 /*pretty_print=*/false,
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 " throw new Error('Failed to send keys because cannot focus element');" 256 " throw new Error('Failed to send keys because cannot focus element');"
252 "}"; 257 "}";
253 error = ExecuteScriptAndParse(current_target_, 258 error = ExecuteScriptAndParse(current_target_,
254 kFocusScript, 259 kFocusScript,
255 "focusElement", 260 "focusElement",
256 CreateListValueFrom(element), 261 CreateListValueFrom(element),
257 CreateDirectValueParser(kSkipParsing)); 262 CreateDirectValueParser(kSkipParsing));
258 if (error) 263 if (error)
259 return error; 264 return error;
260 265
261 RunSessionTask(NewRunnableMethod( 266 RunSessionTask(base::Bind(
262 this,
263 &Session::SendKeysOnSessionThread, 267 &Session::SendKeysOnSessionThread,
268 base::Unretained(this),
264 keys, 269 keys,
265 &error)); 270 &error));
266 return error; 271 return error;
267 } 272 }
268 273
269 Error* Session::DragAndDropFilePaths( 274 Error* Session::DragAndDropFilePaths(
270 const Point& location, 275 const Point& location,
271 const std::vector<FilePath::StringType>& paths) { 276 const std::vector<FilePath::StringType>& paths) {
272 Error* error = NULL; 277 Error* error = NULL;
273 RunSessionTask(NewRunnableMethod( 278 RunSessionTask(base::Bind(
274 automation_.get(),
275 &Automation::DragAndDropFilePaths, 279 &Automation::DragAndDropFilePaths,
280 base::Unretained(automation_.get()),
276 current_target_.view_id, 281 current_target_.view_id,
277 location, 282 location,
278 paths, 283 paths,
279 &error)); 284 &error));
280 return error; 285 return error;
281 } 286 }
282 287
283 Error* Session::NavigateToURL(const std::string& url) { 288 Error* Session::NavigateToURL(const std::string& url) {
284 if (!current_target_.view_id.IsTab()) { 289 if (!current_target_.view_id.IsTab()) {
285 return new Error(kUnknownError, 290 return new Error(kUnknownError,
286 "The current target does not support navigation"); 291 "The current target does not support navigation");
287 } 292 }
288 Error* error = NULL; 293 Error* error = NULL;
289 if (options_.load_async) { 294 if (options_.load_async) {
290 RunSessionTask(NewRunnableMethod( 295 RunSessionTask(base::Bind(
291 automation_.get(),
292 &Automation::NavigateToURLAsync, 296 &Automation::NavigateToURLAsync,
297 base::Unretained(automation_.get()),
293 current_target_.view_id, 298 current_target_.view_id,
294 url, 299 url,
295 &error)); 300 &error));
296 } else { 301 } else {
297 RunSessionTask(NewRunnableMethod( 302 RunSessionTask(base::Bind(
298 automation_.get(),
299 &Automation::NavigateToURL, 303 &Automation::NavigateToURL,
304 base::Unretained(automation_.get()),
300 current_target_.view_id, 305 current_target_.view_id,
301 url, 306 url,
302 &error)); 307 &error));
303 } 308 }
304 return error; 309 return error;
305 } 310 }
306 311
307 Error* Session::GoForward() { 312 Error* Session::GoForward() {
308 if (!current_target_.view_id.IsTab()) { 313 if (!current_target_.view_id.IsTab()) {
309 return new Error(kUnknownError, 314 return new Error(kUnknownError,
310 "The current target does not support navigation"); 315 "The current target does not support navigation");
311 } 316 }
312 Error* error = NULL; 317 Error* error = NULL;
313 RunSessionTask(NewRunnableMethod( 318 RunSessionTask(base::Bind(
314 automation_.get(),
315 &Automation::GoForward, 319 &Automation::GoForward,
320 base::Unretained(automation_.get()),
316 current_target_.view_id, 321 current_target_.view_id,
317 &error)); 322 &error));
318 return error; 323 return error;
319 } 324 }
320 325
321 Error* Session::GoBack() { 326 Error* Session::GoBack() {
322 if (!current_target_.view_id.IsTab()) { 327 if (!current_target_.view_id.IsTab()) {
323 return new Error(kUnknownError, 328 return new Error(kUnknownError,
324 "The current target does not support navigation"); 329 "The current target does not support navigation");
325 } 330 }
326 Error* error = NULL; 331 Error* error = NULL;
327 RunSessionTask(NewRunnableMethod( 332 RunSessionTask(base::Bind(
328 automation_.get(),
329 &Automation::GoBack, 333 &Automation::GoBack,
334 base::Unretained(automation_.get()),
330 current_target_.view_id, 335 current_target_.view_id,
331 &error)); 336 &error));
332 return error; 337 return error;
333 } 338 }
334 339
335 Error* Session::Reload() { 340 Error* Session::Reload() {
336 if (!current_target_.view_id.IsTab()) { 341 if (!current_target_.view_id.IsTab()) {
337 return new Error(kUnknownError, 342 return new Error(kUnknownError,
338 "The current target does not support navigation"); 343 "The current target does not support navigation");
339 } 344 }
340 Error* error = NULL; 345 Error* error = NULL;
341 RunSessionTask(NewRunnableMethod( 346 RunSessionTask(base::Bind(
342 automation_.get(),
343 &Automation::Reload, 347 &Automation::Reload,
348 base::Unretained(automation_.get()),
344 current_target_.view_id, 349 current_target_.view_id,
345 &error)); 350 &error));
346 return error; 351 return error;
347 } 352 }
348 353
349 Error* Session::GetURL(std::string* url) { 354 Error* Session::GetURL(std::string* url) {
350 return ExecuteScriptAndParse(current_target_, 355 return ExecuteScriptAndParse(current_target_,
351 "function() { return document.URL }", 356 "function() { return document.URL }",
352 "getUrl", 357 "getUrl",
353 new ListValue(), 358 new ListValue(),
(...skipping 11 matching lines...) Expand all
365 return ExecuteScriptAndParse(FrameId(current_target_.view_id, FramePath()), 370 return ExecuteScriptAndParse(FrameId(current_target_.view_id, FramePath()),
366 kGetTitleScript, 371 kGetTitleScript,
367 "getTitle", 372 "getTitle",
368 new ListValue(), 373 new ListValue(),
369 CreateDirectValueParser(tab_title)); 374 CreateDirectValueParser(tab_title));
370 } 375 }
371 376
372 Error* Session::MouseMoveAndClick(const Point& location, 377 Error* Session::MouseMoveAndClick(const Point& location,
373 automation::MouseButton button) { 378 automation::MouseButton button) {
374 Error* error = NULL; 379 Error* error = NULL;
375 RunSessionTask(NewRunnableMethod( 380 RunSessionTask(base::Bind(
376 automation_.get(),
377 &Automation::MouseClick, 381 &Automation::MouseClick,
382 base::Unretained(automation_.get()),
378 current_target_.view_id, 383 current_target_.view_id,
379 location, 384 location,
380 button, 385 button,
381 &error)); 386 &error));
382 if (!error) 387 if (!error)
383 mouse_position_ = location; 388 mouse_position_ = location;
384 return error; 389 return error;
385 } 390 }
386 391
387 Error* Session::MouseMove(const Point& location) { 392 Error* Session::MouseMove(const Point& location) {
388 Error* error = NULL; 393 Error* error = NULL;
389 RunSessionTask(NewRunnableMethod( 394 RunSessionTask(base::Bind(
390 automation_.get(),
391 &Automation::MouseMove, 395 &Automation::MouseMove,
396 base::Unretained(automation_.get()),
392 current_target_.view_id, 397 current_target_.view_id,
393 location, 398 location,
394 &error)); 399 &error));
395 if (!error) 400 if (!error)
396 mouse_position_ = location; 401 mouse_position_ = location;
397 return error; 402 return error;
398 } 403 }
399 404
400 Error* Session::MouseDrag(const Point& start, 405 Error* Session::MouseDrag(const Point& start,
401 const Point& end) { 406 const Point& end) {
402 Error* error = NULL; 407 Error* error = NULL;
403 RunSessionTask(NewRunnableMethod( 408 RunSessionTask(base::Bind(
404 automation_.get(),
405 &Automation::MouseDrag, 409 &Automation::MouseDrag,
410 base::Unretained(automation_.get()),
406 current_target_.view_id, 411 current_target_.view_id,
407 start, 412 start,
408 end, 413 end,
409 &error)); 414 &error));
410 if (!error) 415 if (!error)
411 mouse_position_ = end; 416 mouse_position_ = end;
412 return error; 417 return error;
413 } 418 }
414 419
415 Error* Session::MouseClick(automation::MouseButton button) { 420 Error* Session::MouseClick(automation::MouseButton button) {
416 return MouseMoveAndClick(mouse_position_, button); 421 return MouseMoveAndClick(mouse_position_, button);
417 } 422 }
418 423
419 Error* Session::MouseButtonDown() { 424 Error* Session::MouseButtonDown() {
420 Error* error = NULL; 425 Error* error = NULL;
421 RunSessionTask(NewRunnableMethod( 426 RunSessionTask(base::Bind(
422 automation_.get(),
423 &Automation::MouseButtonDown, 427 &Automation::MouseButtonDown,
428 base::Unretained(automation_.get()),
424 current_target_.view_id, 429 current_target_.view_id,
425 mouse_position_, 430 mouse_position_,
426 &error)); 431 &error));
427 return error; 432 return error;
428 } 433 }
429 434
430 Error* Session::MouseButtonUp() { 435 Error* Session::MouseButtonUp() {
431 Error* error = NULL; 436 Error* error = NULL;
432 RunSessionTask(NewRunnableMethod( 437 RunSessionTask(base::Bind(
433 automation_.get(),
434 &Automation::MouseButtonUp, 438 &Automation::MouseButtonUp,
439 base::Unretained(automation_.get()),
435 current_target_.view_id, 440 current_target_.view_id,
436 mouse_position_, 441 mouse_position_,
437 &error)); 442 &error));
438 return error; 443 return error;
439 } 444 }
440 445
441 Error* Session::MouseDoubleClick() { 446 Error* Session::MouseDoubleClick() {
442 Error* error = NULL; 447 Error* error = NULL;
443 RunSessionTask(NewRunnableMethod( 448 RunSessionTask(base::Bind(
444 automation_.get(),
445 &Automation::MouseDoubleClick, 449 &Automation::MouseDoubleClick,
450 base::Unretained(automation_.get()),
446 current_target_.view_id, 451 current_target_.view_id,
447 mouse_position_, 452 mouse_position_,
448 &error)); 453 &error));
449 return error; 454 return error;
450 } 455 }
451 456
452 Error* Session::GetCookies(const std::string& url, ListValue** cookies) { 457 Error* Session::GetCookies(const std::string& url, ListValue** cookies) {
453 Error* error = NULL; 458 Error* error = NULL;
454 RunSessionTask(NewRunnableMethod( 459 RunSessionTask(base::Bind(
455 automation_.get(),
456 &Automation::GetCookies, 460 &Automation::GetCookies,
461 base::Unretained(automation_.get()),
457 url, 462 url,
458 cookies, 463 cookies,
459 &error)); 464 &error));
460 return error; 465 return error;
461 } 466 }
462 467
463 Error* Session::DeleteCookie(const std::string& url, 468 Error* Session::DeleteCookie(const std::string& url,
464 const std::string& cookie_name) { 469 const std::string& cookie_name) {
465 Error* error = NULL; 470 Error* error = NULL;
466 RunSessionTask(NewRunnableMethod( 471 RunSessionTask(base::Bind(
467 automation_.get(),
468 &Automation::DeleteCookie, 472 &Automation::DeleteCookie,
473 base::Unretained(automation_.get()),
469 url, 474 url,
470 cookie_name, 475 cookie_name,
471 &error)); 476 &error));
472 return error; 477 return error;
473 } 478 }
474 479
475 Error* Session::SetCookie(const std::string& url, 480 Error* Session::SetCookie(const std::string& url,
476 DictionaryValue* cookie_dict) { 481 DictionaryValue* cookie_dict) {
477 Error* error = NULL; 482 Error* error = NULL;
478 RunSessionTask(NewRunnableMethod( 483 RunSessionTask(base::Bind(
479 automation_.get(),
480 &Automation::SetCookie, 484 &Automation::SetCookie,
485 base::Unretained(automation_.get()),
481 url, 486 url,
482 cookie_dict, 487 cookie_dict,
483 &error)); 488 &error));
484 return error; 489 return error;
485 } 490 }
486 491
487 Error* Session::GetViews(std::vector<WebViewInfo>* views) { 492 Error* Session::GetViews(std::vector<WebViewInfo>* views) {
488 Error* error = NULL; 493 Error* error = NULL;
489 RunSessionTask(NewRunnableMethod( 494 RunSessionTask(base::Bind(
490 automation_.get(),
491 &Automation::GetViews, 495 &Automation::GetViews,
496 base::Unretained(automation_.get()),
492 views, 497 views,
493 &error)); 498 &error));
494 return error; 499 return error;
495 } 500 }
496 501
497 Error* Session::SwitchToView(const std::string& id_or_name) { 502 Error* Session::SwitchToView(const std::string& id_or_name) {
498 Error* error = NULL; 503 Error* error = NULL;
499 bool does_exist = false; 504 bool does_exist = false;
500 505
501 WebViewId new_view; 506 WebViewId new_view;
502 StringToWebViewId(id_or_name, &new_view); 507 StringToWebViewId(id_or_name, &new_view);
503 if (new_view.IsValid()) { 508 if (new_view.IsValid()) {
504 RunSessionTask(NewRunnableMethod( 509 RunSessionTask(base::Bind(
505 automation_.get(),
506 &Automation::DoesViewExist, 510 &Automation::DoesViewExist,
511 base::Unretained(automation_.get()),
507 new_view, 512 new_view,
508 &does_exist, 513 &does_exist,
509 &error)); 514 &error));
510 if (error) 515 if (error)
511 return error; 516 return error;
512 } 517 }
513 518
514 if (!does_exist) { 519 if (!does_exist) {
515 // See if any of the tab window names match |name|. 520 // See if any of the tab window names match |name|.
516 std::vector<WebViewInfo> views; 521 std::vector<WebViewInfo> views;
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 } else if (error.get()) { 642 } else if (error.get()) {
638 return error.release(); 643 return error.release();
639 } 644 }
640 frame_path = frame_path.Append(components[i]); 645 frame_path = frame_path.Append(components[i]);
641 } 646 }
642 return NULL; 647 return NULL;
643 } 648 }
644 649
645 Error* Session::CloseWindow() { 650 Error* Session::CloseWindow() {
646 Error* error = NULL; 651 Error* error = NULL;
647 RunSessionTask(NewRunnableMethod( 652 RunSessionTask(base::Bind(
648 automation_.get(),
649 &Automation::CloseView, 653 &Automation::CloseView,
654 base::Unretained(automation_.get()),
650 current_target_.view_id, 655 current_target_.view_id,
651 &error)); 656 &error));
652 657
653 if (!error) { 658 if (!error) {
654 std::vector<WebViewInfo> views; 659 std::vector<WebViewInfo> views;
655 scoped_ptr<Error> error(GetViews(&views)); 660 scoped_ptr<Error> error(GetViews(&views));
656 if (error.get() || views.empty()) { 661 if (error.get() || views.empty()) {
657 // The automation connection will soon be closed, if not already, 662 // The automation connection will soon be closed, if not already,
658 // because we supposedly just closed the last window. Terminate the 663 // because we supposedly just closed the last window. Terminate the
659 // session. 664 // session.
660 // TODO(kkania): This will cause us problems if GetWindowIds fails for a 665 // TODO(kkania): This will cause us problems if GetWindowIds fails for a
661 // reason other than the channel is disconnected. Look into having 666 // reason other than the channel is disconnected. Look into having
662 // |GetWindowIds| tell us if it just closed the last window. 667 // |GetWindowIds| tell us if it just closed the last window.
663 Terminate(); 668 Terminate();
664 } 669 }
665 } 670 }
666 return error; 671 return error;
667 } 672 }
668 673
669 Error* Session::GetAlertMessage(std::string* text) { 674 Error* Session::GetAlertMessage(std::string* text) {
670 Error* error = NULL; 675 Error* error = NULL;
671 RunSessionTask(NewRunnableMethod( 676 RunSessionTask(base::Bind(
672 automation_.get(),
673 &Automation::GetAppModalDialogMessage, 677 &Automation::GetAppModalDialogMessage,
678 base::Unretained(automation_.get()),
674 text, 679 text,
675 &error)); 680 &error));
676 return error; 681 return error;
677 } 682 }
678 683
679 Error* Session::SetAlertPromptText(const std::string& alert_prompt_text) { 684 Error* Session::SetAlertPromptText(const std::string& alert_prompt_text) {
680 std::string message_text; 685 std::string message_text;
681 // Only set the alert prompt text if an alert is actually active. 686 // Only set the alert prompt text if an alert is actually active.
682 Error* error = GetAlertMessage(&message_text); 687 Error* error = GetAlertMessage(&message_text);
683 if (!error) { 688 if (!error) {
684 has_alert_prompt_text_ = true; 689 has_alert_prompt_text_ = true;
685 alert_prompt_text_ = alert_prompt_text; 690 alert_prompt_text_ = alert_prompt_text;
686 } 691 }
687 return error; 692 return error;
688 } 693 }
689 694
690 Error* Session::AcceptOrDismissAlert(bool accept) { 695 Error* Session::AcceptOrDismissAlert(bool accept) {
691 Error* error = NULL; 696 Error* error = NULL;
692 if (accept && has_alert_prompt_text_) { 697 if (accept && has_alert_prompt_text_) {
693 RunSessionTask(NewRunnableMethod( 698 RunSessionTask(base::Bind(
694 automation_.get(),
695 &Automation::AcceptPromptAppModalDialog, 699 &Automation::AcceptPromptAppModalDialog,
700 base::Unretained(automation_.get()),
696 alert_prompt_text_, 701 alert_prompt_text_,
697 &error)); 702 &error));
698 } else { 703 } else {
699 RunSessionTask(NewRunnableMethod( 704 RunSessionTask(base::Bind(
700 automation_.get(),
701 &Automation::AcceptOrDismissAppModalDialog, 705 &Automation::AcceptOrDismissAppModalDialog,
706 base::Unretained(automation_.get()),
702 accept, 707 accept,
703 &error)); 708 &error));
704 } 709 }
705 has_alert_prompt_text_ = false; 710 has_alert_prompt_text_ = false;
706 return error; 711 return error;
707 } 712 }
708 713
709 std::string Session::GetBrowserVersion() { 714 std::string Session::GetBrowserVersion() {
710 std::string version; 715 std::string version;
711 RunSessionTask(NewRunnableMethod( 716 RunSessionTask(base::Bind(
712 automation_.get(),
713 &Automation::GetBrowserVersion, 717 &Automation::GetBrowserVersion,
718 base::Unretained(automation_.get()),
714 &version)); 719 &version));
715 return version; 720 return version;
716 } 721 }
717 722
718 Error* Session::CompareBrowserVersion(int client_build_no, 723 Error* Session::CompareBrowserVersion(int client_build_no,
719 int client_patch_no, 724 int client_patch_no,
720 bool* is_newer_or_equal) { 725 bool* is_newer_or_equal) {
721 std::string version = GetBrowserVersion(); 726 std::string version = GetBrowserVersion();
722 std::vector<std::string> split_version; 727 std::vector<std::string> split_version;
723 base::SplitString(version, '.', &split_version); 728 base::SplitString(version, '.', &split_version);
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
999 atoms::asString(atoms::GET_ATTRIBUTE), 1004 atoms::asString(atoms::GET_ATTRIBUTE),
1000 "getAttribute", 1005 "getAttribute",
1001 CreateListValueFrom(element, key), 1006 CreateListValueFrom(element, key),
1002 CreateDirectValueParser(value)); 1007 CreateDirectValueParser(value));
1003 } 1008 }
1004 1009
1005 Error* Session::WaitForAllViewsToStopLoading() { 1010 Error* Session::WaitForAllViewsToStopLoading() {
1006 if (!automation_.get()) 1011 if (!automation_.get())
1007 return NULL; 1012 return NULL;
1008 Error* error = NULL; 1013 Error* error = NULL;
1009 RunSessionTask(NewRunnableMethod( 1014 RunSessionTask(base::Bind(
1010 automation_.get(),
1011 &Automation::WaitForAllViewsToStopLoading, 1015 &Automation::WaitForAllViewsToStopLoading,
1016 base::Unretained(automation_.get()),
1012 &error)); 1017 &error));
1013 return error; 1018 return error;
1014 } 1019 }
1015 1020
1016 Error* Session::InstallExtensionDeprecated(const FilePath& path) { 1021 Error* Session::InstallExtensionDeprecated(const FilePath& path) {
1017 Error* error = NULL; 1022 Error* error = NULL;
1018 RunSessionTask(NewRunnableMethod( 1023 RunSessionTask(base::Bind(
1019 automation_.get(),
1020 &Automation::InstallExtensionDeprecated, 1024 &Automation::InstallExtensionDeprecated,
1025 base::Unretained(automation_.get()),
1021 path, 1026 path,
1022 &error)); 1027 &error));
1023 return error; 1028 return error;
1024 } 1029 }
1025 1030
1026 Error* Session::InstallExtension( 1031 Error* Session::InstallExtension(
1027 const FilePath& path, std::string* extension_id) { 1032 const FilePath& path, std::string* extension_id) {
1028 Error* error = NULL; 1033 Error* error = NULL;
1029 RunSessionTask(base::Bind( 1034 RunSessionTask(base::Bind(
1030 &Automation::InstallExtension, 1035 &Automation::InstallExtension,
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1092 Error* Session::UninstallExtension(const std::string& extension_id) { 1097 Error* Session::UninstallExtension(const std::string& extension_id) {
1093 Error* error = NULL; 1098 Error* error = NULL;
1094 RunSessionTask(base::Bind( 1099 RunSessionTask(base::Bind(
1095 &Automation::UninstallExtension, 1100 &Automation::UninstallExtension,
1096 base::Unretained(automation_.get()), 1101 base::Unretained(automation_.get()),
1097 extension_id, 1102 extension_id,
1098 &error)); 1103 &error));
1099 return error; 1104 return error;
1100 } 1105 }
1101 1106
1107 Error* Session::SetPreference(
1108 const std::string& pref,
1109 bool is_user_pref,
1110 base::Value* value) {
1111 Error* error = NULL;
1112 if (is_user_pref) {
1113 RunSessionTask(base::Bind(
1114 &Automation::SetPreference,
1115 base::Unretained(automation_.get()),
1116 pref,
1117 value,
1118 &error));
1119 } else {
1120 RunSessionTask(base::Bind(
1121 &Automation::SetLocalStatePreference,
1122 base::Unretained(automation_.get()),
1123 pref,
1124 value,
1125 &error));
1126 }
1127 return error;
1128 }
1129
1102 const std::string& Session::id() const { 1130 const std::string& Session::id() const {
1103 return id_; 1131 return id_;
1104 } 1132 }
1105 1133
1106 const FrameId& Session::current_target() const { 1134 const FrameId& Session::current_target() const {
1107 return current_target_; 1135 return current_target_;
1108 } 1136 }
1109 1137
1110 void Session::set_async_script_timeout(int timeout_ms) { 1138 void Session::set_async_script_timeout(int timeout_ms) {
1111 async_script_timeout_ = timeout_ms; 1139 async_script_timeout_ = timeout_ms;
(...skipping 14 matching lines...) Expand all
1126 const Point& Session::get_mouse_position() const { 1154 const Point& Session::get_mouse_position() const {
1127 return mouse_position_; 1155 return mouse_position_;
1128 } 1156 }
1129 1157
1130 const Session::Options& Session::options() const { 1158 const Session::Options& Session::options() const {
1131 return options_; 1159 return options_;
1132 } 1160 }
1133 1161
1134 void Session::RunSessionTask(Task* task) { 1162 void Session::RunSessionTask(Task* task) {
1135 base::WaitableEvent done_event(false, false); 1163 base::WaitableEvent done_event(false, false);
1136 thread_.message_loop_proxy()->PostTask(FROM_HERE, NewRunnableMethod( 1164 thread_.message_loop_proxy()->PostTask(FROM_HERE, base::Bind(
1137 this,
1138 &Session::RunSessionTaskOnSessionThread, 1165 &Session::RunSessionTaskOnSessionThread,
1166 base::Unretained(this),
1139 task, 1167 task,
1140 &done_event)); 1168 &done_event));
1141 done_event.Wait(); 1169 done_event.Wait();
1142 } 1170 }
1143 1171
1144 void Session::RunSessionTaskOnSessionThread(Task* task, 1172 void Session::RunSessionTaskOnSessionThread(Task* task,
1145 base::WaitableEvent* done_event) { 1173 base::WaitableEvent* done_event) {
1146 task->Run(); 1174 task->Run();
1147 delete task; 1175 delete task;
1148 done_event->Signal(); 1176 done_event->Signal();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1186 if (automation_.get()) 1214 if (automation_.get())
1187 automation_->Terminate(); 1215 automation_->Terminate();
1188 automation_.reset(); 1216 automation_.reset();
1189 } 1217 }
1190 1218
1191 Error* Session::ExecuteScriptAndParseValue(const FrameId& frame_id, 1219 Error* Session::ExecuteScriptAndParseValue(const FrameId& frame_id,
1192 const std::string& script, 1220 const std::string& script,
1193 Value** script_result) { 1221 Value** script_result) {
1194 std::string response_json; 1222 std::string response_json;
1195 Error* error = NULL; 1223 Error* error = NULL;
1196 RunSessionTask(NewRunnableMethod( 1224 RunSessionTask(base::Bind(
1197 automation_.get(),
1198 &Automation::ExecuteScript, 1225 &Automation::ExecuteScript,
1226 base::Unretained(automation_.get()),
1199 frame_id.view_id, 1227 frame_id.view_id,
1200 frame_id.frame_path, 1228 frame_id.frame_path,
1201 script, 1229 script,
1202 &response_json, 1230 &response_json,
1203 &error)); 1231 &error));
1204 if (error) 1232 if (error)
1205 return error; 1233 return error;
1206 1234
1207 scoped_ptr<Value> value(base::JSONReader::ReadAndReturnError( 1235 scoped_ptr<Value> value(base::JSONReader::ReadAndReturnError(
1208 response_json, true, NULL, NULL)); 1236 response_json, true, NULL, NULL));
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
1510 "The current target does not support screenshot"); 1538 "The current target does not support screenshot");
1511 } 1539 }
1512 Error* error = NULL; 1540 Error* error = NULL;
1513 ScopedTempDir screenshots_dir; 1541 ScopedTempDir screenshots_dir;
1514 if (!screenshots_dir.CreateUniqueTempDir()) { 1542 if (!screenshots_dir.CreateUniqueTempDir()) {
1515 return new Error(kUnknownError, 1543 return new Error(kUnknownError,
1516 "Could not create temp directory for screenshot"); 1544 "Could not create temp directory for screenshot");
1517 } 1545 }
1518 1546
1519 FilePath path = screenshots_dir.path().AppendASCII("screen"); 1547 FilePath path = screenshots_dir.path().AppendASCII("screen");
1520 RunSessionTask(NewRunnableMethod( 1548 RunSessionTask(base::Bind(
1521 automation_.get(),
1522 &Automation::CaptureEntirePageAsPNG, 1549 &Automation::CaptureEntirePageAsPNG,
1550 base::Unretained(automation_.get()),
1523 current_target_.view_id, 1551 current_target_.view_id,
1524 path, 1552 path,
1525 &error)); 1553 &error));
1526 if (error) 1554 if (error)
1527 return error; 1555 return error;
1528 if (!file_util::ReadFileToString(path, png)) 1556 if (!file_util::ReadFileToString(path, png))
1529 return new Error(kUnknownError, "Could not read screenshot file"); 1557 return new Error(kUnknownError, "Could not read screenshot file");
1530 return NULL; 1558 return NULL;
1531 } 1559 }
1532 1560
1533 Error* Session::GetBrowserConnectionState(bool* online) { 1561 Error* Session::GetBrowserConnectionState(bool* online) {
1534 return ExecuteScriptAndParse( 1562 return ExecuteScriptAndParse(
1535 current_target_, 1563 current_target_,
1536 atoms::asString(atoms::IS_ONLINE), 1564 atoms::asString(atoms::IS_ONLINE),
1537 "isOnline", 1565 "isOnline",
1538 new ListValue(), 1566 new ListValue(),
1539 CreateDirectValueParser(online)); 1567 CreateDirectValueParser(online));
1540 } 1568 }
1541 1569
1542 Error* Session::GetAppCacheStatus(int* status) { 1570 Error* Session::GetAppCacheStatus(int* status) {
1543 return ExecuteScriptAndParse( 1571 return ExecuteScriptAndParse(
1544 current_target_, 1572 current_target_,
1545 atoms::asString(atoms::GET_APPCACHE_STATUS), 1573 atoms::asString(atoms::GET_APPCACHE_STATUS),
1546 "getAppcacheStatus", 1574 "getAppcacheStatus",
1547 new ListValue(), 1575 new ListValue(),
1548 CreateDirectValueParser(status)); 1576 CreateDirectValueParser(status));
1549 } 1577 }
1550 1578
1579 Error* Session::PostBrowserStartInit() {
1580 Error* error = NULL;
1581 if (!options_.no_website_testing_defaults)
1582 error = InitForWebsiteTesting();
1583 if (error)
1584 return error;
1585
1586 // Install extensions.
1587 for (size_t i = 0; i < options_.extensions.size(); ++i) {
1588 error = InstallExtensionDeprecated(options_.extensions[i]);
1589 if (error)
1590 return error;
1591 }
1592 return NULL;
1593 }
1594
1595 Error* Session::InitForWebsiteTesting() {
1596 // Disable checking for SSL certificate revocation.
1597 Error* error = SetPreference(
1598 "ssl.rev_checking.enabled",
1599 false /* is_user_pref */,
1600 Value::CreateBooleanValue(false));
1601 if (error)
1602 return error;
1603
1604 // Allow certain content by default.
1605 const int kAllowContent = 1;
1606 DictionaryValue* default_content_settings = new DictionaryValue();
1607 default_content_settings->SetInteger("geolocation", kAllowContent);
1608 default_content_settings->SetInteger("notifications", kAllowContent);
1609 return SetPreference(
1610 "profile.default_content_settings",
1611 true /* is_user_pref */,
1612 default_content_settings);
1613 }
1614
1551 } // namespace webdriver 1615 } // namespace webdriver
OLDNEW
« no previous file with comments | « chrome/test/webdriver/webdriver_session.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698