예제 #1
0
bool CWebView::LoadURL ( const SString& strURL, bool bFilterEnabled, const SString& strPostData, bool bURLEncoded )
{
    if ( !m_pWebView )
        return false;

    CefURLParts urlParts;
    if ( !CefParseURL ( strURL, urlParts ) )
        return false; // Invalid URL

    // Are we allowed to browse this website?
    if ( bFilterEnabled && g_pCore->GetWebCore ()->GetURLState ( UTF16ToMbUTF8 ( urlParts.host.str ), true ) != eURLState::WEBPAGE_ALLOWED )
        return false;

    // Load it!
    auto pFrame = m_pWebView->GetMainFrame ();
    if ( strPostData.empty () )
    {
        pFrame->LoadURL ( strURL );
    }
    else
    {
        // Load URL first, see https://bitbucket.org/chromiumembedded/cef/issue/579
        pFrame->LoadURL ( "about:blank" );

        // Perform HTTP POST
        auto request = CefRequest::Create ();
        auto postData = CefPostData::Create ();
        auto postDataElement = CefPostDataElement::Create ();
        postDataElement->SetToBytes ( strPostData.size (), strPostData.c_str () );
        postData->AddElement ( postDataElement );

        if ( bURLEncoded )
        {
            CefRequest::HeaderMap headerMap;
            headerMap.insert ( std::make_pair ( "Content-Type", "application/x-www-form-urlencoded" ) );
            headerMap.insert ( std::make_pair ( "Content-Length", std::to_string ( strPostData.size () ) ) );
            //headerMap.insert ( std::make_pair ( "Connection", "close" ) );
            request->SetHeaderMap ( headerMap );
        }

        request->SetURL ( strURL );
        request->SetMethod ( "POST" );
        request->SetPostData ( postData );
        pFrame->LoadRequest ( request );
    }
   
    return true;
}
예제 #2
0
bool PluginWebView::OnCmdEvent(ICmdParam& cmd,int phase)
{
	if(!cmd.evtptr||phase==IDefs::PHASE_POSTCALL) return true;
	if(cmd.evtptr->m_sId=="WebView.Go")
	{
		WndManager::current().evtmgr["WebView.URL"].WndExecuteEx(IDefs::ACTION_TRANSFER2MODEL);
		LoadURL(temp_url);
	}

	if(cmd.evtptr->m_sId=="Webview.Exec")
	{
		IWnd_webview* wv=GetActiveWebView();
		if(!wv) return true;

		wm.evtmgr["Webview.script"].WndExecuteEx(IDefs::ACTION_TRANSFER2MODEL);
		String val;
		wm.evtmgr.table["Webview.script"].get<String>(val);

		wv->RunScript(val);


	}

	if(cmd.evtptr->m_sId=="Webview.Clear")
	{
		wm.evtmgr.table["Webview.script"].reset<String>("");
		wm.evtmgr["Webview.script"].WndExecuteEx(IDefs::ACTION_TRANSFER2WINDOW);
	}

	return true;
}
예제 #3
0
void wxWebViewIE::LoadHistoryItem(wxSharedPtr<wxWebViewHistoryItem> item)
{
    int pos = -1;
    for(unsigned int i = 0; i < m_historyList.size(); i++)
    {
        //We compare the actual pointers to find the correct item
        if(m_historyList[i].get() == item.get())
            pos = i;
    }
    wxASSERT_MSG(pos != static_cast<int>(m_historyList.size()),
                 "invalid history item");
    m_historyLoadingFromList = true;
    LoadURL(item->GetUrl());
    m_historyPosition = pos;
}
예제 #4
0
bool PluginWebView::OnWndEvent(IWndParam& cmd,int phase)
{
	if(phase!=IDefs::PHASE_POSTCALL) return true;
	if(!cmd.iwvptr||!cmd.evtptr||cmd.evtptr->m_sId!="WebView.URL")
	{
		return true;
	}

	if(cmd.action==IDefs::ACTION_TRANSFER2MODEL)
	{
		cmd.iwvptr->DoGetValue(temp_url);
	}
	if(cmd.action==IDefs::ACTION_VALUE_CHANGED)
	{
		cmd.iwvptr->DoGetValue(temp_url);
		LoadURL(temp_url);
	}
	return true;
}
예제 #5
0
bool wxWebViewIE::Create(wxWindow* parent,
           wxWindowID id,
           const wxString& url,
           const wxPoint& pos,
           const wxSize& size,
           long style,
           const wxString& name)
{
    if (!wxControl::Create(parent, id, pos, size, style,
                           wxDefaultValidator, name))
    {
        return false;
    }

    m_webBrowser = NULL;
    m_isBusy = false;
    m_historyLoadingFromList = false;
    m_historyEnabled = true;
    m_historyPosition = -1;
    m_zoomType = wxWEB_VIEW_ZOOM_TYPE_TEXT;

    if (::CoCreateInstance(CLSID_WebBrowser, NULL,
                           CLSCTX_INPROC_SERVER, // CLSCTX_INPROC,
                           IID_IWebBrowser2 , (void**)&m_webBrowser) != 0)
    {
        wxLogError("Failed to initialize IE, CoCreateInstance returned an error");
        return false;
    }

    m_ie.SetDispatchPtr(m_webBrowser); // wxAutomationObject will release itself

    m_webBrowser->put_RegisterAsBrowser(VARIANT_TRUE);
    m_webBrowser->put_RegisterAsDropTarget(VARIANT_TRUE);

    m_uiHandler = new DocHostUIHandler;

    m_container = new wxIEContainer(this, IID_IWebBrowser2, m_webBrowser, m_uiHandler);

    EnableControlFeature(21 /* FEATURE_DISABLE_NAVIGATION_SOUNDS */);

    LoadURL(url);
    return true;
}
void CefControlBase::LoadURL(const CefString& url)
{
	if (browser_handler_.get() && browser_handler_->GetBrowser().get())
	{
		CefRefPtr<CefFrame> frame = browser_handler_->GetBrowser()->GetMainFrame();
		if (!frame)
			return;

		frame->LoadURL(url);
	}
	else
	{
		if (browser_handler_.get())
		{
			StdClosure cb = ToWeakCallback([this, url]()
			{
				LoadURL(url);
			});
			browser_handler_->AddAfterCreateTask(cb);
		}
	}
}
예제 #7
0
void VisionApp::MessageReceived(BMessage* msg)
{
	switch (msg->what) {
	case M_ABOUT_CLOSE: {
		fAboutWin = 0;
		if (fShuttingDown) PostMessage(B_QUIT_REQUESTED);
	} break;

	case M_SETUP_SHOW: {
		if (fSetupWin)
			fSetupWin->Activate();
		else {
			fSetupWin = new SetupWindow();
			fSetupWin->Show();
		}
	} break;

	case M_SETUP_CLOSE: {
		SaveSettings();
		fSetupWin = 0;
		if (fClientWin == NULL) PostMessage(B_QUIT_REQUESTED);
	} break;

	case M_PREFS_SHOW: {
		if (fPrefsWin)
			fPrefsWin->Activate();
		else {
			fPrefsWin = new PrefsWindow();
			fPrefsWin->Show();
		}
	} break;

	case M_PREFS_CLOSE: {
		SaveSettings();
		fPrefsWin = 0;
	} break;

	case M_NETWORK_SHOW: {
		if (fNetWin)
			fNetWin->Activate();
		else {
			fNetWin = new NetworkWindow();
			fNetWin->Show();
		}
	} break;

	case M_NETWORK_CLOSE: {
		SaveSettings();
		fNetWin = 0;
	} break;

	case M_CONNECT_NETWORK: {
		BRect clientWinRect(GetRect("clientWinRect"));
		BMessage netData = GetNetwork(msg->FindString("network"));

		// sanity check
		if (netData.IsEmpty()) break;

		if (netData.FindBool("useDefaults")) {
			netData.RemoveName("nick");
			netData.RemoveName("realname");
			netData.RemoveName("ident");
			BMessage netDefaults(GetNetwork("defaults"));
			netData.AddString("realname", netDefaults.FindString("realname"));
			netData.AddString("ident", netDefaults.FindString("ident"));
			const char* nick(NULL);
			for (int32 i = 0; (nick = netDefaults.FindString("nick", i)) != NULL; i++)
				netData.AddString("nick", nick);
		}
		if (fClientWin == NULL) {
			fClientWin = new ClientWindow(clientWinRect);
			fWinThread = fClientWin->Thread();
			fClientWin->Show();
		}
		BMessage connMsg(M_MAKE_NEW_NETWORK);
		connMsg.AddMessage("network", &netData);
		fClientWin->PostMessage(&connMsg);
	} break;

	case M_JOIN_CHANNEL: {
		if (fClientWin == NULL) break;

		fClientWin->PostMessage(msg);
	} break;

	case M_DCC_FILE_WIN: {
		if (fDccFileWin) {
			fDccFileWin->PostMessage(msg);
		} else {
			DCCConnect* view;

			msg->FindPointer("view", reinterpret_cast<void**>(&view));
			fDccFileWin = new DCCFileWindow(view);
			fDccFileWin->Show();
		}
	} break;

	case M_DCC_MESSENGER:
		if (msg->IsSourceWaiting()) {
			BMessenger msgr(fDccFileWin);
			BMessage reply;
			reply.AddMessenger("msgr", msgr);
			msg->SendReply(&reply);
		}
		break;

	case M_DCC_FILE_WIN_DONE: {
		fDccFileWin = 0;
	} break;

	case M_DCC_COMPLETE: {
		Broadcast(msg);
	} break;

	case M_LOAD_URL: {
		BString url(msg->FindString("url"));
		if (url.Length() > 0) {
			LoadURL(url.String());
		}
	} break;

	default:
		BApplication::MessageReceived(msg);
	}
}
예제 #8
0
void MovieTexture::CreateTexture(Graphics::RenderTarget* renderTarget)
{
	if (m_status == 0)
	{
		m_status = 1;

		if (m_url->get_size() > 0)
		{
			auto url0 = m_url->get1Value(0);

#if 0
			TCHAR fullurl[512];
			{
				DWORD resultLen = sizeof(fullurl);
				InternetCombineUrl(W2A(m_pScene->m_url), W2A(url0), fullurl, &resultLen, 0);
			}

			ErrorCode hr = LoadURL(_bstr_t(fullurl));
			if (SUCCEEDED(hr))
			{

			/*
			CComPtr<IStream> stream;
			ErrorCode hr = URLOpenBlockingStream(0, _bstr_t(fullurl), &stream, 0, 0);
			LDraw::Bitmap* pBitmap = new LDraw::Bitmap(stream);
			if (pBitmap->GetLastStatus() == LDraw::Ok)
			{
				LDraw::BitmapData bitmapData;
				if (pBitmap->LockBits(
					&LDraw::Rect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight()),
					LDraw::ImageLockModeRead,
					PixelFormat32bppARGB, &bitmapData) == 0)
				{
				}
			}
				*/

				glGenTextures(1, &m_texName);
				ASSERT(glGetError() == GL_NO_ERROR);

				glBindTexture(GL_TEXTURE_2D, m_texName);
				ASSERT(glGetError() == GL_NO_ERROR);

				glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, (m_repeatS->m_value)? GL_REPEAT : GL_CLAMP);
				ASSERT(glGetError() == GL_NO_ERROR);

				glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, (m_repeatT->m_value)? GL_REPEAT : GL_CLAMP);
				ASSERT(glGetError() == GL_NO_ERROR);

				glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
				ASSERT(glGetError() == GL_NO_ERROR);
				glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
				ASSERT(glGetError() == GL_NO_ERROR);

				LVIDEOINFOHEADER2* vih = ((LVIDEOINFOHEADER2*)m_pVideoFilter->m_pInput->m_mt->pbFormat);

				int width = vih->bmiHeader.biWidth;
				int height = vih->bmiHeader.biHeight;

				m_texwidth = 1;
				while (m_texwidth < width) m_texwidth <<= 1;

				m_texheight = 1;
				while (m_texheight < height) m_texheight <<= 1;

				//BYTE* p = new BYTE[m_texwidth*m_texheight*3];

				glTexImage2D(GL_TEXTURE_2D, 0, 4, m_texwidth, m_texheight, 0/*border*/, GL_RGB, GL_UNSIGNED_BYTE, NULL/*bitmapData.Scan0*/);
				ASSERT(glGetError() == GL_NO_ERROR);

				//	pBitmap->UnlockBits(&bitmapData);

				//delete pBitmap;

				m_filterGraph->Run();
			}
#endif
		}
	}
}
예제 #9
0
NS_IMETHODIMP nsJSSh::Init()
{
  nsCOMPtr<nsIScriptSecurityManager> ssm = do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID);
  if (!ssm) {
    NS_ERROR("failed to get script security manager");
    return NS_ERROR_FAILURE;
  }

  ssm->GetSystemPrincipal(getter_AddRefs(mPrincipal));
  if (!mPrincipal) {
    NS_ERROR("failed to get system principal");
    return NS_ERROR_FAILURE;
  }
  
  nsCOMPtr<nsIXPConnect> xpc = do_GetService(nsIXPConnect::GetCID());
  if (!xpc) {
    NS_ERROR("failed to get xpconnect service");
    return NS_ERROR_FAILURE;
  }

  nsCOMPtr<nsIJSRuntimeService> rtsvc = do_GetService("@mozilla.org/js/xpc/RuntimeService;1");
  // get the JSRuntime from the runtime svc
  if (!rtsvc) {
    NS_ERROR("failed to get nsJSRuntimeService");
    return NS_ERROR_FAILURE;
  }
  
  JSRuntime *rt = nsnull;
  if (NS_FAILED(rtsvc->GetRuntime(&rt)) || !rt) {
    NS_ERROR("failed to get JSRuntime from nsJSRuntimeService");
    return NS_ERROR_FAILURE;
  }
  
  mJSContext = JS_NewContext(rt, 8192);
  if (!mJSContext) {
    NS_ERROR("JS_NewContext failed");
    return NS_ERROR_FAILURE;
  }

  JSAutoRequest ar(mJSContext);

  // Enable e4x:
  JS_SetOptions(mJSContext, JS_GetOptions(mJSContext) | JSOPTION_XML);
  
  // Always use the latest js version
  JS_SetVersion(mJSContext, JSVERSION_LATEST);
  
  mContextStack = do_GetService("@mozilla.org/js/xpc/ContextStack;1");
  if (!mContextStack) {
    NS_ERROR("failed to get the nsThreadJSContextStack service");
    return NS_ERROR_FAILURE;
  }
  
  JS_SetErrorReporter(mJSContext, my_ErrorReporter);

  nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
  xpc->InitClassesWithNewWrappedGlobal(mJSContext, (nsIJSSh*)this,
                                       NS_GET_IID(nsISupports),
                                       PR_TRUE,
                                       getter_AddRefs(holder));
  if (!holder) {
    NS_ERROR("global initialization failed");
    return NS_ERROR_FAILURE;
  }
  
  holder->GetJSObject(&mGlobal);
  if (!mGlobal) {
    NS_ERROR("bad global object");
    return NS_ERROR_FAILURE;
  }
  mContextObj = mGlobal;
  
  if (!JS_DefineFunctions(mJSContext, mGlobal, global_functions)) {
    NS_ERROR("failed to initialise global functions");
    return NS_ERROR_FAILURE;
  }
  
  if (!mStartupURI.IsEmpty())
    LoadURL(mStartupURI.get());
  
  return NS_OK;
}