1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Use of this source code is governed by a BSD-style license that can be 3dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// found in the LICENSE file. 4dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_PREFERENCE_API_H__ 6dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#define CHROME_BROWSER_EXTENSIONS_EXTENSION_PREFERENCE_API_H__ 7dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#pragma once 8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include <string> 10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/extensions/extension_function.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/prefs/pref_change_registrar.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_observer.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ExtensionPreferenceEventRouter : public NotificationObserver { 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen explicit ExtensionPreferenceEventRouter(Profile* profile); 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~ExtensionPreferenceEventRouter(); 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // NotificationObserver implementation. 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void Observe(NotificationType type, 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const NotificationSource& source, 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const NotificationDetails& details); 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void OnPrefChanged(PrefService* pref_service, const std::string& pref_key); 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // This method dispatches events to the extension message service. 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void DispatchEvent(const std::string& extension_id, 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& event_name, 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& json_args); 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen PrefChangeRegistrar registrar_; 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen PrefChangeRegistrar incognito_registrar_; 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Weak, owns us (transitively via ExtensionService). 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Profile* profile_; 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(ExtensionPreferenceEventRouter); 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass Value; 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass PrefTransformerInterface { 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~PrefTransformerInterface() {} 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Converts the representation of a preference as seen by the extension 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // into a representation that is used in the pref stores of the browser. 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns the pref store representation in case of success or sets 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // |error| and returns NULL otherwise. 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The ownership of the returned value is passed to the caller. 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual Value* ExtensionToBrowserPref(const Value* extension_pref, 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string* error) = 0; 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Converts the representation of the preference as stored in the browser 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // into a representation that is used by the extension. 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns the extension representation in case of success or NULL otherwise. 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The ownership of the returned value is passed to the caller. 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual Value* BrowserToExtensionPref(const Value* browser_pref) = 0; 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 62dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 63dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass GetPreferenceFunction : public SyncExtensionFunction { 64dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public: 65dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual ~GetPreferenceFunction(); 66dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual bool RunImpl(); 67dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DECLARE_EXTENSION_FUNCTION_NAME("experimental.preferences.get") 68dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 69dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 70dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass SetPreferenceFunction : public SyncExtensionFunction { 71dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public: 72dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual ~SetPreferenceFunction(); 73dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual bool RunImpl(); 74dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DECLARE_EXTENSION_FUNCTION_NAME("experimental.preferences.set") 75dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 76dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 77dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass ClearPreferenceFunction : public SyncExtensionFunction { 78dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen public: 79dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual ~ClearPreferenceFunction(); 80dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual bool RunImpl(); 81dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen DECLARE_EXTENSION_FUNCTION_NAME("experimental.preferences.clear") 82dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 83dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 84dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_PREFERENCE_API_H__ 85