Bug 1282980 - Remove MacQuirks. r=jrmuizel
☠☠ backed out by fcb6731a7e2b ☠ ☠
authorEric Rahm <erahm@mozilla.com>
Tue, 19 Jul 2016 16:49:24 -0700
changeset 345782 d6523dfaab78d8409b2da9eac0693960c2d11904
parent 345781 317aecd284b8a55b335a016a1a5bed3278893c9f
child 345783 0fadabf932c25817f2b8f218532171b82ac96280
push id6389
push userraliiev@mozilla.com
push dateMon, 19 Sep 2016 13:38:22 +0000
treeherdermozilla-beta@01d67bfe6c81 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjrmuizel
bugs1282980, 1282184
milestone50.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1282980 - Remove MacQuirks. r=jrmuizel MacQuirks was targeted for OSX from 10.6.8 up to but not including 10.7.0. We have now removed support for 10.6 so we can safely remove this code. This also fixes bug 1282184 where DMD is apparently choking on memory allocated in the interpose library.
browser/app/nsBrowserApp.cpp
dom/plugins/ipc/interpose/moz.build
dom/plugins/ipc/interpose/plugin_child_quirks.mm
toolkit/xre/MacQuirks.h
toolkit/xre/moz.build
--- a/browser/app/nsBrowserApp.cpp
+++ b/browser/app/nsBrowserApp.cpp
@@ -12,20 +12,16 @@
 #include <stdlib.h>
 #include <io.h>
 #include <fcntl.h>
 #elif defined(XP_UNIX)
 #include <sys/resource.h>
 #include <unistd.h>
 #endif
 
-#ifdef XP_MACOSX
-#include "MacQuirks.h"
-#endif
-
 #include <stdio.h>
 #include <stdarg.h>
 #include <time.h>
 
 #include "nsCOMPtr.h"
 #include "nsIFile.h"
 #include "nsStringGlue.h"
 
--- a/dom/plugins/ipc/interpose/moz.build
+++ b/dom/plugins/ipc/interpose/moz.build
@@ -3,15 +3,11 @@
 # 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/.
 
 SharedLibrary('plugin_child_interpose')
 
 UNIFIED_SOURCES += [ "%s.mm" % (LIBRARY_NAME) ]
 
-UNIFIED_SOURCES += [
-    'plugin_child_quirks.mm',
-]
-
 OS_LIBS += ['-framework Carbon']
 
 DIST_INSTALL = True
