# Revert bug 1045209 to allow using absolute path diff --git content/media/gmp/GMPChild.cpp content/media/gmp/GMPChild.cpp index 4165a75..81914d5 100644 --- mozilla/content/media/gmp/GMPChild.cpp +++ mozilla/content/media/gmp/GMPChild.cpp @@ -66,19 +66,11 @@ } #endif - nsCOMPtr parent; - rv = aLibFile->GetParent(getter_AddRefs(parent)); - if (NS_FAILED(rv)) { - return false; - } - - nsAutoString parentLeafName; - rv = parent->GetLeafName(parentLeafName); - if (NS_FAILED(rv)) { + nsAutoString leafName; + if (NS_FAILED(aLibFile->GetLeafName(leafName))) { return false; } - - nsAutoString baseName(Substring(parentLeafName, 4, parentLeafName.Length() - 1)); + nsAutoString baseName(Substring(leafName, 4, leafName.Length() - 1)); #if defined(XP_MACOSX) nsAutoString binaryName = NS_LITERAL_STRING("lib") + baseName + NS_LITERAL_STRING(".dylib"); diff --git content/media/gmp/GMPParent.cpp content/media/gmp/GMPParent.cpp index e63453e..bf83b30 100644 --- mozilla/content/media/gmp/GMPParent.cpp +++ mozilla/content/media/gmp/GMPParent.cpp @@ -87,23 +87,16 @@ mService = aService; mDirectory = aPluginDir; - // aPluginDir is // - // where should be gmp-gmpopenh264 - nsCOMPtr parent; - nsresult rv = aPluginDir->GetParent(getter_AddRefs(parent)); - if (NS_FAILED(rv)) { - return rv; - } - nsAutoString parentLeafName; - rv = parent->GetLeafName(parentLeafName); + nsAutoString leafname; + nsresult rv = aPluginDir->GetLeafName(leafname); if (NS_FAILED(rv)) { return rv; } LOGD(("%s::%s: %p for %s", __CLASS__, __FUNCTION__, this, - NS_LossyConvertUTF16toASCII(parentLeafName).get())); + NS_LossyConvertUTF16toASCII(leafname).get())); - MOZ_ASSERT(parentLeafName.Length() > 4); - mName = Substring(parentLeafName, 4); + MOZ_ASSERT(leafname.Length() > 4); + mName = Substring(leafname, 4); return ReadGMPMetaData(); } diff --git toolkit/modules/GMPInstallManager.jsm toolkit/modules/GMPInstallManager.jsm index 9593492..470384b 100644 --- mozilla/toolkit/modules/GMPInstallManager.jsm +++ mozilla/toolkit/modules/GMPInstallManager.jsm @@ -107,6 +107,7 @@ */ KEY_LOG_ENABLED: "media.gmp-manager.log", KEY_ADDON_LAST_UPDATE: "media.{0}.lastUpdate", + KEY_ADDON_PATH: "media.{0}.path", KEY_ADDON_VERSION: "media.{0}.version", KEY_ADDON_AUTOUPDATE: "media.{0}.autoupdate", KEY_URL: "media.gmp-manager.url", @@ -888,9 +889,7 @@ let gmpAddon = this._gmpAddon; let installToDirPath = Cc["@mozilla.org/file/local;1"]. createInstance(Ci.nsIFile); - let path = OS.Path.join(OS.Constants.Path.profileDir, - gmpAddon.id, - gmpAddon.version); + let path = OS.Path.join(OS.Constants.Path.profileDir, gmpAddon.id); installToDirPath.initWithPath(path); log.info("install to directory path: " + installToDirPath.path); let gmpInstaller = new GMPExtractor(zipPath, installToDirPath.path); @@ -899,10 +898,12 @@ // Success, set the prefs let now = Math.round(Date.now() / 1000); GMPPrefs.set(GMPPrefs.KEY_ADDON_LAST_UPDATE, now, gmpAddon.id); - // Setting the version pref signals installation completion to consumers, - // if you need to set other prefs etc. do it before this. + // Setting the path pref signals installation completion to consumers, + // so set the version and potential other information they use first. GMPPrefs.set(GMPPrefs.KEY_ADDON_VERSION, gmpAddon.version, gmpAddon.id); + GMPPrefs.set(GMPPrefs.KEY_ADDON_PATH, + installToDirPath.path, gmpAddon.id); this._deferred.resolve(extractedPaths); }, err => { this._deferred.reject(err); diff --git toolkit/mozapps/extensions/internal/OpenH264Provider.jsm toolkit/mozapps/extensions/internal/OpenH264Provider.jsm index 1f3a0b1..93517be 100644 --- mozilla/toolkit/mozapps/extensions/internal/OpenH264Provider.jsm +++ mozilla/toolkit/mozapps/extensions/internal/OpenH264Provider.jsm @@ -29,6 +29,7 @@ const OPENH264_PLUGIN_ID = "gmp-gmpopenh264"; const OPENH264_PREF_BRANCH = "media." + OPENH264_PLUGIN_ID + "."; const OPENH264_PREF_ENABLED = "enabled"; +const OPENH264_PREF_PATH = "path"; const OPENH264_PREF_VERSION = "version"; const OPENH264_PREF_LASTUPDATE = "lastUpdate"; const OPENH264_PREF_AUTOUPDATE = "autoupdate"; @@ -93,7 +94,12 @@ get description() { return pluginsBundle.GetStringFromName("openH264_description"); }, - get version() { return prefs.get(OPENH264_PREF_VERSION, ""); }, + get version() { + if (this.isInstalled) { + return prefs.get(OPENH264_PREF_VERSION, ""); + } + return ""; + }, get isActive() { return !this.userDisabled; }, get appDisabled() { return false; }, @@ -217,24 +223,17 @@ get pluginMimeTypes() { return []; }, get pluginLibraries() { - if (this.isInstalled) { - let path = this.version; - return [path]; - } - return []; + let path = prefs.get(OPENH264_PREF_PATH, null); + return path && path.length ? [OS.Path.basename(path)] : []; }, get pluginFullpath() { - if (this.isInstalled) { - let path = OS.Path.join(OS.Constants.Path.profileDir, - OPENH264_PLUGIN_ID, - this.version); - return [path]; - } - return []; + let path = prefs.get(OPENH264_PREF_PATH, null); + return path && path.length ? [path] : []; }, get isInstalled() { - return this.version.length > 0; + let path = prefs.get(OPENH264_PREF_PATH, ""); + return path.length > 0; }, }; @@ -245,19 +244,14 @@ "OpenH264Provider" + "::"); OpenH264Wrapper._log = Log.repository.getLoggerWithMessagePrefix("Toolkit.OpenH264Provider", "OpenH264Wrapper" + "::"); - this.gmpPath = null; - if (OpenH264Wrapper.isInstalled) { - this.gmpPath = OS.Path.join(OS.Constants.Path.profileDir, - OPENH264_PLUGIN_ID, - prefs.get(OPENH264_PREF_VERSION, null)); - } + this.gmpPath = prefs.get(OPENH264_PREF_PATH, null); let enabled = prefs.get(OPENH264_PREF_ENABLED, true); this._log.trace("startup() - enabled=" + enabled + ", gmpPath="+this.gmpPath); Services.obs.addObserver(this, AddonManager.OPTIONS_NOTIFICATION_DISPLAYED, false); prefs.observe(OPENH264_PREF_ENABLED, this.onPrefEnabledChanged, this); - prefs.observe(OPENH264_PREF_VERSION, this.onPrefVersionChanged, this); + prefs.observe(OPENH264_PREF_PATH, this.onPrefPathChanged, this); prefs.observe(OPENH264_PREF_LOGGING, configureLogging); if (this.gmpPath && enabled) { @@ -270,7 +264,7 @@ this._log.trace("shutdown()"); Services.obs.removeObserver(this, AddonManager.OPTIONS_NOTIFICATION_DISPLAYED); prefs.ignore(OPENH264_PREF_ENABLED, this.onPrefEnabledChanged, this); - prefs.ignore(OPENH264_PREF_VERSION, this.onPrefVersionChanged, this); + prefs.ignore(OPENH264_PREF_PATH, this.onPrefPathChanged, this); prefs.ignore(OPENH264_PREF_LOGGING, configureLogging); return OpenH264Wrapper._updateTask; @@ -296,25 +290,20 @@ wrapper); }, - onPrefVersionChanged: function() { + onPrefPathChanged: function() { let wrapper = OpenH264Wrapper; AddonManagerPrivate.callAddonListeners("onUninstalling", wrapper, false); if (this.gmpPath) { - this._log.info("onPrefVersionChanged() - unregistering gmp directory " + this.gmpPath); + this._log.info("onPrefPathChanged() - removing gmp directory " + this.gmpPath); gmpService.removePluginDirectory(this.gmpPath); } AddonManagerPrivate.callAddonListeners("onUninstalled", wrapper); AddonManagerPrivate.callInstallListeners("onExternalInstall", null, wrapper, null, false); - this.gmpPath = null; - if (OpenH264Wrapper.isInstalled) { - this.gmpPath = OS.Path.join(OS.Constants.Path.profileDir, - OPENH264_PLUGIN_ID, - prefs.get(OPENH264_PREF_VERSION, null)); - } + this.gmpPath = prefs.get(OPENH264_PREF_PATH, null); if (this.gmpPath && wrapper.isActive) { - this._log.info("onPrefVersionChanged() - registering gmp directory " + this.gmpPath); + this._log.info("onPrefPathChanged() - adding gmp directory " + this.gmpPath); gmpService.addPluginDirectory(this.gmpPath); } AddonManagerPrivate.callAddonListeners("onInstalled", wrapper);