WebBrowser.cpp 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. /*
  2. ** Command & Conquer Generals Zero Hour(tm)
  3. ** Copyright 2025 Electronic Arts Inc.
  4. **
  5. ** This program is free software: you can redistribute it and/or modify
  6. ** it under the terms of the GNU General Public License as published by
  7. ** the Free Software Foundation, either version 3 of the License, or
  8. ** (at your option) any later version.
  9. **
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. ** GNU General Public License for more details.
  14. **
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. ////////////////////////////////////////////////////////////////////////////////
  19. // //
  20. // (c) 2001-2003 Electronic Arts Inc. //
  21. // //
  22. ////////////////////////////////////////////////////////////////////////////////
  23. /******************************************************************************
  24. *
  25. * NAME
  26. * $Archive: $
  27. *
  28. * DESCRIPTION
  29. *
  30. * PROGRAMMER
  31. * Bryan Cleveland
  32. * $Author: $
  33. *
  34. * VERSION INFO
  35. * $Revision: $
  36. * $Modtime: $
  37. *
  38. ******************************************************************************/
  39. #include "PreRTS.h" // This must go first in EVERY cpp file int the GameEngine
  40. //#include "WinMain.h"
  41. #include "GameNetwork/WOLBrowser/WebBrowser.h"
  42. #include "GameClient/GameWindow.h"
  43. #include "GameClient/Display.h"
  44. #ifdef _INTERNAL
  45. // for occasional debugging...
  46. //#pragma optimize("", off)
  47. //#pragma MESSAGE("************************************** WARNING, optimization disabled for debugging purposes")
  48. #endif
  49. /**
  50. * OLEInitializer class - Init and shutdown OLE & COM as a global
  51. * object. Scary, nasty stuff, COM. /me shivers.
  52. */
  53. class OLEInitializer
  54. {
  55. public:
  56. OLEInitializer()
  57. {
  58. // Initialize this instance
  59. OleInitialize(NULL);
  60. }
  61. ~OLEInitializer()
  62. {
  63. OleUninitialize();
  64. }
  65. };
  66. OLEInitializer g_OLEInitializer;
  67. CComModule _Module;
  68. CComObject<WebBrowser> * TheWebBrowser = NULL;
  69. /******************************************************************************
  70. *
  71. * NAME
  72. * WebBrowser::WebBrowser
  73. *
  74. * DESCRIPTION
  75. * Default constructor
  76. *
  77. * INPUTS
  78. * NONE
  79. *
  80. * RESULT
  81. * NONE
  82. *
  83. ******************************************************************************/
  84. WebBrowser::WebBrowser() :
  85. mRefCount(1)
  86. {
  87. DEBUG_LOG(("Instantiating embedded WebBrowser\n"));
  88. m_urlList = NULL;
  89. }
  90. /******************************************************************************
  91. *
  92. * NAME
  93. * WebBrowser::~WebBrowser
  94. *
  95. * DESCRIPTION
  96. * Destructor
  97. *
  98. * INPUTS
  99. * NONE
  100. *
  101. * RESULT
  102. * NONE
  103. *
  104. ******************************************************************************/
  105. WebBrowser::~WebBrowser()
  106. {
  107. DEBUG_LOG(("Destructing embedded WebBrowser\n"));
  108. if (this == TheWebBrowser) {
  109. DEBUG_LOG(("WebBrowser::~WebBrowser - setting TheWebBrowser to NULL\n"));
  110. TheWebBrowser = NULL;
  111. }
  112. WebBrowserURL *url = m_urlList;
  113. while (url != NULL) {
  114. WebBrowserURL *temp = url;
  115. url = url->m_next;
  116. temp->deleteInstance();
  117. temp = NULL;
  118. }
  119. }
  120. //-------------------------------------------------------------------------------------------------
  121. /** The INI data fields for Webpage URL's */
  122. //-------------------------------------------------------------------------------------------------
  123. const FieldParse WebBrowserURL::m_URLFieldParseTable[] =
  124. {
  125. { "URL", INI::parseAsciiString, NULL, offsetof( WebBrowserURL, m_url ) },
  126. { NULL, NULL, NULL, 0 },
  127. };
  128. WebBrowserURL::WebBrowserURL()
  129. {
  130. m_next = NULL;
  131. m_tag.clear();
  132. m_url.clear();
  133. }
  134. WebBrowserURL::~WebBrowserURL()
  135. {
  136. }
  137. /******************************************************************************
  138. *
  139. * NAME
  140. * WebBrowser::init
  141. *
  142. * DESCRIPTION
  143. * Perform post creation initialization.
  144. *
  145. * INPUTS
  146. * NONE
  147. *
  148. * RESULT
  149. * NONE
  150. *
  151. ******************************************************************************/
  152. void WebBrowser::init()
  153. {
  154. m_urlList = NULL;
  155. INI ini;
  156. ini.load( AsciiString( "Data\\INI\\Webpages.ini" ), INI_LOAD_OVERWRITE, NULL );
  157. }
  158. /******************************************************************************
  159. *
  160. * NAME
  161. * WebBrowser::reset
  162. *
  163. * DESCRIPTION
  164. * Perform post creation initialization.
  165. *
  166. * INPUTS
  167. * NONE
  168. *
  169. * RESULT
  170. * NONE
  171. *
  172. ******************************************************************************/
  173. void WebBrowser::reset()
  174. {
  175. }
  176. void WebBrowser::update( void )
  177. {
  178. }
  179. WebBrowserURL * WebBrowser::findURL(AsciiString tag)
  180. {
  181. WebBrowserURL *retval = m_urlList;
  182. while ((retval != NULL) && tag.compareNoCase(retval->m_tag.str()))
  183. {
  184. retval = retval->m_next;
  185. }
  186. return retval;
  187. }
  188. WebBrowserURL * WebBrowser::makeNewURL(AsciiString tag)
  189. {
  190. WebBrowserURL *newURL = newInstance(WebBrowserURL);
  191. newURL->m_tag = tag;
  192. newURL->m_next = m_urlList;
  193. m_urlList = newURL;
  194. return newURL;
  195. }
  196. /******************************************************************************
  197. *
  198. * NAME
  199. * IUnknown::QueryInterface
  200. *
  201. * DESCRIPTION
  202. *
  203. * INPUTS
  204. * IID - Interface ID
  205. *
  206. * RESULT
  207. *
  208. ******************************************************************************/
  209. STDMETHODIMP WebBrowser::QueryInterface(REFIID iid, void** ppv)
  210. {
  211. *ppv = NULL;
  212. if ((iid == IID_IUnknown) || (iid == IID_IBrowserDispatch))
  213. {
  214. *ppv = static_cast<IBrowserDispatch*>(this);
  215. }
  216. else
  217. {
  218. return E_NOINTERFACE;
  219. }
  220. static_cast<IUnknown*>(*ppv)->AddRef();
  221. return S_OK;
  222. }
  223. /******************************************************************************
  224. *
  225. * NAME
  226. * IUnknown::AddRef
  227. *
  228. * DESCRIPTION
  229. *
  230. * INPUTS
  231. * NONE
  232. *
  233. * RESULT
  234. *
  235. ******************************************************************************/
  236. ULONG STDMETHODCALLTYPE WebBrowser::AddRef(void)
  237. {
  238. return ++mRefCount;
  239. }
  240. /******************************************************************************
  241. *
  242. * NAME
  243. * IUnknown::Release
  244. *
  245. * DESCRIPTION
  246. *
  247. * INPUTS
  248. * NONE
  249. *
  250. * RESULT
  251. *
  252. ******************************************************************************/
  253. ULONG STDMETHODCALLTYPE WebBrowser::Release(void)
  254. {
  255. DEBUG_ASSERTCRASH(mRefCount > 0, ("Negative reference count"));
  256. --mRefCount;
  257. if (mRefCount == 0)
  258. {
  259. DEBUG_LOG(("WebBrowser::Release - all references released, deleting the object.\n"));
  260. if (this == TheWebBrowser) {
  261. TheWebBrowser = NULL;
  262. }
  263. delete this;
  264. return 0;
  265. }
  266. return mRefCount;
  267. }
  268. STDMETHODIMP WebBrowser::TestMethod(Int num1)
  269. {
  270. DEBUG_LOG(("WebBrowser::TestMethod - num1 = %d\n", num1));
  271. return S_OK;
  272. }