Bug 1125280 Part 1 build- Different suggestedsite tiles on first run for kidfox.r=gps
authorAllison Naaktgeboren <ally@mozilla.com>
Fri, 07 Aug 2015 21:40:41 -0700
changeset 256941 b8f3ee0be9aa
parent 256940 b236dcce4e2b
child 256942 bd1474381abd
push id29195
push userphilringnalda@gmail.com
push date2015-08-09 01:37 +0000
treeherdermozilla-central@fd63d8ed9d2e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersgps
bugs1125280
milestone42.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 1125280 Part 1 build- Different suggestedsite tiles on first run for kidfox.r=gps
mobile/android/base/resources/drawable-xhdpi/suggestedsites_restricted_fxsupport.png
mobile/android/base/resources/drawable-xhdpi/suggestedsites_webmaker.png
mobile/locales/en-US/chrome/region.properties
python/mozbuild/mozbuild/action/generate_suggestedsites.py
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f28a62f53a7f896b9434df91d5fd62f4624468e8
GIT binary patch
literal 2643
zc$@)K3as^sP)<h;3K|Lk000e1NJLTq009^P001}$1^@s6CROJS000UaNkl<Zc-rip
zZLAzs8OP^xOQE%-46j9-nr?+Q4GLw!NP|kq0Fv@SOBWjy;RCLMtyC)+sR3VN(p91a
zM98MrU<(m8ShYd;Fc4B3NDHghTP!4Gs4enpS!<gTdb#%a|8NYOIp;j*oSn|NyZ3pL
zUz6rO=efIcXMS_$oS8F$5Q1SCrVu9m24EP51;a253x;7Bh6Teg3=4)~7#0k}FboT(
z5SD^X;AwCVm~F{F3tR`9U?;fPl0OR00XKn-U=R3!;O)+^V1}Nb3N_vU^D=oe!0*9Z
zn*3`Gwa*3#I3UzmAb8s|ESRC@<H8(|WO9!qa=&G$znExqk>KsmuwaIo?+J4p)Z`yD
z<bIpDlrqI-g10}zf*ERlD9rJWCV!71_f|vwlZpCE1aE)l|3e7spaI$-VZju`#ljq$
zHTk;?xoZveXR=_JJ|qI&5wl>5V}nqm0~Ts>$2<iy%7S57Fq4~6uo7$q&x7?~E(mf9
z2C!h5J|t$r^e4}<V3;8kOvHle54H}uU@9PzR0RLMSuh}bGuV~jZtx%oBqxA6*aZFr
zc7Z3s?cfwm(JA06utDahpe_IZc`()U3rz#dW&1yaSHM5OPS65h1t&SwSq0);sMEu<
zz$M@&x!n@57cA)`!BoIX@CX<KZ-EYY6Fdj*1DAu59<Rq+vYsvy5L<*3$~v*cUuyDq
zSbiQEeqIN0S5Bzpfl_PRXKxZoOV+M>)Tx44wymq5S<Vh25NTJNNYd0?B1I~wB?Yq@
zYysn%yG56Se+qLP0Lwri`2_fzpyLJbF%Vc70XKlxg*^^}?}OurdizEGxYuRsxeo+$
zEVu^z5gZY2(FO}VcJ@U0MWU5}nv?%bY9A}8gSIe7laOKowMjzR#uh24d2X|o@-y|b
z1|Sih(Jh#bhJ@!F3mpNU1z!S(9oxJKP9`?QRPbxzAKSrclUOiQWN&J(=q=s`XF2Tf
zZNm<pNK(V>T3EPX=-G}Cw1iu9lmoVi+B8*}>l00)r&Q782ZX?Ceu7cOg@45LB7Yo`
zqVb6}M9<}6(R+-6nUhp7>qP!|lHBRlgQ!hhBE%q7&hq65Ce+k!3(rtQP;_ltE*;PS
zb=fusZKCI)qRPKP^oRmUgE)D#L6RZr7R-gB?4Wn#6-1kNWxLH_ACdQvrtS`qI`A%0
z_wGIy%-P^Qkw4}UJAHSgj^he75SA+#V2;!<Zc_&-(eo;$wxsRRGpT1}L<v2y^nPj}
zk{p#m-UWh=m%z>70`N(&$&&vLxCdM&^B*<j{ay2cP6Gcn<nIJ?GK0SxggGwn@d3th
zVw`8*0F1%hrODq0z6mY@9|4QNdg{#TIriXB`GTPjRQeJyF1dDHt!tOKMqU+1!L&iO
zs9B^r#MsIYz_FP|XIOeAb29no8*=w+KF}KCvz({NKb|<qw}8Nd6QoQ{Q3t^Q2<F7D
zWg(sdpEl$j170@NztQpR7Y&$TnmyjF+9|nqsv9s>u>XA;M2^ynDqAr7iH3&^XZR@|
z&(w@-a$hjy{+0MFYY8by**S5)FvlOj$RG$tvJ89y1Qs?M>fbVif@zcW?3XCDl4@6T
zY?GRUyb|KX**AiD-8~=DF+?WsG$QX8#AmsJXm_3CMq5tQ*av2Tpzj6a&x4*zNHmnQ
z_TUJHu5JIWapAS|UxtQ4jjBa3m3|b=9-n+i!7L^6RuHx46YcH*frSr)f7!+(23#;R
z!D3JYb+8Jo2HOqwSJP)mb&7Tf1yfVnms7h%?tlKhqu3&tV6q4%Ci1Q#4<2(o?C`MS
zR-*kz5DchbP64-p9X;GaaHG=>tR5r{Py>}A5KN@BFQaz;%g}@cqyKVucpp&q<tQHo
z0m1D=+r1zhK*5ZFl}fM7S1|c+{z^d;R0mWrRiQ*FwZ%~uOp65rz`Z%n*rs@lXtNkh
z5Cg;!2nJ9vcZ&RRgTn#R_Pnz*94Ntn!UO{f6ig%g*;p_D{HVtRY6i8k9C2B-n`n0z
z2nJ9vmpWVy9R_<r3Jw`^u5tYSb@E|Hb*3d`!4xi-m<6N%a<>q9%Zb{j6YbU$vnSNU
znA7@PFjo?5&QRk?=Yr9${Kt9~4Ds}E1Ehw!O%{x`c83L1{w&feqV^)9-FGzk*An^f
zfeS#;mx7@MaE8}lH~pEe20>0DgJ>!PBAANO11qO?l4}-8ZQo?U05IF-Awy4LT%q~H
z9w73+3xYlp%(#bOB4LhYgkXpsQf?}mGjfe*kwoM%O&#+rQVzjn*kQ=~3sHML@r3vE
z%ng6rggKs-Ib{pxC)64?9)h`AnB!B1`p@W+sk?yvQ5PucTfxxv8)ej{*KDz)6FLj#
zeO3{<=jp~@h#tu=J>O$A9|Q#oW{V+r9Z`Ru$Bl<eggL%!sK3+ts6c+=f&`NkAQ(!F
zwIXX1mrtFX)88Qr=6z;>Hw?MEGY{^4kmwa0250^+SGJq5-0@p+U~Ue<{LYX&Ml4sk
zo04aSg~A*!f)g_jI^IgmI6YNh4<;h^jnrfIN_Yw;1!0f3+;_^XO+TyTKSj-gQM&qM
zyaJvF;~s;%+r-g{XL1N;t>t0L1{iT%yJG^}4_0QRK`k%32Q;KiAslO5uN_nIU+%GE
zd2+YyIcrjPeWZh)Dp#S#K}xP&Cu;lL02#4h^!!-#9uH^^)G={%;_IG*p<kA7zYP4E
z!`eI3h&z+>#DBnN3_E8NRC`!Uw&BpjNkOEor|#TzZU5yeL(n36C#BSuBpz$FM4&^A
z-4rR9cn}3M0&W8n!Y_UfMnO=3U?#vUFTtq%M#-d~VxF!nVL`tL|9G%n_{B@$pkZyF
zsg_x)cGvSqQ5P{t>9ep}SCb!0nuZnI=mnPONI}E$J37iiT}*Ad_os>@?xIEZru+rt
zza)hEW`TPD3PwHaCk}U~j)6;vI%9<_@#!y^>EHojj;)$Dv%%9IcO8dPWG?XpI2C*m
z9I>oxT=Q9g+Ovz_^sE;f+BK<xSVc;n3v-uPn|>t2e_PXn@h7!?ziz=y1yv2_62IW1
zp7~V+fg^LlSHRCeOL8ChhGU(Dpqi5pxorm^4^Dzba#m{-NThVufb)qS-KF48uo*lK
zeg#$#V<H!VbzoO!o!-~LZ^6>crR3+p+u&6&+xB>X$AJ`kcfIL@CsOXSQ4TC}rYDlQ
z-mh3Gqc(AA*zwuc1q-I?AeoTg>^QlY3662dneVaV*FX%KnwNpqa=ctjSFcL!?1|5F
zPU;KD?7ye@+Ws$Ilf=rR>Sdw+t(qVP6@GOrGlb9*D6}?jYkoI1!-8SKuwWR51;c`2
z7#0i*h6Tg0U|29L7=~fNuwWR51;c`2!7vO9h6Teg#R{e)1yC=vHg9Vd3^VDd6k40N
zFAIiY7#0k}{I{Jt761SM02t(NJ%s^uq!5Au_yUsYzfV)B96|s9002ovPDHLkV1lQj
B%yj?&
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f8d201f052552b0135001634a33f026cbc519193
GIT binary patch
literal 1844
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
--- a/mobile/locales/en-US/chrome/region.properties
+++ b/mobile/locales/en-US/chrome/region.properties
@@ -65,8 +65,22 @@ browser.suggestedsites.fxaddons.title=Ad
 browser.suggestedsites.fxaddons.url=https://addons.mozilla.org/en-US/android/
 browser.suggestedsites.fxaddons.bgcolor=#62be06
 browser.suggestedsites.fxaddons.trackingid=630
 
 browser.suggestedsites.fxsupport.title=Firefox Help and Support
 browser.suggestedsites.fxsupport.url=https://support.mozilla.org/en-US/products/mobile
 browser.suggestedsites.fxsupport.bgcolor=#f37c00
 browser.suggestedsites.fxsupport.trackingid=631
+
+browser.suggestedsites.restricted.list.0=restricted_fxsupport
+browser.suggestedsites.restricted.list.1=webmaker
+browser.suggestedsites.restricted.list.2=mozilla
+
+browser.suggestedsites.restricted_fxsupport.title=Firefox Help and Support for Restricted Profiles
+browser.suggestedsites.restricted_fxsupport.url=https://support.mozilla.org/en-US/products/mobile
+browser.suggestedsites.restricted_fxsupport.bgcolor=#f37c00
+browser.suggestedsites.restricted_fxsupport.trackingid=000
+
+browser.suggestedsites.webmaker.title=Learn the Web: Mozilla Webmaker
+browser.suggestedsites.webmaker.url=https://webmaker.org/
+browser.suggestedsites.webmaker.bgcolor=#f37c00
+browser.suggestedsites.webmaker.trackingid=000
--- a/python/mozbuild/mozbuild/action/generate_suggestedsites.py
+++ b/python/mozbuild/mozbuild/action/generate_suggestedsites.py
@@ -6,33 +6,35 @@
 ''' Script to generate the suggestedsites.json file for Fennec.
 
 This script follows these steps:
 
 1. Read the region.properties file in all the given source directories
 (see srcdir option). Merge all properties into a single dict accounting for
 the priority of source directories.
 
-2. Read the list of sites from the 'browser.suggestedsites.list.INDEX'
-properties with value of these keys being an identifier for each suggested site
-e.g. browser.suggestedsites.list.0=mozilla, browser.suggestedsites.list.1=fxmarketplace.
+2. Read the list of sites from the list 'browser.suggestedsites.list.INDEX' and
+'browser.suggestedsites.restricted.list.INDEX' properties with value of these keys
+being an identifier for each suggested site e.g. browser.suggestedsites.list.0=mozilla,
+browser.suggestedsites.list.1=fxmarketplace.
 
 3. For each site identifier defined by the list keys, look for matching branches
 containing the respective properties i.e. url, title, etc. For example,
 for a 'mozilla' identifier, we'll look for keys like:
 browser.suggestedsites.mozilla.url, browser.suggestedsites.mozilla.title, etc.
 
 4. Generate a JSON representation of each site, join them in a JSON array, and
 write the result to suggestedsites.json on the locale-specific raw resource
 directory e.g. raw/suggestedsites.json, raw-pt-rBR/suggestedsites.json.
 '''
 
 from __future__ import absolute_import, print_function
 
 import argparse
+import copy
 import json
 import sys
 import os
 
 from mozbuild.dotproperties import (
     DotProperties,
 )
 from mozbuild.util import (
@@ -73,47 +75,63 @@ def main(args):
                         action='append', required=True,
                         help='directories to read inputs from, in order of priority')
     parser.add_argument('output', metavar='OUTPUT',
                         help='output')
     opts = parser.parse_args(args)
 
     # Use reversed order so that the first srcdir has higher priority to override keys.
     properties = merge_properties('region.properties', reversed(opts.srcdir))
-    names = properties.get_list('browser.suggestedsites.list')
-    if opts.verbose:
-        print('Reading {len} suggested sites: {names}'.format(len=len(names), names=names))
 
     # Keep these two in sync.
     image_url_template = 'android.resource://%s/drawable/suggestedsites_{name}' % opts.android_package_name
     drawables_template = 'drawable*/suggestedsites_{name}.*'
 
     # Load properties corresponding to each site name and define their
     # respective image URL.
     sites = []
-    for name in names:
-        site = properties.get_dict('browser.suggestedsites.{name}'.format(name=name), required_keys=('title', 'url', 'bgcolor'))
-        site['imageurl'] = image_url_template.format(name=name)
-        sites.append(site)
+
+    def add_names(names, defaults={}):
+        for name in names:
+            site = copy.deepcopy(defaults)
+            site.update(properties.get_dict('browser.suggestedsites.{name}'.format(name=name), required_keys=('title', 'url', 'bgcolor')))
+            site['imageurl'] = image_url_template.format(name=name)
+            sites.append(site)
 
-        # Now check for existence of an appropriately named drawable.  If none
-        # exists, throw.  This stops a locale discovering, at runtime, that the
-        # corresponding drawable was not added to en-US.
-        if not opts.resources:
-            continue
-        resources = os.path.abspath(opts.resources)
-        finder = FileFinder(resources)
-        matches = [p for p, _ in finder.find(drawables_template.format(name=name))]
-        if not matches:
-            raise Exception("Could not find drawable in '{resources}' for '{name}'"
-                .format(resources=resources, name=name))
-        else:
-            if opts.verbose:
-                print("Found {len} drawables in '{resources}' for '{name}': {matches}"
-                      .format(len=len(matches), resources=resources, name=name, matches=matches))
+            # Now check for existence of an appropriately named drawable.  If none
+            # exists, throw.  This stops a locale discovering, at runtime, that the
+            # corresponding drawable was not added to en-US.
+            if not opts.resources:
+                continue
+            resources = os.path.abspath(opts.resources)
+            finder = FileFinder(resources)
+            matches = [p for p, _ in finder.find(drawables_template.format(name=name))]
+            if not matches:
+                raise Exception("Could not find drawable in '{resources}' for '{name}'"
+                    .format(resources=resources, name=name))
+            else:
+                if opts.verbose:
+                    print("Found {len} drawables in '{resources}' for '{name}': {matches}"
+                          .format(len=len(matches), resources=resources, name=name, matches=matches))
+
+    # We want the lists to be ordered for reproducibility.  Each list has a
+    # "default" JSON list item which will be extended by the properties read.
+    lists = [
+        ('browser.suggestedsites.list', {}),
+        ('browser.suggestedsites.restricted.list', {'restricted': True}),
+    ]
+    if opts.verbose:
+        print('Reading {len} suggested site lists: {lists}'.format(len=len(lists), lists=[list_name for list_name, _ in lists]))
+
+    for (list_name, list_item_defaults) in lists:
+        names = properties.get_list(list_name)
+        if opts.verbose:
+            print('Reading {len} suggested sites from {list}: {names}'.format(len=len(names), list=list_name, names=names))
+        add_names(names, list_item_defaults)
+
 
     # FileAvoidWrite creates its parent directories.
     output = os.path.abspath(opts.output)
     fh = FileAvoidWrite(output)
     json.dump(sites, fh)
     existed, updated = fh.close()
 
     if not opts.silent: