Bug 1282980 - Remove MacQuirks. r=jrmuizel
authorEric Rahm <erahm@mozilla.com>
Tue, 19 Jul 2016 23:48:29 -0700
changeset 330871 1f8e7ac750be343694acda3f3761a6b004dc2ea1
parent 330861 6f5fc76550ed13a9cdde280276dc618f6aae5276
child 330872 9f4b5bd8af0c54daafd5e19358e7871f2bd6c2c3
push id9858
push userjlund@mozilla.com
push dateMon, 01 Aug 2016 14:37:10 +0000
treeherdermozilla-aurora@203106ef6cb6 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjrmuizel
bugs1282980, 1282184
milestone50.0a1
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"
 
@@ -350,20 +346,16 @@ int main(int argc, char* argv[], char* e
     NS_LogTerm();
 
     return result;
   }
 #endif
 
   mozilla::TimeStamp start = mozilla::TimeStamp::Now();
 
-#ifdef XP_MACOSX
-  TriggerQuirks();
-#endif
-
   nsIFile *xreDirectory;
 
 #ifdef HAS_DLL_BLOCKLIST
   DllBlocklist_Initialize();
 
 #ifdef DEBUG
   // In order to be effective against AppInit DLLs, the blocklist must be
   // initialized before user32.dll is loaded into the process (bug 932100).
--- 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',
     ]