Update to Firefox 21.0
This commit is contained in:
parent
c4c0150094
commit
25a1341e05
1
.gitignore
vendored
1
.gitignore
vendored
@ -74,3 +74,4 @@ firefox-3.6.4.source.tar.bz2
|
|||||||
/firefox-langpacks-19.0.2-20130311.tar.xz
|
/firefox-langpacks-19.0.2-20130311.tar.xz
|
||||||
/firefox-langpacks-20.0-20130401.tar.xz
|
/firefox-langpacks-20.0-20130401.tar.xz
|
||||||
/firefox-20.0.source.tar.bz2
|
/firefox-20.0.source.tar.bz2
|
||||||
|
/firefox-21.0.source.tar.bz2
|
||||||
|
15
firefox.spec
15
firefox.spec
@ -15,8 +15,8 @@
|
|||||||
%define default_bookmarks_file %{_datadir}/bookmarks/default-bookmarks.html
|
%define default_bookmarks_file %{_datadir}/bookmarks/default-bookmarks.html
|
||||||
%define firefox_app_id \{ec8030f7-c20a-464f-9b0e-13a3a9e97384\}
|
%define firefox_app_id \{ec8030f7-c20a-464f-9b0e-13a3a9e97384\}
|
||||||
|
|
||||||
%global xulrunner_version 20.0
|
%global xulrunner_version 21.0
|
||||||
%global xulrunner_version_max 20.1
|
%global xulrunner_version_max 21.1
|
||||||
%global xulrunner_release 1
|
%global xulrunner_release 1
|
||||||
%global alpha_version 0
|
%global alpha_version 0
|
||||||
%global beta_version 0
|
%global beta_version 0
|
||||||
@ -54,14 +54,14 @@
|
|||||||
|
|
||||||
Summary: Mozilla Firefox Web browser
|
Summary: Mozilla Firefox Web browser
|
||||||
Name: firefox
|
Name: firefox
|
||||||
Version: 20.0
|
Version: 21.0
|
||||||
Release: 5%{?pre_tag}%{?dist}
|
Release: 1%{?pre_tag}%{?dist}
|
||||||
URL: http://www.mozilla.org/projects/firefox/
|
URL: http://www.mozilla.org/projects/firefox/
|
||||||
License: MPLv1.1 or GPLv2+ or LGPLv2+
|
License: MPLv1.1 or GPLv2+ or LGPLv2+
|
||||||
Group: Applications/Internet
|
Group: Applications/Internet
|
||||||
Source0: ftp://ftp.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.bz2
|
Source0: ftp://ftp.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.bz2
|
||||||
%if %{build_langpacks}
|
%if %{build_langpacks}
|
||||||
Source1: firefox-langpacks-%{version}%{?pre_version}-20130401.tar.xz
|
Source1: firefox-langpacks-%{version}%{?pre_version}-20130514.tar.xz
|
||||||
%endif
|
%endif
|
||||||
Source10: firefox-mozconfig
|
Source10: firefox-mozconfig
|
||||||
Source11: firefox-mozconfig-branded
|
Source11: firefox-mozconfig-branded
|
||||||
@ -80,7 +80,6 @@ Patch15: firefox-15.0-enable-addons.patch
|
|||||||
Patch16: firefox-duckduckgo.patch
|
Patch16: firefox-duckduckgo.patch
|
||||||
|
|
||||||
# Upstream patches
|
# Upstream patches
|
||||||
Patch100: mozilla-239254.patch
|
|
||||||
|
|
||||||
%if %{official_branding}
|
%if %{official_branding}
|
||||||
# Required by Mozilla Corporation
|
# Required by Mozilla Corporation
|
||||||
@ -127,7 +126,6 @@ cd %{tarballdir}
|
|||||||
%patch16 -p1 -b .duckduckgo
|
%patch16 -p1 -b .duckduckgo
|
||||||
|
|
||||||
# Upstream patches
|
# Upstream patches
|
||||||
%patch100 -p1 -b .239254
|
|
||||||
|
|
||||||
%if %{official_branding}
|
%if %{official_branding}
|
||||||
# Required by Mozilla Corporation
|
# Required by Mozilla Corporation
|
||||||
@ -432,6 +430,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
|
|||||||
#---------------------------------------------------------------------
|
#---------------------------------------------------------------------
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue May 14 2013 Martin Stransky <stransky@redhat.com> - 21.0-1
|
||||||
|
- Updated to latest upstream (21.0)
|
||||||
|
|
||||||
* Thu May 9 2013 Martin Stransky <stransky@redhat.com> - 20.0-5
|
* Thu May 9 2013 Martin Stransky <stransky@redhat.com> - 20.0-5
|
||||||
- Removed firstrun page (rhbz#864793)
|
- Removed firstrun page (rhbz#864793)
|
||||||
- Made zip/unzip quiet in langpacks processing
|
- Made zip/unzip quiet in langpacks processing
|
||||||
|
@ -1,483 +0,0 @@
|
|||||||
# HG changeset patch
|
|
||||||
# Parent cb34bd8957ec517c72d506f7c439e3af1950e38d
|
|
||||||
# User Martin Stransky <stransky@redhat.com>
|
|
||||||
Bug 239254 - [Linux] Support disk cache on a local path, r=michal.novotny
|
|
||||||
|
|
||||||
diff --git a/netwerk/cache/nsCacheService.cpp b/netwerk/cache/nsCacheService.cpp
|
|
||||||
--- a/netwerk/cache/nsCacheService.cpp
|
|
||||||
+++ b/netwerk/cache/nsCacheService.cpp
|
|
||||||
@@ -712,27 +712,18 @@ nsCacheProfilePrefObserver::ReadPrefs(ns
|
|
||||||
nsCOMPtr<nsIFile> profDir;
|
|
||||||
NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
|
|
||||||
getter_AddRefs(profDir));
|
|
||||||
NS_GetSpecialDirectory(NS_APP_USER_PROFILE_LOCAL_50_DIR,
|
|
||||||
getter_AddRefs(directory));
|
|
||||||
if (!directory)
|
|
||||||
directory = profDir;
|
|
||||||
else if (profDir) {
|
|
||||||
- bool same;
|
|
||||||
- if (NS_SUCCEEDED(profDir->Equals(directory, &same)) && !same) {
|
|
||||||
- // We no longer store the cache directory in the main
|
|
||||||
- // profile directory, so we should cleanup the old one.
|
|
||||||
- rv = profDir->AppendNative(NS_LITERAL_CSTRING("Cache"));
|
|
||||||
- if (NS_SUCCEEDED(rv)) {
|
|
||||||
- bool exists;
|
|
||||||
- if (NS_SUCCEEDED(profDir->Exists(&exists)) && exists)
|
|
||||||
- nsDeleteDir::DeleteDir(profDir, false);
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
+ nsCacheService::MoveOrRemoveDiskCache(profDir, directory,
|
|
||||||
+ "Cache");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// use file cache in build tree only if asked, to avoid cache dir litter
|
|
||||||
if (!directory && PR_GetEnv("NECKO_DEV_ENABLE_DISK_CACHE")) {
|
|
||||||
rv = NS_GetSpecialDirectory(NS_XPCOM_CURRENT_PROCESS_DIR,
|
|
||||||
getter_AddRefs(directory));
|
|
||||||
}
|
|
||||||
if (directory)
|
|
||||||
@@ -788,16 +779,20 @@ nsCacheProfilePrefObserver::ReadPrefs(ns
|
|
||||||
// try to get the profile directory (there may not be a profile yet)
|
|
||||||
nsCOMPtr<nsIFile> profDir;
|
|
||||||
NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR,
|
|
||||||
getter_AddRefs(profDir));
|
|
||||||
NS_GetSpecialDirectory(NS_APP_USER_PROFILE_LOCAL_50_DIR,
|
|
||||||
getter_AddRefs(directory));
|
|
||||||
if (!directory)
|
|
||||||
directory = profDir;
|
|
||||||
+ else if (profDir) {
|
|
||||||
+ nsCacheService::MoveOrRemoveDiskCache(profDir, directory,
|
|
||||||
+ "OfflineCache");
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
#if DEBUG
|
|
||||||
if (!directory) {
|
|
||||||
// use current process directory during development
|
|
||||||
rv = NS_GetSpecialDirectory(NS_XPCOM_CURRENT_PROCESS_DIR,
|
|
||||||
getter_AddRefs(directory));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
@@ -3012,16 +3007,67 @@ nsCacheService::SetDiskSmartSize_Locked(
|
|
||||||
DispatchToCacheIOThread(event);
|
|
||||||
} else {
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
+void
|
|
||||||
+nsCacheService::MoveOrRemoveDiskCache(nsIFile *aOldCacheDir,
|
|
||||||
+ nsIFile *aNewCacheDir,
|
|
||||||
+ const char *aCacheSubdir)
|
|
||||||
+{
|
|
||||||
+ bool same;
|
|
||||||
+ if (NS_FAILED(aOldCacheDir->Equals(aNewCacheDir, &same)) || same)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ nsCOMPtr<nsIFile> aOldCacheSubdir;
|
|
||||||
+ aOldCacheDir->Clone(getter_AddRefs(aOldCacheSubdir));
|
|
||||||
+
|
|
||||||
+ nsresult rv = aOldCacheSubdir->AppendNative(
|
|
||||||
+ nsDependentCString(aCacheSubdir));
|
|
||||||
+ if (NS_FAILED(rv))
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ bool exists;
|
|
||||||
+ if (NS_FAILED(aOldCacheSubdir->Exists(&exists)) || !exists)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ nsCOMPtr<nsIFile> aNewCacheSubdir;
|
|
||||||
+ aNewCacheDir->Clone(getter_AddRefs(aNewCacheSubdir));
|
|
||||||
+
|
|
||||||
+ rv = aNewCacheSubdir->AppendNative(nsDependentCString(aCacheSubdir));
|
|
||||||
+ if (NS_FAILED(rv))
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ nsAutoCString newPath;
|
|
||||||
+ rv = aNewCacheSubdir->GetNativePath(newPath);
|
|
||||||
+ if (NS_FAILED(rv))
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ if (NS_SUCCEEDED(aNewCacheSubdir->Exists(&exists)) && !exists) {
|
|
||||||
+ // New cache directory does not exist, try to move the old one here
|
|
||||||
+ // rename needs an empty target directory
|
|
||||||
+ rv = aNewCacheSubdir->Create(nsIFile::DIRECTORY_TYPE, 0777);
|
|
||||||
+ if (NS_SUCCEEDED(rv)) {
|
|
||||||
+ nsAutoCString oldPath;
|
|
||||||
+ rv = aOldCacheSubdir->GetNativePath(oldPath);
|
|
||||||
+ if (NS_FAILED(rv))
|
|
||||||
+ return;
|
|
||||||
+ if(rename(oldPath.get(), newPath.get()) == 0)
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // Delay delete by 1 minute to avoid IO thrash on startup.
|
|
||||||
+ nsDeleteDir::DeleteDir(aOldCacheSubdir, false, 60000);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static bool
|
|
||||||
IsEntryPrivate(nsCacheEntry* entry)
|
|
||||||
{
|
|
||||||
return entry->IsPrivate();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
nsCacheService::LeavePrivateBrowsing()
|
|
||||||
diff --git a/netwerk/cache/nsCacheService.h b/netwerk/cache/nsCacheService.h
|
|
||||||
--- a/netwerk/cache/nsCacheService.h
|
|
||||||
+++ b/netwerk/cache/nsCacheService.h
|
|
||||||
@@ -194,16 +194,20 @@ public:
|
|
||||||
|
|
||||||
static void SetMemoryCache();
|
|
||||||
|
|
||||||
static void SetCacheCompressionLevel(int32_t level);
|
|
||||||
|
|
||||||
// Starts smart cache size computation if disk device is available
|
|
||||||
static nsresult SetDiskSmartSize();
|
|
||||||
|
|
||||||
+ static void MoveOrRemoveDiskCache(nsIFile *aOldCacheDir,
|
|
||||||
+ nsIFile *aNewCacheDir,
|
|
||||||
+ const char *aCacheSubdir);
|
|
||||||
+
|
|
||||||
nsresult Init();
|
|
||||||
void Shutdown();
|
|
||||||
|
|
||||||
static bool IsInitialized()
|
|
||||||
{
|
|
||||||
if (!gService) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
diff --git a/startupcache/StartupCache.cpp b/startupcache/StartupCache.cpp
|
|
||||||
--- a/startupcache/StartupCache.cpp
|
|
||||||
+++ b/startupcache/StartupCache.cpp
|
|
||||||
@@ -168,16 +168,30 @@ StartupCache::Init()
|
|
||||||
nsCOMPtr<nsIFile> file;
|
|
||||||
rv = NS_GetSpecialDirectory("ProfLDS",
|
|
||||||
getter_AddRefs(file));
|
|
||||||
if (NS_FAILED(rv)) {
|
|
||||||
// return silently, this will fail in mochitests's xpcshell process.
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ nsCOMPtr<nsIFile> profDir;
|
|
||||||
+ NS_GetSpecialDirectory("ProfDS", getter_AddRefs(profDir));
|
|
||||||
+ if (profDir) {
|
|
||||||
+ bool same;
|
|
||||||
+ if (NS_SUCCEEDED(profDir->Equals(file, &same)) && !same) {
|
|
||||||
+ // We no longer store the startup cache in the main profile
|
|
||||||
+ // directory, so we should cleanup the old one.
|
|
||||||
+ if (NS_SUCCEEDED(
|
|
||||||
+ profDir->AppendNative(NS_LITERAL_CSTRING("startupCache")))) {
|
|
||||||
+ profDir->Remove(true);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
rv = file->AppendNative(NS_LITERAL_CSTRING("startupCache"));
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
// Try to create the directory if it's not there yet
|
|
||||||
rv = file->Create(nsIFile::DIRECTORY_TYPE, 0777);
|
|
||||||
if (NS_FAILED(rv) && rv != NS_ERROR_FILE_ALREADY_EXISTS)
|
|
||||||
return rv;
|
|
||||||
|
|
||||||
diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp
|
|
||||||
--- a/toolkit/xre/nsXREDirProvider.cpp
|
|
||||||
+++ b/toolkit/xre/nsXREDirProvider.cpp
|
|
||||||
@@ -1170,18 +1170,32 @@ nsXREDirProvider::GetUserDataDirectoryHo
|
|
||||||
#elif defined(MOZ_WIDGET_GONK)
|
|
||||||
rv = NS_NewNativeLocalFile(NS_LITERAL_CSTRING("/data/b2g"), true,
|
|
||||||
getter_AddRefs(localDir));
|
|
||||||
#elif defined(XP_UNIX)
|
|
||||||
const char* homeDir = getenv("HOME");
|
|
||||||
if (!homeDir || !*homeDir)
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
|
|
||||||
- rv = NS_NewNativeLocalFile(nsDependentCString(homeDir), true,
|
|
||||||
- getter_AddRefs(localDir));
|
|
||||||
+ if (aLocal) {
|
|
||||||
+ // If $XDG_CACHE_HOME is defined use it, otherwise use $HOME/.cache.
|
|
||||||
+ const char* cacheHome = getenv("XDG_CACHE_HOME");
|
|
||||||
+ if (cacheHome && *cacheHome) {
|
|
||||||
+ rv = NS_NewNativeLocalFile(nsDependentCString(cacheHome), true,
|
|
||||||
+ getter_AddRefs(localDir));
|
|
||||||
+ } else {
|
|
||||||
+ rv = NS_NewNativeLocalFile(nsDependentCString(homeDir), true,
|
|
||||||
+ getter_AddRefs(localDir));
|
|
||||||
+ if (NS_SUCCEEDED(rv))
|
|
||||||
+ rv = localDir->AppendNative(NS_LITERAL_CSTRING(".cache"));
|
|
||||||
+ }
|
|
||||||
+ } else {
|
|
||||||
+ rv = NS_NewNativeLocalFile(nsDependentCString(homeDir), true,
|
|
||||||
+ getter_AddRefs(localDir));
|
|
||||||
+ }
|
|
||||||
#else
|
|
||||||
#error "Don't know how to get product dir on your platform"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
NS_IF_ADDREF(*aFile = localDir);
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1256,17 +1270,17 @@ nsXREDirProvider::GetUserDataDirectory(n
|
|
||||||
const nsACString* aProfileName,
|
|
||||||
const nsACString* aAppName,
|
|
||||||
const nsACString* aVendorName)
|
|
||||||
{
|
|
||||||
nsCOMPtr<nsIFile> localDir;
|
|
||||||
nsresult rv = GetUserDataDirectoryHome(getter_AddRefs(localDir), aLocal);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
- rv = AppendProfilePath(localDir, aProfileName, aAppName, aVendorName);
|
|
||||||
+ rv = AppendProfilePath(localDir, aProfileName, aAppName, aVendorName, aLocal);
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
|
|
||||||
#ifdef DEBUG_jungshik
|
|
||||||
nsAutoCString cwd;
|
|
||||||
localDir->GetNativePath(cwd);
|
|
||||||
printf("nsXREDirProvider::GetUserDataDirectory: %s\n", cwd.get());
|
|
||||||
#endif
|
|
||||||
rv = EnsureDirectoryExists(localDir);
|
|
||||||
@@ -1377,17 +1391,18 @@ nsXREDirProvider::AppendSysUserExtension
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
nsresult
|
|
||||||
nsXREDirProvider::AppendProfilePath(nsIFile* aFile,
|
|
||||||
const nsACString* aProfileName,
|
|
||||||
const nsACString* aAppName,
|
|
||||||
- const nsACString* aVendorName)
|
|
||||||
+ const nsACString* aVendorName,
|
|
||||||
+ bool aLocal)
|
|
||||||
{
|
|
||||||
NS_ASSERTION(aFile, "Null pointer!");
|
|
||||||
|
|
||||||
if (!gAppData) {
|
|
||||||
return NS_ERROR_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsAutoCString profile;
|
|
||||||
@@ -1439,28 +1454,31 @@ nsXREDirProvider::AppendProfilePath(nsIF
|
|
||||||
// The parent of this directory is set in GetUserDataDirectoryHome
|
|
||||||
// XXX: handle gAppData->profile properly
|
|
||||||
// XXXsmaug ...and the rest of the profile creation!
|
|
||||||
MOZ_ASSERT(!aAppName,
|
|
||||||
"Profile creation for external applications is not implemented!");
|
|
||||||
rv = aFile->AppendNative(nsDependentCString("mozilla"));
|
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
|
||||||
#elif defined(XP_UNIX)
|
|
||||||
- // Make it hidden (i.e. using the ".")
|
|
||||||
- nsAutoCString folder(".");
|
|
||||||
+ nsAutoCString folder;
|
|
||||||
+ // Make it hidden (by starting with "."), except when local (the
|
|
||||||
+ // profile is already under ~/.cache or XDG_CACHE_HOME).
|
|
||||||
+ if (!aLocal)
|
|
||||||
+ folder.Assign('.');
|
|
||||||
|
|
||||||
if (!profile.IsEmpty()) {
|
|
||||||
// Skip any leading path characters
|
|
||||||
const char* profileStart = profile.get();
|
|
||||||
while (*profileStart == '/' || *profileStart == '\\')
|
|
||||||
profileStart++;
|
|
||||||
|
|
||||||
// On the off chance that someone wanted their folder to be hidden don't
|
|
||||||
// let it become ".."
|
|
||||||
- if (*profileStart == '.')
|
|
||||||
+ if (*profileStart == '.' && !aLocal)
|
|
||||||
profileStart++;
|
|
||||||
|
|
||||||
folder.Append(profileStart);
|
|
||||||
ToLowerCase(folder);
|
|
||||||
|
|
||||||
rv = AppendProfileString(aFile, folder.BeginReading());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
diff --git a/toolkit/xre/nsXREDirProvider.h b/toolkit/xre/nsXREDirProvider.h
|
|
||||||
--- a/toolkit/xre/nsXREDirProvider.h
|
|
||||||
+++ b/toolkit/xre/nsXREDirProvider.h
|
|
||||||
@@ -109,17 +109,18 @@ protected:
|
|
||||||
static nsresult EnsureDirectoryExists(nsIFile* aDirectory);
|
|
||||||
void EnsureProfileFileExists(nsIFile* aFile);
|
|
||||||
|
|
||||||
// Determine the profile path within the UAppData directory. This is different
|
|
||||||
// on every major platform.
|
|
||||||
static nsresult AppendProfilePath(nsIFile* aFile,
|
|
||||||
const nsACString* aProfileName,
|
|
||||||
const nsACString* aAppName,
|
|
||||||
- const nsACString* aVendorName);
|
|
||||||
+ const nsACString* aVendorName,
|
|
||||||
+ bool aLocal);
|
|
||||||
|
|
||||||
static nsresult AppendSysUserExtensionPath(nsIFile* aFile);
|
|
||||||
|
|
||||||
// Internal helper that splits a path into components using the '/' and '\\'
|
|
||||||
// delimiters.
|
|
||||||
static inline nsresult AppendProfileString(nsIFile* aFile, const char* aPath);
|
|
||||||
|
|
||||||
// Calculate and register extension and theme bundle directories.
|
|
||||||
# HG changeset patch
|
|
||||||
# User Tim Taubert <ttaubert@mozilla.com>
|
|
||||||
# Date 1360362227 -3600
|
|
||||||
# Node ID 873170d2679ac23114f22543cee3214a940abef3
|
|
||||||
Bug 239254 - [Linux] Migrate existing thumbnails to their new local path
|
|
||||||
|
|
||||||
diff --git a/browser/components/thumbnails/PageThumbs.jsm b/browser/components/thumbnails/PageThumbs.jsm
|
|
||||||
--- a/browser/components/thumbnails/PageThumbs.jsm
|
|
||||||
+++ b/browser/components/thumbnails/PageThumbs.jsm
|
|
||||||
@@ -7,17 +7,17 @@
|
|
||||||
this.EXPORTED_SYMBOLS = ["PageThumbs", "PageThumbsStorage"];
|
|
||||||
|
|
||||||
const Cu = Components.utils;
|
|
||||||
const Cc = Components.classes;
|
|
||||||
const Ci = Components.interfaces;
|
|
||||||
|
|
||||||
const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
|
|
||||||
const PREF_STORAGE_VERSION = "browser.pagethumbnails.storage_version";
|
|
||||||
-const LATEST_STORAGE_VERSION = 2;
|
|
||||||
+const LATEST_STORAGE_VERSION = 3;
|
|
||||||
|
|
||||||
const EXPIRATION_MIN_CHUNK_SIZE = 50;
|
|
||||||
const EXPIRATION_INTERVAL_SECS = 3600;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Name of the directory in the profile that contains the thumbnails.
|
|
||||||
*/
|
|
||||||
const THUMBNAIL_DIRECTORY = "thumbnails";
|
|
||||||
@@ -359,47 +359,51 @@ let PageThumbsStorageMigrator = {
|
|
||||||
|
|
||||||
set currentVersion(aVersion) {
|
|
||||||
Services.prefs.setIntPref(PREF_STORAGE_VERSION, aVersion);
|
|
||||||
},
|
|
||||||
|
|
||||||
migrate: function Migrator_migrate() {
|
|
||||||
let version = this.currentVersion;
|
|
||||||
|
|
||||||
- if (version < 1) {
|
|
||||||
- this.removeThumbnailsFromRoamingProfile();
|
|
||||||
- }
|
|
||||||
- if (version < 2) {
|
|
||||||
- this.renameThumbnailsFolder();
|
|
||||||
+ // Storage version 1 never made it to beta.
|
|
||||||
+ // At the time of writing only Windows had (ProfD != ProfLD) and we
|
|
||||||
+ // needed to move thumbnails from the roaming profile to the locale
|
|
||||||
+ // one so that they're not needlessly included in backups and/or
|
|
||||||
+ // written via SMB.
|
|
||||||
+
|
|
||||||
+ // Storage version 2 also never made it to beta.
|
|
||||||
+ // The thumbnail folder structure has been changed and old thumbnails
|
|
||||||
+ // were not migrated. Instead, we just renamed the current folder to
|
|
||||||
+ // "<name>-old" and will remove it later.
|
|
||||||
+
|
|
||||||
+ if (version < 3) {
|
|
||||||
+ this.migrateToVersion3();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.currentVersion = LATEST_STORAGE_VERSION;
|
|
||||||
},
|
|
||||||
|
|
||||||
- removeThumbnailsFromRoamingProfile:
|
|
||||||
- function Migrator_removeThumbnailsFromRoamingProfile() {
|
|
||||||
- let local = FileUtils.getDir("ProfLD", [THUMBNAIL_DIRECTORY]);
|
|
||||||
+ /**
|
|
||||||
+ * Bug 239254 added support for having the disk cache and thumbnail
|
|
||||||
+ * directories on a local path (i.e. ~/.cache/) under Linux. We'll first
|
|
||||||
+ * try to move the old thumbnails to their new location. If that's not
|
|
||||||
+ * possible (because ProfD might be on a different file system than
|
|
||||||
+ * ProfLD) we'll just discard them.
|
|
||||||
+ */
|
|
||||||
+ migrateToVersion3: function Migrator_migrateToVersion3() {
|
|
||||||
+ let local = FileUtils.getDir("ProfLD", [THUMBNAIL_DIRECTORY], true);
|
|
||||||
let roaming = FileUtils.getDir("ProfD", [THUMBNAIL_DIRECTORY]);
|
|
||||||
|
|
||||||
- if (!roaming.equals(local) && roaming.exists()) {
|
|
||||||
- roaming.followLinks = false;
|
|
||||||
- try {
|
|
||||||
- roaming.remove(true);
|
|
||||||
- } catch (e) {
|
|
||||||
- // The directory might not exist or we're not permitted to remove it.
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- },
|
|
||||||
-
|
|
||||||
- renameThumbnailsFolder: function Migrator_renameThumbnailsFolder() {
|
|
||||||
- let dir = FileUtils.getDir("ProfLD", [THUMBNAIL_DIRECTORY]);
|
|
||||||
- try {
|
|
||||||
- dir.moveTo(null, dir.leafName + "-old");
|
|
||||||
- } catch (e) {
|
|
||||||
- // The directory might not exist or we're not permitted to rename it.
|
|
||||||
+ if (!roaming.equals(local)) {
|
|
||||||
+ PageThumbsWorker.postMessage({
|
|
||||||
+ type: "moveOrDeleteAllThumbnails",
|
|
||||||
+ from: roaming.path,
|
|
||||||
+ to: local.path
|
|
||||||
+ });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let PageThumbsExpiration = {
|
|
||||||
_filters: [],
|
|
||||||
|
|
||||||
init: function Expiration_init() {
|
|
||||||
diff --git a/browser/components/thumbnails/PageThumbsWorker.js b/browser/components/thumbnails/PageThumbsWorker.js
|
|
||||||
--- a/browser/components/thumbnails/PageThumbsWorker.js
|
|
||||||
+++ b/browser/components/thumbnails/PageThumbsWorker.js
|
|
||||||
@@ -20,16 +20,19 @@ let PageThumbsWorker = {
|
|
||||||
|
|
||||||
switch (msg.type) {
|
|
||||||
case "removeFile":
|
|
||||||
data.result = this.removeFile(msg);
|
|
||||||
break;
|
|
||||||
case "expireFilesInDirectory":
|
|
||||||
data.result = this.expireFilesInDirectory(msg);
|
|
||||||
break;
|
|
||||||
+ case "moveOrDeleteAllThumbnails":
|
|
||||||
+ data.result = this.moveOrDeleteAllThumbnails(msg);
|
|
||||||
+ break;
|
|
||||||
default:
|
|
||||||
data.result = false;
|
|
||||||
data.detail = "message not understood";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
self.postMessage(data);
|
|
||||||
},
|
|
||||||
@@ -62,12 +65,35 @@ let PageThumbsWorker = {
|
|
||||||
getFileEntriesInDirectory:
|
|
||||||
function Worker_getFileEntriesInDirectory(aPath, aSkipFiles) {
|
|
||||||
let skip = new Set(aSkipFiles);
|
|
||||||
let iter = new OS.File.DirectoryIterator(aPath);
|
|
||||||
|
|
||||||
return [entry
|
|
||||||
for (entry in iter)
|
|
||||||
if (!entry.isDir && !entry.isSymLink && !skip.has(entry.name))];
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ moveOrDeleteAllThumbnails:
|
|
||||||
+ function Worker_moveOrDeleteAllThumbnails(msg) {
|
|
||||||
+ if (!OS.File.exists(msg.from))
|
|
||||||
+ return true;
|
|
||||||
+
|
|
||||||
+ let iter = new OS.File.DirectoryIterator(msg.from);
|
|
||||||
+ for (let entry in iter) {
|
|
||||||
+ if (!entry.isDir && !entry.isSymLink) {
|
|
||||||
+ let from = OS.Path.join(msg.from, entry.name);
|
|
||||||
+ let to = OS.Path.join(msg.to, entry.name);
|
|
||||||
+
|
|
||||||
+ try {
|
|
||||||
+ OS.File.move(from, to, {noOverwrite: true, noCopy: true});
|
|
||||||
+ } catch (e) {
|
|
||||||
+ OS.File.remove(from);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ OS.File.removeEmptyDir(msg.from);
|
|
||||||
+ return true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
self.onmessage = PageThumbsWorker.handleMessage.bind(PageThumbsWorker);
|
|
4
sources
4
sources
@ -1,2 +1,2 @@
|
|||||||
e664416da2075f13089fe3e883cadb73 firefox-20.0.source.tar.bz2
|
6e2510e9466b280c367de0e4c05a8840 firefox-21.0.source.tar.bz2
|
||||||
3dae1feac44dbe96f6eb38ae0c448f31 firefox-langpacks-20.0-20130401.tar.xz
|
b2169d53a944232290495d93a776fbc5 firefox-langpacks-21.0-20130514.tar.xz
|
||||||
|
Loading…
Reference in New Issue
Block a user