15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_WEBUI_OPTIONS_CHROMEOS_CORE_CHROMEOS_OPTIONS_HANDLER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_WEBUI_OPTIONS_CHROMEOS_CORE_CHROMEOS_OPTIONS_HANDLER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include <map>
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/memory/linked_ptr.h"
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h"
13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/chromeos/ui_proxy_config_service.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/options/core_options_handler.h"
15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "content/public/browser/notification_observer.h"
16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "content/public/browser/notification_registrar.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace options {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CoreChromeOSOptionsHandler handles ChromeOS settings.
22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass CoreChromeOSOptionsHandler : public ::options::CoreOptionsHandler,
23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                   public content::NotificationObserver {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CoreChromeOSOptionsHandler();
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~CoreChromeOSOptionsHandler();
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ::CoreOptionsHandler overrides
29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void RegisterMessages() OVERRIDE;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual base::Value* FetchPref(const std::string& pref_name) OVERRIDE;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InitializeHandler() OVERRIDE;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ObservePref(const std::string& pref_name) OVERRIDE;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetPref(const std::string& pref_name,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const base::Value* value,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const std::string& metric) OVERRIDE;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void StopObservingPref(const std::string& path) OVERRIDE;
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual base::Value* CreateValueForPref(
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& pref_name,
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& controlling_pref_name) OVERRIDE;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // OptionsPageUIHandler implementation.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void GetLocalizedValues(
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::DictionaryValue* localized_strings) OVERRIDE;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // content::NotificationObserver implementation.
46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void Observe(int type,
47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                       const content::NotificationSource& source,
48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                       const content::NotificationDetails& details) OVERRIDE;
49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnPreferenceChanged(PrefService* service,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   const std::string& pref_name) OVERRIDE;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Called from Javascript to select the network to show proxy settings
55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // for. Triggers pref notifications about the updated proxy settings.
56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void SelectNetworkCallback(const base::ListValue* args);
57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notifies registered JS callbacks on ChromeOS setting change.
5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  void NotifySettingsChanged(const std::string& setting_name);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void NotifyProxyPrefsChanged();
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Called on changes to the ownership status. Needed to update the interface
63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // in case it has been shown before ownership has been fully established.
64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  void NotifyOwnershipChanged();
65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  typedef std::map<std::string, linked_ptr<CrosSettings::ObserverSubscription> >
6768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      SubscriptionMap;
6868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  SubscriptionMap pref_subscription_map_;
6968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
70c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content::NotificationRegistrar notification_registrar_;
71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
72868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  UIProxyConfigService proxy_config_service_;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace options
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_WEBUI_OPTIONS_CHROMEOS_CORE_CHROMEOS_OPTIONS_HANDLER_H_
79