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

Unified Diff: chrome/browser/extensions/extension_preference_helpers.cc

Issue 10008076: Add onFontNameChanged event to Font Settings API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: inject level of control directly Created 8 years, 8 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/extension_preference_helpers.cc
diff --git a/chrome/browser/extensions/extension_preference_helpers.cc b/chrome/browser/extensions/extension_preference_helpers.cc
index 55bbe1b179844306f0b109149f0107cf5d43a703..02655c2be578f3b605201134fbc70543c2af9c4f 100644
--- a/chrome/browser/extensions/extension_preference_helpers.cc
+++ b/chrome/browser/extensions/extension_preference_helpers.cc
@@ -1,15 +1,29 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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 "chrome/browser/extensions/extension_preference_helpers.h"
+#include "base/json/json_writer.h"
+#include "base/values.h"
+#include "chrome/browser/extensions/extension_event_router.h"
+#include "chrome/browser/extensions/extension_prefs.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/profiles/profile.h"
+
namespace {
const char kIncognitoPersistent[] = "incognito_persistent";
const char kIncognitoSessionOnly[] = "incognito_session_only";
const char kRegular[] = "regular";
+const char kLevelOfControlKey[] = "levelOfControl";
+
+const char kNotControllable[] = "not_controllable";
+const char kControlledByOtherExtensions[] = "controlled_by_other_extensions";
+const char kControllableByThisExtension[] = "controllable_by_this_extension";
+const char kControlledByThisExtension[] = "controlled_by_this_extension";
+
} // namespace
namespace extension_preference_helpers {
@@ -26,4 +40,67 @@ bool StringToScope(const std::string& s, ExtensionPrefsScope* scope) {
return true;
}
+const char* GetLevelOfControl(
+ Profile* profile,
+ const std::string& extension_id,
+ const std::string& browser_pref,
+ bool incognito) {
+ PrefService* prefs = incognito ? profile->GetOffTheRecordPrefs()
+ : profile->GetPrefs();
+ const PrefService::Preference* pref =
+ prefs->FindPreference(browser_pref.c_str());
+ CHECK(pref);
+ ExtensionPrefs* ep = profile->GetExtensionService()->extension_prefs();
+
+ if (!pref->IsExtensionModifiable())
+ return kNotControllable;
+
+ if (ep->DoesExtensionControlPref(extension_id, browser_pref, incognito))
+ return kControlledByThisExtension;
+
+ if (ep->CanExtensionControlPref(extension_id, browser_pref, incognito))
+ return kControllableByThisExtension;
+
+ return kControlledByOtherExtensions;
+}
+
+void DispatchEventToExtensions(
+ Profile* profile,
+ const std::string& event_name,
+ ListValue* args,
+ ExtensionAPIPermission::ID permission,
+ bool incognito,
+ const char* browser_pref) {
Bernhard Bauer 2012/04/16 08:00:40 I think I'd prefer passing around std::string's fo
+ ExtensionEventRouter* router = profile->GetExtensionEventRouter();
+ if (!router || !router->HasEventListener(event_name))
+ return;
+ ExtensionService* extension_service = profile->GetExtensionService();
+ const ExtensionSet* extensions = extension_service->extensions();
+ for (ExtensionSet::const_iterator it = extensions->begin();
+ it != extensions->end(); ++it) {
+ std::string extension_id = (*it)->id();
+ // TODO(bauerb): Only iterate over registered event listeners.
+ if (router->ExtensionHasEventListener(extension_id, event_name) &&
+ (*it)->HasAPIPermission(permission) &&
+ (!incognito || extension_service->CanCrossIncognito(*it))) {
+ std::string json_args;
+
+ // Inject level of control key-value.
+ if (browser_pref) {
Bernhard Bauer 2012/04/16 08:00:40 If we don't have a caller that passes in NULL, I t
falken 2012/04/16 09:25:31 Done. My idea was to check in case someone wants t
+ DictionaryValue* dict;
+ bool rv = args->GetDictionary(0, &dict);
+ DCHECK(rv);
+
+ std::string level_of_control =
+ GetLevelOfControl(profile, extension_id, browser_pref, incognito);
+ dict->SetString(kLevelOfControlKey, level_of_control);
+ }
+
+ base::JSONWriter::Write(args, &json_args);
+ router->DispatchEventToExtension(
+ extension_id, event_name, json_args, NULL, GURL());
+ }
+ }
+}
+
} // namespace extension_preference_helpers
« no previous file with comments | « chrome/browser/extensions/extension_preference_helpers.h ('k') | chrome/browser/extensions/extension_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698