OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <algorithm> | 5 #include <algorithm> |
6 #include <set> | 6 #include <set> |
7 | 7 |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 // A bag of state to monitor destructions. | 301 // A bag of state to monitor destructions. |
302 struct OwnershipTestState { | 302 struct OwnershipTestState { |
303 OwnershipTestState() : widget_deleted(false), native_widget_deleted(false) {} | 303 OwnershipTestState() : widget_deleted(false), native_widget_deleted(false) {} |
304 | 304 |
305 bool widget_deleted; | 305 bool widget_deleted; |
306 bool native_widget_deleted; | 306 bool native_widget_deleted; |
307 }; | 307 }; |
308 | 308 |
309 // A platform NativeWidget subclass that updates a bag of state when it is | 309 // A platform NativeWidget subclass that updates a bag of state when it is |
310 // destroyed. | 310 // destroyed. |
311 class OwnershipTestNativeWidget : public NativeWidgetPlatform { | 311 class OwnershipTestNativeWidget : public NativeWidgetAura { |
312 public: | 312 public: |
313 OwnershipTestNativeWidget(internal::NativeWidgetDelegate* delegate, | 313 OwnershipTestNativeWidget(internal::NativeWidgetDelegate* delegate, |
314 OwnershipTestState* state) | 314 OwnershipTestState* state) |
315 : NativeWidgetPlatform(delegate), | 315 : NativeWidgetAura(delegate), |
316 state_(state) { | 316 state_(state) { |
317 } | 317 } |
318 virtual ~OwnershipTestNativeWidget() { | 318 virtual ~OwnershipTestNativeWidget() { |
319 state_->native_widget_deleted = true; | 319 state_->native_widget_deleted = true; |
320 } | 320 } |
321 | 321 |
322 private: | 322 private: |
323 OwnershipTestState* state_; | 323 OwnershipTestState* state_; |
324 | 324 |
325 DISALLOW_COPY_AND_ASSIGN(OwnershipTestNativeWidget); | 325 DISALLOW_COPY_AND_ASSIGN(OwnershipTestNativeWidget); |
326 }; | 326 }; |
327 | 327 |
328 // A views NativeWidget subclass that updates a bag of state when it is | 328 // A views NativeWidget subclass that updates a bag of state when it is |
329 // destroyed. | 329 // destroyed. |
330 class OwnershipTestNativeWidgetPlatform : public NativeWidgetPlatformForTest { | 330 class OwnershipTestNativeWidgetAura : public NativeWidgetCapture { |
331 public: | 331 public: |
332 OwnershipTestNativeWidgetPlatform(internal::NativeWidgetDelegate* delegate, | 332 OwnershipTestNativeWidgetAura(internal::NativeWidgetDelegate* delegate, |
333 OwnershipTestState* state) | 333 OwnershipTestState* state) |
334 : NativeWidgetPlatformForTest(delegate), | 334 : NativeWidgetCapture(delegate), |
335 state_(state) { | 335 state_(state) { |
336 } | 336 } |
337 virtual ~OwnershipTestNativeWidgetPlatform() { | 337 virtual ~OwnershipTestNativeWidgetAura() { |
338 state_->native_widget_deleted = true; | 338 state_->native_widget_deleted = true; |
339 } | 339 } |
340 | 340 |
341 private: | 341 private: |
342 OwnershipTestState* state_; | 342 OwnershipTestState* state_; |
343 | 343 |
344 DISALLOW_COPY_AND_ASSIGN(OwnershipTestNativeWidgetPlatform); | 344 DISALLOW_COPY_AND_ASSIGN(OwnershipTestNativeWidgetAura); |
345 }; | 345 }; |
346 | 346 |
347 // A Widget subclass that updates a bag of state when it is destroyed. | 347 // A Widget subclass that updates a bag of state when it is destroyed. |
348 class OwnershipTestWidget : public Widget { | 348 class OwnershipTestWidget : public Widget { |
349 public: | 349 public: |
350 explicit OwnershipTestWidget(OwnershipTestState* state) : state_(state) {} | 350 explicit OwnershipTestWidget(OwnershipTestState* state) : state_(state) {} |
351 virtual ~OwnershipTestWidget() { | 351 virtual ~OwnershipTestWidget() { |
352 state_->widget_deleted = true; | 352 state_->widget_deleted = true; |
353 } | 353 } |
354 | 354 |
355 private: | 355 private: |
356 OwnershipTestState* state_; | 356 OwnershipTestState* state_; |
357 | 357 |
358 DISALLOW_COPY_AND_ASSIGN(OwnershipTestWidget); | 358 DISALLOW_COPY_AND_ASSIGN(OwnershipTestWidget); |
359 }; | 359 }; |
360 | 360 |
361 // Widget owns its NativeWidget, part 1: NativeWidget is a platform-native | 361 // Widget owns its NativeWidget, part 1: NativeWidget is a platform-native |
362 // widget. | 362 // widget. |
363 TEST_F(WidgetOwnershipTest, Ownership_WidgetOwnsPlatformNativeWidget) { | 363 TEST_F(WidgetOwnershipTest, Ownership_WidgetOwnsPlatformNativeWidget) { |
364 OwnershipTestState state; | 364 OwnershipTestState state; |
365 | 365 |
366 scoped_ptr<Widget> widget(new OwnershipTestWidget(&state)); | 366 scoped_ptr<Widget> widget(new OwnershipTestWidget(&state)); |
367 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 367 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
368 params.native_widget = | 368 params.native_widget = |
369 new OwnershipTestNativeWidgetPlatform(widget.get(), &state); | 369 new OwnershipTestNativeWidgetAura(widget.get(), &state); |
370 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 370 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
371 widget->Init(params); | 371 widget->Init(params); |
372 | 372 |
373 // Now delete the Widget, which should delete the NativeWidget. | 373 // Now delete the Widget, which should delete the NativeWidget. |
374 widget.reset(); | 374 widget.reset(); |
375 | 375 |
376 EXPECT_TRUE(state.widget_deleted); | 376 EXPECT_TRUE(state.widget_deleted); |
377 EXPECT_TRUE(state.native_widget_deleted); | 377 EXPECT_TRUE(state.native_widget_deleted); |
378 | 378 |
379 // TODO(beng): write test for this ownership scenario and the NativeWidget | 379 // TODO(beng): write test for this ownership scenario and the NativeWidget |
380 // being deleted out from under the Widget. | 380 // being deleted out from under the Widget. |
381 } | 381 } |
382 | 382 |
383 // Widget owns its NativeWidget, part 2: NativeWidget is a NativeWidget. | 383 // Widget owns its NativeWidget, part 2: NativeWidget is a NativeWidget. |
384 TEST_F(WidgetOwnershipTest, Ownership_WidgetOwnsViewsNativeWidget) { | 384 TEST_F(WidgetOwnershipTest, Ownership_WidgetOwnsViewsNativeWidget) { |
385 OwnershipTestState state; | 385 OwnershipTestState state; |
386 | 386 |
387 scoped_ptr<Widget> widget(new OwnershipTestWidget(&state)); | 387 scoped_ptr<Widget> widget(new OwnershipTestWidget(&state)); |
388 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 388 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
389 params.native_widget = | 389 params.native_widget = |
390 new OwnershipTestNativeWidgetPlatform(widget.get(), &state); | 390 new OwnershipTestNativeWidgetAura(widget.get(), &state); |
391 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 391 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
392 widget->Init(params); | 392 widget->Init(params); |
393 | 393 |
394 // Now delete the Widget, which should delete the NativeWidget. | 394 // Now delete the Widget, which should delete the NativeWidget. |
395 widget.reset(); | 395 widget.reset(); |
396 | 396 |
397 EXPECT_TRUE(state.widget_deleted); | 397 EXPECT_TRUE(state.widget_deleted); |
398 EXPECT_TRUE(state.native_widget_deleted); | 398 EXPECT_TRUE(state.native_widget_deleted); |
399 | 399 |
400 // TODO(beng): write test for this ownership scenario and the NativeWidget | 400 // TODO(beng): write test for this ownership scenario and the NativeWidget |
401 // being deleted out from under the Widget. | 401 // being deleted out from under the Widget. |
402 } | 402 } |
403 | 403 |
404 // Widget owns its NativeWidget, part 3: NativeWidget is a NativeWidget, | 404 // Widget owns its NativeWidget, part 3: NativeWidget is a NativeWidget, |
405 // destroy the parent view. | 405 // destroy the parent view. |
406 TEST_F(WidgetOwnershipTest, | 406 TEST_F(WidgetOwnershipTest, |
407 Ownership_WidgetOwnsViewsNativeWidget_DestroyParentView) { | 407 Ownership_WidgetOwnsViewsNativeWidget_DestroyParentView) { |
408 OwnershipTestState state; | 408 OwnershipTestState state; |
409 | 409 |
410 Widget* toplevel = CreateTopLevelPlatformWidget(); | 410 Widget* toplevel = CreateTopLevelPlatformWidget(); |
411 | 411 |
412 scoped_ptr<Widget> widget(new OwnershipTestWidget(&state)); | 412 scoped_ptr<Widget> widget(new OwnershipTestWidget(&state)); |
413 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 413 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
414 params.native_widget = | 414 params.native_widget = |
415 new OwnershipTestNativeWidgetPlatform(widget.get(), &state); | 415 new OwnershipTestNativeWidgetAura(widget.get(), &state); |
416 params.parent = toplevel->GetNativeView(); | 416 params.parent = toplevel->GetNativeView(); |
417 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 417 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
418 widget->Init(params); | 418 widget->Init(params); |
419 | 419 |
420 // Now close the toplevel, which deletes the view hierarchy. | 420 // Now close the toplevel, which deletes the view hierarchy. |
421 toplevel->CloseNow(); | 421 toplevel->CloseNow(); |
422 | 422 |
423 RunPendingMessages(); | 423 RunPendingMessages(); |
424 | 424 |
425 // This shouldn't delete the widget because it shouldn't be deleted | 425 // This shouldn't delete the widget because it shouldn't be deleted |
426 // from the native side. | 426 // from the native side. |
427 EXPECT_FALSE(state.widget_deleted); | 427 EXPECT_FALSE(state.widget_deleted); |
428 EXPECT_FALSE(state.native_widget_deleted); | 428 EXPECT_FALSE(state.native_widget_deleted); |
429 | 429 |
430 // Now delete it explicitly. | 430 // Now delete it explicitly. |
431 widget.reset(); | 431 widget.reset(); |
432 | 432 |
433 EXPECT_TRUE(state.widget_deleted); | 433 EXPECT_TRUE(state.widget_deleted); |
434 EXPECT_TRUE(state.native_widget_deleted); | 434 EXPECT_TRUE(state.native_widget_deleted); |
435 } | 435 } |
436 | 436 |
437 // NativeWidget owns its Widget, part 1: NativeWidget is a platform-native | 437 // NativeWidget owns its Widget, part 1: NativeWidget is a platform-native |
438 // widget. | 438 // widget. |
439 TEST_F(WidgetOwnershipTest, Ownership_PlatformNativeWidgetOwnsWidget) { | 439 TEST_F(WidgetOwnershipTest, Ownership_PlatformNativeWidgetOwnsWidget) { |
440 OwnershipTestState state; | 440 OwnershipTestState state; |
441 | 441 |
442 Widget* widget = new OwnershipTestWidget(&state); | 442 Widget* widget = new OwnershipTestWidget(&state); |
443 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 443 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
444 params.native_widget = | 444 params.native_widget = |
445 new OwnershipTestNativeWidgetPlatform(widget, &state); | 445 new OwnershipTestNativeWidgetAura(widget, &state); |
446 widget->Init(params); | 446 widget->Init(params); |
447 | 447 |
448 // Now destroy the native widget. | 448 // Now destroy the native widget. |
449 widget->CloseNow(); | 449 widget->CloseNow(); |
450 | 450 |
451 EXPECT_TRUE(state.widget_deleted); | 451 EXPECT_TRUE(state.widget_deleted); |
452 EXPECT_TRUE(state.native_widget_deleted); | 452 EXPECT_TRUE(state.native_widget_deleted); |
453 } | 453 } |
454 | 454 |
455 // NativeWidget owns its Widget, part 2: NativeWidget is a NativeWidget. | 455 // NativeWidget owns its Widget, part 2: NativeWidget is a NativeWidget. |
456 TEST_F(WidgetOwnershipTest, Ownership_ViewsNativeWidgetOwnsWidget) { | 456 TEST_F(WidgetOwnershipTest, Ownership_ViewsNativeWidgetOwnsWidget) { |
457 OwnershipTestState state; | 457 OwnershipTestState state; |
458 | 458 |
459 Widget* toplevel = CreateTopLevelPlatformWidget(); | 459 Widget* toplevel = CreateTopLevelPlatformWidget(); |
460 | 460 |
461 Widget* widget = new OwnershipTestWidget(&state); | 461 Widget* widget = new OwnershipTestWidget(&state); |
462 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 462 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
463 params.native_widget = | 463 params.native_widget = |
464 new OwnershipTestNativeWidgetPlatform(widget, &state); | 464 new OwnershipTestNativeWidgetAura(widget, &state); |
465 params.parent = toplevel->GetNativeView(); | 465 params.parent = toplevel->GetNativeView(); |
466 widget->Init(params); | 466 widget->Init(params); |
467 | 467 |
468 // Now destroy the native widget. This is achieved by closing the toplevel. | 468 // Now destroy the native widget. This is achieved by closing the toplevel. |
469 toplevel->CloseNow(); | 469 toplevel->CloseNow(); |
470 | 470 |
471 // The NativeWidget won't be deleted until after a return to the message loop | 471 // The NativeWidget won't be deleted until after a return to the message loop |
472 // so we have to run pending messages before testing the destruction status. | 472 // so we have to run pending messages before testing the destruction status. |
473 RunPendingMessages(); | 473 RunPendingMessages(); |
474 | 474 |
475 EXPECT_TRUE(state.widget_deleted); | 475 EXPECT_TRUE(state.widget_deleted); |
476 EXPECT_TRUE(state.native_widget_deleted); | 476 EXPECT_TRUE(state.native_widget_deleted); |
477 } | 477 } |
478 | 478 |
479 // NativeWidget owns its Widget, part 3: NativeWidget is a platform-native | 479 // NativeWidget owns its Widget, part 3: NativeWidget is a platform-native |
480 // widget, destroyed out from under it by the OS. | 480 // widget, destroyed out from under it by the OS. |
481 TEST_F(WidgetOwnershipTest, | 481 TEST_F(WidgetOwnershipTest, |
482 Ownership_PlatformNativeWidgetOwnsWidget_NativeDestroy) { | 482 Ownership_PlatformNativeWidgetOwnsWidget_NativeDestroy) { |
483 OwnershipTestState state; | 483 OwnershipTestState state; |
484 | 484 |
485 Widget* widget = new OwnershipTestWidget(&state); | 485 Widget* widget = new OwnershipTestWidget(&state); |
486 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 486 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
487 params.native_widget = | 487 params.native_widget = |
488 new OwnershipTestNativeWidgetPlatform(widget, &state); | 488 new OwnershipTestNativeWidgetAura(widget, &state); |
489 widget->Init(params); | 489 widget->Init(params); |
490 | 490 |
491 // Now simulate a destroy of the platform native widget from the OS: | 491 // Now simulate a destroy of the platform native widget from the OS: |
492 #if defined(USE_AURA) | |
493 delete widget->GetNativeView(); | 492 delete widget->GetNativeView(); |
494 #elif defined(OS_WIN) | |
495 DestroyWindow(widget->GetNativeView()); | |
496 #endif | |
497 | 493 |
498 EXPECT_TRUE(state.widget_deleted); | 494 EXPECT_TRUE(state.widget_deleted); |
499 EXPECT_TRUE(state.native_widget_deleted); | 495 EXPECT_TRUE(state.native_widget_deleted); |
500 } | 496 } |
501 | 497 |
502 // NativeWidget owns its Widget, part 4: NativeWidget is a NativeWidget, | 498 // NativeWidget owns its Widget, part 4: NativeWidget is a NativeWidget, |
503 // destroyed by the view hierarchy that contains it. | 499 // destroyed by the view hierarchy that contains it. |
504 TEST_F(WidgetOwnershipTest, | 500 TEST_F(WidgetOwnershipTest, |
505 Ownership_ViewsNativeWidgetOwnsWidget_NativeDestroy) { | 501 Ownership_ViewsNativeWidgetOwnsWidget_NativeDestroy) { |
506 OwnershipTestState state; | 502 OwnershipTestState state; |
507 | 503 |
508 Widget* toplevel = CreateTopLevelPlatformWidget(); | 504 Widget* toplevel = CreateTopLevelPlatformWidget(); |
509 | 505 |
510 Widget* widget = new OwnershipTestWidget(&state); | 506 Widget* widget = new OwnershipTestWidget(&state); |
511 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 507 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
512 params.native_widget = | 508 params.native_widget = |
513 new OwnershipTestNativeWidgetPlatform(widget, &state); | 509 new OwnershipTestNativeWidgetAura(widget, &state); |
514 params.parent = toplevel->GetNativeView(); | 510 params.parent = toplevel->GetNativeView(); |
515 widget->Init(params); | 511 widget->Init(params); |
516 | 512 |
517 // Destroy the widget (achieved by closing the toplevel). | 513 // Destroy the widget (achieved by closing the toplevel). |
518 toplevel->CloseNow(); | 514 toplevel->CloseNow(); |
519 | 515 |
520 // The NativeWidget won't be deleted until after a return to the message loop | 516 // The NativeWidget won't be deleted until after a return to the message loop |
521 // so we have to run pending messages before testing the destruction status. | 517 // so we have to run pending messages before testing the destruction status. |
522 RunPendingMessages(); | 518 RunPendingMessages(); |
523 | 519 |
524 EXPECT_TRUE(state.widget_deleted); | 520 EXPECT_TRUE(state.widget_deleted); |
525 EXPECT_TRUE(state.native_widget_deleted); | 521 EXPECT_TRUE(state.native_widget_deleted); |
526 } | 522 } |
527 | 523 |
528 // NativeWidget owns its Widget, part 5: NativeWidget is a NativeWidget, | 524 // NativeWidget owns its Widget, part 5: NativeWidget is a NativeWidget, |
529 // we close it directly. | 525 // we close it directly. |
530 TEST_F(WidgetOwnershipTest, | 526 TEST_F(WidgetOwnershipTest, |
531 Ownership_ViewsNativeWidgetOwnsWidget_Close) { | 527 Ownership_ViewsNativeWidgetOwnsWidget_Close) { |
532 OwnershipTestState state; | 528 OwnershipTestState state; |
533 | 529 |
534 Widget* toplevel = CreateTopLevelPlatformWidget(); | 530 Widget* toplevel = CreateTopLevelPlatformWidget(); |
535 | 531 |
536 Widget* widget = new OwnershipTestWidget(&state); | 532 Widget* widget = new OwnershipTestWidget(&state); |
537 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 533 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
538 params.native_widget = | 534 params.native_widget = |
539 new OwnershipTestNativeWidgetPlatform(widget, &state); | 535 new OwnershipTestNativeWidgetAura(widget, &state); |
540 params.parent = toplevel->GetNativeView(); | 536 params.parent = toplevel->GetNativeView(); |
541 widget->Init(params); | 537 widget->Init(params); |
542 | 538 |
543 // Destroy the widget. | 539 // Destroy the widget. |
544 widget->Close(); | 540 widget->Close(); |
545 toplevel->CloseNow(); | 541 toplevel->CloseNow(); |
546 | 542 |
547 // The NativeWidget won't be deleted until after a return to the message loop | 543 // The NativeWidget won't be deleted until after a return to the message loop |
548 // so we have to run pending messages before testing the destruction status. | 544 // so we have to run pending messages before testing the destruction status. |
549 RunPendingMessages(); | 545 RunPendingMessages(); |
550 | 546 |
551 EXPECT_TRUE(state.widget_deleted); | 547 EXPECT_TRUE(state.widget_deleted); |
552 EXPECT_TRUE(state.native_widget_deleted); | 548 EXPECT_TRUE(state.native_widget_deleted); |
553 } | 549 } |
554 | 550 |
555 // Widget owns its NativeWidget and has a WidgetDelegateView as its contents. | 551 // Widget owns its NativeWidget and has a WidgetDelegateView as its contents. |
556 TEST_F(WidgetOwnershipTest, | 552 TEST_F(WidgetOwnershipTest, |
557 Ownership_WidgetOwnsNativeWidgetWithWithWidgetDelegateView) { | 553 Ownership_WidgetOwnsNativeWidgetWithWithWidgetDelegateView) { |
558 OwnershipTestState state; | 554 OwnershipTestState state; |
559 | 555 |
560 WidgetDelegateView* delegate_view = new WidgetDelegateView; | 556 WidgetDelegateView* delegate_view = new WidgetDelegateView; |
561 | 557 |
562 scoped_ptr<Widget> widget(new OwnershipTestWidget(&state)); | 558 scoped_ptr<Widget> widget(new OwnershipTestWidget(&state)); |
563 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 559 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
564 params.native_widget = | 560 params.native_widget = |
565 new OwnershipTestNativeWidgetPlatform(widget.get(), &state); | 561 new OwnershipTestNativeWidgetAura(widget.get(), &state); |
566 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 562 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
567 params.delegate = delegate_view; | 563 params.delegate = delegate_view; |
568 widget->Init(params); | 564 widget->Init(params); |
569 widget->SetContentsView(delegate_view); | 565 widget->SetContentsView(delegate_view); |
570 | 566 |
571 // Now delete the Widget. There should be no crash or use-after-free. | 567 // Now delete the Widget. There should be no crash or use-after-free. |
572 widget.reset(); | 568 widget.reset(); |
573 | 569 |
574 EXPECT_TRUE(state.widget_deleted); | 570 EXPECT_TRUE(state.widget_deleted); |
575 EXPECT_TRUE(state.native_widget_deleted); | 571 EXPECT_TRUE(state.native_widget_deleted); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
640 { | 636 { |
641 Widget widget; | 637 Widget widget; |
642 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 638 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
643 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 639 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
644 widget.Init(params); | 640 widget.Init(params); |
645 widget.Show(); | 641 widget.Show(); |
646 | 642 |
647 widget.native_widget_private()->CloseNow(); | 643 widget.native_widget_private()->CloseNow(); |
648 InvokeWidgetMethods(&widget); | 644 InvokeWidgetMethods(&widget); |
649 } | 645 } |
650 #if defined(USE_AURA) && !defined(OS_CHROMEOS) | 646 #if !defined(OS_CHROMEOS) |
651 { | 647 { |
652 Widget widget; | 648 Widget widget; |
653 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 649 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
654 params.native_widget = new DesktopNativeWidgetAura(&widget); | 650 params.native_widget = new DesktopNativeWidgetAura(&widget); |
655 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 651 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
656 widget.Init(params); | 652 widget.Init(params); |
657 widget.Show(); | 653 widget.Show(); |
658 | 654 |
659 widget.native_widget_private()->CloseNow(); | 655 widget.native_widget_private()->CloseNow(); |
660 InvokeWidgetMethods(&widget); | 656 InvokeWidgetMethods(&widget); |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
824 child2->OnNativeWidgetMove(); | 820 child2->OnNativeWidgetMove(); |
825 EXPECT_EQ(child2, widget_bounds_changed()); | 821 EXPECT_EQ(child2, widget_bounds_changed()); |
826 | 822 |
827 child1->OnNativeWidgetSizeChanged(gfx::Size()); | 823 child1->OnNativeWidgetSizeChanged(gfx::Size()); |
828 EXPECT_EQ(child1, widget_bounds_changed()); | 824 EXPECT_EQ(child1, widget_bounds_changed()); |
829 | 825 |
830 child2->OnNativeWidgetSizeChanged(gfx::Size()); | 826 child2->OnNativeWidgetSizeChanged(gfx::Size()); |
831 EXPECT_EQ(child2, widget_bounds_changed()); | 827 EXPECT_EQ(child2, widget_bounds_changed()); |
832 } | 828 } |
833 | 829 |
834 #if !defined(USE_AURA) && defined(OS_WIN) | 830 #if defined(false) |
835 // Aura needs shell to maximize/fullscreen window. | 831 // Aura needs shell to maximize/fullscreen window. |
836 // NativeWidgetGtk doesn't implement GetRestoredBounds. | 832 // NativeWidgetGtk doesn't implement GetRestoredBounds. |
837 TEST_F(WidgetTest, GetRestoredBounds) { | 833 TEST_F(WidgetTest, GetRestoredBounds) { |
838 Widget* toplevel = CreateTopLevelPlatformWidget(); | 834 Widget* toplevel = CreateTopLevelPlatformWidget(); |
839 EXPECT_EQ(toplevel->GetWindowBoundsInScreen().ToString(), | 835 EXPECT_EQ(toplevel->GetWindowBoundsInScreen().ToString(), |
840 toplevel->GetRestoredBounds().ToString()); | 836 toplevel->GetRestoredBounds().ToString()); |
841 toplevel->Show(); | 837 toplevel->Show(); |
842 toplevel->Maximize(); | 838 toplevel->Maximize(); |
843 RunPendingMessages(); | 839 RunPendingMessages(); |
844 EXPECT_NE(toplevel->GetWindowBoundsInScreen().ToString(), | 840 EXPECT_NE(toplevel->GetWindowBoundsInScreen().ToString(), |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
893 RunPendingMessages(); | 889 RunPendingMessages(); |
894 | 890 |
895 // And it stays maximized after getting out of full screen. | 891 // And it stays maximized after getting out of full screen. |
896 EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, GetWidgetShowState(toplevel)); | 892 EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, GetWidgetShowState(toplevel)); |
897 | 893 |
898 // Clean up. | 894 // Clean up. |
899 toplevel->Close(); | 895 toplevel->Close(); |
900 RunPendingMessages(); | 896 RunPendingMessages(); |
901 } | 897 } |
902 | 898 |
903 #if defined(USE_AURA) | |
904 // The key-event propagation from Widget happens differently on aura and | 899 // The key-event propagation from Widget happens differently on aura and |
905 // non-aura systems because of the difference in IME. So this test works only on | 900 // non-aura systems because of the difference in IME. So this test works only on |
906 // aura. | 901 // aura. |
907 TEST_F(WidgetTest, KeyboardInputEvent) { | 902 TEST_F(WidgetTest, KeyboardInputEvent) { |
908 Widget* toplevel = CreateTopLevelPlatformWidget(); | 903 Widget* toplevel = CreateTopLevelPlatformWidget(); |
909 View* container = toplevel->client_view(); | 904 View* container = toplevel->client_view(); |
910 | 905 |
911 Textfield* textfield = new Textfield(); | 906 Textfield* textfield = new Textfield(); |
912 textfield->SetText(base::ASCIIToUTF16("some text")); | 907 textfield->SetText(base::ASCIIToUTF16("some text")); |
913 container->AddChildView(textfield); | 908 container->AddChildView(textfield); |
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1382 0, 20, | 1377 0, 20, |
1383 2); | 1378 2); |
1384 widget->OnScrollEvent(&scroll2); | 1379 widget->OnScrollEvent(&scroll2); |
1385 | 1380 |
1386 EXPECT_EQ(0, cursor_view->GetEventCount(ui::ET_SCROLL)); | 1381 EXPECT_EQ(0, cursor_view->GetEventCount(ui::ET_SCROLL)); |
1387 EXPECT_EQ(0, cursor_view->GetEventCount(ui::ET_MOUSEWHEEL)); | 1382 EXPECT_EQ(0, cursor_view->GetEventCount(ui::ET_MOUSEWHEEL)); |
1388 | 1383 |
1389 widget->CloseNow(); | 1384 widget->CloseNow(); |
1390 } | 1385 } |
1391 | 1386 |
1392 #endif // defined(USE_AURA) | |
1393 | |
1394 // Tests that if a scroll-begin gesture is not handled, then subsequent scroll | 1387 // Tests that if a scroll-begin gesture is not handled, then subsequent scroll |
1395 // events are not dispatched to any view. | 1388 // events are not dispatched to any view. |
1396 TEST_F(WidgetTest, GestureScrollEventDispatching) { | 1389 TEST_F(WidgetTest, GestureScrollEventDispatching) { |
1397 EventCountView* noscroll_view = new EventCountView; | 1390 EventCountView* noscroll_view = new EventCountView; |
1398 EventCountView* scroll_view = new ScrollableEventCountView; | 1391 EventCountView* scroll_view = new ScrollableEventCountView; |
1399 | 1392 |
1400 noscroll_view->SetBounds(0, 0, 50, 40); | 1393 noscroll_view->SetBounds(0, 0, 50, 40); |
1401 scroll_view->SetBounds(60, 0, 40, 40); | 1394 scroll_view->SetBounds(60, 0, 40, 40); |
1402 | 1395 |
1403 Widget* widget = CreateTopLevelPlatformWidget(); | 1396 Widget* widget = CreateTopLevelPlatformWidget(); |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1573 | 1566 |
1574 // Verifies WindowClosing() is invoked correctly on the delegate when a Widget | 1567 // Verifies WindowClosing() is invoked correctly on the delegate when a Widget |
1575 // is closed. | 1568 // is closed. |
1576 TEST_F(WidgetTest, SingleWindowClosing) { | 1569 TEST_F(WidgetTest, SingleWindowClosing) { |
1577 scoped_ptr<ClosingDelegate> delegate(new ClosingDelegate()); | 1570 scoped_ptr<ClosingDelegate> delegate(new ClosingDelegate()); |
1578 Widget* widget = new Widget(); // Destroyed by CloseNow() below. | 1571 Widget* widget = new Widget(); // Destroyed by CloseNow() below. |
1579 Widget::InitParams init_params = | 1572 Widget::InitParams init_params = |
1580 CreateParams(Widget::InitParams::TYPE_WINDOW); | 1573 CreateParams(Widget::InitParams::TYPE_WINDOW); |
1581 init_params.bounds = gfx::Rect(0, 0, 200, 200); | 1574 init_params.bounds = gfx::Rect(0, 0, 200, 200); |
1582 init_params.delegate = delegate.get(); | 1575 init_params.delegate = delegate.get(); |
1583 #if defined(USE_AURA) && !defined(OS_CHROMEOS) | 1576 #if !defined(OS_CHROMEOS) |
1584 init_params.native_widget = new DesktopNativeWidgetAura(widget); | 1577 init_params.native_widget = new DesktopNativeWidgetAura(widget); |
1585 #endif | 1578 #endif |
1586 widget->Init(init_params); | 1579 widget->Init(init_params); |
1587 EXPECT_EQ(0, delegate->count()); | 1580 EXPECT_EQ(0, delegate->count()); |
1588 widget->CloseNow(); | 1581 widget->CloseNow(); |
1589 EXPECT_EQ(1, delegate->count()); | 1582 EXPECT_EQ(1, delegate->count()); |
1590 } | 1583 } |
1591 | 1584 |
1592 class WidgetWindowTitleTest : public WidgetTest { | 1585 class WidgetWindowTitleTest : public WidgetTest { |
1593 protected: | 1586 protected: |
1594 void RunTest(bool desktop_native_widget) { | 1587 void RunTest(bool desktop_native_widget) { |
1595 Widget* widget = new Widget(); // Destroyed by CloseNow() below. | 1588 Widget* widget = new Widget(); // Destroyed by CloseNow() below. |
1596 Widget::InitParams init_params = | 1589 Widget::InitParams init_params = |
1597 CreateParams(Widget::InitParams::TYPE_WINDOW); | 1590 CreateParams(Widget::InitParams::TYPE_WINDOW); |
1598 widget->Init(init_params); | 1591 widget->Init(init_params); |
1599 | 1592 |
1600 #if defined(USE_AURA) && !defined(OS_CHROMEOS) | 1593 #if !defined(OS_CHROMEOS) |
1601 if (desktop_native_widget) | 1594 if (desktop_native_widget) |
1602 init_params.native_widget = new DesktopNativeWidgetAura(widget); | 1595 init_params.native_widget = new DesktopNativeWidgetAura(widget); |
1603 #else | 1596 #else |
1604 DCHECK(!desktop_native_widget) | 1597 DCHECK(!desktop_native_widget) |
1605 << "DesktopNativeWidget does not exist on non-Aura or on ChromeOS."; | 1598 << "DesktopNativeWidget does not exist on non-Aura or on ChromeOS."; |
1606 #endif | 1599 #endif |
1607 | 1600 |
1608 internal::NativeWidgetPrivate* native_widget = | 1601 internal::NativeWidgetPrivate* native_widget = |
1609 widget->native_widget_private(); | 1602 widget->native_widget_private(); |
1610 | 1603 |
(...skipping 20 matching lines...) Expand all Loading... |
1631 } | 1624 } |
1632 }; | 1625 }; |
1633 | 1626 |
1634 TEST_F(WidgetWindowTitleTest, SetWindowTitleChanged_NativeWidget) { | 1627 TEST_F(WidgetWindowTitleTest, SetWindowTitleChanged_NativeWidget) { |
1635 // Use the default NativeWidget. | 1628 // Use the default NativeWidget. |
1636 bool desktop_native_widget = false; | 1629 bool desktop_native_widget = false; |
1637 RunTest(desktop_native_widget); | 1630 RunTest(desktop_native_widget); |
1638 } | 1631 } |
1639 | 1632 |
1640 // DesktopNativeWidget does not exist on non-Aura or on ChromeOS. | 1633 // DesktopNativeWidget does not exist on non-Aura or on ChromeOS. |
1641 #if defined(USE_AURA) && !defined(OS_CHROMEOS) | 1634 #if !defined(OS_CHROMEOS) |
1642 TEST_F(WidgetWindowTitleTest, SetWindowTitleChanged_DesktopNativeWidget) { | 1635 TEST_F(WidgetWindowTitleTest, SetWindowTitleChanged_DesktopNativeWidget) { |
1643 // Override to use a DesktopNativeWidget. | 1636 // Override to use a DesktopNativeWidget. |
1644 bool desktop_native_widget = true; | 1637 bool desktop_native_widget = true; |
1645 RunTest(desktop_native_widget); | 1638 RunTest(desktop_native_widget); |
1646 } | 1639 } |
1647 #endif // USE_AURA && !OS_CHROMEOS | 1640 #endif // !OS_CHROMEOS |
1648 | 1641 |
1649 // Used by SetTopLevelCorrectly to track calls to OnBeforeWidgetInit(). | 1642 // Used by SetTopLevelCorrectly to track calls to OnBeforeWidgetInit(). |
1650 class VerifyTopLevelDelegate : public TestViewsDelegate { | 1643 class VerifyTopLevelDelegate : public TestViewsDelegate { |
1651 public: | 1644 public: |
1652 VerifyTopLevelDelegate() | 1645 VerifyTopLevelDelegate() |
1653 : on_before_init_called_(false), | 1646 : on_before_init_called_(false), |
1654 is_top_level_(false) { | 1647 is_top_level_(false) { |
1655 } | 1648 } |
1656 | 1649 |
1657 bool on_before_init_called() const { return on_before_init_called_; } | 1650 bool on_before_init_called() const { return on_before_init_called_; } |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1751 // true indicates this should be run again with a value of false. | 1744 // true indicates this should be run again with a value of false. |
1752 // First run uses DesktopNativeWidgetAura (if possible). Second run doesn't. | 1745 // First run uses DesktopNativeWidgetAura (if possible). Second run doesn't. |
1753 bool RunGetNativeThemeFromDestructor(const Widget::InitParams& in_params, | 1746 bool RunGetNativeThemeFromDestructor(const Widget::InitParams& in_params, |
1754 bool is_first_run) { | 1747 bool is_first_run) { |
1755 bool needs_second_run = false; | 1748 bool needs_second_run = false; |
1756 // Destroyed by CloseNow() below. | 1749 // Destroyed by CloseNow() below. |
1757 Widget* widget = new Widget; | 1750 Widget* widget = new Widget; |
1758 Widget::InitParams params(in_params); | 1751 Widget::InitParams params(in_params); |
1759 // Deletes itself when the Widget is destroyed. | 1752 // Deletes itself when the Widget is destroyed. |
1760 params.delegate = new GetNativeThemeFromDestructorView; | 1753 params.delegate = new GetNativeThemeFromDestructorView; |
1761 #if defined(USE_AURA) && !defined(OS_CHROMEOS) | 1754 #if !defined(OS_CHROMEOS) |
1762 if (is_first_run) { | 1755 if (is_first_run) { |
1763 params.native_widget = new DesktopNativeWidgetAura(widget); | 1756 params.native_widget = new DesktopNativeWidgetAura(widget); |
1764 needs_second_run = true; | 1757 needs_second_run = true; |
1765 } | 1758 } |
1766 #endif | 1759 #endif |
1767 widget->Init(params); | 1760 widget->Init(params); |
1768 widget->CloseNow(); | 1761 widget->CloseNow(); |
1769 return needs_second_run; | 1762 return needs_second_run; |
1770 } | 1763 } |
1771 | 1764 |
(...skipping 28 matching lines...) Expand all Loading... |
1800 DISALLOW_COPY_AND_ASSIGN(CloseDestroysWidget); | 1793 DISALLOW_COPY_AND_ASSIGN(CloseDestroysWidget); |
1801 }; | 1794 }; |
1802 | 1795 |
1803 // Verifies Close() results in destroying. | 1796 // Verifies Close() results in destroying. |
1804 TEST_F(WidgetTest, CloseDestroys) { | 1797 TEST_F(WidgetTest, CloseDestroys) { |
1805 bool destroyed = false; | 1798 bool destroyed = false; |
1806 CloseDestroysWidget* widget = new CloseDestroysWidget(&destroyed); | 1799 CloseDestroysWidget* widget = new CloseDestroysWidget(&destroyed); |
1807 Widget::InitParams params = | 1800 Widget::InitParams params = |
1808 CreateParams(views::Widget::InitParams::TYPE_MENU); | 1801 CreateParams(views::Widget::InitParams::TYPE_MENU); |
1809 params.opacity = Widget::InitParams::OPAQUE_WINDOW; | 1802 params.opacity = Widget::InitParams::OPAQUE_WINDOW; |
1810 #if defined(USE_AURA) && !defined(OS_CHROMEOS) | 1803 #if !defined(OS_CHROMEOS) |
1811 params.native_widget = new DesktopNativeWidgetAura(widget); | 1804 params.native_widget = new DesktopNativeWidgetAura(widget); |
1812 #endif | 1805 #endif |
1813 widget->Init(params); | 1806 widget->Init(params); |
1814 widget->Show(); | 1807 widget->Show(); |
1815 widget->Hide(); | 1808 widget->Hide(); |
1816 widget->Close(); | 1809 widget->Close(); |
1817 // Run the message loop as Close() asynchronously deletes. | 1810 // Run the message loop as Close() asynchronously deletes. |
1818 RunPendingMessages(); | 1811 RunPendingMessages(); |
1819 EXPECT_TRUE(destroyed); | 1812 EXPECT_TRUE(destroyed); |
1820 // Close() should destroy the widget. If not we'll cleanup to avoid leaks. | 1813 // Close() should destroy the widget. If not we'll cleanup to avoid leaks. |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1958 // Creates a top level and a child, destroys the child and verifies the views | 1951 // Creates a top level and a child, destroys the child and verifies the views |
1959 // of the child are destroyed before the views of the parent. | 1952 // of the child are destroyed before the views of the parent. |
1960 void RunDestroyChildWidgetsTest(bool top_level_has_desktop_native_widget_aura, | 1953 void RunDestroyChildWidgetsTest(bool top_level_has_desktop_native_widget_aura, |
1961 bool child_has_desktop_native_widget_aura) { | 1954 bool child_has_desktop_native_widget_aura) { |
1962 // When a View is destroyed its name is added here. | 1955 // When a View is destroyed its name is added here. |
1963 std::vector<std::string> destroyed; | 1956 std::vector<std::string> destroyed; |
1964 | 1957 |
1965 Widget* top_level = new Widget; | 1958 Widget* top_level = new Widget; |
1966 Widget::InitParams params = | 1959 Widget::InitParams params = |
1967 CreateParams(views::Widget::InitParams::TYPE_WINDOW); | 1960 CreateParams(views::Widget::InitParams::TYPE_WINDOW); |
1968 #if defined(USE_AURA) && !defined(OS_CHROMEOS) | 1961 #if !defined(OS_CHROMEOS) |
1969 if (top_level_has_desktop_native_widget_aura) | 1962 if (top_level_has_desktop_native_widget_aura) |
1970 params.native_widget = new DesktopNativeWidgetAura(top_level); | 1963 params.native_widget = new DesktopNativeWidgetAura(top_level); |
1971 #endif | 1964 #endif |
1972 top_level->Init(params); | 1965 top_level->Init(params); |
1973 top_level->GetRootView()->AddChildView( | 1966 top_level->GetRootView()->AddChildView( |
1974 new DestroyedTrackingView("parent", &destroyed)); | 1967 new DestroyedTrackingView("parent", &destroyed)); |
1975 top_level->Show(); | 1968 top_level->Show(); |
1976 | 1969 |
1977 Widget* child = new Widget; | 1970 Widget* child = new Widget; |
1978 Widget::InitParams child_params = | 1971 Widget::InitParams child_params = |
1979 CreateParams(views::Widget::InitParams::TYPE_POPUP); | 1972 CreateParams(views::Widget::InitParams::TYPE_POPUP); |
1980 child_params.parent = top_level->GetNativeView(); | 1973 child_params.parent = top_level->GetNativeView(); |
1981 #if defined(USE_AURA) && !defined(OS_CHROMEOS) | 1974 #if !defined(OS_CHROMEOS) |
1982 if (child_has_desktop_native_widget_aura) | 1975 if (child_has_desktop_native_widget_aura) |
1983 child_params.native_widget = new DesktopNativeWidgetAura(child); | 1976 child_params.native_widget = new DesktopNativeWidgetAura(child); |
1984 #endif | 1977 #endif |
1985 child->Init(child_params); | 1978 child->Init(child_params); |
1986 child->GetRootView()->AddChildView( | 1979 child->GetRootView()->AddChildView( |
1987 new DestroyedTrackingView("child", &destroyed)); | 1980 new DestroyedTrackingView("child", &destroyed)); |
1988 child->Show(); | 1981 child->Show(); |
1989 | 1982 |
1990 // Should trigger destruction of the child too. | 1983 // Should trigger destruction of the child too. |
1991 top_level->native_widget_private()->CloseNow(); | 1984 top_level->native_widget_private()->CloseNow(); |
1992 | 1985 |
1993 // Child should be destroyed first. | 1986 // Child should be destroyed first. |
1994 ASSERT_EQ(2u, destroyed.size()); | 1987 ASSERT_EQ(2u, destroyed.size()); |
1995 EXPECT_EQ("child", destroyed[0]); | 1988 EXPECT_EQ("child", destroyed[0]); |
1996 EXPECT_EQ("parent", destroyed[1]); | 1989 EXPECT_EQ("parent", destroyed[1]); |
1997 } | 1990 } |
1998 | 1991 |
1999 private: | 1992 private: |
2000 DISALLOW_COPY_AND_ASSIGN(WidgetChildDestructionTest); | 1993 DISALLOW_COPY_AND_ASSIGN(WidgetChildDestructionTest); |
2001 }; | 1994 }; |
2002 | 1995 |
2003 #if defined(USE_AURA) && !defined(OS_CHROMEOS) | 1996 #if !defined(OS_CHROMEOS) |
2004 // See description of RunDestroyChildWidgetsTest(). Parent uses | 1997 // See description of RunDestroyChildWidgetsTest(). Parent uses |
2005 // DesktopNativeWidgetAura. | 1998 // DesktopNativeWidgetAura. |
2006 TEST_F(WidgetChildDestructionTest, | 1999 TEST_F(WidgetChildDestructionTest, |
2007 DestroyChildWidgetsInOrderWithDesktopNativeWidget) { | 2000 DestroyChildWidgetsInOrderWithDesktopNativeWidget) { |
2008 RunDestroyChildWidgetsTest(true, false); | 2001 RunDestroyChildWidgetsTest(true, false); |
2009 } | 2002 } |
2010 | 2003 |
2011 // See description of RunDestroyChildWidgetsTest(). Both parent and child use | 2004 // See description of RunDestroyChildWidgetsTest(). Both parent and child use |
2012 // DesktopNativeWidgetAura. | 2005 // DesktopNativeWidgetAura. |
2013 TEST_F(WidgetChildDestructionTest, | 2006 TEST_F(WidgetChildDestructionTest, |
2014 DestroyChildWidgetsInOrderWithDesktopNativeWidgetForBoth) { | 2007 DestroyChildWidgetsInOrderWithDesktopNativeWidgetForBoth) { |
2015 RunDestroyChildWidgetsTest(true, true); | 2008 RunDestroyChildWidgetsTest(true, true); |
2016 } | 2009 } |
2017 #endif | 2010 #endif |
2018 | 2011 |
2019 // See description of RunDestroyChildWidgetsTest(). | 2012 // See description of RunDestroyChildWidgetsTest(). |
2020 TEST_F(WidgetChildDestructionTest, DestroyChildWidgetsInOrder) { | 2013 TEST_F(WidgetChildDestructionTest, DestroyChildWidgetsInOrder) { |
2021 RunDestroyChildWidgetsTest(false, false); | 2014 RunDestroyChildWidgetsTest(false, false); |
2022 } | 2015 } |
2023 | 2016 |
2024 #if defined(USE_AURA) && !defined(OS_CHROMEOS) | 2017 #if !defined(OS_CHROMEOS) |
2025 // Provides functionality to create a window modal dialog. | 2018 // Provides functionality to create a window modal dialog. |
2026 class ModalDialogDelegate : public DialogDelegateView { | 2019 class ModalDialogDelegate : public DialogDelegateView { |
2027 public: | 2020 public: |
2028 ModalDialogDelegate() {} | 2021 ModalDialogDelegate() {} |
2029 virtual ~ModalDialogDelegate() {} | 2022 virtual ~ModalDialogDelegate() {} |
2030 | 2023 |
2031 // WidgetDelegate overrides. | 2024 // WidgetDelegate overrides. |
2032 virtual ui::ModalType GetModalType() const OVERRIDE { | 2025 virtual ui::ModalType GetModalType() const OVERRIDE { |
2033 return ui::MODAL_TYPE_WINDOW; | 2026 return ui::MODAL_TYPE_WINDOW; |
2034 } | 2027 } |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2107 ui::EF_NONE); | 2100 ui::EF_NONE); |
2108 details = top_level_widget.GetNativeView()->GetHost()->dispatcher()-> | 2101 details = top_level_widget.GetNativeView()->GetHost()->dispatcher()-> |
2109 OnEventFromSource(&mouse_down_main); | 2102 OnEventFromSource(&mouse_down_main); |
2110 ASSERT_FALSE(details.dispatcher_destroyed); | 2103 ASSERT_FALSE(details.dispatcher_destroyed); |
2111 EXPECT_EQ(0, widget_view->GetEventCount(ui::ET_MOUSE_MOVED)); | 2104 EXPECT_EQ(0, widget_view->GetEventCount(ui::ET_MOUSE_MOVED)); |
2112 | 2105 |
2113 modal_dialog_widget->CloseNow(); | 2106 modal_dialog_widget->CloseNow(); |
2114 top_level_widget.CloseNow(); | 2107 top_level_widget.CloseNow(); |
2115 } | 2108 } |
2116 | 2109 |
2117 #if defined(USE_AURA) | |
2118 // Verifies nativeview visbility matches that of Widget visibility when | 2110 // Verifies nativeview visbility matches that of Widget visibility when |
2119 // SetFullscreen is invoked. | 2111 // SetFullscreen is invoked. |
2120 TEST_F(WidgetTest, FullscreenStatePropagated) { | 2112 TEST_F(WidgetTest, FullscreenStatePropagated) { |
2121 Widget::InitParams init_params = | 2113 Widget::InitParams init_params = |
2122 CreateParams(Widget::InitParams::TYPE_WINDOW); | 2114 CreateParams(Widget::InitParams::TYPE_WINDOW); |
2123 init_params.show_state = ui::SHOW_STATE_NORMAL; | 2115 init_params.show_state = ui::SHOW_STATE_NORMAL; |
2124 init_params.bounds = gfx::Rect(0, 0, 500, 500); | 2116 init_params.bounds = gfx::Rect(0, 0, 500, 500); |
2125 init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 2117 init_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
2126 | 2118 |
2127 { | 2119 { |
(...skipping 10 matching lines...) Expand all Loading... |
2138 Widget top_level_widget; | 2130 Widget top_level_widget; |
2139 init_params.native_widget = new DesktopNativeWidgetAura(&top_level_widget); | 2131 init_params.native_widget = new DesktopNativeWidgetAura(&top_level_widget); |
2140 top_level_widget.Init(init_params); | 2132 top_level_widget.Init(init_params); |
2141 top_level_widget.SetFullscreen(true); | 2133 top_level_widget.SetFullscreen(true); |
2142 EXPECT_EQ(top_level_widget.IsVisible(), | 2134 EXPECT_EQ(top_level_widget.IsVisible(), |
2143 top_level_widget.GetNativeView()->IsVisible()); | 2135 top_level_widget.GetNativeView()->IsVisible()); |
2144 top_level_widget.CloseNow(); | 2136 top_level_widget.CloseNow(); |
2145 } | 2137 } |
2146 #endif | 2138 #endif |
2147 } | 2139 } |
2148 #endif | |
2149 | 2140 |
2150 #if defined(OS_WIN) | 2141 #if defined(OS_WIN) |
2151 | 2142 |
2152 // Provides functionality to test widget activation via an activation flag | 2143 // Provides functionality to test widget activation via an activation flag |
2153 // which can be set by an accessor. | 2144 // which can be set by an accessor. |
2154 class ModalWindowTestWidgetDelegate : public WidgetDelegate { | 2145 class ModalWindowTestWidgetDelegate : public WidgetDelegate { |
2155 public: | 2146 public: |
2156 ModalWindowTestWidgetDelegate() | 2147 ModalWindowTestWidgetDelegate() |
2157 : widget_(NULL), | 2148 : widget_(NULL), |
2158 can_activate_(true) {} | 2149 can_activate_(true) {} |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2272 TEST_F(WidgetTest, ShowAfterShowInactive) { | 2263 TEST_F(WidgetTest, ShowAfterShowInactive) { |
2273 Widget* widget = CreateTopLevelPlatformWidget(); | 2264 Widget* widget = CreateTopLevelPlatformWidget(); |
2274 | 2265 |
2275 widget->ShowInactive(); | 2266 widget->ShowInactive(); |
2276 widget->Show(); | 2267 widget->Show(); |
2277 EXPECT_EQ(GetWidgetShowState(widget), ui::SHOW_STATE_NORMAL); | 2268 EXPECT_EQ(GetWidgetShowState(widget), ui::SHOW_STATE_NORMAL); |
2278 | 2269 |
2279 widget->CloseNow(); | 2270 widget->CloseNow(); |
2280 } | 2271 } |
2281 | 2272 |
2282 #if defined(USE_AURA) && !defined(OS_CHROMEOS) | 2273 #if !defined(OS_CHROMEOS) |
2283 TEST_F(WidgetTest, InactiveWidgetDoesNotGrabActivation) { | 2274 TEST_F(WidgetTest, InactiveWidgetDoesNotGrabActivation) { |
2284 Widget* widget = CreateTopLevelPlatformWidget(); | 2275 Widget* widget = CreateTopLevelPlatformWidget(); |
2285 widget->Show(); | 2276 widget->Show(); |
2286 EXPECT_EQ(GetWidgetShowState(widget), ui::SHOW_STATE_NORMAL); | 2277 EXPECT_EQ(GetWidgetShowState(widget), ui::SHOW_STATE_NORMAL); |
2287 | 2278 |
2288 Widget widget2; | 2279 Widget widget2; |
2289 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | 2280 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
2290 params.can_activate = false; | 2281 params.can_activate = false; |
2291 params.native_widget = new DesktopNativeWidgetAura(&widget2); | 2282 params.native_widget = new DesktopNativeWidgetAura(&widget2); |
2292 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 2283 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2402 child_widget.Init(child_params); | 2393 child_widget.Init(child_params); |
2403 child_widget.AddObserver(&observer); | 2394 child_widget.AddObserver(&observer); |
2404 child_widget.Show(); | 2395 child_widget.Show(); |
2405 | 2396 |
2406 parent_widget.CloseNow(); | 2397 parent_widget.CloseNow(); |
2407 } | 2398 } |
2408 #endif | 2399 #endif |
2409 | 2400 |
2410 } // namespace test | 2401 } // namespace test |
2411 } // namespace views | 2402 } // namespace views |
OLD | NEW |