Wef is a Rust library for embedding WebView functionality using Chromium Embedded Framework (CEF3) with offscreen rendering support.
58 lines
1.8 KiB
C++
58 lines
1.8 KiB
C++
#include "client.h"
|
|
|
|
#include <iostream>
|
|
|
|
#include "include/base/cef_bind.h"
|
|
#include "include/base/cef_callback.h"
|
|
#include "include/cef_browser.h"
|
|
#include "include/cef_task.h"
|
|
#include "include/wrapper/cef_closure_task.h"
|
|
#include "shutdown_helper.h"
|
|
#include "wef.h"
|
|
|
|
WefClient::WefClient(WefBrowser* wef_browser, float device_scale_factor,
|
|
int width, int height, BrowserCallbacks callbacks,
|
|
void* userdata, DestroyFn destroy_userdata)
|
|
: wef_browser_(wef_browser),
|
|
width_(width),
|
|
height_(height),
|
|
device_scale_factor_(device_scale_factor),
|
|
callbacks_(callbacks),
|
|
userdata_(userdata),
|
|
destroy_userdata_(destroy_userdata) {}
|
|
|
|
WefClient::~WefClient() { destroy_userdata_(userdata_); }
|
|
|
|
void WefClient::OnAfterCreated(CefRefPtr<CefBrowser> browser) {
|
|
if (wef_browser_->deleteBrowser) {
|
|
CefPostTask(TID_UI, base::BindOnce(&CefBrowserHost::CloseBrowser,
|
|
browser->GetHost(), false));
|
|
}
|
|
|
|
CefMessageRouterConfig config;
|
|
message_router_ = CefMessageRouterBrowserSide::Create(config);
|
|
message_router_->AddHandler(this, false);
|
|
|
|
wef_browser_->browser = browser;
|
|
|
|
if (!wef_browser_->url.empty()) {
|
|
browser->GetMainFrame()->LoadURL(wef_browser_->url);
|
|
}
|
|
|
|
callbacks_.on_created(userdata_);
|
|
}
|
|
|
|
void WefClient::OnLoadEnd(CefRefPtr<CefBrowser> browser,
|
|
CefRefPtr<CefFrame> frame, int httpStatusCode) {
|
|
callbacks_.on_load_end(userdata_, new WefFrame{frame});
|
|
if (wef_browser_->browser) {
|
|
(*wef_browser_->browser)->GetHost()->SetFocus(wef_browser_->focus);
|
|
}
|
|
}
|
|
|
|
void WefClient::OnBeforeClose(CefRefPtr<CefBrowser> browser) {
|
|
message_router_->OnBeforeClose(browser);
|
|
delete wef_browser_;
|
|
wef_browser_ = nullptr;
|
|
ShutdownHelper::getSingleton()->browserDestroyed();
|
|
}
|