blob: 04c9831a42e238d7b9e44b3e98acd99b5a10ab0d [file] [log] [blame]
// Copyright 2020 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 <memory>
#include <utility>
#include "base/android/jni_android.h"
#include "base/android/jni_string.h"
#include "base/android/jni_utils.h"
#include "chrome/android/chrome_jni_headers/QualityEnforcer_jni.h"
#include "content/public/browser/render_frame_host.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "third_party/blink/public/mojom/devtools/console_message.mojom.h"
#include "third_party/blink/public/mojom/devtools/inspector_issue.mojom.h"
#include "url/gurl.h"
using base::android::JavaParamRef;
namespace {
// Do not modify or reuse existing entries; they are used in a UMA histogram.
// Please also edit TrustedWebActivityQualityEnforcementViolationType in the
// enums.xml if adding new value.
// GENERATED_JAVA_ENUM_PACKAGE: (
// org.chromium.chrome.browser.browserservices.constants)
enum class QualityEnforcementViolationType {
kHttpError404 = 0,
kHttpError5xx = 1,
kUnavailableOffline = 2,
kDigitalAssetLink = 3,
kMaxValue = kDigitalAssetLink
};
blink::mojom::TwaQualityEnforcementViolationType GetViolationType(
QualityEnforcementViolationType type) {
switch (type) {
case QualityEnforcementViolationType::kHttpError404:
case QualityEnforcementViolationType::kHttpError5xx:
return blink::mojom::TwaQualityEnforcementViolationType ::kHttpError;
case QualityEnforcementViolationType::kUnavailableOffline:
return blink::mojom::TwaQualityEnforcementViolationType ::
kUnavailableOffline;
case QualityEnforcementViolationType::kDigitalAssetLink:
return blink::mojom::TwaQualityEnforcementViolationType ::
kDigitalAssetLinks;
}
}
} // namespace
static void JNI_QualityEnforcer_ReportDevtoolsIssue(
JNIEnv* env,
const JavaParamRef<jobject>& jrender_frame_host,
int type,
const JavaParamRef<jstring>& jurl,
int http_status_code,
const JavaParamRef<jstring>& jpackage_name,
const JavaParamRef<jstring>& jsignature) {
auto* render_frame_host =
content::RenderFrameHost::FromJavaRenderFrameHost(jrender_frame_host);
if (!render_frame_host) // The frame is being unloaded.
return;
std::string url = base::android::ConvertJavaStringToUTF8(env, jurl);
absl::optional<std::string> package_name =
jpackage_name
? absl::make_optional(
base::android::ConvertJavaStringToUTF8(env, jpackage_name))
: absl::nullopt;
absl::optional<std::string> signature =
jsignature ? absl::make_optional(
base::android::ConvertJavaStringToUTF8(env, jsignature))
: absl::nullopt;
auto details = blink::mojom::InspectorIssueDetails::New();
auto twa_issue = blink::mojom::TrustedWebActivityIssueDetails::New(
GURL(url),
GetViolationType(static_cast<QualityEnforcementViolationType>(type)),
http_status_code, std::move(package_name), std::move(signature));
details->twa_issue_details = std::move(twa_issue);
render_frame_host->ReportInspectorIssue(blink::mojom::InspectorIssueInfo::New(
blink::mojom::InspectorIssueCode::kTrustedWebActivityIssue,
std::move(details)));
}