mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-06 06:22:33 +00:00
bug 1289670 - Show plugin activation icon when navigator.mimetypes is queried r=mrbkap
This commit is contained in:
parent
0026e79c41
commit
c99449c15a
@ -30,7 +30,8 @@ NS_INTERFACE_MAP_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(nsMimeTypeArray,
|
||||
mWindow,
|
||||
mMimeTypes)
|
||||
mMimeTypes,
|
||||
mCTPMimeTypes)
|
||||
|
||||
nsMimeTypeArray::nsMimeTypeArray(nsPIDOMWindowInner* aWindow)
|
||||
: mWindow(aWindow)
|
||||
@ -57,6 +58,7 @@ void
|
||||
nsMimeTypeArray::Refresh()
|
||||
{
|
||||
mMimeTypes.Clear();
|
||||
mCTPMimeTypes.Clear();
|
||||
}
|
||||
|
||||
nsPIDOMWindowInner*
|
||||
@ -133,6 +135,10 @@ nsMimeTypeArray::NamedGetter(const nsAString& aName, bool &aFound)
|
||||
aFound = true;
|
||||
return mimeType;
|
||||
}
|
||||
nsMimeType* hiddenType = FindMimeType(mCTPMimeTypes, lowerName);
|
||||
if (hiddenType) {
|
||||
nsPluginArray::NotifyHiddenPluginTouched(hiddenType->GetEnabledPlugin());
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
@ -180,6 +186,7 @@ nsMimeTypeArray::EnsurePluginMimeTypes()
|
||||
}
|
||||
|
||||
pluginArray->GetMimeTypes(mMimeTypes);
|
||||
pluginArray->GetCTPMimeTypes(mCTPMimeTypes);
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(nsMimeType, AddRef)
|
||||
|
@ -48,6 +48,7 @@ protected:
|
||||
// mMimeTypes contains MIME types handled by plugins or by an OS
|
||||
// PreferredApplicationHandler.
|
||||
nsTArray<RefPtr<nsMimeType> > mMimeTypes;
|
||||
nsTArray<RefPtr<nsMimeType> > mCTPMimeTypes;
|
||||
};
|
||||
|
||||
class nsMimeType final : public nsWrapperCache
|
||||
|
@ -114,6 +114,24 @@ nsPluginArray::GetMimeTypes(nsTArray<RefPtr<nsMimeType>>& aMimeTypes)
|
||||
aMimeTypes.Sort();
|
||||
}
|
||||
|
||||
void
|
||||
nsPluginArray::GetCTPMimeTypes(nsTArray<RefPtr<nsMimeType>>& aMimeTypes)
|
||||
{
|
||||
aMimeTypes.Clear();
|
||||
|
||||
if (!AllowPlugins()) {
|
||||
return;
|
||||
}
|
||||
|
||||
EnsurePlugins();
|
||||
|
||||
GetPluginMimeTypes(mCTPPlugins, aMimeTypes);
|
||||
|
||||
// Alphabetize the enumeration order of non-hidden MIME types to reduce
|
||||
// fingerprintable entropy based on plugins' installation file times.
|
||||
aMimeTypes.Sort();
|
||||
}
|
||||
|
||||
nsPluginElement*
|
||||
nsPluginArray::Item(uint32_t aIndex)
|
||||
{
|
||||
@ -236,21 +254,26 @@ nsPluginArray::NamedGetter(const nsAString& aName, bool &aFound)
|
||||
if (!aFound) {
|
||||
nsPluginElement* hiddenPlugin = FindPlugin(mCTPPlugins, aName);
|
||||
if (hiddenPlugin) {
|
||||
HiddenPluginEventInit init;
|
||||
init.mTag = hiddenPlugin->PluginTag();
|
||||
nsCOMPtr<nsIDocument> doc = hiddenPlugin->GetParentObject()->GetDoc();
|
||||
RefPtr<HiddenPluginEvent> event =
|
||||
HiddenPluginEvent::Constructor(doc, NS_LITERAL_STRING("HiddenPlugin"), init);
|
||||
event->SetTarget(doc);
|
||||
event->SetTrusted(true);
|
||||
event->WidgetEventPtr()->mFlags.mOnlyChromeDispatch = true;
|
||||
bool dummy;
|
||||
doc->DispatchEvent(event, &dummy);
|
||||
NotifyHiddenPluginTouched(hiddenPlugin);
|
||||
}
|
||||
}
|
||||
return plugin;
|
||||
}
|
||||
|
||||
void nsPluginArray::NotifyHiddenPluginTouched(nsPluginElement* aHiddenElement)
|
||||
{
|
||||
HiddenPluginEventInit init;
|
||||
init.mTag = aHiddenElement->PluginTag();
|
||||
nsCOMPtr<nsIDocument> doc = aHiddenElement->GetParentObject()->GetDoc();
|
||||
RefPtr<HiddenPluginEvent> event =
|
||||
HiddenPluginEvent::Constructor(doc, NS_LITERAL_STRING("HiddenPlugin"), init);
|
||||
event->SetTarget(doc);
|
||||
event->SetTrusted(true);
|
||||
event->WidgetEventPtr()->mFlags.mOnlyChromeDispatch = true;
|
||||
bool dummy;
|
||||
doc->DispatchEvent(event, &dummy);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
nsPluginArray::Length()
|
||||
{
|
||||
|
@ -41,6 +41,9 @@ public:
|
||||
void Invalidate();
|
||||
|
||||
void GetMimeTypes(nsTArray<RefPtr<nsMimeType>>& aMimeTypes);
|
||||
void GetCTPMimeTypes(nsTArray<RefPtr<nsMimeType>>& aMimeTypes);
|
||||
|
||||
static void NotifyHiddenPluginTouched(nsPluginElement* aElement);
|
||||
|
||||
// PluginArray WebIDL methods
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user