blob: 5bed05a563368505027c06e57f8efd7064e49b82 [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/android/callback_android.h"
#include "base/android/jni_android.h"
#include "base/android/scoped_java_ref.h"
#include "chrome/android/test_support_jni_headers/QueryTileFakeServer_jni.h"
#include "chrome/browser/android/profile_key_util.h"
#include "chrome/browser/profiles/profile_key.h"
#include "chrome/browser/query_tiles/tile_service_factory.h"
#include "components/query_tiles/switches.h"
#include "components/query_tiles/test/fake_server_response.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "net/test/embedded_test_server/http_request.h"
#include "net/test/embedded_test_server/http_response.h"
using base::android::JavaParamRef;
using base::android::ScopedJavaGlobalRef;
using net::test_server::EmbeddedTestServer;
using net::test_server::HttpRequest;
using net::test_server::HttpResponse;
namespace {
// An instance of test server responding with the required fake tiles.
static std::unique_ptr<EmbeddedTestServer> s_embedded_test_server;
std::unique_ptr<net::test_server::HttpResponse> HandleRequest(
int levels,
int tiles_per_level,
const net::test_server::HttpRequest& request) {
auto response = std::make_unique<net::test_server::BasicHttpResponse>();
response->set_code(net::HTTP_OK);
std::string proto =
query_tiles::FakeServerResponse::CreateServerResponseProto(
levels, tiles_per_level);
response->set_content(proto);
return std::move(response);
}
void OnTilesFetched(const ScopedJavaGlobalRef<jobject>& j_callback,
bool success) {
base::android::RunBooleanCallbackAndroid(j_callback, success);
}
} // namespace
JNI_EXPORT void JNI_QueryTileFakeServer_SetupFakeServer(
JNIEnv* env,
const JavaParamRef<jobject>& j_callback,
jint levels,
jint tiles_per_level) {
s_embedded_test_server = std::make_unique<EmbeddedTestServer>();
s_embedded_test_server->RegisterRequestHandler(
base::BindRepeating(&HandleRequest, levels, tiles_per_level));
CHECK(s_embedded_test_server->Start());
GURL url = s_embedded_test_server->GetURL("/fake_server_url");
query_tiles::FakeServerResponse::SetTileFetcherServerURL(url);
auto* profile_key = android::GetLastUsedRegularProfileKey();
query_tiles::TileService* tile_service =
query_tiles::TileServiceFactory::GetInstance()->GetForKey(profile_key);
tile_service->StartFetchForTiles(
false, base::BindOnce(&OnTilesFetched,
ScopedJavaGlobalRef<jobject>(j_callback)));
}