nsresult AppCallbacks::CreateBrowserWindow(uint32_t aChromeFlags, nsIWebBrowserChrome *aParent, nsIWebBrowserChrome **aNewWindow) { WebBrowserChrome * chrome = new WebBrowserChrome(); if (!chrome) return NS_ERROR_FAILURE; // the interface to return and one addref, which we assume will be // immediately released CallQueryInterface(static_cast<nsIWebBrowserChrome*>(chrome), aNewWindow); // now an extra addref; the window owns itself (to be released by // WebBrowserChromeUI::Destroy) NS_ADDREF(*aNewWindow); chrome->SetChromeFlags(aChromeFlags); chrome->SetParent(aParent); // Insert the browser nsCOMPtr<nsIWebBrowser> newBrowser; chrome->CreateBrowser(-1, -1, -1, -1, getter_AddRefs(newBrowser)); if (!newBrowser) return NS_ERROR_FAILURE; // Place it where we want it. ResizeEmbedding(static_cast<nsIWebBrowserChrome*>(chrome)); // if opened as chrome, it'll be made visible after the chrome has loaded. // otherwise, go ahead and show it now. if (!(aChromeFlags & nsIWebBrowserChrome::CHROME_OPENAS_CHROME)) WebBrowserChromeUI::ShowWindow(*aNewWindow, true); return NS_OK; }
// // FUNCTION: BrowserWndProc(HWND, unsigned, WORD, LONG) // // PURPOSE: Processes messages for the browser container window. // LRESULT CALLBACK BrowserWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { nsIWebBrowserChrome *chrome = (nsIWebBrowserChrome *) GetWindowLong(hWnd, GWL_USERDATA); switch (message) { case WM_SIZE: // Resize the embedded browser ResizeEmbedding(chrome); return 0; case WM_ERASEBKGND: // Reduce flicker by not painting the non-visible background return 1; } return DefWindowProc(hWnd, message, wParam, lParam); }