-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Create a JS API for requesting ads enabled #16964
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
is this the work for https://bravesoftware.slack.com/archives/CELA35G5S/p1624627578005000? please file a security review when the code is ready, thanks. https://github.com/brave/security/issues/new/choose |
Yes, it is.
Okay, I will do, thank you! |
Verified
|
Brave | 1.32.75 Chromium: 95.0.4638.54 (Official Build) beta (x86_64) |
---|---|
Revision | d31a821ec901f68d0d34ccdbaea45b4c86ce543e-refs/branch-heads/4638@{#871} |
OS | macOS Version 11.6 (Build 20G165) |
1. API not available on non-Brave Talk hosts
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- open a new-tab page
- click on the
Start using Rewards
button - load
www.brave.com
- open Developer Tools and switch to the Console tab
- enter
chrome.braveRequestAdsEnabled().then(value => console.log(value))
and ensure it throwsUncaught TypeError: chrome.braveRequestAdsEnabled is not a function
- load
brave://rewards/
- toggle
Ads
toOff
- enter
chrome.braveRequestAdsEnabled().then(value => console.log(value))
and ensure it throwsUncaught TypeError: chrome.braveRequestAdsEnabled is not a function
example | example |
---|---|
![]() |
![]() |
2a. Brave Talk, Rewards & Ads enabled
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- on a new-tab page, click on
Start using Rewards
(or via other methods) - load
talk.brave.software
- click on
Start free 1:1 call
- confirm after clicking the button the dialog is dismissed and you are able to
Start a free 1:1 call
without further prompts
example | example | example |
---|---|---|
![]() |
![]() |
![]() |
2b. Brave Talk, Rewards enabled, Ads disabled
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- on a new-tab page, turn on Rewards (& Ads)
- disable Ads via the
brave://rewards
page’s toggle; Rewards should still be on) - load
talk.brave.software
- click on
Start free 1:1 call
- confirm the doorhanger notification pops up and prompts you with a button to
Turn on Brave Private Ads
- confirm after clicking the button the dialog is dismissed and you are able to
Start a free 1:1 call
without further prompts
example | example | example | example | example |
---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
2c. Brave Talk, Rewards disabled (never enabled), Ads disabled
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- load
talk.brave.software
- click on
Start free 1:1 call
- confirm the doorhanger notification popups up and prompts you with a button to
Turn on Rewards
- confirm after clicking the button the dialog is dismissed and you are able to
Start a free 1:1 call
without further prompts
example | example | example | example |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
3a. Brave Talk, Private Window
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- click on
Start using Rewards
on the new-tab page - open a new
Private Window
- load
talk.brave.software
- click on the
Start free 1:1 call
button - confirm the
Enable Rewards
doorhanger dialog doesn't display - open Developer Tools and switch to the Console tab
- enter
chrome.braveRequestAdsEnabled().then(value => console.log(value))
and ensure it returnsfalse

3b. Brave Talk, Private Window with Tor
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- open a
New Private Window with Tor
- load
talk.brave.software
- click on the
Start free 1:1 call
button - confirm the
Enable Rewards
doorhanger dialog doesn't display - open Developer Tools and switch to the Console tab
- enter
chrome.braveRequestAdsEnabled().then(value => console.log(value))
and ensure it returnsfalse

3c. Guest window
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- open a
Guest Window
- load
talk.brave.software
- click on the
Start free 1:1 call
button - confirm the
Enable Rewards
doorhanger dialog doesn't display - open Developer Tools and switch to the Console tab
- enter
chrome.braveRequestAdsEnabled().then(value => console.log(value))
and ensure it returnsfalse

