#include "libcef_dll/cpptoc/domnode_cpptoc.h"
#include "libcef_dll/cpptoc/domdocument_cpptoc.h"
#include "libcef_dll/shutdown_checker.h"
#include "libcef_dll/transfer_util.h"
namespace {
cef_dom_node_type_t CEF_CALLBACK domnode_get_type(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return DOM_NODE_TYPE_UNSUPPORTED;
cef_dom_node_type_t _retval = CefDOMNodeCppToC::Get(self)->GetType();
return _retval;
}
int CEF_CALLBACK domnode_is_text(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
bool _retval = CefDOMNodeCppToC::Get(self)->IsText();
return _retval;
}
int CEF_CALLBACK domnode_is_element(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
bool _retval = CefDOMNodeCppToC::Get(self)->IsElement();
return _retval;
}
int CEF_CALLBACK domnode_is_editable(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
bool _retval = CefDOMNodeCppToC::Get(self)->IsEditable();
return _retval;
}
int CEF_CALLBACK domnode_is_form_control_element(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
bool _retval = CefDOMNodeCppToC::Get(self)->IsFormControlElement();
return _retval;
}
cef_string_userfree_t CEF_CALLBACK
domnode_get_form_control_element_type(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
CefString _retval = CefDOMNodeCppToC::Get(self)->GetFormControlElementType();
return _retval.DetachToUserFree();
}
int CEF_CALLBACK domnode_is_same(struct _cef_domnode_t* self,
struct _cef_domnode_t* that) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(that);
if (!that)
return 0;
bool _retval =
CefDOMNodeCppToC::Get(self)->IsSame(CefDOMNodeCppToC::Unwrap(that));
return _retval;
}
cef_string_userfree_t CEF_CALLBACK
domnode_get_name(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
CefString _retval = CefDOMNodeCppToC::Get(self)->GetName();
return _retval.DetachToUserFree();
}
cef_string_userfree_t CEF_CALLBACK
domnode_get_value(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
CefString _retval = CefDOMNodeCppToC::Get(self)->GetValue();
return _retval.DetachToUserFree();
}
int CEF_CALLBACK domnode_set_value(struct _cef_domnode_t* self,
const cef_string_t* value) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(value);
if (!value)
return 0;
bool _retval = CefDOMNodeCppToC::Get(self)->SetValue(CefString(value));
return _retval;
}
cef_string_userfree_t CEF_CALLBACK
domnode_get_as_markup(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
CefString _retval = CefDOMNodeCppToC::Get(self)->GetAsMarkup();
return _retval.DetachToUserFree();
}
cef_domdocument_t* CEF_CALLBACK
domnode_get_document(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
CefRefPtr<CefDOMDocument> _retval =
CefDOMNodeCppToC::Get(self)->GetDocument();
return CefDOMDocumentCppToC::Wrap(_retval);
}
struct _cef_domnode_t* CEF_CALLBACK
domnode_get_parent(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
CefRefPtr<CefDOMNode> _retval = CefDOMNodeCppToC::Get(self)->GetParent();
return CefDOMNodeCppToC::Wrap(_retval);
}
struct _cef_domnode_t* CEF_CALLBACK
domnode_get_previous_sibling(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
CefRefPtr<CefDOMNode> _retval =
CefDOMNodeCppToC::Get(self)->GetPreviousSibling();
return CefDOMNodeCppToC::Wrap(_retval);
}
struct _cef_domnode_t* CEF_CALLBACK
domnode_get_next_sibling(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
CefRefPtr<CefDOMNode> _retval = CefDOMNodeCppToC::Get(self)->GetNextSibling();
return CefDOMNodeCppToC::Wrap(_retval);
}
int CEF_CALLBACK domnode_has_children(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
bool _retval = CefDOMNodeCppToC::Get(self)->HasChildren();
return _retval;
}
struct _cef_domnode_t* CEF_CALLBACK
domnode_get_first_child(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
CefRefPtr<CefDOMNode> _retval = CefDOMNodeCppToC::Get(self)->GetFirstChild();
return CefDOMNodeCppToC::Wrap(_retval);
}
struct _cef_domnode_t* CEF_CALLBACK
domnode_get_last_child(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
CefRefPtr<CefDOMNode> _retval = CefDOMNodeCppToC::Get(self)->GetLastChild();
return CefDOMNodeCppToC::Wrap(_retval);
}
cef_string_userfree_t CEF_CALLBACK
domnode_get_element_tag_name(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
CefString _retval = CefDOMNodeCppToC::Get(self)->GetElementTagName();
return _retval.DetachToUserFree();
}
int CEF_CALLBACK domnode_has_element_attributes(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
bool _retval = CefDOMNodeCppToC::Get(self)->HasElementAttributes();
return _retval;
}
int CEF_CALLBACK domnode_has_element_attribute(struct _cef_domnode_t* self,
const cef_string_t* attrName) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(attrName);
if (!attrName)
return 0;
bool _retval =
CefDOMNodeCppToC::Get(self)->HasElementAttribute(CefString(attrName));
return _retval;
}
cef_string_userfree_t CEF_CALLBACK
domnode_get_element_attribute(struct _cef_domnode_t* self,
const cef_string_t* attrName) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
DCHECK(attrName);
if (!attrName)
return NULL;
CefString _retval =
CefDOMNodeCppToC::Get(self)->GetElementAttribute(CefString(attrName));
return _retval.DetachToUserFree();
}
void CEF_CALLBACK domnode_get_element_attributes(struct _cef_domnode_t* self,
cef_string_map_t attrMap) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return;
DCHECK(attrMap);
if (!attrMap)
return;
std::map<CefString, CefString> attrMapMap;
transfer_string_map_contents(attrMap, attrMapMap);
CefDOMNodeCppToC::Get(self)->GetElementAttributes(attrMapMap);
cef_string_map_clear(attrMap);
transfer_string_map_contents(attrMapMap, attrMap);
}
int CEF_CALLBACK domnode_set_element_attribute(struct _cef_domnode_t* self,
const cef_string_t* attrName,
const cef_string_t* value) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return 0;
DCHECK(attrName);
if (!attrName)
return 0;
DCHECK(value);
if (!value)
return 0;
bool _retval = CefDOMNodeCppToC::Get(self)->SetElementAttribute(
CefString(attrName), CefString(value));
return _retval;
}
cef_string_userfree_t CEF_CALLBACK
domnode_get_element_inner_text(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return NULL;
CefString _retval = CefDOMNodeCppToC::Get(self)->GetElementInnerText();
return _retval.DetachToUserFree();
}
cef_rect_t CEF_CALLBACK
domnode_get_element_bounds(struct _cef_domnode_t* self) {
shutdown_checker::AssertNotShutdown();
DCHECK(self);
if (!self)
return CefRect();
cef_rect_t _retval = CefDOMNodeCppToC::Get(self)->GetElementBounds();
return _retval;
}
}
CefDOMNodeCppToC::CefDOMNodeCppToC() {
GetStruct()->get_type = domnode_get_type;
GetStruct()->is_text = domnode_is_text;
GetStruct()->is_element = domnode_is_element;
GetStruct()->is_editable = domnode_is_editable;
GetStruct()->is_form_control_element = domnode_is_form_control_element;
GetStruct()->get_form_control_element_type =
domnode_get_form_control_element_type;
GetStruct()->is_same = domnode_is_same;
GetStruct()->get_name = domnode_get_name;
GetStruct()->get_value = domnode_get_value;
GetStruct()->set_value = domnode_set_value;
GetStruct()->get_as_markup = domnode_get_as_markup;
GetStruct()->get_document = domnode_get_document;
GetStruct()->get_parent = domnode_get_parent;
GetStruct()->get_previous_sibling = domnode_get_previous_sibling;
GetStruct()->get_next_sibling = domnode_get_next_sibling;
GetStruct()->has_children = domnode_has_children;
GetStruct()->get_first_child = domnode_get_first_child;
GetStruct()->get_last_child = domnode_get_last_child;
GetStruct()->get_element_tag_name = domnode_get_element_tag_name;
GetStruct()->has_element_attributes = domnode_has_element_attributes;
GetStruct()->has_element_attribute = domnode_has_element_attribute;
GetStruct()->get_element_attribute = domnode_get_element_attribute;
GetStruct()->get_element_attributes = domnode_get_element_attributes;
GetStruct()->set_element_attribute = domnode_set_element_attribute;
GetStruct()->get_element_inner_text = domnode_get_element_inner_text;
GetStruct()->get_element_bounds = domnode_get_element_bounds;
}
CefDOMNodeCppToC::~CefDOMNodeCppToC() {
shutdown_checker::AssertNotShutdown();
}
template <>
CefRefPtr<CefDOMNode>
CefCppToCRefCounted<CefDOMNodeCppToC, CefDOMNode, cef_domnode_t>::UnwrapDerived(
CefWrapperType type,
cef_domnode_t* s) {
NOTREACHED() << "Unexpected class type: " << type;
return nullptr;
}
template <>
CefWrapperType CefCppToCRefCounted<CefDOMNodeCppToC,
CefDOMNode,
cef_domnode_t>::kWrapperType = WT_DOMNODE;