mozilla-mobile / focus-android

⚠️ Firefox Focus (Android) moved to a new repository. It is now developed and maintained as part of: https://github.com/mozilla-mobile/firefox-android
https://github.com/mozilla-mobile/firefox-android
Mozilla Public License 2.0
2.11k stars 711 forks source link

UI for easier privacy and security blockers selection #2603

Closed brampitoyo closed 5 years ago

brampitoyo commented 6 years ago

Why/User Benefit/User Problem

With the settings re-org, we will gather all of our Privacy and Security settings in one section.

As we build more blocking settings – block autoplaying audio/video, ads/banners, pre/interstitials, third-party cookies, etc. – it becomes harder and harder to know:

  1. That the more blockers are toggled on, the faster webpages will load and the less data/battery will be used, but webpages will also be more likely to behave unexpectedly.
  2. That certain blockers can be toggled on and off depending on the user’s browsing habits.

The aim for this UI is to:

  1. Explain the privacy+performance vs. site compatibility trade-offs in an understandable language
  2. Allow easy selection tailored to every individual’s risk-adverseness
    • Including the case where the individual wants to customise each blocking setting manually

By making Focus more secure and making its security options more accessible to more users, we will increase the product’s usage (average time spent, MAU/DAU, ratings, etc.) as well as usability.

What / Requirements

  1. A default (recommended) security option with a strong Focus perspective:
    • Block most ads and trackers on top websites
    • Eliminate most annoying distractions (looking at you, autoplay and pre/interstitial banners)
    • Maintain maximum site compatibility (everybody can use it as their default browser)
  2. A few other security options that empowers individuals to take control of their browsing experience
  3. A manual setting, for fine-tuned control and maximum flexibility

Acceptance Criteria (how do I know when I’m done?)

The user has a rough understanding of what each option means, and which one is right to select for their use case.

brampitoyo commented 6 years ago

Some early UI concepts:

screen shot 2018-05-14 at 4 00 22 pm
brampitoyo commented 6 years ago

After conversation with Amin, I’ve revised the UI:

screen shot 2018-05-14 at 4 02 38 pm
brampitoyo commented 6 years ago

This issue is just about the UI, but I’m particularly curious to hear from @pocmo @ekager @boek about:

brampitoyo commented 6 years ago

Note that this simplified UI will become necessary only after we build more blocking features.

Some of these features are things that we’re already considering in other products:

Some of these features may not ship in other products, but is highly relevant for a privacy-centred, distraction-less product like Firefox Focus:

@bbinto @ekager @boek what do you think about opening a separate issue to discuss these blocking features? Some we can already build today, some may not be possible at all, and some may only be possible after we ship GeckoView.

bbinto commented 6 years ago

I think that's a great idea, @brampitoyo - please go ahead and file those issues and leave them un-labeled so we can discuss in triage etc.

As for this ticket, I'll put a blocked label on it and move it to the backlog again.

Great ideas/work, Bram!

brampitoyo commented 6 years ago

Filed #2768 to discuss developing more blocking features.

pocmo commented 6 years ago

Note that this simplified UI will become necessary only after we build more blocking features.

@bbinto With that and #2768 not being in 7.0 I think this here doesn't need to be either?

pocmo commented 6 years ago

Oops, I just saw you removed the 7.0 milestone and not added it.

brampitoyo commented 6 years ago
screenshot 2x

The UI has been updated to account for the fact that Tracking Protection has been renamed to “Content Blocking” on desktop, and that we want it to be really inclusive and cover a lot of things (which includes autoplay, cookies, webfonts, javascript, etc.)

ghost commented 6 years ago

IMO there should be "Fanboy Ultimate List" + option to use custom filters (URL to filters .txt)

brampitoyo commented 6 years ago

@runboy93 Agreed on both points!

Having the ultimate list means that the user doesn’t need to turn on a bunch of other lists.

Having the ability to add custom filters means that the user can customise Content Blocking to their hearts content.

However, the really big questions are:

brampitoyo commented 6 years ago

Updated UI slightly. See notes for details.

Some notable features:

settings - privacy security - content blocking 2x

brampitoyo commented 6 years ago

