1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef CONTENT_BROWSER_COCOA_SYSTEM_HOTKEY_HELPER_MAC_H_
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define CONTENT_BROWSER_COCOA_SYSTEM_HOTKEY_HELPER_MAC_H_
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/singleton.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/weak_ptr.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifdef __OBJC__
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch@class NSDictionary;
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass NSDictionary;
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace content {
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass SystemHotkeyMap;
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// This singleton holds a global mapping of hotkeys reserved by OSX.
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass SystemHotkeyHelperMac {
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Return pointer to the singleton instance for the current process.
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static SystemHotkeyHelperMac* GetInstance();
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Loads the system hot keys after a brief delay, to reduce file system access
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // immediately after launch.
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void DeferredLoadSystemHotkeys();
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Guaranteed to not be NULL.
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SystemHotkeyMap* map() { return map_.get(); }
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  friend struct DefaultSingletonTraits<SystemHotkeyHelperMac>;
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  SystemHotkeyHelperMac();
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ~SystemHotkeyHelperMac();
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Must be called from the FILE thread. Loads the file containing the system
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // hotkeys into a NSDictionary* object, and passes the result to FileDidLoad
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // on the UI thread.
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void LoadSystemHotkeys();
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Must be called from the UI thread.  This takes ownership of |dictionary|.
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Parses the system hotkeys from the plist stored in |dictionary|.
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void FileDidLoad(NSDictionary* dictionary);
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<SystemHotkeyMap> map_;
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(SystemHotkeyHelperMac);
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace content
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif  // CONTENT_BROWSER_COCOA_SYSTEM_HOTKEY_HELPER_MAC_H_
57