int StActiveXCtrl::OnCreate(LPCREATESTRUCT theCreateStruct) { myBackBrush.CreateSolidBrush(RGB(0, 0, 0)); if(COleControl::OnCreate(theCreateStruct) == -1) { return -1; } const StString ST_ASTERIX = '*'; StMIME aMime(StString(myMimeType), ST_ASTERIX, ST_ASTERIX); myOpenInfo.setMIME(aMime); StArgumentsMap aDrawerArgs; const StString ST_SETTING_SRCFORMAT = stCString("srcFormat"); const StString ST_SETTING_COMPRESS = stCString("toCompress"); const StString ST_SETTING_ESCAPENOQUIT = stCString("escNoQuit"); const StMIME ST_MIME_X_JPS("image/x-jps", ST_ASTERIX, ST_ASTERIX); const StMIME ST_MIME_JPS ("image/jps", ST_ASTERIX, ST_ASTERIX); const StMIME ST_MIME_X_PNS("image/x-pns", ST_ASTERIX, ST_ASTERIX); const StMIME ST_MIME_PNS ("image/pns", ST_ASTERIX, ST_ASTERIX); StArgument anArgSrcFormat = aDrawerArgs[ST_SETTING_SRCFORMAT]; if(!anArgSrcFormat.isValid()) { anArgSrcFormat.setKey(ST_SETTING_SRCFORMAT); if(aMime == ST_MIME_X_JPS || aMime == ST_MIME_JPS || aMime == ST_MIME_X_PNS || aMime == ST_MIME_PNS) { anArgSrcFormat.setValue(st::formatToString(StFormat_SideBySide_RL)); aDrawerArgs.add(anArgSrcFormat); } } aDrawerArgs.add(StArgument(ST_SETTING_COMPRESS, "true")); // optimize memory usage aDrawerArgs.add(StArgument(ST_SETTING_ESCAPENOQUIT, "true")); // do not close plugin instance by Escape key myOpenInfo.setArgumentsMap(aDrawerArgs); // set window myParentWin = m_hWnd; // starts out plugin main loop in another thread myThread = new StThread(stThreadFunction, (void* )this, "StActiveXCtrl"); // load URL StString aFilePath = loadURL(myHasPreview ? myUrlPreview : myUrlFull); if(aFilePath.isEmpty()) { if(!myHasPreview) { return 0; } if(myHasPreview) { // if we have 2 URLs - try to load another one aFilePath = loadURL(myUrlFull); if(aFilePath.isEmpty()) { return 0; } myHasPreview = false; } } myOpenInfo.setPath(aFilePath); myOpenEvent.set(); return 0; }
// NoOverflowInIncrementVisuallyNonEmptyPixelCount tests fail if the number of // pixels is calculated in 32-bit integer, because 65536 * 65536 would become 0 // if it was calculated in 32-bit and thus it would be considered as empty. TEST_F(WebMeaningfulLayoutsTest, NoOverflowInIncrementVisuallyNonEmptyPixelCount) { SimRequest mainResource("https://example.com/test.html", "text/html"); SimRequest svgResource("https://example.com/test.svg", "image/svg+xml"); loadURL("https://example.com/test.html"); mainResource.start(); mainResource.write("<DOCTYPE html><body><img src=\"test.svg\">"); // Run pending tasks to initiate the request to test.svg. testing::runPendingTasks(); EXPECT_EQ(0, webViewClient().visuallyNonEmptyLayoutCount()); // We serve the SVG file and check visuallyNonEmptyLayoutCount() before // mainResource.finish() because finishing the main resource causes // |FrameView::m_isVisuallyNonEmpty| to be true and // visuallyNonEmptyLayoutCount() to be 1 irrespective of the SVG sizes. svgResource.start(); svgResource.write( "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"65536\" " "width=\"65536\"></svg>"); svgResource.finish(); compositor().beginFrame(); EXPECT_EQ(1, webViewClient().visuallyNonEmptyLayoutCount()); mainResource.finish(); }
TEST_F(WebMeaningfulLayoutsTest, WithIFrames) { SimRequest mainResource("https://example.com/index.html", "text/html"); SimRequest iframeResource("https://example.com/iframe.html", "text/html"); loadURL("https://example.com/index.html"); mainResource.complete("<iframe src=iframe.html></iframe>"); compositor().beginFrame(); EXPECT_EQ(1, webViewClient().visuallyNonEmptyLayoutCount()); EXPECT_EQ(1, webViewClient().finishedParsingLayoutCount()); EXPECT_EQ(0, webViewClient().finishedLoadingLayoutCount()); iframeResource.complete("iframe data"); // Pump the message loop to process the iframe loading task. testing::runPendingTasks(); compositor().beginFrame(); EXPECT_EQ(1, webViewClient().visuallyNonEmptyLayoutCount()); EXPECT_EQ(1, webViewClient().finishedParsingLayoutCount()); EXPECT_EQ(1, webViewClient().finishedLoadingLayoutCount()); }
TEST_F(WebMeaningfulLayoutsTest, FinishedParsingThenLoading) { SimRequest mainResource("https://example.com/index.html", "text/html"); SimRequest imageResource("https://example.com/cat.png", "image/png"); loadURL("https://example.com/index.html"); mainResource.start(); mainResource.write("<img src=cat.png>"); mainResource.finish(); compositor().beginFrame(); EXPECT_TRUE(webViewClient().hadFinishedParsingLayout()); EXPECT_FALSE(webViewClient().hadFinishedLoadingLayout()); imageResource.complete("image data"); // Pump the message loop to process the image loading task. testing::runPendingTasks(); compositor().beginFrame(); EXPECT_TRUE(webViewClient().hadFinishedLoadingLayout()); }
HRESULT MiniBrowserWebHost::updateAddressBar(IWebView& webView) { IWebFramePtr mainFrame; HRESULT hr = webView.mainFrame(&mainFrame.GetInterfacePtr()); if (FAILED(hr)) return hr; IWebDataSourcePtr dataSource; hr = mainFrame->dataSource(&dataSource.GetInterfacePtr()); if (FAILED(hr) || !dataSource) hr = mainFrame->provisionalDataSource(&dataSource.GetInterfacePtr()); if (FAILED(hr) || !dataSource) return hr; IWebMutableURLRequestPtr request; hr = dataSource->request(&request.GetInterfacePtr()); if (FAILED(hr) || !request) return hr; _bstr_t frameURL; hr = request->mainDocumentURL(frameURL.GetAddress()); if (FAILED(hr)) return hr; if (frameURL.length()) { m_client->pageLoadTestClient().setPageURL(frameURL); m_client->pageLoadTestClient().didCommitLoad(); } loadURL(frameURL); return S_OK; }
TEST_F(WebMeaningfulLayoutsTest, VisuallyNonEmptyTextCharactersEventually) { SimRequest mainResource("https://example.com/index.html", "text/html"); loadURL("https://example.com/index.html"); mainResource.start(); // Write 200 characters. const char* tenCharacters = "0123456789"; for (int i = 0; i < 20; ++i) mainResource.write(tenCharacters); // Pump a frame mid-load. compositor().beginFrame(); EXPECT_FALSE(webViewClient().hadVisuallyNonEmptyLayout()); // Write more than 200 characters. mainResource.write("!"); mainResource.finish(); // setting visually non-empty happens when the parsing finishes, // not as the character count goes over 200. compositor().beginFrame(); EXPECT_TRUE(webViewClient().hadVisuallyNonEmptyLayout()); }
TEST_F(WebMeaningfulLayoutsTest, VisuallyNonEmptyMissingPump) { SimRequest mainResource("https://example.com/index.html", "text/html"); loadURL("https://example.com/index.html"); mainResource.start(); // Write <200 characters. mainResource.write("less than 200 characters."); compositor().beginFrame(); mainResource.finish(); // Even though the layout state is clean ... EXPECT_TRUE(document().lifecycle().state() >= DocumentLifecycle::LayoutClean); // We should still generate a request for another (possibly last) frame. EXPECT_TRUE(compositor().needsAnimate()); // ... which we (the scheduler) happily provide. compositor().beginFrame(); // ... which correctly signals the VisuallyNonEmpty. EXPECT_TRUE(webViewClient().hadVisuallyNonEmptyLayout()); }
void Win32WebControl::loadFile(const std::string &filePath) const { HGLOBAL unicodeStr = globalAllocWstringFromString(filePath); if (unicodeStr != NULL) { loadURL(std::wstring((WCHAR *)unicodeStr)); GlobalFree(unicodeStr); } }
AnimClip::AnimClip(const QString& id, const QString& url, float startFrame, float endFrame, float timeScale, bool loopFlag) : AnimNode(AnimNode::Type::Clip, id), _startFrame(startFrame), _endFrame(endFrame), _timeScale(timeScale), _loopFlag(loopFlag), _frame(startFrame) { loadURL(url); }
LRESULT StActiveXCtrl::WindowProc(UINT theMsg, WPARAM theParamW, LPARAM theParamL) { // Special case for WM_INITMENUPOPUP event. // Standard implementation of COleControl::WindowProc does not find handlers for popup menu items created // by plugin and disables them if(theMsg == WM_INITMENUPOPUP) { return 0; } else if(theMsg == WM_ERASEBKGND) { return 1; } else if(theMsg == WM_PAINT) { if(!myIsActive) { PAINTSTRUCT aPaintStruct; CDC* aDevCtx = BeginPaint(&aPaintStruct); FillRect(aDevCtx->GetSafeHdc(), &aPaintStruct.rcPaint, myBackBrush); EndPaint(&aPaintStruct); } return 0; } // use fake WM_TIMER event to switch between fullscreen / windowed image in correct thread if(theMsg == WM_TIMER && myHasPreview) { if(theParamW == 1) { const StString aFilePath = loadURL(myUrlFull); if(!aFilePath.isEmpty()) { myOpenInfo.setPath(aFilePath); myOpenEvent.set(); } else { // don't try to load broken URL anymore myHasPreview = false; } } else if(theParamW == 0) { const StString aFilePath = loadURL(myUrlPreview); if(!aFilePath.isEmpty()) { myOpenInfo.setPath(aFilePath); myOpenEvent.set(); } else { // don't try to load broken URL anymore myHasPreview = false; } } } return COleControl::WindowProc(theMsg, theParamW, theParamL); }
TEST_F(WebMeaningfulLayoutsTest, FinishedParsing) { SimRequest mainResource("https://example.com/index.html", "text/html"); loadURL("https://example.com/index.html"); mainResource.complete("content"); compositor().beginFrame(); EXPECT_EQ(1, webViewClient().finishedParsingLayoutCount()); }
void ComsumeController::startWebView() { auto visibleSize = Director::getInstance()->getVisibleSize(); auto webView = cocos2d::experimental::ui::WebView::create(); webView->setAnchorPoint(Point(0.5f, 0.5f)); webView->setContentSize(Size(visibleSize.width * 0.5f, visibleSize.height * 0.75f)); webView->setPosition(Vec2(visibleSize.width / 2, (visibleSize.height / 2))); webView->loadURL(com_uri_ext); this->addChild(webView, 1); }
void ReserveRetunrHomeController::startWebView() { auto visibleSize = Director::getInstance()->getVisibleSize(); auto webView = cocos2d::experimental::ui::WebView::create(); webView->setAnchorPoint(Point(0.5f, 0.5f)); webView->setContentSize(Size(visibleSize.width * 0.5f, visibleSize.height * 0.75f)); webView->setPosition(Vec2(visibleSize.width / 2, (visibleSize.height / 2))); webView->loadURL("https://www.daiwahouse.co.jp/smp/business/kenchiku/script/regist_kenchiku.asp?ken_toi_kbn=3"); this->addChild(webView, 1); }
void BerkeliumWidget::setPropertyOverride(const std::string& _key, const std::string& _value) { if (_key == "SourceURL") loadURL(_value); else { Base::setPropertyOverride(_key, _value); return; } eventChangeProperty(this, _key, _value); }
TEST_F(WebMeaningfulLayoutsTest, FinishedLoading) { SimRequest mainResource("https://example.com/index.html", "text/html"); loadURL("https://example.com/index.html"); mainResource.start(); mainResource.write("content"); mainResource.finish(); compositor().beginFrame(); EXPECT_TRUE(webViewClient().hadFinishedLoadingLayout()); }
LRESULT CALLBACK EditProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CHAR: if (wParam == 13) { // Enter Key wchar_t strPtr[INTERNET_MAX_URL_LENGTH]; *((LPWORD)strPtr) = INTERNET_MAX_URL_LENGTH; int strLen = SendMessage(hDlg, EM_GETLINE, 0, (LPARAM)strPtr); strPtr[strLen] = 0; _bstr_t bstr(strPtr); loadURL(bstr.GetBSTR()); return 0; } default: return CallWindowProc(DefEditProc, hDlg, message, wParam, lParam); } }
TEST_F(WebMeaningfulLayoutsTest, VisuallyNonEmptyTextCharacters) { SimRequest mainResource("https://example.com/index.html", "text/html"); loadURL("https://example.com/index.html"); mainResource.start(); // Write 201 characters. const char* tenCharacters = "0123456789"; for (int i = 0; i < 20; ++i) mainResource.write(tenCharacters); mainResource.write("!"); mainResource.finish(); compositor().beginFrame(); EXPECT_EQ(1, webViewClient().visuallyNonEmptyLayoutCount()); }
TEST_F(IntersectionObserverTest, ObserveSchedulesFrame) { SimRequest mainResource("https://example.com/", "text/html"); loadURL("https://example.com/"); mainResource.complete("<div id='target'></div>"); IntersectionObserverInit observerInit; TrackExceptionState exceptionState; TestIntersectionObserverCallback* observerCallback = new TestIntersectionObserverCallback(document()); IntersectionObserver* observer = IntersectionObserver::create( observerInit, *observerCallback, exceptionState); ASSERT_FALSE(exceptionState.hadException()); compositor().beginFrame(); ASSERT_FALSE(compositor().needsBeginFrame()); EXPECT_TRUE(observer->takeRecords(exceptionState).isEmpty()); EXPECT_EQ(observerCallback->callCount(), 0); Element* target = document().getElementById("target"); ASSERT_TRUE(target); observer->observe(target, exceptionState); EXPECT_TRUE(compositor().needsBeginFrame()); }
LRESULT CALLBACK MyEditProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CHAR: if( wParam == 13 ) { // Enter Key wchar_t strPtr[MAX_URL_LENGTH]; *((LPWORD)strPtr) = MAX_URL_LENGTH; int strLen = SendMessage(hDlg, EM_GETLINE, 0, (LPARAM)strPtr); BSTR bstr = SysAllocStringLen(strPtr, strLen); loadURL(bstr); SysFreeString(bstr); return 0; } else return (LRESULT)CallWindowProc((WNDPROC)DefEditProc,hDlg,message,wParam,lParam); break; default: return (LRESULT)CallWindowProc((WNDPROC)DefEditProc,hDlg,message,wParam,lParam); break; } return 0; }
bool NetscapePlugin::initialize(PluginController* pluginController, const Parameters& parameters) { ASSERT(!m_pluginController); ASSERT(pluginController); m_pluginController = pluginController; uint16_t mode = parameters.loadManually ? NP_FULL : NP_EMBED; m_loadManually = parameters.loadManually; CString mimeTypeCString = parameters.mimeType.utf8(); ASSERT(parameters.names.size() == parameters.values.size()); Vector<CString> paramNames; Vector<CString> paramValues; for (size_t i = 0; i < parameters.names.size(); ++i) { paramNames.append(parameters.names[i].utf8()); paramValues.append(parameters.values[i].utf8()); } // The strings that these pointers point to are kept alive by paramNames and paramValues. Vector<const char*> names; Vector<const char*> values; for (size_t i = 0; i < paramNames.size(); ++i) { names.append(paramNames[i].data()); values.append(paramValues[i].data()); } #if PLATFORM(MAC) if (m_pluginModule->pluginQuirks().contains(PluginQuirks::MakeTransparentIfBackgroundAttributeExists)) { for (size_t i = 0; i < parameters.names.size(); ++i) { if (equalIgnoringCase(parameters.names[i], "background")) { setIsTransparent(true); break; } } } #endif NetscapePlugin* previousNPPNewPlugin = currentNPPNewPlugin; m_inNPPNew = true; currentNPPNewPlugin = this; NPError error = NPP_New(const_cast<char*>(mimeTypeCString.data()), mode, names.size(), const_cast<char**>(names.data()), const_cast<char**>(values.data()), 0); m_inNPPNew = false; currentNPPNewPlugin = previousNPPNewPlugin; if (error != NPERR_NO_ERROR) return false; m_isStarted = true; // FIXME: This is not correct in all cases. m_npWindow.type = NPWindowTypeDrawable; if (!platformPostInitialize()) { destroy(); return false; } // Load the src URL if needed. if (!parameters.loadManually && !parameters.url.isEmpty() && shouldLoadSrcURL()) loadURL("GET", parameters.url.string(), String(), HTTPHeaderMap(), Vector<uint8_t>(), false, 0); return true; }
bool NetscapePlugin::initialize(const Parameters& parameters) { uint16_t mode = parameters.isFullFramePlugin ? NP_FULL : NP_EMBED; m_shouldUseManualLoader = parameters.shouldUseManualLoader; CString mimeTypeCString = parameters.mimeType.utf8(); ASSERT(parameters.names.size() == parameters.values.size()); Vector<CString> paramNames; Vector<CString> paramValues; for (size_t i = 0; i < parameters.names.size(); ++i) { String parameterName = parameters.names[i]; #if PLUGIN_ARCHITECTURE(MAC) if (m_pluginModule->pluginQuirks().contains(PluginQuirks::WantsLowercaseParameterNames)) parameterName = parameterName.lower(); #endif paramNames.append(parameterName.utf8()); paramValues.append(parameters.values[i].utf8()); } // The strings that these pointers point to are kept alive by paramNames and paramValues. Vector<const char*> names; Vector<const char*> values; for (size_t i = 0; i < paramNames.size(); ++i) { names.append(paramNames[i].data()); values.append(paramValues[i].data()); } #if PLUGIN_ARCHITECTURE(MAC) if (m_pluginModule->pluginQuirks().contains(PluginQuirks::MakeOpaqueUnlessTransparentSilverlightBackgroundAttributeExists)) { for (size_t i = 0; i < parameters.names.size(); ++i) { if (equalIgnoringCase(parameters.names[i], "background")) { setIsTransparent(isTransparentSilverlightBackgroundValue(parameters.values[i].lower())); break; } } } m_layerHostingMode = parameters.layerHostingMode; #endif platformPreInitialize(); NetscapePlugin* previousNPPNewPlugin = currentNPPNewPlugin; m_inNPPNew = true; currentNPPNewPlugin = this; NPError error = NPP_New(const_cast<char*>(mimeTypeCString.data()), mode, names.size(), const_cast<char**>(names.data()), const_cast<char**>(values.data()), 0); m_inNPPNew = false; currentNPPNewPlugin = previousNPPNewPlugin; if (error != NPERR_NO_ERROR) return false; m_isStarted = true; // FIXME: This is not correct in all cases. m_npWindow.type = NPWindowTypeDrawable; if (!platformPostInitialize()) { destroy(); return false; } // Load the src URL if needed. if (!parameters.shouldUseManualLoader && !parameters.url.isEmpty() && shouldLoadSrcURL()) loadURL("GET", parameters.url.string(), String(), HTTPHeaderMap(), Vector<uint8_t>(), false, 0); return true; }
void Win32WebControl::evaluateJS(const std::string &js) const { std::string url("javascript:"); url.append(js); loadURL(url); }
HRESULT STDMETHODCALLTYPE Win32WebControl::Invoke( DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) { if (!IsEqualIID(riid, IID_NULL)) // riid should always be IID_NULL { return DISP_E_UNKNOWNINTERFACE; } switch (dispIdMember) { case DISPID_COMMANDSTATECHANGE: if (pDispParams != NULL && pDispParams->cArgs == 2) { const VARIANTARG *rgvarg = pDispParams->rgvarg; if (rgvarg[0].vt == VT_BOOL && rgvarg[1].vt == VT_I4) { switch (rgvarg[1].intVal) { case CSC_NAVIGATEFORWARD: _goForwardEnabled = (rgvarg[0].boolVal != VARIANT_FALSE); // VARIANT_TRUE is -1 return S_OK; case CSC_NAVIGATEBACK: _goBackEnabled = (rgvarg[0].boolVal != VARIANT_FALSE); // VARIANT_TRUE is -1 return S_OK; default: break; } } } break; case DISPID_BEFORENAVIGATE2: if (pDispParams != NULL && pDispParams->cArgs == 7) { VARIANTARG *rgvarg = pDispParams->rgvarg; if (rgvarg[6].vt == VT_DISPATCH && rgvarg[6].pdispVal == _webBrowser2) { if (rgvarg[0].vt == (VT_BYREF | VT_BOOL) && rgvarg[5].vt == (VT_BYREF | VT_VARIANT)) { VARIANT_BOOL *cancel = rgvarg[0].pboolVal; BSTR url = rgvarg[5].pvarVal->bstrVal; *cancel = VARIANT_FALSE; if (isUrlJs(url)) { if (_onJsCallback != nullptr) { _onJsCallback(bstr2string(url + 11)); // skip the prefix `javascript' } } else { if (_shouldStartLoading != nullptr) { *cancel = _shouldStartLoading(bstr2string(url)) ? VARIANT_FALSE : VARIANT_TRUE; // VARIANT_TRUE is -1 } } return S_OK; } } } break; case DISPID_DOCUMENTCOMPLETE: if (pDispParams != NULL && pDispParams->cArgs == 2) { const VARIANTARG *rgvarg = pDispParams->rgvarg; if (rgvarg[1].vt == VT_DISPATCH && rgvarg[1].pdispVal == _webBrowser2 && rgvarg[0].vt == (VT_BYREF | VT_VARIANT)) { READYSTATE state; if (SUCCEEDED(_webBrowser2->get_ReadyState(&state)) && state == READYSTATE_COMPLETE) { BSTR url = rgvarg[0].pvarVal->bstrVal; if (_didFinishLoading != nullptr && !isUrlJs(url)) // ignore js { _didFinishLoading(bstr2string(url)); } if (!_htmlWillLoad.empty()) { _loadHTMLString(_htmlWillLoad); _htmlWillLoad.clear(); } return S_OK; } } } break; case DISPID_NAVIGATECOMPLETE2: if (pDispParams != NULL && pDispParams->cArgs == 2) { const VARIANTARG *rgvarg = pDispParams->rgvarg; if (rgvarg[1].vt == VT_DISPATCH && rgvarg[1].pdispVal == _webBrowser2) { if (rgvarg[0].vt == (VT_BYREF | VT_VARIANT)) { BSTR url = rgvarg[0].pvarVal->bstrVal; return S_OK; } } } break; case DISPID_NAVIGATEERROR: if (pDispParams != NULL && pDispParams->cArgs == 5) { const VARIANTARG *rgvarg = pDispParams->rgvarg; if (rgvarg[4].vt == VT_DISPATCH && rgvarg[4].pdispVal == _webBrowser2) { if (rgvarg[3].vt == (VT_BYREF | VT_VARIANT) && rgvarg[1].vt == (VT_BYREF | VT_VARIANT) && rgvarg[0].vt == (VT_BYREF | VT_BOOL)) { VARIANT_BOOL *cancel = rgvarg[0].pboolVal; HRESULT codes = rgvarg[1].pvarVal->lVal; BSTR url = rgvarg[3].pvarVal->bstrVal; if (_didFailLoading != nullptr && !isUrlJs(url)) // ignore js { _didFailLoading(bstr2string(url)); } *cancel = VARIANT_FALSE; return S_OK; } } } break; case DISPID_PROGRESSCHANGE: if (pDispParams != NULL && pDispParams->cArgs == 2) { const VARIANTARG *rgvarg = pDispParams->rgvarg; if (rgvarg[0].vt == VT_I4 && rgvarg[1].vt == VT_I4) { LONG maxProgress = rgvarg[0].lVal; LONG curProgress = rgvarg[1].lVal; return S_OK; } } break; case DISPID_NEWWINDOW2: if (pDispParams != NULL && pDispParams->cArgs == 2) { const VARIANTARG *rgvarg = pDispParams->rgvarg; if (rgvarg[0].vt == (VT_BYREF | VT_BOOL) && rgvarg[1].vt == (VT_BYREF | VT_DISPATCH)) { VARIANT_BOOL *cancel = rgvarg[0].pboolVal; IDispatch **dis = rgvarg[1].ppdispVal; *dis = NULL; *cancel = VARIANT_TRUE; // forbit to create new window return S_OK; } } break; case DISPID_NEWWINDOW3: if (pDispParams != NULL && pDispParams->cArgs == 5) { const VARIANTARG *rgvarg = pDispParams->rgvarg; if (rgvarg[0].vt == VT_BSTR && rgvarg[1].vt == VT_BSTR && rgvarg[2].vt == VT_I4 && rgvarg[3].vt == (VT_BYREF | VT_BOOL) && rgvarg[4].vt == (VT_BYREF | VT_DISPATCH)) { BSTR url = rgvarg[0].bstrVal; BSTR urlContext = rgvarg[1].bstrVal; LONG flags = rgvarg[2].lVal; VARIANT_BOOL *cancel = rgvarg[3].pboolVal; IDispatch **dis = rgvarg[4].ppdispVal; *dis = NULL; *cancel = VARIANT_TRUE; // forbit to create new window loadURL(url); return S_OK; } } break; default: break; } return E_NOTIMPL; }
bool NetscapePlugin::initialize(const Parameters& parameters) { uint16_t mode = parameters.isFullFramePlugin ? NP_FULL : NP_EMBED; m_shouldUseManualLoader = parameters.shouldUseManualLoader; CString mimeTypeCString = parameters.mimeType.utf8(); ASSERT(parameters.names.size() == parameters.values.size()); Vector<CString> paramNames; Vector<CString> paramValues; for (size_t i = 0; i < parameters.names.size(); ++i) { String parameterName = parameters.names[i]; #if PLUGIN_ARCHITECTURE(MAC) if (m_pluginModule->pluginQuirks().contains(PluginQuirks::WantsLowercaseParameterNames)) parameterName = parameterName.lower(); #endif paramNames.append(parameterName.utf8()); paramValues.append(parameters.values[i].utf8()); } #if PLUGIN_ARCHITECTURE(X11) if (equalIgnoringCase(parameters.mimeType, "application/x-shockwave-flash")) { size_t wmodeIndex = parameters.names.find("wmode"); if (wmodeIndex != notFound) { // Transparent window mode is not supported by X11 backend. if (equalIgnoringCase(parameters.values[wmodeIndex], "transparent") || ((m_pluginModule->pluginQuirks().contains(PluginQuirks::ForceFlashWindowlessMode) && equalIgnoringCase(parameters.values[wmodeIndex], "window"))) || m_pluginModule->pluginQuirks().contains(PluginQuirks::DoNotCancelSrcStreamInWindowedMode)) paramValues[wmodeIndex] = "opaque"; } else if (m_pluginModule->pluginQuirks().contains(PluginQuirks::ForceFlashWindowlessMode) //add by luyue // support notFound wmode || m_pluginModule->pluginQuirks().contains(PluginQuirks::DoNotCancelSrcStreamInWindowedMode)) { paramNames.append("wmode"); paramValues.append("opaque"); } } else if (equalIgnoringCase(parameters.mimeType, "application/x-webkit-test-netscape")) { paramNames.append("windowedPlugin"); paramValues.append("false"); } #endif // The strings that these pointers point to are kept alive by paramNames and paramValues. Vector<const char*> names; Vector<const char*> values; for (size_t i = 0; i < paramNames.size(); ++i) { names.append(paramNames[i].data()); values.append(paramValues[i].data()); } #if PLUGIN_ARCHITECTURE(MAC) if (m_pluginModule->pluginQuirks().contains(PluginQuirks::MakeOpaqueUnlessTransparentSilverlightBackgroundAttributeExists)) { for (size_t i = 0; i < parameters.names.size(); ++i) { if (equalIgnoringCase(parameters.names[i], "background")) { setIsTransparent(isTransparentSilverlightBackgroundValue(parameters.values[i].lower())); break; } } } m_layerHostingMode = parameters.layerHostingMode; #endif platformPreInitialize(); NetscapePlugin* previousNPPNewPlugin = currentNPPNewPlugin; m_inNPPNew = true; currentNPPNewPlugin = this; NPError error = NPP_New(const_cast<char*>(mimeTypeCString.data()), mode, names.size(), const_cast<char**>(names.data()), const_cast<char**>(values.data()), 0); m_inNPPNew = false; currentNPPNewPlugin = previousNPPNewPlugin; if (error != NPERR_NO_ERROR) return false; m_isStarted = true; // FIXME: This is not correct in all cases. m_npWindow.type = NPWindowTypeDrawable; if (!platformPostInitialize()) { destroy(); return false; } // Load the src URL if needed. if (!parameters.shouldUseManualLoader && !parameters.url.isEmpty() && shouldLoadSrcURL()) loadURL("GET", parameters.url.string(), String(), HTTPHeaderMap(), Vector<uint8_t>(), false, 0); return true; }
int WINAPI wWinMain(HINSTANCE, HINSTANCE, PWSTR, int nCmdShow) { #ifdef _CRTDBG_MAP_ALLOC _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); #endif // TODO: Place code here. MSG msg = {0}; HACCEL hAccelTable; INITCOMMONCONTROLSEX InitCtrlEx; InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX); InitCtrlEx.dwICC = 0x00004000; //ICC_STANDARD_CLASSES; InitCommonControlsEx(&InitCtrlEx); _bstr_t requestedURL; int argc = 0; WCHAR** argv = CommandLineToArgvW(GetCommandLineW(), &argc); for (int i = 1; i < argc; ++i) { if (!wcsicmp(argv[i], L"--transparent")) s_usesLayeredWebView = true; else if (!wcsicmp(argv[i], L"--desktop")) s_fullDesktop = true; else if (!requestedURL) requestedURL = argv[i]; } // Initialize global strings LoadString(hInst, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInst, IDC_WINLAUNCHER, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInst); if (shouldUseFullDesktop()) computeFullDesktopFrame(); // Init COM OleInitialize(NULL); if (usesLayeredWebView()) { hURLBarWnd = CreateWindow(L"EDIT", L"Type URL Here", WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOVSCROLL, s_windowPosition.x, s_windowPosition.y + s_windowSize.cy, s_windowSize.cx, URLBAR_HEIGHT, 0, 0, hInst, 0); } else { hMainWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0, 0, hInst, 0); if (!hMainWnd) return FALSE; hBackButtonWnd = CreateWindow(L"BUTTON", L"<", WS_CHILD | WS_VISIBLE | BS_TEXT, 0, 0, 0, 0, hMainWnd, 0, hInst, 0); hForwardButtonWnd = CreateWindow(L"BUTTON", L">", WS_CHILD | WS_VISIBLE | BS_TEXT, CONTROLBUTTON_WIDTH, 0, 0, 0, hMainWnd, 0, hInst, 0); hURLBarWnd = CreateWindow(L"EDIT", 0, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOVSCROLL, CONTROLBUTTON_WIDTH * 2, 0, 0, 0, hMainWnd, 0, hInst, 0); ShowWindow(hMainWnd, nCmdShow); UpdateWindow(hMainWnd); } DefEditProc = reinterpret_cast<WNDPROC>(GetWindowLongPtr(hURLBarWnd, GWLP_WNDPROC)); DefButtonProc = reinterpret_cast<WNDPROC>(GetWindowLongPtr(hBackButtonWnd, GWLP_WNDPROC)); SetWindowLongPtr(hURLBarWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(EditProc)); SetWindowLongPtr(hBackButtonWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(BackButtonProc)); SetWindowLongPtr(hForwardButtonWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(ForwardButtonProc)); SetFocus(hURLBarWnd); RECT clientRect = { s_windowPosition.x, s_windowPosition.y, s_windowPosition.x + s_windowSize.cx, s_windowPosition.y + s_windowSize.cy }; IWebPreferencesPtr tmpPreferences; if (FAILED(WebKitCreateInstance(CLSID_WebPreferences, 0, IID_IWebPreferences, reinterpret_cast<void**>(&tmpPreferences.GetInterfacePtr())))) goto exit; if (FAILED(tmpPreferences->standardPreferences(&gStandardPreferences.GetInterfacePtr()))) goto exit; if (!setToDefaultPreferences()) goto exit; HRESULT hr = WebKitCreateInstance(CLSID_WebView, 0, IID_IWebView, reinterpret_cast<void**>(&gWebView.GetInterfacePtr())); if (FAILED(hr)) goto exit; hr = gWebView->QueryInterface(IID_IWebViewPrivate, reinterpret_cast<void**>(&gWebViewPrivate.GetInterfacePtr())); if (FAILED(hr)) goto exit; hr = WebKitCreateInstance(CLSID_WebHistory, 0, __uuidof(gWebHistory), reinterpret_cast<void**>(&gWebHistory.GetInterfacePtr())); if (FAILED(hr)) goto exit; gWebHost = new WinLauncherWebHost(); gWebHost->AddRef(); hr = gWebView->setFrameLoadDelegate(gWebHost); if (FAILED(hr)) goto exit; gPrintDelegate = new PrintWebUIDelegate; gPrintDelegate->AddRef(); hr = gWebView->setUIDelegate(gPrintDelegate); if (FAILED (hr)) goto exit; gAccessibilityDelegate = new AccessibilityDelegate; gAccessibilityDelegate->AddRef(); hr = gWebView->setAccessibilityDelegate(gAccessibilityDelegate); if (FAILED (hr)) goto exit; hr = gWebView->setHostWindow(reinterpret_cast<OLE_HANDLE>(hMainWnd)); if (FAILED(hr)) goto exit; hr = gWebView->initWithFrame(clientRect, 0, 0); if (FAILED(hr)) goto exit; if (!requestedURL) { IWebFramePtr frame; hr = gWebView->mainFrame(&frame.GetInterfacePtr()); if (FAILED(hr)) goto exit; frame->loadHTMLString(_bstr_t(defaultHTML).GetBSTR(), 0); } hr = gWebViewPrivate->setTransparent(usesLayeredWebView()); if (FAILED(hr)) goto exit; hr = gWebViewPrivate->setUsesLayeredWindow(usesLayeredWebView()); if (FAILED(hr)) goto exit; hr = gWebViewPrivate->viewWindow(reinterpret_cast<OLE_HANDLE*>(&gViewWindow)); if (FAILED(hr) || !gViewWindow) goto exit; if (usesLayeredWebView()) subclassForLayeredWindow(); resizeSubViews(); ShowWindow(gViewWindow, nCmdShow); UpdateWindow(gViewWindow); hAccelTable = LoadAccelerators(hInst, MAKEINTRESOURCE(IDC_WINLAUNCHER)); if (requestedURL.length()) loadURL(requestedURL.GetBSTR()); #pragma warning(disable:4509) // Main message loop: __try { while (GetMessage(&msg, 0, 0, 0)) { #if USE(CF) CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, true); #endif if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } } __except(createCrashReport(GetExceptionInformation()), EXCEPTION_EXECUTE_HANDLER) { } exit: gPrintDelegate->Release(); shutDownWebKit(); #ifdef _CRTDBG_MAP_ALLOC _CrtDumpMemoryLeaks(); #endif // Shut down COM. OleUninitialize(); return static_cast<int>(msg.wParam); }
void WebPage::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder& arguments) { if (messageID.is<CoreIPC::MessageClassDrawingArea>()) { ASSERT(m_drawingArea); m_drawingArea->didReceiveMessage(connection, messageID, arguments); return; } switch (messageID.get<WebPageMessage::Kind>()) { case WebPageMessage::SetActive: { bool active; if (!arguments.decode(active)) return; setActive(active); break; } case WebPageMessage::SetFocused: { bool focused; if (!arguments.decode(focused)) return; setFocused(focused); break; } case WebPageMessage::MouseEvent: { WebMouseEvent event; if (!arguments.decode(event)) return; connection->send(WebPageProxyMessage::DidReceiveEvent, m_pageID, CoreIPC::In((uint32_t)event.type())); PlatformMouseEvent platformEvent = platform(event); mouseEvent(platformEvent); break; } case WebPageMessage::WheelEvent: { WebWheelEvent event; if (!arguments.decode(event)) return; connection->send(WebPageProxyMessage::DidReceiveEvent, m_pageID, CoreIPC::In((uint32_t)event.type())); PlatformWheelEvent platformEvent = platform(event); wheelEvent(platformEvent); break; } case WebPageMessage::KeyEvent: { WebKeyboardEvent event; if (!arguments.decode(event)) return; connection->send(WebPageProxyMessage::DidReceiveEvent, m_pageID, CoreIPC::In((uint32_t)event.type())); PlatformKeyboardEvent platformEvent = platform(event); keyEvent(platformEvent); break; } case WebPageMessage::LoadURL: { String url; if (!arguments.decode(url)) return; loadURL(url); break; } case WebPageMessage::StopLoading: stopLoading(); break; case WebPageMessage::Reload: bool reloadFromOrigin; if (!arguments.decode(CoreIPC::Out(reloadFromOrigin))) return; reload(reloadFromOrigin); break; case WebPageMessage::GoForward: goForward(); break; case WebPageMessage::GoBack: goBack(); break; case WebPageMessage::DidReceivePolicyDecision: { uint64_t frameID; uint64_t listenerID; uint32_t policyAction; if (!arguments.decode(CoreIPC::Out(frameID, listenerID, policyAction))) return; didReceivePolicyDecision(webFrame(frameID), listenerID, (WebCore::PolicyAction)policyAction); break; } case WebPageMessage::RunJavaScriptInMainFrame: { String script; uint64_t callbackID; if (!arguments.decode(CoreIPC::Out(script, callbackID))) return; runJavaScriptInMainFrame(script, callbackID); break; } case WebPageMessage::GetRenderTreeExternalRepresentation: { uint64_t callbackID; if (!arguments.decode(callbackID)) return; getRenderTreeExternalRepresentation(callbackID); break; } case WebPageMessage::Close: { close(); break; } case WebPageMessage::TryClose: { tryClose(); break; } default: ASSERT_NOT_REACHED(); break; } }
void Win32WebControl::loadURL(const std::wstring &url) const { BSTR bstr = SysAllocString(url.c_str()); loadURL(bstr); SysFreeString(bstr); }
// virtual void LLWeb::URLLoader::load(const std::string& url) { loadURL(url); }
extern "C" __declspec(dllexport) int WINAPI dllLauncherEntryPoint(HINSTANCE, HINSTANCE, LPTSTR, int nCmdShow) { #ifdef _CRTDBG_MAP_ALLOC _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); #endif // TODO: Place code here. MSG msg = {0}; HACCEL hAccelTable; INITCOMMONCONTROLSEX InitCtrlEx; InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX); InitCtrlEx.dwICC = 0x00004000; //ICC_STANDARD_CLASSES; InitCommonControlsEx(&InitCtrlEx); _bstr_t requestedURL; int argc = 0; WCHAR** argv = CommandLineToArgvW(GetCommandLineW(), &argc); for (int i = 1; i < argc; ++i) { if (!wcsicmp(argv[i], L"--transparent")) s_usesLayeredWebView = true; else if (!wcsicmp(argv[i], L"--desktop")) s_fullDesktop = true; else if (!requestedURL) requestedURL = argv[i]; } // Initialize global strings LoadString(hInst, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInst, IDC_WINLAUNCHER, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInst); if (shouldUseFullDesktop()) computeFullDesktopFrame(); // Init COM OleInitialize(NULL); if (usesLayeredWebView()) { hURLBarWnd = CreateWindow(L"EDIT", L"Type URL Here", WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOVSCROLL, s_windowPosition.x, s_windowPosition.y + s_windowSize.cy, s_windowSize.cx, URLBAR_HEIGHT, 0, 0, hInst, 0); } else { hMainWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0, 0, hInst, 0); if (!hMainWnd) return FALSE; hBackButtonWnd = CreateWindow(L"BUTTON", L"<", WS_CHILD | WS_VISIBLE | BS_TEXT, 0, 0, 0, 0, hMainWnd, 0, hInst, 0); hForwardButtonWnd = CreateWindow(L"BUTTON", L">", WS_CHILD | WS_VISIBLE | BS_TEXT, CONTROLBUTTON_WIDTH, 0, 0, 0, hMainWnd, 0, hInst, 0); hURLBarWnd = CreateWindow(L"EDIT", 0, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOVSCROLL, CONTROLBUTTON_WIDTH * 2, 0, 0, 0, hMainWnd, 0, hInst, 0); ShowWindow(hMainWnd, nCmdShow); UpdateWindow(hMainWnd); } DefEditProc = reinterpret_cast<WNDPROC>(GetWindowLongPtr(hURLBarWnd, GWLP_WNDPROC)); DefButtonProc = reinterpret_cast<WNDPROC>(GetWindowLongPtr(hBackButtonWnd, GWLP_WNDPROC)); SetWindowLongPtr(hURLBarWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(EditProc)); SetWindowLongPtr(hBackButtonWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(BackButtonProc)); SetWindowLongPtr(hForwardButtonWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(ForwardButtonProc)); SetFocus(hURLBarWnd); RECT clientRect = { s_windowPosition.x, s_windowPosition.y, s_windowPosition.x + s_windowSize.cx, s_windowPosition.y + s_windowSize.cy }; IWebPreferencesPtr tmpPreferences; if (FAILED(WebKitCreateInstance(CLSID_WebPreferences, 0, IID_IWebPreferences, reinterpret_cast<void**>(&tmpPreferences.GetInterfacePtr())))) goto exit; if (FAILED(tmpPreferences->standardPreferences(&gStandardPreferences.GetInterfacePtr()))) goto exit; if (!setToDefaultPreferences()) goto exit; HRESULT hr = WebKitCreateInstance(CLSID_WebView, 0, IID_IWebView, reinterpret_cast<void**>(&gWebView.GetInterfacePtr())); if (FAILED(hr)) goto exit; hr = gWebView->QueryInterface(IID_IWebViewPrivate, reinterpret_cast<void**>(&gWebViewPrivate.GetInterfacePtr())); if (FAILED(hr)) goto exit; hr = WebKitCreateInstance(CLSID_WebHistory, 0, __uuidof(gWebHistory), reinterpret_cast<void**>(&gWebHistory.GetInterfacePtr())); if (FAILED(hr)) goto exit; gWebHost = new WinLauncherWebHost(); gWebHost->AddRef(); hr = gWebView->setFrameLoadDelegate(gWebHost); if (FAILED(hr)) goto exit; gPrintDelegate = new PrintWebUIDelegate; gPrintDelegate->AddRef(); hr = gWebView->setUIDelegate(gPrintDelegate); if (FAILED (hr)) goto exit; gAccessibilityDelegate = new AccessibilityDelegate; gAccessibilityDelegate->AddRef(); hr = gWebView->setAccessibilityDelegate(gAccessibilityDelegate); if (FAILED (hr)) goto exit; hr = gWebView->setHostWindow(reinterpret_cast<OLE_HANDLE>(hMainWnd)); if (FAILED(hr)) goto exit; hr = gWebView->initWithFrame(clientRect, 0, 0); if (FAILED(hr)) goto exit; if (!requestedURL) { IWebFramePtr frame; hr = gWebView->mainFrame(&frame.GetInterfacePtr()); if (FAILED(hr)) goto exit; _bstr_t defaultHTML(L"<p style=\"background-color: #00FF00\">Testing</p><img id=\"webkit logo\" src=\"http://webkit.org/images/icon-gold.png\" alt=\"Face\"><div style=\"border: solid blue; background: white;\" contenteditable=\"true\">div with blue border</div><ul><li>foo<li>bar<li>baz</ul>"); frame->loadHTMLString(defaultHTML.GetBSTR(), 0); } hr = gWebViewPrivate->setTransparent(usesLayeredWebView()); if (FAILED(hr)) goto exit; hr = gWebViewPrivate->setUsesLayeredWindow(usesLayeredWebView()); if (FAILED(hr)) goto exit; hr = gWebViewPrivate->viewWindow(reinterpret_cast<OLE_HANDLE*>(&gViewWindow)); if (FAILED(hr) || !gViewWindow) goto exit; if (usesLayeredWebView()) subclassForLayeredWindow(); resizeSubViews(); ShowWindow(gViewWindow, nCmdShow); UpdateWindow(gViewWindow); hAccelTable = LoadAccelerators(hInst, MAKEINTRESOURCE(IDC_WINLAUNCHER)); if (requestedURL.length()) loadURL(requestedURL.GetBSTR()); // Main message loop: #if USE(CF) _CFRunLoopSetWindowsMessageQueueMask(CFRunLoopGetMain(), QS_ALLINPUT | QS_ALLPOSTMESSAGE, kCFRunLoopDefaultMode); CFRunLoopRun(); #else while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } #endif exit: gPrintDelegate->Release(); shutDownWebKit(); #ifdef _CRTDBG_MAP_ALLOC _CrtDumpMemoryLeaks(); #endif // Shut down COM. OleUninitialize(); return static_cast<int>(msg.wParam); }
int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpstrCmdLine, _In_ int nCmdShow) { #ifdef _CRTDBG_MAP_ALLOC _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); #endif MSG msg = {0}; HACCEL hAccelTable; INITCOMMONCONTROLSEX InitCtrlEx; InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX); InitCtrlEx.dwICC = 0x00004000; // ICC_STANDARD_CLASSES; InitCommonControlsEx(&InitCtrlEx); bool usesLayeredWebView = false; bool useFullDesktop = false; bool pageLoadTesting = false; _bstr_t requestedURL; parseCommandLine(usesLayeredWebView, useFullDesktop, pageLoadTesting, requestedURL); // Initialize global strings LoadString(hInst, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInst, IDC_WINLAUNCHER, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInst); if (useFullDesktop) computeFullDesktopFrame(); // Init COM OleInitialize(nullptr); float scaleFactor = WebCore::deviceScaleFactorForWindow(nullptr); if (usesLayeredWebView) { hURLBarWnd = CreateWindow(L"EDIT", L"Type URL Here", WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOVSCROLL, scaleFactor * s_windowPosition.x, scaleFactor * (s_windowPosition.y + s_windowSize.cy), scaleFactor * s_windowSize.cx, scaleFactor * URLBAR_HEIGHT, 0, 0, hInst, 0); } else { hMainWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0, 0, hInst, 0); if (!hMainWnd) return FALSE; hBackButtonWnd = CreateWindow(L"BUTTON", L"<", WS_CHILD | WS_VISIBLE | BS_TEXT, 0, 0, 0, 0, hMainWnd, 0, hInst, 0); hForwardButtonWnd = CreateWindow(L"BUTTON", L">", WS_CHILD | WS_VISIBLE | BS_TEXT, scaleFactor * CONTROLBUTTON_WIDTH, 0, 0, 0, hMainWnd, 0, hInst, 0); hURLBarWnd = CreateWindow(L"EDIT", 0, WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOVSCROLL, scaleFactor * CONTROLBUTTON_WIDTH * 2, 0, 0, 0, hMainWnd, 0, hInst, 0); ShowWindow(hMainWnd, nCmdShow); UpdateWindow(hMainWnd); } DefEditProc = reinterpret_cast<WNDPROC>(GetWindowLongPtr(hURLBarWnd, GWLP_WNDPROC)); DefButtonProc = reinterpret_cast<WNDPROC>(GetWindowLongPtr(hBackButtonWnd, GWLP_WNDPROC)); SetWindowLongPtr(hURLBarWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(EditProc)); SetWindowLongPtr(hBackButtonWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(BackButtonProc)); SetWindowLongPtr(hForwardButtonWnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(ForwardButtonProc)); SetFocus(hURLBarWnd); RECT clientRect; ::GetClientRect(hMainWnd, &clientRect); if (usesLayeredWebView) clientRect = { s_windowPosition.x, s_windowPosition.y, s_windowPosition.x + s_windowSize.cx, s_windowPosition.y + s_windowSize.cy }; WinLauncherWebHost* webHost = nullptr; IWebDownloadDelegatePtr downloadDelegate; downloadDelegate.Attach(new WebDownloadDelegate()); gWinLauncher = new WinLauncher(hMainWnd, hURLBarWnd, usesLayeredWebView, pageLoadTesting); if (!gWinLauncher) goto exit; if (!gWinLauncher->seedInitialDefaultPreferences()) goto exit; if (!gWinLauncher->setToDefaultPreferences()) goto exit; HRESULT hr = gWinLauncher->init(); if (FAILED(hr)) goto exit; if (!setCacheFolder()) goto exit; webHost = new WinLauncherWebHost(gWinLauncher, hURLBarWnd); hr = gWinLauncher->setFrameLoadDelegate(webHost); if (FAILED(hr)) goto exit; hr = gWinLauncher->setFrameLoadDelegatePrivate(webHost); if (FAILED(hr)) goto exit; hr = gWinLauncher->setUIDelegate(new PrintWebUIDelegate()); if (FAILED (hr)) goto exit; hr = gWinLauncher->setAccessibilityDelegate(new AccessibilityDelegate()); if (FAILED (hr)) goto exit; hr = gWinLauncher->setResourceLoadDelegate(new ResourceLoadDelegate(gWinLauncher)); if (FAILED(hr)) goto exit; hr = gWinLauncher->setDownloadDelegate(downloadDelegate); if (FAILED(hr)) goto exit; hr = gWinLauncher->prepareViews(hMainWnd, clientRect, requestedURL.GetBSTR(), gViewWindow); if (FAILED(hr) || !gViewWindow) goto exit; if (gWinLauncher->usesLayeredWebView()) subclassForLayeredWindow(); resizeSubViews(); ShowWindow(gViewWindow, nCmdShow); UpdateWindow(gViewWindow); hAccelTable = LoadAccelerators(hInst, MAKEINTRESOURCE(IDC_WINLAUNCHER)); if (requestedURL.length()) loadURL(requestedURL.GetBSTR()); #pragma warning(disable:4509) // Main message loop: __try { _com_ptr_t<_com_IIID<IWebKitMessageLoop, &__uuidof(IWebKitMessageLoop)>> messageLoop; hr = WebKitCreateInstance(CLSID_WebKitMessageLoop, 0, IID_IWebKitMessageLoop, reinterpret_cast<void**>(&messageLoop.GetInterfacePtr())); if (FAILED(hr)) goto exit; messageLoop->run(hAccelTable); } __except(createCrashReport(GetExceptionInformation()), EXCEPTION_EXECUTE_HANDLER) { } exit: shutDownWebKit(); #ifdef _CRTDBG_MAP_ALLOC _CrtDumpMemoryLeaks(); #endif // Shut down COM. OleUninitialize(); delete gWinLauncher; return static_cast<int>(msg.wParam); }