bool FWebBrowserHandler::ShowDevTools(const CefRefPtr<CefBrowser>& Browser) { CefPoint Point; CefString TargetUrl = "chrome-devtools://devtools/devtools.html"; CefString TargetFrameName = "devtools"; CefPopupFeatures PopupFeatures; CefWindowInfo WindowInfo; CefRefPtr<CefClient> NewClient; CefBrowserSettings BrowserSettings; bool NoJavascriptAccess = false; PopupFeatures.xSet = false; PopupFeatures.ySet = false; PopupFeatures.heightSet = false; PopupFeatures.widthSet = false; PopupFeatures.locationBarVisible = false; PopupFeatures.menuBarVisible = false; PopupFeatures.toolBarVisible = false; PopupFeatures.statusBarVisible = false; PopupFeatures.resizable = true; PopupFeatures.additionalFeatures = cef_string_list_alloc(); // Override the parent window setting for transparency, as the Dev Tools require a solid background CefString OverrideTransparencyFeature = "Epic_NoTransparency"; cef_string_list_append(PopupFeatures.additionalFeatures, OverrideTransparencyFeature.GetStruct()); // Set max framerate to maximum supported. BrowserSettings.windowless_frame_rate = 60; // Disable plugins BrowserSettings.plugins = STATE_DISABLED; // Dev Tools look best with a white background color BrowserSettings.background_color = CefColorSetARGB(255, 255, 255, 255); // OnBeforePopup already takes care of all the details required to ask the host application to create a new browser window. bool bSuppressWindowCreation = OnBeforePopup(Browser, Browser->GetFocusedFrame(), TargetUrl, TargetFrameName, PopupFeatures, WindowInfo, NewClient, BrowserSettings, &NoJavascriptAccess); if(! bSuppressWindowCreation) { Browser->GetHost()->ShowDevTools(WindowInfo, NewClient, BrowserSettings, Point); } return !bSuppressWindowCreation; }
void Win32Host::RunLoop(const string & plugin_path) { #define TEST_SINGLE_THREADED_MESSAGE_LOOP #ifdef TEST_SINGLE_THREADED_MESSAGE_LOOP // Initialize the CEF with messages processed using the current application's // message loop. settings.multi_threaded_message_loop = false; #else // Initialize the CEF with messages processed using a separate UI thread. settings.multi_threaded_message_loop = true; #endif // Setting private plugin path. CefString str(plugin_path); settings.extra_plugin_paths = cef_string_list_alloc(); cef_string_list_append(settings.extra_plugin_paths, str.GetStruct()); browserDefaults.web_security_disabled = true; // CefInitialize(settings, browserDefaults); HACCEL hAccelTable = NULL;// LoadAccelerators(::GetModuleHandle(NULL), MAKEINTRESOURCE(IDC_blah)); MSG msg; // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) { #ifdef TEST_SINGLE_THREADED_MESSAGE_LOOP // Allow the CEF to do its message loop processing. CefDoMessageLoopWork(); #endif if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } }
// CEF_EXPORT void cef_string_list_append(cef_string_list_t list, const cef_string_t* value); static void cfx_string_list_append(cef_string_list_t list, char16 *value_str, int value_length) { cef_string_t value = { value_str, value_length, 0 }; cef_string_list_append(list, &value); }