зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1072535 - Pt 1 - Have DownloadDone notify device storage when a new download is available. r=paolo
This commit is contained in:
Родитель
0645508260
Коммит
32cc7daac6
|
@ -7,9 +7,12 @@
|
||||||
#include "nsString.h"
|
#include "nsString.h"
|
||||||
#include "nsIURI.h"
|
#include "nsIURI.h"
|
||||||
#include "nsIFile.h"
|
#include "nsIFile.h"
|
||||||
|
#include "nsIObserverService.h"
|
||||||
|
#include "nsISupportsPrimitives.h"
|
||||||
#include "nsDirectoryServiceDefs.h"
|
#include "nsDirectoryServiceDefs.h"
|
||||||
|
|
||||||
#include "mozilla/Preferences.h"
|
#include "mozilla/Preferences.h"
|
||||||
|
#include "mozilla/Services.h"
|
||||||
|
|
||||||
#define PREF_BDM_ADDTORECENTDOCS "browser.download.manager.addToRecentDocs"
|
#define PREF_BDM_ADDTORECENTDOCS "browser.download.manager.addToRecentDocs"
|
||||||
|
|
||||||
|
@ -69,7 +72,9 @@ static void gio_set_metadata_done(GObject *source_obj, GAsyncResult *res, gpoint
|
||||||
nsresult DownloadPlatform::DownloadDone(nsIURI* aSource, nsIFile* aTarget,
|
nsresult DownloadPlatform::DownloadDone(nsIURI* aSource, nsIFile* aTarget,
|
||||||
const nsACString& aContentType, bool aIsPrivate)
|
const nsACString& aContentType, bool aIsPrivate)
|
||||||
{
|
{
|
||||||
#if defined(XP_WIN) || defined(XP_MACOSX) || defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GTK)
|
#if defined(XP_WIN) || defined(XP_MACOSX) || defined(MOZ_WIDGET_ANDROID) \
|
||||||
|
|| defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_GONK)
|
||||||
|
|
||||||
nsAutoString path;
|
nsAutoString path;
|
||||||
if (aTarget && NS_SUCCEEDED(aTarget->GetPath(path))) {
|
if (aTarget && NS_SUCCEEDED(aTarget->GetPath(path))) {
|
||||||
#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_ANDROID)
|
#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) || defined(MOZ_WIDGET_ANDROID)
|
||||||
|
@ -120,6 +125,18 @@ nsresult DownloadPlatform::DownloadDone(nsIURI* aSource, nsIFile* aTarget,
|
||||||
observedObject, nullptr, TRUE);
|
observedObject, nullptr, TRUE);
|
||||||
::CFRelease(observedObject);
|
::CFRelease(observedObject);
|
||||||
#endif
|
#endif
|
||||||
|
if (mozilla::Preferences::GetBool("device.storage.enabled", true)) {
|
||||||
|
// Tell DeviceStorage that a new file may have been added.
|
||||||
|
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
||||||
|
nsCOMPtr<nsISupportsString> pathString
|
||||||
|
= do_CreateInstance(NS_SUPPORTS_STRING_CONTRACTID);
|
||||||
|
if (obs && pathString) {
|
||||||
|
if (NS_SUCCEEDED(pathString->SetData(path))) {
|
||||||
|
(void)obs->NotifyObservers(pathString, "download-watcher-notify",
|
||||||
|
MOZ_UTF16("modified"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef XP_WIN
|
#ifdef XP_WIN
|
||||||
|
|
|
@ -1733,10 +1733,28 @@ add_task(function test_toSerializable_startTime()
|
||||||
add_task(function test_platform_integration()
|
add_task(function test_platform_integration()
|
||||||
{
|
{
|
||||||
let downloadFiles = [];
|
let downloadFiles = [];
|
||||||
|
let oldDeviceStorageEnabled = false;
|
||||||
|
try {
|
||||||
|
oldDeviceStorageEnabled = Services.prefs.getBoolPref("device.storage.enabled");
|
||||||
|
} catch (e) {
|
||||||
|
// This happens if the pref doesn't exist.
|
||||||
|
}
|
||||||
|
let downloadWatcherNotified = false;
|
||||||
|
let observer = {
|
||||||
|
observe: function(subject, topic, data) {
|
||||||
|
do_check_eq(topic, "download-watcher-notify");
|
||||||
|
do_check_eq(data, "modified");
|
||||||
|
downloadWatcherNotified = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Services.obs.addObserver(observer, "download-watcher-notify", false);
|
||||||
|
Services.prefs.setBoolPref("device.storage.enabled", true);
|
||||||
function cleanup() {
|
function cleanup() {
|
||||||
for (let file of downloadFiles) {
|
for (let file of downloadFiles) {
|
||||||
file.remove(true);
|
file.remove(true);
|
||||||
}
|
}
|
||||||
|
Services.obs.removeObserver(observer, "download-watcher-notify");
|
||||||
|
Services.prefs.setBoolPref("device.storage.enabled", oldDeviceStorageEnabled);
|
||||||
}
|
}
|
||||||
do_register_cleanup(cleanup);
|
do_register_cleanup(cleanup);
|
||||||
|
|
||||||
|
@ -1770,6 +1788,7 @@ add_task(function test_platform_integration()
|
||||||
// downloadDone should be called before the whenSucceeded promise is resolved.
|
// downloadDone should be called before the whenSucceeded promise is resolved.
|
||||||
yield download.whenSucceeded().then(function () {
|
yield download.whenSucceeded().then(function () {
|
||||||
do_check_true(DownloadIntegration.downloadDoneCalled);
|
do_check_true(DownloadIntegration.downloadDoneCalled);
|
||||||
|
do_check_true(downloadWatcherNotified);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Then, wait for the promise returned by "start" to be resolved.
|
// Then, wait for the promise returned by "start" to be resolved.
|
||||||
|
|
Загрузка…
Ссылка в новой задаче