| 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 "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
| 6 #include "base/message_loop.h" | 6 #include "base/message_loop.h" |
| 7 #include "chrome/app/chrome_command_ids.h" | 7 #include "chrome/app/chrome_command_ids.h" |
| 8 #include "chrome/browser/protector/mock_setting_change.h" | 8 #include "chrome/browser/protector/mock_setting_change.h" |
| 9 #include "chrome/browser/protector/protector_service.h" | 9 #include "chrome/browser/protector/protector_service.h" |
| 10 #include "chrome/browser/protector/protector_service_factory.h" | 10 #include "chrome/browser/protector/protector_service_factory.h" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 class ProtectorServiceTest : public InProcessBrowserTest { | 26 class ProtectorServiceTest : public InProcessBrowserTest { |
| 27 public: | 27 public: |
| 28 virtual void SetUpOnMainThread() { | 28 virtual void SetUpOnMainThread() { |
| 29 protector_service_ = | 29 protector_service_ = |
| 30 ProtectorServiceFactory::GetForProfile(browser()->profile()); | 30 ProtectorServiceFactory::GetForProfile(browser()->profile()); |
| 31 // ProtectService will own this change instance. | 31 // ProtectService will own this change instance. |
| 32 mock_change_ = new NiceMock<MockSettingChange>(); | 32 mock_change_ = new NiceMock<MockSettingChange>(); |
| 33 } | 33 } |
| 34 | 34 |
| 35 protected: | 35 protected: |
| 36 GlobalError* GetGlobalError() { | 36 GlobalError* GetGlobalError(BaseSettingChange* change) { |
| 37 return protector_service_->error_.get(); | 37 std::vector<ProtectorService::Item>::iterator item = |
| 38 std::find_if(protector_service_->items_.begin(), |
| 39 protector_service_->items_.end(), |
| 40 ProtectorService::MatchItemByChange(change)); |
| 41 return item == protector_service_->items_.end() ? |
| 42 NULL : item->error.get(); |
| 38 } | 43 } |
| 39 | 44 |
| 40 void ExpectGlobalErrorActive(bool active) { | 45 // Checks that |protector_service_| has an error instance corresponding to |
| 41 GlobalError* error = | 46 // |change| and that GlobalErrorService knows about it. |
| 42 GlobalErrorServiceFactory::GetForProfile(browser()->profile())-> | 47 bool IsGlobalErrorActive(BaseSettingChange* change) { |
| 43 GetGlobalErrorByMenuItemCommandID(IDC_SHOW_SETTINGS_CHANGES); | 48 GlobalError* error = GetGlobalError(change); |
| 44 EXPECT_EQ(active, error != NULL); | 49 if (!error) |
| 45 EXPECT_EQ(active, GetGlobalError() != NULL); | 50 return false; |
| 46 EXPECT_EQ(active, protector_service_->IsShowingChange()); | 51 if (!GlobalErrorServiceFactory::GetForProfile(browser()->profile())-> |
| 52 GetGlobalErrorByMenuItemCommandID(error->MenuItemCommandID())) { |
| 53 return false; |
| 54 } |
| 55 return protector_service_->IsShowingChange(); |
| 47 } | 56 } |
| 48 | 57 |
| 49 ProtectorService* protector_service_; | 58 ProtectorService* protector_service_; |
| 50 MockSettingChange* mock_change_; | 59 MockSettingChange* mock_change_; |
| 51 }; | 60 }; |
| 52 | 61 |
| 53 IN_PROC_BROWSER_TEST_F(ProtectorServiceTest, ChangeInitError) { | 62 IN_PROC_BROWSER_TEST_F(ProtectorServiceTest, ChangeInitError) { |
| 54 // Init fails and causes the change to be ignored. | 63 // Init fails and causes the change to be ignored. |
| 55 EXPECT_CALL(*mock_change_, MockInit(browser()->profile())). | 64 EXPECT_CALL(*mock_change_, MockInit(browser()->profile())). |
| 56 WillOnce(Return(false)); | 65 WillOnce(Return(false)); |
| 57 protector_service_->ShowChange(mock_change_); | 66 protector_service_->ShowChange(mock_change_); |
| 58 ExpectGlobalErrorActive(false); | 67 EXPECT_FALSE(IsGlobalErrorActive(mock_change_)); |
| 59 ui_test_utils::RunAllPendingInMessageLoop(); | 68 ui_test_utils::RunAllPendingInMessageLoop(); |
| 60 ExpectGlobalErrorActive(false); | 69 EXPECT_FALSE(IsGlobalErrorActive(mock_change_)); |
| 61 } | 70 } |
| 62 | 71 |
| 63 IN_PROC_BROWSER_TEST_F(ProtectorServiceTest, ShowAndDismiss) { | 72 IN_PROC_BROWSER_TEST_F(ProtectorServiceTest, ShowAndDismiss) { |
| 64 // Show the change and immediately dismiss it. | 73 // Show the change and immediately dismiss it. |
| 65 EXPECT_CALL(*mock_change_, MockInit(browser()->profile())). | 74 EXPECT_CALL(*mock_change_, MockInit(browser()->profile())). |
| 66 WillOnce(Return(true)); | 75 WillOnce(Return(true)); |
| 67 protector_service_->ShowChange(mock_change_); | 76 protector_service_->ShowChange(mock_change_); |
| 68 ui_test_utils::RunAllPendingInMessageLoop(); | 77 ui_test_utils::RunAllPendingInMessageLoop(); |
| 69 ExpectGlobalErrorActive(true); | 78 EXPECT_TRUE(IsGlobalErrorActive(mock_change_)); |
| 70 protector_service_->DismissChange(); | 79 protector_service_->DismissChange(mock_change_); |
| 71 ui_test_utils::RunAllPendingInMessageLoop(); | 80 ui_test_utils::RunAllPendingInMessageLoop(); |
| 72 ExpectGlobalErrorActive(false); | 81 EXPECT_FALSE(IsGlobalErrorActive(mock_change_)); |
| 73 } | 82 } |
| 74 | 83 |
| 75 IN_PROC_BROWSER_TEST_F(ProtectorServiceTest, ShowAndApply) { | 84 IN_PROC_BROWSER_TEST_F(ProtectorServiceTest, ShowAndApply) { |
| 76 // Show the change and apply it. | 85 // Show the change and apply it. |
| 77 EXPECT_CALL(*mock_change_, MockInit(browser()->profile())). | 86 EXPECT_CALL(*mock_change_, MockInit(browser()->profile())). |
| 78 WillOnce(Return(true)); | 87 WillOnce(Return(true)); |
| 79 protector_service_->ShowChange(mock_change_); | 88 protector_service_->ShowChange(mock_change_); |
| 80 ui_test_utils::RunAllPendingInMessageLoop(); | 89 ui_test_utils::RunAllPendingInMessageLoop(); |
| 81 ExpectGlobalErrorActive(true); | 90 EXPECT_TRUE(IsGlobalErrorActive(mock_change_)); |
| 82 EXPECT_CALL(*mock_change_, Apply(browser())); | 91 EXPECT_CALL(*mock_change_, Apply(browser())); |
| 83 protector_service_->ApplyChange(browser()); | 92 protector_service_->ApplyChange(mock_change_, browser()); |
| 84 ui_test_utils::RunAllPendingInMessageLoop(); | 93 ui_test_utils::RunAllPendingInMessageLoop(); |
| 85 ExpectGlobalErrorActive(false); | 94 EXPECT_FALSE(IsGlobalErrorActive(mock_change_)); |
| 86 } | 95 } |
| 87 | 96 |
| 88 IN_PROC_BROWSER_TEST_F(ProtectorServiceTest, ShowAndApplyManually) { | 97 IN_PROC_BROWSER_TEST_F(ProtectorServiceTest, ShowAndApplyManually) { |
| 89 // Show the change and apply it, mimicking a button click. | 98 // Show the change and apply it, mimicking a button click. |
| 90 EXPECT_CALL(*mock_change_, MockInit(browser()->profile())). | 99 EXPECT_CALL(*mock_change_, MockInit(browser()->profile())). |
| 91 WillOnce(Return(true)); | 100 WillOnce(Return(true)); |
| 92 protector_service_->ShowChange(mock_change_); | 101 protector_service_->ShowChange(mock_change_); |
| 93 ui_test_utils::RunAllPendingInMessageLoop(); | 102 ui_test_utils::RunAllPendingInMessageLoop(); |
| 94 ExpectGlobalErrorActive(true); | 103 EXPECT_TRUE(IsGlobalErrorActive(mock_change_)); |
| 95 EXPECT_CALL(*mock_change_, Apply(browser())); | 104 EXPECT_CALL(*mock_change_, Apply(browser())); |
| 96 // Pressing Cancel applies the change. | 105 // Pressing Cancel applies the change. |
| 97 GlobalError* error = GetGlobalError(); | 106 GlobalError* error = GetGlobalError(mock_change_); |
| 107 ASSERT_TRUE(error); |
| 98 error->BubbleViewCancelButtonPressed(browser()); | 108 error->BubbleViewCancelButtonPressed(browser()); |
| 99 error->GetBubbleView()->CloseBubbleView(); | 109 error->GetBubbleView()->CloseBubbleView(); |
| 100 ui_test_utils::RunAllPendingInMessageLoop(); | 110 ui_test_utils::RunAllPendingInMessageLoop(); |
| 101 ExpectGlobalErrorActive(false); | 111 EXPECT_FALSE(IsGlobalErrorActive(mock_change_)); |
| 102 } | 112 } |
| 103 | 113 |
| 104 IN_PROC_BROWSER_TEST_F(ProtectorServiceTest, ShowAndDiscard) { | 114 IN_PROC_BROWSER_TEST_F(ProtectorServiceTest, ShowAndDiscard) { |
| 105 // Show the change and discard it. | 115 // Show the change and discard it. |
| 106 EXPECT_CALL(*mock_change_, MockInit(browser()->profile())). | 116 EXPECT_CALL(*mock_change_, MockInit(browser()->profile())). |
| 107 WillOnce(Return(true)); | 117 WillOnce(Return(true)); |
| 108 protector_service_->ShowChange(mock_change_); | 118 protector_service_->ShowChange(mock_change_); |
| 109 ui_test_utils::RunAllPendingInMessageLoop(); | 119 ui_test_utils::RunAllPendingInMessageLoop(); |
| 110 ExpectGlobalErrorActive(true); | 120 EXPECT_TRUE(IsGlobalErrorActive(mock_change_)); |
| 111 EXPECT_CALL(*mock_change_, Discard(browser())); | 121 EXPECT_CALL(*mock_change_, Discard(browser())); |
| 112 protector_service_->DiscardChange(browser()); | 122 protector_service_->DiscardChange(mock_change_, browser()); |
| 113 ui_test_utils::RunAllPendingInMessageLoop(); | 123 ui_test_utils::RunAllPendingInMessageLoop(); |
| 114 ExpectGlobalErrorActive(false); | 124 EXPECT_FALSE(IsGlobalErrorActive(mock_change_)); |
| 115 } | 125 } |
| 116 | 126 |
| 117 IN_PROC_BROWSER_TEST_F(ProtectorServiceTest, ShowAndDiscardManually) { | 127 IN_PROC_BROWSER_TEST_F(ProtectorServiceTest, ShowAndDiscardManually) { |
| 118 // Show the change and discard it, mimicking a button click. | 128 // Show the change and discard it, mimicking a button click. |
| 119 EXPECT_CALL(*mock_change_, MockInit(browser()->profile())). | 129 EXPECT_CALL(*mock_change_, MockInit(browser()->profile())). |
| 120 WillOnce(Return(true)); | 130 WillOnce(Return(true)); |
| 121 protector_service_->ShowChange(mock_change_); | 131 protector_service_->ShowChange(mock_change_); |
| 122 ui_test_utils::RunAllPendingInMessageLoop(); | 132 ui_test_utils::RunAllPendingInMessageLoop(); |
| 123 ExpectGlobalErrorActive(true); | 133 EXPECT_TRUE(IsGlobalErrorActive(mock_change_)); |
| 124 EXPECT_CALL(*mock_change_, Discard(browser())); | 134 EXPECT_CALL(*mock_change_, Discard(browser())); |
| 125 // Pressing Apply discards the change. | 135 // Pressing Apply discards the change. |
| 126 GlobalError* error = GetGlobalError(); | 136 GlobalError* error = GetGlobalError(mock_change_); |
| 137 ASSERT_TRUE(error); |
| 127 error->BubbleViewAcceptButtonPressed(browser()); | 138 error->BubbleViewAcceptButtonPressed(browser()); |
| 128 error->GetBubbleView()->CloseBubbleView(); | 139 error->GetBubbleView()->CloseBubbleView(); |
| 129 ui_test_utils::RunAllPendingInMessageLoop(); | 140 ui_test_utils::RunAllPendingInMessageLoop(); |
| 130 ExpectGlobalErrorActive(false); | 141 EXPECT_FALSE(IsGlobalErrorActive(mock_change_)); |
| 131 } | 142 } |
| 132 | 143 |
| 133 IN_PROC_BROWSER_TEST_F(ProtectorServiceTest, BubbleClosedInsideApply) { | 144 IN_PROC_BROWSER_TEST_F(ProtectorServiceTest, BubbleClosedInsideApply) { |
| 134 EXPECT_CALL(*mock_change_, MockInit(browser()->profile())). | 145 EXPECT_CALL(*mock_change_, MockInit(browser()->profile())). |
| 135 WillOnce(Return(true)); | 146 WillOnce(Return(true)); |
| 136 protector_service_->ShowChange(mock_change_); | 147 protector_service_->ShowChange(mock_change_); |
| 137 ui_test_utils::RunAllPendingInMessageLoop(); | 148 ui_test_utils::RunAllPendingInMessageLoop(); |
| 138 ExpectGlobalErrorActive(true); | 149 EXPECT_TRUE(IsGlobalErrorActive(mock_change_)); |
| 139 | 150 |
| 140 GlobalError* error = GetGlobalError(); | 151 GlobalError* error = GetGlobalError(mock_change_); |
| 152 ASSERT_TRUE(error); |
| 141 GlobalErrorBubbleViewBase* bubble_view = error->GetBubbleView(); | 153 GlobalErrorBubbleViewBase* bubble_view = error->GetBubbleView(); |
| 142 EXPECT_TRUE(bubble_view); | 154 ASSERT_TRUE(bubble_view); |
| 143 EXPECT_CALL(*mock_change_, Apply(browser())).WillOnce(InvokeWithoutArgs( | 155 EXPECT_CALL(*mock_change_, Apply(browser())).WillOnce(InvokeWithoutArgs( |
| 144 bubble_view, &GlobalErrorBubbleViewBase::CloseBubbleView)); | 156 bubble_view, &GlobalErrorBubbleViewBase::CloseBubbleView)); |
| 145 | 157 |
| 146 // Pressing Cancel applies the change. | 158 // Pressing Cancel applies the change. |
| 147 error->BubbleViewCancelButtonPressed(browser()); | 159 error->BubbleViewCancelButtonPressed(browser()); |
| 148 ui_test_utils::RunAllPendingInMessageLoop(); | 160 ui_test_utils::RunAllPendingInMessageLoop(); |
| 149 ExpectGlobalErrorActive(false); | 161 EXPECT_FALSE(IsGlobalErrorActive(mock_change_)); |
| 162 } |
| 163 |
| 164 IN_PROC_BROWSER_TEST_F(ProtectorServiceTest, ShowMultipleChangesAndApply) { |
| 165 // Show the first change. |
| 166 EXPECT_CALL(*mock_change_, MockInit(browser()->profile())). |
| 167 WillOnce(Return(true)); |
| 168 protector_service_->ShowChange(mock_change_); |
| 169 ui_test_utils::RunAllPendingInMessageLoop(); |
| 170 EXPECT_TRUE(IsGlobalErrorActive(mock_change_)); |
| 171 |
| 172 // ProtectService will own this change instance as well. |
| 173 MockSettingChange* mock_change2 = new NiceMock<MockSettingChange>(); |
| 174 // Show the second change. |
| 175 EXPECT_CALL(*mock_change2, MockInit(browser()->profile())). |
| 176 WillOnce(Return(true)); |
| 177 protector_service_->ShowChange(mock_change2); |
| 178 ui_test_utils::RunAllPendingInMessageLoop(); |
| 179 EXPECT_TRUE(IsGlobalErrorActive(mock_change_)); |
| 180 EXPECT_TRUE(IsGlobalErrorActive(mock_change2)); |
| 181 |
| 182 // Apply the first change, the second should still be active. |
| 183 EXPECT_CALL(*mock_change_, Apply(browser())); |
| 184 protector_service_->ApplyChange(mock_change_, browser()); |
| 185 ui_test_utils::RunAllPendingInMessageLoop(); |
| 186 EXPECT_FALSE(IsGlobalErrorActive(mock_change_)); |
| 187 EXPECT_TRUE(IsGlobalErrorActive(mock_change2)); |
| 188 |
| 189 // Finally apply the second change. |
| 190 EXPECT_CALL(*mock_change2, Apply(browser())); |
| 191 protector_service_->ApplyChange(mock_change2, browser()); |
| 192 ui_test_utils::RunAllPendingInMessageLoop(); |
| 193 EXPECT_FALSE(IsGlobalErrorActive(mock_change_)); |
| 194 EXPECT_FALSE(IsGlobalErrorActive(mock_change2)); |
| 195 } |
| 196 |
| 197 IN_PROC_BROWSER_TEST_F(ProtectorServiceTest, |
| 198 ShowMultipleChangesDismissAndApply) { |
| 199 // Show the first change. |
| 200 EXPECT_CALL(*mock_change_, MockInit(browser()->profile())). |
| 201 WillOnce(Return(true)); |
| 202 protector_service_->ShowChange(mock_change_); |
| 203 ui_test_utils::RunAllPendingInMessageLoop(); |
| 204 EXPECT_TRUE(IsGlobalErrorActive(mock_change_)); |
| 205 |
| 206 // ProtectService will own this change instance as well. |
| 207 MockSettingChange* mock_change2 = new NiceMock<MockSettingChange>(); |
| 208 // Show the second change. |
| 209 EXPECT_CALL(*mock_change2, MockInit(browser()->profile())). |
| 210 WillOnce(Return(true)); |
| 211 protector_service_->ShowChange(mock_change2); |
| 212 ui_test_utils::RunAllPendingInMessageLoop(); |
| 213 EXPECT_TRUE(IsGlobalErrorActive(mock_change_)); |
| 214 EXPECT_TRUE(IsGlobalErrorActive(mock_change2)); |
| 215 |
| 216 // Dismiss the first change, the second should still be active. |
| 217 protector_service_->DismissChange(mock_change_); |
| 218 ui_test_utils::RunAllPendingInMessageLoop(); |
| 219 EXPECT_FALSE(IsGlobalErrorActive(mock_change_)); |
| 220 EXPECT_TRUE(IsGlobalErrorActive(mock_change2)); |
| 221 |
| 222 // Finally apply the second change. |
| 223 EXPECT_CALL(*mock_change2, Apply(browser())); |
| 224 protector_service_->ApplyChange(mock_change2, browser()); |
| 225 ui_test_utils::RunAllPendingInMessageLoop(); |
| 226 EXPECT_FALSE(IsGlobalErrorActive(mock_change_)); |
| 227 EXPECT_FALSE(IsGlobalErrorActive(mock_change2)); |
| 228 } |
| 229 |
| 230 IN_PROC_BROWSER_TEST_F(ProtectorServiceTest, |
| 231 ShowMultipleChangesAndApplyManually) { |
| 232 // Show the first change. |
| 233 EXPECT_CALL(*mock_change_, MockInit(browser()->profile())). |
| 234 WillOnce(Return(true)); |
| 235 protector_service_->ShowChange(mock_change_); |
| 236 ui_test_utils::RunAllPendingInMessageLoop(); |
| 237 EXPECT_TRUE(IsGlobalErrorActive(mock_change_)); |
| 238 |
| 239 // ProtectService will own this change instance as well. |
| 240 MockSettingChange* mock_change2 = new NiceMock<MockSettingChange>(); |
| 241 // Show the second change. |
| 242 EXPECT_CALL(*mock_change2, MockInit(browser()->profile())). |
| 243 WillOnce(Return(true)); |
| 244 protector_service_->ShowChange(mock_change2); |
| 245 ui_test_utils::RunAllPendingInMessageLoop(); |
| 246 EXPECT_TRUE(IsGlobalErrorActive(mock_change_)); |
| 247 EXPECT_TRUE(IsGlobalErrorActive(mock_change2)); |
| 248 |
| 249 // Apply the first change, mimicking a button click; the second should still |
| 250 // be active. |
| 251 EXPECT_CALL(*mock_change_, Apply(browser())); |
| 252 GlobalError* error = GetGlobalError(mock_change_); |
| 253 ASSERT_TRUE(error); |
| 254 error->ShowBubbleView(browser()); |
| 255 error->BubbleViewCancelButtonPressed(browser()); |
| 256 error->GetBubbleView()->CloseBubbleView(); |
| 257 ui_test_utils::RunAllPendingInMessageLoop(); |
| 258 EXPECT_FALSE(IsGlobalErrorActive(mock_change_)); |
| 259 EXPECT_TRUE(IsGlobalErrorActive(mock_change2)); |
| 260 |
| 261 // Finally apply the second change. |
| 262 EXPECT_CALL(*mock_change2, Apply(browser())); |
| 263 GlobalError* error2 = GetGlobalError(mock_change2); |
| 264 ASSERT_TRUE(error); |
| 265 error2->ShowBubbleView(browser()); |
| 266 error2->BubbleViewCancelButtonPressed(browser()); |
| 267 error2->GetBubbleView()->CloseBubbleView(); |
| 268 ui_test_utils::RunAllPendingInMessageLoop(); |
| 269 EXPECT_FALSE(IsGlobalErrorActive(mock_change_)); |
| 270 EXPECT_FALSE(IsGlobalErrorActive(mock_change2)); |
| 150 } | 271 } |
| 151 | 272 |
| 152 // TODO(ivankr): Timeout test. | 273 // TODO(ivankr): Timeout test. |
| 153 | 274 |
| 154 } // namespace protector | 275 } // namespace protector |
| OLD | NEW |