#include "nweb_native_window_tracker.h"
#include "base/check.h"
#include "base/logging.h"
#if BUILDFLAG(IS_OHOS)
#include "content/renderer/render_remote_proxy_ohos.h"
#include "ohos_adapter_helper.h"
#endif
NWebNativeWindowTracker* g_instance = nullptr;
NWebNativeWindowTracker::NWebNativeWindowTracker()
: next_native_window_id_(1) {}
NWebNativeWindowTracker::~NWebNativeWindowTracker() {}
NWebNativeWindowTracker* NWebNativeWindowTracker::GetInstance()
{
return base::Singleton<NWebNativeWindowTracker>::get();
}
int32_t NWebNativeWindowTracker::AddNativeWindow(void* native_window)
{
base::AutoLock lock(window_map_lock_);
int32_t native_window_id = next_native_window_id_++;
native_window_map_.emplace(native_window_id,
std::move((void *)native_window));
LOG(DEBUG) << "Add native window id = " << native_window_id;
return native_window_id;
}
void *NWebNativeWindowTracker::GetNativeWindow(int32_t native_window_id)
{
base::AutoLock lock(window_map_lock_);
auto it = native_window_map_.find(native_window_id);
if (it == native_window_map_.end()) {
LOG(DEBUG) << __FUNCTION__
<< "Cann't get for native_window id = " << native_window_id;
std::shared_ptr<content::RenderRemoteProxy> g_render_remote_proxy =
std::make_shared<content::RenderRemoteProxy>();
if (g_browser_client_) {
void *window = g_browser_client_->QueryRenderSurface(native_window_id);
if (window) {
native_window_map_.emplace(native_window_id, std::move((void *)window));
LOG(DEBUG) << "Add native window id = " << native_window_id;
return window;
}
}
return nullptr;
}
LOG(DEBUG) << __FUNCTION__
<< "Get for native_window id = " << native_window_id;
return it->second;
}
void NWebNativeWindowTracker::DestroyNativeWindow(int32_t native_window_id)
{
base::AutoLock lock(window_map_lock_);
auto it = native_window_map_.find(native_window_id);
if (it != native_window_map_.end()) {
native_window_map_.erase(native_window_id);
LOG(DEBUG) << __FUNCTION__
<< "Destroy native_window id = " << native_window_id;
}
if (g_browser_client_) {
g_browser_client_->DestroyRenderSurface(native_window_id);
LOG(DEBUG) << __FUNCTION__
<< "Destroy browser native_window id = " << native_window_id;
}
}