mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
ab9253304f
When Firefox downloads an update, it previously kept the update around to apply it on the next restart. This patch changes this so that the updater program is launched in the background as soon as the update has finished downloading in order to stage the updated version of the application by copying the existing installation directory to a temporary location and applying the update on top of it, and replace the existing installation directory with the staged directory on the next restart. Because the replacing step is typically very fast, this patch eliminates the wait for the update to be applied on restart, making it unnecessary to show a progress dialog when restarting. --HG-- rename : toolkit/mozapps/update/test/chrome/test_0092_finishedBackground.xul => toolkit/mozapps/update/test/chrome/test_0093_stagedBackground.xul rename : toolkit/mozapps/update/test/unit/test_0110_general.js => toolkit/mozapps/update/test/unit/test_0113_general.js rename : toolkit/mozapps/update/test/unit/test_0111_general.js => toolkit/mozapps/update/test/unit/test_0114_general.js rename : toolkit/mozapps/update/test/unit/test_0112_general.js => toolkit/mozapps/update/test/unit/test_0115_general.js rename : toolkit/mozapps/update/test/unit/test_0170_fileLocked_xp_win_complete.js => toolkit/mozapps/update/test/unit/test_0172_fileLocked_xp_win_complete.js rename : toolkit/mozapps/update/test/unit/test_0171_fileLocked_xp_win_partial.js => toolkit/mozapps/update/test/unit/test_0173_fileLocked_xp_win_partial.js rename : toolkit/mozapps/update/test/unit/test_0110_general.js => toolkit/mozapps/update/test_svc/unit/test_0113_general_svc.js rename : toolkit/mozapps/update/test/unit/test_0111_general.js => toolkit/mozapps/update/test_svc/unit/test_0114_general_svc.js rename : toolkit/mozapps/update/test/unit/test_0112_general.js => toolkit/mozapps/update/test_svc/unit/test_0115_general_svc.js rename : toolkit/mozapps/update/test/unit/test_0170_fileLocked_xp_win_complete.js => toolkit/mozapps/update/test_svc/unit/test_0172_fileLocked_xp_win_complete_svc.js rename : toolkit/mozapps/update/test/unit/test_0171_fileLocked_xp_win_partial.js => toolkit/mozapps/update/test_svc/unit/test_0173_fileLocked_xp_win_partial_svc.js
94 lines
2.7 KiB
Plaintext
94 lines
2.7 KiB
Plaintext
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "mozilla/Util.h"
|
|
|
|
#include "prtypes.h"
|
|
#include "MacLaunchHelper.h"
|
|
|
|
#include "nsMemory.h"
|
|
#include "nsAutoPtr.h"
|
|
#include "nsIAppStartup.h"
|
|
|
|
#include <stdio.h>
|
|
#include <spawn.h>
|
|
#include <crt_externs.h>
|
|
|
|
using namespace mozilla;
|
|
|
|
namespace {
|
|
cpu_type_t pref_cpu_types[2] = {
|
|
#if defined(__i386__)
|
|
CPU_TYPE_X86,
|
|
#elif defined(__x86_64__)
|
|
CPU_TYPE_X86_64,
|
|
#elif defined(__ppc__)
|
|
CPU_TYPE_POWERPC,
|
|
#endif
|
|
CPU_TYPE_ANY };
|
|
|
|
cpu_type_t cpu_i386_types[2] = {
|
|
CPU_TYPE_X86,
|
|
CPU_TYPE_ANY };
|
|
|
|
cpu_type_t cpu_x64_86_types[2] = {
|
|
CPU_TYPE_X86_64,
|
|
CPU_TYPE_ANY };
|
|
}
|
|
|
|
void LaunchChildMac(int aArgc, char** aArgv,
|
|
PRUint32 aRestartType, pid_t *pid)
|
|
{
|
|
// "posix_spawnp" uses null termination for arguments rather than a count.
|
|
// Note that we are not duplicating the argument strings themselves.
|
|
nsAutoArrayPtr<char*> argv_copy(new char*[aArgc + 1]);
|
|
for (int i = 0; i < aArgc; i++) {
|
|
argv_copy[i] = aArgv[i];
|
|
}
|
|
argv_copy[aArgc] = NULL;
|
|
|
|
// Initialize spawn attributes.
|
|
posix_spawnattr_t spawnattr;
|
|
if (posix_spawnattr_init(&spawnattr) != 0) {
|
|
printf("Failed to init posix spawn attribute.");
|
|
return;
|
|
}
|
|
|
|
cpu_type_t *wanted_type = pref_cpu_types;
|
|
size_t attr_count = ArrayLength(pref_cpu_types);
|
|
|
|
if (aRestartType & nsIAppStartup::eRestarti386) {
|
|
wanted_type = cpu_i386_types;
|
|
attr_count = ArrayLength(cpu_i386_types);
|
|
} else if (aRestartType & nsIAppStartup::eRestartx86_64) {
|
|
wanted_type = cpu_x64_86_types;
|
|
attr_count = ArrayLength(cpu_x64_86_types);
|
|
}
|
|
|
|
// Set spawn attributes.
|
|
size_t attr_ocount = 0;
|
|
if (posix_spawnattr_setbinpref_np(&spawnattr, attr_count, wanted_type, &attr_ocount) != 0 ||
|
|
attr_ocount != attr_count) {
|
|
printf("Failed to set binary preference on posix spawn attribute.");
|
|
posix_spawnattr_destroy(&spawnattr);
|
|
return;
|
|
}
|
|
|
|
// Pass along our environment.
|
|
char** envp = NULL;
|
|
char*** cocoaEnvironment = _NSGetEnviron();
|
|
if (cocoaEnvironment) {
|
|
envp = *cocoaEnvironment;
|
|
}
|
|
|
|
int result = posix_spawnp(pid, argv_copy[0], NULL, &spawnattr, argv_copy, envp);
|
|
|
|
posix_spawnattr_destroy(&spawnattr);
|
|
|
|
if (result != 0) {
|
|
printf("Process spawn failed with code %d!", result);
|
|
}
|
|
}
|