<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugzilla.mozilla.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="20260825.1"
          urlbase="https://bugzilla.mozilla.org/"
          
          maintainer="bmo-mods@mozilla.com"
>

    <bug>
          <bug_id>55366</bug_id>
          
          <filed_via>unknown</filed_via>
          <creation_ts>2000-10-05 12:17:47 -0700</creation_ts>
          <short_desc>Don&apos;t reveal UI language to site/page -- Change navigator.language to use Accept-Language instead of the UI language</short_desc>
          <delta_ts>2019-03-13 06:42:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>Components</classification>
          <product>Core</product>
          <component>DOM: Core &amp; HTML</component>
          <version>Trunk</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_type>defect</bug_type>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://gemal.dk/browserspy/language.html</bug_file_loc>
          <status_whiteboard>[defective-privacy]</status_whiteboard>
          <keywords>dev-doc-complete, privacy</keywords>
          <priority>P4</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>mozilla5</target_milestone>
          <dependson>572656</dependson>
    
    <dependson>610267</dependson>
          <blocked>418485</blocked>
    
    <blocked>646428</blocked>
    
    <blocked>1386461</blocked>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ben Bucksch (:BenB)">ben.bucksch</reporter>
          <assigned_to name="Ben Bucksch (:BenB)">ben.bucksch</assigned_to>
          <cc>aha</cc>
    
    <cc>andrewm715+bugzilla</cc>
    
    <cc>antoine.mechelynck</cc>
    
    <cc>asa</cc>
    
    <cc>barrowma</cc>
    
    <cc>bartml</cc>
    
    <cc>ben.bucksch</cc>
    
    <cc>bobj</cc>
    
    <cc>bugzilla</cc>
    
    <cc>bzbarsky</cc>
    
    <cc>cbegle</cc>
    
    <cc>cesarb</cc>
    
    <cc>chpe</cc>
    
    <cc>daniel</cc>
    
    <cc>dao+bmo</cc>
    
    <cc>dbaron</cc>
    
    <cc>deletesoftware+moz</cc>
    
    <cc>deprecationmail</cc>
    
    <cc>djcater+bugzilla</cc>
    
    <cc>dveditz</cc>
    
    <cc>ehsan.akhgari</cc>
    
    <cc>erik</cc>
    
    <cc>gagan</cc>
    
    <cc>gavin.sharp</cc>
    
    <cc>gionnico</cc>
    
    <cc>gk</cc>
    
    <cc>gphemsley</cc>
    
    <cc>haqer</cc>
    
    <cc>hsivonen</cc>
    
    <cc>jmd</cc>
    
    <cc>john</cc>
    
    <cc>jorgev</cc>
    
    <cc>jstenback+bmo</cc>
    
    <cc>jud</cc>
    
    <cc>kairo</cc>
    
    <cc>karl</cc>
    
    <cc>l10n</cc>
    
    <cc>loadrunner</cc>
    
    <cc>maxxmozilla</cc>
    
    <cc>messi</cc>
    
    <cc>mike.shaver</cc>
    
    <cc>momoi</cc>
    
    <cc>mozbugz</cc>
    
    <cc>mozilla</cc>
    
    <cc>msanz</cc>
    
    <cc>obsolete.fax</cc>
    
    <cc>pascalc</cc>
    
    <cc>pb-dsp_bugzilla</cc>
    
    <cc>pbartecki</cc>
    
    <cc>pgunn01</cc>
    
    <cc>piskozub</cc>
    
    <cc>reed</cc>
    
    <cc>roberts</cc>
    
    <cc>ryanvm</cc>
    
    <cc>shawn.sumin</cc>
    
    <cc>smorrison</cc>
    
    <cc>the.sheppy</cc>
    
    <cc>toniher</cc>
    
    <cc>verah</cc>
    
    <cc>xtc4uall</cc>
          
          <cf_platform_rel>---</cf_platform_rel>
          <cf_bmo_component_move>---</cf_bmo_component_move>
          <cf_tracking_win>---</cf_tracking_win>
          <cf_firefox_messaging_system>---</cf_firefox_messaging_system>
          <cf_tracking_e10s>---</cf_tracking_e10s>
          <cf_blocking_webextensions>---</cf_blocking_webextensions>
          <cf_root_cause>---</cf_root_cause>
          <cf_data_science_product_support_area>---</cf_data_science_product_support_area>
          <cf_backlog>---</cf_backlog>
          <cf_tracking_p11>---</cf_tracking_p11>
          <cf_geckoview>---</cf_geckoview>
          <cf_tracking_firefox5>-</cf_tracking_firefox5>
          <cf_status_firefox5>---</cf_status_firefox5>
          <cf_tracking_firefox6>---</cf_tracking_firefox6>
          <cf_status_firefox6>---</cf_status_firefox6>
          <cf_tracking_firefox7>---</cf_tracking_firefox7>
          <cf_status_firefox7>---</cf_status_firefox7>
          <cf_tracking_firefox8>---</cf_tracking_firefox8>
          <cf_status_firefox8>---</cf_status_firefox8>
          <cf_tracking_firefox9>---</cf_tracking_firefox9>
          <cf_status_firefox9>---</cf_status_firefox9>
          <cf_a11y_review_project_flag>---</cf_a11y_review_project_flag>
          <cf_tracking_firefox10>---</cf_tracking_firefox10>
          <cf_status_firefox10>---</cf_status_firefox10>
          <cf_tracking_firefox11>---</cf_tracking_firefox11>
          <cf_status_firefox11>---</cf_status_firefox11>
          <cf_tracking_firefox12>---</cf_tracking_firefox12>
          <cf_status_firefox12>---</cf_status_firefox12>
          <cf_tracking_firefox13>---</cf_tracking_firefox13>
          <cf_status_firefox13>---</cf_status_firefox13>
          <cf_tracking_firefox14>---</cf_tracking_firefox14>
          <cf_accessibility_severity>---</cf_accessibility_severity>
          <cf_status_firefox14>---</cf_status_firefox14>
          <cf_tracking_firefox15>---</cf_tracking_firefox15>
          <cf_status_firefox15>---</cf_status_firefox15>
          <cf_tracking_firefox16>---</cf_tracking_firefox16>
          <cf_status_firefox16>---</cf_status_firefox16>
          <cf_tracking_firefox17>---</cf_tracking_firefox17>
          <cf_status_firefox17>---</cf_status_firefox17>
          <cf_tracking_firefox18>---</cf_tracking_firefox18>
          <cf_status_firefox18>---</cf_status_firefox18>
          <cf_tracking_firefox19>---</cf_tracking_firefox19>
          <cf_status_firefox19>---</cf_status_firefox19>
          <cf_install_update_workflow>---</cf_install_update_workflow>
          <cf_tracking_firefox20>---</cf_tracking_firefox20>
          <cf_status_firefox20>---</cf_status_firefox20>
          <cf_tracking_firefox21>---</cf_tracking_firefox21>
          <cf_status_firefox21>---</cf_status_firefox21>
          <cf_tracking_firefox22>---</cf_tracking_firefox22>
          <cf_status_firefox22>---</cf_status_firefox22>
          <cf_tracking_firefox23>---</cf_tracking_firefox23>
          <cf_status_firefox23>---</cf_status_firefox23>
          <cf_tracking_firefox24>---</cf_tracking_firefox24>
          <cf_status_firefox24>---</cf_status_firefox24>
          <cf_performance_impact>---</cf_performance_impact>
          <cf_tracking_firefox25>---</cf_tracking_firefox25>
          <cf_status_firefox25>---</cf_status_firefox25>
          <cf_tracking_firefox26>---</cf_tracking_firefox26>
          <cf_status_firefox26>---</cf_status_firefox26>
          <cf_tracking_firefox27>---</cf_tracking_firefox27>
          <cf_status_firefox27>---</cf_status_firefox27>
          <cf_tracking_firefox28>---</cf_tracking_firefox28>
          <cf_status_firefox28>---</cf_status_firefox28>
          <cf_tracking_firefox29>---</cf_tracking_firefox29>
          <cf_status_firefox29>---</cf_status_firefox29>
          <cf_size_estimate>---</cf_size_estimate>
          <cf_tracking_firefox30>---</cf_tracking_firefox30>
          <cf_status_firefox30>---</cf_status_firefox30>
          <cf_tracking_firefox31>---</cf_tracking_firefox31>
          <cf_status_firefox31>---</cf_status_firefox31>
          <cf_tracking_firefox32>---</cf_tracking_firefox32>
          <cf_status_firefox32>---</cf_status_firefox32>
          <cf_tracking_firefox33>---</cf_tracking_firefox33>
          <cf_status_firefox33>---</cf_status_firefox33>
          <cf_tracking_firefox34>---</cf_tracking_firefox34>
          <cf_status_firefox34>---</cf_status_firefox34>
          <cf_webcompat_priority>---</cf_webcompat_priority>
          <cf_tracking_firefox35>---</cf_tracking_firefox35>
          <cf_status_firefox35>---</cf_status_firefox35>
          <cf_tracking_firefox36>---</cf_tracking_firefox36>
          <cf_status_firefox36>---</cf_status_firefox36>
          <cf_tracking_firefox37>---</cf_tracking_firefox37>
          <cf_status_firefox37>---</cf_status_firefox37>
          <cf_tracking_firefox38>---</cf_tracking_firefox38>
          <cf_status_firefox38>---</cf_status_firefox38>
          <cf_tracking_firefox38_0_5>---</cf_tracking_firefox38_0_5>
          <cf_tracking_firefox39>---</cf_tracking_firefox39>
          <cf_webcompat_score>---</cf_webcompat_score>
          <cf_status_firefox38_0_5>---</cf_status_firefox38_0_5>
          <cf_status_firefox39>---</cf_status_firefox39>
          <cf_tracking_firefox40>---</cf_tracking_firefox40>
          <cf_status_firefox40>---</cf_status_firefox40>
          <cf_tracking_firefox41>---</cf_tracking_firefox41>
          <cf_status_firefox41>---</cf_status_firefox41>
          <cf_tracking_firefox42>---</cf_tracking_firefox42>
          <cf_status_firefox42>---</cf_status_firefox42>
          <cf_tracking_firefox43>---</cf_tracking_firefox43>
          <cf_status_firefox43>---</cf_status_firefox43>
          <cf_tracking_firefox44>---</cf_tracking_firefox44>
          <cf_status_firefox44>---</cf_status_firefox44>
          <cf_tracking_firefox45>---</cf_tracking_firefox45>
          <cf_status_firefox45>---</cf_status_firefox45>
          <cf_tracking_firefox46>---</cf_tracking_firefox46>
          <cf_status_firefox46>---</cf_status_firefox46>
          <cf_tracking_firefox47>---</cf_tracking_firefox47>
          <cf_status_firefox47>---</cf_status_firefox47>
          <cf_tracking_firefox48>---</cf_tracking_firefox48>
          <cf_status_firefox48>---</cf_status_firefox48>
          <cf_tracking_firefox49>---</cf_tracking_firefox49>
          <cf_status_firefox49>---</cf_status_firefox49>
          <cf_tracking_esr10>---</cf_tracking_esr10>
          <cf_status_esr10>---</cf_status_esr10>
          <cf_tracking_firefox_esr17>---</cf_tracking_firefox_esr17>
          <cf_status_firefox_esr17>---</cf_status_firefox_esr17>
          <cf_tracking_firefox_esr24>---</cf_tracking_firefox_esr24>
          <cf_status_firefox_esr24>---</cf_status_firefox_esr24>
          <cf_tracking_firefox_esr31>---</cf_tracking_firefox_esr31>
          <cf_status_firefox_esr31>---</cf_status_firefox_esr31>
          <cf_tracking_firefox_esr38>---</cf_tracking_firefox_esr38>
          <cf_status_firefox_esr38>---</cf_status_firefox_esr38>
          <cf_tracking_firefox_esr45>---</cf_tracking_firefox_esr45>
          <cf_status_firefox_esr45>---</cf_status_firefox_esr45>
          <cf_tracking_b2g18>---</cf_tracking_b2g18>
          <cf_status_b2g18>---</cf_status_b2g18>
          <cf_status_b2g30>---</cf_status_b2g30>
          <cf_status_b2g18_1_0_0>---</cf_status_b2g18_1_0_0>
          <cf_status_b2g18_1_0_1>---</cf_status_b2g18_1_0_1>
          <cf_status_b2g_1_1_hd>---</cf_status_b2g_1_1_hd>
          <cf_tracking_b2g_v1_2>---</cf_tracking_b2g_v1_2>
          <cf_status_b2g_1_2>---</cf_status_b2g_1_2>
          <cf_tracking_b2g_v1_3>---</cf_tracking_b2g_v1_3>
          <cf_status_b2g_1_3>---</cf_status_b2g_1_3>
          <cf_status_b2g_1_3t>---</cf_status_b2g_1_3t>
          <cf_blocking_20>-</cf_blocking_20>
          <cf_status_b2g_1_4>---</cf_status_b2g_1_4>
          <cf_status_20>---</cf_status_20>
          <cf_status_b2g_2_0>---</cf_status_b2g_2_0>
          <cf_status_b2g_2_0m>---</cf_status_b2g_2_0m>
          <cf_status_b2g_2_1>---</cf_status_b2g_2_1>
          <cf_status_b2g_2_1_s>---</cf_status_b2g_2_1_s>
          <cf_status_b2g_2_2>---</cf_status_b2g_2_2>
          <cf_status_b2g_2_5>---</cf_status_b2g_2_5>
          <cf_status_b2g_2_6>---</cf_status_b2g_2_6>
          <cf_status_b2g_2_2r>---</cf_status_b2g_2_2r>
          <cf_blocking_192>---</cf_blocking_192>
          <cf_status_192>---</cf_status_192>
          <cf_blocking_191>---</cf_blocking_191>
          <cf_tracking_fxios>---</cf_tracking_fxios>
          <cf_tracking_nss>---</cf_tracking_nss>
          <cf_status_nss>---</cf_status_nss>
          <cf_tracking_firefox_relnote>---</cf_tracking_firefox_relnote>
          <cf_status_b2g_master>---</cf_status_b2g_master>
          <cf_blocking_fx>---</cf_blocking_fx>
          <cf_tracking_relnote_b2g>---</cf_tracking_relnote_b2g>
          <cf_status_conduit_push>---</cf_status_conduit_push>
          <cf_status_191>---</cf_status_191>
          <cf_tracking_thunderbird_relnote>---</cf_tracking_thunderbird_relnote>
          <cf_tracking_conduit_push>---</cf_tracking_conduit_push>
          <cf_tracking_firefox_sumo>---</cf_tracking_firefox_sumo>
          <cf_status_bmo_push>---</cf_status_bmo_push>
          <cf_tracking_bmo_push>---</cf_tracking_bmo_push>
          <cf_blocking_fennec10>---</cf_blocking_fennec10>
          <cf_blocking_fennec>---</cf_blocking_fennec>
          <cf_blocking_thunderbird33>---</cf_blocking_thunderbird33>
          <cf_status_thunderbird33>---</cf_status_thunderbird33>
          <cf_blocking_thunderbird32>---</cf_blocking_thunderbird32>
          <cf_status_thunderbird32>---</cf_status_thunderbird32>
          <cf_blocking_thunderbird31>---</cf_blocking_thunderbird31>
          <cf_status_thunderbird31>---</cf_status_thunderbird31>
          <cf_blocking_thunderbird30>---</cf_blocking_thunderbird30>
          <cf_status_thunderbird30>---</cf_status_thunderbird30>
          <cf_tracking_thunderbird6>---</cf_tracking_thunderbird6>
          <cf_status_thunderbird6>---</cf_status_thunderbird6>
          <cf_tracking_thunderbird7>---</cf_tracking_thunderbird7>
          <cf_status_thunderbird7>---</cf_status_thunderbird7>
          <cf_tracking_thunderbird8>---</cf_tracking_thunderbird8>
          <cf_status_thunderbird8>---</cf_status_thunderbird8>
          <cf_tracking_thunderbird9>---</cf_tracking_thunderbird9>
          <cf_status_thunderbird9>---</cf_status_thunderbird9>
          <cf_tracking_thunderbird10>---</cf_tracking_thunderbird10>
          <cf_status_thunderbird10>---</cf_status_thunderbird10>
          <cf_tracking_thunderbird11>---</cf_tracking_thunderbird11>
          <cf_status_thunderbird11>---</cf_status_thunderbird11>
          <cf_tracking_thunderbird12>---</cf_tracking_thunderbird12>
          <cf_status_thunderbird12>---</cf_status_thunderbird12>
          <cf_tracking_thunderbird13>---</cf_tracking_thunderbird13>
          <cf_status_thunderbird13>---</cf_status_thunderbird13>
          <cf_tracking_thunderbird14>---</cf_tracking_thunderbird14>
          <cf_status_thunderbird14>---</cf_status_thunderbird14>
          <cf_tracking_thunderbird15>---</cf_tracking_thunderbird15>
          <cf_status_thunderbird15>---</cf_status_thunderbird15>
          <cf_tracking_thunderbird16>---</cf_tracking_thunderbird16>
          <cf_status_thunderbird16>---</cf_status_thunderbird16>
          <cf_tracking_thunderbird17>---</cf_tracking_thunderbird17>
          <cf_status_thunderbird17>---</cf_status_thunderbird17>
          <cf_tracking_thunderbird18>---</cf_tracking_thunderbird18>
          <cf_status_thunderbird18>---</cf_status_thunderbird18>
          <cf_tracking_thunderbird19>---</cf_tracking_thunderbird19>
          <cf_status_thunderbird19>---</cf_status_thunderbird19>
          <cf_tracking_thunderbird20>---</cf_tracking_thunderbird20>
          <cf_status_thunderbird20>---</cf_status_thunderbird20>
          <cf_tracking_thunderbird21>---</cf_tracking_thunderbird21>
          <cf_status_thunderbird21>---</cf_status_thunderbird21>
          <cf_tracking_thunderbird22>---</cf_tracking_thunderbird22>
          <cf_status_thunderbird22>---</cf_status_thunderbird22>
          <cf_tracking_thunderbird23>---</cf_tracking_thunderbird23>
          <cf_status_thunderbird23>---</cf_status_thunderbird23>
          <cf_tracking_thunderbird24>---</cf_tracking_thunderbird24>
          <cf_status_thunderbird24>---</cf_status_thunderbird24>
          <cf_tracking_thunderbird25>---</cf_tracking_thunderbird25>
          <cf_status_thunderbird25>---</cf_status_thunderbird25>
          <cf_tracking_thunderbird26>---</cf_tracking_thunderbird26>
          <cf_status_thunderbird26>---</cf_status_thunderbird26>
          <cf_tracking_thunderbird27>---</cf_tracking_thunderbird27>
          <cf_status_thunderbird27>---</cf_status_thunderbird27>
          <cf_tracking_thunderbird28>---</cf_tracking_thunderbird28>
          <cf_status_thunderbird28>---</cf_status_thunderbird28>
          <cf_tracking_thunderbird29>---</cf_tracking_thunderbird29>
          <cf_status_thunderbird29>---</cf_status_thunderbird29>
          <cf_tracking_thunderbird_30>---</cf_tracking_thunderbird_30>
          <cf_status_thunderbird_30>---</cf_status_thunderbird_30>
          <cf_tracking_thunderbird_31>---</cf_tracking_thunderbird_31>
          <cf_status_thunderbird_31>---</cf_status_thunderbird_31>
          <cf_tracking_thunderbird_32>---</cf_tracking_thunderbird_32>
          <cf_status_thunderbird_32>---</cf_status_thunderbird_32>
          <cf_tracking_thunderbird_esr10>---</cf_tracking_thunderbird_esr10>
          <cf_status_thunderbird_esr10>---</cf_status_thunderbird_esr10>
          <cf_tracking_thunderbird_esr17>---</cf_tracking_thunderbird_esr17>
          <cf_status_thunderbird_esr17>---</cf_status_thunderbird_esr17>
          <cf_tracking_thunderbird_33>---</cf_tracking_thunderbird_33>
          <cf_status_thunderbird_33>---</cf_status_thunderbird_33>
          <cf_tracking_thunderbird_34>---</cf_tracking_thunderbird_34>
          <cf_status_thunderbird_34>---</cf_status_thunderbird_34>
          <cf_tracking_thunderbird_35>---</cf_tracking_thunderbird_35>
          <cf_status_thunderbird_35>---</cf_status_thunderbird_35>
          <cf_tracking_thunderbird_36>---</cf_tracking_thunderbird_36>
          <cf_status_thunderbird_36>---</cf_status_thunderbird_36>
          <cf_tracking_thunderbird_37>---</cf_tracking_thunderbird_37>
          <cf_status_thunderbird_37>---</cf_status_thunderbird_37>
          <cf_tracking_thunderbird_38>---</cf_tracking_thunderbird_38>
          <cf_status_thunderbird_38>---</cf_status_thunderbird_38>
          <cf_tracking_thunderbird_39>---</cf_tracking_thunderbird_39>
          <cf_status_thunderbird_39>---</cf_status_thunderbird_39>
          <cf_tracking_thunderbird_40>---</cf_tracking_thunderbird_40>
          <cf_status_thunderbird_40>---</cf_status_thunderbird_40>
          <cf_tracking_thunderbird_41>---</cf_tracking_thunderbird_41>
          <cf_blocking_seamonkey21>---</cf_blocking_seamonkey21>
          <cf_status_thunderbird_41>---</cf_status_thunderbird_41>
          <cf_status_seamonkey21>---</cf_status_seamonkey21>
          <cf_tracking_seamonkey22>---</cf_tracking_seamonkey22>
          <cf_tracking_thunderbird_42>---</cf_tracking_thunderbird_42>
          <cf_status_seamonkey22>---</cf_status_seamonkey22>
          <cf_status_thunderbird_42>---</cf_status_thunderbird_42>
          <cf_tracking_seamonkey23>---</cf_tracking_seamonkey23>
          <cf_tracking_thunderbird_43>---</cf_tracking_thunderbird_43>
          <cf_status_seamonkey23>---</cf_status_seamonkey23>
          <cf_status_thunderbird_43>---</cf_status_thunderbird_43>
          <cf_tracking_seamonkey24>---</cf_tracking_seamonkey24>
          <cf_tracking_thunderbird_44>---</cf_tracking_thunderbird_44>
          <cf_status_thunderbird_44>---</cf_status_thunderbird_44>
          <cf_status_seamonkey24>---</cf_status_seamonkey24>
          <cf_tracking_seamonkey25>---</cf_tracking_seamonkey25>
          <cf_status_seamonkey25>---</cf_status_seamonkey25>
          <cf_tracking_seamonkey26>---</cf_tracking_seamonkey26>
          <cf_status_seamonkey26>---</cf_status_seamonkey26>
          <cf_tracking_seamonkey27>---</cf_tracking_seamonkey27>
          <cf_status_seamonkey27>---</cf_status_seamonkey27>
          <cf_tracking_seamonkey28>---</cf_tracking_seamonkey28>
          <cf_status_seamonkey28>---</cf_status_seamonkey28>
          <cf_tracking_seamonkey29>---</cf_tracking_seamonkey29>
          <cf_status_seamonkey29>---</cf_status_seamonkey29>
          <cf_tracking_seamonkey210>---</cf_tracking_seamonkey210>
          <cf_status_seamonkey210>---</cf_status_seamonkey210>
          <cf_tracking_seamonkey211>---</cf_tracking_seamonkey211>
          <cf_status_seamonkey211>---</cf_status_seamonkey211>
          <cf_tracking_seamonkey212>---</cf_tracking_seamonkey212>
          <cf_status_seamonkey212>---</cf_status_seamonkey212>
          <cf_tracking_seamonkey213>---</cf_tracking_seamonkey213>
          <cf_status_seamonkey213>---</cf_status_seamonkey213>
          <cf_tracking_seamonkey214>---</cf_tracking_seamonkey214>
          <cf_status_seamonkey214>---</cf_status_seamonkey214>
          <cf_tracking_seamonkey215>---</cf_tracking_seamonkey215>
          <cf_status_seamonkey215>---</cf_status_seamonkey215>
          <cf_tracking_seamonkey216>---</cf_tracking_seamonkey216>
          <cf_status_seamonkey216>---</cf_status_seamonkey216>
          <cf_tracking_seamonkey217>---</cf_tracking_seamonkey217>
          <cf_status_seamonkey217>---</cf_status_seamonkey217>
          <cf_tracking_seamonkey218>---</cf_tracking_seamonkey218>
          <cf_status_seamonkey218>---</cf_status_seamonkey218>
          <cf_tracking_seamonkey219>---</cf_tracking_seamonkey219>
          <cf_status_seamonkey219>---</cf_status_seamonkey219>
          <cf_tracking_seamonkey220>---</cf_tracking_seamonkey220>
          <cf_status_seamonkey220>---</cf_status_seamonkey220>
          <cf_tracking_seamonkey221>---</cf_tracking_seamonkey221>
          <cf_status_seamonkey221>---</cf_status_seamonkey221>
          <cf_tracking_seamonkey222>---</cf_tracking_seamonkey222>
          <cf_status_seamonkey222>---</cf_status_seamonkey222>
          <cf_tracking_seamonkey223>---</cf_tracking_seamonkey223>
          <cf_status_seamonkey223>---</cf_status_seamonkey223>
          <cf_tracking_thunderbird_45>---</cf_tracking_thunderbird_45>
          <cf_tracking_seamonkey224>---</cf_tracking_seamonkey224>
          <cf_status_thunderbird_45>---</cf_status_thunderbird_45>
          <cf_tracking_thunderbird_46>---</cf_tracking_thunderbird_46>
          <cf_status_thunderbird_46>---</cf_status_thunderbird_46>
          <cf_status_seamonkey224>---</cf_status_seamonkey224>
          <cf_tracking_thunderbird_47>---</cf_tracking_thunderbird_47>
          <cf_status_thunderbird_47>---</cf_status_thunderbird_47>
          <cf_tracking_thunderbird_48>---</cf_tracking_thunderbird_48>
          <cf_tracking_seamonkey225>---</cf_tracking_seamonkey225>
          <cf_status_thunderbird_48>---</cf_status_thunderbird_48>
          <cf_tracking_thunderbird_49>---</cf_tracking_thunderbird_49>
          <cf_status_thunderbird_49>---</cf_status_thunderbird_49>
          <cf_tracking_thunderbird_50>---</cf_tracking_thunderbird_50>
          <cf_status_thunderbird_50>---</cf_status_thunderbird_50>
          <cf_status_seamonkey225>---</cf_status_seamonkey225>
          <cf_status_seamonkey226>---</cf_status_seamonkey226>
          <cf_tracking_seamonkey226>---</cf_tracking_seamonkey226>
          <cf_status_seamonkey227>---</cf_status_seamonkey227>
          <cf_tracking_seamonkey227>---</cf_tracking_seamonkey227>
          <cf_status_seamonkey228>---</cf_status_seamonkey228>
          <cf_tracking_seamonkey228>---</cf_tracking_seamonkey228>
          <cf_status_seamonkey229>---</cf_status_seamonkey229>
          <cf_tracking_thunderbird_esr24>---</cf_tracking_thunderbird_esr24>
          <cf_tracking_seamonkey229>---</cf_tracking_seamonkey229>
          <cf_colo_site>---</cf_colo_site>
          <cf_status_thunderbird_esr24>---</cf_status_thunderbird_esr24>
          <cf_tracking_thunderbird_esr31>---</cf_tracking_thunderbird_esr31>
          <cf_status_thunderbird_esr31>---</cf_status_thunderbird_esr31>
          <cf_tracking_thunderbird_esr38>---</cf_tracking_thunderbird_esr38>
          <cf_status_thunderbird_esr38>---</cf_status_thunderbird_esr38>
          <cf_status_seamonkey230>---</cf_status_seamonkey230>
          <cf_tracking_thunderbird_esr45>---</cf_tracking_thunderbird_esr45>
          <cf_status_thunderbird_esr45>---</cf_status_thunderbird_esr45>
          <cf_tracking_thunderbird_esr52>---</cf_tracking_thunderbird_esr52>
          <cf_status_thunderbird_esr52>---</cf_status_thunderbird_esr52>
          <cf_office>---</cf_office>
          <cf_tracking_seamonkey230>---</cf_tracking_seamonkey230>
          <cf_tracking_thunderbird_esr60>---</cf_tracking_thunderbird_esr60>
          <cf_status_thunderbird_esr60>---</cf_status_thunderbird_esr60>
          <cf_status_seamonkey231>---</cf_status_seamonkey231>
          <cf_tracking_thunderbird_esr68>---</cf_tracking_thunderbird_esr68>
          <cf_status_thunderbird_esr68>---</cf_status_thunderbird_esr68>
          <cf_tracking_seamonkey231>---</cf_tracking_seamonkey231>
          <cf_status_seamonkey232>---</cf_status_seamonkey232>
          <cf_tracking_thunderbird_esr78>---</cf_tracking_thunderbird_esr78>
          <cf_status_thunderbird_esr78>---</cf_status_thunderbird_esr78>
          <cf_tracking_thunderbird_51>---</cf_tracking_thunderbird_51>
          <cf_tracking_seamonkey232>---</cf_tracking_seamonkey232>
          <cf_status_thunderbird_51>---</cf_status_thunderbird_51>
          <cf_tracking_thunderbird_52>---</cf_tracking_thunderbird_52>
          <cf_status_thunderbird_52>---</cf_status_thunderbird_52>
          <cf_tracking_thunderbird_esr91>---</cf_tracking_thunderbird_esr91>
          <cf_status_thunderbird_esr91>---</cf_status_thunderbird_esr91>
          <cf_tracking_thunderbird_53>---</cf_tracking_thunderbird_53>
          <cf_tracking_seamonkey233>---</cf_tracking_seamonkey233>
          <cf_status_thunderbird_53>---</cf_status_thunderbird_53>
          <cf_tracking_thunderbird_54>---</cf_tracking_thunderbird_54>
          <cf_status_thunderbird_54>---</cf_status_thunderbird_54>
          <cf_tracking_thunderbird_55>---</cf_tracking_thunderbird_55>
          <cf_tracking_thunderbird_esr102>---</cf_tracking_thunderbird_esr102>
          <cf_status_thunderbird_esr102>---</cf_status_thunderbird_esr102>
          <cf_status_thunderbird_55>---</cf_status_thunderbird_55>
          <cf_tracking_thunderbird_56>---</cf_tracking_thunderbird_56>
          <cf_status_seamonkey233>---</cf_status_seamonkey233>
          <cf_status_thunderbird_56>---</cf_status_thunderbird_56>
          <cf_tracking_thunderbird_57>---</cf_tracking_thunderbird_57>
          <cf_tracking_seamonkey234>---</cf_tracking_seamonkey234>
          <cf_status_thunderbird_57>---</cf_status_thunderbird_57>
          <cf_tracking_thunderbird_58>---</cf_tracking_thunderbird_58>
          <cf_status_thunderbird_58>---</cf_status_thunderbird_58>
          <cf_status_seamonkey234>---</cf_status_seamonkey234>
          <cf_tracking_thunderbird_59>---</cf_tracking_thunderbird_59>
          <cf_status_thunderbird_59>---</cf_status_thunderbird_59>
          <cf_tracking_seamonkey235>---</cf_tracking_seamonkey235>
          <cf_tracking_thunderbird_60>---</cf_tracking_thunderbird_60>
          <cf_status_thunderbird_60>---</cf_status_thunderbird_60>
          <cf_status_seamonkey235>---</cf_status_seamonkey235>
          <cf_tracking_thunderbird_61>---</cf_tracking_thunderbird_61>
          <cf_status_thunderbird_61>---</cf_status_thunderbird_61>
          <cf_tracking_seamonkey236>---</cf_tracking_seamonkey236>
          <cf_tracking_thunderbird_62>---</cf_tracking_thunderbird_62>
          <cf_status_thunderbird_62>---</cf_status_thunderbird_62>
          <cf_status_seamonkey236>---</cf_status_seamonkey236>
          <cf_tracking_thunderbird_63>---</cf_tracking_thunderbird_63>
          <cf_status_thunderbird_63>---</cf_status_thunderbird_63>
          <cf_tracking_thunderbird_64>---</cf_tracking_thunderbird_64>
          <cf_status_thunderbird_64>---</cf_status_thunderbird_64>
          <cf_tracking_seamonkey237>---</cf_tracking_seamonkey237>
          <cf_tracking_thunderbird_65>---</cf_tracking_thunderbird_65>
          <cf_status_seamonkey237>---</cf_status_seamonkey237>
          <cf_status_thunderbird_65>---</cf_status_thunderbird_65>
          <cf_tracking_thunderbird_66>---</cf_tracking_thunderbird_66>
          <cf_status_thunderbird_66>---</cf_status_thunderbird_66>
          <cf_tracking_thunderbird_67>---</cf_tracking_thunderbird_67>
          <cf_status_thunderbird_67>---</cf_status_thunderbird_67>
          <cf_tracking_thunderbird_68>---</cf_tracking_thunderbird_68>
          <cf_tracking_seamonkey238>---</cf_tracking_seamonkey238>
          <cf_status_thunderbird_68>---</cf_status_thunderbird_68>
          <cf_status_thunderbird_69>---</cf_status_thunderbird_69>
          <cf_status_seamonkey238>---</cf_status_seamonkey238>
          <cf_tracking_seamonkey239>---</cf_tracking_seamonkey239>
          <cf_tracking_thunderbird_69>---</cf_tracking_thunderbird_69>
          <cf_crash_signature></cf_crash_signature>
          <cf_status_seamonkey239>---</cf_status_seamonkey239>
          <cf_status_thunderbird_70>---</cf_status_thunderbird_70>
          <cf_tracking_thunderbird_70>---</cf_tracking_thunderbird_70>
          <cf_tracking_seamonkey240>---</cf_tracking_seamonkey240>
          <cf_status_seamonkey240>---</cf_status_seamonkey240>
          <cf_status_thunderbird_71>---</cf_status_thunderbird_71>
          
          <cf_tracking_thunderbird_71>---</cf_tracking_thunderbird_71>
          <cf_tracking_seamonkey241>---</cf_tracking_seamonkey241>
          <cf_status_seamonkey241>---</cf_status_seamonkey241>
          <cf_status_thunderbird_72>---</cf_status_thunderbird_72>
          <cf_tracking_thunderbird_72>---</cf_tracking_thunderbird_72>
          <cf_tracking_seamonkey242>---</cf_tracking_seamonkey242>
          <cf_status_seamonkey242>---</cf_status_seamonkey242>
          <cf_status_thunderbird_73>---</cf_status_thunderbird_73>
          <cf_tracking_seamonkey243>---</cf_tracking_seamonkey243>
          <cf_tracking_thunderbird_73>---</cf_tracking_thunderbird_73>
          <cf_status_seamonkey243>---</cf_status_seamonkey243>
          <cf_status_thunderbird_74>---</cf_status_thunderbird_74>
          <cf_status_thunderbird_75>---</cf_status_thunderbird_75>
          <cf_tracking_thunderbird_74>---</cf_tracking_thunderbird_74>
          <cf_tracking_seamonkey244>---</cf_tracking_seamonkey244>
          <cf_status_seamonkey244>---</cf_status_seamonkey244>
          <cf_status_thunderbird_76>---</cf_status_thunderbird_76>
          <cf_tracking_thunderbird_75>---</cf_tracking_thunderbird_75>
          <cf_tracking_thunderbird_76>---</cf_tracking_thunderbird_76>
          <cf_tracking_seamonkey245>---</cf_tracking_seamonkey245>
          <cf_status_thunderbird_77>---</cf_status_thunderbird_77>
          <cf_status_seamonkey245>---</cf_status_seamonkey245>
          <cf_status_thunderbird_78>---</cf_status_thunderbird_78>
          <cf_tracking_thunderbird_77>---</cf_tracking_thunderbird_77>
          <cf_tracking_thunderbird_78>---</cf_tracking_thunderbird_78>
          <cf_tracking_seamonkey246>---</cf_tracking_seamonkey246>
          <cf_status_thunderbird_79>---</cf_status_thunderbird_79>
          <cf_tracking_thunderbird_79>---</cf_tracking_thunderbird_79>
          <cf_status_thunderbird_80>---</cf_status_thunderbird_80>
          <cf_status_seamonkey246>---</cf_status_seamonkey246>
          <cf_tracking_thunderbird_80>---</cf_tracking_thunderbird_80>
          <cf_status_thunderbird_81>---</cf_status_thunderbird_81>
          <cf_tracking_seamonkey247>---</cf_tracking_seamonkey247>
          <cf_tracking_thunderbird_81>---</cf_tracking_thunderbird_81>
          <cf_status_thunderbird_82>---</cf_status_thunderbird_82>
          <cf_status_seamonkey247>---</cf_status_seamonkey247>
          <cf_tracking_thunderbird_82>---</cf_tracking_thunderbird_82>
          <cf_tracking_seamonkey248>---</cf_tracking_seamonkey248>
          <cf_status_thunderbird_83>---</cf_status_thunderbird_83>
          <cf_tracking_thunderbird_83>---</cf_tracking_thunderbird_83>
          <cf_status_seamonkey248>---</cf_status_seamonkey248>
          <cf_status_thunderbird_84>---</cf_status_thunderbird_84>
          <cf_tracking_thunderbird_84>---</cf_tracking_thunderbird_84>
          <cf_status_thunderbird_85>---</cf_status_thunderbird_85>
          <cf_tracking_thunderbird_85>---</cf_tracking_thunderbird_85>
          <cf_status_thunderbird_86>---</cf_status_thunderbird_86>
          <cf_blocking_kilimanjaro>---</cf_blocking_kilimanjaro>
          <cf_tracking_thunderbird_86>---</cf_tracking_thunderbird_86>
          <cf_blocking_b2g>---</cf_blocking_b2g>
          <cf_status_thunderbird_87>---</cf_status_thunderbird_87>
          <cf_tracking_seamonkey249>---</cf_tracking_seamonkey249>
          <cf_tracking_thunderbird_87>---</cf_tracking_thunderbird_87>
          <cf_status_thunderbird_88>---</cf_status_thunderbird_88>
          <cf_blocking_basecamp>---</cf_blocking_basecamp>
          <cf_status_seamonkey249>---</cf_status_seamonkey249>
          <cf_tracking_thunderbird_88>---</cf_tracking_thunderbird_88>
          <cf_feature_b2g>---</cf_feature_b2g>
          <cf_status_thunderbird_89>---</cf_status_thunderbird_89>
          <cf_tracking_seamonkey250>---</cf_tracking_seamonkey250>
          <cf_tracking_thunderbird_89>---</cf_tracking_thunderbird_89>
          <cf_tracking_b2g>---</cf_tracking_b2g>
          <cf_ux_b2g>---</cf_ux_b2g>
          <cf_status_thunderbird_90>---</cf_status_thunderbird_90>
          <cf_status_seamonkey250>---</cf_status_seamonkey250>
          <cf_tracking_thunderbird_90>---</cf_tracking_thunderbird_90>
          <cf_b2g_ota_blocker>---</cf_b2g_ota_blocker>
          <cf_tracking_seamonkey251>---</cf_tracking_seamonkey251>
          <cf_status_thunderbird_91>---</cf_status_thunderbird_91>
          <cf_tracking_thunderbird_91>---</cf_tracking_thunderbird_91>
          <cf_status_thunderbird_92>---</cf_status_thunderbird_92>
          <cf_status_seamonkey251>---</cf_status_seamonkey251>
          <cf_tracking_thunderbird_92>---</cf_tracking_thunderbird_92>
          <cf_tracking_seamonkey252>---</cf_tracking_seamonkey252>
          <cf_status_thunderbird_93>---</cf_status_thunderbird_93>
          <cf_tracking_thunderbird_93>---</cf_tracking_thunderbird_93>
          <cf_status_thunderbird_94>---</cf_status_thunderbird_94>
          <cf_status_seamonkey252>---</cf_status_seamonkey252>
          <cf_tracking_thunderbird_94>---</cf_tracking_thunderbird_94>
          <cf_status_seamonkey253>---</cf_status_seamonkey253>
          <cf_status_thunderbird_95>---</cf_status_thunderbird_95>
          <cf_tracking_thunderbird_95>---</cf_tracking_thunderbird_95>
          <cf_tracking_seamonkey253>---</cf_tracking_seamonkey253>
          <cf_status_thunderbird_96>---</cf_status_thunderbird_96>
          <cf_tracking_seamonkey254>---</cf_tracking_seamonkey254>
          <cf_tracking_thunderbird_96>---</cf_tracking_thunderbird_96>
          <cf_status_thunderbird_97>---</cf_status_thunderbird_97>
          <cf_status_seamonkey254>---</cf_status_seamonkey254>
          <cf_tracking_thunderbird_97>---</cf_tracking_thunderbird_97>
          <cf_status_thunderbird_98>---</cf_status_thunderbird_98>
          <cf_tracking_seamonkey255>---</cf_tracking_seamonkey255>
          <cf_tracking_thunderbird_98>---</cf_tracking_thunderbird_98>
          <cf_status_thunderbird_99>---</cf_status_thunderbird_99>
          <cf_status_seamonkey255>---</cf_status_seamonkey255>
          <cf_tracking_thunderbird_99>---</cf_tracking_thunderbird_99>
          <cf_status_seamonkey256>---</cf_status_seamonkey256>
          <cf_status_thunderbird_100>---</cf_status_thunderbird_100>
          <cf_tracking_thunderbird_100>---</cf_tracking_thunderbird_100>
          <cf_status_thunderbird_101>---</cf_status_thunderbird_101>
          <cf_tracking_seamonkey256>---</cf_tracking_seamonkey256>
          <cf_status_seamonkey257esr>---</cf_status_seamonkey257esr>
          <cf_tracking_thunderbird_101>---</cf_tracking_thunderbird_101>
          <cf_tracking_seamonkey257esr>---</cf_tracking_seamonkey257esr>
          <cf_status_thunderbird_102>---</cf_status_thunderbird_102>
          <cf_tracking_thunderbird_102>---</cf_tracking_thunderbird_102>
          <cf_status_seamonkey258>---</cf_status_seamonkey258>
          <cf_status_thunderbird_103>---</cf_status_thunderbird_103>
          <cf_tracking_thunderbird_103>---</cf_tracking_thunderbird_103>
          <cf_tracking_seamonkey258>---</cf_tracking_seamonkey258>
          <cf_status_thunderbird_104>---</cf_status_thunderbird_104>
          <cf_tracking_thunderbird_104>---</cf_tracking_thunderbird_104>
          <cf_status_thunderbird_105>---</cf_status_thunderbird_105>
          <cf_status_seamonkey259>---</cf_status_seamonkey259>
          <cf_tracking_thunderbird_105>---</cf_tracking_thunderbird_105>
          <cf_status_thunderbird_106>---</cf_status_thunderbird_106>
          <cf_tracking_seamonkey259>---</cf_tracking_seamonkey259>
          <cf_tracking_thunderbird_esr115>---</cf_tracking_thunderbird_esr115>
          <cf_status_thunderbird_esr115>---</cf_status_thunderbird_esr115>
          <cf_tracking_thunderbird_106>---</cf_tracking_thunderbird_106>
          <cf_status_fxios_v1_0>---</cf_status_fxios_v1_0>
          <cf_status_fxios_v1_0_5>---</cf_status_fxios_v1_0_5>
          <cf_status_fxios_v1_1>---</cf_status_fxios_v1_1>
          <cf_status_fxios_v2_0>---</cf_status_fxios_v2_0>
          <cf_status_fxios_v3_0>---</cf_status_fxios_v3_0>
          <cf_status_thunderbird_107>---</cf_status_thunderbird_107>
          <cf_tracking_thunderbird_esr128>---</cf_tracking_thunderbird_esr128>
          <cf_status_fxios_v4_0>---</cf_status_fxios_v4_0>
          <cf_status_seamonkey260>---</cf_status_seamonkey260>
          <cf_status_thunderbird_esr128>---</cf_status_thunderbird_esr128>
          <cf_tracking_thunderbird_107>---</cf_tracking_thunderbird_107>
          <cf_status_fxios_v5_0>---</cf_status_fxios_v5_0>
          <cf_status_thunderbird_108>---</cf_status_thunderbird_108>
          <cf_tracking_thunderbird_esr140>---</cf_tracking_thunderbird_esr140>
          <cf_tracking_seamonkey260>---</cf_tracking_seamonkey260>
          <cf_status_thunderbird_esr140>---</cf_status_thunderbird_esr140>
          <cf_status_fxios_v5_1>---</cf_status_fxios_v5_1>
          <cf_tracking_thunderbird_108>---</cf_tracking_thunderbird_108>
          <cf_status_fxios_v5_2>---</cf_status_fxios_v5_2>
          <cf_status_fxios_v5_3>---</cf_status_fxios_v5_3>
          <cf_status_fxios_v6_0>---</cf_status_fxios_v6_0>
          <cf_status_thunderbird_109>---</cf_status_thunderbird_109>
          <cf_tracking_thunderbird_esr153>---</cf_tracking_thunderbird_esr153>
          <cf_tracking_thunderbird_109>---</cf_tracking_thunderbird_109>
          <cf_status_thunderbird_esr153>---</cf_status_thunderbird_esr153>
          <cf_status_fxios_v6_1>---</cf_status_fxios_v6_1>
          <cf_status_fxios_v7_0>---</cf_status_fxios_v7_0>
          <cf_status_thunderbird_110>---</cf_status_thunderbird_110>
          <cf_status_fxios_v7_1>---</cf_status_fxios_v7_1>
          <cf_tracking_thunderbird_110>---</cf_tracking_thunderbird_110>
          <cf_status_thunderbird_111>---</cf_status_thunderbird_111>
          <cf_status_fxios_v7_2>---</cf_status_fxios_v7_2>
          <cf_tracking_thunderbird_111>---</cf_tracking_thunderbird_111>
          <cf_status_fxios_v7_3>---</cf_status_fxios_v7_3>
          <cf_status_thunderbird_112>---</cf_status_thunderbird_112>
          <cf_status_fxios_v7_4>---</cf_status_fxios_v7_4>
          <cf_tracking_thunderbird_112>---</cf_tracking_thunderbird_112>
          <cf_status_fxios_v7_5>---</cf_status_fxios_v7_5>
          <cf_status_fxios_v7_6>---</cf_status_fxios_v7_6>
          <cf_status_thunderbird_113>---</cf_status_thunderbird_113>
          <cf_tracking_thunderbird_113>---</cf_tracking_thunderbird_113>
          <cf_tracking_seamonkey263>---</cf_tracking_seamonkey263>
          <cf_status_thunderbird_114>---</cf_status_thunderbird_114>
          <cf_tracking_thunderbird_114>---</cf_tracking_thunderbird_114>
          <cf_status_thunderbird_115>---</cf_status_thunderbird_115>
          <cf_status_seamonkey263>---</cf_status_seamonkey263>
          <cf_tracking_thunderbird_115>---</cf_tracking_thunderbird_115>
          
          <cf_status_thunderbird_116>---</cf_status_thunderbird_116>
          <cf_tracking_thunderbird_116>---</cf_tracking_thunderbird_116>
          <cf_status_thunderbird_117>---</cf_status_thunderbird_117>
          <cf_tracking_thunderbird_117>---</cf_tracking_thunderbird_117>
          <cf_status_thunderbird_118>---</cf_status_thunderbird_118>
          <cf_tracking_thunderbird_118>---</cf_tracking_thunderbird_118>
          <cf_status_thunderbird_119>---</cf_status_thunderbird_119>
          <cf_tracking_thunderbird_119>---</cf_tracking_thunderbird_119>
          <cf_status_thunderbird_120>---</cf_status_thunderbird_120>
          <cf_tracking_thunderbird_120>---</cf_tracking_thunderbird_120>
          <cf_status_thunderbird_121>---</cf_status_thunderbird_121>
          <cf_tracking_thunderbird_121>---</cf_tracking_thunderbird_121>
          <cf_status_thunderbird_122>---</cf_status_thunderbird_122>
          <cf_tracking_thunderbird_122>---</cf_tracking_thunderbird_122>
          <cf_status_thunderbird_123>---</cf_status_thunderbird_123>
          <cf_tracking_thunderbird_123>---</cf_tracking_thunderbird_123>
          <cf_status_thunderbird_124>---</cf_status_thunderbird_124>
          <cf_tracking_thunderbird_124>---</cf_tracking_thunderbird_124>
          <cf_status_thunderbird_125>---</cf_status_thunderbird_125>
          <cf_tracking_thunderbird_125>---</cf_tracking_thunderbird_125>
          <cf_status_thunderbird_126>---</cf_status_thunderbird_126>
          <cf_tracking_thunderbird_126>---</cf_tracking_thunderbird_126>
          <cf_status_thunderbird_127>---</cf_status_thunderbird_127>
          <cf_tracking_thunderbird_127>---</cf_tracking_thunderbird_127>
          <cf_status_thunderbird_128>---</cf_status_thunderbird_128>
          <cf_tracking_thunderbird_128>---</cf_tracking_thunderbird_128>
          <cf_status_thunderbird_129>---</cf_status_thunderbird_129>
          <cf_tracking_thunderbird_129>---</cf_tracking_thunderbird_129>
          <cf_status_thunderbird_130>---</cf_status_thunderbird_130>
          <cf_tracking_thunderbird_130>---</cf_tracking_thunderbird_130>
          <cf_status_thunderbird_131>---</cf_status_thunderbird_131>
          <cf_tracking_thunderbird_131>---</cf_tracking_thunderbird_131>
          <cf_status_thunderbird_132>---</cf_status_thunderbird_132>
          <cf_tracking_thunderbird_132>---</cf_tracking_thunderbird_132>
          <cf_status_thunderbird_133>---</cf_status_thunderbird_133>
          <cf_tracking_thunderbird_133>---</cf_tracking_thunderbird_133>
          <cf_status_thunderbird_134>---</cf_status_thunderbird_134>
          <cf_tracking_thunderbird_134>---</cf_tracking_thunderbird_134>
          <cf_status_thunderbird_135>---</cf_status_thunderbird_135>
          <cf_tracking_thunderbird_135>---</cf_tracking_thunderbird_135>
          <cf_last_resolved>2011-03-30 11:37:30</cf_last_resolved>
          <cf_status_thunderbird_136>---</cf_status_thunderbird_136>
          <cf_tracking_thunderbird_136>---</cf_tracking_thunderbird_136>
          <cf_status_thunderbird_137>---</cf_status_thunderbird_137>
          <cf_tracking_thunderbird_137>---</cf_tracking_thunderbird_137>
          <cf_status_thunderbird_138>---</cf_status_thunderbird_138>
          <cf_tracking_thunderbird_138>---</cf_tracking_thunderbird_138>
          <cf_status_thunderbird_139>---</cf_status_thunderbird_139>
          <cf_tracking_thunderbird_139>---</cf_tracking_thunderbird_139>
          <cf_status_thunderbird_140>---</cf_status_thunderbird_140>
          <cf_tracking_thunderbird_140>---</cf_tracking_thunderbird_140>
          <cf_status_thunderbird_141>---</cf_status_thunderbird_141>
          <cf_tracking_thunderbird_141>---</cf_tracking_thunderbird_141>
          <cf_status_thunderbird_142>---</cf_status_thunderbird_142>
          <cf_tracking_thunderbird_142>---</cf_tracking_thunderbird_142>
          <cf_status_thunderbird_143>---</cf_status_thunderbird_143>
          <cf_tracking_thunderbird_143>---</cf_tracking_thunderbird_143>
          <cf_status_thunderbird_144>---</cf_status_thunderbird_144>
          <cf_tracking_thunderbird_144>---</cf_tracking_thunderbird_144>
          <cf_status_thunderbird_145>---</cf_status_thunderbird_145>
          <cf_tracking_thunderbird_145>---</cf_tracking_thunderbird_145>
          <cf_status_thunderbird_146>---</cf_status_thunderbird_146>
          <cf_tracking_thunderbird_146>---</cf_tracking_thunderbird_146>
          <cf_status_thunderbird_147>---</cf_status_thunderbird_147>
          <cf_tracking_thunderbird_147>---</cf_tracking_thunderbird_147>
          <cf_status_thunderbird_148>---</cf_status_thunderbird_148>
          <cf_tracking_thunderbird_148>---</cf_tracking_thunderbird_148>
          <cf_status_thunderbird_149>---</cf_status_thunderbird_149>
          <cf_tracking_thunderbird_149>---</cf_tracking_thunderbird_149>
          <cf_status_thunderbird_150>---</cf_status_thunderbird_150>
          <cf_tracking_thunderbird_150>---</cf_tracking_thunderbird_150>
          <cf_status_thunderbird_151>---</cf_status_thunderbird_151>
          <cf_tracking_thunderbird_151>---</cf_tracking_thunderbird_151>
          <cf_status_thunderbird_152>---</cf_status_thunderbird_152>
          <cf_tracking_thunderbird_152>---</cf_tracking_thunderbird_152>
          <cf_status_thunderbird_153>---</cf_status_thunderbird_153>
          <cf_tracking_thunderbird_153>---</cf_tracking_thunderbird_153>
          <cf_status_thunderbird_154>---</cf_status_thunderbird_154>
          <cf_tracking_thunderbird_154>---</cf_tracking_thunderbird_154>
          <cf_status_thunderbird_155>---</cf_status_thunderbird_155>
          <cf_tracking_thunderbird_155>---</cf_tracking_thunderbird_155>
          <cf_status_thunderbird_156>---</cf_status_thunderbird_156>
          <cf_tracking_thunderbird_156>---</cf_tracking_thunderbird_156>
          <cf_user_story></cf_user_story>
          <cf_mozilla_project>---</cf_mozilla_project>
          <cf_machine_state>---</cf_machine_state>
          <cf_qa_whiteboard></cf_qa_whiteboard>
          <cf_fx_iteration>---</cf_fx_iteration>
          <cf_fx_points>---</cf_fx_points>
          
          <cf_has_str>---</cf_has_str>
          <cf_cab_review>---</cf_cab_review>
          <cf_status_fxios_v8_0>---</cf_status_fxios_v8_0>
          <cf_status_fxios_v8_1>---</cf_status_fxios_v8_1>
          <cf_status_fxios_v8_2>---</cf_status_fxios_v8_2>
          <cf_status_fxios_v8_3>---</cf_status_fxios_v8_3>
          <cf_status_fxios_v8_4>---</cf_status_fxios_v8_4>
          <cf_status_fxios_v9_0>---</cf_status_fxios_v9_0>
          <cf_status_fxios_v9_1>---</cf_status_fxios_v9_1>
          <cf_status_fxios_v9_2>---</cf_status_fxios_v9_2>
          <cf_status_fxios_v9_3>---</cf_status_fxios_v9_3>
          <cf_status_fxios_v9_4>---</cf_status_fxios_v9_4>
          <cf_status_fxios_v10_0>---</cf_status_fxios_v10_0>
          <cf_status_fxios_v10_1>---</cf_status_fxios_v10_1>
          <cf_status_fxios_v10_2>---</cf_status_fxios_v10_2>
          <cf_status_fxios_v10_5>---</cf_status_fxios_v10_5>
          <cf_status_fxios_v10_6>---</cf_status_fxios_v10_6>
          <cf_status_fxios_v11_0>---</cf_status_fxios_v11_0>
          <cf_status_fxios_v11_1>---</cf_status_fxios_v11_1>
          <cf_status_fxios_v12_0>---</cf_status_fxios_v12_0>
          <cf_status_fxios_v12_1>---</cf_status_fxios_v12_1>
          <cf_status_fxios_v12_2>---</cf_status_fxios_v12_2>
          <cf_status_fxios_v13_0>---</cf_status_fxios_v13_0>
          <cf_status_fxios_v13_1>---</cf_status_fxios_v13_1>
          <cf_status_fxios_v13_2>---</cf_status_fxios_v13_2>
          <cf_status_fxios_v13_3>---</cf_status_fxios_v13_3>
          <cf_status_fxios_v14_0>---</cf_status_fxios_v14_0>
          <cf_status_fxios_v14_1>---</cf_status_fxios_v14_1>
          <cf_status_fxios_v14_2>---</cf_status_fxios_v14_2>
          <cf_status_fxios_v14_3>---</cf_status_fxios_v14_3>
          <cf_status_fxios_v15_0>---</cf_status_fxios_v15_0>
          <cf_status_fxios_v15_1>---</cf_status_fxios_v15_1>
          <cf_status_fxios_v16_0>---</cf_status_fxios_v16_0>
          <cf_tracking_geckoview62>---</cf_tracking_geckoview62>
          <cf_status_geckoview62>---</cf_status_geckoview62>
          <cf_tracking_geckoview63>---</cf_tracking_geckoview63>
          <cf_status_geckoview63>---</cf_status_geckoview63>
          <cf_tracking_geckoview64>---</cf_tracking_geckoview64>
          <cf_status_geckoview64>---</cf_status_geckoview64>
          <cf_tracking_geckoview65>---</cf_tracking_geckoview65>
          <cf_status_geckoview65>---</cf_status_geckoview65>
          <cf_tracking_geckoview66>---</cf_tracking_geckoview66>
          <cf_status_geckoview66>---</cf_status_geckoview66>
          <cf_tracking_firefox50>---</cf_tracking_firefox50>
          <cf_status_firefox50>---</cf_status_firefox50>
          <cf_tracking_firefox51>---</cf_tracking_firefox51>
          <cf_status_firefox51>---</cf_status_firefox51>
          <cf_tracking_firefox52>---</cf_tracking_firefox52>
          <cf_status_firefox52>---</cf_status_firefox52>
          <cf_tracking_firefox_esr52>---</cf_tracking_firefox_esr52>
          <cf_status_firefox_esr52>---</cf_status_firefox_esr52>
          <cf_tracking_firefox_esr60>---</cf_tracking_firefox_esr60>
          <cf_status_firefox_esr60>---</cf_status_firefox_esr60>
          <cf_tracking_firefox_esr68>---</cf_tracking_firefox_esr68>
          <cf_status_firefox_esr68>---</cf_status_firefox_esr68>
          <cf_tracking_firefox53>---</cf_tracking_firefox53>
          <cf_tracking_firefox_esr78>---</cf_tracking_firefox_esr78>
          <cf_status_firefox_esr78>---</cf_status_firefox_esr78>
          <cf_tracking_firefox_esr91>---</cf_tracking_firefox_esr91>
          <cf_status_firefox_esr91>---</cf_status_firefox_esr91>
          <cf_status_firefox53>---</cf_status_firefox53>
          <cf_tracking_firefox_esr102>---</cf_tracking_firefox_esr102>
          <cf_status_firefox_esr102>---</cf_status_firefox_esr102>
          <cf_tracking_firefox_esr115>---</cf_tracking_firefox_esr115>
          <cf_status_firefox_esr115>---</cf_status_firefox_esr115>
          <cf_tracking_firefox54>---</cf_tracking_firefox54>
          <cf_tracking_firefox_esr128>---</cf_tracking_firefox_esr128>
          <cf_status_firefox_esr128>---</cf_status_firefox_esr128>
          <cf_tracking_firefox_esr140>---</cf_tracking_firefox_esr140>
          <cf_status_firefox_esr140>---</cf_status_firefox_esr140>
          <cf_status_firefox54>---</cf_status_firefox54>
          <cf_tracking_firefox_esr153>---</cf_tracking_firefox_esr153>
          <cf_status_firefox_esr153>---</cf_status_firefox_esr153>
          <cf_tracking_firefox55>---</cf_tracking_firefox55>
          <cf_status_firefox55>---</cf_status_firefox55>
          <cf_tracking_firefox56>---</cf_tracking_firefox56>
          <cf_status_firefox56>---</cf_status_firefox56>
          <cf_tracking_firefox57>---</cf_tracking_firefox57>
          <cf_status_firefox57>---</cf_status_firefox57>
          <cf_tracking_firefox58>---</cf_tracking_firefox58>
          <cf_status_firefox58>---</cf_status_firefox58>
          <cf_tracking_firefox59>---</cf_tracking_firefox59>
          <cf_status_firefox59>---</cf_status_firefox59>
          <cf_tracking_firefox60>---</cf_tracking_firefox60>
          <cf_status_firefox60>---</cf_status_firefox60>
          <cf_tracking_firefox61>---</cf_tracking_firefox61>
          <cf_status_firefox61>---</cf_status_firefox61>
          <cf_tracking_firefox62>---</cf_tracking_firefox62>
          <cf_status_firefox62>---</cf_status_firefox62>
          <cf_tracking_firefox63>---</cf_tracking_firefox63>
          <cf_status_firefox63>---</cf_status_firefox63>
          <cf_tracking_firefox64>---</cf_tracking_firefox64>
          <cf_status_firefox64>---</cf_status_firefox64>
          <cf_tracking_firefox65>---</cf_tracking_firefox65>
          <cf_status_firefox65>---</cf_status_firefox65>
          <cf_tracking_firefox66>---</cf_tracking_firefox66>
          <cf_status_firefox66>---</cf_status_firefox66>
          <cf_tracking_firefox67>---</cf_tracking_firefox67>
          <cf_status_firefox67>---</cf_status_firefox67>
          <cf_tracking_firefox67_0_1>---</cf_tracking_firefox67_0_1>
          <cf_status_firefox67_0_1>---</cf_status_firefox67_0_1>
          <cf_tracking_firefox68>---</cf_tracking_firefox68>
          <cf_status_firefox68>---</cf_status_firefox68>
          <cf_tracking_firefox69>---</cf_tracking_firefox69>
          <cf_status_firefox69>---</cf_status_firefox69>
          <cf_tracking_firefox70>---</cf_tracking_firefox70>
          <cf_status_firefox70>---</cf_status_firefox70>
          <cf_tracking_firefox71>---</cf_tracking_firefox71>
          <cf_status_firefox71>---</cf_status_firefox71>
          <cf_status_firefox72>---</cf_status_firefox72>
          <cf_tracking_firefox72>---</cf_tracking_firefox72>
          <cf_status_firefox73>---</cf_status_firefox73>
          <cf_tracking_firefox73>---</cf_tracking_firefox73>
          <cf_tracking_firefox74>---</cf_tracking_firefox74>
          <cf_status_firefox74>---</cf_status_firefox74>
          <cf_tracking_firefox75>---</cf_tracking_firefox75>
          <cf_status_firefox75>---</cf_status_firefox75>
          <cf_tracking_firefox76>---</cf_tracking_firefox76>
          <cf_status_firefox76>---</cf_status_firefox76>
          <cf_tracking_firefox77>---</cf_tracking_firefox77>
          <cf_status_firefox77>---</cf_status_firefox77>
          <cf_tracking_firefox78>---</cf_tracking_firefox78>
          <cf_status_firefox78>---</cf_status_firefox78>
          <cf_tracking_firefox79>---</cf_tracking_firefox79>
          <cf_status_firefox79>---</cf_status_firefox79>
          <cf_tracking_firefox80>---</cf_tracking_firefox80>
          <cf_status_firefox80>---</cf_status_firefox80>
          <cf_tracking_firefox81>---</cf_tracking_firefox81>
          <cf_status_firefox81>---</cf_status_firefox81>
          <cf_tracking_firefox82>---</cf_tracking_firefox82>
          <cf_status_firefox82>---</cf_status_firefox82>
          <cf_tracking_firefox83>---</cf_tracking_firefox83>
          <cf_status_firefox83>---</cf_status_firefox83>
          <cf_tracking_firefox84>---</cf_tracking_firefox84>
          <cf_status_firefox84>---</cf_status_firefox84>
          <cf_tracking_firefox85>---</cf_tracking_firefox85>
          <cf_status_firefox85>---</cf_status_firefox85>
          <cf_tracking_firefox86>---</cf_tracking_firefox86>
          <cf_status_firefox86>---</cf_status_firefox86>
          <cf_tracking_firefox87>---</cf_tracking_firefox87>
          <cf_status_firefox87>---</cf_status_firefox87>
          <cf_tracking_firefox88>---</cf_tracking_firefox88>
          <cf_status_firefox88>---</cf_status_firefox88>
          <cf_tracking_firefox89>---</cf_tracking_firefox89>
          <cf_status_firefox89>---</cf_status_firefox89>
          <cf_tracking_firefox90>---</cf_tracking_firefox90>
          <cf_status_firefox90>---</cf_status_firefox90>
          <cf_tracking_firefox91>---</cf_tracking_firefox91>
          <cf_status_firefox91>---</cf_status_firefox91>
          <cf_tracking_firefox92>---</cf_tracking_firefox92>
          <cf_status_firefox92>---</cf_status_firefox92>
          <cf_tracking_firefox93>---</cf_tracking_firefox93>
          <cf_status_firefox93>---</cf_status_firefox93>
          <cf_tracking_firefox94>---</cf_tracking_firefox94>
          <cf_status_firefox94>---</cf_status_firefox94>
          <cf_tracking_firefox95>---</cf_tracking_firefox95>
          <cf_status_firefox95>---</cf_status_firefox95>
          <cf_tracking_firefox96>---</cf_tracking_firefox96>
          <cf_status_firefox96>---</cf_status_firefox96>
          <cf_tracking_firefox97>---</cf_tracking_firefox97>
          <cf_status_firefox97>---</cf_status_firefox97>
          <cf_tracking_firefox98>---</cf_tracking_firefox98>
          <cf_status_firefox98>---</cf_status_firefox98>
          <cf_tracking_firefox99>---</cf_tracking_firefox99>
          <cf_status_firefox99>---</cf_status_firefox99>
          <cf_tracking_firefox100>---</cf_tracking_firefox100>
          <cf_status_firefox100>---</cf_status_firefox100>
          <cf_tracking_firefox101>---</cf_tracking_firefox101>
          <cf_status_firefox101>---</cf_status_firefox101>
          <cf_tracking_firefox102>---</cf_tracking_firefox102>
          <cf_status_firefox102>---</cf_status_firefox102>
          <cf_tracking_firefox103>---</cf_tracking_firefox103>
          <cf_status_firefox103>---</cf_status_firefox103>
          <cf_tracking_firefox104>---</cf_tracking_firefox104>
          <cf_status_firefox104>---</cf_status_firefox104>
          <cf_tracking_firefox105>---</cf_tracking_firefox105>
          <cf_status_firefox105>---</cf_status_firefox105>
          <cf_tracking_firefox106>---</cf_tracking_firefox106>
          <cf_status_firefox106>---</cf_status_firefox106>
          <cf_tracking_firefox107>---</cf_tracking_firefox107>
          <cf_status_firefox107>---</cf_status_firefox107>
          <cf_tracking_firefox108>---</cf_tracking_firefox108>
          <cf_status_firefox108>---</cf_status_firefox108>
          <cf_tracking_firefox109>---</cf_tracking_firefox109>
          <cf_status_firefox109>---</cf_status_firefox109>
          <cf_tracking_firefox110>---</cf_tracking_firefox110>
          <cf_status_firefox110>---</cf_status_firefox110>
          <cf_tracking_firefox111>---</cf_tracking_firefox111>
          <cf_status_firefox111>---</cf_status_firefox111>
          <cf_tracking_firefox112>---</cf_tracking_firefox112>
          <cf_status_firefox112>---</cf_status_firefox112>
          <cf_tracking_firefox113>---</cf_tracking_firefox113>
          <cf_status_firefox113>---</cf_status_firefox113>
          <cf_tracking_firefox114>---</cf_tracking_firefox114>
          <cf_status_firefox114>---</cf_status_firefox114>
          <cf_tracking_firefox115>---</cf_tracking_firefox115>
          <cf_status_firefox115>---</cf_status_firefox115>
          <cf_tracking_firefox116>---</cf_tracking_firefox116>
          <cf_status_firefox116>---</cf_status_firefox116>
          <cf_tracking_firefox117>---</cf_tracking_firefox117>
          <cf_status_firefox117>---</cf_status_firefox117>
          <cf_tracking_firefox118>---</cf_tracking_firefox118>
          <cf_status_firefox118>---</cf_status_firefox118>
          <cf_tracking_firefox119>---</cf_tracking_firefox119>
          <cf_status_firefox119>---</cf_status_firefox119>
          <cf_tracking_firefox120>---</cf_tracking_firefox120>
          <cf_status_firefox120>---</cf_status_firefox120>
          <cf_tracking_firefox121>---</cf_tracking_firefox121>
          <cf_status_firefox121>---</cf_status_firefox121>
          <cf_tracking_firefox122>---</cf_tracking_firefox122>
          <cf_status_firefox122>---</cf_status_firefox122>
          <cf_tracking_firefox123>---</cf_tracking_firefox123>
          <cf_status_firefox123>---</cf_status_firefox123>
          <cf_tracking_firefox124>---</cf_tracking_firefox124>
          <cf_status_firefox124>---</cf_status_firefox124>
          <cf_tracking_firefox125>---</cf_tracking_firefox125>
          <cf_status_firefox125>---</cf_status_firefox125>
          <cf_tracking_firefox126>---</cf_tracking_firefox126>
          <cf_status_firefox126>---</cf_status_firefox126>
          <cf_tracking_firefox127>---</cf_tracking_firefox127>
          <cf_status_firefox127>---</cf_status_firefox127>
          <cf_tracking_firefox128>---</cf_tracking_firefox128>
          <cf_status_firefox128>---</cf_status_firefox128>
          <cf_tracking_firefox129>---</cf_tracking_firefox129>
          <cf_status_firefox129>---</cf_status_firefox129>
          <cf_tracking_firefox130>---</cf_tracking_firefox130>
          <cf_status_firefox130>---</cf_status_firefox130>
          <cf_tracking_firefox131>---</cf_tracking_firefox131>
          <cf_status_firefox131>---</cf_status_firefox131>
          <cf_tracking_firefox132>---</cf_tracking_firefox132>
          <cf_status_firefox132>---</cf_status_firefox132>
          <cf_tracking_firefox133>---</cf_tracking_firefox133>
          <cf_status_firefox133>---</cf_status_firefox133>
          <cf_tracking_firefox134>---</cf_tracking_firefox134>
          <cf_status_firefox134>---</cf_status_firefox134>
          <cf_tracking_firefox135>---</cf_tracking_firefox135>
          <cf_status_firefox135>---</cf_status_firefox135>
          <cf_tracking_firefox136>---</cf_tracking_firefox136>
          <cf_status_firefox136>---</cf_status_firefox136>
          <cf_tracking_firefox137>---</cf_tracking_firefox137>
          <cf_status_firefox137>---</cf_status_firefox137>
          <cf_tracking_firefox138>---</cf_tracking_firefox138>
          <cf_status_firefox138>---</cf_status_firefox138>
          <cf_tracking_firefox139>---</cf_tracking_firefox139>
          <cf_status_firefox139>---</cf_status_firefox139>
          <cf_tracking_firefox140>---</cf_tracking_firefox140>
          <cf_status_firefox140>---</cf_status_firefox140>
          <cf_tracking_firefox141>---</cf_tracking_firefox141>
          <cf_status_firefox141>---</cf_status_firefox141>
          <cf_tracking_firefox142>---</cf_tracking_firefox142>
          <cf_status_firefox142>---</cf_status_firefox142>
          <cf_tracking_firefox143>---</cf_tracking_firefox143>
          <cf_status_firefox143>---</cf_status_firefox143>
          <cf_tracking_firefox144>---</cf_tracking_firefox144>
          <cf_status_firefox144>---</cf_status_firefox144>
          <cf_tracking_firefox145>---</cf_tracking_firefox145>
          <cf_status_firefox145>---</cf_status_firefox145>
          <cf_tracking_firefox146>---</cf_tracking_firefox146>
          <cf_status_firefox146>---</cf_status_firefox146>
          <cf_tracking_firefox147>---</cf_tracking_firefox147>
          <cf_status_firefox147>---</cf_status_firefox147>
          <cf_tracking_firefox148>---</cf_tracking_firefox148>
          <cf_status_firefox148>---</cf_status_firefox148>
          <cf_tracking_firefox149>---</cf_tracking_firefox149>
          <cf_status_firefox149>---</cf_status_firefox149>
          <cf_tracking_firefox150>---</cf_tracking_firefox150>
          <cf_status_firefox150>---</cf_status_firefox150>
          <cf_tracking_firefox151>---</cf_tracking_firefox151>
          <cf_status_firefox151>---</cf_status_firefox151>
          <cf_tracking_firefox152>---</cf_tracking_firefox152>
          <cf_status_firefox152>---</cf_status_firefox152>
          <cf_tracking_firefox153>---</cf_tracking_firefox153>
          <cf_status_firefox153>---</cf_status_firefox153>
          <cf_tracking_firefox154>---</cf_tracking_firefox154>
          <cf_status_firefox154>---</cf_status_firefox154>
          <cf_tracking_firefox155>---</cf_tracking_firefox155>
          <cf_status_firefox155>---</cf_status_firefox155>
          <cf_tracking_firefox156>---</cf_tracking_firefox156>
          <cf_status_firefox156>---</cf_status_firefox156>
          <cf_tracking_firefox157>---</cf_tracking_firefox157>
          <cf_status_firefox157>---</cf_status_firefox157>
          <cf_tracking_flowstate01>---</cf_tracking_flowstate01>
          <cf_status_flowstate01>---</cf_status_flowstate01>
          <cf_tracking_flowstate02>---</cf_tracking_flowstate02>
          <cf_status_flowstate02>---</cf_status_flowstate02>
          <cf_tracking_flowstate03>---</cf_tracking_flowstate03>
          <cf_status_flowstate03>---</cf_status_flowstate03>
          <cf_data_science_status>---</cf_data_science_status>
          <cf_fission_milestone>---</cf_fission_milestone>
          <cf_last_resolved>2011-03-30 11:37:30</cf_last_resolved>
          
          <votes>5</votes>

      

      

      

          <long_desc isprivate="0">
            <commentid>462775</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2000-10-05 12:17:47 -0700</bug_when>
            <thetext>Reproduce:
