Closed Bug 1075055 Opened 10 years ago Closed 9 years ago

Make it impossible to turn on telemetry unless FHR is also turned on.

Categories

(Firefox :: Settings UI, defect)

defect
Not set
normal

Tracking

()

VERIFIED FIXED
Firefox 38
Tracking Status
firefox38 --- verified

People

(Reporter: benjamin, Assigned: Dexter)

References

Details

Attachments

(6 files, 9 obsolete files)

37.62 KB, image/png
Details
106.83 KB, image/png
Details
2.29 KB, patch
jaws
: review+
Details | Diff | Splinter Review
13.62 KB, patch
jaws
: review+
Details | Diff | Splinter Review
1.15 KB, patch
Dexter
: review+
Details | Diff | Splinter Review
5.56 KB, patch
Dexter
: review+
Details | Diff | Splinter Review
Short summary: make it impossible to turn on telemetry unless FHR is also turned on.

Currently FHR and telemetry have completely independent checkboxes in the prefs. For various technical reasons, this is no longer going to be possible: there should only be three possible states:

* FHR+telemetry (default for prerelease channels)
* FHR (default for release channel)
* No data

I don't have an opinion about exactly how the UI should work: we could grey out the telemetry checkbox if FHR is not checked, or we could replace the current setup with a radio or select box. I'm going to file a UX bug specifically to get the design settled, blocking this one.
Depends on: 1075056
No longer depends on: 1075056
Depends on: 1075056
Blocks: 1120356
No longer blocks: 1069869
Note that we will ship in-content prefs in 38, but will keep the normal pref UI around as fallback.
That means that we have to do this in both in-content and classic prefs.
Blocks: 1069869
No longer blocks: 1120356
Benjamin, do you think you can take this or should we find someone else?
Flags: needinfo?(benjamin)
Assignee: nobody → alessio.placitelli
I can't commit to this, no.
Flags: needinfo?(benjamin)
Attached patch part 1 - Change the strings. (obsolete) — Splinter Review
This patch removes a string which is no longer used on desktop and changes another string.
This patch changes both the in-content and classic Telemetry prefs, making it impossible to turn Telemetry ON if FHR is OFF.

The classic options are shown a little differently from the UX sketch in bug 1075056. Is this ok or should I get rid of the <groupbox>? (see the attached pictue)
Attached image classic.PNG
This is different from the UX design, as there's a box border visible around the FHR group of options.

This border is still there because every other options group in the classic version has it. Getting rid of it would make this section look differently from the other sections (e.g. "General").

If we decide to keep the box border in this section (for the classic version only), there should be no need for the line separator.

Also, due to the
Attached image incontent.PNG
In-content updated FHR preferences.
Comment on attachment 8566005 [details] [diff] [review]
part 1 - Change the strings.

Review of attachment 8566005 [details] [diff] [review]:
-----------------------------------------------------------------

::: browser/locales/en-US/chrome/browser/preferences/advanced.dtd
@@ +36,2 @@
>  <!ENTITY telemetryDesc.label             "Shares performance, usage, hardware and customization data about your browser with &vendorShortName; to help us make &brandShortName; better">
> +<!ENTITY enableTelemetryData.label       "Share additional data (e.g. Telemetry)">

e.g. is used to describe one or more examples. In this case, I'm not aware of any other data collection outside of Telemetry, but "e.g." may imply that there are other systems also in place.

I think you want "i.e." here, which roughly translate from Latin to English as "in essence", so this is saying "Share additional data (i.e., Telemetry)", which expanded would be "Share additional data (in essence, Telemetry)".

Note also that in US-English, a comma always should follow "e.g." and "i.e.", while in British English the comma is not used.

* These rules and recommendations are from http://www.wikihow.com/Use-%22i.e.%22-Versus-%22e.g.%22
Attachment #8566005 - Flags: feedback+
Comment on attachment 8566006 [details] [diff] [review]
part 2 - Changes the options dialog (in content and classic).

Review of attachment 8566006 [details] [diff] [review]:
-----------------------------------------------------------------

::: browser/components/preferences/advanced.js
@@ +237,5 @@
> +  /**
> +   * Set the disabled status of the telemetry controls based on the input argument.
> +   * @param {Boolean} aDisabled True disables the controls, false enables them.
> +   */
> +  setTelemetryControlsStatus: function (aDisabled)

Functions that take a negated argument can be confusing to use. For example, if I call `setTelemetryControlsStatus(true)`, this will actually disable the controls even though there is nothing within the function name or argument that implies a "negative" connotation.

We should change this function signature to `function setTelemetrySectionEnabled (aEnabled)`.

