2026-02-19 21:31:49 +01:00

135 lines
3.5 KiB
C++

// Copyright (c) 2011 The Chromium Embedded Framework Authors. All rights
// reserved. Use of this source code is governed by a BSD-style license that
// can be found in the LICENSE file.
#ifndef JCEF_NATIVE_UTIL_H_
#define JCEF_NATIVE_UTIL_H_
#pragma once
#include <string>
#ifdef USING_JAVA
#include <jni.h>
#include "include/base/cef_callback_forward.h"
#include "include/cef_browser.h"
#include "include/cef_task.h"
#if defined(OS_LINUX)
#include "critical_wait.h"
#endif
#endif // USING_JAVA
#if defined(OS_WIN)
#include <windows.h> // NOLINT(build/include_order)
#ifndef NDEBUG
#define ASSERT(condition) \
if (!(condition)) { \
DebugBreak(); \
}
#else
#define ASSERT(condition) ((void)0)
#endif
#else // !OS_WIN
#include <assert.h> // NOLINT(build/include_order)
#ifndef NDEBUG
#define ASSERT(condition) \
if (!(condition)) { \
assert(false); \
}
#else
#define ASSERT(condition) ((void)0)
#endif
#endif // !OS_WIN
#if defined(OS_MACOSX)
// due a missing export definition within Java 7u40 (and prior)
// for Mac OS X, we have to redefine JNIEXPORT.
// Otherwise the JNI function names wouldn't be exported to libjcef
#ifdef JNIEXPORT
#undef JNIEXPORT
#define JNIEXPORT __attribute__((visibility("default")))
#endif // JNIEXPORT
#endif // OS_MACOSX
#define REQUIRE_UI_THREAD() ASSERT(CefCurrentlyOn(TID_UI));
#define REQUIRE_IO_THREAD() ASSERT(CefCurrentlyOn(TID_IO));
#define REQUIRE_FILE_THREAD() ASSERT(CefCurrentlyOn(TID_FILE));
// Used to silence warnings about unused variables.
#if !defined(UNUSED)
#define UNUSED(x) ((void)(x))
#endif
namespace util {
// Get the process-id of the current process.
int GetPid();
// Get the process-id of the parent process (that process that launched the
// current process).
int GetParentPid();
// Returns the absolute path for a temporary file whose name is unique to the
// process. |identifer| is attached to the filename.
std::string GetTempFileName(const std::string& identifer, bool useParentId);
#ifdef USING_JAVA
// Called by LifeSpanHandler::OnAfterCreated() to do some platform dependent
// tasks for the browser reference like registering mouse events.
void AddCefBrowser(CefRefPtr<CefBrowser> browser);
// Called by CefBrowser.close(true) to destroy the native browser window.
void DestroyCefBrowser(CefRefPtr<CefBrowser> browser);
#if defined(OS_MACOSX)
// Set the parent of |browserHandle|. If the parent is nullptr the browser will
// be parented to the TempWindow.
void SetParent(CefWindowHandle browserHandle,
jlong parentHandle,
base::OnceClosure callback);
#else // !defined(OS_MACOSX)
// Return the window handle for the specified canvas.
CefWindowHandle GetWindowHandle(JNIEnv* env, jobject canvas);
// Set the parent of |browserHandle|. If the parent is nullptr the browser will
// be parented to the TempWindow.
void SetParent(CefWindowHandle browserHandle,
CefWindowHandle parentHandle,
base::OnceClosure callback);
#if defined(OS_LINUX)
void SetParentSync(CefWindowHandle browserHandle,
CefWindowHandle parentHandle,
CriticalWait* waitCond,
base::OnceClosure callback);
#endif
// Set the window bounds for |browserHandle|.
void SetWindowBounds(CefWindowHandle browserHandle, const CefRect& contentRect);
// Set the window size for |browserHandle|.
void SetWindowSize(CefWindowHandle browserHandle, int width, int height);
#endif // !defined(OS_MACOSX)
#endif // USING_JAVA
} // namespace util
#endif // JCEF_NATIVE_UTIL_H_