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

Unified Diff: remoting/host/plugin/policy_hack/nat_policy_mac.mm

Issue 7748027: Remoting host policy for mac. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: updated with ajwong suggestions Created 9 years, 4 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/host/plugin/policy_hack/nat_policy_mac.mm
diff --git a/remoting/host/plugin/policy_hack/nat_policy_mac.mm b/remoting/host/plugin/policy_hack/nat_policy_mac.mm
index f6514ab20e722a86915358a266b74d2e8889609d..61b62eda0cdf78be3151689c546c470e37ae9c04 100644
--- a/remoting/host/plugin/policy_hack/nat_policy_mac.mm
+++ b/remoting/host/plugin/policy_hack/nat_policy_mac.mm
@@ -4,14 +4,33 @@
#include "remoting/host/plugin/policy_hack/nat_policy.h"
+#include <CoreFoundation/CoreFoundation.h>
+
#include "base/compiler_specific.h"
+#include "base/mac/scoped_cftyperef.h"
#include "base/message_loop_proxy.h"
#include "base/scoped_ptr.h"
+#include "base/sys_string_conversions.h"
#include "base/values.h"
+namespace {
+
+struct BundledAppPolicy {
+ Boolean is_valid;
+ Boolean is_allowed;
+ CFStringRef bundle_id;
+};
+
+}
+
namespace remoting {
namespace policy_hack {
+// The MacOS version does not watch files (because there is potentially 9
+// files to watch in three different locations) and because it is accepted
+// practice on the Mac that the user must logout/login for policies to be
+// applied. This will actually pick up policies every
+// |kFallbackReloadDelayMinutes| which is sufficient for right now.
class NatPolicyMac : public NatPolicy {
public:
explicit NatPolicyMac(base::MessageLoopProxy* message_loop_proxy)
@@ -21,15 +40,70 @@ class NatPolicyMac : public NatPolicy {
virtual ~NatPolicyMac() {
}
+ protected:
virtual void StartWatchingInternal() OVERRIDE {
- scoped_ptr<base::DictionaryValue> new_policy(new base::DictionaryValue());
- UpdateNatPolicy(new_policy.get());
+ Reload();
}
virtual void StopWatchingInternal() OVERRIDE {
}
virtual void Reload() OVERRIDE {
+ DCHECK(OnPolicyThread());
+
+ // Since policy could be set for any of these browsers, assume the most
+ // restrictive.
+ BundledAppPolicy policies[3] = {
+ { false, true, CFSTR("com.google.Chrome") },
+ { false, true, CFSTR("com.chromium.Chromium") },
+ { false, true, CFSTR("com.google.Chrome.canary") }
+ };
+ base::DictionaryValue policy;
+ base::mac::ScopedCFTypeRef<CFStringRef> policy_key(
+ base::SysUTF8ToCFStringRef(kNatPolicyName));
+ bool is_allowed = true;
+ bool is_valid = false;
+ CFStringRef bundle_setting_policy = NULL;
+ for (size_t i = 0; i < arraysize(policies); ++i) {
+ if (CFPreferencesAppSynchronize(policies[i].bundle_id)) {
+ policies[i].is_allowed = CFPreferencesGetAppBooleanValue(
+ policy_key,
+ policies[i].bundle_id,
+ &policies[i].is_valid);
+ if (policies[i].is_valid) {
+ is_allowed &= policies[i].is_allowed;
+ if (!is_allowed && bundle_setting_policy == NULL) {
+ bundle_setting_policy = policies[i].bundle_id;
+ }
+ is_valid = true;
+ }
+ }
+ }
+
+ // Only set policy if a valid policy was found.
+ if (is_valid) {
+ policy.SetBoolean(kNatPolicyName, is_allowed);
+
+ // Log if there is policy conflict.
+ for (size_t i = 0; i < arraysize(policies); ++i) {
+ if (policies[i].is_valid && policies[i].is_allowed != is_allowed) {
+ LOG(WARNING) << base::SysCFStringRefToUTF8(policies[i].bundle_id)
+ << ":" << kNatPolicyName
+ << "(" << (policies[i].is_allowed ? "true" : "false")
+ << ") is being overridden by "
+ << base::SysCFStringRefToUTF8(bundle_setting_policy)
+ << ":" << kNatPolicyName
+ << "(" << (is_allowed ? "true" : "false") << ")";
+ }
+ }
+ }
+
+ // Set policy. Policy must be set (even if it is empty) so that the
+ // default policy is picked up the first time reload is called.
+ UpdateNatPolicy(&policy);
+
+ // Reschedule task.
+ ScheduleFallbackReloadTask();
}
};
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698