| 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 "ui/views/focus/focus_manager.h" | 5 #include "ui/views/focus/focus_manager.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
| 12 #include "ui/aura/client/focus_client.h" | 12 #include "ui/aura/client/focus_client.h" |
| 13 #include "ui/aura/window.h" | 13 #include "ui/aura/window.h" |
| 14 #include "ui/base/accelerators/accelerator.h" | 14 #include "ui/base/accelerators/accelerator.h" |
| 15 #include "ui/base/accelerators/accelerator_processor.h" |
| 15 #include "ui/base/ime/dummy_text_input_client.h" | 16 #include "ui/base/ime/dummy_text_input_client.h" |
| 16 #include "ui/base/ime/text_input_focus_manager.h" | 17 #include "ui/base/ime/text_input_focus_manager.h" |
| 17 #include "ui/base/ui_base_switches.h" | 18 #include "ui/base/ui_base_switches.h" |
| 18 #include "ui/events/keycodes/keyboard_codes.h" | 19 #include "ui/events/keycodes/keyboard_codes.h" |
| 19 #include "ui/views/accessible_pane_view.h" | 20 #include "ui/views/accessible_pane_view.h" |
| 20 #include "ui/views/controls/button/label_button.h" | 21 #include "ui/views/controls/button/label_button.h" |
| 21 #include "ui/views/focus/focus_manager_factory.h" | 22 #include "ui/views/focus/focus_manager_factory.h" |
| 22 #include "ui/views/focus/widget_focus_manager.h" | 23 #include "ui/views/focus/widget_focus_manager.h" |
| 23 #include "ui/views/test/focus_manager_test.h" | 24 #include "ui/views/test/focus_manager_test.h" |
| 24 #include "ui/views/widget/widget.h" | 25 #include "ui/views/widget/widget.h" |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 } | 182 } |
| 182 | 183 |
| 183 private: | 184 private: |
| 184 int accelerator_count_; // number of times that the accelerator is activated | 185 int accelerator_count_; // number of times that the accelerator is activated |
| 185 bool process_accelerator_; // return value of AcceleratorPressed | 186 bool process_accelerator_; // return value of AcceleratorPressed |
| 186 bool can_handle_accelerators_; // return value of CanHandleAccelerators | 187 bool can_handle_accelerators_; // return value of CanHandleAccelerators |
| 187 | 188 |
| 188 DISALLOW_COPY_AND_ASSIGN(TestAcceleratorTarget); | 189 DISALLOW_COPY_AND_ASSIGN(TestAcceleratorTarget); |
| 189 }; | 190 }; |
| 190 | 191 |
| 192 // Consumes and counts accelerator calls. |
| 193 class TestAcceleratorProcessor : public ui::AcceleratorProcessor { |
| 194 public: |
| 195 TestAcceleratorProcessor() : accelerator_count_(0) {} |
| 196 |
| 197 int accelerator_count() const { return accelerator_count_; } |
| 198 |
| 199 bool ProcessAccelerator(const ui::Accelerator& accelerator) override { |
| 200 ++accelerator_count_; |
| 201 return true; |
| 202 } |
| 203 |
| 204 ui::AcceleratorTarget* GetTargetForAccelerator( |
| 205 const ui::Accelerator& accelerator) const override { |
| 206 return nullptr; |
| 207 } |
| 208 |
| 209 private: |
| 210 int accelerator_count_; // number of times that the accelerator is activated |
| 211 |
| 212 DISALLOW_COPY_AND_ASSIGN(TestAcceleratorProcessor); |
| 213 }; |
| 214 |
| 191 TEST_F(FocusManagerTest, CallsNormalAcceleratorTarget) { | 215 TEST_F(FocusManagerTest, CallsNormalAcceleratorTarget) { |
| 192 FocusManager* focus_manager = GetFocusManager(); | 216 FocusManager* focus_manager = GetFocusManager(); |
| 193 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); | 217 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); |
| 194 ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, ui::EF_NONE); | 218 ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, ui::EF_NONE); |
| 195 | 219 |
| 196 TestAcceleratorTarget return_target(true); | 220 TestAcceleratorTarget return_target(true); |
| 197 TestAcceleratorTarget escape_target(true); | 221 TestAcceleratorTarget escape_target(true); |
| 198 EXPECT_EQ(return_target.accelerator_count(), 0); | 222 EXPECT_EQ(return_target.accelerator_count(), 0); |
| 199 EXPECT_EQ(escape_target.accelerator_count(), 0); | 223 EXPECT_EQ(escape_target.accelerator_count(), 0); |
| 200 EXPECT_EQ(NULL, | 224 EXPECT_EQ(NULL, focus_manager->GetTargetForAccelerator(return_accelerator)); |
| 201 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | 225 EXPECT_EQ(NULL, focus_manager->GetTargetForAccelerator(escape_accelerator)); |
| 202 EXPECT_EQ(NULL, | |
| 203 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | |
| 204 | 226 |
| 205 // Register targets. | 227 // Register targets. |
| 206 focus_manager->RegisterAccelerator(return_accelerator, | 228 focus_manager->RegisterAccelerator(return_accelerator, |
| 207 ui::AcceleratorManager::kNormalPriority, | 229 ui::AcceleratorManager::kNormalPriority, |
| 208 &return_target); | 230 &return_target); |
| 209 focus_manager->RegisterAccelerator(escape_accelerator, | 231 focus_manager->RegisterAccelerator(escape_accelerator, |
| 210 ui::AcceleratorManager::kNormalPriority, | 232 ui::AcceleratorManager::kNormalPriority, |
| 211 &escape_target); | 233 &escape_target); |
| 212 | 234 |
| 213 // Checks if the correct target is registered. | 235 // Checks if the correct target is registered. |
| 214 EXPECT_EQ(&return_target, | 236 EXPECT_EQ(&return_target, |
| 215 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | 237 focus_manager->GetTargetForAccelerator(return_accelerator)); |
| 216 EXPECT_EQ(&escape_target, | 238 EXPECT_EQ(&escape_target, |
| 217 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | 239 focus_manager->GetTargetForAccelerator(escape_accelerator)); |
| 218 | 240 |
| 219 // Hitting the return key. | 241 // Hitting the return key. |
| 220 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); | 242 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
| 221 EXPECT_EQ(return_target.accelerator_count(), 1); | 243 EXPECT_EQ(return_target.accelerator_count(), 1); |
| 222 EXPECT_EQ(escape_target.accelerator_count(), 0); | 244 EXPECT_EQ(escape_target.accelerator_count(), 0); |
| 223 | 245 |
| 224 // Hitting the escape key. | 246 // Hitting the escape key. |
| 225 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); | 247 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); |
| 226 EXPECT_EQ(return_target.accelerator_count(), 1); | 248 EXPECT_EQ(return_target.accelerator_count(), 1); |
| 227 EXPECT_EQ(escape_target.accelerator_count(), 1); | 249 EXPECT_EQ(escape_target.accelerator_count(), 1); |
| 228 | 250 |
| 229 // Register another target for the return key. | 251 // Register another target for the return key. |
| 230 TestAcceleratorTarget return_target2(true); | 252 TestAcceleratorTarget return_target2(true); |
| 231 EXPECT_EQ(return_target2.accelerator_count(), 0); | 253 EXPECT_EQ(return_target2.accelerator_count(), 0); |
| 232 focus_manager->RegisterAccelerator(return_accelerator, | 254 focus_manager->RegisterAccelerator(return_accelerator, |
| 233 ui::AcceleratorManager::kNormalPriority, | 255 ui::AcceleratorManager::kNormalPriority, |
| 234 &return_target2); | 256 &return_target2); |
| 235 EXPECT_EQ(&return_target2, | 257 EXPECT_EQ(&return_target2, |
| 236 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | 258 focus_manager->GetTargetForAccelerator(return_accelerator)); |
| 237 | 259 |
| 238 // Hitting the return key; return_target2 has the priority. | 260 // Hitting the return key; return_target2 has the priority. |
| 239 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); | 261 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
| 240 EXPECT_EQ(return_target.accelerator_count(), 1); | 262 EXPECT_EQ(return_target.accelerator_count(), 1); |
| 241 EXPECT_EQ(return_target2.accelerator_count(), 1); | 263 EXPECT_EQ(return_target2.accelerator_count(), 1); |
| 242 | 264 |
| 243 // Register a target that does not process the accelerator event. | 265 // Register a target that does not process the accelerator event. |
| 244 TestAcceleratorTarget return_target3(false); | 266 TestAcceleratorTarget return_target3(false); |
| 245 EXPECT_EQ(return_target3.accelerator_count(), 0); | 267 EXPECT_EQ(return_target3.accelerator_count(), 0); |
| 246 focus_manager->RegisterAccelerator(return_accelerator, | 268 focus_manager->RegisterAccelerator(return_accelerator, |
| 247 ui::AcceleratorManager::kNormalPriority, | 269 ui::AcceleratorManager::kNormalPriority, |
| 248 &return_target3); | 270 &return_target3); |
| 249 EXPECT_EQ(&return_target3, | 271 EXPECT_EQ(&return_target3, |
| 250 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | 272 focus_manager->GetTargetForAccelerator(return_accelerator)); |
| 251 | 273 |
| 252 // Hitting the return key. | 274 // Hitting the return key. |
| 253 // Since the event handler of return_target3 returns false, return_target2 | 275 // Since the event handler of return_target3 returns false, return_target2 |
| 254 // should be called too. | 276 // should be called too. |
| 255 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); | 277 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
| 256 EXPECT_EQ(return_target.accelerator_count(), 1); | 278 EXPECT_EQ(return_target.accelerator_count(), 1); |
| 257 EXPECT_EQ(return_target2.accelerator_count(), 2); | 279 EXPECT_EQ(return_target2.accelerator_count(), 2); |
| 258 EXPECT_EQ(return_target3.accelerator_count(), 1); | 280 EXPECT_EQ(return_target3.accelerator_count(), 1); |
| 259 | 281 |
| 260 // Unregister return_target2. | 282 // Unregister return_target2. |
| 261 focus_manager->UnregisterAccelerator(return_accelerator, &return_target2); | 283 focus_manager->UnregisterAccelerator(return_accelerator, &return_target2); |
| 262 EXPECT_EQ(&return_target3, | 284 EXPECT_EQ(&return_target3, |
| 263 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | 285 focus_manager->GetTargetForAccelerator(return_accelerator)); |
| 264 | 286 |
| 265 // Hitting the return key. return_target3 and return_target should be called. | 287 // Hitting the return key. return_target3 and return_target should be called. |
| 266 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); | 288 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
| 267 EXPECT_EQ(return_target.accelerator_count(), 2); | 289 EXPECT_EQ(return_target.accelerator_count(), 2); |
| 268 EXPECT_EQ(return_target2.accelerator_count(), 2); | 290 EXPECT_EQ(return_target2.accelerator_count(), 2); |
| 269 EXPECT_EQ(return_target3.accelerator_count(), 2); | 291 EXPECT_EQ(return_target3.accelerator_count(), 2); |
| 270 | 292 |
| 271 // Unregister targets. | 293 // Unregister targets. |
| 272 focus_manager->UnregisterAccelerator(return_accelerator, &return_target); | 294 focus_manager->UnregisterAccelerator(return_accelerator, &return_target); |
| 273 focus_manager->UnregisterAccelerator(return_accelerator, &return_target3); | 295 focus_manager->UnregisterAccelerator(return_accelerator, &return_target3); |
| 274 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target); | 296 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target); |
| 275 | 297 |
| 276 // Now there is no target registered. | 298 // Now there is no target registered. |
| 277 EXPECT_EQ(NULL, | 299 EXPECT_EQ(NULL, focus_manager->GetTargetForAccelerator(return_accelerator)); |
| 278 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | 300 EXPECT_EQ(NULL, focus_manager->GetTargetForAccelerator(escape_accelerator)); |
| 279 EXPECT_EQ(NULL, | |
| 280 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | |
| 281 | 301 |
| 282 // Hitting the return key and the escape key. Nothing should happen. | 302 // Hitting the return key and the escape key. Nothing should happen. |
| 283 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); | 303 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); |
| 284 EXPECT_EQ(return_target.accelerator_count(), 2); | 304 EXPECT_EQ(return_target.accelerator_count(), 2); |
| 285 EXPECT_EQ(return_target2.accelerator_count(), 2); | 305 EXPECT_EQ(return_target2.accelerator_count(), 2); |
| 286 EXPECT_EQ(return_target3.accelerator_count(), 2); | 306 EXPECT_EQ(return_target3.accelerator_count(), 2); |
| 287 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator)); | 307 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator)); |
| 288 EXPECT_EQ(escape_target.accelerator_count(), 1); | 308 EXPECT_EQ(escape_target.accelerator_count(), 1); |
| 289 } | 309 } |
| 290 | 310 |
| 291 TEST_F(FocusManagerTest, HighPriorityHandlers) { | 311 TEST_F(FocusManagerTest, HighPriorityHandlers) { |
| 292 FocusManager* focus_manager = GetFocusManager(); | 312 FocusManager* focus_manager = GetFocusManager(); |
| 293 ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, ui::EF_NONE); | 313 ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, ui::EF_NONE); |
| 294 | 314 |
| 295 TestAcceleratorTarget escape_target_high(true); | 315 TestAcceleratorTarget escape_target_high(true); |
| 296 TestAcceleratorTarget escape_target_normal(true); | 316 TestAcceleratorTarget escape_target_normal(true); |
| 297 EXPECT_EQ(escape_target_high.accelerator_count(), 0); | 317 EXPECT_EQ(escape_target_high.accelerator_count(), 0); |
| 298 EXPECT_EQ(escape_target_normal.accelerator_count(), 0); | 318 EXPECT_EQ(escape_target_normal.accelerator_count(), 0); |
| 299 EXPECT_EQ(NULL, | 319 EXPECT_EQ(NULL, focus_manager->GetTargetForAccelerator(escape_accelerator)); |
| 300 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | |
| 301 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator)); | 320 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator)); |
| 302 | 321 |
| 303 // Register high priority target. | 322 // Register high priority target. |
| 304 focus_manager->RegisterAccelerator(escape_accelerator, | 323 focus_manager->RegisterAccelerator(escape_accelerator, |
| 305 ui::AcceleratorManager::kHighPriority, | 324 ui::AcceleratorManager::kHighPriority, |
| 306 &escape_target_high); | 325 &escape_target_high); |
| 307 EXPECT_EQ(&escape_target_high, | 326 EXPECT_EQ(&escape_target_high, |
| 308 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | 327 focus_manager->GetTargetForAccelerator(escape_accelerator)); |
| 309 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); | 328 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); |
| 310 | 329 |
| 311 // Hit the escape key. | 330 // Hit the escape key. |
| 312 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); | 331 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); |
| 313 EXPECT_EQ(escape_target_high.accelerator_count(), 1); | 332 EXPECT_EQ(escape_target_high.accelerator_count(), 1); |
| 314 EXPECT_EQ(escape_target_normal.accelerator_count(), 0); | 333 EXPECT_EQ(escape_target_normal.accelerator_count(), 0); |
| 315 | 334 |
| 316 // Add a normal priority target and make sure it doesn't see the key. | 335 // Add a normal priority target and make sure it doesn't see the key. |
| 317 focus_manager->RegisterAccelerator(escape_accelerator, | 336 focus_manager->RegisterAccelerator(escape_accelerator, |
| 318 ui::AcceleratorManager::kNormalPriority, | 337 ui::AcceleratorManager::kNormalPriority, |
| 319 &escape_target_normal); | 338 &escape_target_normal); |
| 320 | 339 |
| 321 // Checks if the correct target is registered (same as before, the high | 340 // Checks if the correct target is registered (same as before, the high |
| 322 // priority one). | 341 // priority one). |
| 323 EXPECT_EQ(&escape_target_high, | 342 EXPECT_EQ(&escape_target_high, |
| 324 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | 343 focus_manager->GetTargetForAccelerator(escape_accelerator)); |
| 325 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); | 344 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); |
| 326 | 345 |
| 327 // Hit the escape key. | 346 // Hit the escape key. |
| 328 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); | 347 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); |
| 329 EXPECT_EQ(escape_target_high.accelerator_count(), 2); | 348 EXPECT_EQ(escape_target_high.accelerator_count(), 2); |
| 330 EXPECT_EQ(escape_target_normal.accelerator_count(), 0); | 349 EXPECT_EQ(escape_target_normal.accelerator_count(), 0); |
| 331 | 350 |
| 332 // Unregister the high priority accelerator. | 351 // Unregister the high priority accelerator. |
| 333 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target_high); | 352 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target_high); |
| 334 EXPECT_EQ(&escape_target_normal, | 353 EXPECT_EQ(&escape_target_normal, |
| 335 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | 354 focus_manager->GetTargetForAccelerator(escape_accelerator)); |
| 336 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator)); | 355 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator)); |
| 337 | 356 |
| 338 // Hit the escape key. | 357 // Hit the escape key. |
| 339 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); | 358 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); |
| 340 EXPECT_EQ(escape_target_high.accelerator_count(), 2); | 359 EXPECT_EQ(escape_target_high.accelerator_count(), 2); |
| 341 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); | 360 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); |
| 342 | 361 |
| 343 // Add the high priority target back and make sure it starts seeing the key. | 362 // Add the high priority target back and make sure it starts seeing the key. |
| 344 focus_manager->RegisterAccelerator(escape_accelerator, | 363 focus_manager->RegisterAccelerator(escape_accelerator, |
| 345 ui::AcceleratorManager::kHighPriority, | 364 ui::AcceleratorManager::kHighPriority, |
| 346 &escape_target_high); | 365 &escape_target_high); |
| 347 EXPECT_EQ(&escape_target_high, | 366 EXPECT_EQ(&escape_target_high, |
| 348 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | 367 focus_manager->GetTargetForAccelerator(escape_accelerator)); |
| 349 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); | 368 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); |
| 350 | 369 |
| 351 // Hit the escape key. | 370 // Hit the escape key. |
| 352 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); | 371 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); |
| 353 EXPECT_EQ(escape_target_high.accelerator_count(), 3); | 372 EXPECT_EQ(escape_target_high.accelerator_count(), 3); |
| 354 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); | 373 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); |
| 355 | 374 |
| 356 // Unregister the normal priority accelerator. | 375 // Unregister the normal priority accelerator. |
| 357 focus_manager->UnregisterAccelerator( | 376 focus_manager->UnregisterAccelerator( |
| 358 escape_accelerator, &escape_target_normal); | 377 escape_accelerator, &escape_target_normal); |
| 359 EXPECT_EQ(&escape_target_high, | 378 EXPECT_EQ(&escape_target_high, |
| 360 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | 379 focus_manager->GetTargetForAccelerator(escape_accelerator)); |
| 361 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); | 380 EXPECT_TRUE(focus_manager->HasPriorityHandler(escape_accelerator)); |
| 362 | 381 |
| 363 // Hit the escape key. | 382 // Hit the escape key. |
| 364 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); | 383 EXPECT_TRUE(focus_manager->ProcessAccelerator(escape_accelerator)); |
| 365 EXPECT_EQ(escape_target_high.accelerator_count(), 4); | 384 EXPECT_EQ(escape_target_high.accelerator_count(), 4); |
| 366 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); | 385 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); |
| 367 | 386 |
| 368 // Unregister the high priority accelerator. | 387 // Unregister the high priority accelerator. |
| 369 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target_high); | 388 focus_manager->UnregisterAccelerator(escape_accelerator, &escape_target_high); |
| 370 EXPECT_EQ(NULL, | 389 EXPECT_EQ(NULL, focus_manager->GetTargetForAccelerator(escape_accelerator)); |
| 371 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); | |
| 372 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator)); | 390 EXPECT_FALSE(focus_manager->HasPriorityHandler(escape_accelerator)); |
| 373 | 391 |
| 374 // Hit the escape key (no change, no targets registered). | 392 // Hit the escape key (no change, no targets registered). |
| 375 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator)); | 393 EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator)); |
| 376 EXPECT_EQ(escape_target_high.accelerator_count(), 4); | 394 EXPECT_EQ(escape_target_high.accelerator_count(), 4); |
| 377 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); | 395 EXPECT_EQ(escape_target_normal.accelerator_count(), 1); |
| 378 } | 396 } |
| 379 | 397 |
| 380 TEST_F(FocusManagerTest, CallsEnabledAcceleratorTargetsOnly) { | 398 TEST_F(FocusManagerTest, CallsEnabledAcceleratorTargetsOnly) { |
| 381 FocusManager* focus_manager = GetFocusManager(); | 399 FocusManager* focus_manager = GetFocusManager(); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 408 EXPECT_EQ(1, return_target2.accelerator_count()); | 426 EXPECT_EQ(1, return_target2.accelerator_count()); |
| 409 | 427 |
| 410 // Enabling the target again causes the accelerators to be processed again. | 428 // Enabling the target again causes the accelerators to be processed again. |
| 411 return_target1.set_can_handle_accelerators(true); | 429 return_target1.set_can_handle_accelerators(true); |
| 412 return_target2.set_can_handle_accelerators(true); | 430 return_target2.set_can_handle_accelerators(true); |
| 413 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); | 431 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
| 414 EXPECT_EQ(1, return_target1.accelerator_count()); | 432 EXPECT_EQ(1, return_target1.accelerator_count()); |
| 415 EXPECT_EQ(2, return_target2.accelerator_count()); | 433 EXPECT_EQ(2, return_target2.accelerator_count()); |
| 416 } | 434 } |
| 417 | 435 |
| 436 TEST_F(FocusManagerTest, CallsAcceleratorPreProcessor) { |
| 437 FocusManager* focus_manager = GetFocusManager(); |
| 438 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); |
| 439 TestAcceleratorTarget return_target(true); |
| 440 focus_manager->RegisterAccelerator(return_accelerator, |
| 441 ui::AcceleratorManager::kNormalPriority, |
| 442 &return_target); |
| 443 |
| 444 TestAcceleratorProcessor pre_processor; |
| 445 focus_manager->AddAcceleratorPreProcessor(&pre_processor); |
| 446 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
| 447 EXPECT_EQ(1, pre_processor.accelerator_count()); |
| 448 EXPECT_EQ(0, return_target.accelerator_count()); |
| 449 |
| 450 focus_manager->RemoveAcceleratorProcessor(&pre_processor); |
| 451 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
| 452 EXPECT_EQ(1, pre_processor.accelerator_count()); |
| 453 EXPECT_EQ(1, return_target.accelerator_count()); |
| 454 } |
| 455 |
| 456 TEST_F(FocusManagerTest, CallsAcceleratorPostProcessor) { |
| 457 FocusManager* focus_manager = GetFocusManager(); |
| 458 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); |
| 459 |
| 460 TestAcceleratorProcessor post_processor; |
| 461 focus_manager->AddAcceleratorPostProcessor(&post_processor); |
| 462 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
| 463 EXPECT_EQ(1, post_processor.accelerator_count()); |
| 464 |
| 465 focus_manager->RemoveAcceleratorProcessor(&post_processor); |
| 466 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); |
| 467 EXPECT_EQ(1, post_processor.accelerator_count()); |
| 468 } |
| 469 |
| 418 // Unregisters itself when its accelerator is invoked. | 470 // Unregisters itself when its accelerator is invoked. |
| 419 class SelfUnregisteringAcceleratorTarget : public ui::AcceleratorTarget { | 471 class SelfUnregisteringAcceleratorTarget : public ui::AcceleratorTarget { |
| 420 public: | 472 public: |
| 421 SelfUnregisteringAcceleratorTarget(ui::Accelerator accelerator, | 473 SelfUnregisteringAcceleratorTarget(ui::Accelerator accelerator, |
| 422 FocusManager* focus_manager) | 474 FocusManager* focus_manager) |
| 423 : accelerator_(accelerator), | 475 : accelerator_(accelerator), |
| 424 focus_manager_(focus_manager), | 476 focus_manager_(focus_manager), |
| 425 accelerator_count_(0) { | 477 accelerator_count_(0) { |
| 426 } | 478 } |
| 427 | 479 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 441 int accelerator_count_; | 493 int accelerator_count_; |
| 442 | 494 |
| 443 DISALLOW_COPY_AND_ASSIGN(SelfUnregisteringAcceleratorTarget); | 495 DISALLOW_COPY_AND_ASSIGN(SelfUnregisteringAcceleratorTarget); |
| 444 }; | 496 }; |
| 445 | 497 |
| 446 TEST_F(FocusManagerTest, CallsSelfDeletingAcceleratorTarget) { | 498 TEST_F(FocusManagerTest, CallsSelfDeletingAcceleratorTarget) { |
| 447 FocusManager* focus_manager = GetFocusManager(); | 499 FocusManager* focus_manager = GetFocusManager(); |
| 448 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); | 500 ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); |
| 449 SelfUnregisteringAcceleratorTarget target(return_accelerator, focus_manager); | 501 SelfUnregisteringAcceleratorTarget target(return_accelerator, focus_manager); |
| 450 EXPECT_EQ(target.accelerator_count(), 0); | 502 EXPECT_EQ(target.accelerator_count(), 0); |
| 451 EXPECT_EQ(NULL, | 503 EXPECT_EQ(NULL, focus_manager->GetTargetForAccelerator(return_accelerator)); |
| 452 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | |
| 453 | 504 |
| 454 // Register the target. | 505 // Register the target. |
| 455 focus_manager->RegisterAccelerator(return_accelerator, | 506 focus_manager->RegisterAccelerator(return_accelerator, |
| 456 ui::AcceleratorManager::kNormalPriority, | 507 ui::AcceleratorManager::kNormalPriority, |
| 457 &target); | 508 &target); |
| 458 EXPECT_EQ(&target, | 509 EXPECT_EQ(&target, |
| 459 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | 510 focus_manager->GetTargetForAccelerator(return_accelerator)); |
| 460 | 511 |
| 461 // Hitting the return key. The target will be unregistered. | 512 // Hitting the return key. The target will be unregistered. |
| 462 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); | 513 EXPECT_TRUE(focus_manager->ProcessAccelerator(return_accelerator)); |
| 463 EXPECT_EQ(target.accelerator_count(), 1); | 514 EXPECT_EQ(target.accelerator_count(), 1); |
| 464 EXPECT_EQ(NULL, | 515 EXPECT_EQ(NULL, focus_manager->GetTargetForAccelerator(return_accelerator)); |
| 465 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); | |
| 466 | 516 |
| 467 // Hitting the return key again; nothing should happen. | 517 // Hitting the return key again; nothing should happen. |
| 468 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); | 518 EXPECT_FALSE(focus_manager->ProcessAccelerator(return_accelerator)); |
| 469 EXPECT_EQ(target.accelerator_count(), 1); | 519 EXPECT_EQ(target.accelerator_count(), 1); |
| 470 } | 520 } |
| 471 | 521 |
| 472 class FocusManagerDtorTest : public FocusManagerTest { | 522 class FocusManagerDtorTest : public FocusManagerTest { |
| 473 protected: | 523 protected: |
| 474 typedef std::vector<std::string> DtorTrackVector; | 524 typedef std::vector<std::string> DtorTrackVector; |
| 475 | 525 |
| 476 class FocusManagerDtorTracked : public FocusManager { | 526 class FocusManagerDtorTracked : public FocusManager { |
| 477 public: | 527 public: |
| 478 FocusManagerDtorTracked(Widget* widget, DtorTrackVector* dtor_tracker) | 528 FocusManagerDtorTracked(Widget* widget, DtorTrackVector* dtor_tracker) |
| 479 : FocusManager(widget, NULL /* delegate */), | 529 : FocusManager(widget), dtor_tracker_(dtor_tracker) {} |
| 480 dtor_tracker_(dtor_tracker) { | |
| 481 } | |
| 482 | 530 |
| 483 ~FocusManagerDtorTracked() override { | 531 ~FocusManagerDtorTracked() override { |
| 484 dtor_tracker_->push_back("FocusManagerDtorTracked"); | 532 dtor_tracker_->push_back("FocusManagerDtorTracked"); |
| 485 } | 533 } |
| 486 | 534 |
| 487 DtorTrackVector* dtor_tracker_; | 535 DtorTrackVector* dtor_tracker_; |
| 488 | 536 |
| 489 private: | 537 private: |
| 490 DISALLOW_COPY_AND_ASSIGN(FocusManagerDtorTracked); | 538 DISALLOW_COPY_AND_ASSIGN(FocusManagerDtorTracked); |
| 491 }; | 539 }; |
| (...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 909 EXPECT_EQ(view1, GetFocusManager()->GetFocusedView()); | 957 EXPECT_EQ(view1, GetFocusManager()->GetFocusedView()); |
| 910 | 958 |
| 911 // Allow focus to go to the parent, and focus backwards which should now move | 959 // Allow focus to go to the parent, and focus backwards which should now move |
| 912 // up |widget_view| (in the parent). | 960 // up |widget_view| (in the parent). |
| 913 delegate->set_should_advance_focus_to_parent(true); | 961 delegate->set_should_advance_focus_to_parent(true); |
| 914 GetFocusManager()->AdvanceFocus(true); | 962 GetFocusManager()->AdvanceFocus(true); |
| 915 EXPECT_EQ(widget_view, GetFocusManager()->GetFocusedView()); | 963 EXPECT_EQ(widget_view, GetFocusManager()->GetFocusedView()); |
| 916 } | 964 } |
| 917 | 965 |
| 918 } // namespace views | 966 } // namespace views |
| OLD | NEW |