// Copyright (c) 2009 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. #include "include/cef.h" #include "include/cef_capi.h" #include "include/cef_version.h" #include "include/cef_nplugin.h" #include "include/cef_nplugin_capi.h" #include "cef_logging.h" #include "cpptoc/browser_cpptoc.h" #include "cpptoc/domdocument_cpptoc.h" #include "cpptoc/domevent_cpptoc.h" #include "cpptoc/domnode_cpptoc.h" #include "cpptoc/post_data_cpptoc.h" #include "cpptoc/post_data_element_cpptoc.h" #include "cpptoc/request_cpptoc.h" #include "cpptoc/stream_reader_cpptoc.h" #include "cpptoc/stream_writer_cpptoc.h" #include "cpptoc/v8context_cpptoc.h" #include "cpptoc/v8value_cpptoc.h" #include "cpptoc/web_urlrequest_cpptoc.h" #include "cpptoc/xml_reader_cpptoc.h" #include "cpptoc/zip_reader_cpptoc.h" #include "ctocpp/content_filter_ctocpp.h" #include "ctocpp/cookie_visitor_ctocpp.h" #include "ctocpp/domevent_listener_ctocpp.h" #include "ctocpp/domvisitor_ctocpp.h" #include "ctocpp/download_handler_ctocpp.h" #include "ctocpp/read_handler_ctocpp.h" #include "ctocpp/scheme_handler_ctocpp.h" #include "ctocpp/scheme_handler_factory_ctocpp.h" #include "ctocpp/storage_visitor_ctocpp.h" #include "ctocpp/task_ctocpp.h" #include "ctocpp/v8accessor_ctocpp.h" #include "ctocpp/v8handler_ctocpp.h" #include "ctocpp/web_urlrequest_client_ctocpp.h" #include "ctocpp/write_handler_ctocpp.h" #include "base/string_split.h" CEF_EXPORT int cef_build_revision() { return CEF_REVISION; } CEF_EXPORT int cef_initialize(const struct _cef_settings_t* settings) { CefSettings settingsObj; // Reference the values instead of copying. if (settings) settingsObj.Set(*settings, false); int ret = CefInitialize(settingsObj); return ret; } CEF_EXPORT void cef_shutdown() { CefShutdown(); #ifndef NDEBUG // Check that all wrapper objects have been destroyed DCHECK(CefBrowserCppToC::DebugObjCt == 0); DCHECK(CefDOMDocumentCppToC::DebugObjCt == 0); DCHECK(CefDOMEventCppToC::DebugObjCt == 0); DCHECK(CefDOMNodeCppToC::DebugObjCt == 0); DCHECK(CefRequestCppToC::DebugObjCt == 0); DCHECK(CefPostDataCppToC::DebugObjCt == 0); DCHECK(CefPostDataElementCppToC::DebugObjCt == 0); DCHECK(CefStreamReaderCppToC::DebugObjCt == 0); DCHECK(CefStreamWriterCppToC::DebugObjCt == 0); DCHECK(CefV8ContextCppToC::DebugObjCt == 0); DCHECK(CefV8ValueCppToC::DebugObjCt == 0); DCHECK(CefWebURLRequestCppToC::DebugObjCt == 0); DCHECK(CefXmlReaderCppToC::DebugObjCt == 0); DCHECK(CefZipReaderCppToC::DebugObjCt == 0); DCHECK(CefContentFilterCToCpp::DebugObjCt == 0); DCHECK(CefCookieVisitorCToCpp::DebugObjCt == 0); DCHECK(CefDOMEventListenerCToCpp::DebugObjCt == 0); DCHECK(CefDOMVisitorCToCpp::DebugObjCt == 0); DCHECK(CefDownloadHandlerCToCpp::DebugObjCt == 0); DCHECK(CefReadHandlerCToCpp::DebugObjCt == 0); DCHECK(CefSchemeHandlerCToCpp::DebugObjCt == 0); DCHECK(CefSchemeHandlerFactoryCToCpp::DebugObjCt == 0); DCHECK(CefStorageVisitorCToCpp::DebugObjCt == 0); DCHECK(CefV8AccessorCToCpp::DebugObjCt == 0); DCHECK(CefV8HandlerCToCpp::DebugObjCt == 0); DCHECK(CefWebURLRequestClientCToCpp::DebugObjCt == 0); DCHECK(CefWriteHandlerCToCpp::DebugObjCt == 0); #endif // !NDEBUG } CEF_EXPORT void cef_do_message_loop_work() { CefDoMessageLoopWork(); } CEF_EXPORT void cef_run_message_loop() { CefRunMessageLoop(); } CEF_EXPORT int cef_register_extension(const cef_string_t* extension_name, const cef_string_t* javascript_code, struct _cef_v8handler_t* handler) { DCHECK(extension_name); DCHECK(javascript_code); CefRefPtr handlerPtr; std::wstring nameStr, codeStr; if(handler) handlerPtr = CefV8HandlerCToCpp::Wrap(handler); return CefRegisterExtension(CefString(extension_name), CefString(javascript_code), handlerPtr); } CEF_EXPORT int cef_register_plugin(const cef_plugin_info_t* plugin_info) { DCHECK(plugin_info); return CefRegisterPlugin(*plugin_info); } CEF_EXPORT int cef_register_custom_scheme(const cef_string_t* scheme_name, int is_standard, int is_local, int is_display_isolated) { DCHECK(scheme_name); if (!scheme_name) return 0; return CefRegisterCustomScheme(CefString(scheme_name), is_standard?true:false, is_local?true:false, is_display_isolated?true:false); } CEF_EXPORT int cef_register_scheme_handler_factory( const cef_string_t* scheme_name, const cef_string_t* domain_name, struct _cef_scheme_handler_factory_t* factory) { DCHECK(scheme_name); if (!scheme_name) return 0; CefRefPtr factoryPtr; if (factory) factoryPtr = CefSchemeHandlerFactoryCToCpp::Wrap(factory); return CefRegisterSchemeHandlerFactory(CefString(scheme_name), CefString(domain_name), factoryPtr); } CEF_EXPORT int cef_clear_scheme_handler_factories() { return CefClearSchemeHandlerFactories(); } CEF_EXPORT int cef_add_cross_origin_whitelist_entry( const cef_string_t* source_origin, const cef_string_t* target_protocol, const cef_string_t* target_domain, int allow_target_subdomains) { DCHECK(source_origin); DCHECK(target_protocol); DCHECK(target_domain); if (!source_origin || !target_protocol || !target_domain) return 0; return CefAddCrossOriginWhitelistEntry(CefString(source_origin), CefString(target_protocol), CefString(target_domain), allow_target_subdomains?true:false); } CEF_EXPORT int cef_remove_cross_origin_whitelist_entry( const cef_string_t* source_origin, const cef_string_t* target_protocol, const cef_string_t* target_domain, int allow_target_subdomains) { DCHECK(source_origin); DCHECK(target_protocol); DCHECK(target_domain); if (!source_origin || !target_protocol || !target_domain) return 0; return CefRemoveCrossOriginWhitelistEntry(CefString(source_origin), CefString(target_protocol), CefString(target_domain), allow_target_subdomains?true:false); } CEF_EXPORT int cef_clear_cross_origin_whitelist() { return CefClearCrossOriginWhitelist(); } CEF_EXPORT int cef_currently_on(cef_thread_id_t threadId) { return CefCurrentlyOn(threadId); } CEF_EXPORT int cef_post_task(cef_thread_id_t threadId, struct _cef_task_t* task) { DCHECK(task); if(!task) return 0; return CefPostTask(threadId, CefTaskCToCpp::Wrap(task)); } CEF_EXPORT int cef_post_delayed_task(cef_thread_id_t threadId, struct _cef_task_t* task, long delay_ms) { DCHECK(task); if(!task) return 0; return CefPostDelayedTask(threadId, CefTaskCToCpp::Wrap(task), delay_ms); } CEF_EXPORT int cef_parse_url(const cef_string_t* url, struct _cef_urlparts_t* parts) { DCHECK(url && parts); if(!url || !parts) return 0; CefURLParts urlParts; bool ret = CefParseURL(CefString(url), urlParts); urlParts.DetachTo(*parts); return ret; } CEF_EXPORT int cef_create_url(const struct _cef_urlparts_t* parts, cef_string_t* url) { DCHECK(parts && url); if(!parts || !url) return 0; // Reference the existing values without copying. CefURLParts urlParts; urlParts.Set(*parts, false); CefString urlStr(url); return CefCreateURL(urlParts, urlStr); } CEF_EXPORT int cef_visit_all_cookies(struct _cef_cookie_visitor_t* visitor) { DCHECK(visitor); if (!visitor) return 0; return CefVisitAllCookies(CefCookieVisitorCToCpp::Wrap(visitor)); } CEF_EXPORT int cef_visit_url_cookies(const cef_string_t* url, int includeHttpOnly, struct _cef_cookie_visitor_t* visitor) { DCHECK(url); DCHECK(visitor); if (!url || !visitor) return 0; return CefVisitUrlCookies(CefString(url), includeHttpOnly?true:false, CefCookieVisitorCToCpp::Wrap(visitor)); } CEF_EXPORT int cef_set_cookie(const cef_string_t* url, const struct _cef_cookie_t* cookie) { DCHECK(url); DCHECK(cookie); if (!url || !cookie) return 0; // Reference the existing values without copying. CefCookie cookieObj; cookieObj.Set(*cookie, false); return CefSetCookie(CefString(url), cookieObj); } CEF_EXPORT int cef_delete_cookies(const cef_string_t* url, const cef_string_t* cookie_name) { CefString urlStr, cookieNameStr; if (url) urlStr = url; if (cookie_name) cookieNameStr = cookie_name; return CefDeleteCookies(urlStr, cookieNameStr); } CEF_EXPORT int cef_set_cookie_path(const cef_string_t* path) { CefString pathStr; if (path) pathStr = path; return CefSetCookiePath(pathStr); } CEF_EXPORT int cef_visit_storage(enum cef_storage_type_t type, const cef_string_t* origin, const cef_string_t* key, struct _cef_storage_visitor_t* visitor) { CefString originStr, keyStr; if (origin) originStr = origin; if (key) keyStr = key; return CefVisitStorage(type, originStr, keyStr, CefStorageVisitorCToCpp::Wrap(visitor)); } CEF_EXPORT int cef_set_storage(enum cef_storage_type_t type, const cef_string_t* origin, const cef_string_t* key, const cef_string_t* value) { CefString originStr, keyStr, valueStr; if (origin) originStr = origin; if (key) keyStr = key; if (value) valueStr = value; return CefSetStorage(type, originStr, keyStr, valueStr); } CEF_EXPORT int cef_delete_storage(enum cef_storage_type_t type, const cef_string_t* origin, const cef_string_t* key) { CefString originStr, keyStr; if (origin) originStr = origin; if (key) keyStr = key; return CefDeleteStorage(type, origin, key); } CEF_EXPORT int cef_set_storage_path(enum cef_storage_type_t type, const cef_string_t* path) { CefString pathStr; if (path) pathStr = path; return CefSetStoragePath(type, pathStr); }