158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_OPTIONS_NETWORK_PROPERTY_UI_DATA_H_
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_OPTIONS_NETWORK_PROPERTY_UI_DATA_H_
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <string>
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/basictypes.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "components/onc/onc_constants.h"
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace base {
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class DictionaryValue;
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class Value;
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chromeos {
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Holds meta information for a network property: Whether the property is under
2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// policy control, if it is user-editable, and policy-provided default value, if
2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// available.
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class NetworkPropertyUIData {
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Initializes with ONC_SOURCE_NONE and no default value.
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NetworkPropertyUIData();
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Initializes with the given |onc_source| and no default value.
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  explicit NetworkPropertyUIData(::onc::ONCSource onc_source);
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ~NetworkPropertyUIData();
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Update the property object from dictionary, reading the key given by
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // |property_key|.
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  void ParseOncProperty(::onc::ONCSource onc_source,
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        const base::DictionaryValue* onc,
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                        const std::string& property_key);
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const base::Value* default_value() const { return default_value_.get(); }
4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bool IsManaged() const {
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    return (onc_source_ == ::onc::ONC_SOURCE_DEVICE_POLICY ||
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)            onc_source_ == ::onc::ONC_SOURCE_USER_POLICY);
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  bool IsEditable() const { return !IsManaged(); }
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ::onc::ONCSource onc_source_;
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<base::Value> default_value_;
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(NetworkPropertyUIData);
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace chromeos
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_OPTIONS_NETWORK_PROPERTY_UI_DATA_H_
57