OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <memory> | 5 #include <memory> |
6 #include <string> | 6 #include <string> |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
11 #include "base/path_service.h" | 11 #include "base/path_service.h" |
12 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
13 #include "base/time/time.h" | 13 #include "base/time/time.h" |
14 #include "chrome/browser/notifications/desktop_notification_profile_util.h" | 14 #include "chrome/browser/notifications/desktop_notification_profile_util.h" |
15 #include "chrome/browser/notifications/message_center_display_service.h" | 15 #include "chrome/browser/notifications/message_center_display_service.h" |
16 #include "chrome/browser/notifications/notification.h" | 16 #include "chrome/browser/notifications/notification.h" |
17 #include "chrome/browser/notifications/notification_test_util.h" | 17 #include "chrome/browser/notifications/notification_test_util.h" |
18 #include "chrome/browser/notifications/platform_notification_service_impl.h" | 18 #include "chrome/browser/notifications/platform_notification_service_impl.h" |
19 #include "chrome/browser/permissions/permission_manager.h" | 19 #include "chrome/browser/permissions/permission_manager.h" |
20 #include "chrome/browser/permissions/permission_request_manager.h" | 20 #include "chrome/browser/permissions/permission_request_manager.h" |
21 #include "chrome/browser/ui/browser.h" | 21 #include "chrome/browser/ui/browser.h" |
| 22 #include "chrome/browser/ui/browser_window.h" |
| 23 #include "chrome/browser/ui/exclusive_access/exclusive_access_context.h" |
22 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 24 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
23 #include "chrome/test/base/in_process_browser_test.h" | 25 #include "chrome/test/base/in_process_browser_test.h" |
| 26 #include "chrome/test/base/interactive_test_utils.h" |
24 #include "chrome/test/base/ui_test_utils.h" | 27 #include "chrome/test/base/ui_test_utils.h" |
25 #include "content/public/browser/permission_type.h" | 28 #include "content/public/browser/permission_type.h" |
26 #include "content/public/common/content_switches.h" | 29 #include "content/public/common/content_switches.h" |
27 #include "content/public/test/browser_test_utils.h" | 30 #include "content/public/test/browser_test_utils.h" |
28 #include "net/base/filename_util.h" | 31 #include "net/base/filename_util.h" |
29 #include "net/test/embedded_test_server/embedded_test_server.h" | 32 #include "net/test/embedded_test_server/embedded_test_server.h" |
30 #include "testing/gmock/include/gmock/gmock.h" | 33 #include "testing/gmock/include/gmock/gmock.h" |
31 #include "third_party/WebKit/public/platform/modules/permissions/permission_stat
us.mojom.h" | 34 #include "third_party/WebKit/public/platform/modules/permissions/permission_stat
us.mojom.h" |
32 | 35 |
33 #if BUILDFLAG(ENABLE_BACKGROUND) | 36 #if BUILDFLAG(ENABLE_BACKGROUND) |
34 #include "chrome/browser/lifetime/keep_alive_registry.h" | 37 #include "chrome/browser/lifetime/keep_alive_registry.h" |
35 #include "chrome/browser/lifetime/keep_alive_types.h" | 38 #include "chrome/browser/lifetime/keep_alive_types.h" |
36 #endif | 39 #endif |
37 | 40 |
| 41 #if defined(OS_MACOSX) |
| 42 #include "base/mac/mac_util.h" |
| 43 #include "ui/base/test/scoped_fake_nswindow_fullscreen.h" |
| 44 #endif |
| 45 |
38 // ----------------------------------------------------------------------------- | 46 // ----------------------------------------------------------------------------- |
39 | 47 |
40 // Dimensions of the icon.png resource in the notification test data directory. | 48 // Dimensions of the icon.png resource in the notification test data directory. |
41 const int kIconWidth = 100; | 49 const int kIconWidth = 100; |
42 const int kIconHeight = 100; | 50 const int kIconHeight = 100; |
43 | 51 |
44 const int kNotificationVibrationPattern[] = { 100, 200, 300 }; | 52 const int kNotificationVibrationPattern[] = { 100, 200, 300 }; |
45 const double kNotificationTimestamp = 621046800000.; | 53 const double kNotificationTimestamp = 621046800000.; |
46 | 54 |
47 class PlatformNotificationServiceBrowserTest : public InProcessBrowserTest { | 55 class PlatformNotificationServiceBrowserTest : public InProcessBrowserTest { |
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
521 EXPECT_EQ("actionTitle2", base::UTF16ToUTF8(notification.buttons()[1].title)); | 529 EXPECT_EQ("actionTitle2", base::UTF16ToUTF8(notification.buttons()[1].title)); |
522 | 530 |
523 notification.delegate()->ButtonClick(0); | 531 notification.delegate()->ButtonClick(0); |
524 ASSERT_TRUE(RunScript("GetMessageFromWorker()", &script_result)); | 532 ASSERT_TRUE(RunScript("GetMessageFromWorker()", &script_result)); |
525 EXPECT_EQ("action_button_click actionId1", script_result); | 533 EXPECT_EQ("action_button_click actionId1", script_result); |
526 | 534 |
527 notification.delegate()->ButtonClick(1); | 535 notification.delegate()->ButtonClick(1); |
528 ASSERT_TRUE(RunScript("GetMessageFromWorker()", &script_result)); | 536 ASSERT_TRUE(RunScript("GetMessageFromWorker()", &script_result)); |
529 EXPECT_EQ("action_button_click actionId2", script_result); | 537 EXPECT_EQ("action_button_click actionId2", script_result); |
530 } | 538 } |
| 539 |
| 540 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, |
| 541 TestShouldDisplayNormal) { |
| 542 ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); |
| 543 |
| 544 std::string script_result; |
| 545 ASSERT_TRUE(RunScript( |
| 546 "DisplayPersistentNotification('display_normal')", &script_result)); |
| 547 EXPECT_EQ("ok", script_result); |
| 548 |
| 549 ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); |
| 550 const Notification& notification = ui_manager()->GetNotificationAt(0); |
| 551 EXPECT_FALSE(notification.delegate()->ShouldDisplayOverFullscreen()); |
| 552 } |
| 553 |
| 554 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, |
| 555 TestShouldDisplayFullscreen) { |
| 556 #if defined(OS_MACOSX) |
| 557 ui::test::ScopedFakeNSWindowFullscreen fake_fullscreen; |
| 558 #endif |
| 559 ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); |
| 560 |
| 561 std::string script_result; |
| 562 ASSERT_TRUE(RunScript( |
| 563 "DisplayPersistentNotification('display_normal')", &script_result)); |
| 564 EXPECT_EQ("ok", script_result); |
| 565 |
| 566 // Set the page fullscreen |
| 567 browser()->exclusive_access_manager()->fullscreen_controller()-> |
| 568 ToggleBrowserFullscreenMode(); |
| 569 |
| 570 { |
| 571 FullscreenStateWaiter fs_state(browser(), true); |
| 572 fs_state.Wait(); |
| 573 } |
| 574 |
| 575 ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow( |
| 576 browser()->window()->GetNativeWindow())); |
| 577 |
| 578 ASSERT_TRUE(browser()->window()->IsActive()) |
| 579 << "Browser is active after going fullscreen"; |
| 580 |
| 581 ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); |
| 582 const Notification& notification = ui_manager()->GetNotificationAt(0); |
| 583 EXPECT_TRUE(notification.delegate()->ShouldDisplayOverFullscreen()); |
| 584 } |
| 585 |
| 586 // The Fake OSX fullscreen window doesn't like drawing a second fullscreen |
| 587 // window when another is visible. |
| 588 #if !defined(OS_MACOSX) |
| 589 IN_PROC_BROWSER_TEST_F(PlatformNotificationServiceBrowserTest, |
| 590 TestShouldDisplayMultiFullscreen) { |
| 591 ASSERT_NO_FATAL_FAILURE(GrantNotificationPermissionForTest()); |
| 592 |
| 593 Browser* other_browser = CreateBrowser(browser()->profile()); |
| 594 ui_test_utils::NavigateToURL(other_browser, GURL("about:blank")); |
| 595 |
| 596 std::string script_result; |
| 597 ASSERT_TRUE(RunScript( |
| 598 "DisplayPersistentNotification('display_normal')", &script_result)); |
| 599 EXPECT_EQ("ok", script_result); |
| 600 |
| 601 // Set the notifcation page fullscreen |
| 602 browser()->exclusive_access_manager()->fullscreen_controller()-> |
| 603 ToggleBrowserFullscreenMode(); |
| 604 { |
| 605 FullscreenStateWaiter fs_state(browser(), true); |
| 606 fs_state.Wait(); |
| 607 } |
| 608 |
| 609 // Set the other browser fullscreen |
| 610 other_browser->exclusive_access_manager()->fullscreen_controller()-> |
| 611 ToggleBrowserFullscreenMode(); |
| 612 { |
| 613 FullscreenStateWaiter fs_state(other_browser, true); |
| 614 fs_state.Wait(); |
| 615 } |
| 616 |
| 617 ASSERT_TRUE(browser()->exclusive_access_manager()->context()->IsFullscreen()); |
| 618 ASSERT_TRUE( |
| 619 other_browser->exclusive_access_manager()->context()->IsFullscreen()); |
| 620 |
| 621 ASSERT_FALSE(browser()->window()->IsActive()); |
| 622 ASSERT_TRUE(other_browser->window()->IsActive()); |
| 623 |
| 624 ASSERT_EQ(1u, ui_manager()->GetNotificationCount()); |
| 625 const Notification& notification = ui_manager()->GetNotificationAt(0); |
| 626 EXPECT_FALSE(notification.delegate()->ShouldDisplayOverFullscreen()); |
| 627 } |
| 628 #endif |
| 629 |
OLD | NEW |