Chromium Code Reviews| 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 "chrome/browser/ui/views/status_icons/status_tray_win.h" | 5 #include "chrome/browser/ui/views/status_icons/status_tray_win.h" |
| 6 | 6 |
| 7 #include <commctrl.h> | 7 #include <commctrl.h> |
| 8 | 8 |
| 9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
|
msw
2015/11/12 00:43:29
Remove
Matt Giuca
2015/11/12 04:44:39
Done.
| |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| 11 #include "chrome/browser/status_icons/status_icon_menu_model.h" | 11 #include "chrome/browser/status_icons/status_icon_menu_model.h" |
| 12 #include "chrome/browser/status_icons/status_icon_observer.h" | 12 #include "chrome/browser/status_icons/status_icon_observer.h" |
| 13 #include "chrome/browser/ui/views/status_icons/status_icon_win.h" | 13 #include "chrome/browser/ui/views/status_icons/status_icon_win.h" |
| 14 #include "grit/chrome_unscaled_resources.h" | |
| 15 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 16 #include "ui/base/resource/resource_bundle.h" | |
| 17 #include "ui/gfx/image/image_skia.h" | 15 #include "ui/gfx/image/image_skia.h" |
| 16 #include "ui/gfx/image/image_unittest_util.h" | |
| 17 | |
| 18 namespace { | |
| 18 | 19 |
| 19 class FakeStatusTrayStateChangerProxy : public StatusTrayStateChangerProxy { | 20 class FakeStatusTrayStateChangerProxy : public StatusTrayStateChangerProxy { |
| 20 public: | 21 public: |
| 21 FakeStatusTrayStateChangerProxy() | 22 FakeStatusTrayStateChangerProxy() |
| 22 : enqueue_called_(false), icon_id_(0), window_(NULL) {} | 23 : enqueue_called_(false), icon_id_(0), window_(NULL) {} |
| 23 | 24 |
| 24 void EnqueueChange(UINT icon_id, HWND window) override { | 25 void EnqueueChange(UINT icon_id, HWND window) override { |
| 25 enqueue_called_ = true; | 26 enqueue_called_ = true; |
| 26 icon_id_ = icon_id; | 27 icon_id_ = icon_id; |
| 27 window_ = window; | 28 window_ = window; |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 48 bool balloon_clicked() const { return balloon_clicked_; } | 49 bool balloon_clicked() const { return balloon_clicked_; } |
| 49 size_t status_icon_click_count() const { | 50 size_t status_icon_click_count() const { |
| 50 return status_icon_click_count_; | 51 return status_icon_click_count_; |
| 51 } | 52 } |
| 52 | 53 |
| 53 private: | 54 private: |
| 54 size_t status_icon_click_count_; | 55 size_t status_icon_click_count_; |
| 55 bool balloon_clicked_; | 56 bool balloon_clicked_; |
| 56 }; | 57 }; |
| 57 | 58 |
| 59 StatusIcon* CreateStatusIcon(StatusTray* tray) { | |
| 60 gfx::ImageSkia image = gfx::test::CreateImageSkia(16, 16); | |
|
msw
2015/11/12 00:43:29
ditto: inline
Matt Giuca
2015/11/12 04:44:39
Done.
| |
| 61 return tray->CreateStatusIcon( | |
| 62 StatusTray::OTHER_ICON, image, base::ASCIIToUTF16("tool tip")); | |
|
msw
2015/11/12 00:43:29
ditto: string16(), remove utf_string_conversions.h
Matt Giuca
2015/11/12 04:44:39
Done.
| |
| 63 } | |
| 64 | |
| 65 } // namespace | |
| 66 | |
| 58 TEST(StatusTrayWinTest, CreateTray) { | 67 TEST(StatusTrayWinTest, CreateTray) { |
| 59 // Just tests creation/destruction. | 68 // Just tests creation/destruction. |
| 60 StatusTrayWin tray; | 69 StatusTrayWin tray; |
| 61 } | 70 } |
| 62 | 71 |
| 63 TEST(StatusTrayWinTest, CreateIconAndMenu) { | 72 TEST(StatusTrayWinTest, CreateIconAndMenu) { |
| 64 // Create an icon, set the images, tooltip, and context menu, then shut it | 73 // Create an icon, set the images, tooltip, and context menu, then shut it |
| 65 // down. | 74 // down. |
| 66 StatusTrayWin tray; | 75 StatusTrayWin tray; |
| 67 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 76 StatusIcon* icon = CreateStatusIcon(&tray); |
| 68 gfx::ImageSkia* image = rb.GetImageSkiaNamed(IDR_STATUS_TRAY_ICON); | |
| 69 StatusIcon* icon = tray.CreateStatusIcon( | |
| 70 StatusTray::OTHER_ICON, *image, base::ASCIIToUTF16("tool tip")); | |
| 71 scoped_ptr<StatusIconMenuModel> menu(new StatusIconMenuModel(NULL)); | 77 scoped_ptr<StatusIconMenuModel> menu(new StatusIconMenuModel(NULL)); |
| 72 menu->AddItem(0, L"foo"); | 78 menu->AddItem(0, L"foo"); |
| 73 icon->SetContextMenu(menu.Pass()); | 79 icon->SetContextMenu(menu.Pass()); |
| 74 } | 80 } |
| 75 | 81 |
| 76 #if !defined(USE_AURA) // http://crbug.com/156370 | 82 #if !defined(USE_AURA) // http://crbug.com/156370 |
| 77 TEST(StatusTrayWinTest, ClickOnIcon) { | 83 TEST(StatusTrayWinTest, ClickOnIcon) { |
| 78 // Create an icon, send a fake click event, make sure observer is called. | 84 // Create an icon, send a fake click event, make sure observer is called. |
| 79 StatusTrayWin tray; | 85 StatusTrayWin tray; |
| 80 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | |
| 81 gfx::ImageSkia* image = rb.GetImageSkiaNamed(IDR_STATUS_TRAY_ICON); | |
| 82 | 86 |
| 83 StatusIconWin* icon = static_cast<StatusIconWin*>(tray.CreateStatusIcon( | 87 StatusIconWin* icon = static_cast<StatusIconWin*>(CreateStatusIcon(&tray)); |
|
msw
2015/11/12 00:43:29
nit: maybe include the static_cast in the helper a
Matt Giuca
2015/11/12 04:44:39
Done.
| |
| 84 StatusTray::OTHER_ICON, *image, base::ASCIIToUTF16("tool tip"))); | |
| 85 FakeStatusIconObserver observer; | 88 FakeStatusIconObserver observer; |
| 86 icon->AddObserver(&observer); | 89 icon->AddObserver(&observer); |
| 87 // Mimic a click. | 90 // Mimic a click. |
| 88 tray.WndProc(NULL, icon->message_id(), icon->icon_id(), WM_LBUTTONDOWN); | 91 tray.WndProc(NULL, icon->message_id(), icon->icon_id(), WM_LBUTTONDOWN); |
| 89 // Mimic a right-click - observer should not be called. | 92 // Mimic a right-click - observer should not be called. |
| 90 tray.WndProc(NULL, icon->message_id(), icon->icon_id(), WM_RBUTTONDOWN); | 93 tray.WndProc(NULL, icon->message_id(), icon->icon_id(), WM_RBUTTONDOWN); |
| 91 EXPECT_EQ(1, observer.status_icon_click_count()); | 94 EXPECT_EQ(1, observer.status_icon_click_count()); |
| 92 icon->RemoveObserver(&observer); | 95 icon->RemoveObserver(&observer); |
| 93 } | 96 } |
| 94 | 97 |
| 95 TEST(StatusTrayWinTest, ClickOnBalloon) { | 98 TEST(StatusTrayWinTest, ClickOnBalloon) { |
| 96 // Create an icon, send a fake click event, make sure observer is called. | 99 // Create an icon, send a fake click event, make sure observer is called. |
| 97 StatusTrayWin tray; | 100 StatusTrayWin tray; |
| 98 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 101 StatusIconWin* icon = static_cast<StatusIconWin*>(CreateStatusIcon(&tray)); |
| 99 gfx::ImageSkia* image = rb.GetImageSkiaNamed(IDR_STATUS_TRAY_ICON); | |
| 100 | |
| 101 StatusIconWin* icon = static_cast<StatusIconWin*>(tray.CreateStatusIcon( | |
| 102 StatusTray::OTHER_ICON, *image, base::ASCIIToUTF16("tool tip"))); | |
| 103 FakeStatusIconObserver observer; | 102 FakeStatusIconObserver observer; |
| 104 icon->AddObserver(&observer); | 103 icon->AddObserver(&observer); |
| 105 // Mimic a click. | 104 // Mimic a click. |
| 106 tray.WndProc( | 105 tray.WndProc( |
| 107 NULL, icon->message_id(), icon->icon_id(), TB_INDETERMINATE); | 106 NULL, icon->message_id(), icon->icon_id(), TB_INDETERMINATE); |
| 108 EXPECT_TRUE(observer.balloon_clicked()); | 107 EXPECT_TRUE(observer.balloon_clicked()); |
| 109 icon->RemoveObserver(&observer); | 108 icon->RemoveObserver(&observer); |
| 110 } | 109 } |
| 111 | 110 |
| 112 TEST(StatusTrayWinTest, HandleOldIconId) { | 111 TEST(StatusTrayWinTest, HandleOldIconId) { |
| 113 StatusTrayWin tray; | 112 StatusTrayWin tray; |
| 114 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 113 StatusIconWin* icon = static_cast<StatusIconWin*>(CreateStatusIcon(&tray)); |
| 115 gfx::ImageSkia* image = rb.GetImageSkiaNamed(IDR_STATUS_TRAY_ICON); | |
| 116 | |
| 117 StatusIconWin* icon = static_cast<StatusIconWin*>(tray.CreateStatusIcon( | |
| 118 StatusTray::OTHER_ICON, *image, base::ASCIIToUTF16("tool tip"))); | |
| 119 UINT message_id = icon->message_id(); | 114 UINT message_id = icon->message_id(); |
| 120 UINT icon_id = icon->icon_id(); | 115 UINT icon_id = icon->icon_id(); |
| 121 | 116 |
| 122 tray.RemoveStatusIcon(icon); | 117 tray.RemoveStatusIcon(icon); |
| 123 tray.WndProc(NULL, message_id, icon_id, WM_LBUTTONDOWN); | 118 tray.WndProc(NULL, message_id, icon_id, WM_LBUTTONDOWN); |
| 124 } | 119 } |
| 125 #endif // !defined(USE_AURA) | 120 #endif // !defined(USE_AURA) |
| 126 | 121 |
| 127 TEST(StatusTrayWinTest, EnsureVisibleTest) { | 122 TEST(StatusTrayWinTest, EnsureVisibleTest) { |
| 128 StatusTrayWin tray; | 123 StatusTrayWin tray; |
| 129 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | |
| 130 gfx::ImageSkia* image = rb.GetImageSkiaNamed(IDR_STATUS_TRAY_ICON); | |
| 131 | 124 |
| 132 FakeStatusTrayStateChangerProxy* proxy = | 125 FakeStatusTrayStateChangerProxy* proxy = |
| 133 new FakeStatusTrayStateChangerProxy(); | 126 new FakeStatusTrayStateChangerProxy(); |
| 134 tray.SetStatusTrayStateChangerProxyForTest( | 127 tray.SetStatusTrayStateChangerProxyForTest( |
| 135 scoped_ptr<StatusTrayStateChangerProxy>(proxy)); | 128 scoped_ptr<StatusTrayStateChangerProxy>(proxy)); |
| 136 | 129 |
| 137 StatusIconWin* icon = static_cast<StatusIconWin*>(tray.CreateStatusIcon( | 130 StatusIconWin* icon = static_cast<StatusIconWin*>(CreateStatusIcon(&tray)); |
| 138 StatusTray::OTHER_ICON, *image, base::ASCIIToUTF16("tool tip"))); | |
| 139 | 131 |
| 140 icon->ForceVisible(); | 132 icon->ForceVisible(); |
| 141 // |proxy| is owned by |tray|, and |tray| lives to the end of the scope, | 133 // |proxy| is owned by |tray|, and |tray| lives to the end of the scope, |
| 142 // so calling methods on |proxy| is safe. | 134 // so calling methods on |proxy| is safe. |
| 143 EXPECT_TRUE(proxy->enqueue_called()); | 135 EXPECT_TRUE(proxy->enqueue_called()); |
| 144 EXPECT_EQ(proxy->window(), icon->window()); | 136 EXPECT_EQ(proxy->window(), icon->window()); |
| 145 EXPECT_EQ(proxy->icon_id(), icon->icon_id()); | 137 EXPECT_EQ(proxy->icon_id(), icon->icon_id()); |
| 146 } | 138 } |
| OLD | NEW |