tab_callback_proxy.cc 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Copyright 2019 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. #include "weblayer/browser/tab_callback_proxy.h"
  5. #include "base/android/jni_string.h"
  6. #include "base/trace_event/trace_event.h"
  7. #include "url/gurl.h"
  8. #include "weblayer/browser/java/jni/TabCallbackProxy_jni.h"
  9. #include "weblayer/browser/tab_impl.h"
  10. using base::android::AttachCurrentThread;
  11. using base::android::ConvertUTF8ToJavaString;
  12. using base::android::ScopedJavaLocalRef;
  13. namespace weblayer {
  14. TabCallbackProxy::TabCallbackProxy(JNIEnv* env, jobject obj, Tab* tab)
  15. : tab_(tab), java_observer_(env, obj) {
  16. tab_->AddObserver(this);
  17. }
  18. TabCallbackProxy::~TabCallbackProxy() {
  19. tab_->RemoveObserver(this);
  20. }
  21. void TabCallbackProxy::DisplayedUrlChanged(const GURL& url) {
  22. JNIEnv* env = AttachCurrentThread();
  23. ScopedJavaLocalRef<jstring> jstring_uri_string(
  24. ConvertUTF8ToJavaString(env, url.spec()));
  25. TRACE_EVENT0("weblayer", "Java_TabCallbackProxy_visibleUriChanged");
  26. Java_TabCallbackProxy_visibleUriChanged(env, java_observer_,
  27. jstring_uri_string);
  28. }
  29. void TabCallbackProxy::OnRenderProcessGone() {
  30. TRACE_EVENT0("weblayer", "Java_TabCallbackProxy_onRenderProcessGone");
  31. Java_TabCallbackProxy_onRenderProcessGone(AttachCurrentThread(),
  32. java_observer_);
  33. }
  34. void TabCallbackProxy::OnTitleUpdated(const std::u16string& title) {
  35. JNIEnv* env = AttachCurrentThread();
  36. Java_TabCallbackProxy_onTitleUpdated(
  37. env, java_observer_, base::android::ConvertUTF16ToJavaString(env, title));
  38. }
  39. static jlong JNI_TabCallbackProxy_CreateTabCallbackProxy(
  40. JNIEnv* env,
  41. const base::android::JavaParamRef<jobject>& proxy,
  42. jlong tab) {
  43. return reinterpret_cast<jlong>(
  44. new TabCallbackProxy(env, proxy, reinterpret_cast<TabImpl*>(tab)));
  45. }
  46. static void JNI_TabCallbackProxy_DeleteTabCallbackProxy(JNIEnv* env,
  47. jlong proxy) {
  48. delete reinterpret_cast<TabCallbackProxy*>(proxy);
  49. }
  50. } // namespace weblayer