| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/android/policy/policy_auditor_bridge.h" |
| |
| #include "base/android/jni_android.h" |
| #include "content/public/browser/navigation_handle.h" |
| #include "content/public/browser/render_frame_host.h" |
| #include "url/android/gurl_android.h" |
| |
| // Must come after all headers that specialize FromJniType() / ToJniType(). |
| #include "chrome/android/chrome_jni_headers/PolicyAuditorBridge_jni.h" |
| |
| using base::android::AttachCurrentThread; |
| using base::android::ScopedJavaGlobalRef; |
| using base::android::ScopedJavaLocalRef; |
| using content::NavigationHandle; |
| using content::RenderFrameHost; |
| using content::WebContents; |
| using content::WebContentsObserver; |
| using content::WebContentsUserData; |
| using url::GURLAndroid; |
| |
| PolicyAuditorBridge::PolicyAuditorBridge( |
| WebContents* web_contents, |
| ScopedJavaLocalRef<jobject>&& android_policy_auditor) |
| : WebContentsObserver(web_contents), |
| WebContentsUserData<PolicyAuditorBridge>(*web_contents), |
| android_policy_auditor_(android_policy_auditor) { |
| // if android doesn't supply a policy auditor, there is no reason to to create |
| // this class |
| DCHECK(!android_policy_auditor_.is_null()); |
| } |
| |
| PolicyAuditorBridge::~PolicyAuditorBridge() = default; |
| |
| // static |
| void PolicyAuditorBridge::CreateForWebContents(WebContents* web_contents) { |
| ScopedJavaLocalRef<jobject> android_policy_auditor = |
| Java_PolicyAuditorBridge_getPolicyAuditor(AttachCurrentThread()); |
| |
| if (!android_policy_auditor.is_null()) { |
| WebContentsUserData<PolicyAuditorBridge>::CreateForWebContents( |
| web_contents, std::move(android_policy_auditor)); |
| } |
| } |
| |
| WEB_CONTENTS_USER_DATA_KEY_IMPL(PolicyAuditorBridge); |
| |
| void PolicyAuditorBridge::DidFinishNavigation( |
| NavigationHandle* navigation_handle) { |
| if (navigation_handle->IsInPrimaryMainFrame()) { |
| Java_PolicyAuditorBridge_notifyAuditEventForDidFinishNavigation( |
| AttachCurrentThread(), navigation_handle->GetJavaNavigationHandle(), |
| android_policy_auditor_); |
| } |
| } |
| |
| void PolicyAuditorBridge::DidFinishLoad(RenderFrameHost* render_frame_host, |
| const GURL& validated_url) { |
| if (render_frame_host->IsInPrimaryMainFrame()) { |
| JNIEnv* env = AttachCurrentThread(); |
| Java_PolicyAuditorBridge_notifyAuditEventForDidFinishLoad( |
| env, GURLAndroid::FromNativeGURL(env, validated_url), |
| android_policy_auditor_); |
| } |
| } |