scoped_fake_full_keyboard_access.mm 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // Copyright 2016 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #import "ui/base/test/scoped_fake_full_keyboard_access.h"
  5. #import <Cocoa/Cocoa.h>
  6. #include <ostream>
  7. #include "base/check_op.h"
  8. #import "base/mac/scoped_objc_class_swizzler.h"
  9. namespace {
  10. ui::test::ScopedFakeFullKeyboardAccess* g_instance = nullptr;
  11. } // namespace
  12. // Donates a testing implementation of [NSApp isFullKeyboardAccessEnabled].
  13. @interface FakeNSAppKeyboardAccessDonor : NSObject
  14. @end
  15. @implementation FakeNSAppKeyboardAccessDonor
  16. - (BOOL)isFullKeyboardAccessEnabled {
  17. DCHECK(g_instance);
  18. return g_instance->full_keyboard_access_state();
  19. }
  20. @end
  21. namespace ui {
  22. namespace test {
  23. ScopedFakeFullKeyboardAccess::ScopedFakeFullKeyboardAccess()
  24. : full_keyboard_access_state_(true),
  25. swizzler_(new base::mac::ScopedObjCClassSwizzler(
  26. [NSApplication class],
  27. [FakeNSAppKeyboardAccessDonor class],
  28. @selector(isFullKeyboardAccessEnabled))) {
  29. DCHECK(!g_instance)
  30. << "Cannot initialize ScopedFakeFullKeyboardAccess twice\n";
  31. g_instance = this;
  32. }
  33. ScopedFakeFullKeyboardAccess::~ScopedFakeFullKeyboardAccess() {
  34. DCHECK_EQ(g_instance, this);
  35. g_instance = nullptr;
  36. }
  37. // static
  38. ScopedFakeFullKeyboardAccess* ScopedFakeFullKeyboardAccess::GetInstance() {
  39. return g_instance;
  40. }
  41. } // namespace test
  42. } // namespace ui