예제 #1
0
파일: plugin.cpp 프로젝트: cha63501/Fire-IE
	CString CPlugin::GetNavigateParam(const NPUTF8* name) const
	{
		CString strParam;

		NPVariant vParam;
		VOID_TO_NPVARIANT(vParam);

		try
		{
			NPObject* pContainer = GetContainer();

			if (!NPN_Invoke(m_pNPInstance, pContainer, GetIdentifier(name), NULL, 0, &vParam))
			{
				throw(CString(_T("Cannot invoke window.Container.getXXX()")));
			}
			if (!NPVARIANT_IS_STRING(vParam)) 
			{
				throw(CString(_T("Invalid return value.")));
			}
			strParam = NPStringToCString(vParam.value.stringValue);
		}
		catch (const CString& strMessage)
		{
			UNUSED(strMessage);
			TRACE(_T("[CPlugin::GetNavigateHeaders Exception] %s\n"), strMessage);
		}

		if (!NPVARIANT_IS_VOID(vParam))	NPN_ReleaseVariantValue(&vParam);

		return strParam;
	}
CString NPIdentifierToCString(NPIdentifier npid)
{
	NPUTF8* putf8IdName = NPN_UTF8FromIdentifier(npid);
	NPString npstrIdName = { putf8IdName, (uint32_t)strlen(putf8IdName) };
	CString idName = NPStringToCString(npstrIdName);
	NPN_MemFree(putf8IdName);
	return idName;
}
예제 #3
0
파일: plugin.cpp 프로젝트: jiaofeng/COBA
CString CPlugin::GetNavigateParam(const NPUTF8* name) const
{
  CString strParam;

  NPObject* pWindow = NULL;
  NPVariant vCOBAContainer;
  VOID_TO_NPVARIANT(vCOBAContainer);
  NPVariant vParam;
  VOID_TO_NPVARIANT(vParam);

  try
  {
    if ((NPN_GetValue( m_pNPInstance, NPNVWindowNPObject, &pWindow) != NPERR_NO_ERROR ) || !pWindow )
    {
      throw(CString(_T("Cannot get window")));
    }

    if ((!NPN_GetProperty( m_pNPInstance, pWindow, NPN_GetStringIdentifier ("COBAContainer"), &vCOBAContainer)) || !NPVARIANT_IS_OBJECT (vCOBAContainer))
    {
      throw(CString(_T("Cannot get window.COBAContainer")));
    }

    if (!NPN_Invoke(m_pNPInstance, NPVARIANT_TO_OBJECT(vCOBAContainer), NPN_GetStringIdentifier(name), NULL, 0, &vParam))
    {
      throw(CString(_T("Cannot execute window.COBAContainer.getXXX()")));
    }
    if (!NPVARIANT_IS_STRING(vParam)) 
    {
      throw(CString(_T("Invalid return value.")));
    }
    strParam = NPStringToCString(vParam.value.stringValue);
  }
  catch (CString strMessage)
  {
    TRACE(_T("[CPlugin::GetNavigateHeaders Exception] %s"), strMessage);
  }

  if (!NPVARIANT_IS_VOID(vParam))	NPN_ReleaseVariantValue(&vParam);
  if (!NPVARIANT_IS_VOID(vCOBAContainer))	NPN_ReleaseVariantValue(&vCOBAContainer);
  if (pWindow != NULL) NPN_ReleaseObject(pWindow);

  return strParam;
}
unordered_map<wstring, wstring> NPObjectToUnorderedMap(NPP npp, NPObject* npobj)
{
	unordered_map<wstring, wstring> result;

	NPIdentifier* pIdentifiers = NULL;
	uint32_t nIdentifiers = 0;
	if (NPN_Enumerate(npp, npobj, &pIdentifiers, &nIdentifiers)) {
		for (uint32_t i = 0; i < nIdentifiers; i++) {
			NPIdentifier npid = pIdentifiers[i];
			CString idName = NPIdentifierToCString(npid);
			NPVariant npvValue;
			if (NPN_GetProperty(npp, npobj, npid, &npvValue)) {
				if (NPVARIANT_IS_STRING(npvValue)) {
					result[idName.GetString()] = NPStringToCString(NPVARIANT_TO_STRING(npvValue)).GetString();
				}
				NPN_ReleaseVariantValue(&npvValue);
			}
		}
		NPN_MemFree(pIdentifiers);
	}

	return result;
}
예제 #5
0
	bool ScriptablePluginObject::Invoke(NPIdentifier name, const NPVariant *args,
		uint32_t argCount, NPVariant *result)
	{
		if (m_pMainWindow == NULL)
			return false;

		// void Navigate({string} URL, {string} post, {string} headers)
		if (name == m_NavigateID) 
		{
			TRACE ("Navigate called!\n");
			if (argCount < 3)
				return false;

			NPVariant vURL = args[0];
			if (vURL.type != NPVariantType_String)
				return false;
			CString URL = NPStringToCString(vURL.value.stringValue);

      NPVariant vHeaders = args[1];
  		if (vHeaders.type != NPVariantType_String)
				return false;
			CString headers = NPStringToCString(vHeaders.value.stringValue);

      NPVariant vPost = args[2];
      if (vPost.type != NPVariantType_String)
				return false;
			CString post = NPStringToCString(vPost.value.stringValue);


			m_pMainWindow->Navigate(URL, post, headers);

			VOID_TO_NPVARIANT(*result);

			return true;
		}
		// void Refresh()
		else if (name == m_RefreshID)
		{
			TRACE ("Refresh called!\n");
			m_pMainWindow->Refresh();
			return true;
		}
		// void Stop()
		else if (name == m_StopID)
		{
			TRACE ("Stop called!\n");
			m_pMainWindow->Stop();
			return true;
		}
		// void Back()
		else if (name == m_BackID)
		{
			TRACE ("Back called!\n");
			m_pMainWindow->Back();
			return true;
		}
		// void Forward()
		else if (name == m_ForwardID)
		{
			TRACE ("Forward called!\n");
			m_pMainWindow->Forward();
			return true;
		}
		// void Focus()
		else if (name == m_FocusID)
		{
			TRACE ("Focus called!\n");
			m_pMainWindow->Focus();
			return true;
		}
		// void Copy()
		else if (name == m_CopyID)
		{
			TRACE ("Copy called!\n");
			m_pMainWindow->Copy();
			return true;
		}
		// void Cut()
		else if (name == m_CutID)
		{
			TRACE ("Cut called!\n");
			m_pMainWindow->Cut();
			return true;
		}
		// void Paste()
		else if (name == m_PasteID)
		{
			TRACE ("Paste called!\n");
			m_pMainWindow->Paste();
			return true;
		}
		// void SelectAll()
		else if (name == m_SelectAllID)
		{
			TRACE ("SelectAll called!\n");
			m_pMainWindow->SelectAll();
			return true;
		}
		// void Find()
		else if (name == m_FindID)
		{
			TRACE ("Find called!\n");
			m_pMainWindow->Find();
			return true;
		}
		// void HandOverFocus()
		else if (name == m_HandOverFocusID)
		{
			TRACE ("HandOverFocus called!\n");
			m_pMainWindow->HandOverFocus();
			return true;
		}
		// void Zoom({number} level)
		else if (name == m_ZoomID)
		{
			TRACE ("Zoom called!\n");

			if (argCount < 1)
				return false;

			double level = 1;

			if (NPVARIANT_IS_DOUBLE(args[0])) 
				level = NPVARIANT_TO_DOUBLE(args[0]);
			else if ( NPVARIANT_IS_INT32(args[0]) ) 
				level = NPVARIANT_TO_INT32(args[0]);

			m_pMainWindow->Zoom(level);
			return true;
		}
		// void DisplaySecurityInfo()
		else if (name == m_DisplaySecurityInfoID)
		{
			TRACE ("DisplaySecurityInfo called!\n");
			m_pMainWindow->DisplaySecurityInfo();
			return true;
		}
		// void SaveAs()
		else if (name == m_SaveAsID)
		{
			TRACE ("SaveAs called!\n");
			m_pMainWindow->SaveAs();
			return true;
		}
		// void Print()
		else if (name == m_PrintID)
		{
			TRACE ("Print called!\n");
			m_pMainWindow->Print();
			return true;
		}
		// void PrintPreview()
		else if (name == m_PrintPreviewID)
		{
			TRACE ("PrintPreview called!\n");
			m_pMainWindow->PrintPreview();
			return true;
		}
		// void PrintSetup()
		else if (name == m_PrintSetupID)
		{
			TRACE ("PrintSetup called!\n");
			m_pMainWindow->PrintSetup();
			return true;
		}
		return false;
	}
CString NPStringCharactersToCString(const NPUTF8* npstrchars)
{
	NPString npstr = { npstrchars, (uint32_t)strlen(npstrchars) };
	return NPStringToCString(npstr);
}