// 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 "../precompiled_libcef.h" #include "cef.h" #include "cef_capi.h" #include "cef_nplugin.h" #include "cef_nplugin_capi.h" #include "../cpptoc/handler_cpptoc.h" #include "../ctocpp/request_ctocpp.h" #include "../ctocpp/stream_ctocpp.h" bool CefInitialize(bool multi_threaded_message_loop, const std::wstring& cache_path) { return (bool)cef_initialize(multi_threaded_message_loop, cache_path.c_str()); } void CefShutdown() { cef_shutdown(); } void CefDoMessageLoopWork() { cef_do_message_loop_work(); } bool CefBrowser::CreateBrowser(CefWindowInfo& windowInfo, bool popup, CefRefPtr handler, const std::wstring& url) { CefHandlerCppToC* hp = new CefHandlerCppToC(handler); hp->AddRef(); return cef_create_browser(&windowInfo, popup, hp->GetStruct(), url.c_str()); } CefRefPtr CreateRequest() { cef_request_t* impl = cef_create_request(); if(!impl) return NULL; CefRequestCToCpp* ptr = new CefRequestCToCpp(impl); CefRefPtr rp(ptr); ptr->UnderlyingRelease(); return rp; } CefRefPtr CreatePostData() { cef_post_data_t* impl = cef_create_post_data(); if(!impl) return NULL; CefPostDataCToCpp* ptr = new CefPostDataCToCpp(impl); CefRefPtr rp(ptr); ptr->UnderlyingRelease(); return rp; } CefRefPtr CreatePostDataElement() { cef_post_data_element_t* impl = cef_create_post_data_element(); if(!impl) return NULL; CefPostDataElementCToCpp* ptr = new CefPostDataElementCToCpp(impl); CefRefPtr rp(ptr); ptr->UnderlyingRelease(); return rp; } CefRefPtr CefStreamReader::CreateForFile(const std::wstring& fileName) { cef_stream_reader_t* impl = cef_create_stream_reader_for_file(fileName.c_str()); if(!impl) return NULL; CefStreamReaderCToCpp* ptr = new CefStreamReaderCToCpp(impl); CefRefPtr rp(ptr); ptr->UnderlyingRelease(); return rp; } CefRefPtr CefStreamReader::CreateForData(void *data, size_t size) { cef_stream_reader_t* impl = cef_create_stream_reader_for_data(data, size); if(!impl) return NULL; CefStreamReaderCToCpp* ptr = new CefStreamReaderCToCpp(impl); CefRefPtr rp(ptr); ptr->UnderlyingRelease(); return rp; } bool CefRegisterPlugin(const struct CefPluginInfo& plugin_info) { cef_plugin_info_t pluginInfo; pluginInfo.unique_name = plugin_info.unique_name.c_str(); pluginInfo.display_name = plugin_info.display_name.c_str(); pluginInfo.version =plugin_info.version.c_str(); pluginInfo.description = plugin_info.description.c_str(); std::wstring mimeTypes, fileExtensions, typeDescriptions; for(size_t i = 0; i < plugin_info.mime_types.size(); ++i) { if(i > 0) { mimeTypes += L"|"; fileExtensions += L"|"; typeDescriptions += L"|"; } mimeTypes += plugin_info.mime_types[i].mime_type; typeDescriptions += plugin_info.mime_types[i].description; for(size_t j = 0; j < plugin_info.mime_types[i].file_extensions.size(); ++j) { if(j > 0) { fileExtensions += L","; } fileExtensions += plugin_info.mime_types[i].file_extensions[j]; } } pluginInfo.mime_types = mimeTypes.c_str(); pluginInfo.file_extensions = fileExtensions.c_str(); pluginInfo.type_descriptions = typeDescriptions.c_str(); pluginInfo.np_getentrypoints = plugin_info.np_getentrypoints; pluginInfo.np_initialize = plugin_info.np_initialize; pluginInfo.np_shutdown = plugin_info.np_shutdown; return (cef_register_plugin(&pluginInfo) ? true : false); }