rodecomp/Source/Client/BrowserRegistry.cpp
2026-10-24 00:35:19 +00:00

52 lines
1.3 KiB
C++

#include "Client/BrowserRegistry.h"
#include "Client/WebBrowser.h"
#include <new>
// OFFSET: 0x00A91990
// FUNCTION: fn_17167
CWebBrowser* BrowserRegistry::Find(HWND window) const {
const auto found = this->browsers.find(window);
return found == this->browsers.end() ? nullptr : found->second;
}
// OFFSET: 0x00A8F860
// FUNCTION: fn_17146
void BrowserRegistry::Remove(HWND window) {
const auto found = this->browsers.find(window);
if (found != this->browsers.end()) {
CWebBrowser* browser = found->second;
if (browser) {
if (browser == this->special) {
this->special = nullptr;
}
delete browser;
}
this->browsers.erase(found);
return;
}
// The reference dereferences the special browser on this miss path before
// checking it; a nonnull special owner is a caller precondition here.
if (window == this->special->host) {
delete this->special;
this->special = nullptr;
}
}
// OFFSET: 0x00A8C960
// FUNCTION: fn_17138
CWebBrowser* BrowserRegistry::EnsureSpecial(WebBrowserContext& context, int width, int height) {
if (this->special) {
return this->special;
}
this->special = new (std::nothrow) CWebBrowser(context);
if (this->special && this->special->Create(width, height)) {
this->browsers.emplace(this->special->host, this->special);
}
return this->special;
}