Add mojom interface to android for day zero experience

This commit is contained in:
deeppandya
2024-07-17 18:42:12 +05:30
parent 1faf0df73e
commit 9f4ba1428a
8 changed files with 208 additions and 0 deletions
+1
View File
@@ -206,6 +206,7 @@ brave_java_sources = [
"../../brave/android/java/org/chromium/chrome/browser/custom_layout/popup_window_tooltip/PopupWindowTooltip.java",
"../../brave/android/java/org/chromium/chrome/browser/custom_layout/popup_window_tooltip/PopupWindowTooltipUtils.java",
"../../brave/android/java/org/chromium/chrome/browser/customtabs/features/partialcustomtab/BravePartialCustomTabBottomSheetStrategy.java",
"../../brave/android/java/org/chromium/chrome/browser/day_zero/DayZeroMojomHelper.java",
"../../brave/android/java/org/chromium/chrome/browser/decentralized_dns/settings/ENSSettingsFragment.java",
"../../brave/android/java/org/chromium/chrome/browser/decentralized_dns/settings/RadioButtonGroupDDnsResolveMethodPreference.java",
"../../brave/android/java/org/chromium/chrome/browser/decentralized_dns/settings/RadioButtonGroupEnsOffchainResolveMethodPreference.java",
@@ -0,0 +1,80 @@
/* Copyright (c) 2024 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at https://mozilla.org/MPL/2.0/. */
package org.chromium.chrome.browser.day_zero;
import org.jni_zero.JNINamespace;
import org.jni_zero.NativeMethods;
import org.chromium.content_public.browser.BrowserContextHandle;
import org.chromium.day_zero.mojom.DayZeroBrowserUiExpt;
import org.chromium.mojo.bindings.ConnectionErrorHandler;
import org.chromium.mojo.bindings.Interface;
import org.chromium.mojo.bindings.Interface.Proxy.Handler;
import org.chromium.mojo.system.MessagePipeHandle;
import org.chromium.mojo.system.MojoException;
import org.chromium.mojo.system.impl.CoreImpl;
/** Helper to interact with native DayZeroBrowserUiExpt. */
@JNINamespace("day_zero")
public class DayZeroMojomHelper implements ConnectionErrorHandler {
private long mNativeDayZeroBrowserUiExpt;
DayZeroBrowserUiExpt mDayZeroBroserUiExptHelper;
private static final Object sLock = new Object();
private static DayZeroMojomHelper sInstance;
public static DayZeroMojomHelper getInstance(BrowserContextHandle browserContextHandle) {
synchronized (sLock) {
if (sInstance == null) {
sInstance = new DayZeroMojomHelper(browserContextHandle);
}
}
return sInstance;
}
private DayZeroMojomHelper(BrowserContextHandle browserContextHandle) {
mNativeDayZeroBrowserUiExpt = DayZeroMojomHelperJni.get().init(browserContextHandle);
long nativeHandle =
DayZeroMojomHelperJni.get()
.getInterfaceToAndroidHelper(mNativeDayZeroBrowserUiExpt);
MessagePipeHandle handle =
CoreImpl.getInstance().acquireNativeHandle(nativeHandle).toMessagePipeHandle();
mDayZeroBroserUiExptHelper = DayZeroBrowserUiExpt.MANAGER.attachProxy(handle, 0);
Handler handler = ((Interface.Proxy) mDayZeroBroserUiExptHelper).getProxyHandler();
handler.setErrorHandler(this);
}
private void destroy() {
synchronized (sLock) {
sInstance = null;
if (mNativeDayZeroBrowserUiExpt == 0 && mDayZeroBroserUiExptHelper == null) {
return;
}
mDayZeroBroserUiExptHelper.close();
mDayZeroBroserUiExptHelper = null;
DayZeroMojomHelperJni.get().destroy(mNativeDayZeroBrowserUiExpt);
mNativeDayZeroBrowserUiExpt = 0;
}
}
public void isDayZeroExpt(DayZeroBrowserUiExpt.IsDayZeroExpt_Response callback) {
mDayZeroBroserUiExptHelper.isDayZeroExpt(callback);
}
@Override
public void onConnectionError(MojoException e) {
destroy();
}
@NativeMethods
public interface Natives {
long init(BrowserContextHandle browserContextHandle);
void destroy(long nativeDayZeroBrowserUiExpt);
long getInterfaceToAndroidHelper(long nativeDayZeroBrowserUiExpt);
}
}
@@ -0,0 +1,64 @@
/* Copyright (c) 2024 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at https://mozilla.org/MPL/2.0/. */
#include "brave/browser/day_zero_browser_ui_expt/android/day_zero_browser_ui_expt.h"
#include <utility>
#include <vector>
#include "base/strings/strcat.h"
#include "brave/build/android/jni_headers/DayZeroMojomHelper_jni.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/profiles/profile.h"
#include "content/public/browser/android/browser_context_handle.h"
#include "content/public/browser/browser_context.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
namespace day_zero {
DayZeroBrowserUiExpt::DayZeroBrowserUiExpt(content::BrowserContext* context) {
// auto skus_service_getter = base::BindRepeating(
// [](content::BrowserContext* context) {
// return skus::SkusServiceFactory::GetForContext(context);
// },
// context);
// pref_service_ = Profile::FromBrowserContext(context)->GetPrefs();
// credential_manager_ = std::make_unique<ai_chat::AIChatCredentialManager>(
// skus_service_getter, g_browser_process->local_state());
}
DayZeroBrowserUiExpt::~DayZeroBrowserUiExpt() = default;
void DayZeroBrowserUiExpt::BindInterface(
mojo::PendingReceiver<mojom::DayZeroBrowserUiExpt> pending_receiver) {
receivers_.Add(this, std::move(pending_receiver));
}
static jlong JNI_DayZeroMojomHelper_Init(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jbrowser_context_handle) {
content::BrowserContext* browser_context =
content::BrowserContextFromJavaHandle(jbrowser_context_handle);
DayZeroBrowserUiExpt* settings_helper =
new DayZeroBrowserUiExpt(browser_context);
return reinterpret_cast<intptr_t>(settings_helper);
}
void DayZeroBrowserUiExpt::Destroy(JNIEnv* env) {
delete this;
}
jlong DayZeroBrowserUiExpt::GetInterfaceToAndroidHelper(JNIEnv* env) {
mojo::PendingRemote<mojom::DayZeroBrowserUiExpt> remote;
receivers_.Add(this, remote.InitWithNewPipeAndPassReceiver());
return static_cast<jlong>(remote.PassPipe().release().value());
}
void DayZeroBrowserUiExpt::IsDayZeroExpt(IsDayZeroExptCallback callback) {
std::move(callback).Run(true);
}
} // namespace day_zero
@@ -0,0 +1,45 @@
/* Copyright (c) 2024 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at https://mozilla.org/MPL/2.0/. */
#ifndef BRAVE_BROWSER_DAY_ZERO_BROWSER_UI_EXPT_DAY_ZERO_BROWSER_UI_EXPT_H_
#define BRAVE_BROWSER_DAY_ZERO_BROWSER_UI_EXPT_DAY_ZERO_BROWSER_UI_EXPT_H_
#include <memory>
#include <string>
#include "base/android/jni_android.h"
#include "base/android/scoped_java_ref.h"
#include "base/memory/raw_ptr.h"
#include "brave/components/day_zero_browser_ui_expt/common/mojom/day_zero.mojom.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
namespace content {
class BrowserContext;
} // namespace content
namespace day_zero {
class DayZeroBrowserUiExpt : public mojom::DayZeroBrowserUiExpt {
public:
explicit DayZeroBrowserUiExpt(content::BrowserContext* context);
~DayZeroBrowserUiExpt() override;
// mojom::DayZeroBrowserUiExpt:
void IsDayZeroExpt(IsDayZeroExptCallback callback) override;
void BindInterface(
mojo::PendingReceiver<mojom::DayZeroBrowserUiExpt> pending_receiver);
void Destroy(JNIEnv* env);
jlong GetInterfaceToAndroidHelper(JNIEnv* env);
private:
mojo::ReceiverSet<mojom::DayZeroBrowserUiExpt> receivers_;
base::WeakPtrFactory<DayZeroBrowserUiExpt> weak_ptr_factory_{this};
};
} // namespace day_zero
#endif // BRAVE_BROWSER_DAY_ZERO_BROWSER_UI_EXPT_DAY_ZERO_BROWSER_UI_EXPT_H_
@@ -0,0 +1,12 @@
# Copyright (c) 2024 The Brave Authors. All rights reserved.
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
# You can obtain one at https://mozilla.org/MPL/2.0/.
brave_browser_day_zero_browser_ui_expt_sources = [
"//brave/browser/day_zero_browser_ui_expt/android/day_zero_browser_ui_expt.cc",
"//brave/browser/day_zero_browser_ui_expt/android/day_zero_browser_ui_expt.h",
]
brave_browser_day_zero_browser_ui_expt_deps =
[ "//brave/components/day_zero_browser_ui_expt/common/mojom" ]
+3
View File
@@ -17,6 +17,7 @@ import("//brave/browser/brave_vpn/sources.gni")
import("//brave/browser/brave_wallet/android/sources.gni")
import("//brave/browser/brave_wallet/notifications/sources.gni")
import("//brave/browser/browsing_data/sources.gni")
import("//brave/browser/day_zero_browser_ui_expt/android/sources.gni")
import("//brave/browser/debounce/sources.gni")
import("//brave/browser/download/sources.gni")
import("//brave/browser/ephemeral_storage/sources.gni")
@@ -349,7 +350,9 @@ if (is_android) {
brave_chrome_browser_sources += brave_browser_brave_wallet_android_sources
brave_chrome_browser_sources += brave_browser_misc_metrics_android_sources
brave_chrome_browser_sources += brave_browser_day_zero_browser_ui_expt_sources
brave_chrome_browser_deps += brave_browser_brave_wallet_android_deps
brave_chrome_browser_deps += brave_browser_day_zero_browser_ui_expt_deps
brave_chrome_browser_deps += [
"//brave/browser/android:android_browser_process",
+1
View File
@@ -225,6 +225,7 @@ generate_jni("jni_headers") {
"//brave/android/java/org/chromium/chrome/browser/crypto_wallet/permission/BraveDappPermissionPromptDialog.java",
"//brave/android/java/org/chromium/chrome/browser/crypto_wallet/util/WalletDataFilesInstallerUtil.java",
"//brave/android/java/org/chromium/chrome/browser/crypto_wallet/util/WalletNativeUtils.java",
"//brave/android/java/org/chromium/chrome/browser/day_zero/DayZeroMojomHelper.java",
"//brave/android/java/org/chromium/chrome/browser/informers/BraveSyncAccountDeletedInformer.java",
"//brave/android/java/org/chromium/chrome/browser/misc_metrics/MiscAndroidMetricsFactory.java",
"//brave/android/java/org/chromium/chrome/browser/notifications/BraveNotificationPlatformBridge.java",
+2
View File
@@ -36,6 +36,7 @@ brave_chrome_java_deps = [
"//brave/components/brave_shields/core/common:mojom_java",
"//brave/components/brave_wallet/common:mojom_java",
"//brave/components/browser_ui/site_settings/android:java",
"//brave/components/day_zero_browser_ui_expt/common/mojom:mojom_java",
"//brave/components/misc_metrics/common:mojom_java",
"//brave/components/playlist/common/mojom:mojom_java",
"//brave/components/safe_browsing/android:brave_safe_browsing_java",
@@ -111,6 +112,7 @@ brave_jni_headers_sources = [
"//brave/android/java/org/chromium/chrome/browser/crypto_wallet/fragments/dapps/ConnectAccountFragment.java",
"//brave/android/java/org/chromium/chrome/browser/crypto_wallet/permission/BraveDappPermissionPromptDialog.java",
"//brave/android/java/org/chromium/chrome/browser/crypto_wallet/util/WalletNativeUtils.java",
"//brave/android/java/org/chromium/chrome/browser/day_zero/DayZeroMojomHelper.java",
"//brave/android/java/org/chromium/chrome/browser/informers/BraveSyncAccountDeletedInformer.java",
"//brave/android/java/org/chromium/chrome/browser/misc_metrics/MiscAndroidMetricsFactory.java",
"//brave/android/java/org/chromium/chrome/browser/notifications/BraveNotificationPlatformBridge.java",