summaryrefslogtreecommitdiffstats
path: root/chromeos/network/managed_network_configuration_handler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromeos/network/managed_network_configuration_handler.cc')
-rw-r--r--chromeos/network/managed_network_configuration_handler.cc62
1 files changed, 50 insertions, 12 deletions
diff --git a/chromeos/network/managed_network_configuration_handler.cc b/chromeos/network/managed_network_configuration_handler.cc
index 5ee791f..e7dd0b6 100644
--- a/chromeos/network/managed_network_configuration_handler.cc
+++ b/chromeos/network/managed_network_configuration_handler.cc
@@ -25,6 +25,7 @@
#include "chromeos/network/network_configuration_handler.h"
#include "chromeos/network/network_event_log.h"
#include "chromeos/network/network_handler_callbacks.h"
+#include "chromeos/network/network_policy_observer.h"
#include "chromeos/network/network_profile.h"
#include "chromeos/network/network_profile_handler.h"
#include "chromeos/network/network_state.h"
@@ -98,10 +99,6 @@ void SetUIData(const NetworkUIData& ui_data,
ui_data_blob);
}
-// A dummy callback to ignore the result of Shill calls.
-void IgnoreString(const std::string& str) {
-}
-
void LogErrorWithDict(const tracked_objects::Location& from_where,
const std::string& error_name,
scoped_ptr<base::DictionaryValue> error_data) {
@@ -374,6 +371,16 @@ scoped_ptr<NetworkUIData> ManagedNetworkConfigurationHandler::GetUIData(
return scoped_ptr<NetworkUIData>();
}
+void ManagedNetworkConfigurationHandler::AddObserver(
+ NetworkPolicyObserver* observer) {
+ observers_.AddObserver(observer);
+}
+
+void ManagedNetworkConfigurationHandler::RemoveObserver(
+ NetworkPolicyObserver* observer) {
+ observers_.RemoveObserver(observer);
+}
+
void ManagedNetworkConfigurationHandler::GetManagedProperties(
const std::string& userhash,
const std::string& service_path,
@@ -734,6 +741,27 @@ ManagedNetworkConfigurationHandler::FindPolicyByGUID(
return NULL;
}
+const base::DictionaryValue*
+ManagedNetworkConfigurationHandler::FindPolicyByGuidAndProfile(
+ const std::string& guid,
+ const std::string& profile_path) const {
+ const NetworkProfile* profile =
+ network_profile_handler_->GetProfileForPath(profile_path);
+ if (!profile) {
+ LOG(ERROR) << "Profile path unknown: " << profile_path;
+ return NULL;
+ }
+
+ const GuidToPolicyMap* policies = GetPoliciesForProfile(*profile);
+ if (!policies)
+ return NULL;
+
+ GuidToPolicyMap::const_iterator it = policies->find(guid);
+ if (it == policies->end())
+ return NULL;
+ return it->second;
+}
+
void ManagedNetworkConfigurationHandler::OnProfileRemoved(
const NetworkProfile& profile) {
// Nothing to do in this case.
@@ -781,6 +809,14 @@ void ManagedNetworkConfigurationHandler::Init(
network_profile_handler_->AddObserver(this);
}
+void ManagedNetworkConfigurationHandler::OnPolicyApplied(
+ const std::string& service_path) {
+ if (service_path.empty())
+ return;
+ FOR_EACH_OBSERVER(
+ NetworkPolicyObserver, observers_, PolicyApplied(service_path));
+}
+
ManagedNetworkConfigurationHandler::PolicyApplicator::PolicyApplicator(
base::WeakPtr<ManagedNetworkConfigurationHandler> handler,
const NetworkProfile& profile,
@@ -921,10 +957,11 @@ void ManagedNetworkConfigurationHandler::PolicyApplicator::GetEntryCallback(
scoped_ptr<base::DictionaryValue> shill_dictionary =
CreateShillConfiguration(
profile_, new_guid, new_policy, user_settings);
- handler_->network_configuration_handler()
- ->CreateConfiguration(*shill_dictionary,
- base::Bind(&IgnoreString),
- base::Bind(&LogErrorWithDict, FROM_HERE));
+ handler_->network_configuration_handler()->CreateConfiguration(
+ *shill_dictionary,
+ base::Bind(&ManagedNetworkConfigurationHandler::OnPolicyApplied,
+ handler_),
+ base::Bind(&LogErrorWithDict, FROM_HERE));
remaining_policies_.erase(new_guid);
}
} else if (was_managed) {
@@ -987,10 +1024,11 @@ ManagedNetworkConfigurationHandler::PolicyApplicator::~PolicyApplicator() {
scoped_ptr<base::DictionaryValue> shill_dictionary =
CreateShillConfiguration(
profile_, *it, policy, NULL /* no user settings */);
- handler_->network_configuration_handler()
- ->CreateConfiguration(*shill_dictionary,
- base::Bind(&IgnoreString),
- base::Bind(&LogErrorWithDict, FROM_HERE));
+ handler_->network_configuration_handler()->CreateConfiguration(
+ *shill_dictionary,
+ base::Bind(&ManagedNetworkConfigurationHandler::OnPolicyApplied,
+ handler_),
+ base::Bind(&LogErrorWithDict, FROM_HERE));
}
}