| 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..68c52820ef36baffe6edbbb572c4ecf0d4a06dc0
|
| --- /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* expanded_file_path =
|
| + [NSString stringWithFormat:@"%s%@",
|
| + library_path.c_str(),
|
| + kSystemHotkeyPlistExtension];
|
| +
|
| + // Loads the file into memory.
|
| + NSData* data = [NSData dataWithContentsOfFile:expanded_file_path];
|
| + // 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.LoadSuccess", success);
|
| + [dictionary release];
|
| +}
|
| +
|
| +} // namespace content
|
|
|