#include "libcef_dll/cpptoc/extension_cpptoc.h"
#include "libcef_dll/cpptoc/dictionary_value_cpptoc.h"
#include "libcef_dll/cpptoc/request_context_cpptoc.h"
#include "libcef_dll/ctocpp/extension_handler_ctocpp.h"
#include "libcef_dll/shutdown_checker.h"
namespace {
cef_string_userfree_t CEF_CALLBACK
extension_get_identifier(struct _cef_extension_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
CefString _retval = CefExtensionCppToC::Get(self)->GetIdentifier();
return _retval.DetachToUserFree();
}
cef_string_userfree_t CEF_CALLBACK
extension_get_path(struct _cef_extension_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
CefString _retval = CefExtensionCppToC::Get(self)->GetPath();
return _retval.DetachToUserFree();
}
struct _cef_dictionary_value_t* CEF_CALLBACK
extension_get_manifest(struct _cef_extension_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
CefRefPtr<CefDictionaryValue> _retval =
CefExtensionCppToC::Get(self)->GetManifest();
return CefDictionaryValueCppToC::Wrap(_retval);
}
int CEF_CALLBACK extension_is_same(struct _cef_extension_t* self,
struct _cef_extension_t* that) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(that);
if (!that)
return 0;
bool _retval =
CefExtensionCppToC::Get(self)->IsSame(CefExtensionCppToC::Unwrap(that));
return _retval;
}
struct _cef_extension_handler_t* CEF_CALLBACK
extension_get_handler(struct _cef_extension_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
CefRefPtr<CefExtensionHandler> _retval =
CefExtensionCppToC::Get(self)->GetHandler();
return CefExtensionHandlerCToCpp::Unwrap(_retval);
}
struct _cef_request_context_t* CEF_CALLBACK
extension_get_loader_context(struct _cef_extension_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
CefRefPtr<CefRequestContext> _retval =
CefExtensionCppToC::Get(self)->GetLoaderContext();
return CefRequestContextCppToC::Wrap(_retval);
}
int CEF_CALLBACK extension_is_loaded(struct _cef_extension_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
bool _retval = CefExtensionCppToC::Get(self)->IsLoaded();
return _retval;
}
void CEF_CALLBACK extension_unload(struct _cef_extension_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return;
CefExtensionCppToC::Get(self)->Unload();
}
}
CefExtensionCppToC::CefExtensionCppToC() {
GetStruct()->get_identifier = extension_get_identifier;
GetStruct()->get_path = extension_get_path;
GetStruct()->get_manifest = extension_get_manifest;
GetStruct()->is_same = extension_is_same;
GetStruct()->get_handler = extension_get_handler;
GetStruct()->get_loader_context = extension_get_loader_context;
GetStruct()->is_loaded = extension_is_loaded;
GetStruct()->unload = extension_unload;
}
CefExtensionCppToC::~CefExtensionCppToC() {
shutdown_checker::AssertNotShutdown();
}
template <>
CefRefPtr<CefExtension>
CefCppToCRefCounted<CefExtensionCppToC, CefExtension, cef_extension_t>::
UnwrapDerived(CefWrapperType type, cef_extension_t* s) {
NOTREACHED() << "Unexpected class type: " << type;
return nullptr;
}
template <>
CefWrapperType CefCppToCRefCounted<CefExtensionCppToC,
CefExtension,
cef_extension_t>::kWrapperType =
WT_EXTENSION;