std::string GetUrl(NPP instance)
{
std::string origin;
NPVariant loc_value;
NPVariant href_value;
NPIdentifier href_id = NPN_GetStringIdentifier("href");
NPIdentifier location_id = NPN_GetStringIdentifier("location");
VOID_TO_NPVARIANT(loc_value);
VOID_TO_NPVARIANT(href_value);
do {
NPObject* win_obj;
if (NPN_GetValue(instance, NPNVWindowNPObject, &win_obj) !=
NPERR_NO_ERROR)
{
break;
}
if (!NPN_GetProperty(instance, win_obj, location_id, &loc_value) ||
!NPVARIANT_IS_OBJECT(loc_value))
{
break;
}
NPObject* loc_obj = NPVARIANT_TO_OBJECT(loc_value);
if (!NPN_GetProperty(instance, loc_obj, href_id, &href_value) ||
!NPVARIANT_IS_STRING(href_value))
{
break;
}
std::string href(NPVARIANT_TO_STRING(href_value).utf8characters,
NPVARIANT_TO_STRING(href_value).utf8length);
origin = href;
} while (0);
NPN_ReleaseVariantValue(&loc_value);
NPN_ReleaseVariantValue(&href_value);
return origin;
}