4. API called without user gesture
(Skipped)
5. Brave Talk, dark mode
- on a new-tab page, click on
Start using Rewards
- open
brave://settings/appearance
and change toDark
mode - load
talk.brave.software
- click on the
Start free 1:1 call
button - ensure the popup dialogs are dark-themed
example | example |
---|---|
![]() |
![]() |
Verified PASSED
using
Brave | 1.32.84 Chromium: 95.0.4638.54 (Official Build) beta (64-bit) |
---|---|
Revision | d31a821ec901f68d0d34ccdbaea45b4c86ce543e-refs/branch-heads/4638@{#871} |
OS | Windows 10 Version 20H2 (Build 19042.1288) |
1. API not available on non-Brave Talk hosts
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- open a new-tab page
- click on the
Start using Rewards
button - load
www.brave.com
- open Developer Tools and switch to the Console tab
- enter
chrome.braveRequestAdsEnabled().then(value => console.log(value))
and ensure it throwsUncaught TypeError: chrome.braveRequestAdsEnabled is not a function
- load
brave://rewards/
- toggle
Ads
toOff
- enter
chrome.braveRequestAdsEnabled().then(value => console.log(value))
and ensure it throwsUncaught TypeError: chrome.braveRequestAdsEnabled is not a function
example | example |
---|---|
![]() |
![]() |
2a. Brave Talk, Rewards & Ads enabled
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- on a new-tab page, click on
Start using Rewards
(or via other methods) - load
talk.brave.software
- click on
Start free 1:1 call
- confirm after clicking the button the dialog is dismissed and you are able to
Start a free 1:1 call
without further prompts
example | example |
---|---|
![]() |
![]() |
2b. Brave Talk, Rewards enabled, Ads disabled
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- on a new-tab page, turn on Rewards (& Ads)
- disable Ads via the
brave://rewards
page’s toggle; Rewards should still be on) - load
talk.brave.software
- click on
Start free 1:1 call
- confirm the doorhanger notification pops up and prompts you with a button to
Turn on Brave Private Ads
- confirm after clicking the button the dialog is dismissed and you are able to
Start a free 1:1 call
without further prompts
example | example | example | example | example |
---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
2c. Brave Talk, Rewards disabled (never enabled), Ads disabled
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- load
talk.brave.software
- click on
Start free 1:1 call
- confirm the doorhanger notification popups up and prompts you with a button to
Turn on Rewards
- confirm after clicking the button the dialog is dismissed and you are able to
Start a free 1:1 call
without further prompts
example | example | example | example |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
3a. Brave Talk, Private Window
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- click on
Start using Rewards
on the new-tab page - open a new
Private Window
- load
talk.brave.software
- click on the
Start free 1:1 call
button - confirm the
Enable Rewards
doorhanger dialog doesn't display - open Developer Tools and switch to the Console tab
- enter
chrome.braveRequestAdsEnabled().then(value => console.log(value))
and ensure it returnsfalse
example | example |
---|---|
![]() |
![]() |
3b. Brave Talk, Private Window with Tor
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- open a
New Private Window with Tor
- load
talk.brave.software
- click on the
Start free 1:1 call
button - confirm the
Enable Rewards
doorhanger dialog doesn't display - open Developer Tools and switch to the Console tab
- enter
chrome.braveRequestAdsEnabled().then(value => console.log(value))
and ensure it returnsfalse
example | example |
---|---|
![]() |
![]() |
3c. Guest window
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- open a
Guest Window
- load
talk.brave.software
- click on the
Start free 1:1 call
button - confirm the
Enable Rewards
doorhanger dialog doesn't display - open Developer Tools and switch to the Console tab
- enter
chrome.braveRequestAdsEnabled().then(value => console.log(value))
and ensure it returnsfalse
example | example |
---|---|
![]() |
![]() |
4. API called without user gesture
(Skipped)
5. Brave Talk, dark mode
- on a new-tab page, click on
Start using Rewards
- open
brave://settings/appearance
and change toDark
mode - load
talk.brave.software
- click on the
Start free 1:1 call
button - ensure the popup dialogs are dark-themed
example | example |
---|---|
![]() |
![]() |
Verified PASSED
using
Brave | 1.32.87 Chromium: 95.0.4638.69 (Official Build) beta (64-bit) |
---|---|
Revision | 6a1600ed572fedecd573b6c2b90a22fe6392a410-refs/branch-heads/4638@{#984} |
OS | Linux |
1. API not available on non-Brave Talk hosts
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- open a new-tab page
- click on the
Start using Rewards
button - load
www.brave.com
- open Developer Tools and switch to the Console tab
- enter
chrome.braveRequestAdsEnabled().then(value => console.log(value))
and ensure it throwsUncaught TypeError: chrome.braveRequestAdsEnabled is not a function
- load
brave://rewards/
- toggle
Ads
toOff
- enter
chrome.braveRequestAdsEnabled().then(value => console.log(value))
and ensure it throwsUncaught TypeError: chrome.braveRequestAdsEnabled is not a function
example | example |
---|---|
![]() |
![]() |
2a. Brave Talk, Rewards & Ads enabled
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- on a new-tab page, click on
Start using Rewards
(or via other methods) - load
talk.brave.software
- click on
Start free 1:1 call
- confirm after clicking the button the dialog is dismissed and you are able to
Start a free 1:1 call
without further prompts
example | example | example |
---|---|---|
![]() |
![]() |
![]() |
2b. Brave Talk, Rewards enabled, Ads disabled
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- on a new-tab page, turn on Rewards (& Ads)
- disable Ads via the
brave://rewards
page’s toggle; Rewards should still be on) - load
talk.brave.software
- click on
Start free 1:1 call
- confirm the doorhanger notification pops up and prompts you with a button to
Turn on Brave Private Ads
- confirm after clicking the button the dialog is dismissed and you are able to
Start a free 1:1 call
without further prompts
example | example | example | example | example |
---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
2c. Brave Talk, Rewards disabled (never enabled), Ads disabled
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- load
talk.brave.software
- click on
Start free 1:1 call
- confirm the doorhanger notification popups up and prompts you with a button to
Turn on Rewards
- confirm after clicking the button the dialog is dismissed and you are able to
Start a free 1:1 call
without further prompts
example | example | example |
---|---|---|
![]() |
![]() |
![]() |
3a. Brave Talk, Private Window
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- click on
Start using Rewards
on the new-tab page - open a new
Private Window
- load
talk.brave.software
- click on the
Start free 1:1 call
button - confirm the
Enable Rewards
doorhanger dialog doesn't display - open Developer Tools and switch to the Console tab
- enter
chrome.braveRequestAdsEnabled().then(value => console.log(value))
and ensure it returnsfalse
example | example |
---|---|
![]() |
![]() |
3b. Brave Talk, Private Window with Tor
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- open a
New Private Window with Tor
- load
talk.brave.software
- click on the
Start free 1:1 call
button - confirm the
Enable Rewards
doorhanger dialog doesn't display - open Developer Tools and switch to the Console tab
- enter
chrome.braveRequestAdsEnabled().then(value => console.log(value))
and ensure it returnsfalse
example | example |
---|---|
![]() |
![]() |
3c. Guest window
- new profile
- launch Brave using
--enable-logging=stderr --vmodule="*/variations/*"=6,"*/bat-native-ledger/*"=6,"*/brave_rewards/*"=6,"*/bat-native-ads/*"=6,"*/bat-native-confirmations/*"=6,"*/brave_ads/*"=9,"*/brave_user_model/*"=6 --brave-ads-staging --brave-ads-debug --rewards=staging=true,reconcile-interval=3 --enable-features=RequestAdsEnabledApi
- open a
Guest Window
- load
talk.brave.software
- click on the
Start free 1:1 call
button - confirm the
Enable Rewards
doorhanger dialog doesn't display - open Developer Tools and switch to the Console tab
- enter
chrome.braveRequestAdsEnabled().then(value => console.log(value))
and ensure it returnsfalse
example | example |
---|---|
![]() |
![]() |
4. API called without user gesture
(Skipped)
5. Brave Talk, dark mode
- on a new-tab page, click on
Start using Rewards
- open
brave://settings/appearance
and change toDark
mode - load
talk.brave.software
- click on the
Start free 1:1 call
button - ensure the popup dialogs are dark-themed
example | example |
---|---|
![]() |
![]() |
Verified
|
example | example |
---|---|
![]() |
![]() |
2a. Brave Talk, Rewards & Ads enabled
- fresh install
- launch Brave using
--enable-features=RequestAdsEnabledApi
- enable Rewards
- load
talk.brave.software
- tap on
Start free 1:1 call
- confirm after tapping the button the dialog is dismissed and you are able to
Start a free 1:1 call
without further prompts
example | example | example | example |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
2b. Brave Talk, Rewards enabled, Ads disabled
- fresh install
- launch Brave using
--enable-features=RequestAdsEnabledApi
- turn on Rewards (& Ads)
- disable Ads via the
brave://rewards
page’s toggle; Rewards should still be on) - load
talk.brave.software
- tap on
Start free 1:1 call
- confirm the doorhanger notification pops up and prompts you with a button to
Turn on Brave Private Ads
- confirm after tapping the button the dialog is dismissed and you are able to
Start a free 1:1 call
without further prompts
example | example | example | example | example | example |
---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
2c. Brave Talk, Rewards disabled (never enabled), Ads disabled
- fresh install
- launch Brave using
--enable-features=RequestAdsEnabledApi
- load
talk.brave.software
- tap on
Start free 1:1 call
- confirm the doorhanger notification popups up and prompts you with a button to
Turn on Rewards
- confirm after tapping the button the dialog is dismissed and you are able to
Start a free 1:1 call
without further prompts
example | example | example | example |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
3a. Brave Talk, Private Window
- fresh install
- launch Brave using
--enable-features=RequestAdsEnabledApi
- enable Rewards
- open a new
Private Window
- load
talk.brave.software
- tap on the
Start free 1:1 call
button - confirm the
Enable Rewards
doorhanger dialog doesn't display - open Developer Tools and switch to the Console tab
- enter
chrome.braveRequestAdsEnabled().then(value => console.log(value))
and ensure it returnsfalse
example | example | example | example |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
3b. Brave Talk, Private Window with Tor
(skipped; not available on Android)
4. API called without user gesture
(skipped)
5. Brave Talk, dark mode (via Experimental night mode
option on Android, from Chrome)
- open Settings -> Appearance
- choose
Dark
inThemes
- load
talk.brave.software
- tap on the
Start free 1:1 call
button - vet if chrome dialogs are dark-theme enabled (no; conferred with @aseren and we're OK for now, as Rewards doesn't dark-theme enable its dialog either)
example | example | example | example |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
Verification passed on Brave v1.32.95 on Samsung Galaxy Tab S5e (Android 10.0)
1. API not available on non-Brave Talk hosts
2a. Brave Talk, Rewards & Ads enabled
2b. Brave Talk, Rewards enabled, Ads disabled
2c. Brave Talk, Rewards disabled (never enabled), Ads disabled
3a. Brave Talk, Private Window
3b. Brave Talk, Private Window with Tor
(skipped; not available on Android)
4. API called without user gesture
(skipped)
API should ask the user for permission to enable ads.
The text was updated successfully, but these errors were encountered: