blob: 50bbcc7fadb45dc519b09ed80f1eb3ce79d48506 [file] [log] [blame]
// Copyright 2019 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 "weblayer/browser/navigation_impl.h"
#include "content/public/browser/navigation_handle.h"
#if defined(OS_ANDROID)
#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "weblayer/browser/java/jni/NavigationImpl_jni.h"
#endif
#if defined(OS_ANDROID)
using base::android::AttachCurrentThread;
using base::android::ScopedJavaLocalRef;
#endif
namespace weblayer {
NavigationImpl::NavigationImpl(content::NavigationHandle* navigation_handle)
: navigation_handle_(navigation_handle) {}
NavigationImpl::~NavigationImpl() {
#if defined(OS_ANDROID)
if (java_navigation_) {
Java_NavigationImpl_onNativeDestroyed(AttachCurrentThread(),
java_navigation_);
}
#endif
}
#if defined(OS_ANDROID)
void NavigationImpl::SetJavaNavigation(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& java_navigation) {
java_navigation_.Reset(env, java_navigation);
}
ScopedJavaLocalRef<jstring> NavigationImpl::GetUri(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj) {
return ScopedJavaLocalRef<jstring>(
base::android::ConvertUTF8ToJavaString(env, GetURL().spec()));
}
ScopedJavaLocalRef<jobject> NavigationImpl::GetRedirectChain(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj) {
std::vector<std::string> jni_redirects;
for (const GURL& redirect : GetRedirectChain())
jni_redirects.push_back(redirect.spec());
return base::android::ToJavaArrayOfStrings(env, jni_redirects);
}
#endif
GURL NavigationImpl::GetURL() {
return navigation_handle_->GetURL();
}
const std::vector<GURL>& NavigationImpl::GetRedirectChain() {
return navigation_handle_->GetRedirectChain();
}
Navigation::State NavigationImpl::GetState() {
NOTIMPLEMENTED() << "TODO: properly implement this";
return Navigation::State::kWaitingResponse;
}
} // namespace weblayer