diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-11-28 16:14:41 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-12-13 15:19:41 +0000 |
commit | 61d9742824d54be5693191fe502325a909feca59 (patch) | |
tree | cbf28e779b11338fe52eb75b915684cd8955542c /chromium/components/digital_asset_links/origin_verifier.cc | |
parent | 45f9ded08bb7526984b24ccb5a5327aaf6821676 (diff) | |
download | qtwebengine-chromium-61d9742824d54be5693191fe502325a909feca59.tar.gz |
BASELINE: Update Chromium to 108.0.5359.70
Change-Id: I77334ff232b819600f275bd3cfe41fbaa3619230
Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/445904
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/components/digital_asset_links/origin_verifier.cc')
-rw-r--r-- | chromium/components/digital_asset_links/origin_verifier.cc | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/chromium/components/digital_asset_links/origin_verifier.cc b/chromium/components/digital_asset_links/origin_verifier.cc new file mode 100644 index 00000000000..8e38bc72862 --- /dev/null +++ b/chromium/components/digital_asset_links/origin_verifier.cc @@ -0,0 +1,107 @@ +// Copyright 2017 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/digital_asset_links/origin_verifier.h" + +#include <memory> + +#include "base/android/jni_android.h" +#include "base/android/jni_array.h" +#include "base/android/jni_string.h" +#include "base/bind.h" +#include "components/digital_asset_links/android/jni_headers/OriginVerifier_jni.h" +#include "components/digital_asset_links/digital_asset_links_handler.h" +#include "content/public/browser/android/browser_context_handle.h" +#include "content/public/browser/browser_context.h" +#include "content/public/browser/browser_thread.h" +#include "content/public/browser/storage_partition.h" +#include "content/public/browser/web_contents.h" +#include "services/network/public/cpp/simple_url_loader.h" + +using base::android::AppendJavaStringArrayToStringVector; +using base::android::ConvertJavaStringToUTF16; +using base::android::JavaParamRef; +using base::android::JavaRef; +using digital_asset_links::RelationshipCheckResult; + +OriginVerifier::OriginVerifier( + JNIEnv* env, + const JavaRef<jobject>& obj, + const JavaRef<jobject>& jbrowser_context_handle) { + jobject_.Reset(obj); + content::BrowserContext* context = + content::BrowserContextFromJavaHandle(jbrowser_context_handle); + DCHECK(context); + url_loader_factory_ = context->GetDefaultStoragePartition() + ->GetURLLoaderFactoryForBrowserProcess(); +} + +OriginVerifier::~OriginVerifier() = default; + +bool OriginVerifier::VerifyOrigin( + JNIEnv* env, + const JavaParamRef<jobject>& obj, + const JavaParamRef<jstring>& j_package_name, + const JavaParamRef<jobjectArray>& j_fingerprints, + const JavaParamRef<jstring>& j_origin, + const JavaParamRef<jstring>& j_relationship, + const base::android::JavaRef<jobject>& jweb_contents) { + if (!j_package_name || !j_fingerprints || !j_origin || !j_relationship) + return false; + raw_ptr<content::WebContents> web_contents = + content::WebContents::FromJavaWebContents(jweb_contents); + std::string package_name = ConvertJavaStringToUTF8(env, j_package_name); + std::vector<std::string> fingerprints; + AppendJavaStringArrayToStringVector(env, j_fingerprints, &fingerprints); + std::string origin = ConvertJavaStringToUTF8(env, j_origin); + std::string relationship = ConvertJavaStringToUTF8(env, j_relationship); + + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + auto asset_link_handler = + std::make_unique<digital_asset_links::DigitalAssetLinksHandler>( + url_loader_factory_, web_contents); + + auto* asset_link_handler_ptr = asset_link_handler.get(); + + return asset_link_handler_ptr->CheckDigitalAssetLinkRelationshipForAndroidApp( + origin, relationship, std::move(fingerprints), package_name, + base::BindOnce(&OriginVerifier::OnRelationshipCheckComplete, + base::Unretained(this), std::move(asset_link_handler), + origin)); +} + +void OriginVerifier::OnRelationshipCheckComplete( + std::unique_ptr<digital_asset_links::DigitalAssetLinksHandler> handler, + const std::string& origin, + RelationshipCheckResult result) { + JNIEnv* env = base::android::AttachCurrentThread(); + + auto j_origin = base::android::ConvertUTF8ToJavaString(env, origin); + + Java_OriginVerifier_onOriginVerificationResult(env, jobject_, j_origin, + static_cast<jint>(result)); +} + +// static +jlong OriginVerifier::Init( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj, + const base::android::JavaParamRef<jobject>& jbrowser_context_handle) { + OriginVerifier* native_verifier = + new OriginVerifier(env, obj, jbrowser_context_handle); + return reinterpret_cast<intptr_t>(native_verifier); +} + +void OriginVerifier::Destroy(JNIEnv* env, + const base::android::JavaRef<jobject>& obj) { + delete this; +} + +static jlong JNI_OriginVerifier_Init( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj, + const base::android::JavaParamRef<jobject>& jbrowser_context_handle) { + return OriginVerifier::Init(env, obj, jbrowser_context_handle); +}
\ No newline at end of file |