1. Visit &lt;http://gemal.dk/browserspy/language.html&gt;.

Actual result:
Your UI language and locale (e.g. en-US) is displayed.

Expected result:
Neither UI nor OS language or locale are revealed to page or site.

Additional Comments:
Compare HTTP 1.1. spec:
&lt;quote src=&quot;http://www.ietf.org/rfc/rfc2616.txt&quot;&gt;
15.1.4 Privacy Issues Connected to Accept Headers

   Accept request-headers can reveal information about the user to all
   servers which are accessed. The Accept-Language header in particular
   can reveal information the user would consider to be of a private
   nature, because the understanding of particular languages is often
   strongly correlated to the membership of a particular ethnic group.
   User agents which offer the option to configure the contents of an
   Accept-Language header to be sent in every request are strongly
   encouraged to let the configuration process include a message which
   makes the user aware of the loss of privacy involved.

   An approach that limits the loss of privacy would be for a user agent
   to omit the sending of Accept-Language headers by default, and to ask
   the user whether or not to start sending Accept-Language headers to a
   server if it detects, by looking for any Vary response-header fields
   generated by the server, that such sending could improve the quality
   of service.

   Elaborate user-customized accept header fields sent in every request,
   in particular if these include quality values, can be used by servers
   as relatively reliable and long-lived user identifiers. Such user
   identifiers would allow content providers to do click-trail tracking,
   and would allow collaborating content providers to match cross-server
   click-trails or form submissions of individual users. Note that for
   many users not behind a proxy, the network address of the host
   running the user agent will also serve as a long-lived user
   identifier. In environments where proxies are used to enhance
   privacy, user agents ought to be conservative in offering accept
   header configuration options to end users. As an extreme privacy
   measure, proxies could filter the accept headers in relayed requests.
   General purpose user agents which provide a high degree of header
   configurability SHOULD warn users about the loss of privacy which can
   be involved.
