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

Side by Side Diff: chrome/test/ui_test_utils.h

Issue 7327007: Moving notification types which are chrome specific to a new header file chrome_notification_type... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 5 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/testing_profile.cc ('k') | chrome/test/ui_test_utils.cc » ('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) 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 #ifndef CHROME_TEST_UI_TEST_UTILS_H_ 5 #ifndef CHROME_TEST_UI_TEST_UTILS_H_
6 #define CHROME_TEST_UI_TEST_UTILS_H_ 6 #define CHROME_TEST_UI_TEST_UTILS_H_
7 #pragma once 7 #pragma once
8 8
9 #include <map> 9 #include <map>
10 #include <queue> 10 #include <queue>
(...skipping 19 matching lines...) Expand all
30 class BookmarkModel; 30 class BookmarkModel;
31 class BookmarkNode; 31 class BookmarkNode;
32 class Browser; 32 class Browser;
33 class CommandLine; 33 class CommandLine;
34 class DownloadManager; 34 class DownloadManager;
35 class ExtensionAction; 35 class ExtensionAction;
36 class FilePath; 36 class FilePath;
37 class GURL; 37 class GURL;
38 class MessageLoop; 38 class MessageLoop;
39 class NavigationController; 39 class NavigationController;
40 class NotificationType;
41 class Profile; 40 class Profile;
42 class RenderViewHost; 41 class RenderViewHost;
43 class RenderWidgetHost; 42 class RenderWidgetHost;
44 class ScopedTempDir; 43 class ScopedTempDir;
45 class SkBitmap; 44 class SkBitmap;
46 class TabContents; 45 class TabContents;
47 class TabContentsWrapper; 46 class TabContentsWrapper;
48 class Value; 47 class Value;
49 48
50 namespace gfx { 49 namespace gfx {
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 bool case_sensitive, 209 bool case_sensitive,
211 int* ordinal); 210 int* ordinal);
212 211
213 // Returns true if the View is focused. 212 // Returns true if the View is focused.
214 bool IsViewFocused(const Browser* browser, ViewID vid); 213 bool IsViewFocused(const Browser* browser, ViewID vid);
215 214
216 // Simulates a mouse click on a View in the browser. 215 // Simulates a mouse click on a View in the browser.
217 void ClickOnView(const Browser* browser, ViewID vid); 216 void ClickOnView(const Browser* browser, ViewID vid);
218 217
219 // Blocks until a notification for given |type| is received. 218 // Blocks until a notification for given |type| is received.
220 void WaitForNotification(NotificationType type); 219 void WaitForNotification(int type);
221 220
222 // Blocks until a notification for given |type| from the specified |source| 221 // Blocks until a notification for given |type| from the specified |source|
223 // is received. 222 // is received.
224 void WaitForNotificationFrom(NotificationType type, 223 void WaitForNotificationFrom(int type,
225 const NotificationSource& source); 224 const NotificationSource& source);
226 225
227 // Register |observer| for the given |type| and |source| and run 226 // Register |observer| for the given |type| and |source| and run
228 // the message loop until the observer posts a quit task. 227 // the message loop until the observer posts a quit task.
229 void RegisterAndWait(NotificationObserver* observer, 228 void RegisterAndWait(NotificationObserver* observer,
230 NotificationType type, 229 int type,
231 const NotificationSource& source); 230 const NotificationSource& source);
232 231
233 // Blocks until |model| finishes loading. 232 // Blocks until |model| finishes loading.
234 void WaitForBookmarkModelToLoad(BookmarkModel* model); 233 void WaitForBookmarkModelToLoad(BookmarkModel* model);
235 234
236 // Blocks until the |browser|'s history finishes loading. 235 // Blocks until the |browser|'s history finishes loading.
237 void WaitForHistoryToLoad(Browser* browser); 236 void WaitForHistoryToLoad(Browser* browser);
238 237
239 // Puts the native window for |browser| in |native_window|. Returns true on 238 // Puts the native window for |browser| in |native_window|. Returns true on
240 // success. 239 // success.
(...skipping 20 matching lines...) Expand all
261 // Sends a key press, blocking until both the key press and a notification from 260 // Sends a key press, blocking until both the key press and a notification from
262 // |source| of type |type| are received, or until the test times out. This uses 261 // |source| of type |type| are received, or until the test times out. This uses
263 // ui_controls::SendKeyPress, see it for details. Returns true if the event was 262 // ui_controls::SendKeyPress, see it for details. Returns true if the event was
264 // successfully sent and both the event and notification were received. 263 // successfully sent and both the event and notification were received.
265 bool SendKeyPressAndWait(const Browser* browser, 264 bool SendKeyPressAndWait(const Browser* browser,
266 ui::KeyboardCode key, 265 ui::KeyboardCode key,
267 bool control, 266 bool control,
268 bool shift, 267 bool shift,
269 bool alt, 268 bool alt,
270 bool command, 269 bool command,
271 NotificationType type, 270 int type,
272 const NotificationSource& source) WARN_UNUSED_RESULT; 271 const NotificationSource& source) WARN_UNUSED_RESULT;
273 272
274 // Run a message loop only for the specified amount of time. 273 // Run a message loop only for the specified amount of time.
275 class TimedMessageLoopRunner { 274 class TimedMessageLoopRunner {
276 public: 275 public:
277 // Create new MessageLoopForUI and attach to it. 276 // Create new MessageLoopForUI and attach to it.
278 TimedMessageLoopRunner(); 277 TimedMessageLoopRunner();
279 278
280 // Attach to an existing message loop. 279 // Attach to an existing message loop.
281 explicit TimedMessageLoopRunner(MessageLoop* loop) 280 explicit TimedMessageLoopRunner(MessageLoop* loop)
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 356
358 const NotificationSource& source() const { 357 const NotificationSource& source() const {
359 return source_; 358 return source_;
360 } 359 }
361 360
362 const NotificationDetails& details() const { 361 const NotificationDetails& details() const {
363 return details_; 362 return details_;
364 } 363 }
365 364
366 // NotificationObserver: 365 // NotificationObserver:
367 virtual void Observe(NotificationType type, 366 virtual void Observe(int type,
368 const NotificationSource& source, 367 const NotificationSource& source,
369 const NotificationDetails& details); 368 const NotificationDetails& details);
370 369
371 private: 370 private:
372 NotificationSource source_; 371 NotificationSource source_;
373 NotificationDetails details_; 372 NotificationDetails details_;
374 }; 373 };
375 374
376 // A WindowedNotificationObserver allows code to watch for a notification 375 // A WindowedNotificationObserver allows code to watch for a notification
377 // over a window of time. Typically testing code will need to do something 376 // over a window of time. Typically testing code will need to do something
378 // like this: 377 // like this:
379 // PerformAction() 378 // PerformAction()
380 // WaitForCompletionNotification() 379 // WaitForCompletionNotification()
381 // This leads to flakiness as there's a window between PerformAction returning 380 // This leads to flakiness as there's a window between PerformAction returning
382 // and the observers getting registered, where a notification will be missed. 381 // and the observers getting registered, where a notification will be missed.
383 // 382 //
384 // Rather, one can do this: 383 // Rather, one can do this:
385 // WindowedNotificationObserver signal(...) 384 // WindowedNotificationObserver signal(...)
386 // PerformAction() 385 // PerformAction()
387 // signal.Wait() 386 // signal.Wait()
388 class WindowedNotificationObserver : public NotificationObserver { 387 class WindowedNotificationObserver : public NotificationObserver {
389 public: 388 public:
390 // Register to listen for notifications of the given type from either a 389 // Register to listen for notifications of the given type from either a
391 // specific source, or from all sources if |source| is 390 // specific source, or from all sources if |source| is
392 // NotificationService::AllSources(). 391 // NotificationService::AllSources().
393 WindowedNotificationObserver(NotificationType notification_type, 392 WindowedNotificationObserver(int notification_type,
394 const NotificationSource& source); 393 const NotificationSource& source);
395 virtual ~WindowedNotificationObserver(); 394 virtual ~WindowedNotificationObserver();
396 395
397 // Wait until the specified notification occurs. If the notification was 396 // Wait until the specified notification occurs. If the notification was
398 // emitted between the construction of this object and this call then it 397 // emitted between the construction of this object and this call then it
399 // returns immediately. 398 // returns immediately.
400 void Wait(); 399 void Wait();
401 400
402 // WaitFor waits until the given notification type is received from the 401 // WaitFor waits until the given notification type is received from the
403 // given object. If the notification was emitted between the construction of 402 // given object. If the notification was emitted between the construction of
404 // this object and this call then it returns immediately. 403 // this object and this call then it returns immediately.
405 // 404 //
406 // Use this variant when you supply AllSources to the constructor but want 405 // Use this variant when you supply AllSources to the constructor but want
407 // to wait for notification from a specific observer. 406 // to wait for notification from a specific observer.
408 // 407 //
409 // Beware that this is inheriently plagued by ABA issues. Consider: 408 // Beware that this is inheriently plagued by ABA issues. Consider:
410 // WindowedNotificationObserver is created, listening for notifications from 409 // WindowedNotificationObserver is created, listening for notifications from
411 // all sources 410 // all sources
412 // Object A is created with address x and fires a notification 411 // Object A is created with address x and fires a notification
413 // Object A is freed 412 // Object A is freed
414 // Object B is created with the same address 413 // Object B is created with the same address
415 // WaitFor is called with the address of B 414 // WaitFor is called with the address of B
416 // 415 //
417 // In this case, WaitFor will return immediately because of the 416 // In this case, WaitFor will return immediately because of the
418 // notification from A (because they shared an address), despite being 417 // notification from A (because they shared an address), despite being
419 // different objects. 418 // different objects.
420 void WaitFor(const NotificationSource& source); 419 void WaitFor(const NotificationSource& source);
421 420
422 // NotificationObserver: 421 // NotificationObserver:
423 virtual void Observe(NotificationType type, 422 virtual void Observe(int type,
424 const NotificationSource& source, 423 const NotificationSource& source,
425 const NotificationDetails& details) OVERRIDE; 424 const NotificationDetails& details) OVERRIDE;
426 425
427 private: 426 private:
428 bool seen_; 427 bool seen_;
429 bool running_; 428 bool running_;
430 std::set<uintptr_t> sources_seen_; 429 std::set<uintptr_t> sources_seen_;
431 NotificationSource waiting_for_; 430 NotificationSource waiting_for_;
432 NotificationRegistrar registrar_; 431 NotificationRegistrar registrar_;
433 432
434 DISALLOW_COPY_AND_ASSIGN(WindowedNotificationObserver); 433 DISALLOW_COPY_AND_ASSIGN(WindowedNotificationObserver);
435 }; 434 };
436 435
437 // Similar to WindowedNotificationObserver but also provides a way of retrieving 436 // Similar to WindowedNotificationObserver but also provides a way of retrieving
438 // the details associated with the notification. 437 // the details associated with the notification.
439 // Note that in order to use that class the details class should be copiable, 438 // Note that in order to use that class the details class should be copiable,
440 // which is the case with most notifications. 439 // which is the case with most notifications.
441 template <class U> 440 template <class U>
442 class WindowedNotificationObserverWithDetails 441 class WindowedNotificationObserverWithDetails
443 : public WindowedNotificationObserver { 442 : public WindowedNotificationObserver {
444 public: 443 public:
445 WindowedNotificationObserverWithDetails(NotificationType notification_type, 444 WindowedNotificationObserverWithDetails(int notification_type,
446 const NotificationSource& source) 445 const NotificationSource& source)
447 : WindowedNotificationObserver(notification_type, source) {} 446 : WindowedNotificationObserver(notification_type, source) {}
448 447
449 // Fills |details| with the details of the notification received for |source|. 448 // Fills |details| with the details of the notification received for |source|.
450 bool GetDetailsFor(uintptr_t source, U* details) { 449 bool GetDetailsFor(uintptr_t source, U* details) {
451 typename std::map<uintptr_t, U>::const_iterator iter = 450 typename std::map<uintptr_t, U>::const_iterator iter =
452 details_.find(source); 451 details_.find(source);
453 if (iter == details_.end()) 452 if (iter == details_.end())
454 return false; 453 return false;
455 *details = iter->second; 454 *details = iter->second;
456 return true; 455 return true;
457 } 456 }
458 457
459 virtual void Observe(NotificationType type, 458 virtual void Observe(int type,
460 const NotificationSource& source, 459 const NotificationSource& source,
461 const NotificationDetails& details) { 460 const NotificationDetails& details) {
462 const U* details_ptr = Details<U>(details).ptr(); 461 const U* details_ptr = Details<U>(details).ptr();
463 if (details_ptr) 462 if (details_ptr)
464 details_[source.map_key()] = *details_ptr; 463 details_[source.map_key()] = *details_ptr;
465 WindowedNotificationObserver::Observe(type, source, details); 464 WindowedNotificationObserver::Observe(type, source, details);
466 } 465 }
467 466
468 private: 467 private:
469 std::map<uintptr_t, U> details_; 468 std::map<uintptr_t, U> details_;
470 469
471 DISALLOW_COPY_AND_ASSIGN(WindowedNotificationObserverWithDetails); 470 DISALLOW_COPY_AND_ASSIGN(WindowedNotificationObserverWithDetails);
472 }; 471 };
473 472
474 // Watches title changes on a tab, blocking until an expected title is set. 473 // Watches title changes on a tab, blocking until an expected title is set.
475 class TitleWatcher : public NotificationObserver { 474 class TitleWatcher : public NotificationObserver {
476 public: 475 public:
477 // |tab_contents| must be non-NULL and needs to stay alive for the 476 // |tab_contents| must be non-NULL and needs to stay alive for the
478 // entire lifetime of |this|. |expected_title| is the title that |this| 477 // entire lifetime of |this|. |expected_title| is the title that |this|
479 // will wait for. 478 // will wait for.
480 TitleWatcher(TabContents* tab_contents, const string16& expected_title); 479 TitleWatcher(TabContents* tab_contents, const string16& expected_title);
481 virtual ~TitleWatcher(); 480 virtual ~TitleWatcher();
482 481
483 // Waits until the title for the tab is set to the |expected_title| 482 // Waits until the title for the tab is set to the |expected_title|
484 // passed into the constructor. 483 // passed into the constructor.
485 bool Wait() WARN_UNUSED_RESULT; 484 bool Wait() WARN_UNUSED_RESULT;
486 485
487 private: 486 private:
488 // NotificationObserver 487 // NotificationObserver
489 virtual void Observe(NotificationType type, 488 virtual void Observe(int type,
490 const NotificationSource& source, 489 const NotificationSource& source,
491 const NotificationDetails& details) OVERRIDE; 490 const NotificationDetails& details) OVERRIDE;
492 491
493 TabContents* expected_tab_; 492 TabContents* expected_tab_;
494 string16 expected_title_; 493 string16 expected_title_;
495 NotificationRegistrar notification_registrar_; 494 NotificationRegistrar notification_registrar_;
496 bool title_observed_; 495 bool title_observed_;
497 bool quit_loop_on_observation_; 496 bool quit_loop_on_observation_;
498 497
499 DISALLOW_COPY_AND_ASSIGN(TitleWatcher); 498 DISALLOW_COPY_AND_ASSIGN(TitleWatcher);
500 }; 499 };
501 500
502 // See SendKeyPressAndWait. This function additionally performs a check on the 501 // See SendKeyPressAndWait. This function additionally performs a check on the
503 // NotificationDetails using the provided Details<U>. 502 // NotificationDetails using the provided Details<U>.
504 template <class U> 503 template <class U>
505 bool SendKeyPressAndWaitWithDetails( 504 bool SendKeyPressAndWaitWithDetails(
506 const Browser* browser, 505 const Browser* browser,
507 ui::KeyboardCode key, 506 ui::KeyboardCode key,
508 bool control, 507 bool control,
509 bool shift, 508 bool shift,
510 bool alt, 509 bool alt,
511 bool command, 510 bool command,
512 NotificationType type, 511 int type,
513 const NotificationSource& source, 512 const NotificationSource& source,
514 const Details<U>& details) WARN_UNUSED_RESULT; 513 const Details<U>& details) WARN_UNUSED_RESULT;
515 514
516 template <class U> 515 template <class U>
517 bool SendKeyPressAndWaitWithDetails( 516 bool SendKeyPressAndWaitWithDetails(
518 const Browser* browser, 517 const Browser* browser,
519 ui::KeyboardCode key, 518 ui::KeyboardCode key,
520 bool control, 519 bool control,
521 bool shift, 520 bool shift,
522 bool alt, 521 bool alt,
523 bool command, 522 bool command,
524 NotificationType type, 523 int type,
525 const NotificationSource& source, 524 const NotificationSource& source,
526 const Details<U>& details) { 525 const Details<U>& details) {
527 WindowedNotificationObserverWithDetails<U> observer(type, source); 526 WindowedNotificationObserverWithDetails<U> observer(type, source);
528 527
529 if (!SendKeyPressSync(browser, key, control, shift, alt, command)) 528 if (!SendKeyPressSync(browser, key, control, shift, alt, command))
530 return false; 529 return false;
531 530
532 observer.Wait(); 531 observer.Wait();
533 532
534 U my_details; 533 U my_details;
(...skipping 17 matching lines...) Expand all
552 // DOMAutomationController. Do not construct this until the browser has 551 // DOMAutomationController. Do not construct this until the browser has
553 // started. 552 // started.
554 DOMMessageQueue(); 553 DOMMessageQueue();
555 virtual ~DOMMessageQueue(); 554 virtual ~DOMMessageQueue();
556 555
557 // Wait for the next message to arrive. |message| will be set to the next 556 // Wait for the next message to arrive. |message| will be set to the next
558 // message, if not null. Returns true on success. 557 // message, if not null. Returns true on success.
559 bool WaitForMessage(std::string* message) WARN_UNUSED_RESULT; 558 bool WaitForMessage(std::string* message) WARN_UNUSED_RESULT;
560 559
561 // Overridden NotificationObserver methods. 560 // Overridden NotificationObserver methods.
562 virtual void Observe(NotificationType type, 561 virtual void Observe(int type,
563 const NotificationSource& source, 562 const NotificationSource& source,
564 const NotificationDetails& details); 563 const NotificationDetails& details);
565 564
566 private: 565 private:
567 NotificationRegistrar registrar_; 566 NotificationRegistrar registrar_;
568 std::queue<std::string> message_queue_; 567 std::queue<std::string> message_queue_;
569 bool waiting_for_message_; 568 bool waiting_for_message_;
570 569
571 DISALLOW_COPY_AND_ASSIGN(DOMMessageQueue); 570 DISALLOW_COPY_AND_ASSIGN(DOMMessageQueue);
572 }; 571 };
573 572
574 // Takes a snapshot of the given render widget, rendered at |page_size|. The 573 // Takes a snapshot of the given render widget, rendered at |page_size|. The
575 // snapshot is set to |bitmap|. Returns true on success. 574 // snapshot is set to |bitmap|. Returns true on success.
576 bool TakeRenderWidgetSnapshot(RenderWidgetHost* rwh, 575 bool TakeRenderWidgetSnapshot(RenderWidgetHost* rwh,
577 const gfx::Size& page_size, 576 const gfx::Size& page_size,
578 SkBitmap* bitmap) WARN_UNUSED_RESULT; 577 SkBitmap* bitmap) WARN_UNUSED_RESULT;
579 578
580 // Takes a snapshot of the entire page, according to the width and height 579 // Takes a snapshot of the entire page, according to the width and height
581 // properties of the DOM's document. Returns true on success. DOMAutomation 580 // properties of the DOM's document. Returns true on success. DOMAutomation
582 // must be enabled. 581 // must be enabled.
583 bool TakeEntirePageSnapshot(RenderViewHost* rvh, 582 bool TakeEntirePageSnapshot(RenderViewHost* rvh,
584 SkBitmap* bitmap) WARN_UNUSED_RESULT; 583 SkBitmap* bitmap) WARN_UNUSED_RESULT;
585 584
586 } // namespace ui_test_utils 585 } // namespace ui_test_utils
587 586
588 #endif // CHROME_TEST_UI_TEST_UTILS_H_ 587 #endif // CHROME_TEST_UI_TEST_UTILS_H_
OLDNEW
« no previous file with comments | « chrome/test/testing_profile.cc ('k') | chrome/test/ui_test_utils.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698