Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(216)

Unified Diff: content/browser/cocoa/system_hotkey_helper_mac.mm

Issue 408973002: mac: Load the system hotkeys after launch. (reland) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add more unit tests. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/cocoa/system_hotkey_helper_mac.h ('k') | content/browser/cocoa/system_hotkey_map.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « content/browser/cocoa/system_hotkey_helper_mac.h ('k') | content/browser/cocoa/system_hotkey_map.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698