&lt;/quote&gt;

While we don&apos;t send this info as HTTP header, we offer it as JS property. See
the source of the testcase mentioned above for details.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>466753</commentid>
            <who name="David Krause">mozilla</who>
            <bug_when>2000-10-09 01:39:35 -0700</bug_when>
            <thetext>Isn&apos;t the language info also in the useragent string?  According to the browser
sniffer at http://www.ufaq.org/ it is.

User Agent: Mozilla/5.0 (X11; U; Linux 2.2.16-3 i686; en-US; m18) Gecko/20001006
Application Name: Netscape
Application Version: 5.0 (X11; en-US)

While this could be considered a privacy thing, it could be really neat if sites
tailored what language their content was according to your locale and language.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>466756</commentid>
            <who name="David Krause">mozilla</who>
            <bug_when>2000-10-09 01:42:30 -0700</bug_when>
            <thetext>Hmm, on section thought maybe this isn&apos;t so good.  I recommend disabling it or
at least pref-disabling it.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>466833</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2000-10-09 04:53:34 -0700</bug_when>
            <thetext>David, you are right and everything is as you suggested it. See the pref UI pane
under Navigator - it configures the HTTP header to send.
This bug is about the JS property which is
- much less useful (do you want to send all available language versions and then
select onteh client side?)
- not opt-in
- corrently not (independantly) changeable by the user, but identical to the UI
language
.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>468779</commentid>
            <who name="timeless">timeless</who>
            <bug_when>2000-10-10 07:13:41 -0700</bug_when>
            <thetext>The useragent should not include this information. But the point of accept is 
to say that the user WANTS the content in that language.  Some RFCs need 
comments like ~this is stupid and counterproductive~.

Verah I think you work on that privacy document, add a paragraph w/ link to 
that rfc:
According to &lt;a&gt;RFC&lt;/a&gt; we do hereby warn you that asking for content in a 
language you prefer might divulge information about you (including &lt;span 
style=&quot;-moz-type-timeless:shocking&quot;&gt;the language you prefer to read&lt;/span&gt;, 
which may imply &lt;span style=&quot;-moz-type-timeless:shocking&quot;&gt;your 
ethnicity&lt;/span&gt;).

I presume mozilla does send prefered language headers, if not we need a bug for 
that (mozilla1.0)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>468858</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2000-10-10 08:34:15 -0700</bug_when>
            <thetext>timeless, I don&apos;t understand your last comment. Also, it has nothing to do with
privacy *links* (maybe the *document*). Removing dependancy.

Please note the difference between the HTTP header &quot;Accept-Language&quot; and the JS
property. The implementation of the former is OK in Mozilla (I think). This bug
is about the latter.

David Krause, thanks for noting the UA string (anyhow, I missed your comment).
Will investigate.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>481515</commentid>
            <who name="Mitchell Stoltz (not reading bugmail)">security-bugs</who>
            <bug_when>2000-10-18 12:13:10 -0700</bug_when>
            <thetext>Future.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>490062</commentid>
            <who name="Gervase Markham [:gerv]">gerv</who>
            <bug_when>2000-10-25 04:27:15 -0700</bug_when>
            <thetext>As there&apos;s nothing a user can do about this JS privacy leak, is it worth 
relnoting?

