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

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

Issue 370293004: mac: Load the system hotkeys after launch. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments from rsesek, round 2. 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
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

Powered by Google App Engine
This is Rietveld 408576698