::: toolkit/themes/shared/in-content/common.inc.css
@@ +46,5 @@
>    line-height: 22px;
>    margin: 0 !important;
>  }
>  
> +xul|caption > xul|checkbox {

Please move this selector up to be in the same ruleset as `xul|caption > xul|label`.

@@ +418,5 @@
>  
> +html|a[disabled="true"],
> +.text-link[disabled="true"],
> +.inline-link[disabled="true"] {
> +  line-height: 22px;

Why does the line-height need to be declared when they are disabled?
Attachment #8566006 - Flags: feedback+
(In reply to Jared Wein [:jaws] (please needinfo? me) from comment #8)
> > +<!ENTITY enableTelemetryData.label       "Share additional data (e.g. Telemetry)">
> 
> e.g. is used to describe one or more examples. In this case, I'm not aware
> of any other data collection outside of Telemetry, but "e.g." may imply that
> there are other systems also in place.
> 
> I think you want "i.e." here, which roughly translate from Latin to English
> as "in essence", so this is saying "Share additional data (i.e.,
> Telemetry)", which expanded would be "Share additional data (in essence,
> Telemetry)".

This setting would cover more of the data collection than the "classic telemetry data".
I think it would also entail additional ping types (like loop data & other potential implementations).

Benjamin, can you confirm?
Would it be wrong from the privacy/datacollection policy perspective to say this enables Telemetry?
Or is the term "Telemetry" fine here and covering the other data collections too?
Flags: needinfo?(benjamin)
This checkbox is specifically about "telemetry", which is a term that may change in scope over time, but in terms of user expectations is a single thing. It's not "telemetry and other stuff".
Flags: needinfo?(benjamin)
Attached patch part 1 - Change the strings. (obsolete) — Splinter Review
Updates the string and removes crashReportSection.label (no longer used).
Attachment #8566005 - Attachment is obsolete: true
Thank you for your time! This patch:

- Renames |setTelemetryControlsStatus| to |setTelemetrySectionEnabled|
- Moves the |xul|caption > xul|checkbox| selector
- Removes the line height.
Attachment #8566006 - Attachment is obsolete: true
Attached patch part 3 - Add browser mochitests (obsolete) — Splinter Review
Attached patch part 1 - Change the strings. v2 (obsolete) — Splinter Review
Thank you Jared for your review!
Attachment #8566462 - Attachment is obsolete: true
Attachment #8566475 - Flags: review?(jaws)
Updated the commit message.
Attachment #8566463 - Attachment is obsolete: true
Attachment #8566476 - Flags: review?(jaws)
Attachment #8566467 - Flags: review?(ted)
Attachment #8566466 - Flags: review?(jaws)
Attachment #8566467 - Flags: review?(ted) → review+
Whoops, wrong link posted. Correct try push: https://treeherder.mozilla.org/#/jobs?repo=try&revision=724477eee476
Comment on attachment 8566466 [details] [diff] [review]
part 3 - Add browser mochitests

Review of attachment 8566466 [details] [diff] [review]:
-----------------------------------------------------------------

Holding back r+ due to the question about "policy" in browser/components/preferences/tests/browser_telemetry.js.

::: browser/components/preferences/in-content/tests/browser_telemetry.js
@@ +30,5 @@
> +            "Telemetry checkbox must be enabled if FHR is checked.");
> +
> +  // Uncheck the FHR checkbox and make sure that Telemetry checkbox gets disabled.
> +  fhrCheckbox.checked = false;
> +  fhrCheckbox.doCommand();

These two lines appear to be trying to do the same thing. Does fhrCheckbox.click() get you the same result in only one line?

::: browser/components/preferences/tests/browser_telemetry.js
@@ +56,5 @@
> +  let service = Cc["@mozilla.org/datareporting/service;1"]
> +                  .getService(Ci.nsISupports)
> +                  .wrappedJSObject;
> +  service.policy._prefs.resetBranch("datareporting.policy.");
> +  service.policy.dataSubmissionPolicyBypassNotification = true;

This policy-related changes aren't in the in-content tests. Should they be added to the in-content tests?
Comment on attachment 8566475 [details] [diff] [review]
part 1 - Change the strings. v2

Review of attachment 8566475 [details] [diff] [review]:
-----------------------------------------------------------------

::: browser/locales/en-US/chrome/browser/preferences/advanced.dtd
@@ +38,1 @@
>  <!ENTITY enableTelemetry.accesskey       "T">

Sorry, I missed this on the first review pass, but the entity name for enableTelemetry.accesskey will need to be updated to enableTelemetyData.accesskey so that the prefix remains consistent between the two strings. This helps localizers keep the accesskey up to date when the string being translated changes.
Attachment #8566475 - Flags: review?(jaws) → feedback+
What are the plans for migrating users who may have Telemetry enabled but FHR disabled?
Status: NEW → ASSIGNED
Flags: needinfo?(benjamin)
Flags: needinfo?(alessio.placitelli)
My understanding of the code is that they will not be sending anything, and it's enough of a minority case that I don't care about it beyond that. Georg can you confirm that's what will happen?
Flags: needinfo?(gfritzsche)
Flags: needinfo?(benjamin)
Flags: needinfo?(alessio.placitelli)
Comment on attachment 8566476 [details] [diff] [review]
part 2 - Changes the options dialog (in content and classic) - v2

Review of attachment 8566476 [details] [diff] [review]:
-----------------------------------------------------------------

::: browser/components/preferences/advanced.xul
@@ +202,3 @@
>            </groupbox>
> +          <separator/>
> +          <separator class="groove"/>

This shouldn't be necessary for the windowed preferences, as the groupbox there already draws its own borders.

::: browser/components/preferences/in-content/advanced.js
@@ +277,5 @@
> +      // If we disable FHR, untick the telemetry checkbox.
> +      document.getElementById("submitTelemetryBox").checked = false;
> +    }
> +    document.getElementById("telemetryDataDesc").disabled = disabled;
> +    document.getElementById("telemetryLearnMore").disabled = disabled;

