Chromium Code Reviews| Index: content/browser/cocoa/system_hotkey_helper_mac.mm |
| diff --git a/content/browser/cocoa/system_hotkey_helper_mac.mm b/content/browser/cocoa/system_hotkey_helper_mac.mm |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b3b82f5d3a3992172ad6b06e82ee99d5c6690de7 |
| --- /dev/null |
| +++ b/content/browser/cocoa/system_hotkey_helper_mac.mm |
| @@ -0,0 +1,77 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "content/browser/cocoa/system_hotkey_helper_mac.h" |
| + |
| +#include "base/bind.h" |
| +#include "base/files/file_path.h" |
| +#include "base/mac/foundation_util.h" |
| +#include "base/message_loop/message_loop.h" |
| +#include "base/metrics/histogram.h" |
| +#include "content/browser/cocoa/system_hotkey_map.h" |
| +#include "content/public/browser/browser_thread.h" |
| + |
| +namespace { |
| + |
| +NSString* kSystemHotkeyPlistExtension = |
| + @"/Preferences/com.apple.symbolichotkeys.plist"; |
| + |
| +// Amount of time to delay loading the hotkeys in seconds. |
| +const int kLoadHotkeysDelaySeconds = 10; |
| + |
| +} // namespace |
| + |
| +namespace content { |
| + |
| +// static |
| +SystemHotkeyHelperMac* SystemHotkeyHelperMac::GetInstance() { |
| + return Singleton<SystemHotkeyHelperMac>::get(); |
| +} |
| + |
| +void SystemHotkeyHelperMac::DeferredLoadSystemHotkeys() { |
| + BrowserThread::PostDelayedTask( |
| + BrowserThread::FILE, |
| + FROM_HERE, |
| + base::Bind(&SystemHotkeyHelperMac::LoadSystemHotkeys, |
| + base::Unretained(this)), |
| + base::TimeDelta::FromSeconds(kLoadHotkeysDelaySeconds)); |
| +} |
| + |
| +SystemHotkeyHelperMac::SystemHotkeyHelperMac() : map_(new SystemHotkeyMap) { |
| +} |
| + |
| +SystemHotkeyHelperMac::~SystemHotkeyHelperMac() { |
| +} |
| + |
| +void SystemHotkeyHelperMac::LoadSystemHotkeys() { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| + |
| + std::string library_path(base::mac::GetUserLibraryPath().value()); |
| + NSString* expandedFilePath = |
|
Robert Sesek
2014/07/14 15:33:31
In C++ methods, use under_score naming. E.g. expan
erikchen
2014/07/14 18:17:38
Done.
|
| + [NSString stringWithFormat:@"%s%@", |
| + library_path.c_str(), |
| + kSystemHotkeyPlistExtension]; |
| + |
| + // Loads the file into memory. |
| + NSData* data = [NSData dataWithContentsOfFile:expandedFilePath]; |
| + // Intentionally create the object with +1 retain count, as FileDidLoad |
| + // will destroy the object. |
| + NSDictionary* dictionary = [SystemHotkeyMap::DictionaryFromData(data) retain]; |
| + |
| + BrowserThread::PostTask(BrowserThread::UI, |
| + FROM_HERE, |
| + base::Bind(&SystemHotkeyHelperMac::FileDidLoad, |
| + base::Unretained(this), |
| + dictionary)); |
| +} |
| + |
| +void SystemHotkeyHelperMac::FileDidLoad(NSDictionary* dictionary) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + |
| + bool success = map()->ParseDictionary(dictionary); |
| + UMA_HISTOGRAM_BOOLEAN("OSX.SystemHotkeyMap.Load", success); |
| + [dictionary release]; |
| +} |
| + |
| +} // namespace content |