| 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 |