Updated UI to include some icons from Firefox for Desktop Content Blocking, and some newly designed/adapted icons for Ads, Autoplay, Webfonts, JavaScript and Unencrypted Pages.

settings - privacy security - content blocking 2x

brampitoyo commented 6 years ago

Updated UI based on earlier directions that was never explored thoroughly.

The idea is to separate all of our Content Blocking settings into three “big categories” that are easy to comprehend and control.

settings - privacy security - content blocking - big buckets 2x

Three “big categories”

  1. Ads, trackers & cookies
  2. Autoplaying sounds & videos
  3. Insecure (HTTP) page

1. Ads, trackers & cookies

Under it, there are few sub-categories:

2. Autoplay

It contains two options:

3. Insecure (HTTP) sites

It contains an ON/OFF toggle.

+ 4. Advanced

This control hides a section that you don’t need to worry about most of the time.

When you tap it, it expands into:

Benefits

Forgoing the simplistic “Recommended vs. Manual Control” model has a few benefits:

CC @vesta0

brampitoyo commented 6 years ago

Updated the mockup to:

This brings us to parity with desktop, and makes ad-blocking easier to turn on (less hidden).

android proposed settings - privacy security - manual control - ads copy 2 2x

We will almost certainly block more things in the future. When we do that, we should re-evaluate how these sections are organised. The aim is to keep the Setting simple, minimal, and able to function well without any customisation (turning it on is all you need to get a good level of blocking).


Just to clarify our Content Blocking policy:

dimqua commented 6 years ago

I think the major problem with blocklists is that even those from "reputable" sources can potentially cause fasle-positives (especially aggressive ones like fanboy's enhanced tracking list). And (at least) non-experienced adblock users can't usually do much about it, since it might be hard for them to figure out which particular rules cause the false-positives. That's why I think it would be great to add an UI to see which network requests are blocked on the website you visit by blocklist's rules, so you can whitelist those rules if they case problems.

brampitoyo commented 6 years ago

@dimqua Do you have any recommendation of blocklists that we should enable by default once you turn on the “Ads” subcategory?

For “enhanced” protection, we can try adding Adblock Warning Removal List and Malware Domains, but I’m not sure if they will create more false positives than we can afford?

So, to be on the safe side, we should use EasyList, EasyPrivacy and locale-specific lists.

As for the rest of the lists that are more aggressive (Fanboy’s Enhanced Tracking List, Fanboy’s Annoyance List, Fanboy’s Cookiemonster, etc.), I’m pretty sure that we shouldn’t enable them by default.

I’m hoping that, if users know “When the site looks wrong, turn off Content Blocking”, it would be enough to solve the problem. It’s not perfect, of course. There’s no network request info available. But it’s simple, and it fixes the problem without too much fuss.

Thoughts?

dimqua commented 6 years ago

Disconnect’s Cryptomining list

What is it?

For “enhanced” protection, we can try adding Adblock Warning Removal List

I'm not sure whether anti-adblock filter lists (as well as any other anti-annoyances lists) should be enabled by default, but you may also consider ABP Anti-CV and Fanboy's problematic-sites filter lists as an options.

So, to be on the safe side, we should use EasyList, EasyPrivacy and locale-specific lists.

You may also want to enable some of the Adguard's lists, such as English filter, Spyware filter or Mobile ads filter (sadly, I don't know any other mobile and browser -specific blocklists, but there're more general ones though, like MobileAdTrackers). There is also Disconnect ad filter list (isn't it currently uses by default?).

it would be enough to solve the problem

Another available solution is using additional whitelist filter lists, such as uBlock Origin Unbreak, Brave Unblock or/and you can maintain your own. :-) See also this list of commonly white listed domains.

boek commented 6 years ago
brampitoyo commented 5 years ago

Updated the ad blocking mockups with two separate proposals (I’ll update the rest of the flow accordingly, after we agree on a proposal for ad blocking):

Proposal 1

settings - privacy security - content blocking - ads - proposal 1 2x

Proposal 2

settings - privacy security - content blocking - ads - proposal 2 2x

dimqua commented 5 years ago

Is there a possibility to use custom filter lists?