The blurb:
It seems unclear to me whether this bug requires either of a &quot;developer&quot; or 
&quot;user&quot; release note for Netscape 6 RTM. If anyone feels it does, can they please 
draft one and then nominate with the relnote-user or relnote-devel strings in 
the Status Whiteboard.

Thanks :-)

Gerv</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>490068</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2000-10-25 04:33:13 -0700</bug_when>
            <thetext>&gt; As there&apos;s nothing a user can do about this JS privacy leak, is it worth
&gt; relnoting?

Sure, at least he has to know. He can do something: Use another UA or use
english chrome.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>491051</commentid>
            <who name="Mitchell Stoltz (not reading bugmail)">security-bugs</who>
            <bug_when>2000-10-25 14:56:15 -0700</bug_when>
            <thetext>Hasn&apos;t Netscape always revealed the UI language somehow? If this behavior is
present in 4.x, then I don&apos;t see why we need a relnote. </thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>491157</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2000-10-25 15:47:46 -0700</bug_when>
            <thetext>&gt; Hasn&apos;t Netscape always revealed the UI language somehow?

Yes, I think so. I am not sure we need a relnote.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>493316</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2000-10-26 23:43:21 -0700</bug_when>
            <thetext>We *already* have something better than a relnote: Tasks|Privacy|Understanding
&lt;chrome://communicator/locale/wallet/privacy.html&gt;. removing relnoteRTM based on
that.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>511693</commentid>
            <who name="John Unruh">junruh</who>
            <bug_when>2000-11-14 10:19:05 -0800</bug_when>
            <thetext>Mass changing QA to ckritzer.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>736122</commentid>
            <who name="danielmc">danielmc</who>
            <bug_when>2001-05-22 06:49:04 -0700</bug_when>
            <thetext>We are past the UI freeze for Commmercial Beta. We need a UI freeze to ba able 
to ship Localised products simultaneously with the US. Would it be possible to 
check any changes to chrome://communicator/locale/wallet/privacy.html after we 
have branched in the commercial tree on 6/29?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>736125</commentid>
            <who name="danielmc">danielmc</who>
            <bug_when>2001-05-22 06:57:54 -0700</bug_when>
            <thetext>By the way here is a handy JS for revealing UA info...

&lt;PRE&gt;
&lt;SCRIPT&gt;
with (document) {
    writeln(&quot;navigator.userAgent is &quot;, navigator.userAgent);
    writeln(&quot;navigator.appCodeName is &quot;, navigator.appCodeName);
    writeln(&quot;navigator.appVersion is &quot;, navigator.appVersion);
    writeln(&quot;navigator.appName is &quot;, navigator.appName);
}
&lt;/SCRIPT&gt;
&lt;/PRE&gt;
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>844216</commentid>
            <who name="Mitchell Stoltz (not reading bugmail)">security-bugs</who>
            <bug_when>2001-07-26 16:36:30 -0700</bug_when>
            <thetext>Target is now 0.9.5, Priority P1.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>844315</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2001-07-26 17:32:21 -0700</bug_when>
            <thetext>Removing this info from the UA string is trivial. I did this for Beonex
Communicator, I can attach a patch.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>845007</commentid>
            <who name="Mitchell Stoltz (not reading bugmail)">security-bugs</who>
            <bug_when>2001-07-27 10:35:30 -0700</bug_when>
            <thetext>Ben,
   By all means, attach your patch. I don&apos;t think we will make it the default,
but it would be nice to have as part of &quot;high-privacy mode,&quot; which is something
I&apos;m working on.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>845765</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2001-07-27 19:23:25 -0700</bug_when>
            <thetext>Mitch, why not make it the default? The HTTP spec explicitly recommends against
doing what we do atm. Sites won&apos;t break either, if we just always send &quot;en-US&quot;.
(But possibly with an Accept-Language header, which is customized by the user.)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>845773</commentid>
              <attachid>43864</attachid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2001-07-27 19:36:28 -0700</bug_when>
            <thetext>Created attachment 43864
Proposed Fix for UA-string. Also contains Win fix for bug 57555.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>845782</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2001-07-27 20:03:31 -0700</bug_when>
            <thetext>&gt; (But possibly with an Accept-Language header, which is customized by the user.)

s/with/, we send/

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>847545</commentid>
            <who name="Mitchell Stoltz (not reading bugmail)">security-bugs</who>
            <bug_when>2001-07-30 13:39:49 -0700</bug_when>
            <thetext>It&apos;s not my decision to make. I will ask around here and find out if changing
the default UA is OK. There may be some resistance to changing it at all,
especially if we&apos;ve always provided the language information in the UA.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>847912</commentid>
            <who name="timeless">timeless</who>
            <bug_when>2001-07-30 17:32:59 -0700</bug_when>
            <thetext>this was discussed in a newsgruop that i read recently (well the discussion was 
1-4 years old but...) cc.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>848156</commentid>
            <who name="Jeremy M. Dolan">jmd</who>
            <bug_when>2001-07-30 20:44:58 -0700</bug_when>
            <thetext>Ben, does your patch remove the region/language from navigator.appVersion as well?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>848255</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2001-07-30 23:59:35 -0700</bug_when>
            <thetext>Yes, it seems so. The test page now shows &quot;en&quot; (the hardcoded dummy value)
instead of &quot;en-US&quot;. Looks like the Javascript function pulls its value out of
the UA-string, which is nice. So, looks like I fixed this bug. I&apos;ll install a
German langpack when I get a chance to be sure.

mstoltz, would you mind, if I took the bug? Who has to be asked about checking
this in, apart from dbaron? (There&apos;s no pref to turn this on or off, since I see
no value in the current behaviour - see comment in patch and my earlier comments
here for reasons.)

dbaron, what do you think?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>848268</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2001-07-31 00:18:53 -0700</bug_when>
            <thetext>Posted proposal to .netlib: &lt;news://news.mozilla.org/3B665A87.8050807@beonex.com&gt;.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>848297</commentid>
            <who name="Katsuhiko  Momoi">momoi</who>
            <bug_when>2001-07-31 01:09:11 -0700</bug_when>
            <thetext>&gt; It&apos;s not my decision to make. I will ask around here and find 
&gt; out if changing the default UA is OK. There may be some 
&gt; resistance to changing it at all, especially if we&apos;ve always
&gt; provided the language information in the UA.

Netscape commercial builds cannot remove the lang info from
UA string. They serve as important tracking tools. 

If Mozilla wants to make that an option, that is fine 
but that option should not be the default. 
If there is a proposed UI for it, commercial builds might
consider removing the UI.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>848305</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2001-07-31 01:30:42 -0700</bug_when>
            <thetext>&gt; If Mozilla wants to make that an option, that is fine 
&gt; but that option should not be the default.

Why? If it&apos;s a pref, Netscape can alter it trivially.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>848313</commentid>
            <who name="Katsuhiko  Momoi">momoi</who>
            <bug_when>2001-07-31 01:44:56 -0700</bug_when>
            <thetext>&gt;&gt; If Mozilla wants to make that an option, that is fine 
&gt;&gt; but that option should not be the default.

&gt; Why? If it&apos;s a pref, Netscape can alter it trivially.

That is true. As long as it is Netscape&apos;s default not 
to turn off lang info, that would be fine.

By the way I would like to raise this issue about
the privacy clause in HHTP 1.1. It is wrong-headed to
single out lang info as the only thing compromising
security. What about the fact that you&apos;re using Mozilla,
Gecko, or Netscape, Win NT5, etc. ? Why, someone could
descriminate against Netscape users or IE users or
whatever. That is also a privacy issue if lang info
is a privacy issue. The fact that somethng is mentioned
in an RFC document does not mean we need to be implementing
everything that is in it. 
In these day and age, the fact that someone might be using
en-US build means virtually nothing other than the fact that
someone maight be able to read English. We have users 
all over the world using an en-US build.
The fact that someone is using using an ja-JP build does not
mean that that person is Japanese. It simple means that someone
possibly reads Japanese but may be a Canadian, etc. 
The whole argument about the lang info being a compromising
factor is moot in my opinion. Whoever wrote the HTTP 1.1 section
onlang info and security should examine issues more broadly
and fairly.

Our proud Mozilla localizers around the world would probably 
like to see their L10 work reflected accurately in the 
UA string. 

</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>848322</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2001-07-31 02:02:22 -0700</bug_when>
            <thetext>&gt; wrong to single out lang info as the only thing compromising security.

Right. There are other bugs about other issues, e.g. bug 57555.

&gt; en-US build means virtually nothing

Right, but if I speak Hebrew, it does mean something.

You can argue about the severity of this bug. But I do think that it should be
fixed. I care less about the default in Mozilla, but I would prefer that Mozilla
followed the advise of the spec.

I will attach a new patch which makes it dependant on a pref
(browser.reveal-ui-lang or similar) when I have time.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>848514</commentid>
            <who name="timeless">timeless</who>
            <bug_when>2001-07-31 09:38:56 -0700</bug_when>
            <thetext>ben: you&apos;re german no? I know a bunch of people who contribute to mozilla.org 
who can read hebrew and I wonder if _any_ of them have this concern (I know 
it&apos;s really odd ..)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>848793</commentid>
            <who name="">tao</who>
            <bug_when>2001-07-31 11:32:52 -0700</bug_when>
            <thetext>Folks:

Some websites sniff U-A string to redirect users to appropriate pages for 
downloading localized version of their software/patch. When locale info does not
present, &quot;en-US&quot; are often used as the default.

Following spec is a good thing when it does not break existing websites. I agree 
that making it a preference and default to &apos;on&apos; seems to be a good compromise.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>848939</commentid>
            <who name="Jeremy M. Dolan">jmd</who>
            <bug_when>2001-07-31 12:57:07 -0700</bug_when>
            <thetext>&gt; Some websites sniff U-A string to redirect users to appropriate pages for 
&gt; downloading localized version of their software/patch.

IE 5.0, 5.01, 5.5, and presumably earlier versions don&apos;t put language in UA.
Opera doesn&apos;t put language in UA. Konqueror doesn&apos;t put language in UA. This is
a wholly unappropriate and nonportable place for that information. That&apos;s the
whole purpose of the Accept-Language header, to specify what language you want
information in.

If you want to ignore the RFC and default Accept-Language to on, that&apos;s fine
enough by me (and is a seperate bug anyway). But there&apos;s no purpose to reveal
the *UI* language, if not for privacy, for correctness. Accept-Language is the
language(s) the user wants to receive information in.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>848962</commentid>
            <who name="">tao</who>
            <bug_when>2001-07-31 13:11:48 -0700</bug_when>
            <thetext>I don&apos;t think I&apos;ve ever said that it is proper to use U-A string for content
negotiation; as you pointed out, accept-lang in the HTTP header serves such 
purpose. All I said is there are indeed websites misuse the U-A string...

Glad hear standard advocate, though :-) </thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>849090</commentid>
            <who name="Katsuhiko  Momoi">momoi</who>
            <bug_when>2001-07-31 14:02:28 -0700</bug_when>
            <thetext>&gt; But there&apos;s no purpose to reveal the *UI* language, if not 
&gt; for privacy, for correctness. Accept-Language is the
&gt; language(s) the user wants to receive information in.

I think you should read the definition of User-agent:

&quot;14.43 User-Agent

   The User-Agent request-header field contains information about the
   user agent originating the request. This is for statistical purposes,
   the tracing of protocol violations, and automated recognition of user
   agents for the sake of tailoring responses to avoid particular user
   agent limitations. User agents SHOULD include this field with
   requests. The field can contain multiple product tokens (section 3.8)
   and comments identifying the agent and any subproducts which form a
   significant part of the user agent. By convention, the product tokens
   are listed in order of their significance for identifying the
   application.

       User-Agent     = &quot;User-Agent&quot; &quot;:&quot; 1*( product | comment )

   Example:

       User-Agent: CERN-LineMode/2.15 libwww/2&quot;

Further Product tokens are deifned as:

&quot; Product tokens are used to allow communicating applications to
   identify themselves by software name and version. Most fields using
   product tokens also allow sub-products which form a significant part
   of the application to be listed, separated by white space. By
   convention, the products are listed in order of their significance
   for identifying the application. .... etc.&quot;

UI language differs if localization files are different. 
It is clearly a significant part of the application. And though
this is not common, localization itself might reveal a bug that 
was not caught before the product was shipped. This latter type
of case does actually. For tracking purposes, it is in my opinion
siginificant info. 

I don&apos;t believe that we should use considerations raised
for Accept-Language for user-agent issues. I just want to point
out that there are arguments for both sides of this issue and also
that the HTTP 1.1 says nothing about not revealing the UI language in
the User-agent header. If MS or Opera wants not to include that
info, that is fine but let that not bind what we should do here.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>849138</commentid>
            <who name="Jeremy M. Dolan">jmd</who>
            <bug_when>2001-07-31 14:27:51 -0700</bug_when>
            <thetext>Keep in mind, that where the RFC says &quot;automated recognition of user agents for
the sake of tailoring responses&quot;, I think this would more refer to protocol
tailoring, not content. For example, Apache&apos;s default config contains some magic
to disable Keep-Alive for some broken versions of IE that claim to support it.

HTML includes its own means of &quot;avoid[ing] particular user agent limitations&quot;,
such as CSS, and other ways of making content still accessible to older browsers.

The only browser revealing language in U-A I know of is Netscape 4.*, which,
last I heard, had 8% market share. Any page basing content off this field isn&apos;t
a whole hell of a lot effective right now. If future versions of Mozilla and
Netscape 6 remove it from U-A, more web designers won&apos;t be tricked into
mistaking U-A for A-L (see also: Microsoft J++).

OK, I&apos;ll shutup now, sorry for all the spam, folks.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>849253</commentid>
            <who name="Daniel Veditz [:dveditz]">dveditz</who>
            <bug_when>2001-07-31 15:43:24 -0700</bug_when>
            <thetext>The user agent language is used for distribution tracking, right? Personally if
I were creating a language pack I&apos;d be gratified to have a clue how far it had
spread, especially for a minority/endangered language (Navaho? Hawaiian?
Gaelic?). If I were using such a language I&apos;d probably want to signify my
presence (ethnic pride).

This kind of thing should obviously be a pref. (and now we can commence arguing
over the default setting in Mozilla.)  If the UA were easier to change (i.e. via
the pref UI rather than hacking prefs.js) this wouldn&apos;t be so much of an issue.

As the person mostly responsible for foisting &quot;navigator.language&quot; on people in
4.x I think we could safely nuke it. Eh, I guess we should return a string so we
don&apos;t break pages accidentally on an undefined property, maybe &quot;&quot; or &quot;unknown&quot;.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>849272</commentid>
            <who name="">tao</who>
            <bug_when>2001-07-31 15:53:42 -0700</bug_when>
            <thetext>Hi, Kat:

We should probably inform webmasters of whatever change we make in the final so
they can adapt accordingly.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>849378</commentid>
            <who name="Mitchell Stoltz (not reading bugmail)">security-bugs</who>
            <bug_when>2001-07-31 17:06:05 -0700</bug_when>
            <thetext>I agree that we should have a pref. I don&apos;t know what the default setting should
be, but I would lean towards leaving the language in there by default. We should
have a pref checkbox for &quot;paranoid mode&quot; that will turn off the language part of
the UA as well as other small privacy violations which are the norm.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>849385</commentid>
            <who name="Jacek Piskozub">piskozub</who>
            <bug_when>2001-07-31 17:10:22 -0700</bug_when>
            <thetext>I believe that as mst potential Mozilla users does not live in zones of war or
ethnic cleansing, the default setting should be the present behavior.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>849601</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2001-07-31 20:48:32 -0700</bug_when>
            <thetext>&gt; as mst potential Mozilla users does not live in zones of war or ethnic
&gt; cleansing, the default setting should be the present behavior.

The problem is that users might not know that we spread this info. And it&apos;s not
worth a UI pref IMO.

Default in Mozilla: So far, I count 1+4 (non-Netscape+Netscape) votes for on,
4+0 for off/dummy.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>849704</commentid>
            <who name="Daniel Veditz [:dveditz]">dveditz</who>
            <bug_when>2001-07-31 22:39:29 -0700</bug_when>
            <thetext>Any votes gathered here are going to be meaningless because mostly only people
who agree will find this bug. People who are happy with the way things are have
no clue others want to change things--though I will grant that most people
probably don&apos;t care one way or another.

The navigator.language issue should be dealt with separately. IMHO axe that,
leave the UA the way it is, and make it a hell of a lot easier for people to
spoof the UA (e.g. pref UI with radio-buttons for common options and then a text
box for custom text). Paranoid nuts who are worried about language in the UA
also don&apos;t like giving out OS info and nearly everything else in the UA -- we
shouldn&apos;t address UA privacy issues item by item.

So is this bug about navigator.language, or is it about the UA? If the latter it
should be invalid, in favor of some UA uber-bug</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>849824</commentid>
            <who name="Daniel Glazman (:glazou) (not active in Mozilla any more)">daniel</who>
            <bug_when>2001-08-01 00:34:01 -0700</bug_when>
            <thetext>Just to show that I am the kind of person who cares about languages : I use a
browser with an english UI. I configured it so it accepts the following
languages in this order : French, English, Swedish, Spanish, Yiddish, Xhosa.
And the person who Cc:ed me (timeless ?)on this bug also knows that privacy is
on top of list of my concerns.

I think this bug is a total non issue and a waste of time and neurons. We have
language strings crossing the web in all directions since 1996 and nobody never
ever complained about it.

My 0.02? only...
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>849876</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2001-08-01 01:21:14 -0700</bug_when>
            <thetext>&gt; People who are happy with the way things are have no clue others want to
&gt; change things

Right.

OK, you talked me into making to default on for Mozilla.

&gt; The navigator.language issue should be dealt with separately. IMHO axe that,

I care more about the UA-string, since we are really spreading this all over the
world and playing it in many server-logs. Implementation is coupled.

&gt; and make it a hell of a lot easier for people to spoof the UA (e.g. pref UI
&gt; with radio-buttons for common options and then a text box for custom text)

There is a bug about it, but it has its own problems, like (by the user)
unintended side-effects. I am not a fan of having UI for setting the UA-string
to arbitary values.
&gt; So is this bug about navigator.language, or is it about the UA? If the latter
&gt; it should be invalid, in favor of some UA uber-bug

It&apos;s about both (&quot;don&apos;t reveal&quot; includes all ways). But it is INVALID in no
case, because it&apos;s a legal request. It is also disabled in Beonex Communicator
(by default), so I would appreciate, if I wouldn&apos;t have to carry around source
patches.

If I attach a patch to make it depending on a pref, default on, everybody is
happy, no?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>849908</commentid>
            <who name="Jeremy M. Dolan">jmd</who>
            <bug_when>2001-08-01 02:19:58 -0700</bug_when>
            <thetext>I was originally arguing to remove the language from U-A, but enough NSCPies
want to leave it for various reasons, so I say just leave it. I didn&apos;t notice
4.7 had been doing it all this time, so it&apos;s nothing urgent. If it becomes an
issue, we&apos;ll address it post 1.0. But for god sakes, don&apos;t make it a pref. And
certainly no UI. 

If anything, a generic U-A pref (also with no UI, or a plain textbox under
Debug... none of this multi pulldown nonsense) could be used to remove it, or, I
have a bug open on disabling U-A altogether. But seperate prefs to tweak each
part of the U-A string would be nuts.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>850192</commentid>
            <who name="Daniel Veditz [:dveditz]">dveditz</who>
            <bug_when>2001-08-01 09:59:35 -0700</bug_when>
            <thetext>Ben, implementation could be trivially uncoupled if we wanted to deal with
navigator.language separately.

&gt;&gt; is it about the UA? If the latter it should be invalid, in favor
&gt;&gt; of some UA uber-bug
&gt;
&gt; It&apos;s about both (&quot;don&apos;t reveal&quot; includes all ways). But it is INVALID in no
&gt; case, because it&apos;s a legal request.
It&apos;s a valid concern, but wrong to consider in isolation from the other
user-agent privacy concerns. Do you really want a bunch of &quot;Hide UA Language&quot;,
&quot;Hide UA platform&quot;, &quot;Hide UA OS&quot;, &quot;Hide UA OS version&quot;, etc. prefs? The UI would
be ugly which means they&apos;d be hidden prefs, and that means most people who might
benefit would have no clue they were there.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>850277</commentid>
            <who name="Mike Shaver (:shaver emeritus)">mike.shaver</who>
            <bug_when>2001-08-01 10:38:58 -0700</bug_when>
            <thetext>If IE 5.0 and 5.5 don&apos;t send the language in the UA string, how many sites can
we really be breaking?  I think the compatibility stance so far, in DOM and
other key areas, has been that if IE5 and NS4 do different things, we should ape
IE5 because it has so many more users.

(I&apos;m sure that localization folks would love to know how many people are using
their work, and I have no problem with that desire, but I don&apos;t want to turn the
UA string into about:credits.)
The argument that we&apos;ve been doing this since 1996 doesn&apos;t sway me: browsers had
privacy-hostile cookie and image handling for years to, but I&apos;m pretty sure
nobody&apos;s going to stand up and say that fixing it doesn&apos;t matter.

I&apos;d support pulling UI language out of the UA because
 - people should be using Accept-Language to tailor content

 - I can&apos;t believe that we&apos;re functionally breaking that many sites if IE
doesn&apos;t do this, and the browser-number-tracking stuff really doesn&apos;t sway me,
because, again, IE is the majority of the browser population, and you can&apos;t do
this kind of tracking on it

 - there&apos;s too much crap in the UA anyway
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>850354</commentid>
            <who name="">tao</who>
            <bug_when>2001-08-01 11:21:34 -0700</bug_when>
            <thetext>&gt;If IE 5.0 and 5.5 don&apos;t send the language in the UA string, how many sites can
&gt;we really be breaking?  

Some websites have logic like this:

  if (Netscape) {
    // assuming locale info presents
    do some locale specific things...
  }
  else if (MSIE) {
    do nothing...
  } else {
    do nothing..
  }

The problem is more like Netscape used to include locale info in the U-A and
some websites use it to do something for international users. Unless 
webmasters are advised of any upcoming change, their websites are doomed to
break. I won&apos;t be surprised to see they start advising people that they websites
work better with other browsers.


</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>850950</commentid>
            <who name="Mitchell Stoltz (not reading bugmail)">security-bugs</who>
            <bug_when>2001-08-01 14:33:33 -0700</bug_when>
            <thetext>I agree with dveditz. People who care whether or not their UI language is
revealed in the UA string probably also don&apos;t want their browser and OS versions
revealed. We already have a (hidden) pref for overriding the UA string; why
don&apos;t we just encourage people to use that?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>850978</commentid>
            <who name="Jacek Piskozub">piskozub</who>
            <bug_when>2001-08-01 14:45:46 -0700</bug_when>
            <thetext>Mitchell: One of the reasons is bug 83376. It seems Sun Java uses the UA to
check if the browser is Netscape/Mozilla. It is either free choice of UA or
working Java :-(</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>851036</commentid>
            <who name="timeless">timeless</who>
            <bug_when>2001-08-01 15:11:27 -0700</bug_when>
            <thetext>please IGNORE the sun jvm problem, that&apos;s a bug which someone working on oji or 
the sun jre will fix, it shouldn&apos;t ask us about our spoofable useragent.  All 
things considered a simple pref could probably be exposed:

[x] Include system and locale information in useragent. checked by default.

unchecking it would strip out all information except very basic stuff.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>851061</commentid>
            <who name="Jacek Piskozub">piskozub</who>
            <bug_when>2001-08-01 15:30:05 -0700</bug_when>
            <thetext>Timeless: I&apos;m actually for ignoring the Java bug. The thing that bothers me is
the reply from Sun edburns@acm.org posted on 7/17 as a comment to bug 83376:

&gt; Java Plug-in depends on user-agent string for version information, no fix
&gt; will be made.
&gt;
&gt; zhengyu.gu@sun.com

I believe this needs applyng some pressure on Sun.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>908991</commentid>
            <who name="Tim Powell">tpowellmoz</who>
            <bug_when>2001-09-07 15:17:53 -0700</bug_when>
            <thetext>Although IE5,IE5.5 do not include the language in the user agent string, they do
expose it in JavaScript through navigator.userLanguage and
navigator.systemLanguage. I believe navigator.language should continue to report
useful and accurate information in Mozilla. Perhaps the language returned can be
talored to the accept language stuff under edit-&gt;prefs-&gt;navigator-&gt;language.
Perhaps report the prefered language. It seems that this is the only way the DOM
can configure to the language, which could be useful if not serving special
pages for each language.

I don&apos;t see any reason to remove this from UA by default, especially since we
allow changing the UA completely. I&apos;ve always thought that this was one of the
nicer features of N4.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>909198</commentid>
            <who name="">bobj</who>
            <bug_when>2001-09-07 17:15:13 -0700</bug_when>
            <thetext>&gt; Perhaps the language returned can be
&gt; talored to the accept language stuff under edit-&gt;prefs-&gt;navigator-&gt;language.
&gt; Perhaps report the prefered language.
These are different.  The string in the u-a indicates the browser localization
(i.e. the browser UI and some default settings).  The pref indicates the
user&apos;s preferred language(s) for the content.  E.g., a user may run a Japanese
browser, but prefers content in Arabic. Since the browser is enabled for many
more languages that it is currently localized, this is not unusual.
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>909789</commentid>
            <who name="Jaime Rodriguez, Jr.">jaimejr</who>
            <bug_when>2001-09-08 09:00:36 -0700</bug_when>
            <thetext>Removing ME ---&gt; barrowma (acting browser PM)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>954474</commentid>
            <who name="Mitchell Stoltz (not reading bugmail)">security-bugs</who>
            <bug_when>2001-10-04 15:12:38 -0700</bug_when>
            <thetext>time marches on...retargeting to 0.9.6</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>1002017</commentid>
            <who name="Mitchell Stoltz (not reading bugmail)">security-bugs</who>
            <bug_when>2001-10-31 15:07:42 -0800</bug_when>
            <thetext>Moving to Moz1.0 as part of &quot;paranoid mode&quot; feature set</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>1054126</commentid>
            <who name="Asa Dotzler [:asa]">asa</who>
            <bug_when>2001-12-03 11:16:36 -0800</bug_when>
            <thetext>Bugs targeted at mozilla1.0 without the mozilla1.0 keyword moved to mozilla1.0.1 
(you can query for this string to delete spam or retrieve the list of bugs I&apos;ve 
moved)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>1478109</commentid>
            <who name="Mitchell Stoltz (not reading bugmail)">security-bugs</who>
            <bug_when>2002-08-02 18:19:01 -0700</bug_when>
            <thetext>Futuring.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>3553632</commentid>
            <who name="Tony Mechelynck [:tonymec]">antoine.mechelynck</who>
            <bug_when>2008-03-30 11:26:50 -0700</bug_when>
            <thetext>Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9pre) Gecko/2008033001 SeaMonkey/2.0a1pre

