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

Unified Diff: chrome/browser/extensions/api/commands/command_service.cc

Issue 14990002: Make sure keybindings removed don't come back during extension update. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Moving API calls out of ExtensionPrefs class Created 7 years, 7 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: chrome/browser/extensions/api/commands/command_service.cc
diff --git a/chrome/browser/extensions/api/commands/command_service.cc b/chrome/browser/extensions/api/commands/command_service.cc
index 74645d250b5284b050eeadcef1c0f3392b4b79db..b5d123bb4565200ddb28d2a2342da7a751ca07a2 100644
--- a/chrome/browser/extensions/api/commands/command_service.cc
+++ b/chrome/browser/extensions/api/commands/command_service.cc
@@ -23,18 +23,40 @@
#include "content/public/browser/notification_service.h"
using extensions::Extension;
+using extensions::ExtensionPrefs;
namespace {
const char kExtension[] = "extension";
const char kCommandName[] = "command_name";
+// A preference that indicates that the initial keybindings for the given
+// extension have been set.
+const char kInitialBindingsHaveBeenAssigned[] = "initial_keybindings_set";
+
std::string GetPlatformKeybindingKeyForAccelerator(
const ui::Accelerator& accelerator) {
return extensions::Command::CommandPlatform() + ":" +
UTF16ToUTF8(accelerator.GetShortcutText());
}
+void SetInitialBindingsHaveBeenAssigned(
+ ExtensionPrefs* prefs, const std::string& extension_id) {
+ prefs->UpdateExtensionPref(extension_id, kInitialBindingsHaveBeenAssigned,
+ Value::CreateBooleanValue(true));
+}
+
+bool InitialBindingsHaveBeenAssigned(
+ const ExtensionPrefs* prefs, const std::string& extension_id) {
+ bool assigned = false;
+ if (!prefs || !prefs->ReadPrefAsBoolean(extension_id,
+ kInitialBindingsHaveBeenAssigned,
+ &assigned))
+ return false;
+
+ return assigned;
+}
+
} // namespace
namespace extensions {
@@ -231,6 +253,13 @@ void CommandService::AssignInitialKeybindings(const Extension* extension) {
if (!commands)
return;
+ ExtensionService* extension_service =
+ ExtensionSystem::Get(profile_)->extension_service();
+ ExtensionPrefs* extension_prefs = extension_service->extension_prefs();
+ if (InitialBindingsHaveBeenAssigned(extension_prefs, extension->id()))
+ return;
+ SetInitialBindingsHaveBeenAssigned(extension_prefs, extension->id());
+
extensions::CommandMap::const_iterator iter = commands->begin();
for (; iter != commands->end(); ++iter) {
if (!chrome::IsChromeAccelerator(

Powered by Google App Engine
This is Rietveld 408576698