new_tab_callback_proxy.cc 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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/new_tab_callback_proxy.h"
  5. #include "base/trace_event/trace_event.h"
  6. #include "url/gurl.h"
  7. #include "weblayer/browser/java/jni/NewTabCallbackProxy_jni.h"
  8. #include "weblayer/browser/tab_impl.h"
  9. using base::android::AttachCurrentThread;
  10. using base::android::ScopedJavaLocalRef;
  11. namespace weblayer {
  12. NewTabCallbackProxy::NewTabCallbackProxy(JNIEnv* env, jobject obj, TabImpl* tab)
  13. : tab_(tab), java_impl_(env, obj) {
  14. DCHECK(!tab_->has_new_tab_delegate());
  15. tab_->SetNewTabDelegate(this);
  16. }
  17. NewTabCallbackProxy::~NewTabCallbackProxy() {
  18. tab_->SetNewTabDelegate(nullptr);
  19. }
  20. void NewTabCallbackProxy::OnNewTab(Tab* tab, NewTabType type) {
  21. JNIEnv* env = AttachCurrentThread();
  22. TRACE_EVENT0("weblayer", "Java_NewTabCallbackProxy_onNewTab");
  23. Java_NewTabCallbackProxy_onNewTab(env, java_impl_,
  24. static_cast<TabImpl*>(tab)->GetJavaTab(),
  25. static_cast<int>(type));
  26. }
  27. static jlong JNI_NewTabCallbackProxy_CreateNewTabCallbackProxy(
  28. JNIEnv* env,
  29. const base::android::JavaParamRef<jobject>& proxy,
  30. jlong tab) {
  31. return reinterpret_cast<jlong>(
  32. new NewTabCallbackProxy(env, proxy, reinterpret_cast<TabImpl*>(tab)));
  33. }
  34. static void JNI_NewTabCallbackProxy_DeleteNewTabCallbackProxy(JNIEnv* env,
  35. jlong proxy) {
  36. delete reinterpret_cast<NewTabCallbackProxy*>(proxy);
  37. }
  38. } // namespace weblayer