Looking at this more, I don't think we should disable the "Learn more" link. It removes the ability for the user to learn more about the feature and give them a reason to enable FHR as well as Telemetry.

::: browser/components/preferences/in-content/advanced.xul
@@ +226,3 @@
>        </groupbox>
> +      <separator/>
> +      <separator class="groove"/>

These separators look out of place (and the above separator seems unnecessary [just adding whitespace]). Let's ditch the separators for both in-content and windowed.

Throughout the in-content preferences we use the pre-existing groupbox captions to draw distinction between the groups. I think this approach is sufficient and we don't need to add these extra separators.

::: toolkit/themes/shared/in-content/common.inc.css
@@ +412,5 @@
>  
> +html|a[disabled="true"],
> +.text-link[disabled="true"],
> +.inline-link[disabled="true"] {
> +  color: #addcf4;

I'm a bit worried about the contrast of this text, as well as it working with high-contrast themes.

Making my recommended change of not disabling the Learn More link will make these changes unnecessary, so that provides a simple answer to my worries :)
Attachment #8566476 - Flags: review?(jaws) → feedback+
(In reply to Benjamin Smedberg  [:bsmedberg] from comment #23)
> My understanding of the code is that they will not be sending anything, and
> it's enough of a minority case that I don't care about it beyond that. Georg
> can you confirm that's what will happen?

This will be the behavior. I filed bug 1134775 to track the migration and a corner-case explicitly.
Flags: needinfo?(gfritzsche)
Fixes the accesskey entry for telemetry data.
Attachment #8566475 - Attachment is obsolete: true
Attachment #8566690 - Flags: review?(jaws)
Attachment #8566690 - Flags: review?(jaws) → review+
Thank you for your help :jaws! This patch implements all of your suggestions.
Attachment #8566476 - Attachment is obsolete: true
Attachment #8566697 - Flags: review?(jaws)
This patch uses |click()| instead of manually triggering the changes in the tests.

> This policy-related changes aren't in the in-content tests. Should they be added to the in-content tests?

No, as they were not in the in-content healthreport test as well [1].

[1] - https://hg.mozilla.org/mozilla-central/annotate/9696d1c4b3ba/browser/components/preferences/in-content/tests/browser_healthreport.js
Attachment #8566466 - Attachment is obsolete: true
Attachment #8566466 - Flags: review?(jaws)
Attachment #8566705 - Flags: review?(jaws)
Attachment #8566697 - Flags: review?(jaws) → review+
Attachment #8566705 - Flags: review?(jaws) → review+
Updated the commit message.
Attachment #8566467 - Attachment is obsolete: true
Attachment #8566967 - Flags: review+
Updated the commit message.
Attachment #8566705 - Attachment is obsolete: true
Attachment #8566968 - Flags: review+
Keywords: checkin-needed
Depends on: 1154518
Verified fixed on Windows 7 64bit, Ubuntu 13.10 32bit and Mac OSX 10.9.5 using Firefox 38 Beta 8 (buildID: 20150427090451).
Status: RESOLVED → VERIFIED
Blocks: 1775366
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: