blob: b00ac36d17aa824908615ba6df674febb607ada9 [file] [log] [blame]
// 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 "base/android/jni_android.h"
#include "base/android/jni_string.h"
#include "base/android/scoped_java_ref.h"
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "chrome/android/chrome_jni_headers/CustomTabsConnection_jni.h"
#include "chrome/browser/android/customtabs/client_data_header_web_contents_observer.h"
#include "chrome/browser/android/customtabs/detached_resource_request.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_android.h"
#include "content/public/common/referrer.h"
#include "net/url_request/referrer_policy.h"
#include "url/gurl.h"
namespace customtabs {
namespace {
void NotifyClientOfDetachedRequestCompletion(
const base::android::ScopedJavaGlobalRef<jobject>& session,
const GURL& url,
int net_error) {
JNIEnv* env = base::android::AttachCurrentThread();
Java_CustomTabsConnection_notifyClientOfDetachedRequestCompletion(
env, session, base::android::ConvertUTF8ToJavaString(env, url.spec()),
net_error);
}
} // namespace
static void JNI_CustomTabsConnection_CreateAndStartDetachedResourceRequest(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& profile,
const base::android::JavaParamRef<jobject>& session,
const base::android::JavaParamRef<jstring>& package_name,
const base::android::JavaParamRef<jstring>& url,
const base::android::JavaParamRef<jstring>& origin,
jint referrer_policy,
jint motivation) {
DCHECK(profile && url && origin);
Profile* native_profile = ProfileAndroid::FromProfileAndroid(profile);
DCHECK(native_profile);
GURL native_url(base::android::ConvertJavaStringToUTF8(env, url));
GURL native_origin(base::android::ConvertJavaStringToUTF8(env, origin));
DCHECK(native_url.is_valid());
DCHECK(native_origin.is_valid());
std::string native_package;
if (!package_name.is_null())
base::android::ConvertJavaStringToUTF8(env, package_name, &native_package);
// Java only knows about the blink referrer policy.
net::ReferrerPolicy url_request_referrer_policy =
content::Referrer::ReferrerPolicyForUrlRequest(
content::Referrer::ConvertToPolicy(referrer_policy));
DetachedResourceRequest::Motivation request_motivation =
static_cast<DetachedResourceRequest::Motivation>(motivation);
DetachedResourceRequest::OnResultCallback cb =
session.is_null()
? base::DoNothing()
: base::BindOnce(&NotifyClientOfDetachedRequestCompletion,
base::android::ScopedJavaGlobalRef<jobject>(session),
native_url);
DetachedResourceRequest::CreateAndStart(
native_profile, native_url, native_origin, url_request_referrer_policy,
request_motivation, native_package, std::move(cb));
}
static void JNI_CustomTabsConnection_SetClientDataHeader(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jweb_contents,
const base::android::JavaParamRef<jstring>& jheader) {
auto* web_contents = content::WebContents::FromJavaWebContents(jweb_contents);
ClientDataHeaderWebContentsObserver::CreateForWebContents(web_contents);
ClientDataHeaderWebContentsObserver::FromWebContents(web_contents)
->SetHeader(base::android::ConvertJavaStringToUTF8(jheader));
}
} // namespace customtabs