Bug 1255567 - Sign quitter extension for valgrind-test and pgo/profileserver, r?jgriffin draft
authorAndrew Halberstadt <ahalberstadt@mozilla.com>
Thu, 10 Mar 2016 15:37:51 -0500
changeset 339240 853a1b4adb5eea8a99dd9d1610f04f999963eaae
parent 339110 dd1abe874252e507b825a0a4e1063b0e13578288
child 515947 c997ef798159db22f6440411acd317f8c3d6a821
push id12680
push userahalberstadt@mozilla.com
push dateThu, 10 Mar 2016 21:56:37 +0000
reviewersjgriffin
bugs1255567
milestone48.0a1
Bug 1255567 - Sign quitter extension for valgrind-test and pgo/profileserver, r?jgriffin MozReview-Commit-ID: HtH8z4rBSMY
build/pgo/profileserver.py
build/valgrind/mach_commands.py
tools/quitter/install.rdf
tools/quitter/moz.build
tools/quitter/quitter@mozilla.org.xpi
--- a/build/pgo/profileserver.py
+++ b/build/pgo/profileserver.py
@@ -44,17 +44,17 @@ if __name__ == '__main__':
     prefs.update(Preferences.read_prefs(prefpath))
     interpolation = { "server": "%s:%d" % httpd.httpd.server_address,
                       "OOP": "false"}
     prefs = json.loads(json.dumps(prefs) % interpolation)
     for pref in prefs:
       prefs[pref] = Preferences.cast(prefs[pref])
     profile = FirefoxProfile(profile=profilePath,
                              preferences=prefs,
-                             addons=[os.path.join(build.distdir, 'xpi-stage', 'quitter')],
+                             addons=[os.path.join(build.topsrcdir, 'tools', 'quitter', 'quitter@mozilla.org.xpi')],
                              locations=locations)
 
     env = os.environ.copy()
     env["MOZ_CRASHREPORTER_NO_REPORT"] = "1"
     env["XPCOM_DEBUG_BREAK"] = "warn"
 
     # For VC12+, make sure we can find the right bitness of pgort1x0.dll
     if not substs['HAVE_64BIT_BUILD']:
--- a/build/valgrind/mach_commands.py
+++ b/build/valgrind/mach_commands.py
@@ -68,17 +68,17 @@ class MachCommands(MachCommandBase):
             prefs = {}
             prefs.update(Preferences.read_prefs(prefpath))
             interpolation = { 'server': '%s:%d' % httpd.httpd.server_address,
                               'OOP': 'false'}
             prefs = json.loads(json.dumps(prefs) % interpolation)
             for pref in prefs:
                 prefs[pref] = Preferences.cast(prefs[pref])
 
-            quitter = os.path.join(self.distdir, 'xpi-stage', 'quitter')
+            quitter = os.path.join(self.topsrcdir, 'tools', 'quitter', 'quitter@mozilla.org.xpi')
 
             locations = ServerLocations()
             locations.add_host(host='127.0.0.1',
                                port=httpd.httpd.server_port,
                                options='primary')
 
             profile = FirefoxProfile(profile=profilePath,
                                      preferences=prefs,
--- a/tools/quitter/install.rdf
+++ b/tools/quitter/install.rdf
@@ -1,25 +1,34 @@
 <?xml version="1.0"?>
 
 <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
      xmlns:em="http://www.mozilla.org/2004/em-rdf#">
 
   <Description about="urn:mozilla:install-manifest">
     <em:id>quitter@mozilla.org</em:id>
-    <em:version>2013.09.14</em:version>
+    <em:version>2016.03.10</em:version>
     <em:type>2</em:type>
 
     <!-- Target Application this extension can install into,
          with minimum and maximum supported versions. -->
     <em:targetApplication>
       <Description>
-        <em:id>toolkit@mozilla.org</em:id>
-#expand        <em:minVersion>__MOZILLA_VERSION_U__</em:minVersion>
-#expand        <em:maxVersion>__MOZILLA_VERSION_U__</em:maxVersion>
+        <!-- Firefox -->
+        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
+        <em:minVersion>45.0</em:minVersion>
+        <em:maxVersion>*</em:maxVersion>
+      </Description>
+    </em:targetApplication>
+    <em:targetApplication>
+      <Description>
+        <!-- Fennec -->
+        <em:id>{aa3c5121-dab2-40e2-81ca-7ea25febc110}</em:id>
+        <em:minVersion>45.0</em:minVersion>
+        <em:maxVersion>*</em:maxVersion>
       </Description>
     </em:targetApplication>
 
     <!-- Front End MetaData -->
     <em:name>Quitter</em:name>
     <em:description>Adds a quit method that content pages can use to quit the application.</em:description>
     <em:creator>Mozilla</em:creator>
   </Description>
--- a/tools/quitter/moz.build
+++ b/tools/quitter/moz.build
@@ -10,15 +10,12 @@ EXTRA_COMPONENTS += [
 
 XPI_NAME = 'quitter'
 
 JAR_MANIFESTS += ['jar.mn']
 
 USE_EXTENSION_MANIFEST = True
 NO_JS_MANIFEST = True
 
-FINAL_TARGET_PP_FILES += [
+FINAL_TARGET_FILES += [
+    'chrome.manifest',
     'install.rdf',
 ]
-
-FINAL_TARGET_FILES += [
-    'chrome.manifest',
-]
new file mode 100644
index 0000000000000000000000000000000000000000..a8a6b8ad05ea8f43c7511f85fcee6835b285c840
GIT binary patch
literal 6864
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