aboutsummaryrefslogtreecommitdiff
path: root/Src/Components/wac_browser
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Components/wac_browser')
-rw-r--r--Src/Components/wac_browser/api__wac_browser.h32
-rw-r--r--Src/Components/wac_browser/main.cpp44
-rw-r--r--Src/Components/wac_browser/main.h29
-rw-r--r--Src/Components/wac_browser/obj_embedded_browser.h10
-rw-r--r--Src/Components/wac_browser/resource.h14
-rw-r--r--Src/Components/wac_browser/resources/curtainProgress.png5
-rw-r--r--Src/Components/wac_browser/resources/menuArrow.pngbin0 -> 133 bytes
-rw-r--r--Src/Components/wac_browser/resources/pages/dnsError.htm44
-rw-r--r--Src/Components/wac_browser/resources/pages/errorIcon.pngbin0 -> 2254 bytes
-rw-r--r--Src/Components/wac_browser/resources/pages/errorPageFunctions.js288
-rw-r--r--Src/Components/wac_browser/resources/pages/errorPageStrings.js138
-rw-r--r--Src/Components/wac_browser/resources/pages/httpError.htm44
-rw-r--r--Src/Components/wac_browser/resources/pages/inetDisabled.htm26
-rw-r--r--Src/Components/wac_browser/resources/pages/navCancel.htm26
-rw-r--r--Src/Components/wac_browser/resources/pages/winampError.css64
-rw-r--r--Src/Components/wac_browser/resources/serviceIcon.pngbin0 -> 272 bytes
-rw-r--r--Src/Components/wac_browser/resources/toolbarAddress.pngbin0 -> 220 bytes
-rw-r--r--Src/Components/wac_browser/resources/toolbarLarge.pngbin0 -> 11748 bytes
-rw-r--r--Src/Components/wac_browser/resources/toolbarProgress.pngbin0 -> 1194 bytes
-rw-r--r--Src/Components/wac_browser/version.rc239
-rw-r--r--Src/Components/wac_browser/wac_browser.h21
-rw-r--r--Src/Components/wac_browser/wac_browser.rc76
-rw-r--r--Src/Components/wac_browser/wac_browser.vcxproj324
-rw-r--r--Src/Components/wac_browser/wac_browser.vcxproj.filters59
-rw-r--r--Src/Components/wac_browser/wac_browser_factory.cpp109
-rw-r--r--Src/Components/wac_browser/wac_browser_factory.h43
-rw-r--r--Src/Components/wac_browser/wac_browser_global.h16
27 files changed, 1451 insertions, 0 deletions
diff --git a/Src/Components/wac_browser/api__wac_browser.h b/Src/Components/wac_browser/api__wac_browser.h
new file mode 100644
index 00000000..449806c5
--- /dev/null
+++ b/Src/Components/wac_browser/api__wac_browser.h
@@ -0,0 +1,32 @@
+#ifndef NULLSOFT_COMPONENT_WAC_BROWSER_H
+#define NULLSOFT_COMPONENT_WAC_BROWSER_H
+
+#include "api/service/api_service.h"
+#include "../Agave/Config/api_config.h"
+
+template <class api_T>
+void ServiceBuild( api_T *&p_api_t, GUID p_factoryGUID_t )
+{
+ if ( WASABI_API_SVC )
+ {
+ waServiceFactory *factory = WASABI_API_SVC->service_getServiceByGuid( p_factoryGUID_t );
+ if ( factory )
+ p_api_t = reinterpret_cast<api_T *>( factory->getInterface() );
+ }
+}
+
+template <class api_T>
+void ServiceRelease( api_T *p_api_t, GUID p_factoryGUID_t )
+{
+ if ( WASABI_API_SVC && p_api_t )
+ {
+ waServiceFactory *factory = WASABI_API_SVC->service_getServiceByGuid( p_factoryGUID_t );
+ if ( factory )
+ factory->releaseInterface( p_api_t );
+ }
+
+ p_api_t = NULL;
+}
+
+#endif // !NULLSOFT_COMPONENT_WAC_BROWSER_H
+
diff --git a/Src/Components/wac_browser/main.cpp b/Src/Components/wac_browser/main.cpp
new file mode 100644
index 00000000..1678bb7c
--- /dev/null
+++ b/Src/Components/wac_browser/main.cpp
@@ -0,0 +1,44 @@
+#include "main.h"
+
+#include "wac_browser_factory.h"
+
+#include "bfc/platform/export.h"
+
+api_service *WASABI_API_SVC = NULL;
+api_config *AGAVE_API_CONFIG = NULL;
+
+static wa::Components::WAC_BrowserFactory _wacDownloadFactory;
+static wa::Components::WAC_Browser _wac_browser;
+
+
+void wa::Components::WAC_Browser::RegisterServices( api_service *p_service )
+{
+ WASABI_API_SVC = p_service;
+ ServiceBuild( AGAVE_API_CONFIG, AgaveConfigGUID );
+ WASABI_API_SVC->service_register( &_wacDownloadFactory );
+}
+
+void wa::Components::WAC_Browser::DeregisterServices( api_service *p_service )
+{
+ p_service->service_deregister( &_wacDownloadFactory );
+ ServiceRelease( AGAVE_API_CONFIG, AgaveConfigGUID );
+}
+
+
+extern "C" DLLEXPORT ifc_wa5component * GetWinamp5SystemComponent()
+{
+ return &_wac_browser;
+}
+
+
+#ifdef CBCLASS
+#undef CBCLASS
+#endif
+
+#define CBCLASS wa::Components::WAC_Browser
+START_DISPATCH;
+VCB( API_WA5COMPONENT_REGISTERSERVICES, RegisterServices )
+CB( API_WA5COMPONENT_REGISTERSERVICES_SAFE_MODE, RegisterServicesSafeModeOk )
+VCB( API_WA5COMPONENT_DEREEGISTERSERVICES, DeregisterServices )
+END_DISPATCH;
+#undef CBCLASS
diff --git a/Src/Components/wac_browser/main.h b/Src/Components/wac_browser/main.h
new file mode 100644
index 00000000..9090047a
--- /dev/null
+++ b/Src/Components/wac_browser/main.h
@@ -0,0 +1,29 @@
+#ifndef NULLSOFT_WAC_BROWSER_MAIN_H
+#define NULLSOFT_WAC_BROWSER_MAIN_H
+
+#include "api__wac_browser.h"
+
+#include "../Agave/Component/ifc_wa5component.h"
+
+#include <QtWebView>
+#include <QUrl>
+
+namespace wa
+{
+ namespace Components
+ {
+ class WAC_Browser : public ifc_wa5component
+ {
+ public:
+ void RegisterServices( api_service *p_service );
+ int RegisterServicesSafeModeOk() { return 1; }
+
+ void DeregisterServices( api_service *p_service );
+
+ protected:
+ RECVS_DISPATCH;
+ };
+ }
+}
+
+#endif // !NULLSOFT_WAC_BROWSER_MAIN_H \ No newline at end of file
diff --git a/Src/Components/wac_browser/obj_embedded_browser.h b/Src/Components/wac_browser/obj_embedded_browser.h
new file mode 100644
index 00000000..6f29eb71
--- /dev/null
+++ b/Src/Components/wac_browser/obj_embedded_browser.h
@@ -0,0 +1,10 @@
+#ifndef NULLSOFT_WAC_BROWSER_OBJECT_INTERFACE_HEADER
+#define NULLSOFT_WAC_BROWSER_OBJECT_INTERFACE_HEADER
+
+#include "bfc/dispatch.h"
+
+
+
+
+
+#endif // !NULLSOFT_WAC_BROWSER_OBJECT_INTERFACE_HEADER
diff --git a/Src/Components/wac_browser/resource.h b/Src/Components/wac_browser/resource.h
new file mode 100644
index 00000000..25f07876
--- /dev/null
+++ b/Src/Components/wac_browser/resource.h
@@ -0,0 +1,14 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by _wac_browser.rc
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 101
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1001
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/Src/Components/wac_browser/resources/curtainProgress.png b/Src/Components/wac_browser/resources/curtainProgress.png
new file mode 100644
index 00000000..5dd024ac
--- /dev/null
+++ b/Src/Components/wac_browser/resources/curtainProgress.png
@@ -0,0 +1,5 @@
+PNG
+
+IHDRDYG~vpJѧ-<wCW"/\*{̃~bNS33 (ql^~eR6AR%
+:g>=PnY'PűEnG6UyCeOL%ERg&1+qo**3Gn~іl'.MN@(jʽh6h %ٺyB9DG@l|hܹŘgKnÆ)>89տTP*_@OnCLx+r!E_2rB;n JqfTK
+U(J>ɁnwU}3z71vbNYwؘ@BgBw0pG#qGc-֥=ﹼ=x6p:VVRh4hka \ No newline at end of file
diff --git a/Src/Components/wac_browser/resources/menuArrow.png b/Src/Components/wac_browser/resources/menuArrow.png
new file mode 100644
index 00000000..769a1e07
--- /dev/null
+++ b/Src/Components/wac_browser/resources/menuArrow.png
Binary files differ
diff --git a/Src/Components/wac_browser/resources/pages/dnsError.htm b/Src/Components/wac_browser/resources/pages/dnsError.htm
new file mode 100644
index 00000000..7ffa7a2a
--- /dev/null
+++ b/Src/Components/wac_browser/resources/pages/dnsError.htm
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Winamp Online Services Error Page</title>
+ <meta http-equiv="content-type" content="text/html;charset=utf-8" />
+ <meta http-equiv="Content-Style-Type" content="text/css" />
+ <link rel="stylesheet" href="./winampError.css" type="text/css" media="all"/>
+ <script src="./errorPageStrings.js"></script>
+ <script src="./errorPageFunctions.js"></script>
+</head>
+<body>
+<!-- Container -->
+<div id="errorContainer">
+ <!-- Icon -->
+ <div id="errorIcon"></div>
+ <!-- Error Body -->
+ <div id="errorBody">
+ <!-- Error Title -->
+ <div id="errorTitle"><h1 id="errorTitleText"><noscript>An Error Has Occurred</noscript></h1></div>
+ <!-- Error Code -->
+ <div id="errorCode"><noscript>HTTP - Error</noscript></div>
+ <!-- Error Description -->
+ <div id="errorDesc"><p id="errorDescText"><noscript>An error has occurred. We would show you more but your browser does not support javascript.</noscript></p></div>
+ <!-- Error Options -->
+ <div id="errorTryAgain"><a href="javascript:tryagain();">Try Again</a></div>
+ <div id="errorMore"><a href="javascript:togglemore();">More</a></div>
+ <!-- Additional Info -->
+ <div id="errorMoreInfo">
+ <table>
+ <tr><td nowrap>Service name:</td><td><script language=javascript>document.write(unescape(geturlparams('servicename')));</script></td></tr>
+ <tr><td nowrap>Error code:</td><td><script language=javascript>document.write(geterrorhex());</script></td></tr>
+ <tr><td nowrap>Url:</td><td><script language=javascript>document.write(unescape(geturlparams('url')));</script></td></tr>
+ <tr><td nowrap>Service id:</td><td><script language=javascript>document.write(geturlparams('svcid'));</script></td></tr>
+ <tr><td nowrap>Client id:</td><td><script language=javascript>document.write(geturlparams('uniqueid'));</script></td></tr>
+ </table>
+ </div>
+ </div>
+</div>
+<script language=javascript>
+window.onload = function(){populatepage();};
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/Src/Components/wac_browser/resources/pages/errorIcon.png b/Src/Components/wac_browser/resources/pages/errorIcon.png
new file mode 100644
index 00000000..969f5069
--- /dev/null
+++ b/Src/Components/wac_browser/resources/pages/errorIcon.png
Binary files differ
diff --git a/Src/Components/wac_browser/resources/pages/errorPageFunctions.js b/Src/Components/wac_browser/resources/pages/errorPageFunctions.js
new file mode 100644
index 00000000..315476a2
--- /dev/null
+++ b/Src/Components/wac_browser/resources/pages/errorPageFunctions.js
@@ -0,0 +1,288 @@
+function geturlparams( key )
+{
+ key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
+ var regexS = "[\\#&]"+key+"=([^&#]*)";
+ var regex = new RegExp( regexS );
+ var results = regex.exec( window.location.href );
+ if( results == null )
+ return "";
+ else
+ return results[1];
+}
+function geterrorhex()
+{
+ var signedInt=geturlparams('errorcode');
+ return "0x" + CvtI32(signedInt).toUpperCase();
+}
+function bitStr(N, bits)
+{
+ var S = "", Q
+ while (bits--) { S = (Q=N%2) + S ; N = (N-Q)/2 }
+ return S;
+}
+function hex(N, bits)
+{
+ return (0x10000 + N).toString(16).substring(5-bits)
+}
+function Four(d, c, b, a, bits)
+{
+ return hex(d, bits) + hex(c, bits) + hex(b, bits) + hex(a, bits)
+}
+function CvtI32(F)
+{
+ var X = F |0, a, b, c, d
+ var ba = bitStr(a = X & 0xFF, 8)
+ var bb = bitStr(b = X >> 8 & 0xFF, 8)
+ var bc = bitStr(c = X >> 16 & 0xFF, 8)
+ var bd = bitStr(d = X >> 24 & 0xFF, 8)
+ var hex = Four(d, c, b, a, 2)
+ return hex;
+}
+function tryagain()
+{
+ window.location.replace(unescape(geturlparams('url')));
+}
+function togglemore()
+{
+ var display=document.getElementById("errorMoreInfo").style.display;
+ if (display == "block") {
+ document.getElementById("errorMoreInfo").style.display="none";
+ }
+ else {
+ document.getElementById("errorMoreInfo").style.display="block";
+ }
+}
+function populatepage()
+{
+ var errorcode = parseInt(geturlparams('errorcode'));
+ switch (errorcode)
+ {
+ case 404:
+ var errorTitle = errorTitle404;
+ var errorCode = errorCode404;
+ var errorDescription = errorDescription404;
+ break;
+ case 403:
+ var errorTitle = errorTitle403;
+ var errorCode = errorCode403;
+ var errorDescription = errorDescription403;
+ break;
+ case 500:
+ var errorTitle = errorTitle500;
+ var errorCode = errorCode500;
+ var errorDescription = errorDescription500;
+ break;
+ case 503:
+ var errorTitle = errorTitle503;
+ var errorCode = errorCode503;
+ var errorDescription = errorDescription503;
+ break;
+ case 502:
+ var errorTitle = errorTitle502;
+ var errorCode = errorCode502;
+ var errorDescription = errorDescription502;
+ break;
+ case 501:
+ var errorTitle = errorTitle501;
+ var errorCode = errorCode501;
+ var errorDescription = errorDescription501;
+ break;
+ case 504:
+ var errorTitle = errorTitle504;
+ var errorCode = errorCode504;
+ var errorDescription = errorDescription504;
+ break;
+ case 505:
+ var errorTitle = errorTitle505;
+ var errorCode = errorCode505;
+ var errorDescription = errorDescription505;
+ break;
+ case 400:
+ var errorTitle = errorTitle400;
+ var errorCode = errorCode400;
+ var errorDescription = errorDescription400;
+ break;
+ case 401:
+ var errorTitle = errorTitle401;
+ var errorCode = errorCode401;
+ var errorDescription = errorDescription401;
+ break;
+ case 402:
+ var errorTitle = errorTitle402;
+ var errorCode = errorCode402;
+ var errorDescription = errorDescription402;
+ break;
+ case 405:
+ var errorTitle = errorTitle405;
+ var errorCode = errorCode405;
+ var errorDescription = errorDescription405;
+ break;
+ case 406:
+ var errorTitle = errorTitle406;
+ var errorCode = errorCode406;
+ var errorDescription = errorDescription406;
+ break;
+ case 407:
+ var errorTitle = errorTitle407;
+ var errorCode = errorCode407;
+ var errorDescription = errorDescription407;
+ break;
+ case 408:
+ var errorTitle = errorTitle408;
+ var errorCode = errorCode408;
+ var errorDescription = errorDescription408;
+ break;
+ case 409:
+ var errorTitle = errorTitle409;
+ var errorCode = errorCode409;
+ var errorDescription = errorDescription409;
+ break;
+ case 410:
+ var errorTitle = errorTitle410;
+ var errorCode = errorCode410;
+ var errorDescription = errorDescription410;
+ break;
+ case 411:
+ var errorTitle = errorTitle411;
+ var errorCode = errorCode411;
+ var errorDescription = errorDescription411;
+ break;
+ case 413:
+ var errorTitle = errorTitle413;
+ var errorCode = errorCode413;
+ var errorDescription = errorDescription413;
+ break;
+ case 414:
+ var errorTitle = errorTitle414;
+ var errorCode = errorCode414;
+ var errorDescription = errorDescription414;
+ break;
+ case 415:
+ var errorTitle = errorTitle415;
+ var errorCode = errorCode415;
+ var errorDescription = errorDescription415;
+ break;
+ case -2146697214:
+ var errorTitle = errorTitle800c0002;
+ var errorCode = errorCode800c0002;
+ var errorDescription = errorDescription800c0002;
+ break;
+ case -2146697213:
+ var errorTitle = errorTitle800c0003;
+ var errorCode = errorCode800c0003;
+ var errorDescription = errorDescription800c0003;
+ break;
+ case -2146697212:
+ var errorTitle = errorTitle800c0004;
+ var errorCode = errorCode800c0004;
+ var errorDescription = errorDescription800c0004;
+ break;
+ case -2146697211:
+ var errorTitle = errorTitle800c0005;
+ var errorCode = errorCode800c0005;
+ var errorDescription = errorDescription800c0005;
+ break;
+ case -2146697210:
+ var errorTitle = errorTitle800c0006;
+ var errorCode = errorCode800c0006;
+ var errorDescription = errorDescription800c0006;
+ break;
+ case -2146697209:
+ var errorTitle = errorTitle800c0007;
+ var errorCode = errorCode800c0007;
+ var errorDescription = errorDescription800c0007;
+ break;
+ case -2146697208:
+ var errorTitle = errorTitle800c0008;
+ var errorCode = errorCode800c0008;
+ var errorDescription = errorDescription800c0008;
+ break;
+ case -2146697207:
+ var errorTitle = errorTitle800c0009;
+ var errorCode = errorCode800c0009;
+ var errorDescription = errorDescription800c0009;
+ break;
+ case -2146697206:
+ var errorTitle = errorTitle800c000a;
+ var errorCode = errorCode800c000a;
+ var errorDescription = errorDescription800c000a;
+ break;
+ case -2146697205:
+ var errorTitle = errorTitle800c000b;
+ var errorCode = errorCode800c000b;
+ var errorDescription = errorDescription800c000b;
+ break;
+ case -2146697204:
+ var errorTitle = errorTitle800c000c;
+ var errorCode = errorCode800c000c;
+ var errorDescription = errorDescription800c000c;
+ break;
+ case -2146697203:
+ var errorTitle = errorTitle800c000d;
+ var errorCode = errorCode800c000d;
+ var errorDescription = errorDescription800c000d;
+ break;
+ case -2146697202:
+ var errorTitle = errorTitle800c000e;
+ var errorCode = errorCode800c000e;
+ var errorDescription = errorDescription800c000e;
+ break;
+ case -2146697201:
+ var errorTitle = errorTitle800c000f;
+ var errorCode = errorCode800c000f;
+ var errorDescription = errorDescription800c000f;
+ break;
+ case -2146697200:
+ var errorTitle = errorTitle800c0010;
+ var errorCode = errorCode800c0010;
+ var errorDescription = errorDescription800c0010;
+ break;
+ case -2146697196:
+ var errorTitle = errorTitle800c0014;
+ var errorCode = errorCode800c0014;
+ var errorDescription = errorDescription800c0014;
+ break;
+ case -2146697195:
+ var errorTitle = errorTitle800c0015;
+ var errorCode = errorCode800c0015;
+ var errorDescription = errorDescription800c0015;
+ break;
+ case -2146697194:
+ var errorTitle = errorTitle800c0016;
+ var errorCode = errorCode800c0016;
+ var errorDescription = errorDescription800c0016;
+ break;
+ case -2146697193:
+ var errorTitle = errorTitle800c0017;
+ var errorCode = errorCode800c0017;
+ var errorDescription = errorDescription800c0017;
+ break;
+ case -2146697192:
+ var errorTitle = errorTitle800c0018;
+ var errorCode = errorCode800c0018;
+ var errorDescription = errorDescription800c0018;
+ break;
+ case -2146697960:
+ var errorTitle = errorTitle800c0100;
+ var errorCode = errorCode800c0100;
+ var errorDescription = errorDescription800c0100;
+ break;
+ case -2146696704:
+ var errorTitle = errorTitle800c0200;
+ var errorCode = errorCode800c0200;
+ var errorDescription = errorDescription800c0200;
+ break;
+ case -2146696448:
+ var errorTitle = errorTitle800c0300;
+ var errorCode = errorCode800c0300;
+ var errorDescription = errorDescription800c0300;
+ break;
+ default:
+ var errorTitle = errorTitleUnknown;
+ var errorCode = errorCodeUnknown;
+ var errorDescription = errorDescriptionUnknown;
+ }
+ document.getElementById("errorTitleText").innerHTML = errorTitle;
+ document.getElementById("errorCode").innerHTML = errorCode;
+ document.getElementById("errorDescText").innerHTML = errorDescription;
+} \ No newline at end of file
diff --git a/Src/Components/wac_browser/resources/pages/errorPageStrings.js b/Src/Components/wac_browser/resources/pages/errorPageStrings.js
new file mode 100644
index 00000000..f011d690
--- /dev/null
+++ b/Src/Components/wac_browser/resources/pages/errorPageStrings.js
@@ -0,0 +1,138 @@
+var errorTitleUnknown = "An Unknown Error has occurred";
+var errorCodeUnknown = "Unknown Error";
+var errorDescriptionUnknown = "Winamp has received an unknown error from the Online Service.";
+var errorTitle400 = "Bad Request";
+var errorCode400 = "HTTP 400 - Bad Request";
+var errorDescription400 = "The request to the Online Service has not been properly formatted, there is likely a syntax error in the URL or elsewhere in the request. This is most likely due to an error in the Online Services code.";
+var errorTitle401 = "Request is Unauthorized";
+var errorCode401 = "HTTP 401 - Unauthorized";
+var errorDescription401 = "The Online Service has made a request that requires HTTP authentication, and the request was not authorized by the server.";
+var errorTitle402 = "Payment Required";
+var errorCode402 = "HTTP 402 - Payment Required";
+var errorDescription402 = "The Online Service submitted a request that was not authorized, because payment is required.";
+var errorTitle403 = "Access has been denied";
+var errorCode403 = "HTTP 403 - Forbidden";
+var errorDescription403 = "Winamp was able to connect to the server for this Online Service, however the service has returned an error indicating that you do not have access to the page. This may be caused by a problem with the webserver configuration or other problem with the Online Service.";
+var errorTitle404 = "The page cannot be found";
+var errorCode404 = "HTTP 404 - File Not Found";
+var errorDescription404 = "Winamp was able to connect to the server for this Online Service, however the service has returned an error indicating that the page requested can not be found. This may be caused by a broken link, or other problem with the Online Service.";
+var errorTitle405 = "The requested method is not allowed";
+var errorCode405 = "HTTP 405 - Method Not Allowed";
+var errorDescription405 = "The request method specified by the online service is not allowed by the server, this is likely due to a server misconfiguration, or an attempt by the online service to use a webservice in a way it does not allow";
+var errorTitle406 = "The response is not acceptable";
+var errorCode406 = "HTTP 406 - Not Acceptable";
+var errorDescription406 = "The Online Service has made a request to a webserver, and the webserver is not able to respond in a format that the request has stated to be acceptable.";
+var errorTitle407 = "Proxy authentication is required";
+var errorCode407 = "HTTP 407 - Proxy Authentication Required";
+var errorDescription407 = "The Online Service has made a request to a proxy server, and the proxy server requires that the request be authenticated.";
+var errorTitle408 = "The request had timed out";
+var errorCode408 = "HTTP 408 - Request Timeout";
+var errorDescription408 = "Winamp did not send a request issued by the Online Service within the length of time that the Online Service would wait for the request.";
+var errorTitle409 = "A conflict has occurred";
+var errorCode409 = "HTTP 409 - Conflict";
+var errorDescription409 = "The Online Service has made a request to a server where a conflicting request has been made.";
+var errorTitle410 = "The requested page is gone";
+var errorCode410 = "HTTP 410 - Gone";
+var errorDescription410 = "The page requested by the Online Service is gone. Permanently. No forwarding address is known";
+var errorTitle411 = "Request length must be specified";
+var errorCode411 = "HTTP 411 - Length Required";
+var errorDescription411 = "The Online Service has made a request to a server that requires that the request specify the length of the request, and the Online Service has not specified the length.";
+var errorTitle413 = "The request is too large";
+var errorCode413 = "HTTP 413 - Request Entity Too Large";
+var errorDescription413 = "The Online Service has submitted a request to a webserver that has been refused because the request is too large.";
+var errorTitle414 = "The request is too large";
+var errorCode414 = "HTTP 414 - Request-URI Too Long";
+var errorDescription414 = "The Online Service has made a request to a server that has been refused because the request URI is too long, this is likely due to an problem with the Online Service adding too many query parameters.";
+var errorTitle415 = "The media type is not supported";
+var errorCode415 = "HTTP 415 - Unsupported Media Type";
+var errorDescription415 = "The Online Service has made a request to a resource on a server that is being refused because the request is not in a format that is supported for the request method being used.";
+var errorTitle500 = "An internal server error has occured";
+var errorCode500 = "HTTP 500 - Internal Server Error";
+var errorDescription500 = "The Online Service has made a request to a server that has encountered an error preventing the completion of the response.";
+var errorTitle501 = "Method not implemented";
+var errorCode501 = "HTTP 501 - Not Implemented";
+var errorDescription501 = "The Online Service has made a request to a server using a request method that the server does not support.";
+var errorTitle502 = "Bad response from proxy";
+var errorCode502 = "HTTP 502 - Bad Gateway";
+var errorDescription502 = "The Online Service has made a request to a server acting as a proxy or a gateway. The server has not received a valid response.";
+var errorTitle503 = "The service is currently unavailable";
+var errorCode503 = "HTTP 503 - Service Unavailable";
+var errorDescription503 = "The Online Service has made a request to a server that is currently unable to service the request. This may be temporary due to the server current load.";
+var errorTitle504 = "The proxy has timed out.";
+var errorCode504 = "HTTP 504 - Gateway Timeout";
+var errorDescription504 = "The Online Service has made a request to a server acting as a proxy, and this server has not received a timely response.";
+var errorTitle505 = "The HTTP version is not supported";
+var errorCode505 = "HTTP 505 - HTTP Version Not Supported";
+var errorDescription505 = "Winamp has made a request to the Online Service in an HTTP version not supported by the Online Service. This is either a server configuration problem with the Online Service, or you may need to change your browser's HTTP protocol settings.";
+
+var errorDnsDescription = "The request for the Online Service has returned a resource not found error from your browser, please ensure that you are connected to the Internet.";
+
+var errorTitle800c0005 = "The server or proxy was not found.";
+var errorCode800c0005 = "Resource Not Found";
+var errorDescription800c0005 = "The request for the Online Service has returned a resource not found error from your browser, please ensure that you are connected to the Internet.";
+var errorTitle800c000f = "Unable to load data from the server.";
+var errorCode800c000f = "Cannot Load Data";
+var errorDescription800c000f = errorDnsDescription;
+var errorTitle800c0002 = "The URL could not be parsed.";
+var errorCode800c0002 = "Invalid URL";
+var errorDescription800c0002 = errorDnsDescription;
+var errorTitle800c0003 = "No Internet session was established.";
+var errorCode800c0003 = "No Session Found";
+var errorDescription800c0003 = errorDnsDescription;
+var errorTitle800c0004 = "The attempt to connect to the Internet has failed.";
+var errorCode800c0004 = "Unable To Connect";
+var errorDescription800c0004 = errorDnsDescription;
+var errorTitle800c0006 = "Requested object was not found.";
+var errorCode800c0006 = "Object Not Found";
+var errorDescription800c0006 = errorDnsDescription;
+var errorTitle800c0007 = "Requested data is not available.";
+var errorCode800c0007 = "Data Not Available";
+var errorDescription800c0007 = errorDnsDescription;
+var errorTitle800c0008 = "The download has failed (the connection was interrupted).";
+var errorCode800c0008 = "Download Failed";
+var errorDescription800c0008 = errorDnsDescription;
+var errorTitle800c0009 = "Authentication is needed to access the object.";
+var errorCode800c0009 = "Authentication Required";
+var errorDescription800c0009 = errorDnsDescription;
+var errorTitle800c000a = "Required media not available or valid.";
+var errorCode800c000a = "No Valid Media";
+var errorDescription800c000a = errorDnsDescription;
+var errorTitle800c000b = "The Internet connection has timed out.";
+var errorCode800c000b = "Connection Timeout";
+var errorDescription800c000b = errorDnsDescription;
+var errorTitle800c000c = "Request is invalid.";
+var errorCode800c000c = "Invalid Request";
+var errorDescription800c000c = errorDnsDescription;
+var errorTitle800c000d = "Protocol is not recognized.";
+var errorCode800c000d = "Unknown Protocol";
+var errorDescription800c000d = errorDnsDescription;
+var errorTitle800c000e = "Navigation request has encountered a security issue.";
+var errorCode800c000e = "Security Problem";
+var errorDescription800c000e = errorDnsDescription;
+var errorTitle800c0010 = "Unable to create an instance of the object.";
+var errorCode800c0010 = "Cannot Instantiate Object";
+var errorDescription800c0010 = errorDnsDescription;
+var errorTitle800c0014 = "Attempt to redirect the navigation failed.";
+var errorCode800c0014 = "Redirect Failed";
+var errorDescription800c0014 = errorDnsDescription;
+var errorTitle800c0015 = "The request is being redirected to a directory.";
+var errorCode800c0015 = "Redirect To Directory";
+var errorDescription800c0015 = errorDnsDescription;
+var errorTitle800c0016 = "The requested resource could not be locked.";
+var errorCode800c0016 = "Cannot Lock Request";
+var errorDescription800c0016 = errorDnsDescription;
+var errorTitle800c0017 = "Reissue request with extended binding.";
+var errorCode800c0017 = "Use Extend Binding";
+var errorDescription800c0017 = errorDnsDescription;
+var errorTitle800c0018 = "Binding was terminated.";
+var errorCode800c0018 = "Terminated Bind";
+var errorDescription800c0018 = errorDnsDescription;
+var errorTitle800c0100 = "The component download was declined by the user.";
+var errorCode800c0100 = "Download Declined";
+var errorDescription800c0100 = errorDnsDescription;
+var errorTitle800c0200 = "Result is dispatched.";
+var errorCode800c0200 = "Result Dispatched";
+var errorDescription800c0200 = errorDnsDescription;
+var errorTitle800c0300 = "Cannot replace a protected System File Protection (SFP) file.";
+var errorCode800c0300 = "Cannot Replace SFP File ";
+var errorDescription800c0300 = errorDnsDescription; \ No newline at end of file
diff --git a/Src/Components/wac_browser/resources/pages/httpError.htm b/Src/Components/wac_browser/resources/pages/httpError.htm
new file mode 100644
index 00000000..f89a1927
--- /dev/null
+++ b/Src/Components/wac_browser/resources/pages/httpError.htm
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Winamp Online Services Error Page</title>
+ <meta http-equiv="content-type" content="text/html;charset=utf-8" />
+ <meta http-equiv="Content-Style-Type" content="text/css" />
+ <link rel="stylesheet" href="./winampError.css" type="text/css" media="all"/>
+ <script src="./errorPageStrings.js"></script>
+ <script src="./errorPageFunctions.js"></script>
+</head>
+<body>
+<!-- Container -->
+<div id="errorContainer">
+ <!-- Icon -->
+ <div id="errorIcon"></div>
+ <!-- Error Body -->
+ <div id="errorBody">
+ <!-- Error Title -->
+ <div id="errorTitle"><h1 id="errorTitleText"><noscript>An Error Has Occurred</noscript></h1></div>
+ <!-- Error Code -->
+ <div id="errorCode"><noscript>HTTP - Error</noscript></div>
+ <!-- Error Description -->
+ <div id="errorDesc"><p id="errorDescText"><noscript>An error has occurred. We would show you more but your browser does not support javascript.</noscript></p></div>
+ <!-- Error Options -->
+ <div id="errorTryAgain"><a href="javascript:tryagain();">Try Again</a></div>
+ <div id="errorMore"><a href="javascript:togglemore();">More</a></div>
+ <!-- Additional Info -->
+ <div id="errorMoreInfo">
+ <table>
+ <tr><td nowrap>Service name:</td><td><script language=javascript>document.write(unescape(geturlparams('servicename')));</script></td></tr>
+ <tr><td nowrap>Error code:</td><td><script language=javascript>document.write(geturlparams('errorcode'));</script></td></tr>
+ <tr><td nowrap>Url:</td><td><script language=javascript>document.write(unescape(geturlparams('url')));</script></td></tr>
+ <tr><td nowrap>Service id:</td><td><script language=javascript>document.write(geturlparams('svcid'));</script></td></tr>
+ <tr><td nowrap>Client id:</td><td><script language=javascript>document.write(geturlparams('uniqueid'));</script></td></tr>
+ </table>
+ </div>
+ </div>
+</div>
+<script language=javascript>
+window.onload = function(){populatepage();};
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/Src/Components/wac_browser/resources/pages/inetDisabled.htm b/Src/Components/wac_browser/resources/pages/inetDisabled.htm
new file mode 100644
index 00000000..70e20f59
--- /dev/null
+++ b/Src/Components/wac_browser/resources/pages/inetDisabled.htm
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Winamp Online Services Error Page</title>
+ <meta http-equiv="content-type" content="text/html;charset=utf-8" />
+ <meta http-equiv="Content-Style-Type" content="text/css" />
+ <link rel="stylesheet" href="./winampError.css" type="text/css" media="all"/>
+</head>
+<body>
+<!-- Container -->
+<div id="errorContainer">
+ <!-- Icon -->
+ <div id="errorIcon"></div>
+ <!-- Error Body -->
+ <div id="errorBody">
+ <!-- Error Title -->
+ <div id="errorTitle"><h1 id="errorTitleText">Internet Access Is Currently Disabled</h1></div>
+ <!-- Error Code -->
+ <div id="errorCode"><noscript>Internet Access Is Currently Disabled</noscript></div>
+ <!-- Error Description -->
+ <div id="errorDesc"><p id="errorDescText">Winamp has been configured to not access the internet which is why you are seeing this page.<br><br>If this is not intended or you would like to re-enable Winamp's internet access, this can be done by going to <b>Preferences</b> -> <b>General Preferences</b> -> Change '<b>Internet Connection Settings</b>' to a setting other than '<b>Not connected to the internet</b>' and then refresh this page.</p></div>
+ </div>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/Src/Components/wac_browser/resources/pages/navCancel.htm b/Src/Components/wac_browser/resources/pages/navCancel.htm
new file mode 100644
index 00000000..2c81143f
--- /dev/null
+++ b/Src/Components/wac_browser/resources/pages/navCancel.htm
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Winamp Online Services Error Page</title>
+ <meta http-equiv="content-type" content="text/html;charset=utf-8" />
+ <meta http-equiv="Content-Style-Type" content="text/css" />
+ <link rel="stylesheet" href="./winampError.css" type="text/css" media="all"/>
+</head>
+<body>
+<!-- Container -->
+<div id="errorContainer">
+ <!-- Icon -->
+ <div id="errorIcon"></div>
+ <!-- Error Body -->
+ <div id="errorBody">
+ <!-- Error Title -->
+ <div id="errorTitle"><h1 id="errorTitleText">Action Cancelled</h1></div>
+ <!-- Error Code -->
+ <div id="errorCode"><noscript>Action Cancelled</noscript></div>
+ <!-- Error Description -->
+ <div id="errorDesc"><p id="errorDescText">Navigation to the page has been cancelled.</p></div>
+ </div>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/Src/Components/wac_browser/resources/pages/winampError.css b/Src/Components/wac_browser/resources/pages/winampError.css
new file mode 100644
index 00000000..0bf0dbae
--- /dev/null
+++ b/Src/Components/wac_browser/resources/pages/winampError.css
@@ -0,0 +1,64 @@
+a {
+ text-decoration: none;
+}
+body {
+ font: message-box;
+}
+h1 {
+ font-size: 150%;
+}
+#errorContainer {
+ position: relative;
+ margin: 1.6em auto;
+ max-width: 42em;
+ min-width: 34em;
+ left: 15px;
+ width:70%;
+ _width: 420px;
+}
+#errorBody {
+ position:relative;
+}
+#errorIcon {
+ position:relative;
+ top: 53px;
+ left: -56px;
+ height:39px;
+ width:40px;
+ background-image:url(./errorIcon.png);
+ _background-image: none;
+}
+#errorTitleText {
+ position:relative;
+ top: 10px;
+}
+#errorTitle {
+ position: relative;
+ text-align: left;
+ display:inline-block;
+ border-bottom: ridge 1px;
+}
+#errorCode {
+ position: relative;
+ text-align:right;
+ margin-bottom: -.5em;
+}
+#errorDesc {
+ position: relative;
+ margin-bottom: -.5em;
+}
+#errorTryAgain {
+ position: relative;
+ text-align: left;
+ top: 1.2em;
+}
+#errorMore {
+ position: relative;
+ text-align:right;
+ border-bottom: ridge 1px;
+ padding-bottom: .2em;
+}
+#errorMoreInfo {
+ position:relative;
+ display: none;
+} \ No newline at end of file
diff --git a/Src/Components/wac_browser/resources/serviceIcon.png b/Src/Components/wac_browser/resources/serviceIcon.png
new file mode 100644
index 00000000..b644c91c
--- /dev/null
+++ b/Src/Components/wac_browser/resources/serviceIcon.png
Binary files differ
diff --git a/Src/Components/wac_browser/resources/toolbarAddress.png b/Src/Components/wac_browser/resources/toolbarAddress.png
new file mode 100644
index 00000000..94b55912
--- /dev/null
+++ b/Src/Components/wac_browser/resources/toolbarAddress.png
Binary files differ
diff --git a/Src/Components/wac_browser/resources/toolbarLarge.png b/Src/Components/wac_browser/resources/toolbarLarge.png
new file mode 100644
index 00000000..cf4c8abc
--- /dev/null
+++ b/Src/Components/wac_browser/resources/toolbarLarge.png
Binary files differ
diff --git a/Src/Components/wac_browser/resources/toolbarProgress.png b/Src/Components/wac_browser/resources/toolbarProgress.png
new file mode 100644
index 00000000..c252e884
--- /dev/null
+++ b/Src/Components/wac_browser/resources/toolbarProgress.png
Binary files differ
diff --git a/Src/Components/wac_browser/version.rc2 b/Src/Components/wac_browser/version.rc2
new file mode 100644
index 00000000..53057093
--- /dev/null
+++ b/Src/Components/wac_browser/version.rc2
@@ -0,0 +1,39 @@
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+#include "../../Winamp/buildType.h"
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION WINAMP_PRODUCTVER
+ PRODUCTVERSION WINAMP_PRODUCTVER
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "CompanyName", "Winamp SA"
+ VALUE "FileDescription", "Winamp 5.x System Component"
+ VALUE "FileVersion", STR_WINAMP_PRODUCTVER
+ VALUE "InternalName", "wac_browser.w5s"
+ VALUE "LegalCopyright", "Copyright 2007-2022 Winamp SA"
+ VALUE "LegalTrademarks", "Nullsoft and Winamp are trademarks of Winamp SA"
+ VALUE "OriginalFilename", "wac_browser.w5s"
+ VALUE "ProductName", "Winamp Embedded Browser Service"
+ VALUE "ProductVersion", STR_WINAMP_PRODUCTVER
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
diff --git a/Src/Components/wac_browser/wac_browser.h b/Src/Components/wac_browser/wac_browser.h
new file mode 100644
index 00000000..de855fba
--- /dev/null
+++ b/Src/Components/wac_browser/wac_browser.h
@@ -0,0 +1,21 @@
+#ifndef NULLSOFT_WAC_DOWNLOADS_H
+#define NULLSOFT_WAC_DOWNLOADS_H
+
+#include "../../Agave/Component/ifc_wa5component.h"
+
+
+class wac_downloads : public ifc_wa5component
+{
+public:
+ wac_downloads();
+
+ void RegisterServices( api_service *service );
+ int RegisterServicesSafeModeOk();
+
+ void DeregisterServices( api_service *service );
+
+protected:
+ RECVS_DISPATCH;
+};
+
+#endif // !NULLSOFT_WAC_DOWNLOADS_H
diff --git a/Src/Components/wac_browser/wac_browser.rc b/Src/Components/wac_browser/wac_browser.rc
new file mode 100644
index 00000000..fcff7711
--- /dev/null
+++ b/Src/Components/wac_browser/wac_browser.rc
@@ -0,0 +1,76 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.K.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "#include ""version.rc2""\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+#endif // English (U.K.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+#include "version.rc2"
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/Src/Components/wac_browser/wac_browser.vcxproj b/Src/Components/wac_browser/wac_browser.vcxproj
new file mode 100644
index 00000000..d9ca824e
--- /dev/null
+++ b/Src/Components/wac_browser/wac_browser.vcxproj
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="17.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{2E0F69D7-1DA4-4207-97A4-B8B084776B9C}</ProjectGuid>
+ <Keyword>QtVS_v304</Keyword>
+ <WindowsTargetPlatformVersion Condition="'$(Configuration)|$(Platform)' == 'Debug|Win32'">10.0.19041.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">10.0.19041.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion Condition="'$(Configuration)|$(Platform)' == 'Release|Win32'">10.0.19041.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion Condition="'$(Configuration)|$(Platform)'=='Release|x64'">10.0.19041.0</WindowsTargetPlatformVersion>
+ <QtMsBuild Condition="'$(QtMsBuild)'=='' OR !Exists('$(QtMsBuild)\qt.targets')">$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <PlatformToolset>v142</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')">
+ <Import Project="$(QtMsBuild)\qt_defaults.props" />
+ </ImportGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|Win32'" Label="QtSettings">
+ <QtInstall>5.15.2_msvc2019</QtInstall>
+ <QtModules>core;network;widgets;concurrent;webview</QtModules>
+ <QtBuildConfig>debug</QtBuildConfig>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="QtSettings">
+ <QtInstall>5.15.2_msvc2019</QtInstall>
+ <QtModules>core;network;widgets;concurrent;webview</QtModules>
+ <QtBuildConfig>debug</QtBuildConfig>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|Win32'" Label="QtSettings">
+ <QtInstall>5.15.2_msvc2019</QtInstall>
+ <QtModules>core;network;widgets;concurrent;webview</QtModules>
+ <QtBuildConfig>release</QtBuildConfig>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="QtSettings">
+ <QtInstall>5.15.2_msvc2019</QtInstall>
+ <QtModules>core;network;widgets;concurrent;webview</QtModules>
+ <QtBuildConfig>release</QtBuildConfig>
+ </PropertyGroup>
+ <Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')">
+ <Message Importance="High" Text="QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly." />
+ </Target>
+ <ImportGroup Label="ExtensionSettings" />
+ <ImportGroup Label="Shared" />
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)' == 'Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(QtMsBuild)\Qt.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(QtMsBuild)\Qt.props" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)' == 'Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(QtMsBuild)\Qt.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(QtMsBuild)\Qt.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|Win32'">
+ <OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
+ <IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
+ <TargetExt>.w5s</TargetExt>
+ <LinkIncremental>false</LinkIncremental>
+ <IncludePath>$(IncludePath)</IncludePath>
+ <LibraryPath>$(LibraryPath)</LibraryPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <TargetExt>.w5s</TargetExt>
+ <LinkIncremental>false</LinkIncremental>
+ <IncludePath>$(IncludePath)</IncludePath>
+ <LibraryPath>$(LibraryPath)</LibraryPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|Win32'">
+ <OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
+ <IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
+ <TargetExt>.w5s</TargetExt>
+ <LinkIncremental>false</LinkIncremental>
+ <IncludePath>$(IncludePath)</IncludePath>
+ <LibraryPath>$(LibraryPath)</LibraryPath>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <TargetExt>.w5s</TargetExt>
+ <LinkIncremental>false</LinkIncremental>
+ <IncludePath>$(IncludePath)</IncludePath>
+ <LibraryPath>$(LibraryPath)</LibraryPath>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\Wasabi;%(AdditionalIncludeDirectories);$(Qt_INCLUDEPATH_)</AdditionalIncludeDirectories>
+ <WarningLevel>Level3</WarningLevel>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <StringPooling>true</StringPooling>
+ <FunctionLevelLinking>
+ </FunctionLevelLinking>
+ </ClCompile>
+ <Link>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>shlwapi.lib;%(AdditionalDependencies);$(Qt_LIBS_)</AdditionalDependencies>
+ <OptimizeReferences>false</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ </Link>
+ <PostBuildEvent>
+ <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System\</Command>
+ <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System'</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\Wasabi;%(AdditionalIncludeDirectories);$(Qt_INCLUDEPATH_)</AdditionalIncludeDirectories>
+ <WarningLevel>Level3</WarningLevel>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <StringPooling>true</StringPooling>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ </ClCompile>
+ <Link>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ </Link>
+ <PostBuildEvent>
+ <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System\</Command>
+ <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System'</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+ <AdditionalIncludeDirectories>..\..\Wasabi;%(AdditionalIncludeDirectories);$(Qt_INCLUDEPATH_)</AdditionalIncludeDirectories>
+ <SupportJustMyCode>false</SupportJustMyCode>
+ </ClCompile>
+ <Link>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <AdditionalDependencies>shlwapi.lib;%(AdditionalDependencies);$(Qt_LIBS_)</AdditionalDependencies>
+ </Link>
+ <PostBuildEvent>
+ <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System\
+xcopy /Y /D $(IntDir)$(TargetName).pdb ..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System\</Command>
+ <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System'</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
+ <AdditionalIncludeDirectories>..\..\Wasabi;%(AdditionalIncludeDirectories);$(Qt_INCLUDEPATH_)</AdditionalIncludeDirectories>
+ <SupportJustMyCode>false</SupportJustMyCode>
+ </ClCompile>
+ <Link>
+ <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <AdditionalDependencies>shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ <PostBuildEvent>
+ <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System\
+xcopy /Y /D $(IntDir)$(TargetName).pdb ..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System\</Command>
+ <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System'</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgTriplet>x86-windows-static-md</VcpkgTriplet>
+ <VcpkgInstalledDir>
+ </VcpkgInstalledDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Vcpkg">
+ <VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgTriplet>x86-windows-static-md</VcpkgTriplet>
+ <VcpkgInstalledDir />
+ </PropertyGroup>
+ <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgTriplet>x86-windows-static-md</VcpkgTriplet>
+ <VcpkgInstalledDir>
+ </VcpkgInstalledDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Vcpkg">
+ <VcpkgUseStatic>true</VcpkgUseStatic>
+ <VcpkgTriplet>x86-windows-static-md</VcpkgTriplet>
+ <VcpkgInstalledDir />
+ </PropertyGroup>
+ <PropertyGroup Label="Vcpkg">
+ <VcpkgEnabled>false</VcpkgEnabled>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|Win32'" Label="Configuration">
+ <ClCompile>
+ <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <Optimization>Disabled</Optimization>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;WAC_BROWSER_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ClCompile>
+ <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <Optimization>Disabled</Optimization>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;WAC_BROWSER_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)' == 'Release|Win32'" Label="Configuration">
+ <ClCompile>
+ <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <DebugInformationFormat>None</DebugInformationFormat>
+ <Optimization>MinSpace</Optimization>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;WAC_BROWSER_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ClCompile>
+ <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <DebugInformationFormat>None</DebugInformationFormat>
+ <Optimization>MinSpace</Optimization>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;WAC_BROWSER_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClInclude Include="api__wac_browser.h" />
+ <ClInclude Include="obj_embedded_browser.h" />
+ <ClInclude Include="wac_browser_factory.h" />
+ <ClInclude Include="resource.h" />
+ <ClInclude Include="wac_browser_global.h" />
+ <ClInclude Include="main.h" />
+ <ClCompile Include="wac_browser_factory.cpp" />
+ <ClCompile Include="main.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\Wasabi\Wasabi.vcxproj">
+ <Project>{3e0bfa8a-b86a-42e9-a33f-ec294f823f7f}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="wac_browser.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="version.rc2" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
+ <Import Project="$(QtMsBuild)\qt.targets" />
+ </ImportGroup>
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/Src/Components/wac_browser/wac_browser.vcxproj.filters b/Src/Components/wac_browser/wac_browser.vcxproj.filters
new file mode 100644
index 00000000..3899d4be
--- /dev/null
+++ b/Src/Components/wac_browser/wac_browser.vcxproj.filters
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>qml;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>qrc;rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ <Filter Include="Form Files">
+ <UniqueIdentifier>{99349809-55BA-4b9d-BF79-8FDBB0286EB3}</UniqueIdentifier>
+ <Extensions>ui</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="main.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClInclude Include="main.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="wac_browser_global.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClCompile Include="wac_browser_factory.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="api__wac_browser.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="wac_browser_factory.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="resource.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="obj_embedded_browser.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="wac_browser.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="version.rc2">
+ <Filter>Resource Files</Filter>
+ </None>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/Src/Components/wac_browser/wac_browser_factory.cpp b/Src/Components/wac_browser/wac_browser_factory.cpp
new file mode 100644
index 00000000..11c3ff8d
--- /dev/null
+++ b/Src/Components/wac_browser/wac_browser_factory.cpp
@@ -0,0 +1,109 @@
+#include "wac_browser_factory.h"
+
+#include <QtGlobal>
+
+static const std::string _serviceName = "Embedded Browser";
+static const std::string _testString = "wac_browser";
+
+// {2E0F69D7-1DA4-4207-97A4-B8B084776B9C} // It's the UUID of the project itself like indicated into the vcxproj
+static const GUID api_wac_browser_GUID = { 0x2e0f69d7, 0x1da4, 0x4207, { 0x97, 0xa4, 0xb8, 0xb0, 0x84, 0x77, 0x6b, 0x9c } };
+
+
+FOURCC wa::Components::WAC_BrowserFactory::GetServiceType()
+{
+ return WaSvc::UNIQUE;
+}
+
+const char *wa::Components::WAC_BrowserFactory::GetServiceName()
+{
+ return _serviceName.c_str();
+}
+
+const char *wa::Components::WAC_BrowserFactory::GetTestString()
+{
+ return _testString.c_str();;
+}
+
+GUID wa::Components::WAC_BrowserFactory::GetGUID()
+{
+ return api_wac_browser_GUID;
+}
+
+
+void *wa::Components::WAC_BrowserFactory::GetInterface( int p_global_lock )
+{
+ Q_UNUSED( p_global_lock )
+
+ //OmBrowserObject *browserObject = NULL;
+
+ //HRESULT hr = OmBrowserObject::CreateInstance( &browserObject );
+ //if ( FAILED( hr ) )
+ // browserObject = NULL;
+
+ //return browserObject;
+
+ return NULL;
+}
+
+int wa::Components::WAC_BrowserFactory::ReleaseInterface( void *p_ifc )
+{
+ //obj_ombrowser *object = (obj_ombrowser *)ifc;
+ //if ( object != NULL )
+ // object->Release();
+
+ return 1;
+}
+
+
+int wa::Components::WAC_BrowserFactory::SupportNonLockingInterface()
+{
+ return 1;
+}
+
+int wa::Components::WAC_BrowserFactory::ServiceNotify( int p_msg, int p_param1, int p_param2 )
+{
+ Q_UNUSED( p_msg )
+ Q_UNUSED( p_param1 )
+ Q_UNUSED( p_param2 )
+
+ return 1;
+}
+
+
+HRESULT wa::Components::WAC_BrowserFactory::Register( api_service *p_service )
+{
+ if ( p_service == NULL )
+ return E_INVALIDARG;
+
+ p_service->service_register( this );
+
+ return S_OK;
+}
+
+HRESULT wa::Components::WAC_BrowserFactory::Unregister( api_service *p_service )
+{
+ if ( p_service == NULL )
+ return E_INVALIDARG;
+
+ p_service->service_deregister( this );
+
+ return S_OK;
+}
+
+
+#ifdef CBCLASS
+#undef CBCLASS
+#endif
+
+#define CBCLASS wa::Components::WAC_BrowserFactory
+START_DISPATCH;
+CB( WASERVICEFACTORY_GETSERVICETYPE, GetServiceType )
+CB( WASERVICEFACTORY_GETSERVICENAME, GetServiceName )
+CB( WASERVICEFACTORY_GETGUID, GetGUID )
+CB( WASERVICEFACTORY_GETINTERFACE, GetInterface )
+CB( WASERVICEFACTORY_SUPPORTNONLOCKINGGETINTERFACE, SupportNonLockingInterface )
+CB( WASERVICEFACTORY_RELEASEINTERFACE, ReleaseInterface )
+CB( WASERVICEFACTORY_GETTESTSTRING, GetTestString )
+CB( WASERVICEFACTORY_SERVICENOTIFY, ServiceNotify )
+END_DISPATCH;
+#undef CBCLASS
diff --git a/Src/Components/wac_browser/wac_browser_factory.h b/Src/Components/wac_browser/wac_browser_factory.h
new file mode 100644
index 00000000..d810d667
--- /dev/null
+++ b/Src/Components/wac_browser/wac_browser_factory.h
@@ -0,0 +1,43 @@
+#ifndef NULLSOFT_FACTORY_WAC_BROWSER_H
+#define NULLSOFT_FACTORY_WAC_BROWSER_H
+
+#include <string>
+
+#include "api__wac_browser.h"
+
+#include "api/service/services.h"
+#include "api/service/waservicefactory.h"
+
+namespace wa
+{
+ namespace Components
+ {
+ class WAC_BrowserFactory : public waServiceFactory
+ {
+ public:
+ //WAC_BrowserFactory() {}
+ //~WAC_BrowserFactory() {}
+
+ FOURCC GetServiceType();
+ const char *GetServiceName();
+ const char *GetTestString();
+ GUID GetGUID();
+
+ void *GetInterface( int p_global_lock );
+ int ReleaseInterface( void *p_ifc );
+
+ int SupportNonLockingInterface();
+ int ServiceNotify( int p_msg, int p_param1, int p_param2 );
+
+
+ HRESULT Register( api_service *p_service );
+ HRESULT Unregister( api_service *p_service );
+
+
+ protected:
+ RECVS_DISPATCH;
+ };
+ }
+}
+
+#endif // !NULLSOFT_FACTORY_WAC_BROWSER_H \ No newline at end of file
diff --git a/Src/Components/wac_browser/wac_browser_global.h b/Src/Components/wac_browser/wac_browser_global.h
new file mode 100644
index 00000000..44dc0eb8
--- /dev/null
+++ b/Src/Components/wac_browser/wac_browser_global.h
@@ -0,0 +1,16 @@
+#ifndef NULLSOFT_WAC_DOWNLOADS_GLOBAL_H
+#define NULLSOFT_WAC_DOWNLOADS_GLOBAL_H
+
+#include <QtCore/qglobal.h>
+
+#ifndef BUILD_STATIC
+# if defined(WAC_DOWNLOADS_LIB)
+# define WAC_DOWNLOADS_EXPORT Q_DECL_EXPORT
+# else
+# define WAC_DOWNLOADS_EXPORT Q_DECL_IMPORT
+# endif
+#else
+# define WAC_DOWNLOADS_EXPORT
+#endif
+
+#endif // !NULLSOFT_WAC_DOWNLOADS_GLOBAL_H \ No newline at end of file