error_page_callback_proxy.cc 2.0 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/error_page_callback_proxy.h"
  5. #include "base/android/jni_string.h"
  6. #include "url/gurl.h"
  7. #include "weblayer/browser/java/jni/ErrorPageCallbackProxy_jni.h"
  8. #include "weblayer/browser/navigation_impl.h"
  9. #include "weblayer/public/error_page.h"
  10. #include "weblayer/public/tab.h"
  11. using base::android::AttachCurrentThread;
  12. using base::android::ScopedJavaLocalRef;
  13. namespace weblayer {
  14. ErrorPageCallbackProxy::ErrorPageCallbackProxy(JNIEnv* env,
  15. jobject obj,
  16. Tab* tab)
  17. : tab_(tab), java_impl_(env, obj) {
  18. tab_->SetErrorPageDelegate(this);
  19. }
  20. ErrorPageCallbackProxy::~ErrorPageCallbackProxy() {
  21. tab_->SetErrorPageDelegate(nullptr);
  22. }
  23. bool ErrorPageCallbackProxy::OnBackToSafety() {
  24. JNIEnv* env = AttachCurrentThread();
  25. return Java_ErrorPageCallbackProxy_onBackToSafety(env, java_impl_);
  26. }
  27. std::unique_ptr<ErrorPage> ErrorPageCallbackProxy::GetErrorPageContent(
  28. Navigation* navigation) {
  29. JNIEnv* env = AttachCurrentThread();
  30. auto error_string = Java_ErrorPageCallbackProxy_getErrorPageContent(
  31. env, java_impl_,
  32. static_cast<NavigationImpl*>(navigation)->java_navigation());
  33. if (!error_string)
  34. return nullptr;
  35. auto error_page = std::make_unique<ErrorPage>();
  36. error_page->html = ConvertJavaStringToUTF8(env, error_string);
  37. return error_page;
  38. }
  39. static jlong JNI_ErrorPageCallbackProxy_CreateErrorPageCallbackProxy(
  40. JNIEnv* env,
  41. const base::android::JavaParamRef<jobject>& proxy,
  42. jlong tab) {
  43. return reinterpret_cast<jlong>(
  44. new ErrorPageCallbackProxy(env, proxy, reinterpret_cast<Tab*>(tab)));
  45. }
  46. static void JNI_ErrorPageCallbackProxy_DeleteErrorPageCallbackProxy(
  47. JNIEnv* env,
  48. jlong proxy) {
  49. delete reinterpret_cast<ErrorPageCallbackProxy*>(proxy);
  50. }
  51. } // namespace weblayer