// Copyright 2018 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "content/browser/accessibility/captioning_controller.h" #include "base/android/jni_string.h" #include "content/browser/web_contents/web_contents_impl.h" #include "content/common/frame_messages.h" #include "jni/CaptioningController_jni.h" using base::android::AttachCurrentThread; using base::android::ConvertJavaStringToUTF8; using base::android::JavaParamRef; using base::android::JavaRef; using base::android::ScopedJavaLocalRef; namespace content { namespace { int GetRenderProcessIdFromRenderViewHost(RenderViewHost* host) { DCHECK(host); RenderProcessHost* render_process = host->GetProcess(); DCHECK(render_process); if (render_process->IsInitializedAndNotDead()) return render_process->GetProcess().Handle(); return 0; } } // namespace CaptioningController::CaptioningController(JNIEnv* env, const JavaRef& obj, WebContents* web_contents) : WebContentsObserver(web_contents), java_ref_(env, obj) {} CaptioningController::~CaptioningController() { JNIEnv* env = AttachCurrentThread(); ScopedJavaLocalRef obj = java_ref_.get(env); if (!obj.is_null()) Java_CaptioningController_onDestroy(env, obj); } void CaptioningController::RenderViewReady() { JNIEnv* env = AttachCurrentThread(); ScopedJavaLocalRef obj = java_ref_.get(env); if (!obj.is_null()) Java_CaptioningController_onRenderProcessChange(env, obj); } void CaptioningController::RenderViewHostChanged(RenderViewHost* old_host, RenderViewHost* new_host) { int old_pid = 0; if (old_host) { old_pid = GetRenderProcessIdFromRenderViewHost(old_host); } int new_pid = GetRenderProcessIdFromRenderViewHost(web_contents()->GetRenderViewHost()); if (new_pid != old_pid) { JNIEnv* env = AttachCurrentThread(); ScopedJavaLocalRef obj = java_ref_.get(env); if (!obj.is_null()) Java_CaptioningController_onRenderProcessChange(env, obj); } } void CaptioningController::WebContentsDestroyed() { delete this; } void CaptioningController::SetTextTrackSettings( JNIEnv* env, const JavaParamRef& obj, jboolean textTracksEnabled, const JavaParamRef& textTrackBackgroundColor, const JavaParamRef& textTrackFontFamily, const JavaParamRef& textTrackFontStyle, const JavaParamRef& textTrackFontVariant, const JavaParamRef& textTrackTextColor, const JavaParamRef& textTrackTextShadow, const JavaParamRef& textTrackTextSize) { FrameMsg_TextTrackSettings_Params params; params.text_tracks_enabled = textTracksEnabled; params.text_track_background_color = ConvertJavaStringToUTF8(env, textTrackBackgroundColor); params.text_track_font_family = ConvertJavaStringToUTF8(env, textTrackFontFamily); params.text_track_font_style = ConvertJavaStringToUTF8(env, textTrackFontStyle); params.text_track_font_variant = ConvertJavaStringToUTF8(env, textTrackFontVariant); params.text_track_text_color = ConvertJavaStringToUTF8(env, textTrackTextColor); params.text_track_text_shadow = ConvertJavaStringToUTF8(env, textTrackTextShadow); params.text_track_text_size = ConvertJavaStringToUTF8(env, textTrackTextSize); static_cast(web_contents()) ->GetMainFrame() ->SetTextTrackSettings(params); } jlong JNI_CaptioningController_Init( JNIEnv* env, const JavaParamRef& obj, const JavaParamRef& jweb_contents) { WebContentsImpl* web_contents = static_cast( WebContents::FromJavaWebContents(jweb_contents)); CHECK(web_contents); return reinterpret_cast( new CaptioningController(env, obj, web_contents)); } } // namespace content