1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/policy/core/common/android/policy_service_android.h"
6
7 #include "base/android/jni_android.h"
8 #include "components/policy/android/jni_headers/PolicyService_jni.h"
9
10 namespace policy {
11 namespace android {
12
PolicyServiceAndroid(PolicyService * policy_service)13 PolicyServiceAndroid::PolicyServiceAndroid(PolicyService* policy_service)
14 : policy_service_(policy_service),
15 policy_map_(policy_service->GetPolicies(
16 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))) {}
17 PolicyServiceAndroid::~PolicyServiceAndroid() = default;
18
AddObserver(JNIEnv * env,const base::android::JavaParamRef<jobject> & caller)19 void PolicyServiceAndroid::AddObserver(
20 JNIEnv* env,
21 const base::android::JavaParamRef<jobject>& caller) {
22 policy_service_->AddObserver(POLICY_DOMAIN_CHROME, this);
23 }
24
RemoveObserver(JNIEnv * env,const base::android::JavaParamRef<jobject> & caller)25 void PolicyServiceAndroid::RemoveObserver(
26 JNIEnv* env,
27 const base::android::JavaParamRef<jobject>& caller) {
28 policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, this);
29 }
30
OnPolicyServiceInitialized(PolicyDomain domain)31 void PolicyServiceAndroid::OnPolicyServiceInitialized(PolicyDomain domain) {
32 DCHECK_EQ(POLICY_DOMAIN_CHROME, domain);
33 DCHECK(java_ref_);
34 Java_PolicyService_onPolicyServiceInitialized(
35 base::android::AttachCurrentThread(),
36 base::android::ScopedJavaLocalRef<jobject>(java_ref_));
37 }
38
OnPolicyUpdated(const PolicyNamespace & ns,const PolicyMap & previous,const PolicyMap & current)39 void PolicyServiceAndroid::OnPolicyUpdated(const PolicyNamespace& ns,
40 const PolicyMap& previous,
41 const PolicyMap& current) {
42 DCHECK_EQ(POLICY_DOMAIN_CHROME, ns.domain);
43 DCHECK(java_ref_);
44 PolicyMapAndroid previous_android(previous);
45 PolicyMapAndroid current_android(current);
46 Java_PolicyService_onPolicyUpdated(
47 base::android::AttachCurrentThread(),
48 base::android::ScopedJavaLocalRef<jobject>(java_ref_),
49 previous_android.GetJavaObject(), current_android.GetJavaObject());
50 }
51
IsInitializationComplete(JNIEnv * env,const base::android::JavaParamRef<jobject> & caller) const52 bool PolicyServiceAndroid::IsInitializationComplete(
53 JNIEnv* env,
54 const base::android::JavaParamRef<jobject>& caller) const {
55 return policy_service_->IsInitializationComplete(POLICY_DOMAIN_CHROME);
56 }
57
GetPolicies(JNIEnv * env,const base::android::JavaParamRef<jobject> & caller)58 base::android::ScopedJavaLocalRef<jobject> PolicyServiceAndroid::GetPolicies(
59 JNIEnv* env,
60 const base::android::JavaParamRef<jobject>& caller) {
61 return policy_map_.GetJavaObject();
62 }
63
64 base::android::ScopedJavaLocalRef<jobject>
GetJavaObject()65 PolicyServiceAndroid::GetJavaObject() {
66 JNIEnv* env = base::android::AttachCurrentThread();
67 if (!java_ref_) {
68 java_ref_.Reset(
69 Java_PolicyService_Constructor(env, reinterpret_cast<intptr_t>(this)));
70 }
71 return base::android::ScopedJavaLocalRef<jobject>(java_ref_);
72 }
73
74 } // namespace android
75 } // namespace policy
76