blob: 466d8a92c6f44aa8dc8dd280641650a80e7f5828 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "android_webview/browser/prefetch/aw_preloading_utils.h"
#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "net/http/http_no_vary_search_data.h"
// Must come after all headers that specialize FromJniType() / ToJniType().
#include "android_webview/browser_jni_headers/AwNoVarySearchData_jni.h"
#include "android_webview/browser_jni_headers/AwPrefetchParameters_jni.h"
namespace android_webview {
net::HttpRequestHeaders GetAdditionalHeadersFromPrefetchParameters(
JNIEnv* env,
const base::android::JavaRef<jobject>& prefetch_params) {
// TODO(crbug.com/372915075): Implement tests for adding additional headers.
net::HttpRequestHeaders additional_headers = {};
if (prefetch_params) {
std::map<std::string, std::string> additional_headers_map =
Java_AwPrefetchParameters_getAdditionalHeaders(env, prefetch_params);
for (const auto& header : additional_headers_map) {
additional_headers.SetHeader(header.first, header.second);
}
}
return additional_headers;
}
std::optional<net::HttpNoVarySearchData>
GetExpectedNoVarySearchFromPrefetchParameters(
JNIEnv* env,
const base::android::JavaRef<jobject>& prefetch_params) {
// TODO(crbug.com/372915075): Implement tests for constructing expected no
// vary search.
std::optional<net::HttpNoVarySearchData> expected_no_vary_search;
if (prefetch_params) {
base::android::ScopedJavaLocalRef<jobject> no_vary_search_jobj =
Java_AwPrefetchParameters_getExpectedNoVarySearch(env, prefetch_params);
if (no_vary_search_jobj) {
const bool vary_on_key_order = static_cast<bool>(
Java_AwNoVarySearchData_getVaryOnKeyOrder(env, no_vary_search_jobj));
const bool ignore_differences_in_params = static_cast<bool>(
Java_AwNoVarySearchData_getIgnoreDifferencesInParameters(
env, no_vary_search_jobj));
if (ignore_differences_in_params) {
expected_no_vary_search =
net::HttpNoVarySearchData::CreateFromVaryParams(
Java_AwNoVarySearchData_getConsideredQueryParameters(
env, no_vary_search_jobj),
vary_on_key_order);
} else {
expected_no_vary_search =
net::HttpNoVarySearchData::CreateFromNoVaryParams(
Java_AwNoVarySearchData_getIgnoredQueryParameters(
env, no_vary_search_jobj),
vary_on_key_order);
}
}
}
return expected_no_vary_search;
}
bool GetIsJavaScriptEnabledFromPrefetchParameters(
JNIEnv* env,
const base::android::JavaRef<jobject>& prefetch_params) {
if (!prefetch_params) {
return false;
}
return Java_AwPrefetchParameters_getIsJavascriptEnabled(env, prefetch_params);
}
} // namespace android_webview