mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 964272 - Expose last modified time on plugin tags. r=bsmedberg
This commit is contained in:
parent
35457cf147
commit
f6e4d8b047
@ -5,7 +5,7 @@
|
||||
|
||||
#include "nsISupports.idl"
|
||||
|
||||
[scriptable, uuid(0354d96d-3fd3-4365-a0a2-6c807ec1ce95)]
|
||||
[scriptable, uuid(0e56f04d-cda4-4a55-ab83-e5e29ddd370e)]
|
||||
interface nsIPluginTag : nsISupports
|
||||
{
|
||||
// enabledState is stored as one of the following as an integer in prefs,
|
||||
@ -29,6 +29,8 @@ interface nsIPluginTag : nsISupports
|
||||
readonly attribute boolean clicktoplay;
|
||||
attribute unsigned long enabledState;
|
||||
|
||||
readonly attribute PRTime lastModifiedTime;
|
||||
|
||||
void getMimeTypes([optional] out unsigned long aCount,
|
||||
[retval, array, size_is(aCount)] out wstring aResults);
|
||||
void getMimeDescriptions([optional] out unsigned long aCount,
|
||||
|
@ -1776,13 +1776,12 @@ nsresult nsPluginHost::ScanPluginsDirectory(nsIFile *pluginsDir,
|
||||
continue;
|
||||
}
|
||||
|
||||
pluginTag = new nsPluginTag(&info);
|
||||
pluginTag = new nsPluginTag(&info, fileModTime);
|
||||
pluginFile.FreePluginInfo(info);
|
||||
if (!pluginTag)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
pluginTag->mLibrary = library;
|
||||
pluginTag->mLastModifiedTime = fileModTime;
|
||||
uint32_t state = pluginTag->GetBlocklistState();
|
||||
|
||||
// If the blocklist says it is risky and we have never seen this
|
||||
|
@ -62,7 +62,7 @@ GetStatePrefNameForPlugin(nsPluginTag* aTag)
|
||||
|
||||
/* nsPluginTag */
|
||||
|
||||
nsPluginTag::nsPluginTag(nsPluginInfo* aPluginInfo)
|
||||
nsPluginTag::nsPluginTag(nsPluginInfo* aPluginInfo, int64_t aLastModifiedTime)
|
||||
: mName(aPluginInfo->fName),
|
||||
mDescription(aPluginInfo->fDescription),
|
||||
mLibrary(nullptr),
|
||||
@ -71,7 +71,7 @@ nsPluginTag::nsPluginTag(nsPluginInfo* aPluginInfo)
|
||||
mFileName(aPluginInfo->fFileName),
|
||||
mFullPath(aPluginInfo->fFullPath),
|
||||
mVersion(aPluginInfo->fVersion),
|
||||
mLastModifiedTime(0),
|
||||
mLastModifiedTime(aLastModifiedTime),
|
||||
mNiceFileName(),
|
||||
mCachedBlocklistState(nsIBlocklistService::STATE_NOT_BLOCKED),
|
||||
mCachedBlocklistStateValid(false)
|
||||
@ -566,3 +566,11 @@ nsPluginTag::InvalidateBlocklistState()
|
||||
{
|
||||
mCachedBlocklistStateValid = false;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsPluginTag::GetLastModifiedTime(PRTime* aLastModifiedTime)
|
||||
{
|
||||
MOZ_ASSERT(aLastModifiedTime);
|
||||
*aLastModifiedTime = mLastModifiedTime;
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -36,7 +36,7 @@ public:
|
||||
ePluginState_MaxValue = 3,
|
||||
};
|
||||
|
||||
nsPluginTag(nsPluginInfo* aPluginInfo);
|
||||
nsPluginTag(nsPluginInfo* aPluginInfo, int64_t aLastModifiedTime);
|
||||
nsPluginTag(const char* aName,
|
||||
const char* aDescription,
|
||||
const char* aFileName,
|
||||
@ -46,7 +46,7 @@ public:
|
||||
const char* const* aMimeDescriptions,
|
||||
const char* const* aExtensions,
|
||||
int32_t aVariants,
|
||||
int64_t aLastModifiedTime = 0,
|
||||
int64_t aLastModifiedTime,
|
||||
bool aArgsAreUTF8 = false);
|
||||
virtual ~nsPluginTag();
|
||||
|
||||
|
@ -420,10 +420,8 @@ function PluginWrapper(aId, aName, aDescription, aTags) {
|
||||
|
||||
this.__defineGetter__("installDate", function() {
|
||||
let date = 0;
|
||||
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
|
||||
for (let tag of aTags) {
|
||||
file.initWithPath(tag.fullpath);
|
||||
date = Math.max(date, file.lastModifiedTime);
|
||||
date = Math.max(date, tag.lastModifiedTime);
|
||||
}
|
||||
return new Date(date);
|
||||
});
|
||||
|
@ -74,6 +74,21 @@ function getFileSize(aFile) {
|
||||
return size;
|
||||
}
|
||||
|
||||
function getPluginLastModifiedTime(aPluginFile) {
|
||||
// On OS X we use the bundle contents last modified time as using
|
||||
// the package directories modified date may be outdated.
|
||||
// See bug 313700.
|
||||
try {
|
||||
let localFileMac = aPluginFile.QueryInterface(AM_Ci.nsILocalFileMac);
|
||||
if (localFileMac) {
|
||||
return localFileMac.bundleContentsLastModifiedTime;
|
||||
}
|
||||
} catch (e) {
|
||||
}
|
||||
|
||||
return aPluginFile.lastModifiedTime;
|
||||
}
|
||||
|
||||
// Tests that the test plugin exists
|
||||
function run_test_1() {
|
||||
var testPlugin = get_test_plugin();
|
||||
@ -111,11 +126,13 @@ function run_test_1() {
|
||||
do_check_true(p.size > 0);
|
||||
do_check_eq(p.size, getFileSize(testPlugin));
|
||||
do_check_true(p.updateDate > 0);
|
||||
do_check_eq(p.updateDate.getTime(), testPlugin.lastModifiedTime);
|
||||
do_check_eq(p.installDate.getTime(), testPlugin.lastModifiedTime);
|
||||
do_check_true("isCompatibleWith" in p);
|
||||
do_check_true("findUpdates" in p);
|
||||
|
||||
let lastModifiedTime = getPluginLastModifiedTime(testPlugin);
|
||||
do_check_eq(p.updateDate.getTime(), lastModifiedTime);
|
||||
do_check_eq(p.installDate.getTime(), lastModifiedTime);
|
||||
|
||||
run_test_2(p);
|
||||
});
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user