OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2015 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 "chrome/browser/supervised_user/supervised_user_content_provider_androi d.h" | |
6 | |
7 #include "base/android/jni_android.h" | |
8 #include "base/android/jni_string.h" | |
9 #include "chrome/browser/profiles/profile.h" | |
10 #include "chrome/browser/profiles/profile_manager.h" | |
11 #include "chrome/browser/supervised_user/supervised_user_interstitial.h" | |
12 #include "chrome/browser/supervised_user/supervised_user_service.h" | |
13 #include "chrome/browser/supervised_user/supervised_user_service_factory.h" | |
14 #include "jni/SupervisedUserContentProvider_jni.h" | |
15 | |
16 using base::android::JavaRef; | |
17 using base::android::JavaParamRef; | |
18 using base::android::ScopedJavaGlobalRef; | |
19 using base::android::AttachCurrentThread; | |
20 | |
21 namespace { | |
22 | |
23 class UrlFilterObserver : public SupervisedUserURLFilter::Observer { | |
24 public: | |
25 UrlFilterObserver(JNIEnv* env, | |
26 const ScopedJavaGlobalRef<jobject>& java_content_provider) | |
27 : java_content_provider_(java_content_provider) {} | |
28 | |
29 virtual ~UrlFilterObserver() {} | |
30 | |
31 private: | |
32 void OnSiteListUpdated() override { | |
33 Java_SupervisedUserContentProvider_onSupervisedUserFilterUpdated( | |
34 AttachCurrentThread(), java_content_provider_.obj()); | |
35 } | |
36 ScopedJavaGlobalRef<jobject> java_content_provider_; | |
37 }; | |
38 | |
39 } // namespace | |
40 | |
41 static jlong CreateSupervisedUserContentProvider( | |
42 JNIEnv* env, | |
43 const JavaParamRef<jobject>& caller) { | |
44 return reinterpret_cast<intptr_t>( | |
45 new SupervisedUserContentProvider(env, caller)); | |
46 } | |
47 | |
48 SupervisedUserContentProvider::SupervisedUserContentProvider( | |
49 JNIEnv* env, | |
50 const JavaParamRef<jobject>& caller) | |
51 : profile_(ProfileManager::GetLastUsedProfile()), | |
52 java_content_provider_(env, caller), | |
53 weak_factory_(this) { | |
54 if (profile_->IsSupervised()) { | |
55 SupervisedUserService* supervised_user_service = | |
56 SupervisedUserServiceFactory::GetForProfile(profile_); | |
57 SupervisedUserURLFilter* url_filter = | |
58 supervised_user_service->GetURLFilterForUIThread(); | |
59 url_filter->AddObserver(new UrlFilterObserver(env, java_content_provider_)); | |
60 } | |
61 } | |
62 | |
63 SupervisedUserContentProvider::~SupervisedUserContentProvider() {} | |
64 | |
65 void SupervisedUserContentProvider::ShouldProceed( | |
66 JNIEnv* env, | |
67 const JavaParamRef<jobject>& caller, | |
68 const JavaParamRef<jobject>& query_result_jobj, | |
69 const JavaParamRef<jstring>& url) { | |
70 if (!profile_->IsSupervised()) { | |
71 // User isn't supervised | |
72 Java_SupervisedUserQueryReply_onQueryComplete(env, query_result_jobj.obj(), | |
73 true, nullptr); | |
74 return; | |
75 } | |
76 SupervisedUserService* supervised_user_service = | |
77 SupervisedUserServiceFactory::GetForProfile(profile_); | |
78 SupervisedUserURLFilter* url_filter = | |
79 supervised_user_service->GetURLFilterForUIThread(); | |
80 url_filter->GetFilteringBehaviorForURLWithAsyncChecks( | |
81 GURL(base::android::ConvertJavaStringToUTF16(env, url)), | |
82 base::Bind( | |
83 &SupervisedUserContentProvider::OnQueryComplete, | |
84 weak_factory_.GetWeakPtr(), | |
85 new ScopedJavaGlobalRef<jobject>(env, query_result_jobj.obj()))); | |
86 } | |
87 | |
88 void SupervisedUserContentProvider::RequestInsert( | |
89 JNIEnv* env, | |
90 const JavaParamRef<jobject>& caller, | |
91 const JavaParamRef<jobject>& insert_result_jobj, | |
92 const JavaParamRef<jstring>& url) { | |
93 if (!profile_->IsSupervised()) | |
94 return; | |
95 SupervisedUserService* supervised_user_service = | |
96 SupervisedUserServiceFactory::GetForProfile(profile_); | |
97 supervised_user_service->AddURLAccessRequest( | |
98 GURL(base::android::ConvertJavaStringToUTF16(env, url)), | |
99 base::Bind( | |
100 &SupervisedUserContentProvider::OnInsertRequestSendComplete, | |
101 weak_factory_.GetWeakPtr(), | |
102 new ScopedJavaGlobalRef<jobject>(env, insert_result_jobj.obj()))); | |
103 } | |
104 | |
105 void SupervisedUserContentProvider::OnQueryComplete( | |
106 ScopedJavaGlobalRef<jobject>* query_reply_jobj, | |
Bernhard Bauer
2015/12/17 11:13:21
You can just copy a ScopedJavaGlobalRef.
aberent
2015/12/17 14:59:08
Done. As discussed.
| |
107 SupervisedUserURLFilter::FilteringBehavior behavior, | |
108 SupervisedUserURLFilter::FilteringBehaviorReason reason, | |
109 bool /* uncertain */) { | |
110 if (behavior != SupervisedUserURLFilter::BLOCK) { | |
111 Java_SupervisedUserQueryReply_onQueryComplete( | |
112 AttachCurrentThread(), query_reply_jobj->obj(), true, nullptr); | |
113 } else { | |
114 JNIEnv* env = AttachCurrentThread(); | |
115 Java_SupervisedUserQueryReply_onQueryComplete( | |
116 env, query_reply_jobj->obj(), false, | |
117 base::android::ConvertUTF8ToJavaString( | |
118 env, SupervisedUserInterstitial::GetHTMLContents(profile_, reason)) | |
119 .obj()); | |
120 } | |
121 delete query_reply_jobj; | |
122 } | |
123 | |
124 void SupervisedUserContentProvider::SetFilterForTesting(JNIEnv* env, | |
125 jobject caller) { | |
126 if (!profile_->IsSupervised()) | |
127 return; | |
128 SupervisedUserService* supervised_user_service = | |
129 SupervisedUserServiceFactory::GetForProfile(profile_); | |
130 SupervisedUserURLFilter* url_filter = | |
131 supervised_user_service->GetURLFilterForUIThread(); | |
132 url_filter->SetDefaultFilteringBehavior(SupervisedUserURLFilter::BLOCK); | |
133 } | |
134 | |
135 void SupervisedUserContentProvider::OnInsertRequestSendComplete( | |
136 ScopedJavaGlobalRef<jobject>* insert_reply_jobj, | |
Bernhard Bauer
2015/12/17 11:13:21
This would leak (but as mentioned above, you can j
aberent
2015/12/17 14:59:08
Done.
| |
137 bool sent_ok) { | |
138 Java_SupervisedUserInsertReply_onInsertRequestSendComplete( | |
139 AttachCurrentThread(), insert_reply_jobj->obj(), sent_ok); | |
140 } | |
141 | |
142 bool SupervisedUserContentProvider::Register(JNIEnv* env) { | |
143 return RegisterNativesImpl(env); | |
144 } | |
OLD | NEW |