deleted file mode 100644
--- a/dom/plugins/ipc/interpose/plugin_child_quirks.mm
+++ /dev/null
@@ -1,20 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* 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 <sys/types.h>
-#include <sys/sysctl.h>
-#import "CoreFoundation/CoreFoundation.h"
-#import "CoreServices/CoreServices.h"
-#import "Carbon/Carbon.h"
-#define int32_t int32_t
-#define uint32_t uint32_t
-
-#include "MacQuirks.h"
-
-int static_init() {
-  TriggerQuirks();
-  return 0;
-}
-int run = static_init();
deleted file mode 100644
--- a/toolkit/xre/MacQuirks.h
+++ /dev/null
@@ -1,256 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/* 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/. */
-
-
-#ifndef MacQuirks_h__
-#define MacQuirks_h__
-
-#include <sys/types.h>
-#include <sys/sysctl.h>
-#include "CoreFoundation/CoreFoundation.h"
-#include "CoreServices/CoreServices.h"
-#include "Carbon/Carbon.h"
-
-// This file is a copy and paste from existing methods from
-// libxul. This is intentional because this interpose
-// library does not link with libxul.
-
-struct VersionPart {
-  int32_t     numA;
-
-  const char *strB;    // NOT null-terminated, can be a null pointer
-  uint32_t    strBlen;
-
-  int32_t     numC;
-
-  char       *extraD;  // null-terminated
-};
-
-/**
- * Parse a version part into a number and "extra text".
- *
- * @returns A pointer to the next versionpart, or null if none.
- */
-static char*
-ParseVP(char *part, VersionPart &result)
-{
-  char *dot;
-
-  result.numA = 0;
-  result.strB = nullptr;
-  result.strBlen = 0;
-  result.numC = 0;
-  result.extraD = nullptr;
-
-  if (!part)
-    return part;
-
-  dot = strchr(part, '.');
-  if (dot)
-    *dot = '\0';
-
-  if (part[0] == '*' && part[1] == '\0') {
-    result.numA = INT32_MAX;
-    result.strB = "";
-  }
-  else {
-    result.numA = strtol(part, const_cast<char**>(&result.strB), 10);
-  }
-
-  if (!*result.strB) {
-    result.strB = nullptr;
-    result.strBlen = 0;
-  }
-  else {
-    if (result.strB[0] == '+') {
-      static const char kPre[] = "pre";
-
-      ++result.numA;
-      result.strB = kPre;
-      result.strBlen = sizeof(kPre) - 1;
-    }
-    else {
-      const char *numstart = strpbrk(result.strB, "0123456789+-");
-      if (!numstart) {
-  result.strBlen = strlen(result.strB);
-      }
-      else {
-  result.strBlen = numstart - result.strB;
-
-  result.numC = strtol(numstart, &result.extraD, 10);
-  if (!*result.extraD)
-    result.extraD = nullptr;
-      }
-    }
-  }
-
-  if (dot) {
-    ++dot;
-
-    if (!*dot)
-      dot = nullptr;
-  }
-
-  return dot;
-}
-
-
-// compare two null-terminated strings, which may be null pointers
-static int32_t
-ns_strcmp(const char *str1, const char *str2)
-{
-  // any string is *before* no string
-  if (!str1)
-    return str2 != 0;
-
-  if (!str2)
-    return -1;
-
-  return strcmp(str1, str2);
-}
-
-// compare two length-specified string, which may be null pointers
-static int32_t
-ns_strnncmp(const char *str1, uint32_t len1, const char *str2, uint32_t len2)
-{
-  // any string is *before* no string
-  if (!str1)
-    return str2 != 0;
-
-  if (!str2)
-    return -1;
-
-  for (; len1 && len2; --len1, --len2, ++str1, ++str2) {
-    if (*str1 < *str2)
-      return -1;
-
-    if (*str1 > *str2)
-      return 1;
-  }
-
-  if (len1 == 0)
-    return len2 == 0 ? 0 : -1;
-
-  return 1;
-}
-
-// compare two int32_t
-static int32_t
-ns_cmp(int32_t n1, int32_t n2)
-{
-  if (n1 < n2)
-    return -1;
-
-  return n1 != n2;
-}
-
-/**
- * Compares two VersionParts
- */
-static int32_t
-CompareVP(VersionPart &v1, VersionPart &v2)
-{
-  int32_t r = ns_cmp(v1.numA, v2.numA);
-  if (r)
-    return r;
-
-  r = ns_strnncmp(v1.strB, v1.strBlen, v2.strB, v2.strBlen);
-  if (r)
-    return r;
-
-  r = ns_cmp(v1.numC, v2.numC);
-  if (r)
-    return r;
-
-  return ns_strcmp(v1.extraD, v2.extraD);
-}
-
-/* this is intentionally not static so that we don't end up making copies
- * anywhere */
-int32_t
-NS_CompareVersions(const char *A, const char *B)
-{
-  char *A2 = strdup(A);
-  if (!A2)
-    return 1;
-
-  char *B2 = strdup(B);
-  if (!B2) {
-    free(A2);
-    return 1;
-  }
-
-  int32_t result;
-  char *a = A2, *b = B2;
-
-  do {
-    VersionPart va, vb;
-
-    a = ParseVP(a, va);
-    b = ParseVP(b, vb);
-
-    result = CompareVP(va, vb);
-    if (result)
-      break;
-
-  } while (a || b);
-
-  free(A2);
-  free(B2);
-
-  return result;
-}
-
-
-static void
-TriggerQuirks()
-{
-  int mib[2];
-
-  mib[0] = CTL_KERN;
-  mib[1] = KERN_OSRELEASE;
-  // we won't support versions greater than 10.7.99
-  char release[sizeof("10.7.99")];
-  size_t len = sizeof(release);
-  // sysctl will return ENOMEM if the release string is longer than sizeof(release)
-  int ret = sysctl(mib, 2, release, &len, nullptr, 0);
-  // we only want to trigger this on OS X 10.6, on versions 10.6.8 or newer
-  // Darwin version 10 corresponds to OS X version 10.6, version 11 is 10.7
-  // http://en.wikipedia.org/wiki/Darwin_(operating_system)#Release_history
-  if (ret == 0 && NS_CompareVersions(release, "10.8.0") >= 0 && NS_CompareVersions(release, "11") < 0) {
-    CFBundleRef mainBundle = CFBundleGetMainBundle();
-    if (mainBundle) {
-      CFRetain(mainBundle);
-
-      CFStringRef bundleID = CFBundleGetIdentifier(mainBundle);
-      if (bundleID) {
-        CFRetain(bundleID);
-
-        CFMutableDictionaryRef dict = (CFMutableDictionaryRef)CFBundleGetInfoDictionary(mainBundle);
-        CFDictionarySetValue(dict, CFSTR("CFBundleIdentifier"), CFSTR("org.mozilla.firefox"));
-
-        // Trigger a load of the quirks table for org.mozilla.firefox.
-        // We use different function on 32/64bit because of how the APIs
-        // behave to force a call to GetBugsForOurBundleIDFromCoreservicesd.
-#ifdef __i386__
-        ProcessSerialNumber psn;
-        ::GetCurrentProcess(&psn);
-#else
-        SInt32 major;
-        ::Gestalt(gestaltSystemVersionMajor, &major);
-#endif
-
-        // restore the original id
-        dict = (CFMutableDictionaryRef)CFBundleGetInfoDictionary(mainBundle);
-        CFDictionarySetValue(dict, CFSTR("CFBundleIdentifier"), bundleID);
-
-        CFRelease(bundleID);
-      }
-      CFRelease(mainBundle);
-    }
-  }
-}
-
-#endif //MacQuirks_h__
--- a/toolkit/xre/moz.build
+++ b/toolkit/xre/moz.build
@@ -25,17 +25,16 @@ EXPORTS += ['nsAppRunner.h']
 if CONFIG['MOZ_INSTRUMENT_EVENT_LOOP']:
     EXPORTS += ['EventTracer.h']
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
     UNIFIED_SOURCES += [
         'nsNativeAppSupportWin.cpp',
     ]
 elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
-    EXPORTS += ['MacQuirks.h']
     UNIFIED_SOURCES += [
         'MacApplicationDelegate.mm',
         'MacAutoreleasePool.mm',
         'MacLaunchHelper.mm',
         'nsCommandLineServiceMac.cpp',
         'nsNativeAppSupportCocoa.mm',
         'updaterfileutils_osx.mm',
     ]