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

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 by removing gcd. 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..b770c1b7086de90957f5330e58b86aa4d616bc6b
--- /dev/null
+++ b/content/browser/cocoa/system_hotkey_helper_mac.mm
@@ -0,0 +1,78 @@
+// 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/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* kSystemHotkeyPlistPath =
+ @"~/Library/Preferences/com.apple.symbolichotkeys.plist";
+
+// Amount of time to delay loading the hotkeys.
Robert Sesek 2014/07/08 13:40:01 Units? In the name of the symbol, too, please.
erikchen 2014/07/10 02:07:31 Done.
+const int kLoadHotkeysDelay = 10;
+
+} // namespace
+
+namespace content {
+
+// static
+SystemHotkeyHelperMac* SystemHotkeyHelperMac::GetInstance() {
+ return Singleton<SystemHotkeyHelperMac,
+ LeakySingletonTraits<SystemHotkeyHelperMac> >::get();
Robert Sesek 2014/07/08 13:40:01 Why does this need to be leaky?
erikchen 2014/07/10 02:07:31 I was copy-pasting some code, and didn't read it t
+}
+
+void SystemHotkeyHelperMac::DeferredLoadSystemHotkeys() {
+ base::MessageLoop::current()->PostDelayedTask(
Robert Sesek 2014/07/08 13:40:00 You can post this directly to the FILE thread.
erikchen 2014/07/10 02:07:32 Done.
+ FROM_HERE,
+ base::Bind(&SystemHotkeyHelperMac::LoadSystemHotkeys,
+ weak_ptr_factory_.GetWeakPtr()),
+ base::TimeDelta::FromSeconds(kLoadHotkeysDelay));
+}
+
+SystemHotkeyHelperMac::SystemHotkeyHelperMac()
+ : map_(new SystemHotkeyMap), weak_ptr_factory_(this) {
+}
+
+SystemHotkeyHelperMac::~SystemHotkeyHelperMac() {
+}
+
+void SystemHotkeyHelperMac::LoadSystemHotkeys() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ BrowserThread::PostTask(
+ BrowserThread::FILE,
+ FROM_HERE,
+ base::Bind(&SystemHotkeyHelperMac::LoadFile, base::Unretained(this)));
erikchen 2014/07/08 01:51:39 I couldn't use a weak ptr here because the weak pt
Robert Sesek 2014/07/08 13:40:01 Right, weak pointer only works on a given thread.
erikchen 2014/07/10 02:07:31 Removed all the weak pointers.
+}
+
+void SystemHotkeyHelperMac::LoadFile() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+
+ NSString* expandedFilePath =
+ [kSystemHotkeyPlistPath stringByExpandingTildeInPath];
Robert Sesek 2014/07/08 13:40:00 base::mac::GetUserLibraryPath()
erikchen 2014/07/10 02:07:31 Done.
+ NSData* data = [NSData dataWithContentsOfFile:expandedFilePath];
Robert Sesek 2014/07/08 13:40:01 Alternatively, use base::ReadFileToString and pass
Robert Sesek 2014/07/08 13:40:01 Use alloc/init so you don't need to manually retai
erikchen 2014/07/10 02:07:31 On 2014/07/08 13:40:01, rsesek (OOO July 9-13) wro
erikchen 2014/07/10 02:07:32 Are you suggesting that we pass around a C++ objec
+ [data retain];
+
+ BrowserThread::PostTask(BrowserThread::UI,
+ FROM_HERE,
+ base::Bind(&SystemHotkeyHelperMac::FileDidLoad,
+ weak_ptr_factory_.GetWeakPtr(),
+ data));
+}
+
+void SystemHotkeyHelperMac::FileDidLoad(NSData* data) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ bool success = map()->ParseData(data);
Robert Sesek 2014/07/08 13:40:01 How long does parsing take? Consider doing it on t
+ UMA_HISTOGRAM_BOOLEAN("Mac.SystemHotkeyMap.Load", success);
Robert Sesek 2014/07/08 13:40:01 Use OSX. instead of Mac.
erikchen 2014/07/10 02:07:31 Done.
+ [data release];
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698