// Callback for when you press enter in the URL box. void URLEntryActivate(GtkEntry* entry) { if (!g_handler.get() || !g_handler->GetBrowserHwnd()) return; const gchar* url = gtk_entry_get_text(entry); g_handler->GetBrowser()->GetMainFrame()->LoadURL(std::string(url).c_str()); }
gboolean DragDropActivated(GtkWidget* widget) { if (g_handler.get() && g_handler->GetBrowserHwnd()) { CefRefPtr<CefBrowser> browser = g_handler->GetBrowser(); RunDragDropTest(browser); } return FALSE; // Don't stop this message. }
gboolean ShowDevtoolsActivated(GtkWidget* widget) { if (g_handler.get() && g_handler->GetBrowserHwnd()) { CefRefPtr<CefBrowser> browser = g_handler->GetBrowser(); browser->ShowDevTools(); } return FALSE; // Don't stop this message. }
// Callback for Debug > Zoom Reset... menu item. gboolean ZoomResetActivated(GtkWidget* widget) { if (g_handler.get() && g_handler->GetBrowserHwnd()) { CefRefPtr<CefBrowser> browser = g_handler->GetBrowser(); browser->SetZoomLevel(0.0); } return FALSE; // Don't stop this message. }
// WebViewDelegate::TakeFocus in the test webview delegate. static gboolean HandleFocus(GtkWidget* widget, GdkEventFocus* focus) { if (g_handler.get() && g_handler->GetBrowserHwnd()) { // Give focus to the browser window. g_handler->GetBrowser()->SetFocus(true); } return TRUE; }
// Callback for Debug > JS Extension... menu item. gboolean JSExtensionActivated(GtkWidget* widget) { if (g_handler.get() && g_handler->GetBrowserHwnd()) RunExtensionTest(g_handler->GetBrowser()); return FALSE; // Don't stop this message. }
// Callback for Debug > JS Binding... menu item. gboolean JSBindngActivated(GtkWidget* widget) { if (g_handler.get() && g_handler->GetBrowserHwnd()) RunBindingTest(g_handler->GetBrowser()); return FALSE; // Don't stop this message. }
// Callback for Debug > Popup Window... menu item. gboolean PopupWindowActivated(GtkWidget* widget) { if (g_handler.get() && g_handler->GetBrowserHwnd()) RunPopupTest(g_handler->GetBrowser()); return FALSE; // Don't stop this message. }
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_CREATE: { g_handler = new ClientHandler(); RECT rect; GetClientRect(hWnd, &rect); CefBrowserSettings settings; settings.plugins_disabled = false; settings.file_access_from_file_urls_allowed = true; settings.universal_access_from_file_urls_allowed = true; CefWindowInfo info; info.SetAsChild(hWnd, rect); WCHAR full_path[MAX_PATH]; get_abs_path_exe(L"web\\search.htm",full_path); if(_waccess(full_path,0)==0) { CefBrowser::CreateBrowser(info, static_cast<CefRefPtr<CefClient>>(g_handler), full_path,settings); } else if(_waccess(L"E:\\Documents\\gigaso\\browser\\web\\search2.htm",0)==0) { CefBrowser::CreateBrowser(info, static_cast<CefRefPtr<CefClient>>(g_handler), L"E:\\Documents\\gigaso\\browser\\web\\search2.htm",settings); } else { CefBrowser::CreateBrowser(info, static_cast<CefRefPtr<CefClient>>(g_handler), L"about:blank",settings); } } return 0; case WM_ACTIVATE: if((short)wParam!=WA_INACTIVE) { //SetForegroundWindow(hWnd); trans_focus(); } return 0; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); EndPaint(hWnd, &ps); return 0; case WM_SETFOCUS: trans_focus(); return 0; case WM_SIZE: if(g_handler.get() && g_handler->GetBrowserHwnd()) { RECT rect; GetClientRect(hWnd, &rect); HDWP hdwp = BeginDeferWindowPos(1); hdwp = DeferWindowPos(hdwp, g_handler->GetBrowserHwnd(), NULL, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER); EndDeferWindowPos(hdwp); } break; case WM_ERASEBKGND: if(g_handler.get() && g_handler->GetBrowserHwnd()) { // Dont erase the background if the browser window has been loaded // (this avoids flashing) return 0; } break; case WM_CLOSE: // All clients must forward the WM_CLOSE call to all contained browser // windows to give those windows a chance to cleanup before the window // closes. Don't forward this message if you are cancelling the request. if(g_handler.get()) { HWND hWnd = g_handler->GetBrowserHwnd(); if (hWnd) ::SendMessage(hWnd, WM_CLOSE, 0, 0); } break; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, message, wParam, lParam); }
// Callback for Debug > WebURLRequest... menu item. gboolean WebURLRequestActivated(GtkWidget* widget) { if (g_handler.get() && g_handler->GetBrowserHwnd()) RunWebURLRequestTest(g_handler->GetBrowser()); return FALSE; // Don't stop this message. }
// Callback for when you click the back button. void BackButtonClicked(GtkButton* button) { if (g_handler.get() && g_handler->GetBrowserHwnd()) g_handler->GetBrowser()->GoBack(); }
// Callback for Debug > HTML5 Video... menu item. gboolean HTML5VideoActivated(GtkWidget* widget) { if (g_handler.get() && g_handler->GetBrowserHwnd()) RunHTML5VideoTest(g_handler->GetBrowser()); return FALSE; // Don't stop this message. }
// Callback for Debug > Accelerated Layers:... menu item. gboolean AcceleratedLayersActivated(GtkWidget* widget) { if (g_handler.get() && g_handler->GetBrowserHwnd()) RunAcceleratedLayersTest(g_handler->GetBrowser()); return FALSE; // Don't stop this message. }
// Callback for Debug > JS Execute... menu item. gboolean JSExecuteActivated(GtkWidget* widget) { if (g_handler.get() && g_handler->GetBrowserHwnd()) RunJavaScriptExecuteTest(g_handler->GetBrowser()); return FALSE; // Don't stop this message. }
// Callback for when you click the forward button. void ForwardButtonClicked(GtkButton* button) { if (g_handler.get() && g_handler->GetBrowserHwnd()) g_handler->GetBrowser()->GoForward(); }
// Callback for Debug > Local Storage... menu item. gboolean LocalStorageActivated(GtkWidget* widget) { if (g_handler.get() && g_handler->GetBrowserHwnd()) RunLocalStorageTest(g_handler->GetBrowser()); return FALSE; // Don't stop this message. }
// Callback for when you click the stop button. void StopButtonClicked(GtkButton* button) { if (g_handler.get() && g_handler->GetBrowserHwnd()) g_handler->GetBrowser()->StopLoad(); }
static void trans_focus() { if(g_handler.get() && g_handler->GetBrowserHwnd()) { PostMessage(g_handler->GetBrowserHwnd(), WM_SETFOCUS, NULL, NULL); exec_js_str(L"try{ $('#search').select();}catch(e){}"); } }
// Callback for when you click the reload button. void ReloadButtonClicked(GtkButton* button) { if (g_handler.get() && g_handler->GetBrowserHwnd()) g_handler->GetBrowser()->Reload(); }
// // FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) // // PURPOSE: Processes messages for the main window. // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND backWnd = NULL, forwardWnd = NULL, reloadWnd = NULL, stopWnd = NULL, editWnd = NULL; static WNDPROC editWndOldProc = NULL; // Static members used for the find dialog. static FINDREPLACE fr; static WCHAR szFindWhat[80] = {0}; static WCHAR szLastFindWhat[80] = {0}; static bool findNext = false; static bool lastMatchCase = false; int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; if (hWnd == editWnd) { // Callback for the edit window switch (message) { case WM_CHAR: if (wParam == VK_RETURN && g_handler.get()) { // When the user hits the enter key load the URL CefRefPtr<CefBrowser> browser = g_handler->GetBrowser(); wchar_t strPtr[MAX_URL_LENGTH+1] = {0}; *((LPWORD)strPtr) = MAX_URL_LENGTH; LRESULT strLen = SendMessage(hWnd, EM_GETLINE, 0, (LPARAM)strPtr); if (strLen > 0) { strPtr[strLen] = 0; browser->GetMainFrame()->LoadURL(strPtr); } return 0; } } return (LRESULT)CallWindowProc(editWndOldProc, hWnd, message, wParam, lParam); } else if (message == uFindMsg) { // Find event. LPFINDREPLACE lpfr = (LPFINDREPLACE)lParam; if (lpfr->Flags & FR_DIALOGTERM) { // The find dialog box has been dismissed so invalidate the handle and // reset the search results. hFindDlg = NULL; if (g_handler.get()) { g_handler->GetBrowser()->StopFinding(true); szLastFindWhat[0] = 0; findNext = false; } return 0; } if ((lpfr->Flags & FR_FINDNEXT) && g_handler.get()) { // Search for the requested string. bool matchCase = (lpfr->Flags & FR_MATCHCASE?true:false); if (matchCase != lastMatchCase || (matchCase && wcsncmp(szFindWhat, szLastFindWhat, sizeof(szLastFindWhat)/sizeof(WCHAR)) != 0) || (!matchCase && _wcsnicmp(szFindWhat, szLastFindWhat, sizeof(szLastFindWhat)/sizeof(WCHAR)) != 0)) { // The search string has changed, so reset the search results. if (szLastFindWhat[0] != 0) { g_handler->GetBrowser()->StopFinding(true); findNext = false; } lastMatchCase = matchCase; wcscpy(szLastFindWhat, szFindWhat); //wcscpy_s(szLastFindWhat, sizeof(szLastFindWhat)/sizeof(WCHAR), szFindWhat); } g_handler->GetBrowser()->Find(0, lpfr->lpstrFindWhat, (lpfr->Flags & FR_DOWN)?true:false, matchCase, findNext); if (!findNext) findNext = true; } return 0; } else { // Callback for the main window switch (message) { case WM_CREATE: { // Create the single static handler class instance g_handler = new ClientHandler(); g_handler->SetMainHwnd(hWnd); // Create the child windows used for navigation RECT rect; int x = 0; GetClientRect(hWnd, &rect); backWnd = CreateWindow(L"BUTTON", L"Back", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_DISABLED, x, 0, BUTTON_WIDTH, URLBAR_HEIGHT, hWnd, (HMENU) IDC_NAV_BACK, hInst, 0); x += BUTTON_WIDTH; forwardWnd = CreateWindow(L"BUTTON", L"Forward", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_DISABLED, x, 0, BUTTON_WIDTH, URLBAR_HEIGHT, hWnd, (HMENU) IDC_NAV_FORWARD, hInst, 0); x += BUTTON_WIDTH; reloadWnd = CreateWindow(L"BUTTON", L"Reload", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_DISABLED, x, 0, BUTTON_WIDTH, URLBAR_HEIGHT, hWnd, (HMENU) IDC_NAV_RELOAD, hInst, 0); x += BUTTON_WIDTH; stopWnd = CreateWindow(L"BUTTON", L"Stop", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_DISABLED, x, 0, BUTTON_WIDTH, URLBAR_HEIGHT, hWnd, (HMENU) IDC_NAV_STOP, hInst, 0); x += BUTTON_WIDTH; editWnd = CreateWindow(L"EDIT", 0, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOVSCROLL | ES_AUTOHSCROLL| WS_DISABLED, x, 0, rect.right - BUTTON_WIDTH * 4, URLBAR_HEIGHT, hWnd, 0, hInst, 0); // Assign the edit window's WNDPROC to this function so that we can // capture the enter key editWndOldProc = reinterpret_cast<WNDPROC>(GetWindowLongPtr(editWnd, GWLP_WNDPROC)); SetWindowLongPtr(editWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(WndProc)); g_handler->SetEditHwnd(editWnd); g_handler->SetButtonHwnds(backWnd, forwardWnd, reloadWnd, stopWnd); rect.top += URLBAR_HEIGHT; CefWindowInfo info; CefBrowserSettings settings; // Populate the settings based on command line arguments. AppGetBrowserSettings(settings); // Initialize window info to the defaults for a child window info.SetAsChild(hWnd, rect); // Creat the new child browser window CefBrowser::CreateBrowser(info, static_cast<CefRefPtr<CefClient> >(g_handler), g_handler->GetStartupURL(), settings); return 0; } case WM_COMMAND: { CefRefPtr<CefBrowser> browser; if (g_handler.get()) browser = g_handler->GetBrowser(); wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); return 0; case IDM_EXIT: DestroyWindow(hWnd); return 0; case ID_WARN_CONSOLEMESSAGE: if (g_handler.get()) { std::wstringstream ss; ss << L"Console messages will be written to " << std::wstring(CefString(g_handler->GetLogFile())); MessageBox(hWnd, ss.str().c_str(), L"Console Messages", MB_OK | MB_ICONINFORMATION); } return 0; case ID_WARN_DOWNLOADCOMPLETE: case ID_WARN_DOWNLOADERROR: /* if (g_handler.get()) { std::wstringstream ss; ss << L"File \"" << std::wstring(CefString(g_handler->GetLastDownloadFile())) << L"\" "; if (wmId == ID_WARN_DOWNLOADCOMPLETE) ss << L"downloaded successfully."; else ss << L"failed to download."; MessageBox(hWnd, ss.str().c_str(), L"File Download", MB_OK | MB_ICONINFORMATION); } */ return 0; case ID_FIND: if (!hFindDlg) { // Create the find dialog. ZeroMemory(&fr, sizeof(fr)); fr.lStructSize = sizeof(fr); fr.hwndOwner = hWnd; fr.lpstrFindWhat = szFindWhat; fr.wFindWhatLen = sizeof(szFindWhat); fr.Flags = FR_HIDEWHOLEWORD | FR_DOWN; hFindDlg = FindText(&fr); } else { // Give focus to the existing find dialog. ::SetFocus(hFindDlg); } return 0; case ID_PRINT: if (browser.get()) browser->GetMainFrame()->Print(); return 0; case IDC_NAV_BACK: // Back button if (browser.get()) browser->GoBack(); return 0; case IDC_NAV_FORWARD: // Forward button if (browser.get()) browser->GoForward(); return 0; case IDC_NAV_RELOAD: // Reload button if (browser.get()) browser->Reload(); return 0; case IDC_NAV_STOP: // Stop button if (browser.get()) browser->StopLoad(); return 0; case ID_TESTS_GETSOURCE: // Test the GetSource function if (browser.get()) RunGetSourceTest(browser); return 0; case ID_TESTS_GETTEXT: // Test the GetText function if (browser.get()) RunGetTextTest(browser); return 0; case ID_TESTS_JAVASCRIPT_BINDING: // Test the V8 binding handler if (browser.get()) RunBindingTest(browser); return 0; case ID_TESTS_JAVASCRIPT_EXTENSION: // Test the V8 extension handler if (browser.get()) RunExtensionTest(browser); return 0; case ID_TESTS_JAVASCRIPT_PERFORMANCE: // Test the V8 performance if (browser.get()) RunExtensionPerfTest(browser); return 0; case ID_TESTS_JAVASCRIPT_EXECUTE: // Test execution of javascript if (browser.get()) RunJavaScriptExecuteTest(browser); return 0; case ID_TESTS_JAVASCRIPT_INVOKE: if (browser.get()) RunJavaScriptInvokeTest(browser); return 0; case ID_TESTS_PLUGIN: // Test the custom plugin //if (browser.get()) // RunPluginTest(browser); return 0; case ID_TESTS_PLUGIN_INFO: // Test plugin info if (browser.get()) RunPluginInfoTest(browser); return 0; case ID_TESTS_POPUP: // Test a popup window if (browser.get()) RunPopupTest(browser); return 0; case ID_TESTS_TRANSPARENT_POPUP: // Test a transparent popup window if (browser.get()) RunTransparentPopupTest(browser); return 0; case ID_TESTS_REQUEST: // Test a request if (browser.get()) RunRequestTest(browser); return 0; case ID_TESTS_SCHEME_HANDLER: // Test the scheme handler if (browser.get()) RunSchemeTest(browser); return 0; case ID_TESTS_UIAPP: // Test the UI app //if (browser.get()) // RunUIPluginTest(browser); return 0; case ID_TESTS_OSRAPP: // Test the OSR app //if (browser.get()) //RunOSRPluginTest(browser, false); return 0; case ID_TESTS_TRANSPARENT_OSRAPP: // Test the OSR app with transparency //if (browser.get()) // RunOSRPluginTest(browser, true); return 0; case ID_TESTS_DOMACCESS: // Test DOM access if (browser.get()) RunDOMAccessTest(browser); return 0; case ID_TESTS_LOCALSTORAGE: // Test localStorage if (browser.get()) RunLocalStorageTest(browser); return 0; case ID_TESTS_ACCELERATED2DCANVAS: // Test accelerated 2d canvas if (browser.get()) RunAccelerated2DCanvasTest(browser); return 0; case ID_TESTS_ACCELERATEDLAYERS: // Test accelerated layers if (browser.get()) RunAcceleratedLayersTest(browser); return 0; case ID_TESTS_WEBGL: // Test WebGL if (browser.get()) RunWebGLTest(browser); return 0; case ID_TESTS_DRAGDROP: // Test drag & drop if (browser.get()) RunDragDropTest(browser); return 0; case ID_TESTS_GEOLOCATION: // Test geolocation if (browser.get()) RunGeolocationTest(browser); return 0; case ID_TESTS_XMLHTTPREQUEST: // Test XMLHttpRequest if (browser.get()) RunXMLHTTPRequestTest(browser); return 0; case ID_TESTS_WEBURLREQUEST: if (browser.get()) RunWebURLRequestTest(browser); return 0; case ID_TESTS_ZOOM_IN: if (browser.get()) browser->SetZoomLevel(browser->GetZoomLevel() + 0.5); return 0; case ID_TESTS_ZOOM_OUT: if (browser.get()) browser->SetZoomLevel(browser->GetZoomLevel() - 0.5); return 0; case ID_TESTS_ZOOM_RESET: if (browser.get()) browser->SetZoomLevel(0.0); return 0; case ID_TESTS_DEVTOOLS_SHOW: if (browser.get()) browser->ShowDevTools(); return 0; case ID_TESTS_DEVTOOLS_CLOSE: if (browser.get()) browser->CloseDevTools(); return 0; case ID_TESTS_MODALDIALOG: if (browser.get()) RunModalDialogTest(browser); return 0; case ID_TESTS_GETIMAGE: if (browser.get()) RunGetImageTest(browser); return 0; } break; } case WM_PAINT: hdc = BeginPaint(hWnd, &ps); EndPaint(hWnd, &ps); return 0; case WM_SETFOCUS: if (g_handler.get() && g_handler->GetBrowserHwnd()) { // Pass focus to the browser window PostMessage(g_handler->GetBrowserHwnd(), WM_SETFOCUS, wParam, NULL); } return 0; case WM_SIZE: if (g_handler.get() && g_handler->GetBrowserHwnd()) { // Resize the browser window and address bar to match the new frame // window size RECT rect; GetClientRect(hWnd, &rect); rect.top += URLBAR_HEIGHT; int urloffset = rect.left + BUTTON_WIDTH * 4; HDWP hdwp = BeginDeferWindowPos(1); hdwp = DeferWindowPos(hdwp, editWnd, NULL, urloffset, 0, rect.right - urloffset, URLBAR_HEIGHT, SWP_NOZORDER); hdwp = DeferWindowPos(hdwp, g_handler->GetBrowserHwnd(), NULL, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER); EndDeferWindowPos(hdwp); } break; case WM_ERASEBKGND: if (g_handler.get() && g_handler->GetBrowserHwnd()) { // Dont erase the background if the browser window has been loaded // (this avoids flashing) return 0; } break; case WM_CLOSE: if (g_handler.get()) { CefRefPtr<CefBrowser> browser = g_handler->GetBrowser(); if (browser.get()) { // Let the browser window know we are about to destroy it. browser->ParentWindowWillClose(); } } break; case WM_DESTROY: // The frame window has exited PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, message, wParam, lParam); } }
// Callback for Debug > Performance Tests... menu item. gboolean PerformanceActivated(GtkWidget* widget) { if (g_handler.get() && g_handler->GetBrowserHwnd()) performance_test::RunTest(g_handler->GetBrowser()); return FALSE; // Don't stop this message. }