Add mojom interface to android for day zero experience
This commit is contained in:
@@ -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" ]
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user