It's probably better to not combine EasyList and EasyPrivacy filters, and move the latter one to Trackers category. Since EasyPrivacy is not focus on blocking ads (advertisements), it blocks tracking, see their policy.

brampitoyo commented 5 years ago

Hi @dimqua,

Unfortunately, ad blocking will not be able to be implemented the way we would’ve liked it.

We all know how ad blocking work, but here’s a short refresher primer just in case (and for anybody else who’s reading this issue).

  1. When you visit a site, the browser sends out requests for all sorts of assets to be loaded from many places.
  2. Not all assets are essential to the page. Some are ads.
  3. An ad blocker is powered by filters. Filters contain a list of places known to serve ads. When an ad blocker sees that the browser is making requests to those places, it stops them.
  4. Ads occupy spaces. When ad requests are blocked, they leave empty spaces that aren’t pleasing to look at. An ad blocker can hide the spaces where ads would normally appear on.
  5. Sometimes, stopping ad requests will also make important parts of the sites not work properly. In these situations, the ad blocker can still load the ad, but it can still hide the spaces where ads would normally appear on – at least you won’t see it.

We believe that ad blocking is going to improve so many lives, that we want it to be implemented straight away.

In order for this to happen, we can only use the same method that’s already implemented by Tracking Protection: we can block network requests (number 3), but we cannot hide elements (number 4 and 5).

It’s not perfect, but it’s still going to make pages load faster and save bandwidth/battery. And most importantly, it can be improved when we have time to implement element hiding using future technology currently unavailable to us.

To do this, we have to take each filter list in raw/text format, strip-off all the element hiding parts, and adapt the list of network requests that are left to a format that Focus can understand. Unfortunately, this process cannot happen on each individual device. We will have to do it from our end.

Because we have to process each filter list that we choose to ship with Firefox Focus, we have to be judicious. We want to ship filters that will be most useful, but we cannot ship too many filters because it would also be too many for us to maintain.

When our future ad blocking technology is able to understand both blocking network requests and element hiding rules, then we don’t have to process each file on our end. The user’s device can do it. When that’s the case, then using any arbitrary custom filter list becomes possible.

Until then, we can only implement a subset of any filter. And in that case, we can’t even say “EasyList”. We can only say “Based on EasyList”.

Hope this is a good explanation of our situation!

brampitoyo commented 5 years ago

@dimqua One additional question for you: if we already implement Disconnect.me’s lists by default, do we still need EasyPrivacy – assuming the two does similar things, which is to block trackers?

My thinking is that we still want EasyPrivacy, just in case Disconnect.me misses aything. But it would be confusing for EasyPrivacy to be combined with other lists inside “Tracking Protection”. This was why I thought that maybe it should just be bundled together with EasyPrivacy. Thoughts?

brampitoyo commented 5 years ago

@boek @ekager After discussion with @vesta0, I’ve updated the ad blocking UI to further simplify it. Feel free to disregard my two proposals up above.

It looks like this:

dimqua commented 5 years ago

it can be improved when we have time to implement element hiding

Good to hear that!

we have to take each filter list in raw/text format, strip-off all the element hiding parts, and adapt the list of network requests that are left

But it can be done by someone else too, in theory. It means, you can provide a possibility to load custom lists in supported format. However, I'm not sure if it would be useful even for advanced users.

This was why I thought that maybe it should just be bundled together with EasyPrivacy. Thoughts?

EasyPrivacy probably contains too much entities to be bundled with other "Tracking Protection" lists, e.g. this pre-processed version of EasyPrivacy contains more than 6k domains. You may want to use a version of EasyPrivacy without international filters, but I think it's still bigger than all Disconnect.me’s lists combined.

dimqua commented 5 years ago

Do you have any plans to add and maintain any language-specific blocklists? There are plenty of them.

brampitoyo commented 5 years ago

@dimqua wrote:

Do you have any plans to add and maintain any language-specific blocklists? There are plenty of them.

If we get the ability to not only block network requests but also hide elements, then shipping more blocklists (including language-specific ones) will be possible.

For starters, we’ll no longer have to ship our own version of blocklists without element hiding rules. This will make including new lists easy.