Workaround: Set the pref general.useragent.locale (in about:config) to the empty string (or even to any language you want to spoof as using). If set to the empty string, the semicolon and one surrounding space are removed too.

According to http://kb.mozillazine.org/General.useragent.locale , that pref was created on 2000-02-07.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>3553876</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2008-03-30 18:07:13 -0700</bug_when>
            <thetext>Per HTTP spec, &quot;message which makes the user aware of the loss of privacy involved&quot;, i.e. not only user-configurable, but even an alert.
(This applies all the more if this is set by default based on UI or OS language, like Firefox does.)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>3851275</commentid>
            <who name="Daniel Veditz [:dveditz]">dveditz</who>
            <bug_when>2008-11-11 23:33:45 -0800</bug_when>
            <thetext>*** Bug 464414 has been marked as a duplicate of this bug. ***</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4373809</commentid>
            <who name="(mostly gone) XtC4UaLL [:xtc4uall]">xtc4uall</who>
            <bug_when>2009-10-31 07:55:12 -0700</bug_when>
            <thetext>*** Bug 525637 has been marked as a duplicate of this bug. ***</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4373832</commentid>
            <who name="">messi</who>
            <bug_when>2009-10-31 08:23:16 -0700</bug_when>
            <thetext>While I believe that my request (bug 525637) is a superset of this very old bug and not a duplicate I&apos;d like to reactivate the topic here. Though it seems Mozilla is avoiding the topic.

Also, setting the locale to blank is not a workaround because it will make you stand out even more. Please remove &quot;has workaround&quot; keyword.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4513456</commentid>
            <who name="Matthias Versen [:Matti]">matti</who>
            <bug_when>2010-01-30 07:50:00 -0800</bug_when>
            <thetext>*** Bug 543202 has been marked as a duplicate of this bug. ***</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4640510</commentid>
            <who name="Henri Sivonen (:hsivonen)">hsivonen</who>
            <bug_when>2010-04-15 07:15:44 -0700</bug_when>
            <thetext>Bug 543202 is also a superset and not an exact duplicate. For example, the Gecko build date is absolutely useless for any non-b.m.o sniffing but it makes UA strings have more fingerprintable parts.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4704138</commentid>
            <who name="Henri Sivonen (:hsivonen)">hsivonen</who>
            <bug_when>2010-05-20 01:51:40 -0700</bug_when>
            <thetext>Note that CSS now exposes the directionality of the UI language. The HTML5 parser (via &lt;isindex&gt; prompt) exposes the UI language but not necessarily which regional variant when the string does not happen to vary by region.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4704196</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-05-20 03:02:08 -0700</bug_when>
            <thetext>Both should instead use the *content* language (Prefs|Content|Language|Choose... , which is by default Firefox install the same as the UI language). The content language is fine to expose to the website, that&apos;s what it&apos;s for, and it&apos;s changeable independently. It&apos;s also more correct to use that, because the site should adjust based on that, and it would have wrong effects to have an English-UI Firefox nightly set to Arabic report left-to-right and &quot;en&quot; in some places and Arabic in Accept-Language.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4710031</commentid>
            <who name="Gervase Markham [:gerv]">gerv</who>
            <bug_when>2010-05-24 02:24:18 -0700</bug_when>
            <thetext>Are there _any_ known cases of a website using Accept-Language to infer someone&apos;s ethnicity and taking action against them, either electronic or physical?

The only way to avoid that possibility would be to remove all language-identifying features from what the browser sends - Accept, JS, everything. However, these features are used today to provide serious and measurable benefits to web users, 99.999% of whom don&apos;t care if a site knows what languages they speak.

Gerv</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4710051</commentid>
            <who name="Daniel Glazman (:glazou) (not active in Mozilla any more)">daniel</who>
            <bug_when>2010-05-24 02:58:44 -0700</bug_when>
            <thetext>(In reply to comment #68)

&gt; The only way to avoid that possibility would be to remove all
&gt; language-identifying features from what the browser sends - Accept, JS,
&gt; everything. However, these features are used today to provide serious and
&gt; measurable benefits to web users, 99.999% of whom don&apos;t care if a site knows
&gt; what languages they speak.

I don&apos;t understand some of the comments above Gerv&apos;s... Ok, the spec says something, but pragmatism sometimes help if the spec is counter-productive

There are many web sites out there that are tailored to serve me better, and that includes serve me in my own language if and when they support it. This is a hugely positive factor for all users around the world. Geolocating the IP address is not enough and many web sites have elaborated detection based on all what&apos;s available today, including user-agent string. Change that and you&apos;ll break their behaviour, and I won&apos;t call that &quot;for the greatest benefit of all&quot;.

I am myself strongly in favor of a wontfix for this bug unless the solution implemented is a &quot;never reveal my language&quot; pref in an advanced preference panel with default &quot;on&quot;. And I&apos;m not sure it&apos;s worth the bloat, honestly.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4710116</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-05-24 04:57:00 -0700</bug_when>
            <thetext>Gerv, I am not opposed to Accept-Language at all, which is user-configurable and defaulted to the UI language. I think I said as much in my last message.

I am opposed to the browser sending the *UI* language, where it&apos;s different from Accept-Language. Wherever we send the language, locale or country to the site, e.g. UserAgent string, it should be user-configurable value from Prefs|Content|Language|Choose... (which is already used for Accept-Language), not the UI language value.

There is no loss for the user here. On the contrary, if anything it&apos;s going to work better.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4710119</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-05-24 05:00:09 -0700</bug_when>
            <thetext>Please note that the summary of this bug specifically says &quot;UI language&quot;, i.e. browser locale/ package, not &quot;content language&quot; = Accept-Language = &quot;Prefs|Content|Language|Choose...&quot;.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4712043</commentid>
            <who name="Henri Sivonen (:hsivonen)">hsivonen</who>
            <bug_when>2010-05-25 05:50:05 -0700</bug_when>
            <thetext>FWIW, I&apos;m not really concerned about using language per se for nefarious purposes. I&apos;m more concerned about UI language being yet another piece of configuration entropy that can be used for fingerprinting. See https://panopticlick.eff.org/</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4712114</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-05-25 06:44:08 -0700</bug_when>
            <thetext>I&apos;ll update patch here as part of bug 57555, once I get to it.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4713583</commentid>
            <who name="Gervase Markham [:gerv]">gerv</who>
            <bug_when>2010-05-26 02:46:04 -0700</bug_when>
            <thetext>Ben: so you are not arguing for this switch from a privacy point of view, but a functionality one? If so, that does make sense to me.

Gerv</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4713599</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-05-26 03:07:46 -0700</bug_when>
            <thetext>I argue from both perspectives. If the user is in control, there is no privacy issue, or at least no critical one. Also, reducing the number of permutations is good for functionality (consistent) and privacy (fingerprinting), in this case.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4714936</commentid>
            <who name="Johnny Stenback  (:jst)">jstenback+bmo</who>
            <bug_when>2010-05-26 15:44:34 -0700</bug_when>
            <thetext>Not holding the 1.9.3 release for this bug.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4765188</commentid>
            <who name="gionnico">gionnico</who>
            <bug_when>2010-06-24 18:34:52 -0700</bug_when>
            <thetext>I don&apos;t understand why should all locales but english one have something like

it-it
it;q=0.8
en-us;q=0.5
en;q=0.3

If I download italian, why is english there? And why two strings with different priorities (it-it and it)?

This, by the way gives more information for fingerprinting than a plain &quot;it&quot; (this is in general more common than the double it-it) set as default for every italian build: official or unofficial and for every platform.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4765195</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-06-24 18:38:31 -0700</bug_when>
            <thetext>gionnico, you&apos;re int he wrong bug. You talk about Accept-Language header, which is not subject of this bug.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4817593</commentid>
              <attachid>460173</attachid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-07-25 15:00:03 -0700</bug_when>
            <thetext>Created attachment 460173
Patch 3: Change navigator.language to use Accept-Language

After bug 572656 has fixed the UA string by removing the language part, this also fixes navigator.language. The property is retained (JS has no access to the Accept-Language header, to my knowledge), and retains the formal format, but uses the value from Accept-Language (which the user can freely configure in the pref window) instead of the UI language.

Asking biesi to review.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4817595</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-07-25 15:00:55 -0700</bug_when>
            <thetext>http://browserspy.dk/language.php
http://browserspy.dk/showprop.php</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4817605</commentid>
              <attachid>460173</attachid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-07-25 15:15:57 -0700</bug_when>
            <thetext>Comment on attachment 460173
Patch 3: Change navigator.language to use Accept-Language

Actually, bz reviewed bug 572656</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4823687</commentid>
              <attachid>460173</attachid>
            <who name="Axel Hecht [:Pike]">l10n</who>
            <bug_when>2010-07-28 06:43:27 -0700</bug_when>
            <thetext>Comment on attachment 460173
Patch 3: Change navigator.language to use Accept-Language

Would this break on 

en-gb;q=0.8, en;q=0.7

Didn&apos;t dig into whitespace handling.

Not that I&apos;m in sync with the rationale of these bugs, for the record.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4824205</commentid>
              <attachid>460173</attachid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2010-07-28 10:20:04 -0700</bug_when>
            <thetext>Comment on attachment 460173
Patch 3: Change navigator.language to use Accept-Language

Yeah, Axel&apos;s right.  This needs to handle q values.  And things like spaces around the &apos;,&apos; chars, etc.  Probably best to just use nsCharSeparatedTokenizer and then deal with the q value thing.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4825360</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-07-28 16:31:37 -0700</bug_when>
            <thetext>&gt; This needs to handle q values.

You mean I need to look for &quot;;&quot; in addition to &quot;,&quot;? Yes, sure, sorry for the oversight. Will attach new patch.

(I do not care to support *manually* hacked prefs that have a lesser preferred language as the first entry, if that&apos;s what you meant.)

&gt; nsCharSeparatedTokenizer

Will take a look, how big the code will be with that and with FindInReadable().</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4830899</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-07-31 05:11:33 -0700</bug_when>
            <thetext>Actually, the pref &quot;intl.accept_languages&quot; does not contains ;q= . The UI doesn&apos;t write q= in there, and if a user does, it&apos;s ignored and not sent in HTTP header, but the HTTP re-calculates the q=.

Also, while nsCharSeparatedTokenizer is useful here, it seems to skip the first token. Either I don&apos;t know how to use its API, or the implementation is broken.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4830901</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-07-31 05:13:39 -0700</bug_when>
            <thetext>&gt; nsCharSeparatedTokenizer ... seems to skip the first token

Nevermind, I was stupid.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4830904</commentid>
              <attachid>461774</attachid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-07-31 05:16:55 -0700</bug_when>
            <thetext>Created attachment 461774
Patch 4: Change navigator.language to use Accept-Language</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4831350</commentid>
            <who name="Reşat SABIQ (Reshat)">haqer</who>
            <bug_when>2010-07-31 16:53:01 -0700</bug_when>
            <thetext>I feel kinda bad for apparently slowing the approval of the patch down a bit, but I&apos;d like to draw attention to a few things:
1. 3-char lang codes (need to be handled).
Based on url mentioned in another bug, there are 2 existing examples of them: http://mxr.mozilla.org/l10n-mozilla1.9.2/search?string=intl.accept_languages&amp;find=global/intl.properties
(The same could be asked for 3-char country codes, but there are no examples of those, and they might not be probable (haven&apos;t looked into it).)
2. Default for messy accept-lang pref: should this be en-US rather than en for consistency w/ default en-US locale? I tend to think &quot;yes&quot;.
3. Update urls: %LOCALE% in chrome prefs is resolved by navigator.language as of now, AFAIK. I&apos;m 99.9% sure that the current UI language shouldn&apos;t be changed by an update based on preferred content language. If that&apos;s the case, then there needs to be an additional patch (in this bug or another), that accounts for necessary additional logic that is now required to substitute %LOCALE% in chrome app.update.url pref w/ UI lang, rather than navigator.language value.
(Plus, I&apos;m not 100% sure that an update in language B for an installation whose UI is in language A works smoothly every time: i&apos;m not saying it doesn&apos;t either, but it would probably be something worth verifying if the updates were going to be based on the current preferred language.)
4. empty pref special case (messed up, or user wishes to not specify accept-language in HTTP): 
4.1. should this result in navigator.language being empty, for consistency with HTTP Accept-Language? I tend to think &quot;yes&quot;.
4.2. i&apos;m also throwing this note in based on Java StringTokenizer&apos;s throwing an exception if nextElement() is called w/o hasMoreTokens() having returned true prior to that. Quick look at the source appears to suggest that nsCharSeparatedTokenizer works differently and (at least currently) returns an empty string instead. Forgive me for not having time to verify that, but i hope those who are already building FX 4 can take a quick look to make sure current empty pref handling wouldn&apos;t crash the app, for instance.

Accounting for all of this should easy, except maybe item 3., which necessitates a patch for another class.

P.S. For the record, I can&apos;t wait for this fix.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4831361</commentid>
            <who name="Reşat SABIQ (Reshat)">haqer</who>
            <bug_when>2010-07-31 17:20:38 -0700</bug_when>
            <thetext>Just noticed this as well:
5. Currently (FX &lt;=3.6.x, country code in navigator.language is upper-case, whereas accept-language pref&apos;s country code is lower-case. 
Should navigator.language value be:
5.a. backwards compatible
(this doesn&apos;t seem feasible, because some locales have country code in accept-lang, and no country code in navigator.language; either that&apos;s something sites will need to adjust to, or there&apos;d need to be a map of first-accept-lang=ui-lang pairs based on FX 3.6.x used for 100% backwards-compatibility)
or
5.b. upper-case
or
5.c. lower-case

IMHO, ideally 5.a., but 5.b. would be easier to implement and more consistent, at the expense of additional country code for some locales and/or case change for some locales (sorry, i haven&apos;t analyzed other locales for letter-case). If sites can adjust to UA format change for ALL locales, they can also adjust to navigator.language values changing slightly for SOME locales (but it might  warrant a list of before-after values for affected locales).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4831373</commentid>
            <who name="Reşat SABIQ (Reshat)">haqer</who>
            <bug_when>2010-07-31 17:45:17 -0700</bug_when>
            <thetext>(In reply to comment #89)
&gt; 5.b. upper-case
&gt; or
&gt; 5.c. lower-case
Clarification, I meant:
5.b. using upper-case country code
or
5.c. using lower-case country code</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4831382</commentid>
            <who name="[not reading bugmail]">mozbugz</who>
            <bug_when>2010-07-31 17:56:11 -0700</bug_when>
            <thetext>That can be addressed in another bug if it needs to be changed.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4831387</commentid>
            <who name="Reşat SABIQ (Reshat)">haqer</who>
            <bug_when>2010-07-31 18:03:51 -0700</bug_when>
            <thetext>(In reply to comment #88)
&gt; 3. Update urls: %LOCALE% in chrome prefs is resolved by navigator.language as
&gt; of now, AFAIK. I&apos;m 99.9% sure that the current UI language shouldn&apos;t be changed
&gt; by an update based on preferred content language. If that&apos;s the case, then
&gt; there needs to be an additional patch (in this bug or another), that accounts
&gt; for necessary additional logic that is now required to substitute %LOCALE% in
&gt; chrome app.update.url pref w/ UI lang, rather than navigator.language value.

Please ignore item 3.: a couple of my memory wires got crossed, and in fact no changes need to be made to app.update.url handling, because %LOCALE% there appears to be replaced based on the locale in update.locale file in app directory, and NOT based on navigator.language value. Unlike elsewhere, I acknowledge having wastefully posted 10 lines in c88 for item 3, and 6 lines here to clear that up.

Also, to clarify, an obvious example for item 5 that i had in mind but didn&apos;t mention is en-US vs. en-us.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4831491</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-07-31 22:36:59 -0700</bug_when>
            <thetext>Thanks for the comments, Reshat.
1. I was assuming only 2-char ISO lang codes were valid, but the HTTP spec explicitly gives examples with other codes, so I&apos;ll be more lax. I&apos;ll still check that the user didn&apos;t use the wrong Windows syntax of en_GB instead of the correct Internet syntax en-GB.

3. If we broke %LOCALE% in the updater, that&apos;d be really bad. I&apos;ll double-check that this is not the case, as well as whether there are other stupid uses of navigator.language.

5. Yes, I was already thinking of casing, thanks for pointing out that the current navigator.language is en-US. I&apos;ll maybe just fix the casing, but only in cases of a 5-letter code (lowercase 2-letter, dash, uppercase 2-letter).
Whether this is important also depends on other browsers. If they use different casing, likely sites will be tolerant (using .toLowerCase()).

Specs:
&lt;http://asg.web.cmu.edu/rfc/rfc2616.html#sec-14.4&gt;
&lt;https://developer.mozilla.org/en/Navigator.language&gt;</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4831492</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-07-31 22:37:54 -0700</bug_when>
            <thetext>4. The fallback could be either &quot;en&quot; or &quot;&quot;. I chose the former, but it&apos;s trivial to do the latter. Up to reviewer. *Informed* opinions welcome.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4831496</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-07-31 22:53:33 -0700</bug_when>
            <thetext>Responding to self, I think it would indeed be better to use &quot;&quot; as fallback, esp. in light of &quot;i-cherokee&quot; as first accept-lang, and of sites in other countries which want to use the local language as fallback.

When using &quot;&quot; as fallback, we leave the fallback to the site. When using &quot;en&quot;, the site cannot differentiate whether it&apos;s a fallback or the user really meant English. So, I&apos;ll use &quot;&quot; as fallback.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4831745</commentid>
            <who name="Axel Hecht [:Pike]">l10n</who>
            <bug_when>2010-08-01 06:41:30 -0700</bug_when>
            <thetext>There&apos;s a good chance that we&apos;ll have script tags in language codes at some point, and maybe even x- stuff.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4831968</commentid>
            <who name="Reşat SABIQ (Reshat)">haqer</who>
            <bug_when>2010-08-01 11:27:02 -0700</bug_when>
            <thetext>(In reply to comment #88)
&gt; 2. Default for messy accept-lang pref: should this be en-US rather than en for
&gt; consistency w/ default en-US locale? I tend to think &quot;yes&quot;.
...
&gt; 4. empty pref special case (messed up, or user wishes to not specify
&gt; accept-language in HTTP): 
&gt; 4.1. should this result in navigator.language being empty, for consistency with
&gt; HTTP Accept-Language? I tend to think &quot;yes&quot;.

IMHO, &quot;&quot; navigator.language for &quot;&quot; accept-language is good.
With regards to &quot;&quot; or afore-mentioned &quot;en-US&quot; navigator.language for messy/unrecognized accept-language, i&apos;m not so sure, because accept-language header is not &quot;&quot; or &quot;en-US&quot; in this case as of now. I tend to think navigator.language should at least match the language in accept-language (allowing the (remote) possibility of not having a country code as it is the case in 3.6.x). So for &quot;messed-up&quot; intl.accept_languages, i&apos;d either:
2.1. provide &quot;messed-UP&quot; as navigator.language, and keep HTTP accept-language as is (i.e., &quot;messed-up&quot;)
or
2.2. provide &quot;&quot; for both navigator.language and HTTP accept-language
2.3. provide &quot;&quot; for both navigator.language, and log a bug to do the same for HTTP accept-language

Taking into account Axel&apos;s comment as well, 2.1 might be the best way to go in the context of this bug. If 2.2, or 2.3 were found desirable, IMHO we need a separate bug for that (especially, because exceptional manually set values are the subject of discussion here).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4834520</commentid>
              <attachid>462244</attachid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-08-02 16:24:40 -0700</bug_when>
            <thetext>Created attachment 462244
Patch 5: Change navigator.language to use Accept-Language

- removed the check, so now also allowing i-cherokee
- return &quot;&quot;, if the accept-lang pref is empty (or otherwise invalid)
- replace _ with - (only first one for now)
- return uppercase for en-US</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4834539</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-08-02 16:31:31 -0700</bug_when>
            <thetext>Searching for &quot;navigator.language&quot; in source returns (only):
./extensions/reporter/resources/content/reporter/reportWizard.js:
  const gParamLanguage = window.navigator.language;
./testing/extensions/community/chrome/content/litmus.js:
  this.locale = navigator.language;
./testing/sisyphus/tests/mozilla.org/download-page/userhook.js:
  data[&apos;005 navigator.language&apos;]      = navigator.language;
I should fix these, too, but I will probably use bug 580032 as tracker for that.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4835057</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2010-08-02 22:07:50 -0700</bug_when>
            <thetext>Hmm.  Why do we want to do the bits about converting &apos;_&apos; to &apos;-&apos; (how would the &apos;_&apos; get there?) and uppercasing stuff?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4835131</commentid>
            <who name="Reşat SABIQ (Reshat)">haqer</who>
            <bug_when>2010-08-02 23:33:13 -0700</bug_when>
            <thetext>IMHO, these points are worth another look:
4.    IMHO, no assert is needed for empty accept-language, since RFC says:
&quot;If no Accept-Language header is present in the request, the server
    SHOULD assume that all languages are equally acceptable.&quot;
Only affects debug builds, but still...
5. country code upper-casing:
The following cases should be handled as well:
abc-XY
abc-XY-dialect
https://wiki.mozilla.org/L10n:Locale_Codes
https://wiki.mozilla.org/L10n:Teams
One way of pseudocoding would be: if first &apos;-&apos; (at index 2 or 3), if any, is followed by no more than 2 alpha chars in a row, uppercase those 2 chars.
That said, the whole item goes away if we are going to make country code in navigator.language lower-case, though that wouldn&apos;t be backwards-compatible.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4835137</commentid>
            <who name="Axel Hecht [:Pike]">l10n</who>
            <bug_when>2010-08-02 23:41:23 -0700</bug_when>
            <thetext>Please, don&apos;t use our wiki as a standard. The real document is http://tools.ietf.org/html/bcp47, which refers to http://tools.ietf.org/html/rfc4647 for the matching stuff.

Here, http://tools.ietf.org/html/bcp47#section-2.1.1 rules:

 At all times, language tags and their subtags, including private use
   and extensions, are to be treated as case insensitive: there exist
   conventions for the capitalization of some of the subtags, but these
   MUST NOT be taken to carry meaning.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4835148</commentid>
            <who name="Reşat SABIQ (Reshat)">haqer</who>
            <bug_when>2010-08-02 23:50:41 -0700</bug_when>
            <thetext>Thanks, Axel. Well, i assumed we wanted consistency. If we are fine w/ en-US on one hand, and ast-es on the other, that&apos;s a different matter of course. If that is considered and decided to be OK, then that&apos;s the way it&apos;s gonna be. Still worth drawing attention to it, IMHO.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4835353</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-08-03 03:31:49 -0700</bug_when>
            <thetext>&gt; Hmm.  Why do we want to do the bits about converting &apos;_&apos; to &apos;-&apos;
&gt; (how would the &apos;_&apos; get there?) and uppercasing stuff?

1. &quot;-&quot; vs. &quot;_&quot;. The RFCs and ISO say that the separator is &quot;-&quot;, e.g. &quot;en-US&quot;. However, POSIX uses LANG=&quot;de_DE&quot; in env vars, and Windows also uses the &quot;en_US&quot; notation. The latter is therefore common, and I&apos;ve seen many people use &quot;en_US&quot; although the spec/protocol explicitly said &quot;en-US&quot;, so it&apos;s a common error. How would it get there? By somebody editing the pref manually in &lt;about:config&gt;. The normal pref dialog does not allow to specify arbitrary tags. To avoid confusion and problems on the site&apos;s end, I want to prevent this, even if it&apos;s unlikely. I tried to make sure it&apos;s not a perf problem (just 2 int comparisons) nor a lot of code (just 2 lines).

2. uppercase: our pref contains e.g. &quot;de-de,en-us,en&quot;, i.e. lower case. However, our locale codes are &quot;de-DE&quot;, i.e. country part in upper case. BCP47 (mentioned by Axel above) also uses this notation in the examples. It&apos;s the convention. We used to return that as well, e.g. &quot;en-US&quot;. If a site doesn&apos;t use navigator.language.toLowerCase(), the comparison will not fail. If our own code (comment 99) is any indication, this error is common, so if we don&apos;t adjust the casing to the convention, we may break stuff.

Now, my parsing here is primitive. It works fine for the 2-letter-dash-2-letter codes that we use for locales, and IIRC that&apos;s all that the pref dialog allows currently, so it should work be sufficient currently. Only &quot;failure&quot; is indeed &quot;ast-es&quot; and similar codes with 3 letters as first part. BCP47 also gives examples: zh-Hant, de-Latn-DE, de-DE-x-goethe. For these, my code would return zh-HANT, de-LATN-DE, de-DE-X-GOETHE, which is not the convetional casing. If you think I should improve this, I would use the nsCharSeparator here as well, and then uppercase every 2-letter part, apart from the first part.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4835849</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2010-08-03 09:14:44 -0700</bug_when>
            <thetext>I guess my question is how far we&apos;re willing to go in terms of trying to canonicalize random input.  I think the only two sources of this pref are:

1)  What our prefs dialog generates.
2)  What our localizers set up as the default for their locale.
3)  about:config.

I claim we don&apos;t care about #3, can impose any reasonable rules we want on #2, and fully control #1.  So if it simplifies our code, we should just assume whatever we want and impose corresponding rules on #2.  Axel, thoughts?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4835911</commentid>
            <who name="Axel Hecht [:Pike]">l10n</who>
            <bug_when>2010-08-03 09:47:50 -0700</bug_when>
            <thetext>rightly so</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4836156</commentid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2010-08-03 11:15:17 -0700</bug_when>
            <thetext>s/two sources/sources/, clearly.  ;)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4837449</commentid>
            <who name="Reşat SABIQ (Reshat)">haqer</who>
            <bug_when>2010-08-03 18:50:27 -0700</bug_when>
            <thetext>Concise:
IMHO, Ben&apos;s suggestion of uppercasing the first 2-letter part, after the first part, if any, might be ideal (though a bit harder to implement), but restricting such uppercasing to just the assumption that this 2-letter part is the second subtag (following 2- or 3-char first subtag), as i understand Boris and Axel appear to be inclined to do, will probably be sufficient for a long time (and might save x ms on each access?). If these are the 2 operational choices to proceed with, then choosing between them is almost a coin-toss situation IMHO.

Verbose additional info:
One could also say that we have 1 model, which is the intl.accept_languages chrome pref, whose value is presented by several views (in MVC pattern lingo).

Paraphrasing Boris, the input can come from:
i. pre-shipped intl.accept_languages pref values based on intl.properties (1) and 2))
ii. random about:config entries by the user (3))

FYI, if i enter &quot;messed1-up,messed2-up&quot; as random input, both prefs dialog and about:config reflect the same value (prefs dialog just shows them as codes in [] without displaying a recognized lang name in front of each value, although some pre-shipped values also don&apos;t have recognized lang names).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4837538</commentid>
              <attachid>462638</attachid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-08-03 19:52:14 -0700</bug_when>
            <thetext>Created attachment 462638
Patch 6: Change navigator.language to use Accept-Language, using tokerizer for uppercasing

Here&apos;s another patch with better uppercasing code. It uses the tokenizer for this as well, and uppercases all 2-letter parts, apart from the first one.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4837542</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-08-03 19:57:18 -0700</bug_when>
            <thetext>&gt; I claim we don&apos;t care about [&lt;about:config&gt;], can impose any reasonable rules
&gt; we want on [our prefs UI], and fully control [the defaults of the
&gt; localized builds].  So if it simplifies our code, we should just assume
&gt; whatever we want and impose corresponding rules on [the prefs UI].

OK, great, works for me.

Only catch is: the intl.accept_languages pref may have existing values. So, even if we change the prefs UI, the old values are still there. And unfortunately, they are in &quot;de-de&quot; notation. So, unless you want to migrate, we have to work with that.

I attached another patch with better lang part parsing. Make your pick. I&apos;d take patch 6.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4837601</commentid>
              <attachid>462638</attachid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2010-08-03 20:49:30 -0700</bug_when>
            <thetext>Comment on attachment 462638
Patch 6: Change navigator.language to use Accept-Language, using tokerizer for uppercasing

I still think the uppercasing is silly, but r=me if you s/PRBool/bool/ for that thing you assign bools into.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4837612</commentid>
              <attachid>462638</attachid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-08-03 20:56:27 -0700</bug_when>
            <thetext>Comment on attachment 462638
Patch 6: Change navigator.language to use Accept-Language, using tokerizer for uppercasing

what happens with sr?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4837619</commentid>
              <attachid>462663</attachid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-08-03 21:03:01 -0700</bug_when>
            <thetext>Created attachment 462663
Patch 7: Change navigator.language to use Accept-Language

Playing Boules with bool and PRBool.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4837679</commentid>
              <attachid>462663</attachid>
            <who name="Boris Zbarsky [:bzbarsky]">bzbarsky</who>
            <bug_when>2010-08-03 21:51:22 -0700</bug_when>
            <thetext>Comment on attachment 462663
Patch 7: Change navigator.language to use Accept-Language

Let&apos;s have jst do that.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4842897</commentid>
              <attachid>462663</attachid>
            <who name="Johnny Stenback  (:jst)">jstenback+bmo</who>
            <bug_when>2010-08-05 15:19:37 -0700</bug_when>
            <thetext>Comment on attachment 462663
Patch 7: Change navigator.language to use Accept-Language

+    while (localeTokenizer.hasMoreTokens())
+    {
+      const nsSubstring &amp;code = localeTokenizer.nextToken();
+      if (code.Length() == 2 &amp;&amp; !first)
+      {
+        nsAutoString upper(code);
+        ::ToUpperCase(upper);
+        aLanguage.Replace(pos, code.Length(), upper);
+      }
+      pos += code.Length() + 1; // 1 is the separator
+      if (first)
+        first = false;

Might as well loose the if check there, the result will be the same w/o it and with less branching and less code.

sr=jst</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4909787</commentid>
            <who name="Robert Kaiser">kairo</who>
            <bug_when>2010-09-02 05:52:31 -0700</bug_when>
            <thetext>That bug basically means decreased usability for people on our website, as we can&apos;t offer the correct locale download matching the browser version they are using right now any more. Thanks for breaking us.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4909801</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-09-02 05:57:41 -0700</bug_when>
            <thetext>KaiRo, wrong. Just use Accept-Language. That&apos;s the standard and what you should have used anyway.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4909812</commentid>
            <who name="Robert Kaiser">kairo</who>
            <bug_when>2010-09-02 06:03:14 -0700</bug_when>
            <thetext>(In reply to comment #117)
&gt; KaiRo, wrong. Just use Accept-Language. That&apos;s the standard and what you should
&gt; have used anyway.

Completely wrong. I don&apos;t give a damn about the preferred language of *web sites* for that user (and that&apos;s what Accept-Language is), I only care about the *UI language* he is using. If I can&apos;t match that, I probably should even think about trying about giving the user any specific preferred download but send him through a hurdle run of clicks to select it himself. Very user friendly, but thank you for giving me no other choice.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4909860</commentid>
            <who name="Daniel Glazman (:glazou) (not active in Mozilla any more)">daniel</who>
            <bug_when>2010-09-02 06:28:08 -0700</bug_when>
            <thetext>(In reply to comment #118)

&gt; Completely wrong. I don&apos;t give a damn about the preferred language of *web
&gt; sites* for that user (and that&apos;s what Accept-Language is), I only care about
&gt; the *UI language* he is using. If I can&apos;t match that, I probably should even
&gt; think about trying about giving the user any specific preferred download but
&gt; send him through a hurdle run of clicks to select it himself. Very user
&gt; friendly, but thank you for giving me no other choice.

Guys, you are _both_ right. Ben want to follow an IETF recommendation on
a privacy issue and KaiRo wants to match the UI language because that&apos;s the
only way he can serve correctly someone like me, ie someone browsing the web
in french when it&apos;s available but using only en-US software.

That said, KaiRo, I think the vast majority of internet users use a browser
UI locale matching the accept-language&apos;s topmost language, and only a small
minority of geeks have a different configuration.

Let me ask a naive question here: if I download a given localized version of
Firefox, is the Accept-Language set by default to match that language? If yes,
then at least KaiRo can rely on that for, again, the vast majority of users.
The minority of übergeeks will be annoyed a bit but hey we&apos;re always annoyed
by everything aren&apos;t we?

FWIW, I still think the war-on-privacy-issues goes too far here. Anyway...</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4909884</commentid>
            <who name="Dão Gottwald [:dao]">dao+bmo</who>
            <bug_when>2010-09-02 06:35:03 -0700</bug_when>
            <thetext>(In reply to comment #119)
&gt; Let me ask a naive question here: if I download a given localized version of
&gt; Firefox, is the Accept-Language set by default to match that language?

Yes.

FWIW, this isn&apos;t just fixing a privacy issue. It&apos;s also about making navigator.language more useful when it&apos;s used on the client side very much like Accept-Language would be used on the server side.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4909887</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-09-02 06:36:01 -0700</bug_when>
            <thetext>&gt; if I download a given localized version of
&gt; Firefox, is the Accept-Language set by default to match that language?

For the big locales, yes. For some small locales, there may be differences.

Yes, the download button detecting system and language is only for a good default, to make it easier for the majority of users.

I think a link/page &quot;Other languages and systems&quot;, like Firefox has, should solve this for the most part.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4909893</commentid>
            <who name="Robert Kaiser">kairo</who>
            <bug_when>2010-09-02 06:40:36 -0700</bug_when>
            <thetext>(In reply to comment #119)
&gt; Let me ask a naive question here: if I download a given localized version of
&gt; Firefox, is the Accept-Language set by default to match that language?

Fully depends on the localizers, but usually, the UA language is *among* the value in Accept-Language, even if some carefully chosen variant of it might be the primary language listed there. Also, the user might change the Accept-Language at will, making it way more fingerprintable than the UI locale, and e.g. possible making &quot;ger-saxon&quot; their primary Accept-Language header when using a German (de) build, i.e. having an Accept-Language header including all of ger-saxon, de-DE, de, and possibly even en-US and/or en.

&gt; The minority of übergeeks will be annoyed a bit but hey we&apos;re always annoyed
&gt; by everything aren&apos;t we?

At least by all the paranoia going on with some things like the so-called &quot;privacy&quot; or &quot;fingerprinting&quot; threats introduced by UA strings.

And I&apos;m very sensible about privacy matters usually, but there are clearly things where we are overdoing it while at the same time not working on stuff that ought to be much higher priority but may have higher impact overall, like the exposure of the plugin or installed font lists to the web, which are way more fingerprintable than ridiculous things like the UI languages or using a nightly.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4909896</commentid>
            <who name="Axel Hecht [:Pike]">l10n</who>
            <bug_when>2010-09-02 06:42:14 -0700</bug_when>
            <thetext>In most cases, the first accept locale differs from the chosen locale. Maybe just in that it&apos;s de-de instead of de, or upper vs lower case things that folks reading locale-code specs should already deal with, but it&apos;s not exactly the same thing.

http://mxr.mozilla.org/l10n-mozilla1.9.2/search?string=intl.accept_languages&amp;find=global/intl.properties for data.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4909897</commentid>
            <who name="Robert Kaiser">kairo</who>
            <bug_when>2010-09-02 06:42:51 -0700</bug_when>
            <thetext>In any case, as I can&apos;t be bothered to write a heuristic parser for that new stupid property, I&apos;ll just offer en-US builds when that locale doesn&apos;t give an exact match with one of the locales we can offer, everyone else needs to use the the &quot;other platforms and languages link&quot;. Who needs usability anyhow.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4909941</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-09-02 07:11:33 -0700</bug_when>
            <thetext>&gt; usually, the UA language is *among* the value in Accept-Language

So, it&apos;s solvable. You can detect which UI locale the build is, and offer the right download, in most cases (98%? of users) at least. The others can fall back to &quot;other languages&quot;.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4909954</commentid>
            <who name="Robert Kaiser">kairo</who>
            <bug_when>2010-09-02 07:20:28 -0700</bug_when>
            <thetext>(In reply to comment #125)
&gt; &gt; usually, the UA language is *among* the value in Accept-Language
&gt; 
&gt; So, it&apos;s solvable. You can detect which UI locale the build is, and offer the
&gt; right download, in most cases (98%? of users) at least.

Only if I build a parser for the Accept-Languages list, which is quite some work for a simple download box...</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4909971</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2010-09-02 07:31:12 -0700</bug_when>
            <thetext>fairly simple:
var localeMapping = {
  &quot;de-de&quot; : &quot;de&quot;,
  &quot;fo-ba&quot; : &quot;ba&quot;,
  ...
}
var useLocale = &quot;unknown&quot;;
for each (var entry in acceptLang.split(&quot;,&quot;)) { // separate langs
  // strip q and spaces
  let lang = entry.replace(/;.*/, &quot;&quot;).replace(&quot; &quot;, &quot;&quot;).toLowerCase();
  if (localeMapping[lang]) {
    useLocale = localeMapping[lang];
    break;
  }
}
if (useLocale == &quot;unknown&quot;) {
  showOtherLangsInBiggerFont(); // or directly on page
  useLocale = &quot;en-US&quot;;
}
var downloadURL = mirror + &quot;seamonkey-&quot; + currentVersion + &quot;-&quot; + platformSpec + &quot;-&quot; + useLocale + platformExtension;

That&apos;s 12 lines of JS code, plus the mapping (which is fairly static). It won&apos;t be much more in PHP or whatever you use on the website, if you want to do it there instead.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4910002</commentid>
            <who name="Pascal Chevrel (relman team) -&gt; :pascalc|PTO until Sept 2">pascalc</who>
            <bug_when>2010-09-02 07:47:36 -0700</bug_when>
            <thetext>kairo, for PHP you can use my locale detection class:
http://granary.stage.mozilla.com/libs/l10n-demos/localeDetectionDemo.php</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4910128</commentid>
            <who name="Axel Hecht [:Pike]">l10n</who>
            <bug_when>2010-09-02 08:37:39 -0700</bug_when>
            <thetext>FTR, both ignore script tags, which we&apos;ll apparently not get for 4.0, but that are totally fine to use (not that we have UI for those).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4913769</commentid>
            <who name="dwitte@gmail.com">dwitte</who>
            <bug_when>2010-09-03 13:27:18 -0700</bug_when>
            <thetext>Should we get a followup bug for removing the &apos;general.useragent.locale&apos; pref from all.js and nuking the corresponding code/API in nsHttpHandler?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4913935</commentid>
            <who name="Axel Hecht [:Pike]">l10n</who>
            <bug_when>2010-09-03 14:44:38 -0700</bug_when>
            <thetext>We don&apos;t have to have some pref to select the chrome locale, and I don&apos;t see a good argument for dropping this one.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4913968</commentid>
            <who name="dwitte@gmail.com">dwitte</who>
            <bug_when>2010-09-03 14:59:54 -0700</bug_when>
            <thetext>Sorry, I don&apos;t follow -- you&apos;re saying it&apos;s unnecessary but you want to keep it? What useful information does it provide?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4914691</commentid>
            <who name="Dão Gottwald [:dao]">dao+bmo</who>
            <bug_when>2010-09-04 01:11:17 -0700</bug_when>
            <thetext>(In reply to comment #130)
&gt; Should we get a followup bug for [...] nuking the corresponding code/API in nsHttpHandler?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4915155</commentid>
            <who name="Reşat SABIQ (Reshat)">haqer</who>
            <bug_when>2010-09-04 12:32:20 -0700</bug_when>
            <thetext>(In reply to comment #116)
&gt; That bug basically means decreased usability for people on our website, as we
&gt; can&apos;t offer the correct locale download matching the browser version they are
&gt; using right now any more. 

It would also be more convenient if people had their name, and their preferred language written on their foreheads. Yet, somehow, i don&apos;t think i would want to be one of those people, and i think the majority of people wouldn&apos;t be either. It&apos;s not all about convenience and usability. There are trade-offs, and cost-benefit analyses involved.

(In reply to comment #130)
&gt; Should we get a followup bug for removing the &apos;general.useragent.locale&apos; pref
&gt; from all.js and nuking the corresponding code/API in nsHttpHandler?

I think the pref might be used by some add-ons that provide UI for switching between more than 2 langpacks. Not sure if this is still workable in FF 4... That said, http should no longer have anything to do w/ this pref. If it stays, it should only be for manual or addon-based UI locale manipulation.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4915936</commentid>
            <who name="Daniel C">djcater+bugzilla</who>
            <bug_when>2010-09-05 09:03:43 -0700</bug_when>
            <thetext>I don&apos;t understand comment 131 or comment 133.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4915939</commentid>
            <who name="Axel Hecht [:Pike]">l10n</who>
            <bug_when>2010-09-05 09:06:09 -0700</bug_when>
            <thetext>(In reply to comment #131)
&gt; We don&apos;t have to have some pref to select the chrome locale, and I don&apos;t see a
&gt; good argument for dropping this one.

Can&apos;t type.

We do have to have some pref to select the chrome locale, and I don&apos;t see a good argument for dropping g.u.locale.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>4916129</commentid>
            <who name="dwitte@gmail.com">dwitte</who>
            <bug_when>2010-09-05 13:01:09 -0700</bug_when>
            <thetext>It&apos;s now misnamed, that&apos;s all. We can leave the name as-is but we should probably remove the API for reading it on nsHttpHandler, because that doesn&apos;t belong there anymore.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5046142</commentid>
            <who name="Benjamin Smedberg">benjamin</who>
            <bug_when>2010-10-29 14:06:42 -0700</bug_when>
            <thetext>Please wait until after we branch.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5375477</commentid>
            <who name="(no longer active)">ehsan.akhgari</who>
            <bug_when>2011-03-28 14:03:24 -0700</bug_when>
            <thetext>I do not feel comfortable taking this on cedar.  Please land this on mozilla-central when it&apos;s ready</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5379960</commentid>
            <who name="Dão Gottwald [:dao]">dao+bmo</who>
            <bug_when>2011-03-30 04:37:30 -0700</bug_when>
            <thetext>http://hg.mozilla.org/mozilla-central/rev/ead683169ef2</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5379962</commentid>
            <who name="Dão Gottwald [:dao]">dao+bmo</who>
            <bug_when>2011-03-30 04:38:44 -0700</bug_when>
            <thetext>*** Bug 580032 has been marked as a duplicate of this bug. ***</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5380002</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2011-03-30 05:06:47 -0700</bug_when>
            <thetext>Thanks, Dao, for commiting!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5380023</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2011-03-30 05:26:58 -0700</bug_when>
            <thetext>(hihi. Almost 10 years after my first patch here. Do I get a prize? :) )</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5380657</commentid>
            <who name="">shawn.sumin</who>
            <bug_when>2011-03-30 10:05:14 -0700</bug_when>
            <thetext>@Ben: You get a Cookie (Brand name: Privacy Cookies). Congratz.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5380713</commentid>
            <who name="Ben Bucksch (:BenB)">ben.bucksch</who>
            <bug_when>2011-03-30 10:19:10 -0700</bug_when>
            <thetext>nomnomnom</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5423113</commentid>
            <who name="Jorge Villalobos [:jorgev] (he/him)">jorgev</who>
            <bug_when>2011-04-20 18:11:15 -0700</bug_when>
            <thetext>sheppy, I think this might be important for add-on developers and worthwhile documenting. Thanks!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5424109</commentid>
            <who name="Eric Shepherd [:sheppy]">the.sheppy</who>
            <bug_when>2011-04-21 08:44:30 -0700</bug_when>
            <thetext>Documentation updated:

https://developer.mozilla.org/en/DOM/window.navigator.language

Also mentioned on Firefox 5 for developers.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5463432</commentid>
            <who name="Asa Dotzler [:asa]">asa</who>
            <bug_when>2011-05-11 11:50:29 -0700</bug_when>
            <thetext>not interested for 5.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5463439</commentid>
            <who name="Eric Shepherd [:sheppy]">the.sheppy</who>
            <bug_when>2011-05-11 11:51:46 -0700</bug_when>
            <thetext>I thought this landed already on Aurora. Did it not?</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>5463473</commentid>
            <who name="Benjamin Smedberg">benjamin</who>
            <bug_when>2011-05-11 11:57:37 -0700</bug_when>
            <thetext>Looks like it did, but release drivers still have no reason to track it in particular at this point.</thetext>
          </long_desc>

          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43864</attachid>
            <date>2001-07-27 19:36:28 -0700</date>
            <delta_ts>2010-07-25 15:02:54 -0700</delta_ts>
            <desc>Proposed Fix for UA-string. Also contains Win fix for bug 57555.</desc>
            <filename>55366-1.diff</filename>
            <type>text/plain</type>
            <size>4401</size>
            <attacher>ben.bucksch</attacher>
            
              <data encoding="base64">PyA1NTM2Ni0xLmRpZmYKSW5kZXg6IG5zSHR0cEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnNyb290L21vemlsbGEvbmV0d2Vyay9wcm90b2NvbC9odHRwL3NyYy9uc0h0dHBIYW5k
bGVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZmIC11IC13IC1yMS4xNiBuc0h0
dHBIYW5kbGVyLmNwcAotLS0gbnNIdHRwSGFuZGxlci5jcHAJMjAwMS8wNi8yMCAwMToyMTo0Mgkx
LjE2CisrKyBuc0h0dHBIYW5kbGVyLmNwcAkyMDAxLzA3LzI4IDAyOjIyOjIxCkBAIC0xMjgsOCAr
MTI4LDYgQEAKICAgICAgICAgICAgICAgICBuc0h0dHBIYW5kbGVyOjpQcmVmc0NhbGxiYWNrLCAo
dm9pZCopdGhpcyk7CiAgICAgICAgIG1QcmVmcy0+VW5yZWdpc3RlckNhbGxiYWNrKElOVExfQUND
RVBUX0NIQVJTRVQsIAogICAgICAgICAgICAgICAgIG5zSHR0cEhhbmRsZXI6OlByZWZzQ2FsbGJh
Y2ssICh2b2lkKil0aGlzKTsKLSAgICAgICAgbVByZWZzLT5VbnJlZ2lzdGVyQ2FsbGJhY2soVUFf
UFJFRl9QUkVGSVggImxvY2FsZSIsIAotICAgICAgICAgICAgICAgIG5zSHR0cEhhbmRsZXI6OlBy
ZWZzQ2FsbGJhY2ssICh2b2lkKil0aGlzKTsKICAgICAgICAgbVByZWZzLT5VbnJlZ2lzdGVyQ2Fs
bGJhY2soVUFfUFJFRl9QUkVGSVggIm1pc2MiLAogICAgICAgICAgICAgICAgIG5zSHR0cEhhbmRs
ZXI6OlByZWZzQ2FsbGJhY2ssICh2b2lkICopdGhpcyk7CiAgICAgfQpAQCAtMjEzLDggKzIxMSw2
IEBACiAgICAgICAgICAgICBuc0h0dHBIYW5kbGVyOjpQcmVmc0NhbGxiYWNrLCAodm9pZCopdGhp
cyk7CiAgICAgbVByZWZzLT5SZWdpc3RlckNhbGxiYWNrKElOVExfQUNDRVBUX0NIQVJTRVQsIAog
ICAgICAgICAgICAgbnNIdHRwSGFuZGxlcjo6UHJlZnNDYWxsYmFjaywgKHZvaWQqKXRoaXMpOwot
ICAgIG1QcmVmcy0+UmVnaXN0ZXJDYWxsYmFjayhVQV9QUkVGX1BSRUZJWCAibG9jYWxlIiwgCi0g
ICAgICAgICAgICBuc0h0dHBIYW5kbGVyOjpQcmVmc0NhbGxiYWNrLCAodm9pZCopdGhpcyk7CiAg
ICAgbVByZWZzLT5SZWdpc3RlckNhbGxiYWNrKFVBX1BSRUZfUFJFRklYICJtaXNjIiwKICAgICAg
ICAgICAgIG5zSHR0cEhhbmRsZXI6OlByZWZzQ2FsbGJhY2ssICh2b2lkICopdGhpcyk7CiAKQEAg
LTkzMCwxMiArOTI2LDEyIEBACiAgICAgaWYgKCFtU2VjdXJpdHkpCiAgICAgICAgIG1TZWN1cml0
eS5BZG9wdChuc0NSVDo6c3RyZHVwKFVBX0FQUFNFQ1VSSVRZX0ZBTExCQUNLKSk7CiAKLSAgICAv
LyBHYXRoZXIgbG9jYWxlLgotICAgIG5zWFBJRExTdHJpbmcgdXZhbDsKLSAgICBtUHJlZnMtPkdl
dExvY2FsaXplZFVuaWNoYXJQcmVmKFVBX1BSRUZfUFJFRklYICJsb2NhbGUiLCAKLSAgICAgICAg
Z2V0dGVyX0NvcGllcyh1dmFsKSk7Ci0gICAgaWYgKHV2YWwpCi0gICAgICAgIG1MYW5ndWFnZS5B
ZG9wdChUb05ld1VURjhTdHJpbmcobnNEZXBlbmRlbnRTdHJpbmcodXZhbCkpKTsKKyAgICBtTGFu
Z3VhZ2UuQWRvcHQobnNDUlQ6OnN0cmR1cCgiZW4iKSk7CisgICAgICAgICAgICAgICAgICAgICAg
LyogZHVtbXkuIFNlZSBidWcgNTUzNjYuCisgICAgICAgICAgICAgICAgICAgICAgICAgV2UgY291
bGQgdXNlIHRoZSBhY2NlcHQtbGFuZyBwcmVmIGhlcmUsIGJ1dAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHdoeSBzaG91bGQgd2UgYm90aGVyPyBJIGRvbid0IHRoaW5rLCBtYW55IHNpdGVzCisg
ICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudGx5IGNoZWNrIHRoaXMgdmFsdWUsIGFuZCB0
aGV5ICpzaG91bGQqIHVzZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHQtTGFu
Z3VhZ2UgaGVhZGVyIGFueXdheS4gKi8KIAogICAgICAgLy8gR2F0aGVyIHBsYXRmb3JtLgogICAg
IG1QbGF0Zm9ybS5BZG9wdChuc0NSVDo6c3RyZHVwKApAQCAtOTcyLDM2ICs5NjgsMTUgQEAKICAg
ICBPU1ZFUlNJT05JTkZPIGluZm8gPSB7IHNpemVvZiBPU1ZFUlNJT05JTkZPIH07CiAgICAgaWYg
KEdldFZlcnNpb25FeCgmaW5mbykpIHsKICAgICAgICAgaWYgKGluZm8uZHdQbGF0Zm9ybUlkID09
IFZFUl9QTEFURk9STV9XSU4zMl9OVCkgewotICAgICAgICAgICAgaWYgKGluZm8uZHdNYWpvclZl
cnNpb24gICAgICA9PSAzKQotICAgICAgICAgICAgICAgIG1Pc2NwdS5BZG9wdChuc0NSVDo6c3Ry
ZHVwKCJXaW5OVDMuNTEiKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpbmZvLmR3TWFqb3JWZXJz
aW9uID09IDQpCi0gICAgICAgICAgICAgICAgbU9zY3B1LkFkb3B0KG5zQ1JUOjpzdHJkdXAoIldp
bk5UNC4wIikpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2hhciAqYnVm
ID0gUFJfc21wcmludGYoIldpbmRvd3MgTlQgJWxkLiVsZCIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5mby5kd01ham9yVmVyc2lvbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmR3TWlub3JWZXJzaW9uKTsKLSAgICAgICAg
ICAgICAgICBpZiAoYnVmKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Pc2NwdS5BZG9wdChuc0NS
VDo6c3RyZHVwKGJ1ZikpOwotICAgICAgICAgICAgICAgICAgICBQUl9zbXByaW50Zl9mcmVlKGJ1
Zik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgIG1Pc2NwdS5B
ZG9wdChuc0NSVDo6c3RyZHVwKCJXaW5OVCIpKTsKICAgICAgICAgfSBlbHNlIGlmIChpbmZvLmR3
UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfV0lORE9XUyAmJgogICAgICAgICAgICAg
ICAgICAgIGluZm8uZHdNYWpvclZlcnNpb24gPT0gNCkgewotICAgICAgICAgICAgaWYgKGluZm8u
ZHdNaW5vclZlcnNpb24gPT0gOTApCi0gICAgICAgICAgICAgICAgbU9zY3B1LkFkb3B0KG5zQ1JU
OjpzdHJkdXAoIldpbiA5eCA0LjkwIikpOyAgLy8gV2luZG93cyBNZQotICAgICAgICAgICAgZWxz
ZSBpZiAoaW5mby5kd01pbm9yVmVyc2lvbiA+IDApCi0gICAgICAgICAgICAgICAgbU9zY3B1LkFk
b3B0KG5zQ1JUOjpzdHJkdXAoIldpbjk4IikpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG1Pc2NwdS5BZG9wdChuc0NSVDo6c3RyZHVwKCJXaW45NSIpKTsKKyAgICAgICAgICBt
T3NjcHUuQWRvcHQobnNDUlQ6OnN0cmR1cCgiV2luOXgiKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBjaGFyICpidWYgPSBQUl9zbXByaW50ZigiV2luZG93cyAlbGQuJWxkIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uZHdNYWpvclZlcnNpb24sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmR3TWlub3JWZXJzaW9uKTsK
LSAgICAgICAgICAgIGlmIChidWYpIHsKLSAgICAgICAgICAgICAgICBtT3NjcHUuQWRvcHQobnND
UlQ6OnN0cmR1cChidWYpKTsKLSAgICAgICAgICAgICAgICBQUl9zbXByaW50Zl9mcmVlKGJ1Zik7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgbU9zY3B1LkFkb3B0KG5zQ1JUOjpzdHJkdXAoIldp
biIpKTsKICAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBtT3NjcHUuQWRvcHQobnNDUlQ6
OnN0cmR1cCgiV2luIikpOwogICAgIH0KICNlbGlmIGRlZmluZWQgKFhQX1VOSVgpIHx8IGRlZmlu
ZWQgKFhQX0JFT1MpCiAgICAgc3RydWN0IHV0c25hbWUgbmFtZTsKQEAgLTExNjAsMTcgKzExMzUs
NiBAQAogICAgICAgICAgICAgbVVzZXJBZ2VudElzRGlydHkgPSBQUl9UUlVFOwogICAgICAgICB9
CiAgICAgICAgIE5TX0FTU0VSVElPTighdGVtcCwgInRyb3VibGU6IHxDb3B5Q2hhclByZWZ8IGZh
aWxlZCwgYnV0IHJldHVybmVkIGEgc3RyaW5nIGFueXdheSEiKTsKLSAgICB9Ci0KLSAgICBpZiAo
YkNoYW5nZWRBbGwgfHwgUExfc3RyY21wKHByZWYsIFVBX1BSRUZfUFJFRklYICJsb2NhbGUiKSA9
PSAwKSB7Ci0gICAgICAgIC8vIDU1MTU2OiByZS1HYXRoZXIgbG9jYWxlLgotICAgICAgICBuc1hQ
SURMU3RyaW5nIHV2YWw7Ci0gICAgICAgIHJ2ID0gbVByZWZzLT5HZXRMb2NhbGl6ZWRVbmljaGFy
UHJlZihVQV9QUkVGX1BSRUZJWCAibG9jYWxlIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZXR0ZXJfQ29waWVzKHV2YWwpKTsKLSAgICAgICAgaWYgKE5T
X1NVQ0NFRURFRChydikpIHsKLSAgICAgICAgICAgIG1MYW5ndWFnZS5BZG9wdChUb05ld1VURjhT
dHJpbmcobnNEZXBlbmRlbnRTdHJpbmcodXZhbCkpKTsKLSAgICAgICAgICAgIG1Vc2VyQWdlbnRJ
c0RpcnR5ID0gUFJfVFJVRTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIC8vIGdlbmVyYWwudXNl
cmFnZW50Lm1pc2MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>460173</attachid>
            <date>2010-07-25 15:00:03 -0700</date>
            <delta_ts>2010-07-31 05:16:55 -0700</delta_ts>
            <desc>Patch 3: Change navigator.language to use Accept-Language</desc>
            <filename>lang-js-55366-3.diff</filename>
            <type>text/plain</type>
            <size>1769</size>
            <attacher>ben.bucksch</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNlL25zR2xv
YmFsV2luZG93LmNwcAotLS0gYS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysrIGIvZG9t
L2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCkBAIC05ODU0LDI5ICs5ODU0LDM5IEBAIG5zTmF2aWdh
dG9yOjpHZXRBcHBOYW1lKG5zQVN0cmluZyYgYUFwcE4KICAgICAgIHJldHVybiBOU19PSzsKICAg
ICB9CiAgIH0KIAogICBhQXBwTmFtZS5Bc3NpZ25MaXRlcmFsKCJOZXRzY2FwZSIpOwogICByZXR1
cm4gTlNfT0s7CiB9CiAKKy8qKgorICogVGFrZSBmaXJzdCB2YWx1ZSBmcm9tIEFjY2VwdC1MYW5n
dWFnZXMgKEhUVFAgaGVhZGVyKSwgd2hpY2ggaXMKKyAqIHRoZSAiY29udGVudCBsYW5ndWFnZSIg
ZnJlZWx5IHNldCBieSB0aGUgdXNlciBpbiB0aGUgUHJlZiB3aW5kb3cuCisgKiBTZWUgUkZDIDI2
MTYsIFNlY3Rpb24gMTUuMS40ICJQcml2YWN5IElzc3VlcyBDb25uZWN0ZWQgdG8gQWNjZXB0IEhl
YWRlcnMiCisgKi8KIE5TX0lNRVRIT0RJTVAKIG5zTmF2aWdhdG9yOjpHZXRMYW5ndWFnZShuc0FT
dHJpbmcmIGFMYW5ndWFnZSkKIHsKLSAgbnNyZXN1bHQgcnY7Ci0gIG5zQ09NUHRyPG5zSUh0dHBQ
cm90b2NvbEhhbmRsZXI+Ci0gICAgc2VydmljZShkb19HZXRTZXJ2aWNlKE5TX05FVFdPUktfUFJP
VE9DT0xfQ09OVFJBQ1RJRF9QUkVGSVggImh0dHAiLCAmcnYpKTsKLSAgaWYgKE5TX1NVQ0NFRURF
RChydikpIHsKLSAgICBuc0NBdXRvU3RyaW5nIGxhbmc7Ci0gICAgcnYgPSBzZXJ2aWNlLT5HZXRM
YW5ndWFnZShsYW5nKTsKLSAgICBDb3B5QVNDSUl0b1VURjE2KGxhbmcsIGFMYW5ndWFnZSk7Ci0g
IH0KLQotICByZXR1cm4gcnY7CisgIC8vIGUuZy4gImRlLWRlLGVuLXVzLGVuIgorICBjb25zdCBu
c0Fkb3B0aW5nU3RyaW5nJiBhY2NlcHRMYW5nID0KKyAgICAgIG5zQ29udGVudFV0aWxzOjpHZXRM
b2NhbGl6ZWRTdHJpbmdQcmVmKCJpbnRsLmFjY2VwdF9sYW5ndWFnZXMiKTsKKyAgLy8gdGFrZSBl
dmVyeXRoaW5nIGJlZm9yZSB0aGUgZmlyc3QgIiwiCisgIG5zQVN0cmluZzo6Y29uc3RfaXRlcmF0
b3Igc3RhcnRTdHJpbmcsIHN0YXJ0Q29tbWEsIGVuZENvbW1hOworICBhY2NlcHRMYW5nLkJlZ2lu
UmVhZGluZyhzdGFydFN0cmluZyk7CisgIGFjY2VwdExhbmcuQmVnaW5SZWFkaW5nKHN0YXJ0Q29t
bWEpOworICBhY2NlcHRMYW5nLkVuZFJlYWRpbmcoZW5kQ29tbWEpOworICBpZiAoRmluZEluUmVh
ZGFibGUoTlNfTElURVJBTF9TVFJJTkcoIiwiKSwgc3RhcnRDb21tYSwgZW5kQ29tbWEpKQorICAg
IGFMYW5ndWFnZS5Bc3NpZ24oU3Vic3RyaW5nKHN0YXJ0U3RyaW5nLCBzdGFydENvbW1hKSk7Cisg
IGVsc2UKKyAgICBhTGFuZ3VhZ2UuQXNzaWduKGFjY2VwdExhbmcpOworICBOU19BU1NFUlRJT04o
YUxhbmd1YWdlLkxlbmd0aCgpID09IDIgfHwgYUxhbmd1YWdlLkxlbmd0aCgpID09IDUsCisgICAg
ICAiaW52YWxpZCBpbnRsLmFjY2VwdF9sYW5ndWFnZXMgcHJlZiIpOworICByZXR1cm4gTlNfT0s7
CiB9CiAKIE5TX0lNRVRIT0RJTVAKIG5zTmF2aWdhdG9yOjpHZXRQbGF0Zm9ybShuc0FTdHJpbmcm
IGFQbGF0Zm9ybSkKIHsKICAgaWYgKCFuc0NvbnRlbnRVdGlsczo6SXNDYWxsZXJUcnVzdGVkRm9y
UmVhZCgpKSB7CiAgICAgY29uc3QgbnNBZG9wdGluZ0NTdHJpbmcmIG92ZXJyaWRlID0KICAgICAg
IG5zQ29udGVudFV0aWxzOjpHZXRDaGFyUHJlZigiZ2VuZXJhbC5wbGF0Zm9ybS5vdmVycmlkZSIp
Owo=
</data>
<flag name="review"
          id="385195"
          type_id="937"
          status="-"
          setter="bzbarsky"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>461774</attachid>
            <date>2010-07-31 05:16:55 -0700</date>
            <delta_ts>2010-08-02 16:24:40 -0700</delta_ts>
            <desc>Patch 4: Change navigator.language to use Accept-Language</desc>
            <filename>lang-js-55366-4.diff</filename>
            <type>text/plain</type>
            <size>2374</size>
            <attacher>ben.bucksch</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNlL25zR2xv
YmFsV2luZG93LmNwcAotLS0gYS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysrIGIvZG9t
L2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCkBAIC02MiwxNiArNjIsMTcgQEAKICNpbmNsdWRlICJu
c1hQSURMU3RyaW5nLmgiCiAjaW5jbHVkZSAibnNKU1V0aWxzLmgiCiAjaW5jbHVkZSAicHJtZW0u
aCIKICNpbmNsdWRlICJqc2FwaS5oIiAgICAgICAgICAgICAgLy8gZm9yIEpTQXV0b1JlcXVlc3QK
ICNpbmNsdWRlICJqc2RiZ2FwaS5oIiAgICAgICAgICAgLy8gZm9yIEpTX0NsZWFyV2F0Y2hQb2lu
dHNGb3JPYmplY3QKICNpbmNsdWRlICJuc1JlYWRhYmxlVXRpbHMuaCIKICNpbmNsdWRlICJuc0RP
TUNsYXNzSW5mby5oIgogI2luY2x1ZGUgIm5zQ29udGVudFV0aWxzLmgiCisjaW5jbHVkZSAibnND
aGFyU2VwYXJhdGVkVG9rZW5pemVyLmgiIC8vIGZvciBBY2NlcHQtTGFuZ3VhZ2UgcGFyc2luZwog
CiAvLyBPdGhlciBDbGFzc2VzCiAjaW5jbHVkZSAibnNJRXZlbnRMaXN0ZW5lck1hbmFnZXIuaCIK
ICNpbmNsdWRlICJuc0VzY2FwZS5oIgogI2luY2x1ZGUgIm5zU3R5bGVDb29yZC5oIgogI2luY2x1
ZGUgIm5zTWltZVR5cGVBcnJheS5oIgogI2luY2x1ZGUgIm5zTmV0VXRpbC5oIgogI2luY2x1ZGUg
Im5zSUNhY2hpbmdDaGFubmVsLmgiCkBAIC05ODU0LDI5ICs5ODU1LDM5IEBAIG5zTmF2aWdhdG9y
OjpHZXRBcHBOYW1lKG5zQVN0cmluZyYgYUFwcE4KICAgICAgIHJldHVybiBOU19PSzsKICAgICB9
CiAgIH0KIAogICBhQXBwTmFtZS5Bc3NpZ25MaXRlcmFsKCJOZXRzY2FwZSIpOwogICByZXR1cm4g
TlNfT0s7CiB9CiAKKy8qKgorICogSlMgcHJvcGVydHkgbmF2aWdhdG9yLmxhbmd1YWdlLCBleHBv
c2VkIHRvIHdlYiBjb250ZW50LgorICogVGFrZSBmaXJzdCB2YWx1ZSBmcm9tIEFjY2VwdC1MYW5n
dWFnZXMgKEhUVFAgaGVhZGVyKSwgd2hpY2ggaXMKKyAqIHRoZSAiY29udGVudCBsYW5ndWFnZSIg
ZnJlZWx5IHNldCBieSB0aGUgdXNlciBpbiB0aGUgUHJlZiB3aW5kb3cuCisgKiBTZWUgUkZDIDI2
MTYsIFNlY3Rpb24gMTUuMS40ICJQcml2YWN5IElzc3VlcyBDb25uZWN0ZWQgdG8gQWNjZXB0IEhl
YWRlcnMiCisgKi8KIE5TX0lNRVRIT0RJTVAKIG5zTmF2aWdhdG9yOjpHZXRMYW5ndWFnZShuc0FT
dHJpbmcmIGFMYW5ndWFnZSkKIHsKLSAgbnNyZXN1bHQgcnY7Ci0gIG5zQ09NUHRyPG5zSUh0dHBQ
cm90b2NvbEhhbmRsZXI+Ci0gICAgc2VydmljZShkb19HZXRTZXJ2aWNlKE5TX05FVFdPUktfUFJP
VE9DT0xfQ09OVFJBQ1RJRF9QUkVGSVggImh0dHAiLCAmcnYpKTsKLSAgaWYgKE5TX1NVQ0NFRURF
RChydikpIHsKLSAgICBuc0NBdXRvU3RyaW5nIGxhbmc7Ci0gICAgcnYgPSBzZXJ2aWNlLT5HZXRM
YW5ndWFnZShsYW5nKTsKLSAgICBDb3B5QVNDSUl0b1VURjE2KGxhbmcsIGFMYW5ndWFnZSk7Ci0g
IH0KLQotICByZXR1cm4gcnY7CisgIC8vIGUuZy4gImRlLWRlLGVuLXVzLCBlbiIKKyAgY29uc3Qg
bnNBZG9wdGluZ1N0cmluZyYgYWNjZXB0TGFuZyA9CisgICAgICBuc0NvbnRlbnRVdGlsczo6R2V0
TG9jYWxpemVkU3RyaW5nUHJlZigiaW50bC5hY2NlcHRfbGFuZ3VhZ2VzIik7CisgIC8vIHRha2Ug
ZXZlcnl0aGluZyBiZWZvcmUgdGhlIGZpcnN0ICIsIiBvciAiOyIKKyAgbnNDaGFyU2VwYXJhdGVk
VG9rZW5pemVyIGxhbmdUb2tlbml6ZXIoYWNjZXB0TGFuZywgJywnKTsKKyAgY29uc3QgbnNTdWJz
dHJpbmcgJmZpcnN0TGFuZ1BhcnQgPSBsYW5nVG9rZW5pemVyLm5leHRUb2tlbigpOworICBuc0No
YXJTZXBhcmF0ZWRUb2tlbml6ZXIgcVRva2VuaXplcihmaXJzdExhbmdQYXJ0LCAnOycpOworICBh
TGFuZ3VhZ2UuQXNzaWduKHFUb2tlbml6ZXIubmV4dFRva2VuKCkpOworICBpZiAoYUxhbmd1YWdl
Lkxlbmd0aCgpICE9IDIgJiYgKGFMYW5ndWFnZS5MZW5ndGgoKSAhPSA1IHx8IGFMYW5ndWFnZVsy
XSAhPSAnLScpKQorICB7CisgICAgTlNfQVNTRVJUSU9OKGZhbHNlLCAiaW52YWxpZCBpbnRsLmFj
Y2VwdF9sYW5ndWFnZXMgcHJlZiIpOworICAgIGFMYW5ndWFnZS5Bc3NpZ24oTlNfTElURVJBTF9T
VFJJTkcoImVuIikpOworICB9CisgIHJldHVybiBOU19PSzsKIH0KIAogTlNfSU1FVEhPRElNUAog
bnNOYXZpZ2F0b3I6OkdldFBsYXRmb3JtKG5zQVN0cmluZyYgYVBsYXRmb3JtKQogewogICBpZiAo
IW5zQ29udGVudFV0aWxzOjpJc0NhbGxlclRydXN0ZWRGb3JSZWFkKCkpIHsKICAgICBjb25zdCBu
c0Fkb3B0aW5nQ1N0cmluZyYgb3ZlcnJpZGUgPQogICAgICAgbnNDb250ZW50VXRpbHM6OkdldENo
YXJQcmVmKCJnZW5lcmFsLnBsYXRmb3JtLm92ZXJyaWRlIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>462244</attachid>
            <date>2010-08-02 16:24:40 -0700</date>
            <delta_ts>2010-08-03 20:55:45 -0700</delta_ts>
            <desc>Patch 5: Change navigator.language to use Accept-Language</desc>
            <filename>lang-js-55366-5.diff</filename>
            <type>text/plain</type>
            <size>3901</size>
            <attacher>ben.bucksch</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNlL25zR2xv
YmFsV2luZG93LmNwcAotLS0gYS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysrIGIvZG9t
L2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCkBAIC0yNSwxNiArMjUsMTcgQEAKICAqICAgQnJlbmRh
biBFaWNoIDxicmVuZGFuQG1vemlsbGEub3JnPgogICogICBEYXZpZCBIeWF0dCAoaHlhdHRAbmV0
c2NhcGUuY29tKQogICogICBEYW4gUm9zZW4gPGRyQG5ldHNjYXBlLmNvbT4KICAqICAgVmlkdXIg
QXBwYXJhbyA8dmlkdXJAbmV0c2NhcGUuY29tPgogICogICBKb2hubnkgU3RlbmJhY2sgPGpzdEBu
ZXRzY2FwZS5jb20+CiAgKiAgIE1hcmsgSGFtbW9uZCA8bWhhbW1vbmRAc2tpcHBpbmV0LmNvbS5h
dT4KICAqICAgUnlhbiBKb25lcyA8c2NpZ3V5cnlhbkBnbWFpbC5jb20+CiAgKiAgIEplZmYgV2Fs
ZGVuIDxqd2FsZGVuK2NvZGVAbWl0LmVkdT4KKyAqICAgQmVuIEJ1Y2tzY2ggPGJlbi5idWNrc2No
ICBiZW9uZXguY29tPgogICoKICAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlz
IGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCiAgKiBlaXRoZXIgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwK
ICAqIG9yIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEg
b3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAogICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBv
ZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKICAqIG9mIHRob3Nl
IGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSBvbmx5CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExH
UEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCiAgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRo
aXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgpAQCAtNjIs
MTYgKzYzLDE4IEBACiAjaW5jbHVkZSAibnNYUElETFN0cmluZy5oIgogI2luY2x1ZGUgIm5zSlNV
dGlscy5oIgogI2luY2x1ZGUgInBybWVtLmgiCiAjaW5jbHVkZSAianNhcGkuaCIgICAgICAgICAg
ICAgIC8vIGZvciBKU0F1dG9SZXF1ZXN0CiAjaW5jbHVkZSAianNkYmdhcGkuaCIgICAgICAgICAg
IC8vIGZvciBKU19DbGVhcldhdGNoUG9pbnRzRm9yT2JqZWN0CiAjaW5jbHVkZSAibnNSZWFkYWJs
ZVV0aWxzLmgiCiAjaW5jbHVkZSAibnNET01DbGFzc0luZm8uaCIKICNpbmNsdWRlICJuc0NvbnRl
bnRVdGlscy5oIgorI2luY2x1ZGUgIm5zQ2hhclNlcGFyYXRlZFRva2VuaXplci5oIiAvLyBmb3Ig
QWNjZXB0LUxhbmd1YWdlIHBhcnNpbmcKKyNpbmNsdWRlICJuc1VuaWNoYXJVdGlscy5oIgogCiAv
LyBPdGhlciBDbGFzc2VzCiAjaW5jbHVkZSAibnNJRXZlbnRMaXN0ZW5lck1hbmFnZXIuaCIKICNp
bmNsdWRlICJuc0VzY2FwZS5oIgogI2luY2x1ZGUgIm5zU3R5bGVDb29yZC5oIgogI2luY2x1ZGUg
Im5zTWltZVR5cGVBcnJheS5oIgogI2luY2x1ZGUgIm5zTmV0VXRpbC5oIgogI2luY2x1ZGUgIm5z
SUNhY2hpbmdDaGFubmVsLmgiCkBAIC05ODU0LDI5ICs5ODU3LDUwIEBAIG5zTmF2aWdhdG9yOjpH
ZXRBcHBOYW1lKG5zQVN0cmluZyYgYUFwcE4KICAgICAgIHJldHVybiBOU19PSzsKICAgICB9CiAg
IH0KIAogICBhQXBwTmFtZS5Bc3NpZ25MaXRlcmFsKCJOZXRzY2FwZSIpOwogICByZXR1cm4gTlNf
T0s7CiB9CiAKKy8qKgorICogSlMgcHJvcGVydHkgbmF2aWdhdG9yLmxhbmd1YWdlLCBleHBvc2Vk
IHRvIHdlYiBjb250ZW50LgorICogVGFrZSBmaXJzdCB2YWx1ZSBmcm9tIEFjY2VwdC1MYW5ndWFn
ZXMgKEhUVFAgaGVhZGVyKSwgd2hpY2ggaXMKKyAqIHRoZSAiY29udGVudCBsYW5ndWFnZSIgZnJl
ZWx5IHNldCBieSB0aGUgdXNlciBpbiB0aGUgUHJlZiB3aW5kb3cuCisgKgorICogRG8gbm90IHVz
ZSBVSSBsYW5ndWFnZSAoY2hvc2VuIGFwcCBsb2NhbGUpIGhlcmUuCisgKiBTZWUgUkZDIDI2MTYs
IFNlY3Rpb24gMTUuMS40ICJQcml2YWN5IElzc3VlcyBDb25uZWN0ZWQgdG8gQWNjZXB0IEhlYWRl
cnMiCisgKgorICogImVuIiwgImVuLVVTIiBhbmQgImktY2hlcm9rZWUiIGFyZSB2YWxpZC4KKyAq
IEZhbGxiYWNrIGluIGNhc2Ugb2YgaW52YWxpZCBwcmVmIHNob3VsZCBiZSAiIiAoZW1wdHkgc3Ry
aW5nKSwgdG8KKyAqIGxldCBzaXRlIGRvIGZhbGxiYWNrLCBlLmcuIHRvIHNpdGUncyBsb2NhbCBs
YW5ndWFnZS4KKyAqLwogTlNfSU1FVEhPRElNUAogbnNOYXZpZ2F0b3I6OkdldExhbmd1YWdlKG5z
QVN0cmluZyYgYUxhbmd1YWdlKQogewotICBuc3Jlc3VsdCBydjsKLSAgbnNDT01QdHI8bnNJSHR0
cFByb3RvY29sSGFuZGxlcj4KLSAgICBzZXJ2aWNlKGRvX0dldFNlcnZpY2UoTlNfTkVUV09SS19Q
Uk9UT0NPTF9DT05UUkFDVElEX1BSRUZJWCAiaHR0cCIsICZydikpOwotICBpZiAoTlNfU1VDQ0VF
REVEKHJ2KSkgewotICAgIG5zQ0F1dG9TdHJpbmcgbGFuZzsKLSAgICBydiA9IHNlcnZpY2UtPkdl
dExhbmd1YWdlKGxhbmcpOwotICAgIENvcHlBU0NJSXRvVVRGMTYobGFuZywgYUxhbmd1YWdlKTsK
LSAgfQotCi0gIHJldHVybiBydjsKKyAgLy8gZS5nLiAiZGUtZGUsIGVuLXVzLGVuIgorICBjb25z
dCBuc0Fkb3B0aW5nU3RyaW5nJiBhY2NlcHRMYW5nID0KKyAgICAgIG5zQ29udGVudFV0aWxzOjpH
ZXRMb2NhbGl6ZWRTdHJpbmdQcmVmKCJpbnRsLmFjY2VwdF9sYW5ndWFnZXMiKTsKKyAgLy8gdGFr
ZSBldmVyeXRoaW5nIGJlZm9yZSB0aGUgZmlyc3QgIiwiIG9yICI7Iiwgd2l0aG91dCB0cmFpbGlu
ZyBzcGFjZQorICBuc0NoYXJTZXBhcmF0ZWRUb2tlbml6ZXIgbGFuZ1Rva2VuaXplcihhY2NlcHRM
YW5nLCAnLCcpOworICBjb25zdCBuc1N1YnN0cmluZyAmZmlyc3RMYW5nUGFydCA9IGxhbmdUb2tl
bml6ZXIubmV4dFRva2VuKCk7CisgIG5zQ2hhclNlcGFyYXRlZFRva2VuaXplciBxVG9rZW5pemVy
KGZpcnN0TGFuZ1BhcnQsICc7Jyk7CisgIGFMYW5ndWFnZS5Bc3NpZ24ocVRva2VuaXplci5uZXh0
VG9rZW4oKSk7CisgIE5TX0FTU0VSVElPTighYUxhbmd1YWdlLklzRW1wdHkoKSwgImludmFsaWQg
aW50bC5hY2NlcHRfbGFuZ3VhZ2VzIHByZWYiKTsKKyAgLy8gcmVwbGFjZSAiXyIgd2l0aCAiLSIs
IHRvIGF2b2lkIFBPU0lYL1dpbmRvd3MgImVuX1VTIiBub3RhdGlvbgorICBpZiAoYUxhbmd1YWdl
Lkxlbmd0aCgpID4gMiAmJiBhTGFuZ3VhZ2VbMl0gPT0gUFJVbmljaGFyKCdfJykpCisgICAgYUxh
bmd1YWdlLlJlcGxhY2UoMiwgMSwgUFJVbmljaGFyKCctJykpOyAvLyBUT0RPIHJlcGxhY2UgYWxs
CisgIGlmIChhTGFuZ3VhZ2UuTGVuZ3RoKCkgPiAyICYmIGFMYW5ndWFnZVsyXSA9PSBQUlVuaWNo
YXIoJy0nKSkKKyAgeworICAgIG5zQXV0b1N0cmluZyB1cHBlcihTdWJzdHJpbmcoYUxhbmd1YWdl
LCAzLCBhTGFuZ3VhZ2UuTGVuZ3RoKCkgLSAzKSk7CisgICAgOjpUb1VwcGVyQ2FzZSh1cHBlcik7
CisgICAgYUxhbmd1YWdlLlJlcGxhY2UoMywgYUxhbmd1YWdlLkxlbmd0aCgpIC0gMywgdXBwZXIp
OworICB9CisgIHJldHVybiBOU19PSzsKIH0KIAogTlNfSU1FVEhPRElNUAogbnNOYXZpZ2F0b3I6
OkdldFBsYXRmb3JtKG5zQVN0cmluZyYgYVBsYXRmb3JtKQogewogICBpZiAoIW5zQ29udGVudFV0
aWxzOjpJc0NhbGxlclRydXN0ZWRGb3JSZWFkKCkpIHsKICAgICBjb25zdCBuc0Fkb3B0aW5nQ1N0
cmluZyYgb3ZlcnJpZGUgPQogICAgICAgbnNDb250ZW50VXRpbHM6OkdldENoYXJQcmVmKCJnZW5l
cmFsLnBsYXRmb3JtLm92ZXJyaWRlIik7Cg==
</data>
<flag name="review"
          id="386946"
          type_id="937"
          status="-"
          setter="bzbarsky"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>462638</attachid>
            <date>2010-08-03 19:52:14 -0700</date>
            <delta_ts>2010-08-03 21:03:01 -0700</delta_ts>
            <desc>Patch 6: Change navigator.language to use Accept-Language, using tokerizer for uppercasing</desc>
            <filename>lang-js-55366-6.diff</filename>
            <type>text/plain</type>
            <size>4325</size>
            <attacher>ben.bucksch</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNlL25zR2xv
YmFsV2luZG93LmNwcAotLS0gYS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysrIGIvZG9t
L2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCkBAIC0yNSwxNiArMjUsMTcgQEAKICAqICAgQnJlbmRh
biBFaWNoIDxicmVuZGFuQG1vemlsbGEub3JnPgogICogICBEYXZpZCBIeWF0dCAoaHlhdHRAbmV0
c2NhcGUuY29tKQogICogICBEYW4gUm9zZW4gPGRyQG5ldHNjYXBlLmNvbT4KICAqICAgVmlkdXIg
QXBwYXJhbyA8dmlkdXJAbmV0c2NhcGUuY29tPgogICogICBKb2hubnkgU3RlbmJhY2sgPGpzdEBu
ZXRzY2FwZS5jb20+CiAgKiAgIE1hcmsgSGFtbW9uZCA8bWhhbW1vbmRAc2tpcHBpbmV0LmNvbS5h
dT4KICAqICAgUnlhbiBKb25lcyA8c2NpZ3V5cnlhbkBnbWFpbC5jb20+CiAgKiAgIEplZmYgV2Fs
ZGVuIDxqd2FsZGVuK2NvZGVAbWl0LmVkdT4KKyAqICAgQmVuIEJ1Y2tzY2ggPGJlbi5idWNrc2No
ICBiZW9uZXguY29tPgogICoKICAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlz
IGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCiAgKiBlaXRoZXIgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwK
ICAqIG9yIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEg
b3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAogICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBv
ZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKICAqIG9mIHRob3Nl
IGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSBvbmx5CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExH
UEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCiAgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRo
aXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgpAQCAtNjIs
MTYgKzYzLDE4IEBACiAjaW5jbHVkZSAibnNYUElETFN0cmluZy5oIgogI2luY2x1ZGUgIm5zSlNV
dGlscy5oIgogI2luY2x1ZGUgInBybWVtLmgiCiAjaW5jbHVkZSAianNhcGkuaCIgICAgICAgICAg
ICAgIC8vIGZvciBKU0F1dG9SZXF1ZXN0CiAjaW5jbHVkZSAianNkYmdhcGkuaCIgICAgICAgICAg
IC8vIGZvciBKU19DbGVhcldhdGNoUG9pbnRzRm9yT2JqZWN0CiAjaW5jbHVkZSAibnNSZWFkYWJs
ZVV0aWxzLmgiCiAjaW5jbHVkZSAibnNET01DbGFzc0luZm8uaCIKICNpbmNsdWRlICJuc0NvbnRl
bnRVdGlscy5oIgorI2luY2x1ZGUgIm5zQ2hhclNlcGFyYXRlZFRva2VuaXplci5oIiAvLyBmb3Ig
QWNjZXB0LUxhbmd1YWdlIHBhcnNpbmcKKyNpbmNsdWRlICJuc1VuaWNoYXJVdGlscy5oIgogCiAv
LyBPdGhlciBDbGFzc2VzCiAjaW5jbHVkZSAibnNJRXZlbnRMaXN0ZW5lck1hbmFnZXIuaCIKICNp
bmNsdWRlICJuc0VzY2FwZS5oIgogI2luY2x1ZGUgIm5zU3R5bGVDb29yZC5oIgogI2luY2x1ZGUg
Im5zTWltZVR5cGVBcnJheS5oIgogI2luY2x1ZGUgIm5zTmV0VXRpbC5oIgogI2luY2x1ZGUgIm5z
SUNhY2hpbmdDaGFubmVsLmgiCkBAIC05ODU0LDI5ICs5ODU3LDY2IEBAIG5zTmF2aWdhdG9yOjpH
ZXRBcHBOYW1lKG5zQVN0cmluZyYgYUFwcE4KICAgICAgIHJldHVybiBOU19PSzsKICAgICB9CiAg
IH0KIAogICBhQXBwTmFtZS5Bc3NpZ25MaXRlcmFsKCJOZXRzY2FwZSIpOwogICByZXR1cm4gTlNf
T0s7CiB9CiAKKy8qKgorICogSlMgcHJvcGVydHkgbmF2aWdhdG9yLmxhbmd1YWdlLCBleHBvc2Vk
IHRvIHdlYiBjb250ZW50LgorICogVGFrZSBmaXJzdCB2YWx1ZSBmcm9tIEFjY2VwdC1MYW5ndWFn
ZXMgKEhUVFAgaGVhZGVyKSwgd2hpY2ggaXMKKyAqIHRoZSAiY29udGVudCBsYW5ndWFnZSIgZnJl
ZWx5IHNldCBieSB0aGUgdXNlciBpbiB0aGUgUHJlZiB3aW5kb3cuCisgKgorICogRG8gbm90IHVz
ZSBVSSBsYW5ndWFnZSAoY2hvc2VuIGFwcCBsb2NhbGUpIGhlcmUuCisgKiBTZWUgUkZDIDI2MTYs
IFNlY3Rpb24gMTUuMS40ICJQcml2YWN5IElzc3VlcyBDb25uZWN0ZWQgdG8gQWNjZXB0IEhlYWRl
cnMiCisgKgorICogImVuIiwgImVuLVVTIiBhbmQgImktY2hlcm9rZWUiIGFuZCAiIiBhcmUgdmFs
aWQuCisgKiBGYWxsYmFjayBpbiBjYXNlIG9mIGludmFsaWQgcHJlZiBzaG91bGQgYmUgIiIgKGVt
cHR5IHN0cmluZyksIHRvCisgKiBsZXQgc2l0ZSBkbyBmYWxsYmFjaywgZS5nLiB0byBzaXRlJ3Mg
bG9jYWwgbGFuZ3VhZ2UuCisgKi8KIE5TX0lNRVRIT0RJTVAKIG5zTmF2aWdhdG9yOjpHZXRMYW5n
dWFnZShuc0FTdHJpbmcmIGFMYW5ndWFnZSkKIHsKLSAgbnNyZXN1bHQgcnY7Ci0gIG5zQ09NUHRy
PG5zSUh0dHBQcm90b2NvbEhhbmRsZXI+Ci0gICAgc2VydmljZShkb19HZXRTZXJ2aWNlKE5TX05F
VFdPUktfUFJPVE9DT0xfQ09OVFJBQ1RJRF9QUkVGSVggImh0dHAiLCAmcnYpKTsKLSAgaWYgKE5T
X1NVQ0NFRURFRChydikpIHsKLSAgICBuc0NBdXRvU3RyaW5nIGxhbmc7Ci0gICAgcnYgPSBzZXJ2
aWNlLT5HZXRMYW5ndWFnZShsYW5nKTsKLSAgICBDb3B5QVNDSUl0b1VURjE2KGxhbmcsIGFMYW5n
dWFnZSk7Ci0gIH0KLQotICByZXR1cm4gcnY7CisgIC8vIGUuZy4gImRlLWRlLCBlbi11cyxlbiIK
KyAgY29uc3QgbnNBZG9wdGluZ1N0cmluZyYgYWNjZXB0TGFuZyA9CisgICAgICBuc0NvbnRlbnRV
dGlsczo6R2V0TG9jYWxpemVkU3RyaW5nUHJlZigiaW50bC5hY2NlcHRfbGFuZ3VhZ2VzIik7Cisg
IC8vIHRha2UgZXZlcnl0aGluZyBiZWZvcmUgdGhlIGZpcnN0ICIsIiBvciAiOyIsIHdpdGhvdXQg
dHJhaWxpbmcgc3BhY2UKKyAgbnNDaGFyU2VwYXJhdGVkVG9rZW5pemVyIGxhbmdUb2tlbml6ZXIo
YWNjZXB0TGFuZywgJywnKTsKKyAgY29uc3QgbnNTdWJzdHJpbmcgJmZpcnN0TGFuZ1BhcnQgPSBs
YW5nVG9rZW5pemVyLm5leHRUb2tlbigpOworICBuc0NoYXJTZXBhcmF0ZWRUb2tlbml6ZXIgcVRv
a2VuaXplcihmaXJzdExhbmdQYXJ0LCAnOycpOworICBhTGFuZ3VhZ2UuQXNzaWduKHFUb2tlbml6
ZXIubmV4dFRva2VuKCkpOworCisgIC8vIGNoZWNrcyBhbmQgZml4dXBzCisgIC8vIHJlcGxhY2Ug
Il8iIHdpdGggIi0iLCB0byBhdm9pZCBQT1NJWC9XaW5kb3dzICJlbl9VUyIgbm90YXRpb24KKyAg
aWYgKGFMYW5ndWFnZS5MZW5ndGgoKSA+IDIgJiYgYUxhbmd1YWdlWzJdID09IFBSVW5pY2hhcign
XycpKQorICAgIGFMYW5ndWFnZS5SZXBsYWNlKDIsIDEsIFBSVW5pY2hhcignLScpKTsgLy8gVE9E
TyByZXBsYWNlIGFsbAorICAvLyB1c2UgdXBwZXJjYXNlIGZvciBjb3VudHJ5IHBhcnQsIGUuZy4g
ImVuLVVTIiwgbm90ICJlbi11cyIsIHNlZSBCQ1A0NworICAvLyBvbmx5IHVwcGVyY2FzZSAyLWxl
dHRlciBjb3VudHJ5IGNvZGVzLCBub3QgInpoLUhhbnQiLCAiZGUtREUteC1nb2V0aGUiCisgIGlm
IChhTGFuZ3VhZ2UuTGVuZ3RoKCkgPiAyKQorICB7CisgICAgbnNDaGFyU2VwYXJhdGVkVG9rZW5p
emVyIGxvY2FsZVRva2VuaXplcihhTGFuZ3VhZ2UsICctJyk7CisgICAgUFJJbnQzMiBwb3MgPSAw
OworICAgIFBSQm9vbCBmaXJzdCA9IHRydWU7CisgICAgd2hpbGUgKGxvY2FsZVRva2VuaXplci5o
YXNNb3JlVG9rZW5zKCkpCisgICAgeworICAgICAgY29uc3QgbnNTdWJzdHJpbmcgJmNvZGUgPSBs
b2NhbGVUb2tlbml6ZXIubmV4dFRva2VuKCk7CisgICAgICBpZiAoY29kZS5MZW5ndGgoKSA9PSAy
ICYmICFmaXJzdCkKKyAgICAgIHsKKyAgICAgICAgbnNBdXRvU3RyaW5nIHVwcGVyKGNvZGUpOwor
ICAgICAgICA6OlRvVXBwZXJDYXNlKHVwcGVyKTsKKyAgICAgICAgYUxhbmd1YWdlLlJlcGxhY2Uo
cG9zLCBjb2RlLkxlbmd0aCgpLCB1cHBlcik7CisgICAgICB9CisgICAgICBwb3MgKz0gY29kZS5M
ZW5ndGgoKSArIDE7IC8vIDEgaXMgdGhlIHNlcGFyYXRvcgorICAgICAgaWYgKGZpcnN0KQorICAg
ICAgICBmaXJzdCA9IGZhbHNlOworICAgIH0KKyAgfQorICByZXR1cm4gTlNfT0s7CiB9CiAKIE5T
X0lNRVRIT0RJTVAKIG5zTmF2aWdhdG9yOjpHZXRQbGF0Zm9ybShuc0FTdHJpbmcmIGFQbGF0Zm9y
bSkKIHsKICAgaWYgKCFuc0NvbnRlbnRVdGlsczo6SXNDYWxsZXJUcnVzdGVkRm9yUmVhZCgpKSB7
CiAgICAgY29uc3QgbnNBZG9wdGluZ0NTdHJpbmcmIG92ZXJyaWRlID0KICAgICAgIG5zQ29udGVu
dFV0aWxzOjpHZXRDaGFyUHJlZigiZ2VuZXJhbC5wbGF0Zm9ybS5vdmVycmlkZSIpOwo=
</data>
<flag name="review"
          id="387275"
          type_id="937"
          status="+"
          setter="bzbarsky"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>462663</attachid>
            <date>2010-08-03 21:03:01 -0700</date>
            <delta_ts>2010-10-29 14:06:42 -0700</delta_ts>
            <desc>Patch 7: Change navigator.language to use Accept-Language</desc>
            <filename>lang-js-55366-7.diff</filename>
            <type>text/plain</type>
            <size>4323</size>
            <attacher>ben.bucksch</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL2RvbS9iYXNlL25zR2xvYmFsV2luZG93LmNwcCBiL2RvbS9iYXNlL25zR2xv
YmFsV2luZG93LmNwcAotLS0gYS9kb20vYmFzZS9uc0dsb2JhbFdpbmRvdy5jcHAKKysrIGIvZG9t
L2Jhc2UvbnNHbG9iYWxXaW5kb3cuY3BwCkBAIC0yNSwxNiArMjUsMTcgQEAKICAqICAgQnJlbmRh
biBFaWNoIDxicmVuZGFuQG1vemlsbGEub3JnPgogICogICBEYXZpZCBIeWF0dCAoaHlhdHRAbmV0
c2NhcGUuY29tKQogICogICBEYW4gUm9zZW4gPGRyQG5ldHNjYXBlLmNvbT4KICAqICAgVmlkdXIg
QXBwYXJhbyA8dmlkdXJAbmV0c2NhcGUuY29tPgogICogICBKb2hubnkgU3RlbmJhY2sgPGpzdEBu
ZXRzY2FwZS5jb20+CiAgKiAgIE1hcmsgSGFtbW9uZCA8bWhhbW1vbmRAc2tpcHBpbmV0LmNvbS5h
dT4KICAqICAgUnlhbiBKb25lcyA8c2NpZ3V5cnlhbkBnbWFpbC5jb20+CiAgKiAgIEplZmYgV2Fs
ZGVuIDxqd2FsZGVuK2NvZGVAbWl0LmVkdT4KKyAqICAgQmVuIEJ1Y2tzY2ggPGJlbi5idWNrc2No
ICBiZW9uZXguY29tPgogICoKICAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlz
IGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCiAgKiBlaXRoZXIgb2YgdGhlIEdO
VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwK
ICAqIG9yIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEg
b3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAogICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBv
ZiB0aGUgR1BMIG9yIHRoZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKICAqIG9mIHRob3Nl
IGFib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMg
ZmlsZSBvbmx5CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExH
UEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCiAgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRo
aXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgpAQCAtNjIs
MTYgKzYzLDE4IEBACiAjaW5jbHVkZSAibnNYUElETFN0cmluZy5oIgogI2luY2x1ZGUgIm5zSlNV
dGlscy5oIgogI2luY2x1ZGUgInBybWVtLmgiCiAjaW5jbHVkZSAianNhcGkuaCIgICAgICAgICAg
ICAgIC8vIGZvciBKU0F1dG9SZXF1ZXN0CiAjaW5jbHVkZSAianNkYmdhcGkuaCIgICAgICAgICAg
IC8vIGZvciBKU19DbGVhcldhdGNoUG9pbnRzRm9yT2JqZWN0CiAjaW5jbHVkZSAibnNSZWFkYWJs
ZVV0aWxzLmgiCiAjaW5jbHVkZSAibnNET01DbGFzc0luZm8uaCIKICNpbmNsdWRlICJuc0NvbnRl
bnRVdGlscy5oIgorI2luY2x1ZGUgIm5zQ2hhclNlcGFyYXRlZFRva2VuaXplci5oIiAvLyBmb3Ig
QWNjZXB0LUxhbmd1YWdlIHBhcnNpbmcKKyNpbmNsdWRlICJuc1VuaWNoYXJVdGlscy5oIgogCiAv
LyBPdGhlciBDbGFzc2VzCiAjaW5jbHVkZSAibnNJRXZlbnRMaXN0ZW5lck1hbmFnZXIuaCIKICNp
bmNsdWRlICJuc0VzY2FwZS5oIgogI2luY2x1ZGUgIm5zU3R5bGVDb29yZC5oIgogI2luY2x1ZGUg
Im5zTWltZVR5cGVBcnJheS5oIgogI2luY2x1ZGUgIm5zTmV0VXRpbC5oIgogI2luY2x1ZGUgIm5z
SUNhY2hpbmdDaGFubmVsLmgiCkBAIC05ODU0LDI5ICs5ODU3LDY2IEBAIG5zTmF2aWdhdG9yOjpH
ZXRBcHBOYW1lKG5zQVN0cmluZyYgYUFwcE4KICAgICAgIHJldHVybiBOU19PSzsKICAgICB9CiAg
IH0KIAogICBhQXBwTmFtZS5Bc3NpZ25MaXRlcmFsKCJOZXRzY2FwZSIpOwogICByZXR1cm4gTlNf
T0s7CiB9CiAKKy8qKgorICogSlMgcHJvcGVydHkgbmF2aWdhdG9yLmxhbmd1YWdlLCBleHBvc2Vk
IHRvIHdlYiBjb250ZW50LgorICogVGFrZSBmaXJzdCB2YWx1ZSBmcm9tIEFjY2VwdC1MYW5ndWFn
ZXMgKEhUVFAgaGVhZGVyKSwgd2hpY2ggaXMKKyAqIHRoZSAiY29udGVudCBsYW5ndWFnZSIgZnJl
ZWx5IHNldCBieSB0aGUgdXNlciBpbiB0aGUgUHJlZiB3aW5kb3cuCisgKgorICogRG8gbm90IHVz
ZSBVSSBsYW5ndWFnZSAoY2hvc2VuIGFwcCBsb2NhbGUpIGhlcmUuCisgKiBTZWUgUkZDIDI2MTYs
IFNlY3Rpb24gMTUuMS40ICJQcml2YWN5IElzc3VlcyBDb25uZWN0ZWQgdG8gQWNjZXB0IEhlYWRl
cnMiCisgKgorICogImVuIiwgImVuLVVTIiBhbmQgImktY2hlcm9rZWUiIGFuZCAiIiBhcmUgdmFs
aWQuCisgKiBGYWxsYmFjayBpbiBjYXNlIG9mIGludmFsaWQgcHJlZiBzaG91bGQgYmUgIiIgKGVt
cHR5IHN0cmluZyksIHRvCisgKiBsZXQgc2l0ZSBkbyBmYWxsYmFjaywgZS5nLiB0byBzaXRlJ3Mg
bG9jYWwgbGFuZ3VhZ2UuCisgKi8KIE5TX0lNRVRIT0RJTVAKIG5zTmF2aWdhdG9yOjpHZXRMYW5n
dWFnZShuc0FTdHJpbmcmIGFMYW5ndWFnZSkKIHsKLSAgbnNyZXN1bHQgcnY7Ci0gIG5zQ09NUHRy
PG5zSUh0dHBQcm90b2NvbEhhbmRsZXI+Ci0gICAgc2VydmljZShkb19HZXRTZXJ2aWNlKE5TX05F
VFdPUktfUFJPVE9DT0xfQ09OVFJBQ1RJRF9QUkVGSVggImh0dHAiLCAmcnYpKTsKLSAgaWYgKE5T
X1NVQ0NFRURFRChydikpIHsKLSAgICBuc0NBdXRvU3RyaW5nIGxhbmc7Ci0gICAgcnYgPSBzZXJ2
aWNlLT5HZXRMYW5ndWFnZShsYW5nKTsKLSAgICBDb3B5QVNDSUl0b1VURjE2KGxhbmcsIGFMYW5n
dWFnZSk7Ci0gIH0KLQotICByZXR1cm4gcnY7CisgIC8vIGUuZy4gImRlLWRlLCBlbi11cyxlbiIK
KyAgY29uc3QgbnNBZG9wdGluZ1N0cmluZyYgYWNjZXB0TGFuZyA9CisgICAgICBuc0NvbnRlbnRV
dGlsczo6R2V0TG9jYWxpemVkU3RyaW5nUHJlZigiaW50bC5hY2NlcHRfbGFuZ3VhZ2VzIik7Cisg
IC8vIHRha2UgZXZlcnl0aGluZyBiZWZvcmUgdGhlIGZpcnN0ICIsIiBvciAiOyIsIHdpdGhvdXQg
dHJhaWxpbmcgc3BhY2UKKyAgbnNDaGFyU2VwYXJhdGVkVG9rZW5pemVyIGxhbmdUb2tlbml6ZXIo
YWNjZXB0TGFuZywgJywnKTsKKyAgY29uc3QgbnNTdWJzdHJpbmcgJmZpcnN0TGFuZ1BhcnQgPSBs
YW5nVG9rZW5pemVyLm5leHRUb2tlbigpOworICBuc0NoYXJTZXBhcmF0ZWRUb2tlbml6ZXIgcVRv
a2VuaXplcihmaXJzdExhbmdQYXJ0LCAnOycpOworICBhTGFuZ3VhZ2UuQXNzaWduKHFUb2tlbml6
ZXIubmV4dFRva2VuKCkpOworCisgIC8vIGNoZWNrcyBhbmQgZml4dXBzCisgIC8vIHJlcGxhY2Ug
Il8iIHdpdGggIi0iLCB0byBhdm9pZCBQT1NJWC9XaW5kb3dzICJlbl9VUyIgbm90YXRpb24KKyAg
aWYgKGFMYW5ndWFnZS5MZW5ndGgoKSA+IDIgJiYgYUxhbmd1YWdlWzJdID09IFBSVW5pY2hhcign
XycpKQorICAgIGFMYW5ndWFnZS5SZXBsYWNlKDIsIDEsIFBSVW5pY2hhcignLScpKTsgLy8gVE9E
TyByZXBsYWNlIGFsbAorICAvLyB1c2UgdXBwZXJjYXNlIGZvciBjb3VudHJ5IHBhcnQsIGUuZy4g
ImVuLVVTIiwgbm90ICJlbi11cyIsIHNlZSBCQ1A0NworICAvLyBvbmx5IHVwcGVyY2FzZSAyLWxl
dHRlciBjb3VudHJ5IGNvZGVzLCBub3QgInpoLUhhbnQiLCAiZGUtREUteC1nb2V0aGUiCisgIGlm
IChhTGFuZ3VhZ2UuTGVuZ3RoKCkgPiAyKQorICB7CisgICAgbnNDaGFyU2VwYXJhdGVkVG9rZW5p
emVyIGxvY2FsZVRva2VuaXplcihhTGFuZ3VhZ2UsICctJyk7CisgICAgUFJJbnQzMiBwb3MgPSAw
OworICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAgIHdoaWxlIChsb2NhbGVUb2tlbml6ZXIuaGFz
TW9yZVRva2VucygpKQorICAgIHsKKyAgICAgIGNvbnN0IG5zU3Vic3RyaW5nICZjb2RlID0gbG9j
YWxlVG9rZW5pemVyLm5leHRUb2tlbigpOworICAgICAgaWYgKGNvZGUuTGVuZ3RoKCkgPT0gMiAm
JiAhZmlyc3QpCisgICAgICB7CisgICAgICAgIG5zQXV0b1N0cmluZyB1cHBlcihjb2RlKTsKKyAg
ICAgICAgOjpUb1VwcGVyQ2FzZSh1cHBlcik7CisgICAgICAgIGFMYW5ndWFnZS5SZXBsYWNlKHBv
cywgY29kZS5MZW5ndGgoKSwgdXBwZXIpOworICAgICAgfQorICAgICAgcG9zICs9IGNvZGUuTGVu
Z3RoKCkgKyAxOyAvLyAxIGlzIHRoZSBzZXBhcmF0b3IKKyAgICAgIGlmIChmaXJzdCkKKyAgICAg
ICAgZmlyc3QgPSBmYWxzZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIE5TX09LOwogfQogCiBOU19J
TUVUSE9ESU1QCiBuc05hdmlnYXRvcjo6R2V0UGxhdGZvcm0obnNBU3RyaW5nJiBhUGxhdGZvcm0p
CiB7CiAgIGlmICghbnNDb250ZW50VXRpbHM6OklzQ2FsbGVyVHJ1c3RlZEZvclJlYWQoKSkgewog
ICAgIGNvbnN0IG5zQWRvcHRpbmdDU3RyaW5nJiBvdmVycmlkZSA9CiAgICAgICBuc0NvbnRlbnRV
dGlsczo6R2V0Q2hhclByZWYoImdlbmVyYWwucGxhdGZvcm0ub3ZlcnJpZGUiKTsK
</data>
<flag name="review"
          id="387298"
          type_id="937"
          status="+"
          setter="ben.bucksch"
    />
    <flag name="superreview"
          id="387299"
          type_id="5"
          status="+"
          setter="jstenback+bmo"
    />
    <flag name="approval2.0"
          id="394761"
          type_id="647"
          status="-"
          setter="benjamin"
    />
          </attachment>


    </bug>

</bugzilla>