mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1150277 - Match hostname when removing GMP data. r=cpearce
This commit is contained in:
parent
103f987213
commit
048e54ab0d
@ -1023,8 +1023,30 @@ GeckoMediaPluginServiceParent::GetNodeId(const nsAString& aOrigin,
|
||||
return rv;
|
||||
}
|
||||
|
||||
static bool
|
||||
ExtractHostName(const nsACString& aOrigin, nsACString& aOutData)
|
||||
{
|
||||
nsCString str;
|
||||
str.Assign(aOrigin);
|
||||
int begin = str.Find("://");
|
||||
// The scheme is missing!
|
||||
if (begin == -1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
int end = str.RFind(":");
|
||||
// Remove the port number
|
||||
if (end != begin) {
|
||||
str.SetLength(end);
|
||||
}
|
||||
|
||||
nsDependentCSubstring host(str, begin + 3);
|
||||
aOutData.Assign(host);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
MatchOrigin(nsIFile* aPath, const nsACString& aOrigin)
|
||||
MatchOrigin(nsIFile* aPath, const nsACString& aSite)
|
||||
{
|
||||
// http://en.wikipedia.org/wiki/Domain_Name_System#Domain_name_syntax
|
||||
static const uint32_t MaxDomainLength = 253;
|
||||
@ -1032,11 +1054,11 @@ MatchOrigin(nsIFile* aPath, const nsACString& aOrigin)
|
||||
nsresult rv;
|
||||
nsCString str;
|
||||
rv = ReadFromFile(aPath, NS_LITERAL_CSTRING("origin"), str, MaxDomainLength);
|
||||
if (NS_SUCCEEDED(rv) && aOrigin.Equals(str)) {
|
||||
if (NS_SUCCEEDED(rv) && ExtractHostName(str, str) && str.Equals(aSite)) {
|
||||
return true;
|
||||
}
|
||||
rv = ReadFromFile(aPath, NS_LITERAL_CSTRING("topLevelOrigin"), str, MaxDomainLength);
|
||||
if (NS_SUCCEEDED(rv) && aOrigin.Equals(str)) {
|
||||
if (NS_SUCCEEDED(rv) && ExtractHostName(str, str) && str.Equals(aSite)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -1191,19 +1213,19 @@ GeckoMediaPluginServiceParent::ClearNodeIdAndPlugin(DirectoryFilter& aFilter)
|
||||
}
|
||||
|
||||
void
|
||||
GeckoMediaPluginServiceParent::ForgetThisSiteOnGMPThread(const nsACString& aOrigin)
|
||||
GeckoMediaPluginServiceParent::ForgetThisSiteOnGMPThread(const nsACString& aSite)
|
||||
{
|
||||
MOZ_ASSERT(NS_GetCurrentThread() == mGMPThread);
|
||||
LOGD(("%s::%s: origin=%s", __CLASS__, __FUNCTION__, aOrigin.Data()));
|
||||
LOGD(("%s::%s: origin=%s", __CLASS__, __FUNCTION__, aSite.Data()));
|
||||
|
||||
struct OriginFilter : public DirectoryFilter {
|
||||
explicit OriginFilter(const nsACString& aOrigin) : mOrigin(aOrigin) {}
|
||||
explicit OriginFilter(const nsACString& aSite) : mSite(aSite) {}
|
||||
virtual bool operator()(nsIFile* aPath) {
|
||||
return MatchOrigin(aPath, mOrigin);
|
||||
return MatchOrigin(aPath, mSite);
|
||||
}
|
||||
private:
|
||||
const nsACString& mOrigin;
|
||||
} filter(aOrigin);
|
||||
const nsACString& mSite;
|
||||
} filter(aSite);
|
||||
|
||||
ClearNodeIdAndPlugin(filter);
|
||||
}
|
||||
@ -1296,12 +1318,12 @@ GeckoMediaPluginServiceParent::ClearRecentHistoryOnGMPThread(PRTime aSince)
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
GeckoMediaPluginServiceParent::ForgetThisSite(const nsAString& aOrigin)
|
||||
GeckoMediaPluginServiceParent::ForgetThisSite(const nsAString& aSite)
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
return GMPDispatch(NS_NewRunnableMethodWithArg<nsCString>(
|
||||
this, &GeckoMediaPluginServiceParent::ForgetThisSiteOnGMPThread,
|
||||
NS_ConvertUTF16toUTF8(aOrigin)));
|
||||
NS_ConvertUTF16toUTF8(aSite)));
|
||||
}
|
||||
|
||||
static bool IsNodeIdValid(GMPParent* aParent) {
|
||||
|
@ -170,7 +170,7 @@ private:
|
||||
};
|
||||
|
||||
nsresult ReadSalt(nsIFile* aPath, nsACString& aOutData);
|
||||
bool MatchOrigin(nsIFile* aPath, const nsACString& aOrigin);
|
||||
bool MatchOrigin(nsIFile* aPath, const nsACString& aSite);
|
||||
|
||||
class GMPServiceParent final : public PGMPServiceParent
|
||||
{
|
||||
|
@ -6,7 +6,7 @@
|
||||
#include "nsISupports.idl"
|
||||
#include "nsIFile.idl"
|
||||
|
||||
[scriptable, uuid(5878366c-73f6-486e-ad2f-9aca602864e4)]
|
||||
[scriptable, uuid(4d50f2df-736d-41b8-9292-9067f6bcd892)]
|
||||
interface mozIGeckoMediaPluginChromeService : nsISupports
|
||||
{
|
||||
/**
|
||||
@ -28,9 +28,9 @@ interface mozIGeckoMediaPluginChromeService : nsISupports
|
||||
void removeAndDeletePluginDirectory(in AString directory);
|
||||
|
||||
/**
|
||||
* Clears storage data associated with the origin.
|
||||
* Clears storage data associated with the site.
|
||||
*/
|
||||
void forgetThisSite(in AString origin);
|
||||
void forgetThisSite(in AString site);
|
||||
|
||||
/**
|
||||
* Returns true if the given node id is allowed to store things
|
||||
|
Loading…
Reference in New Issue
Block a user